Normandy.Behaviours.Config (normandy v1.2.0)

View Source

Explicit, per-agent selection of the pluggable behaviours.

One {module, opts} ref per behaviour plus the two first-class hook lists. Carried on BaseAgentConfig.behaviours; defaults to the all-defaults bundle, so the "everything off" path is observably identical to today.

to_pipeline/1 adapts the dispatch-path slots (policy, budget, before_hooks, after_hooks) into a %Normandy.Agents.Dispatch.Pipeline{}. Building it here (not on Dispatch) keeps the Phase 1 chokepoint untouched — the dependency points Phase 2 → Phase 1. The credential, compactor, model_catalog, session_store, and session_registry slots are not dispatch-path concerns and are not placed on the pipeline. compactor selects the :steering-boundary compaction strategy (Phase 5); session_store selects where session entries / turn state persist; it is wired here but not yet consumed by the turn loop (Phase 4 reads it).

Summary

Functions

Builds a %Dispatch.Pipeline{} from the dispatch-path slots of the bundle.

Types

hook()

@type hook() :: (term(), term() -> term()) | (term(), term(), term() -> term())

ref()

@type ref() :: {module(), keyword()}

t()

@type t() :: %Normandy.Behaviours.Config{
  after_hooks: [hook()],
  before_hooks: [hook()],
  budget: ref(),
  compactor: ref(),
  credential: ref(),
  model_catalog: ref(),
  policy: ref(),
  session_registry: ref(),
  session_store: ref()
}

Functions

to_pipeline(bundle)

@spec to_pipeline(t() | nil) :: Normandy.Agents.Dispatch.Pipeline.t()

Builds a %Dispatch.Pipeline{} from the dispatch-path slots of the bundle.

nil resolves to the default bundle. execute_fn is set to the bare executor (matching Dispatch.default_pipeline/0); callers that need telemetry (e.g. BaseAgent) override execute_fn after building.