/** * defineInjection — the unified injection factory (one factory, a `type` * discriminant for the flavor). * * The named factories (`defineInstruction`, `defineSkill`, `defineSteering`, * `defineFact`) are self-documenting sugar — prefer them when you know the * flavor at author time. `defineInjection` is for the cases where the flavor is * chosen *programmatically* (config-driven pipelines, a UI that lets users add * any flavor, table-driven tests) — pass `type` and the same options the named * factory takes: * * @example * // these two are equivalent * defineInstruction({ id: 'calm', prompt: '…', activeWhen }); * defineInjection({ type: 'instruction', id: 'calm', prompt: '…', activeWhen }); * * @example // flavor decided at runtime * const inj = defineInjection({ type: cfg.flavor, id: cfg.id, ...cfg.opts }); * * All four flavors return the same `Injection` primitive — `type` simply routes * to the matching named factory. RAG and Memory are NOT covered here: they are * separate subsystems (retrieval + stores), not plain Injections. */ import type { Injection } from '../types.js'; import { type DefineFactOptions } from './defineFact.js'; import { type DefineInstructionOptions } from './defineInstruction.js'; import { type DefineSkillOptions } from './defineSkill.js'; import { type DefineSteeringOptions } from './defineSteering.js'; /** Discriminated union — `type` picks the flavor; the rest are that flavor's options. */ export type DefineInjectionOptions = ({ type: 'instruction'; } & DefineInstructionOptions) | ({ type: 'skill'; } & DefineSkillOptions) | ({ type: 'steering'; } & DefineSteeringOptions) | ({ type: 'fact'; } & DefineFactOptions); /** The flavor discriminants `defineInjection` accepts. */ export type InjectionFlavor = DefineInjectionOptions['type']; export declare function defineInjection(opts: DefineInjectionOptions): Injection;