/** * `applyArm` — the arm-shaped door onto the UNCHANGED removal machinery. * * The asymmetry this file exists to make visible: for a REMOVAL the library can * perform the intervention, because a removal is a filter over inputs and * `applyAblations` is that filter. For a SUBSTITUTION it cannot — replacing a * scorer happens inside the consumer's construction code, which no library can * reach into. So an arm's two halves are applied in two different places and by * two different parties: * * - `arm.ablations` → HERE, by `applyAblations`, byte-for-byte the same call * an `AblationRunner` already makes. No new filtering logic exists. * - `arm.facets` → by the consumer's own builder, which is why the engine * VERIFIES them against the run manifest afterwards instead of applying * them (see `manifest.ts`). * * There is deliberately no `applyFacets`. A function that took `{ scorer: * 'embedding' }` and returned something the consumer still had to interpret * would be a rename of the problem wearing the costume of a solution. */ import { type AblationTargets } from '../ablation.js'; import type { StrategyArm } from './types.js'; /** Anything with a stable id — mirrors `applyAblations`' own constraints. */ interface Identified { readonly id: string; } /** Anything with a named schema — the library's `Tool` fits. */ interface NamedTool { readonly schema: { readonly name: string; }; } /** * Apply this arm's REMOVALS to the inputs the agent is constructed from. An arm * with no `ablations` returns the targets unfiltered — the honest identity. * * @example inside an ArmRunner * ```ts * const runner: ArmRunner = async (arm, { seed }) => { * const { tools, injections } = applyArm(arm, { tools: ALL_TOOLS, injections: ALL_FACTS }); * const agent = buildAgent({ retrieval: arm.facets?.memory?.retrieval, tools, injections, seed }); * const events: AgentfootprintEvent[] = []; * agent.on('*', (e) => events.push(e)); * const output = await agent.run(question); * return { output, manifest: manifestFromEvents(events) }; * }; * ``` */ export declare function applyArm(arm: StrategyArm, targets: AblationTargets): { tools: readonly TTool[]; injections: readonly TInjection[]; memoryEntries: readonly TMemoryEntry[]; }; export {}; //# sourceMappingURL=apply.d.ts.map