@kb-labs/agent-sdk 2.119.0-canary.f8394d5fd → 2.119.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js.map +1 -1
- package/dist/testing.js.map +1 -1
- package/package.json +5 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/middleware.ts","../src/sdk.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Middleware interface for the Agent SDK.\n *\n * Middleware hooks into the execution pipeline at well-defined points.\n * Implement only the hooks you need — all are optional.\n *\n * Ordering:\n * before-hooks (onStart, beforeIteration, beforeLLMCall, beforeToolExec) — ascending order\n * after-hooks (afterToolExec, afterLLMCall, afterIteration, onStop, onComplete) — descending order\n *\n * Fail policies:\n * 'fail-open' — if middleware throws, log and continue (default, for observers)\n * 'fail-closed' — if middleware throws, stop the run (for critical guards)\n */\n\nimport type { LLMMessage } from '@kb-labs/sdk';\nimport type { RunContext, LLMCtx, LLMCallPatch, LLMCallResult, ToolExecCtx, ToolOutput } from './contexts.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// ControlAction — returned by beforeIteration to control the loop\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ControlAction = 'continue' | 'stop' | 'escalate';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// AgentMiddleware interface\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface AgentMiddleware {\n /** Unique name for logging and deduplication */\n name: string;\n\n /**\n * Execution order. Lower = runs first in before-hooks, last in after-hooks.\n * Core middlewares: 0–99. Custom: 100+.\n */\n order: number;\n\n config?: {\n /** On error: continue silently ('fail-open') or stop run ('fail-closed'). Default: 'fail-open' */\n failPolicy: 'fail-open' | 'fail-closed';\n /** Hook timeout in ms (0 = no timeout). Default: 5000 */\n timeoutMs?: number;\n };\n\n /** Called once at pipeline construction — if returns false, middleware is skipped entirely */\n enabled?(): boolean;\n\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n\n /** Called once when the run starts, before the first iteration */\n onStart?(ctx: RunContext): Promise<void> | void;\n\n /** Called when the run ends for any reason (complete, abort, error) */\n onStop?(ctx: RunContext, reason: string): Promise<void> | void;\n\n /** Called only on successful completion, after onStop */\n onComplete?(ctx: RunContext): Promise<void> | void;\n\n // ── Per-iteration ──────────────────────────────────────────────────────────\n\n /**\n * Called before each iteration.\n * Return 'stop' to end the run early.\n * Return 'escalate' to trigger tier escalation.\n * Return 'continue' (or undefined) to proceed normally.\n */\n beforeIteration?(ctx: RunContext): Promise<ControlAction> | ControlAction;\n\n /** Called after each iteration — useful for metrics, logging, snapshots */\n afterIteration?(ctx: RunContext): Promise<void> | void;\n\n // ── LLM call ──────────────────────────────────────────────────────────────\n\n /**\n * Called before the LLM API call.\n * Returns a patch of what to change in the request (messages, tools, temperature).\n * Returning undefined (or empty object) = no change.\n * Patches from all middlewares are merged in order.\n */\n beforeLLMCall?(ctx: LLMCtx): Promise<LLMCallPatch | undefined> | LLMCallPatch | undefined;\n\n /** Called after the LLM responded. Read-only — cannot modify the response. */\n afterLLMCall?(ctx: LLMCtx, result: LLMCallResult): Promise<void> | void;\n\n // ── Tool execution ────────────────────────────────────────────────────────\n\n /**\n * Called before each tool execution.\n * Return 'skip' to prevent the tool from running (output will be empty).\n * Return 'execute' (or undefined) to proceed.\n */\n beforeToolExec?(ctx: ToolExecCtx): Promise<'execute' | 'skip'> | 'execute' | 'skip';\n\n /** Called after each tool execution (even if skipped or errored) */\n afterToolExec?(ctx: ToolExecCtx, result: ToolOutput): Promise<void> | void;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// BaseMiddleware — zero-boilerplate base class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Extend this to implement only the hooks you need.\n *\n * @example\n * class RateLimitMiddleware extends BaseMiddleware {\n * name = 'rate-limit';\n * order = 50;\n *\n * async beforeIteration(ctx: RunContext): Promise<ControlAction> {\n * if (this.isOverLimit()) return 'stop';\n * return 'continue';\n * }\n * }\n */\nexport abstract class BaseMiddleware implements AgentMiddleware {\n abstract name: string;\n abstract order: number;\n config = { failPolicy: 'fail-open' as const };\n}\n\n// Suppress unused import warning — LLMMessage is used in beforeLLMCall signature\n// via LLMCallPatch which references LLMMessage[] through contexts.ts\nvoid (null as unknown as LLMMessage);\n","/**\n * AgentSDK — composable builder + IAgentSDK interface for mocking in tests.\n *\n * Usage:\n * import { AgentSDK } from '@kb-labs/agent-sdk';\n * import { CoreToolPack, PromptInjectionGuard } from '@kb-labs/agent-core';\n *\n * const agent = new AgentSDK()\n * .withProfile({ id: 'default', role: 'orchestrator' })\n * .register(new CoreToolPack())\n * .addGuard(new PromptInjectionGuard())\n * .use(new AuditMiddleware());\n *\n * extend() returns a deep clone — changes never affect the original:\n * const subAgent = agent.extend().withProfile(atomicProfile);\n *\n * createRunner() is implemented by agent-core (injected via AgentSDK.setRunnerFactory()).\n * agent-sdk itself has no runtime dependency on agent-core.\n */\n\nimport type { AgentConfig, ToolPack } from '@kb-labs/agent-contracts';\nimport type { AgentMiddleware } from './middleware.js';\nimport type { AgentTracer, TraceLevel } from './tracer.js';\nimport type { AgentMode } from './mode.js';\nimport type { AgentMemory } from './memory.js';\nimport type { AgentProfile } from './profile.js';\nimport type { ExecutionLoop } from './loop.js';\nimport type { ContextStrategy } from './context-strategy.js';\nimport type { AgentErrorHandler } from './error-handler.js';\nimport type { StopCondition } from './stop-condition.js';\nimport type { OutputProcessor } from './output-processor.js';\nimport type { ToolGuard } from './guard.js';\nimport type { InputNormalizer } from './input-normalizer.js';\nimport type {\n MemoryCapability,\n ModePolicy,\n PromptContextSelector,\n PromptProjector,\n RepositoryDiagnosticsProvider,\n RepositoryProbe,\n ResponseRequirementsSelector,\n RuntimeProfile,\n RunEvaluator,\n SessionRecallResolver,\n ToolCapabilityResolver,\n RuntimeObserver,\n TurnInterpreter,\n} from './runtime-extensions.js';\nimport type { TaskResult } from '@kb-labs/agent-contracts';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// IAgentRunner — the executable unit produced by sdk.createRunner()\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface IAgentRunner {\n readonly agentId: string;\n execute(task: string): Promise<TaskResult>;\n requestStop(): void;\n injectUserContext(message: string): void;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// RunnerFactory — injected by agent-core to break circular dep\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type RunnerFactory = (config: AgentConfig, sdk: AgentSDK) => IAgentRunner;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// IAgentSDK — interface for mocking in tests\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface IAgentSDK {\n use(middleware: AgentMiddleware): IAgentSDK;\n register(pack: ToolPack): IAgentSDK;\n withTracer(tracer: AgentTracer, level?: TraceLevel): IAgentSDK;\n withMode(mode: AgentMode): IAgentSDK;\n withMemory(memory: AgentMemory): IAgentSDK;\n withProfile(profile: AgentProfile): IAgentSDK;\n withLoop(loop: ExecutionLoop): IAgentSDK;\n withContextStrategy(strategy: ContextStrategy): IAgentSDK;\n withErrorHandler(handler: AgentErrorHandler): IAgentSDK;\n addStopCondition(condition: StopCondition): IAgentSDK;\n addOutputProcessor(processor: OutputProcessor): IAgentSDK;\n addGuard(guard: ToolGuard): IAgentSDK;\n addInputNormalizer(normalizer: InputNormalizer): IAgentSDK;\n registerModePolicy(policy: ModePolicy): IAgentSDK;\n registerMemoryCapability(capability: MemoryCapability): IAgentSDK;\n registerPromptContextSelector(selector: PromptContextSelector): IAgentSDK;\n registerResponseRequirementsSelector(selector: ResponseRequirementsSelector): IAgentSDK;\n registerSessionRecallResolver(resolver: SessionRecallResolver): IAgentSDK;\n registerRepositoryDiagnosticsProvider(provider: RepositoryDiagnosticsProvider): IAgentSDK;\n registerRepositoryProbe(probe: RepositoryProbe): IAgentSDK;\n registerToolCapabilityResolver(resolver: ToolCapabilityResolver): IAgentSDK;\n registerRuntimeProfile(profile: RuntimeProfile): IAgentSDK;\n registerPromptProjector(projector: PromptProjector): IAgentSDK;\n registerRunEvaluator(evaluator: RunEvaluator): IAgentSDK;\n registerObserver(observer: RuntimeObserver): IAgentSDK;\n registerTurnInterpreter(interpreter: TurnInterpreter): IAgentSDK;\n extend(): IAgentSDK;\n createRunner(config: AgentConfig): IAgentRunner;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// SdkState — internal snapshot (private, not exported)\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface SdkState {\n middlewares: AgentMiddleware[];\n packs: ToolPack[];\n tracer: AgentTracer | null;\n traceLevel: TraceLevel;\n modes: AgentMode[];\n memory: AgentMemory | null;\n profile: AgentProfile | null;\n loop: ExecutionLoop | null;\n contextStrategy: ContextStrategy | null;\n errorHandler: AgentErrorHandler | null;\n stopConditions: StopCondition[];\n outputProcessors: OutputProcessor[];\n guards: ToolGuard[];\n inputNormalizers: InputNormalizer[];\n modePolicies: ModePolicy[];\n memoryCapabilities: MemoryCapability[];\n promptContextSelectors: PromptContextSelector[];\n responseRequirementsSelectors: ResponseRequirementsSelector[];\n sessionRecallResolvers: SessionRecallResolver[];\n repositoryDiagnosticsProviders: RepositoryDiagnosticsProvider[];\n repositoryProbes: RepositoryProbe[];\n toolCapabilityResolvers: ToolCapabilityResolver[];\n runtimeProfiles: RuntimeProfile[];\n promptProjectors: PromptProjector[];\n runEvaluators: RunEvaluator[];\n observers: RuntimeObserver[];\n turnInterpreters: TurnInterpreter[];\n}\n\nfunction emptyState(): SdkState {\n return {\n middlewares: [],\n packs: [],\n tracer: null,\n traceLevel: 'normal',\n modes: [],\n memory: null,\n profile: null,\n loop: null,\n contextStrategy: null,\n errorHandler: null,\n stopConditions: [],\n outputProcessors: [],\n guards: [],\n inputNormalizers: [],\n modePolicies: [],\n memoryCapabilities: [],\n promptContextSelectors: [],\n responseRequirementsSelectors: [],\n sessionRecallResolvers: [],\n repositoryDiagnosticsProviders: [],\n repositoryProbes: [],\n toolCapabilityResolvers: [],\n runtimeProfiles: [],\n promptProjectors: [],\n runEvaluators: [],\n observers: [],\n turnInterpreters: [],\n };\n}\n\nfunction cloneState(s: SdkState): SdkState {\n return {\n middlewares: [...s.middlewares],\n packs: [...s.packs],\n tracer: s.tracer,\n traceLevel: s.traceLevel,\n modes: [...s.modes],\n memory: s.memory,\n profile: s.profile,\n loop: s.loop,\n contextStrategy: s.contextStrategy,\n errorHandler: s.errorHandler,\n stopConditions: [...s.stopConditions],\n outputProcessors: [...s.outputProcessors],\n guards: [...s.guards],\n inputNormalizers: [...s.inputNormalizers],\n modePolicies: [...s.modePolicies],\n memoryCapabilities: [...s.memoryCapabilities],\n promptContextSelectors: [...s.promptContextSelectors],\n responseRequirementsSelectors: [...s.responseRequirementsSelectors],\n sessionRecallResolvers: [...s.sessionRecallResolvers],\n repositoryDiagnosticsProviders: [...s.repositoryDiagnosticsProviders],\n repositoryProbes: [...s.repositoryProbes],\n toolCapabilityResolvers: [...s.toolCapabilityResolvers],\n runtimeProfiles: [...s.runtimeProfiles],\n promptProjectors: [...s.promptProjectors],\n runEvaluators: [...s.runEvaluators],\n observers: [...s.observers],\n turnInterpreters: [...s.turnInterpreters],\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// AgentSDK — concrete class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Module-level runner factory — injected once by agent-core at startup.\n * agent-sdk itself has no runtime dependency on agent-core.\n *\n * @example (in agent-core's entry point):\n * AgentSDK.setRunnerFactory((config, sdk) => new AgentRunner(config, sdk));\n */\nlet _runnerFactory: RunnerFactory | null = null;\n\nexport class AgentSDK implements IAgentSDK {\n private readonly _state: SdkState;\n\n constructor(state?: SdkState) {\n this._state = state ?? emptyState();\n }\n\n // ── Static factory injection ────────────────────────────────────────────\n\n static setRunnerFactory(factory: RunnerFactory): void {\n _runnerFactory = factory;\n }\n\n // ── Extension points ────────────────────────────────────────────────────\n\n use(middleware: AgentMiddleware): this {\n this._state.middlewares.push(middleware);\n return this;\n }\n\n register(pack: ToolPack): this {\n this._state.packs.push(pack);\n return this;\n }\n\n withTracer(tracer: AgentTracer, level: TraceLevel = 'normal'): this {\n this._state.tracer = tracer;\n this._state.traceLevel = level;\n return this;\n }\n\n withMode(mode: AgentMode): this {\n this._state.modes.push(mode);\n return this;\n }\n\n withMemory(memory: AgentMemory): this {\n this._state.memory = memory;\n return this;\n }\n\n withProfile(profile: AgentProfile): this {\n this._state.profile = profile;\n return this;\n }\n\n withLoop(loop: ExecutionLoop): this {\n this._state.loop = loop;\n return this;\n }\n\n withContextStrategy(strategy: ContextStrategy): this {\n this._state.contextStrategy = strategy;\n return this;\n }\n\n withErrorHandler(handler: AgentErrorHandler): this {\n this._state.errorHandler = handler;\n return this;\n }\n\n addStopCondition(condition: StopCondition): this {\n this._state.stopConditions.push(condition);\n return this;\n }\n\n addOutputProcessor(processor: OutputProcessor): this {\n this._state.outputProcessors.push(processor);\n return this;\n }\n\n addGuard(guard: ToolGuard): this {\n this._state.guards.push(guard);\n return this;\n }\n\n addInputNormalizer(normalizer: InputNormalizer): this {\n this._state.inputNormalizers.push(normalizer);\n return this;\n }\n\n registerModePolicy(policy: ModePolicy): this {\n this._state.modePolicies.push(policy);\n return this;\n }\n\n registerMemoryCapability(capability: MemoryCapability): this {\n this._state.memoryCapabilities.push(capability);\n return this;\n }\n\n registerPromptContextSelector(selector: PromptContextSelector): this {\n this._state.promptContextSelectors.push(selector);\n return this;\n }\n\n registerResponseRequirementsSelector(selector: ResponseRequirementsSelector): this {\n this._state.responseRequirementsSelectors.push(selector);\n return this;\n }\n\n registerSessionRecallResolver(resolver: SessionRecallResolver): this {\n this._state.sessionRecallResolvers.push(resolver);\n return this;\n }\n\n registerRepositoryDiagnosticsProvider(provider: RepositoryDiagnosticsProvider): this {\n this._state.repositoryDiagnosticsProviders.push(provider);\n return this;\n }\n\n registerRepositoryProbe(probe: RepositoryProbe): this {\n this._state.repositoryProbes.push(probe);\n return this;\n }\n\n registerToolCapabilityResolver(resolver: ToolCapabilityResolver): this {\n this._state.toolCapabilityResolvers.push(resolver);\n return this;\n }\n\n registerRuntimeProfile(profile: RuntimeProfile): this {\n this._state.runtimeProfiles.push(profile);\n return this;\n }\n\n registerPromptProjector(projector: PromptProjector): this {\n this._state.promptProjectors.push(projector);\n return this;\n }\n\n registerRunEvaluator(evaluator: RunEvaluator): this {\n this._state.runEvaluators.push(evaluator);\n return this;\n }\n\n registerObserver(observer: RuntimeObserver): this {\n this._state.observers.push(observer);\n return this;\n }\n\n registerTurnInterpreter(interpreter: TurnInterpreter): this {\n this._state.turnInterpreters.push(interpreter);\n return this;\n }\n\n // ── Clone ───────────────────────────────────────────────────────────────\n\n extend(): AgentSDK {\n return new AgentSDK(cloneState(this._state));\n }\n\n // ── Read-only access for agent-core ─────────────────────────────────────\n\n get middlewares(): ReadonlyArray<AgentMiddleware> { return this._state.middlewares; }\n get packs(): ReadonlyArray<ToolPack> { return this._state.packs; }\n get tracer(): AgentTracer | null { return this._state.tracer; }\n get traceLevel(): TraceLevel { return this._state.traceLevel; }\n get modes(): ReadonlyArray<AgentMode> { return this._state.modes; }\n get memory(): AgentMemory | null { return this._state.memory; }\n get profile(): AgentProfile | null { return this._state.profile; }\n get loop(): ExecutionLoop | null { return this._state.loop; }\n get contextStrategy(): ContextStrategy | null { return this._state.contextStrategy; }\n get errorHandler(): AgentErrorHandler | null { return this._state.errorHandler; }\n get stopConditions(): ReadonlyArray<StopCondition> { return this._state.stopConditions; }\n get outputProcessors(): ReadonlyArray<OutputProcessor> { return this._state.outputProcessors; }\n get guards(): ReadonlyArray<ToolGuard> { return this._state.guards; }\n get inputNormalizers(): ReadonlyArray<InputNormalizer> { return this._state.inputNormalizers; }\n get modePolicies(): ReadonlyArray<ModePolicy> { return this._state.modePolicies; }\n get memoryCapabilities(): ReadonlyArray<MemoryCapability> { return this._state.memoryCapabilities; }\n get promptContextSelectors(): ReadonlyArray<PromptContextSelector> { return this._state.promptContextSelectors; }\n get responseRequirementsSelectors(): ReadonlyArray<ResponseRequirementsSelector> { return this._state.responseRequirementsSelectors; }\n get sessionRecallResolvers(): ReadonlyArray<SessionRecallResolver> { return this._state.sessionRecallResolvers; }\n get repositoryDiagnosticsProviders(): ReadonlyArray<RepositoryDiagnosticsProvider> { return this._state.repositoryDiagnosticsProviders; }\n get repositoryProbes(): ReadonlyArray<RepositoryProbe> { return this._state.repositoryProbes; }\n get toolCapabilityResolvers(): ReadonlyArray<ToolCapabilityResolver> { return this._state.toolCapabilityResolvers; }\n get runtimeProfiles(): ReadonlyArray<RuntimeProfile> { return this._state.runtimeProfiles; }\n get promptProjectors(): ReadonlyArray<PromptProjector> { return this._state.promptProjectors; }\n get runEvaluators(): ReadonlyArray<RunEvaluator> { return this._state.runEvaluators; }\n get observers(): ReadonlyArray<RuntimeObserver> { return this._state.observers; }\n get turnInterpreters(): ReadonlyArray<TurnInterpreter> { return this._state.turnInterpreters; }\n\n // ── Build ───────────────────────────────────────────────────────────────\n\n createRunner(config: AgentConfig): IAgentRunner {\n if (!_runnerFactory) {\n throw new Error(\n 'No runner factory registered. Call AgentSDK.setRunnerFactory() from agent-core before createRunner().',\n );\n }\n return _runnerFactory(config, this);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/plugins/agents/sdk/src/middleware.ts","../../home/runner/work/kb-labs/kb-labs/plugins/agents/sdk/src/sdk.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Middleware interface for the Agent SDK.\n *\n * Middleware hooks into the execution pipeline at well-defined points.\n * Implement only the hooks you need — all are optional.\n *\n * Ordering:\n * before-hooks (onStart, beforeIteration, beforeLLMCall, beforeToolExec) — ascending order\n * after-hooks (afterToolExec, afterLLMCall, afterIteration, onStop, onComplete) — descending order\n *\n * Fail policies:\n * 'fail-open' — if middleware throws, log and continue (default, for observers)\n * 'fail-closed' — if middleware throws, stop the run (for critical guards)\n */\n\nimport type { LLMMessage } from '@kb-labs/sdk';\nimport type { RunContext, LLMCtx, LLMCallPatch, LLMCallResult, ToolExecCtx, ToolOutput } from './contexts.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// ControlAction — returned by beforeIteration to control the loop\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ControlAction = 'continue' | 'stop' | 'escalate';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// AgentMiddleware interface\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface AgentMiddleware {\n /** Unique name for logging and deduplication */\n name: string;\n\n /**\n * Execution order. Lower = runs first in before-hooks, last in after-hooks.\n * Core middlewares: 0–99. Custom: 100+.\n */\n order: number;\n\n config?: {\n /** On error: continue silently ('fail-open') or stop run ('fail-closed'). Default: 'fail-open' */\n failPolicy: 'fail-open' | 'fail-closed';\n /** Hook timeout in ms (0 = no timeout). Default: 5000 */\n timeoutMs?: number;\n };\n\n /** Called once at pipeline construction — if returns false, middleware is skipped entirely */\n enabled?(): boolean;\n\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n\n /** Called once when the run starts, before the first iteration */\n onStart?(ctx: RunContext): Promise<void> | void;\n\n /** Called when the run ends for any reason (complete, abort, error) */\n onStop?(ctx: RunContext, reason: string): Promise<void> | void;\n\n /** Called only on successful completion, after onStop */\n onComplete?(ctx: RunContext): Promise<void> | void;\n\n // ── Per-iteration ──────────────────────────────────────────────────────────\n\n /**\n * Called before each iteration.\n * Return 'stop' to end the run early.\n * Return 'escalate' to trigger tier escalation.\n * Return 'continue' (or undefined) to proceed normally.\n */\n beforeIteration?(ctx: RunContext): Promise<ControlAction> | ControlAction;\n\n /** Called after each iteration — useful for metrics, logging, snapshots */\n afterIteration?(ctx: RunContext): Promise<void> | void;\n\n // ── LLM call ──────────────────────────────────────────────────────────────\n\n /**\n * Called before the LLM API call.\n * Returns a patch of what to change in the request (messages, tools, temperature).\n * Returning undefined (or empty object) = no change.\n * Patches from all middlewares are merged in order.\n */\n beforeLLMCall?(ctx: LLMCtx): Promise<LLMCallPatch | undefined> | LLMCallPatch | undefined;\n\n /** Called after the LLM responded. Read-only — cannot modify the response. */\n afterLLMCall?(ctx: LLMCtx, result: LLMCallResult): Promise<void> | void;\n\n // ── Tool execution ────────────────────────────────────────────────────────\n\n /**\n * Called before each tool execution.\n * Return 'skip' to prevent the tool from running (output will be empty).\n * Return 'execute' (or undefined) to proceed.\n */\n beforeToolExec?(ctx: ToolExecCtx): Promise<'execute' | 'skip'> | 'execute' | 'skip';\n\n /** Called after each tool execution (even if skipped or errored) */\n afterToolExec?(ctx: ToolExecCtx, result: ToolOutput): Promise<void> | void;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// BaseMiddleware — zero-boilerplate base class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Extend this to implement only the hooks you need.\n *\n * @example\n * class RateLimitMiddleware extends BaseMiddleware {\n * name = 'rate-limit';\n * order = 50;\n *\n * async beforeIteration(ctx: RunContext): Promise<ControlAction> {\n * if (this.isOverLimit()) return 'stop';\n * return 'continue';\n * }\n * }\n */\nexport abstract class BaseMiddleware implements AgentMiddleware {\n abstract name: string;\n abstract order: number;\n config = { failPolicy: 'fail-open' as const };\n}\n\n// Suppress unused import warning — LLMMessage is used in beforeLLMCall signature\n// via LLMCallPatch which references LLMMessage[] through contexts.ts\nvoid (null as unknown as LLMMessage);\n","/**\n * AgentSDK — composable builder + IAgentSDK interface for mocking in tests.\n *\n * Usage:\n * import { AgentSDK } from '@kb-labs/agent-sdk';\n * import { CoreToolPack, PromptInjectionGuard } from '@kb-labs/agent-core';\n *\n * const agent = new AgentSDK()\n * .withProfile({ id: 'default', role: 'orchestrator' })\n * .register(new CoreToolPack())\n * .addGuard(new PromptInjectionGuard())\n * .use(new AuditMiddleware());\n *\n * extend() returns a deep clone — changes never affect the original:\n * const subAgent = agent.extend().withProfile(atomicProfile);\n *\n * createRunner() is implemented by agent-core (injected via AgentSDK.setRunnerFactory()).\n * agent-sdk itself has no runtime dependency on agent-core.\n */\n\nimport type { AgentConfig, ToolPack } from '@kb-labs/agent-contracts';\nimport type { AgentMiddleware } from './middleware.js';\nimport type { AgentTracer, TraceLevel } from './tracer.js';\nimport type { AgentMode } from './mode.js';\nimport type { AgentMemory } from './memory.js';\nimport type { AgentProfile } from './profile.js';\nimport type { ExecutionLoop } from './loop.js';\nimport type { ContextStrategy } from './context-strategy.js';\nimport type { AgentErrorHandler } from './error-handler.js';\nimport type { StopCondition } from './stop-condition.js';\nimport type { OutputProcessor } from './output-processor.js';\nimport type { ToolGuard } from './guard.js';\nimport type { InputNormalizer } from './input-normalizer.js';\nimport type {\n MemoryCapability,\n ModePolicy,\n PromptContextSelector,\n PromptProjector,\n RepositoryDiagnosticsProvider,\n RepositoryProbe,\n ResponseRequirementsSelector,\n RuntimeProfile,\n RunEvaluator,\n SessionRecallResolver,\n ToolCapabilityResolver,\n RuntimeObserver,\n TurnInterpreter,\n} from './runtime-extensions.js';\nimport type { TaskResult } from '@kb-labs/agent-contracts';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// IAgentRunner — the executable unit produced by sdk.createRunner()\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface IAgentRunner {\n readonly agentId: string;\n execute(task: string): Promise<TaskResult>;\n requestStop(): void;\n injectUserContext(message: string): void;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// RunnerFactory — injected by agent-core to break circular dep\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type RunnerFactory = (config: AgentConfig, sdk: AgentSDK) => IAgentRunner;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// IAgentSDK — interface for mocking in tests\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface IAgentSDK {\n use(middleware: AgentMiddleware): IAgentSDK;\n register(pack: ToolPack): IAgentSDK;\n withTracer(tracer: AgentTracer, level?: TraceLevel): IAgentSDK;\n withMode(mode: AgentMode): IAgentSDK;\n withMemory(memory: AgentMemory): IAgentSDK;\n withProfile(profile: AgentProfile): IAgentSDK;\n withLoop(loop: ExecutionLoop): IAgentSDK;\n withContextStrategy(strategy: ContextStrategy): IAgentSDK;\n withErrorHandler(handler: AgentErrorHandler): IAgentSDK;\n addStopCondition(condition: StopCondition): IAgentSDK;\n addOutputProcessor(processor: OutputProcessor): IAgentSDK;\n addGuard(guard: ToolGuard): IAgentSDK;\n addInputNormalizer(normalizer: InputNormalizer): IAgentSDK;\n registerModePolicy(policy: ModePolicy): IAgentSDK;\n registerMemoryCapability(capability: MemoryCapability): IAgentSDK;\n registerPromptContextSelector(selector: PromptContextSelector): IAgentSDK;\n registerResponseRequirementsSelector(selector: ResponseRequirementsSelector): IAgentSDK;\n registerSessionRecallResolver(resolver: SessionRecallResolver): IAgentSDK;\n registerRepositoryDiagnosticsProvider(provider: RepositoryDiagnosticsProvider): IAgentSDK;\n registerRepositoryProbe(probe: RepositoryProbe): IAgentSDK;\n registerToolCapabilityResolver(resolver: ToolCapabilityResolver): IAgentSDK;\n registerRuntimeProfile(profile: RuntimeProfile): IAgentSDK;\n registerPromptProjector(projector: PromptProjector): IAgentSDK;\n registerRunEvaluator(evaluator: RunEvaluator): IAgentSDK;\n registerObserver(observer: RuntimeObserver): IAgentSDK;\n registerTurnInterpreter(interpreter: TurnInterpreter): IAgentSDK;\n extend(): IAgentSDK;\n createRunner(config: AgentConfig): IAgentRunner;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// SdkState — internal snapshot (private, not exported)\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface SdkState {\n middlewares: AgentMiddleware[];\n packs: ToolPack[];\n tracer: AgentTracer | null;\n traceLevel: TraceLevel;\n modes: AgentMode[];\n memory: AgentMemory | null;\n profile: AgentProfile | null;\n loop: ExecutionLoop | null;\n contextStrategy: ContextStrategy | null;\n errorHandler: AgentErrorHandler | null;\n stopConditions: StopCondition[];\n outputProcessors: OutputProcessor[];\n guards: ToolGuard[];\n inputNormalizers: InputNormalizer[];\n modePolicies: ModePolicy[];\n memoryCapabilities: MemoryCapability[];\n promptContextSelectors: PromptContextSelector[];\n responseRequirementsSelectors: ResponseRequirementsSelector[];\n sessionRecallResolvers: SessionRecallResolver[];\n repositoryDiagnosticsProviders: RepositoryDiagnosticsProvider[];\n repositoryProbes: RepositoryProbe[];\n toolCapabilityResolvers: ToolCapabilityResolver[];\n runtimeProfiles: RuntimeProfile[];\n promptProjectors: PromptProjector[];\n runEvaluators: RunEvaluator[];\n observers: RuntimeObserver[];\n turnInterpreters: TurnInterpreter[];\n}\n\nfunction emptyState(): SdkState {\n return {\n middlewares: [],\n packs: [],\n tracer: null,\n traceLevel: 'normal',\n modes: [],\n memory: null,\n profile: null,\n loop: null,\n contextStrategy: null,\n errorHandler: null,\n stopConditions: [],\n outputProcessors: [],\n guards: [],\n inputNormalizers: [],\n modePolicies: [],\n memoryCapabilities: [],\n promptContextSelectors: [],\n responseRequirementsSelectors: [],\n sessionRecallResolvers: [],\n repositoryDiagnosticsProviders: [],\n repositoryProbes: [],\n toolCapabilityResolvers: [],\n runtimeProfiles: [],\n promptProjectors: [],\n runEvaluators: [],\n observers: [],\n turnInterpreters: [],\n };\n}\n\nfunction cloneState(s: SdkState): SdkState {\n return {\n middlewares: [...s.middlewares],\n packs: [...s.packs],\n tracer: s.tracer,\n traceLevel: s.traceLevel,\n modes: [...s.modes],\n memory: s.memory,\n profile: s.profile,\n loop: s.loop,\n contextStrategy: s.contextStrategy,\n errorHandler: s.errorHandler,\n stopConditions: [...s.stopConditions],\n outputProcessors: [...s.outputProcessors],\n guards: [...s.guards],\n inputNormalizers: [...s.inputNormalizers],\n modePolicies: [...s.modePolicies],\n memoryCapabilities: [...s.memoryCapabilities],\n promptContextSelectors: [...s.promptContextSelectors],\n responseRequirementsSelectors: [...s.responseRequirementsSelectors],\n sessionRecallResolvers: [...s.sessionRecallResolvers],\n repositoryDiagnosticsProviders: [...s.repositoryDiagnosticsProviders],\n repositoryProbes: [...s.repositoryProbes],\n toolCapabilityResolvers: [...s.toolCapabilityResolvers],\n runtimeProfiles: [...s.runtimeProfiles],\n promptProjectors: [...s.promptProjectors],\n runEvaluators: [...s.runEvaluators],\n observers: [...s.observers],\n turnInterpreters: [...s.turnInterpreters],\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// AgentSDK — concrete class\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Module-level runner factory — injected once by agent-core at startup.\n * agent-sdk itself has no runtime dependency on agent-core.\n *\n * @example (in agent-core's entry point):\n * AgentSDK.setRunnerFactory((config, sdk) => new AgentRunner(config, sdk));\n */\nlet _runnerFactory: RunnerFactory | null = null;\n\nexport class AgentSDK implements IAgentSDK {\n private readonly _state: SdkState;\n\n constructor(state?: SdkState) {\n this._state = state ?? emptyState();\n }\n\n // ── Static factory injection ────────────────────────────────────────────\n\n static setRunnerFactory(factory: RunnerFactory): void {\n _runnerFactory = factory;\n }\n\n // ── Extension points ────────────────────────────────────────────────────\n\n use(middleware: AgentMiddleware): this {\n this._state.middlewares.push(middleware);\n return this;\n }\n\n register(pack: ToolPack): this {\n this._state.packs.push(pack);\n return this;\n }\n\n withTracer(tracer: AgentTracer, level: TraceLevel = 'normal'): this {\n this._state.tracer = tracer;\n this._state.traceLevel = level;\n return this;\n }\n\n withMode(mode: AgentMode): this {\n this._state.modes.push(mode);\n return this;\n }\n\n withMemory(memory: AgentMemory): this {\n this._state.memory = memory;\n return this;\n }\n\n withProfile(profile: AgentProfile): this {\n this._state.profile = profile;\n return this;\n }\n\n withLoop(loop: ExecutionLoop): this {\n this._state.loop = loop;\n return this;\n }\n\n withContextStrategy(strategy: ContextStrategy): this {\n this._state.contextStrategy = strategy;\n return this;\n }\n\n withErrorHandler(handler: AgentErrorHandler): this {\n this._state.errorHandler = handler;\n return this;\n }\n\n addStopCondition(condition: StopCondition): this {\n this._state.stopConditions.push(condition);\n return this;\n }\n\n addOutputProcessor(processor: OutputProcessor): this {\n this._state.outputProcessors.push(processor);\n return this;\n }\n\n addGuard(guard: ToolGuard): this {\n this._state.guards.push(guard);\n return this;\n }\n\n addInputNormalizer(normalizer: InputNormalizer): this {\n this._state.inputNormalizers.push(normalizer);\n return this;\n }\n\n registerModePolicy(policy: ModePolicy): this {\n this._state.modePolicies.push(policy);\n return this;\n }\n\n registerMemoryCapability(capability: MemoryCapability): this {\n this._state.memoryCapabilities.push(capability);\n return this;\n }\n\n registerPromptContextSelector(selector: PromptContextSelector): this {\n this._state.promptContextSelectors.push(selector);\n return this;\n }\n\n registerResponseRequirementsSelector(selector: ResponseRequirementsSelector): this {\n this._state.responseRequirementsSelectors.push(selector);\n return this;\n }\n\n registerSessionRecallResolver(resolver: SessionRecallResolver): this {\n this._state.sessionRecallResolvers.push(resolver);\n return this;\n }\n\n registerRepositoryDiagnosticsProvider(provider: RepositoryDiagnosticsProvider): this {\n this._state.repositoryDiagnosticsProviders.push(provider);\n return this;\n }\n\n registerRepositoryProbe(probe: RepositoryProbe): this {\n this._state.repositoryProbes.push(probe);\n return this;\n }\n\n registerToolCapabilityResolver(resolver: ToolCapabilityResolver): this {\n this._state.toolCapabilityResolvers.push(resolver);\n return this;\n }\n\n registerRuntimeProfile(profile: RuntimeProfile): this {\n this._state.runtimeProfiles.push(profile);\n return this;\n }\n\n registerPromptProjector(projector: PromptProjector): this {\n this._state.promptProjectors.push(projector);\n return this;\n }\n\n registerRunEvaluator(evaluator: RunEvaluator): this {\n this._state.runEvaluators.push(evaluator);\n return this;\n }\n\n registerObserver(observer: RuntimeObserver): this {\n this._state.observers.push(observer);\n return this;\n }\n\n registerTurnInterpreter(interpreter: TurnInterpreter): this {\n this._state.turnInterpreters.push(interpreter);\n return this;\n }\n\n // ── Clone ───────────────────────────────────────────────────────────────\n\n extend(): AgentSDK {\n return new AgentSDK(cloneState(this._state));\n }\n\n // ── Read-only access for agent-core ─────────────────────────────────────\n\n get middlewares(): ReadonlyArray<AgentMiddleware> { return this._state.middlewares; }\n get packs(): ReadonlyArray<ToolPack> { return this._state.packs; }\n get tracer(): AgentTracer | null { return this._state.tracer; }\n get traceLevel(): TraceLevel { return this._state.traceLevel; }\n get modes(): ReadonlyArray<AgentMode> { return this._state.modes; }\n get memory(): AgentMemory | null { return this._state.memory; }\n get profile(): AgentProfile | null { return this._state.profile; }\n get loop(): ExecutionLoop | null { return this._state.loop; }\n get contextStrategy(): ContextStrategy | null { return this._state.contextStrategy; }\n get errorHandler(): AgentErrorHandler | null { return this._state.errorHandler; }\n get stopConditions(): ReadonlyArray<StopCondition> { return this._state.stopConditions; }\n get outputProcessors(): ReadonlyArray<OutputProcessor> { return this._state.outputProcessors; }\n get guards(): ReadonlyArray<ToolGuard> { return this._state.guards; }\n get inputNormalizers(): ReadonlyArray<InputNormalizer> { return this._state.inputNormalizers; }\n get modePolicies(): ReadonlyArray<ModePolicy> { return this._state.modePolicies; }\n get memoryCapabilities(): ReadonlyArray<MemoryCapability> { return this._state.memoryCapabilities; }\n get promptContextSelectors(): ReadonlyArray<PromptContextSelector> { return this._state.promptContextSelectors; }\n get responseRequirementsSelectors(): ReadonlyArray<ResponseRequirementsSelector> { return this._state.responseRequirementsSelectors; }\n get sessionRecallResolvers(): ReadonlyArray<SessionRecallResolver> { return this._state.sessionRecallResolvers; }\n get repositoryDiagnosticsProviders(): ReadonlyArray<RepositoryDiagnosticsProvider> { return this._state.repositoryDiagnosticsProviders; }\n get repositoryProbes(): ReadonlyArray<RepositoryProbe> { return this._state.repositoryProbes; }\n get toolCapabilityResolvers(): ReadonlyArray<ToolCapabilityResolver> { return this._state.toolCapabilityResolvers; }\n get runtimeProfiles(): ReadonlyArray<RuntimeProfile> { return this._state.runtimeProfiles; }\n get promptProjectors(): ReadonlyArray<PromptProjector> { return this._state.promptProjectors; }\n get runEvaluators(): ReadonlyArray<RunEvaluator> { return this._state.runEvaluators; }\n get observers(): ReadonlyArray<RuntimeObserver> { return this._state.observers; }\n get turnInterpreters(): ReadonlyArray<TurnInterpreter> { return this._state.turnInterpreters; }\n\n // ── Build ───────────────────────────────────────────────────────────────\n\n createRunner(config: AgentConfig): IAgentRunner {\n if (!_runnerFactory) {\n throw new Error(\n 'No runner factory registered. Call AgentSDK.setRunnerFactory() from agent-core before createRunner().',\n );\n }\n return _runnerFactory(config, this);\n }\n}\n"]}
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/plugins/agents/sdk/src/testing.ts"],"names":[],"mappings":";;;AAmBO,SAAS,QAAA,GAAwE;AACtF,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAkC;AACpD,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,KAAA;AAAA,IACR,KAAK,EAAA,CAAG,EAAA;AAAA,MAAG,CAAC,IAAY,GAAA,KACtB,KAAA,CAAM,IAAI,EAAE,CAAA,EAAG,IAAI,GAAG;AAAA,KACxB;AAAA,IACA,KAAK,EAAA,CAAG,EAAA,CAAG,CAAC,EAAA,EAAY,KAAa,KAAA,KAAmB;AACtD,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,QAAA,KAAA,CAAM,GAAA,CAAI,EAAA,kBAAI,IAAI,GAAA,EAAK,CAAA;AAAA,MACzB;AACA,MAAA,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,CAAG,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IAC/B,CAAC,CAAA;AAAA,IACD,cAAc,EAAA,CAAG,EAAA;AAAA,MAAG,CAAC,EAAA,KACnB,MAAA,CAAO,WAAA,CAAY,KAAA,CAAM,IAAI,EAAE,CAAA,oBAAK,IAAI,GAAA,EAAK;AAAA;AAC/C,GACF;AACF;AAIO,SAAS,UAAA,CAAW,SAAA,GAAiC,EAAC,EAAe;AAC1E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,UAAU,EAAC;AAAA,IACX,OAAO,EAAC;AAAA,IACR,SAAA,EAAW,CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,OAAA,EAAS,KAAA;AAAA,IACT,WAAA,EAAa,IAAI,eAAA,EAAgB,CAAE,MAAA;AAAA,IACnC,SAAA,EAAW,UAAA;AAAA,IACX,MAAM,QAAA,EAAS;AAAA,IACf,GAAG;AAAA,GACL;AACF;AAIO,SAAS,UAAA,CAAW,MAAA,EAAqB,SAAA,GAA6B,EAAC,EAAW;AACvF,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,UAAU,UAAA,EAAW;AAAA,IAC1B,UAAU,CAAC,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,SAAS,CAAA;AAAA,IAC7C,OAAO,EAAC;AAAA,IACR,GAAG;AAAA,GACL;AACF;AAIO,SAAS,eAAA,CACd,MAAA,EACA,SAAA,GAAkC,EAAC,EACtB;AACb,EAAA,MAAM,GAAA,GAAM,UAAU,UAAA,EAAW;AACjC,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,QAAA,EAAU,SAAA;AAAA,IACV,OAAO,EAAC;AAAA,IACR,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,aAAa,GAAA,CAAI,WAAA;AAAA,IACjB,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,GAAG;AAAA,GACL;AACF;AAIO,SAAS,eAAA,CAAgB,SAAA,GAAoC,EAAC,EAAkB;AACrF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,EAAA;AAAA,IACT,WAAW,EAAC;AAAA,IACZ,GAAG;AAAA,GACL;AACF;AAGO,SAAS,mBAAmB,MAAA,EAA+B;AAChE,EAAA,OAAO,eAAA,CAAgB;AAAA,IACrB,SAAA,EAAW,CAAC,EAAE,EAAA,EAAI,WAAA,EAAa,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,EAAE,MAAA,EAAO,EAAG;AAAA,GACnE,CAAA;AACH;AAIO,SAAS,cAAA,CAAe,SAAA,GAAiC,EAAC,EAAe;AAC9E,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,MAAA;AAAA,IACZ,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS,IAAA;AAAA,IACT,GAAG;AAAA,GACL;AACF;AAYO,SAAS,WAAA,CAAY,IAAA,GAAuB,EAAC,EAAgB;AAClE,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,IAAO,UAAA,EAAW;AACnC,EAAA,MAAM,SAAA,GAAY,CAAC,GAAI,IAAA,CAAK,gBAAgB,CAAC,eAAA,EAAiB,CAAE,CAAA;AAChE,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,aAAA,EAAe,GAAG,EAAA,EAAG;AAAA,IACrB,OAAA,EAAS,EAAA,CAAG,EAAA,CAAG,YAAoC;AACjD,MAAA,MAAM,CAAA,GAAI,SAAA,CAAU,SAAS,CAAA,IAAK,eAAA,EAAgB;AAClD,MAAA,SAAA,EAAA;AACA,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AAAA,IACD,cAAc,EAAA,CAAG,EAAA;AAAA,MAAG,OAAO,MAAA,KACzB,IAAA,CAAK,WAAA,IAAe;AAAC,KACvB;AAAA,IACA,WAAA,EAAa,EAAA,CAAG,EAAA,CAAG,YAAY,IAAI,CAAA;AAAA,IACnC,eAAA,EAAiB,EAAA,CAAG,EAAA,CAAG,YAAY,UAAmB,CAAA;AAAA,IACtD,cAAA,EAAgB,EAAA,CAAG,EAAA,CAAG,YAAY;AAAA,IAAC,CAAC;AAAA,GACtC;AACF;AAIO,SAAS,eACd,SAAA,EACiB;AACjB,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,EAAE,UAAA,EAAY,WAAA,EAAY;AAAA,IAClC,GAAG;AAAA,GACL;AACF;AAGO,SAAS,qBAAA,CACd,IAAA,EACA,KAAA,EACA,MAAA,EACiB;AACjB,EAAA,OAAO,cAAA,CAAe;AAAA,IACpB,IAAA;AAAA,IACA,KAAA;AAAA,IACA,iBAAiB,YAAY;AAAA,GAC9B,CAAA;AACH","file":"testing.js","sourcesContent":["/**\n * @kb-labs/agent-sdk/testing\n *\n * Ready-made mock helpers for testing agent-core, plugins, and any code\n * that works with SDK types. Import from this sub-path — never from main index.\n *\n * @example\n * import { makeRunCtx, makeLoopCtx, makeLLMResponse } from '@kb-labs/agent-sdk/testing';\n *\n * All helpers use vitest's `vi.fn()` — vitest must be available in the test env.\n */\n\nimport { vi } from 'vitest';\nimport type { RunContext, ContextMeta, LLMCtx, LLMCallResult, ToolExecCtx, ToolOutput, ToolCallInput } from './contexts.js';\nimport type { LoopContext } from './loop.js';\nimport type { AgentMiddleware, ControlAction } from './middleware.js';\n\n// ─── ContextMeta mock ─────────────────────────────────────────────────────────\n\nexport function makeMeta(): ContextMeta & { _store: Map<string, Map<string, unknown>> } {\n const store = new Map<string, Map<string, unknown>>();\n return {\n _store: store,\n get: vi.fn((ns: string, key: string) =>\n store.get(ns)?.get(key),\n ) as ContextMeta['get'],\n set: vi.fn((ns: string, key: string, value: unknown) => {\n if (!store.has(ns)) {\n store.set(ns, new Map());\n }\n store.get(ns)!.set(key, value);\n }),\n getNamespace: vi.fn((ns: string) =>\n Object.fromEntries(store.get(ns) ?? new Map()),\n ),\n };\n}\n\n// ─── RunContext mock ──────────────────────────────────────────────────────────\n\nexport function makeRunCtx(overrides: Partial<RunContext> = {}): RunContext {\n return {\n task: 'test task',\n tier: 'medium',\n messages: [],\n tools: [],\n iteration: 0,\n maxIterations: 20,\n aborted: false,\n abortSignal: new AbortController().signal,\n requestId: 'req-test',\n meta: makeMeta(),\n ...overrides,\n } as RunContext;\n}\n\n// ─── LLMCtx mock ─────────────────────────────────────────────────────────────\n\nexport function makeLLMCtx(runCtx?: RunContext, overrides: Partial<LLMCtx> = {}): LLMCtx {\n return {\n run: runCtx ?? makeRunCtx(),\n messages: [{ role: 'user', content: 'hello' }],\n tools: [],\n ...overrides,\n };\n}\n\n// ─── ToolExecCtx mock ─────────────────────────────────────────────────────────\n\nexport function makeToolExecCtx(\n runCtx?: RunContext,\n overrides: Partial<ToolExecCtx> = {},\n): ToolExecCtx {\n const run = runCtx ?? makeRunCtx();\n return {\n run,\n toolName: 'fs_read',\n input: {},\n iteration: run.iteration,\n abortSignal: run.abortSignal,\n requestId: run.requestId,\n ...overrides,\n };\n}\n\n// ─── LLMCallResult mock ───────────────────────────────────────────────────────\n\nexport function makeLLMResponse(overrides: Partial<LLMCallResult> = {}): LLMCallResult {\n return {\n content: '',\n toolCalls: [],\n ...overrides,\n };\n}\n\n/** Shorthand: LLM response that calls the report tool */\nexport function makeReportResponse(answer: string): LLMCallResult {\n return makeLLMResponse({\n toolCalls: [{ id: 'tc-report', name: 'report', input: { answer } }],\n });\n}\n\n// ─── ToolOutput mock ──────────────────────────────────────────────────────────\n\nexport function makeToolOutput(overrides: Partial<ToolOutput> = {}): ToolOutput {\n return {\n toolCallId: 'tc-1',\n output: 'result',\n success: true,\n ...overrides,\n };\n}\n\n// ─── LoopContext mock ─────────────────────────────────────────────────────────\n\nexport interface LoopCtxOptions {\n run?: RunContext;\n /** Sequential LLM responses — each call pops the next one */\n llmResponses?: LLMCallResult[];\n /** Tool outputs returned by executeTools */\n toolOutputs?: ToolOutput[];\n}\n\nexport function makeLoopCtx(opts: LoopCtxOptions = {}): LoopContext {\n const run = opts.run ?? makeRunCtx();\n const responses = [...(opts.llmResponses ?? [makeLLMResponse()])];\n let callIndex = 0;\n\n return {\n run,\n appendMessage: vi.fn(),\n callLLM: vi.fn(async (): Promise<LLMCallResult> => {\n const r = responses[callIndex] ?? makeLLMResponse();\n callIndex++;\n return r;\n }),\n executeTools: vi.fn(async (_calls: ToolCallInput[]): Promise<ToolOutput[]> =>\n opts.toolOutputs ?? [],\n ),\n evaluateRun: vi.fn(async () => null),\n beforeIteration: vi.fn(async () => 'continue' as const),\n afterIteration: vi.fn(async () => {}),\n };\n}\n\n// ─── AgentMiddleware mock ─────────────────────────────────────────────────────\n\nexport function makeMiddleware(\n overrides: Partial<AgentMiddleware> & { name: string; order: number },\n): AgentMiddleware {\n return {\n config: { failPolicy: 'fail-open' },\n ...overrides,\n };\n}\n\n/** Middleware that always returns a fixed ControlAction from beforeIteration */\nexport function makeControlMiddleware(\n name: string,\n order: number,\n action: ControlAction,\n): AgentMiddleware {\n return makeMiddleware({\n name,\n order,\n beforeIteration: async () => action,\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kb-labs/agent-sdk",
|
|
3
3
|
"description": "Agent SDK — contracts and interfaces for composing agents. No logic, only types.",
|
|
4
|
-
"version": "2.119.0
|
|
4
|
+
"version": "2.119.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"vitest": "^3.2.6",
|
|
25
|
-
"@kb-labs/
|
|
26
|
-
"@kb-labs/
|
|
25
|
+
"@kb-labs/agent-contracts": "2.119.0",
|
|
26
|
+
"@kb-labs/sdk": "2.115.4"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "^24.3.3",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"rimraf": "^6.0.1",
|
|
32
32
|
"tsup": "^8.5.0",
|
|
33
33
|
"typescript": "^5.6.3",
|
|
34
|
-
"@kb-labs/devkit": "2.119.0
|
|
34
|
+
"@kb-labs/devkit": "2.119.0"
|
|
35
35
|
},
|
|
36
36
|
"engines": {
|
|
37
|
-
"node": ">=
|
|
37
|
+
"node": ">=24.0.0",
|
|
38
38
|
"pnpm": ">=9.0.0"
|
|
39
39
|
},
|
|
40
40
|
"sideEffects": false,
|