agentfootprint 6.43.0 → 6.45.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/ai-instructions/setup.sh +0 -0
- package/dist/core/RunnerBase.js +7 -0
- package/dist/core/RunnerBase.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +2 -1
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/buildDynamicAgentChart.js +3 -1
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/stages/pickEntry.js +3 -1
- package/dist/core/agent/stages/pickEntry.js.map +1 -1
- package/dist/esm/adapters/identity/agentcore.d.ts +100 -0
- package/dist/esm/adapters/llm/AnthropicProvider.d.ts +130 -0
- package/dist/esm/adapters/llm/BedrockProvider.d.ts +100 -0
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.d.ts +41 -0
- package/dist/esm/adapters/llm/BrowserOpenAIProvider.d.ts +95 -0
- package/dist/esm/adapters/llm/MockProvider.d.ts +153 -0
- package/dist/esm/adapters/llm/OpenAIProvider.d.ts +220 -0
- package/dist/esm/adapters/llm/createProvider.d.ts +85 -0
- package/dist/esm/adapters/memory/agentcore.d.ts +146 -0
- package/dist/esm/adapters/memory/bedrockAgentMemory.d.ts +95 -0
- package/dist/esm/adapters/memory/redis.d.ts +127 -0
- package/dist/esm/adapters/observability/agentcore.d.ts +67 -0
- package/dist/esm/adapters/observability/audit.d.ts +254 -0
- package/dist/esm/adapters/observability/cloudwatch.d.ts +96 -0
- package/dist/esm/adapters/observability/otel.d.ts +237 -0
- package/dist/esm/adapters/observability/xray.d.ts +88 -0
- package/dist/esm/adapters/types.d.ts +378 -0
- package/dist/esm/bridge/eventMeta.d.ts +59 -0
- package/dist/esm/cache/CacheDecisionSubflow.d.ts +85 -0
- package/dist/esm/cache/CacheGateDecider.d.ts +127 -0
- package/dist/esm/cache/applyCachePolicy.d.ts +37 -0
- package/dist/esm/cache/cacheRecorder.d.ts +85 -0
- package/dist/esm/cache/index.d.ts +33 -0
- package/dist/esm/cache/strategies/AnthropicCacheStrategy.d.ts +38 -0
- package/dist/esm/cache/strategies/BedrockCacheStrategy.d.ts +33 -0
- package/dist/esm/cache/strategies/NoOpCacheStrategy.d.ts +29 -0
- package/dist/esm/cache/strategies/OpenAICacheStrategy.d.ts +36 -0
- package/dist/esm/cache/strategyRegistry.d.ts +45 -0
- package/dist/esm/cache/types.d.ts +243 -0
- package/dist/esm/conventions.d.ts +203 -0
- package/dist/esm/core/Agent.d.ts +355 -0
- package/dist/esm/core/LLMCall.d.ts +139 -0
- package/dist/esm/core/RunnerBase.d.ts +267 -0
- package/dist/esm/core/RunnerBase.js +7 -0
- package/dist/esm/core/RunnerBase.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.d.ts +565 -0
- package/dist/esm/core/agent/buildAgentChart.d.ts +109 -0
- package/dist/esm/core/agent/buildAgentChart.js +2 -1
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildAgentMessageApiChart.d.ts +40 -0
- package/dist/esm/core/agent/buildCacheSubflow.d.ts +35 -0
- package/dist/esm/core/agent/buildDynamicAgentChart.d.ts +56 -0
- package/dist/esm/core/agent/buildDynamicAgentChart.js +3 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildMessageApiChart.d.ts +47 -0
- package/dist/esm/core/agent/buildToolRegistry.d.ts +61 -0
- package/dist/esm/core/agent/memoryRecallInjections.d.ts +8 -0
- package/dist/esm/core/agent/stages/breakFinal.d.ts +22 -0
- package/dist/esm/core/agent/stages/callLLM.d.ts +74 -0
- package/dist/esm/core/agent/stages/pickEntry.d.ts +19 -0
- package/dist/esm/core/agent/stages/pickEntry.js +3 -1
- package/dist/esm/core/agent/stages/pickEntry.js.map +1 -1
- package/dist/esm/core/agent/stages/prepareFinal.d.ts +19 -0
- package/dist/esm/core/agent/stages/reliabilityExecution.d.ts +135 -0
- package/dist/esm/core/agent/stages/route.d.ts +18 -0
- package/dist/esm/core/agent/stages/seed.d.ts +53 -0
- package/dist/esm/core/agent/stages/toolCalls.d.ts +76 -0
- package/dist/esm/core/agent/toolArgsValidation.d.ts +62 -0
- package/dist/esm/core/agent/types.d.ts +382 -0
- package/dist/esm/core/agent/validators.d.ts +52 -0
- package/dist/esm/core/cost.d.ts +38 -0
- package/dist/esm/core/flowchartAsTool.d.ts +200 -0
- package/dist/esm/core/humanizeLLMError.d.ts +23 -0
- package/dist/esm/core/outputFallback.d.ts +139 -0
- package/dist/esm/core/outputSchema.d.ts +127 -0
- package/dist/esm/core/pause.d.ts +74 -0
- package/dist/esm/core/runCheckpoint.d.ts +179 -0
- package/dist/esm/core/runner.d.ts +203 -0
- package/dist/esm/core/slots/buildMessagesSlot.d.ts +40 -0
- package/dist/esm/core/slots/buildSystemPromptSlot.d.ts +41 -0
- package/dist/esm/core/slots/buildThinkingSubflow.d.ts +40 -0
- package/dist/esm/core/slots/buildToolsSlot.d.ts +60 -0
- package/dist/esm/core/slots/helpers.d.ts +27 -0
- package/dist/esm/core/toolContract.d.ts +43 -0
- package/dist/esm/core/tools.d.ts +90 -0
- package/dist/esm/core/translator.d.ts +94 -0
- package/dist/esm/core-flow/Conditional.d.ts +119 -0
- package/dist/esm/core-flow/Loop.d.ts +160 -0
- package/dist/esm/core-flow/Parallel.d.ts +360 -0
- package/dist/esm/core-flow/Sequence.d.ts +133 -0
- package/dist/esm/events/dispatcher.d.ts +134 -0
- package/dist/esm/events/payloads.d.ts +761 -0
- package/dist/esm/events/registry.d.ts +198 -0
- package/dist/esm/events/types.d.ts +70 -0
- package/dist/esm/identity/kinds.d.ts +36 -0
- package/dist/esm/identity/staticTokens.d.ts +28 -0
- package/dist/esm/identity/types.d.ts +113 -0
- package/dist/esm/identity/withCredentialRetry.d.ts +64 -0
- package/dist/esm/identity.d.ts +31 -0
- package/dist/esm/index.d.ts +64 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/injection-engine.d.ts +4 -0
- package/dist/esm/lib/canonicalJson.d.ts +56 -0
- package/dist/esm/lib/context-bisect/ablation.d.ts +109 -0
- package/dist/esm/lib/context-bisect/bisect.d.ts +75 -0
- package/dist/esm/lib/context-bisect/cost.d.ts +37 -0
- package/dist/esm/lib/context-bisect/index.d.ts +31 -0
- package/dist/esm/lib/context-bisect/index.js +3 -0
- package/dist/esm/lib/context-bisect/index.js.map +1 -1
- package/dist/esm/lib/context-bisect/llmEdgeWeigher.d.ts +124 -0
- package/dist/esm/lib/context-bisect/localize.d.ts +152 -0
- package/dist/esm/lib/context-bisect/localize.js +2 -0
- package/dist/esm/lib/context-bisect/localize.js.map +1 -1
- package/dist/esm/lib/context-bisect/loop-recall.d.ts +97 -0
- package/dist/esm/lib/context-bisect/missingContext.d.ts +71 -0
- package/dist/esm/lib/context-bisect/restoration.d.ts +39 -0
- package/dist/esm/lib/context-bisect/toBacktrackTrace.d.ts +138 -0
- package/dist/esm/lib/context-bisect/trajectory.d.ts +168 -0
- package/dist/esm/lib/context-bisect/types.d.ts +448 -0
- package/dist/esm/lib/context-bisect/walk-to-root.d.ts +103 -0
- package/dist/esm/lib/influence-core/attributability.d.ts +72 -0
- package/dist/esm/lib/influence-core/cache.d.ts +94 -0
- package/dist/esm/lib/influence-core/contrastive.d.ts +26 -0
- package/dist/esm/lib/influence-core/index.d.ts +34 -0
- package/dist/esm/lib/influence-core/margin.d.ts +33 -0
- package/dist/esm/lib/influence-core/signals.d.ts +128 -0
- package/dist/esm/lib/influence-core/similarity.d.ts +25 -0
- package/dist/esm/lib/influence-core/types.d.ts +252 -0
- package/dist/esm/lib/injection-engine/SkillRegistry.d.ts +147 -0
- package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.d.ts +110 -0
- package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js +1 -0
- package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
- package/dist/esm/lib/injection-engine/entryScorer.d.ts +93 -0
- package/dist/esm/lib/injection-engine/entryScorer.js +172 -0
- package/dist/esm/lib/injection-engine/entryScorer.js.map +1 -0
- package/dist/esm/lib/injection-engine/evaluator.d.ts +24 -0
- package/dist/esm/lib/injection-engine/factories/defineFact.d.ts +60 -0
- package/dist/esm/lib/injection-engine/factories/defineInjection.d.ts +41 -0
- package/dist/esm/lib/injection-engine/factories/defineInstruction.d.ts +78 -0
- package/dist/esm/lib/injection-engine/factories/defineRelevanceHint.d.ts +26 -0
- package/dist/esm/lib/injection-engine/factories/defineSkill.d.ts +160 -0
- package/dist/esm/lib/injection-engine/factories/defineSteering.d.ts +39 -0
- package/dist/esm/lib/injection-engine/index.d.ts +22 -0
- package/dist/esm/lib/injection-engine/index.js +1 -0
- package/dist/esm/lib/injection-engine/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillContract.d.ts +29 -0
- package/dist/esm/lib/injection-engine/skillGraph.d.ts +289 -0
- package/dist/esm/lib/injection-engine/skillGraph.js +35 -41
- package/dist/esm/lib/injection-engine/skillGraph.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillGraphCheckup.d.ts +49 -0
- package/dist/esm/lib/injection-engine/skillTools.d.ts +72 -0
- package/dist/esm/lib/injection-engine/softmax.d.ts +11 -0
- package/dist/esm/lib/injection-engine/types.d.ts +229 -0
- package/dist/esm/lib/injection-engine/types.js.map +1 -1
- package/dist/esm/lib/lazyRequire.d.ts +29 -0
- package/dist/esm/lib/mcp/index.d.ts +9 -0
- package/dist/esm/lib/mcp/mcpClient.d.ts +46 -0
- package/dist/esm/lib/mcp/mockMcpClient.d.ts +65 -0
- package/dist/esm/lib/mcp/types.d.ts +133 -0
- package/dist/esm/lib/rag/defineRAG.d.ts +139 -0
- package/dist/esm/lib/rag/index.d.ts +7 -0
- package/dist/esm/lib/rag/indexDocuments.d.ts +105 -0
- package/dist/esm/lib/tool-lint/analyze.d.ts +83 -0
- package/dist/esm/lib/tool-lint/cli.d.ts +43 -0
- package/dist/esm/lib/tool-lint/format.d.ts +18 -0
- package/dist/esm/lib/tool-lint/index.d.ts +23 -0
- package/dist/esm/lib/tool-lint/rules.d.ts +85 -0
- package/dist/esm/lib/tool-lint/types.d.ts +155 -0
- package/dist/esm/lib/trace-toolpack/bounded.d.ts +47 -0
- package/dist/esm/lib/trace-toolpack/debugPrompt.d.ts +19 -0
- package/dist/esm/lib/trace-toolpack/index.d.ts +20 -0
- package/dist/esm/lib/trace-toolpack/lazyToolpack.d.ts +35 -0
- package/dist/esm/lib/trace-toolpack/selfExplain.d.ts +100 -0
- package/dist/esm/lib/trace-toolpack/traceDebugAgent.d.ts +42 -0
- package/dist/esm/lib/trace-toolpack/traceToolpack.d.ts +69 -0
- package/dist/esm/lib/trace-toolpack/types.d.ts +59 -0
- package/dist/esm/llm-providers.d.ts +26 -0
- package/dist/esm/locales/index.d.ts +132 -0
- package/dist/esm/memory/beats/extractBeats.d.ts +61 -0
- package/dist/esm/memory/beats/extractor.d.ts +47 -0
- package/dist/esm/memory/beats/formatAsNarrative.d.ts +62 -0
- package/dist/esm/memory/beats/heuristicExtractor.d.ts +37 -0
- package/dist/esm/memory/beats/index.d.ts +12 -0
- package/dist/esm/memory/beats/llmExtractor.d.ts +56 -0
- package/dist/esm/memory/beats/types.d.ts +60 -0
- package/dist/esm/memory/beats/writeBeats.d.ts +22 -0
- package/dist/esm/memory/causal/evidenceRecorder.d.ts +66 -0
- package/dist/esm/memory/causal/index.d.ts +6 -0
- package/dist/esm/memory/causal/loadSnapshot.d.ts +51 -0
- package/dist/esm/memory/causal/snapshotPipeline.d.ts +35 -0
- package/dist/esm/memory/causal/types.d.ts +130 -0
- package/dist/esm/memory/causal/writeSnapshot.d.ts +73 -0
- package/dist/esm/memory/define.d.ts +63 -0
- package/dist/esm/memory/define.types.d.ts +276 -0
- package/dist/esm/memory/define.types.js +1 -1
- package/dist/esm/memory/embedding/cosine.d.ts +18 -0
- package/dist/esm/memory/embedding/embedMessages.d.ts +58 -0
- package/dist/esm/memory/embedding/index.d.ts +8 -0
- package/dist/esm/memory/embedding/loadRelevant.d.ts +51 -0
- package/dist/esm/memory/embedding/mockEmbedder.d.ts +22 -0
- package/dist/esm/memory/embedding/types.d.ts +46 -0
- package/dist/esm/memory/entry/decay.d.ts +36 -0
- package/dist/esm/memory/entry/index.d.ts +2 -0
- package/dist/esm/memory/entry/types.d.ts +140 -0
- package/dist/esm/memory/facts/extractFacts.d.ts +50 -0
- package/dist/esm/memory/facts/extractor.d.ts +33 -0
- package/dist/esm/memory/facts/formatFacts.d.ts +60 -0
- package/dist/esm/memory/facts/index.d.ts +14 -0
- package/dist/esm/memory/facts/llmFactExtractor.d.ts +64 -0
- package/dist/esm/memory/facts/loadFacts.d.ts +43 -0
- package/dist/esm/memory/facts/patternFactExtractor.d.ts +2 -0
- package/dist/esm/memory/facts/types.d.ts +68 -0
- package/dist/esm/memory/facts/writeFacts.d.ts +19 -0
- package/dist/esm/memory/identity/index.d.ts +2 -0
- package/dist/esm/memory/identity/types.d.ts +49 -0
- package/dist/esm/memory/index.d.ts +19 -0
- package/dist/esm/memory/pipeline/auto.d.ts +59 -0
- package/dist/esm/memory/pipeline/default.d.ts +49 -0
- package/dist/esm/memory/pipeline/ephemeral.d.ts +28 -0
- package/dist/esm/memory/pipeline/fact.d.ts +26 -0
- package/dist/esm/memory/pipeline/index.d.ts +13 -0
- package/dist/esm/memory/pipeline/narrative.d.ts +35 -0
- package/dist/esm/memory/pipeline/semantic.d.ts +37 -0
- package/dist/esm/memory/pipeline/types.d.ts +31 -0
- package/dist/esm/memory/stages/formatDefault.d.ts +64 -0
- package/dist/esm/memory/stages/index.d.ts +13 -0
- package/dist/esm/memory/stages/loadRecent.d.ts +49 -0
- package/dist/esm/memory/stages/pickByBudget.d.ts +63 -0
- package/dist/esm/memory/stages/summarize.d.ts +87 -0
- package/dist/esm/memory/stages/tokenize.d.ts +43 -0
- package/dist/esm/memory/stages/types.d.ts +75 -0
- package/dist/esm/memory/stages/writeMessages.d.ts +71 -0
- package/dist/esm/memory/store/InMemoryStore.d.ts +62 -0
- package/dist/esm/memory/store/index.d.ts +2 -0
- package/dist/esm/memory/store/types.d.ts +223 -0
- package/dist/esm/memory/wire/index.d.ts +2 -0
- package/dist/esm/memory/wire/mountMemoryPipeline.d.ts +108 -0
- package/dist/esm/memory-providers.d.ts +37 -0
- package/dist/esm/observability/contextError/finders/compareFinders.d.ts +19 -0
- package/dist/esm/observability/contextError/finders/index.d.ts +22 -0
- package/dist/esm/observability/contextError/finders/rankSuspects.d.ts +2 -0
- package/dist/esm/observability/contextError/finders/removeAndRetry.d.ts +11 -0
- package/dist/esm/observability/contextError/finders/shrinkToCause.d.ts +11 -0
- package/dist/esm/observability/contextError/finders/testManyCombos.d.ts +11 -0
- package/dist/esm/observability/contextError/finders/traceSteps.d.ts +2 -0
- package/dist/esm/observability/contextError/finders/types.d.ts +88 -0
- package/dist/esm/observability-providers.d.ts +46 -0
- package/dist/esm/observe.d.ts +62 -0
- package/dist/esm/observe.js +7 -1
- package/dist/esm/observe.js.map +1 -1
- package/dist/esm/patterns/Debate.d.ts +39 -0
- package/dist/esm/patterns/MapReduce.d.ts +66 -0
- package/dist/esm/patterns/Reflection.d.ts +51 -0
- package/dist/esm/patterns/SelfConsistency.d.ts +43 -0
- package/dist/esm/patterns/Swarm.d.ts +60 -0
- package/dist/esm/patterns/ToT.d.ts +53 -0
- package/dist/esm/patterns/index.d.ts +22 -0
- package/dist/esm/providers.d.ts +33 -0
- package/dist/esm/recorders/core/AgentRecorder.d.ts +15 -0
- package/dist/esm/recorders/core/CompositionRecorder.d.ts +17 -0
- package/dist/esm/recorders/core/ContextEvaluatedRecorder.d.ts +23 -0
- package/dist/esm/recorders/core/ContextRecorder.d.ts +47 -0
- package/dist/esm/recorders/core/CostRecorder.d.ts +14 -0
- package/dist/esm/recorders/core/EmitBridge.d.ts +30 -0
- package/dist/esm/recorders/core/ErrorBridge.d.ts +38 -0
- package/dist/esm/recorders/core/EvalRecorder.d.ts +16 -0
- package/dist/esm/recorders/core/MemoryRecorder.d.ts +17 -0
- package/dist/esm/recorders/core/PermissionRecorder.d.ts +16 -0
- package/dist/esm/recorders/core/ReliabilityRecorder.d.ts +24 -0
- package/dist/esm/recorders/core/SkillRecorder.d.ts +14 -0
- package/dist/esm/recorders/core/StreamRecorder.d.ts +15 -0
- package/dist/esm/recorders/core/ToolsRecorder.d.ts +18 -0
- package/dist/esm/recorders/core/ValidationRecorder.d.ts +16 -0
- package/dist/esm/recorders/core/contextEngineering.d.ts +136 -0
- package/dist/esm/recorders/core/typedEmit.d.ts +34 -0
- package/dist/esm/recorders/core/types.d.ts +97 -0
- package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.d.ts +117 -0
- package/dist/esm/recorders/observability/BoundaryRecorder.d.ts +546 -0
- package/dist/esm/recorders/observability/FlowchartRecorder.d.ts +220 -0
- package/dist/esm/recorders/observability/FlowchartRecorder.js +10 -2
- package/dist/esm/recorders/observability/FlowchartRecorder.js.map +1 -1
- package/dist/esm/recorders/observability/LiveStateRecorder.d.ts +250 -0
- package/dist/esm/recorders/observability/LoggingRecorder.d.ts +91 -0
- package/dist/esm/recorders/observability/RouteRecorder.d.ts +83 -0
- package/dist/esm/recorders/observability/RunStepRecorder.d.ts +231 -0
- package/dist/esm/recorders/observability/StatusRecorder.d.ts +36 -0
- package/dist/esm/recorders/observability/ToolChoiceRecorder.d.ts +164 -0
- package/dist/esm/recorders/observability/ToolLineageRecorder.d.ts +71 -0
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.d.ts +105 -0
- package/dist/esm/recorders/observability/internal/ActorArrowClassifier.d.ts +25 -0
- package/dist/esm/recorders/observability/internal/CandidateAnswerBuffer.d.ts +28 -0
- package/dist/esm/recorders/observability/internal/ForkTracker.d.ts +60 -0
- package/dist/esm/recorders/observability/internal/RootInferrer.d.ts +51 -0
- package/dist/esm/recorders/observability/internal/SequenceSiblingTracker.d.ts +24 -0
- package/dist/esm/recorders/observability/localObservability.d.ts +48 -0
- package/dist/esm/recorders/observability/localObservability.js +54 -0
- package/dist/esm/recorders/observability/localObservability.js.map +1 -0
- package/dist/esm/recorders/observability/observeRunId.d.ts +36 -0
- package/dist/esm/recorders/observability/status/statusTemplates.d.ts +106 -0
- package/dist/esm/recorders/observability/trace.d.ts +119 -0
- package/dist/esm/recorders/observability/trace.js +99 -0
- package/dist/esm/recorders/observability/trace.js.map +1 -0
- package/dist/esm/reliability/CircuitBreaker.d.ts +75 -0
- package/dist/esm/reliability/buildReliabilityGateChart.d.ts +53 -0
- package/dist/esm/reliability/classifyError.d.ts +28 -0
- package/dist/esm/reliability/index.d.ts +35 -0
- package/dist/esm/reliability/types.d.ts +327 -0
- package/dist/esm/resilience/fallbackProvider.d.ts +33 -0
- package/dist/esm/resilience/index.d.ts +21 -0
- package/dist/esm/resilience/withCircuitBreaker.d.ts +129 -0
- package/dist/esm/resilience/withFallback.d.ts +45 -0
- package/dist/esm/resilience/withRetry.d.ts +71 -0
- package/dist/esm/security/PermissionPolicy.d.ts +124 -0
- package/dist/esm/security/PolicyHaltError.d.ts +72 -0
- package/dist/esm/security/extractSequence.d.ts +46 -0
- package/dist/esm/security/index.d.ts +44 -0
- package/dist/esm/security/thinkingRedaction.d.ts +50 -0
- package/dist/esm/status.d.ts +48 -0
- package/dist/esm/strategies/attach.d.ts +47 -0
- package/dist/esm/strategies/compose.d.ts +48 -0
- package/dist/esm/strategies/defaults/chatBubbleLiveStatus.d.ts +36 -0
- package/dist/esm/strategies/defaults/consoleObservability.d.ts +42 -0
- package/dist/esm/strategies/defaults/inMemorySinkCost.d.ts +50 -0
- package/dist/esm/strategies/defaults/index.d.ts +30 -0
- package/dist/esm/strategies/defaults/noopLens.d.ts +28 -0
- package/dist/esm/strategies/index.d.ts +36 -0
- package/dist/esm/strategies/registry.d.ts +70 -0
- package/dist/esm/strategies/types.d.ts +303 -0
- package/dist/esm/stream.d.ts +82 -0
- package/dist/esm/thinking/AnthropicThinkingHandler.d.ts +42 -0
- package/dist/esm/thinking/MockThinkingHandler.d.ts +50 -0
- package/dist/esm/thinking/OpenAIThinkingHandler.d.ts +37 -0
- package/dist/esm/thinking/index.d.ts +51 -0
- package/dist/esm/thinking/registry.d.ts +33 -0
- package/dist/esm/thinking/types.d.ts +162 -0
- package/dist/esm/tool-providers/gatedTools.d.ts +36 -0
- package/dist/esm/tool-providers/index.d.ts +41 -0
- package/dist/esm/tool-providers/skillScopedTools.d.ts +45 -0
- package/dist/esm/tool-providers/staticTools.d.ts +21 -0
- package/dist/esm/tool-providers/types.d.ts +138 -0
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/context-bisect/index.js +3 -0
- package/dist/lib/context-bisect/index.js.map +1 -1
- package/dist/lib/context-bisect/localize.js +2 -0
- package/dist/lib/context-bisect/localize.js.map +1 -1
- package/dist/lib/injection-engine/buildInjectionEngineSubflow.js +1 -0
- package/dist/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
- package/dist/lib/injection-engine/entryScorer.js +178 -0
- package/dist/lib/injection-engine/entryScorer.js.map +1 -0
- package/dist/lib/injection-engine/index.js +5 -1
- package/dist/lib/injection-engine/index.js.map +1 -1
- package/dist/lib/injection-engine/skillGraph.js +35 -41
- package/dist/lib/injection-engine/skillGraph.js.map +1 -1
- package/dist/lib/injection-engine/types.js.map +1 -1
- package/dist/memory/define.types.js +1 -1
- package/dist/observe.js +14 -3
- package/dist/observe.js.map +1 -1
- package/dist/recorders/observability/FlowchartRecorder.js +12 -3
- package/dist/recorders/observability/FlowchartRecorder.js.map +1 -1
- package/dist/recorders/observability/localObservability.js +58 -0
- package/dist/recorders/observability/localObservability.js.map +1 -0
- package/dist/recorders/observability/trace.js +105 -0
- package/dist/recorders/observability/trace.js.map +1 -0
- package/dist/types/core/RunnerBase.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/stages/pickEntry.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +8 -4
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/runner.d.ts +12 -0
- package/dist/types/core/runner.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/context-bisect/index.d.ts +3 -0
- package/dist/types/lib/context-bisect/index.d.ts.map +1 -1
- package/dist/types/lib/context-bisect/localize.d.ts +2 -0
- package/dist/types/lib/context-bisect/localize.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/buildInjectionEngineSubflow.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/entryScorer.d.ts +94 -0
- package/dist/types/lib/injection-engine/entryScorer.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/index.d.ts +1 -0
- package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillGraph.d.ts +21 -24
- package/dist/types/lib/injection-engine/skillGraph.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/types.d.ts +9 -4
- package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
- package/dist/types/memory/define.types.d.ts +1 -1
- package/dist/types/observe.d.ts +3 -1
- package/dist/types/observe.d.ts.map +1 -1
- package/dist/types/recorders/observability/FlowchartRecorder.d.ts +8 -1
- package/dist/types/recorders/observability/FlowchartRecorder.d.ts.map +1 -1
- package/dist/types/recorders/observability/localObservability.d.ts +49 -0
- package/dist/types/recorders/observability/localObservability.d.ts.map +1 -0
- package/dist/types/recorders/observability/trace.d.ts +120 -0
- package/dist/types/recorders/observability/trace.d.ts.map +1 -0
- package/package.json +203 -56
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace — a UI-free, JSON-lossless snapshot of a run for OFFLINE REPLAY.
|
|
3
|
+
*
|
|
4
|
+
* `localObservability()` (Tier-3 / Debug) retains a live model during a run.
|
|
5
|
+
* `serializeTrace()` freezes that model into a `Trace` — plain JSON you can
|
|
6
|
+
* persist (file, Redis, a bug report) and later rehydrate WITHOUT re-running
|
|
7
|
+
* the agent. `agentfootprint-lens`'s `<Replay trace={…} />` consumes it and
|
|
8
|
+
* rebuilds the flowchart via the existing translators.
|
|
9
|
+
*
|
|
10
|
+
* A `Trace` stores ONLY the domain-event log (the single source of truth the
|
|
11
|
+
* Lens already reads). The step graph is ALWAYS a derived projection of those
|
|
12
|
+
* events (footprint.js's "graph is derived, never post-processed" principle) —
|
|
13
|
+
* it is rebuilt at render time, never stored. Storing a derived graph would be
|
|
14
|
+
* redundant AND a redaction hazard: a second content surface a per-event
|
|
15
|
+
* `redact` could never reach.
|
|
16
|
+
*
|
|
17
|
+
* PII / trust boundary: the event log carries real content — `llm.end.content`,
|
|
18
|
+
* `tool.start.args`, `tool.end.result`, `context.injected.contentSummary`,
|
|
19
|
+
* `run`/`subflow` `payload`, `decision.branch.rationale`. A live, in-process
|
|
20
|
+
* model is fine, but **serializing is a trust-boundary crossing** (the trace
|
|
21
|
+
* can travel). So redaction is applied HERE, at serialize time, via a
|
|
22
|
+
* consumer `redact` function — PII never enters the `Trace`. `redactContent`
|
|
23
|
+
* is a ready-made redactor covering every content field. The result is
|
|
24
|
+
* self-describing: `trace.redaction`. See
|
|
25
|
+
* `docs/design/local-observability-and-pii.md`.
|
|
26
|
+
*
|
|
27
|
+
* Because `getEvents()` is FLAT (parent + every subflow), one `redact` pass
|
|
28
|
+
* covers the whole tree — no per-subflow inheritance needed here. (The engine's
|
|
29
|
+
* `RedactionPolicy` separately propagates to subflows for the OBSERVER mirror.)
|
|
30
|
+
*/
|
|
31
|
+
import type { DomainEvent } from './BoundaryRecorder.js';
|
|
32
|
+
import { type StepGraph } from './FlowchartRecorder.js';
|
|
33
|
+
/**
|
|
34
|
+
* How a `Trace` was redacted before serialization.
|
|
35
|
+
* - `'none'` — raw content (no `redact`). A `<Replay>` UI may warn.
|
|
36
|
+
* - `'pii'` — a consumer `redact` ran (the default label when one is given).
|
|
37
|
+
* - `'policy'` — produced from a declarative `RedactionPolicy` (future).
|
|
38
|
+
*/
|
|
39
|
+
export type TraceRedaction = 'none' | 'pii' | 'policy';
|
|
40
|
+
/** Cheap headline rollup, so a consumer can show totals without folding `events`. */
|
|
41
|
+
export interface TraceSummary {
|
|
42
|
+
readonly tokens: {
|
|
43
|
+
readonly input: number;
|
|
44
|
+
readonly output: number;
|
|
45
|
+
};
|
|
46
|
+
readonly llmCalls: number;
|
|
47
|
+
readonly toolCalls: number;
|
|
48
|
+
readonly durationMs?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A JSON-lossless, UI-free snapshot of one run. Persist it, ship it, replay it.
|
|
52
|
+
* `events` ARE the run (the graph is a derived projection, rebuilt at render).
|
|
53
|
+
*/
|
|
54
|
+
export interface Trace {
|
|
55
|
+
/** Schema version. Bump on a breaking shape change. */
|
|
56
|
+
readonly version: 1;
|
|
57
|
+
/** The domain-event log — the whole timeline. Already redacted if `redact` ran. */
|
|
58
|
+
readonly events: readonly DomainEvent[];
|
|
59
|
+
/**
|
|
60
|
+
* The serialized STATIC chart structure (footprint.js `buildTimeStructure`).
|
|
61
|
+
* Design-time data (stage ids/names/types/edges) — UI-free. `<Replay>` rebuilds
|
|
62
|
+
* the flowchart from this and overlays `events`, so an offline replay matches
|
|
63
|
+
* the live `<Lens>` exactly. NOT runtime-redacted (it carries no user data; the
|
|
64
|
+
* `redact` function targets runtime events).
|
|
65
|
+
*/
|
|
66
|
+
readonly structure?: unknown;
|
|
67
|
+
/** Optional headline totals. */
|
|
68
|
+
readonly summary?: TraceSummary;
|
|
69
|
+
/** Self-describing redaction state — travels with the trace. */
|
|
70
|
+
readonly redaction: TraceRedaction;
|
|
71
|
+
/** Wall-clock capture time, stamped by the caller (the engine has no clock here). */
|
|
72
|
+
readonly capturedAtMs?: number;
|
|
73
|
+
}
|
|
74
|
+
export interface SerializeTraceOptions {
|
|
75
|
+
/**
|
|
76
|
+
* Consumer redaction — runs once per domain event at the serialize boundary,
|
|
77
|
+
* so PII never enters the `Trace`. Return a scrubbed COPY (do not mutate the
|
|
78
|
+
* input — the live model still references it). Use `redactContent` for a
|
|
79
|
+
* ready-made redactor. When omitted, content is raw.
|
|
80
|
+
*/
|
|
81
|
+
readonly redact?: (event: DomainEvent) => DomainEvent;
|
|
82
|
+
/** Override the `redaction` label. Defaults to `'pii'` when `redact` is given, else `'none'`. */
|
|
83
|
+
readonly redactionLabel?: TraceRedaction;
|
|
84
|
+
/** The serialized static chart (`getSpec().buildTimeStructure`) — for `<Replay>` to rebuild the flowchart. */
|
|
85
|
+
readonly structure?: unknown;
|
|
86
|
+
/** Optional precomputed headline rollup. */
|
|
87
|
+
readonly summary?: TraceSummary;
|
|
88
|
+
/** Wall-clock capture time. Pass `Date.now()` from the call site. */
|
|
89
|
+
readonly capturedAtMs?: number;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Ready-made redactor: replaces every content-bearing field with a marker,
|
|
93
|
+
* keeping structure/counts for a useful replay. Covers ALL `DomainEvent`
|
|
94
|
+
* content surfaces — pass it to `getTrace({ redact: redactContent })`.
|
|
95
|
+
*
|
|
96
|
+
* Returns a copy only when it changes something, so unaffected events stay
|
|
97
|
+
* referentially identical (cheap) and the caller's live model is never mutated.
|
|
98
|
+
*/
|
|
99
|
+
export declare function redactContent(event: DomainEvent): DomainEvent;
|
|
100
|
+
/**
|
|
101
|
+
* Freeze a live run model into a `Trace`. Pure: pass the `BoundaryRecorder`'s
|
|
102
|
+
* `getEvents()` output.
|
|
103
|
+
*
|
|
104
|
+
* const trace = serializeTrace(handle.boundary.getEvents(), {
|
|
105
|
+
* redact: redactContent, // PII stripped before it enters the trace
|
|
106
|
+
* capturedAtMs: Date.now(),
|
|
107
|
+
* });
|
|
108
|
+
* fs.writeFileSync('run.trace.json', JSON.stringify(trace));
|
|
109
|
+
*/
|
|
110
|
+
export declare function serializeTrace(events: readonly DomainEvent[], options?: SerializeTraceOptions): Trace;
|
|
111
|
+
/**
|
|
112
|
+
* Rebuild the step graph from a `Trace` — the offline half of replay. The graph
|
|
113
|
+
* is ALWAYS a derived projection of `trace.events`; because those events were
|
|
114
|
+
* already redacted at serialize time, the rebuilt graph is clean too (no extra
|
|
115
|
+
* redaction needed — that's exactly why the graph is never stored). UI-free:
|
|
116
|
+
* `agentfootprint-lens`'s `<Replay>` translates this `StepGraph` into its
|
|
117
|
+
* xyflow render model.
|
|
118
|
+
*/
|
|
119
|
+
export declare function traceToStepGraph(trace: Trace): StepGraph;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace — a UI-free, JSON-lossless snapshot of a run for OFFLINE REPLAY.
|
|
3
|
+
*
|
|
4
|
+
* `localObservability()` (Tier-3 / Debug) retains a live model during a run.
|
|
5
|
+
* `serializeTrace()` freezes that model into a `Trace` — plain JSON you can
|
|
6
|
+
* persist (file, Redis, a bug report) and later rehydrate WITHOUT re-running
|
|
7
|
+
* the agent. `agentfootprint-lens`'s `<Replay trace={…} />` consumes it and
|
|
8
|
+
* rebuilds the flowchart via the existing translators.
|
|
9
|
+
*
|
|
10
|
+
* A `Trace` stores ONLY the domain-event log (the single source of truth the
|
|
11
|
+
* Lens already reads). The step graph is ALWAYS a derived projection of those
|
|
12
|
+
* events (footprint.js's "graph is derived, never post-processed" principle) —
|
|
13
|
+
* it is rebuilt at render time, never stored. Storing a derived graph would be
|
|
14
|
+
* redundant AND a redaction hazard: a second content surface a per-event
|
|
15
|
+
* `redact` could never reach.
|
|
16
|
+
*
|
|
17
|
+
* PII / trust boundary: the event log carries real content — `llm.end.content`,
|
|
18
|
+
* `tool.start.args`, `tool.end.result`, `context.injected.contentSummary`,
|
|
19
|
+
* `run`/`subflow` `payload`, `decision.branch.rationale`. A live, in-process
|
|
20
|
+
* model is fine, but **serializing is a trust-boundary crossing** (the trace
|
|
21
|
+
* can travel). So redaction is applied HERE, at serialize time, via a
|
|
22
|
+
* consumer `redact` function — PII never enters the `Trace`. `redactContent`
|
|
23
|
+
* is a ready-made redactor covering every content field. The result is
|
|
24
|
+
* self-describing: `trace.redaction`. See
|
|
25
|
+
* `docs/design/local-observability-and-pii.md`.
|
|
26
|
+
*
|
|
27
|
+
* Because `getEvents()` is FLAT (parent + every subflow), one `redact` pass
|
|
28
|
+
* covers the whole tree — no per-subflow inheritance needed here. (The engine's
|
|
29
|
+
* `RedactionPolicy` separately propagates to subflows for the OBSERVER mirror.)
|
|
30
|
+
*/
|
|
31
|
+
import { buildStepGraphFromEvents } from './FlowchartRecorder.js';
|
|
32
|
+
/**
|
|
33
|
+
* Ready-made redactor: replaces every content-bearing field with a marker,
|
|
34
|
+
* keeping structure/counts for a useful replay. Covers ALL `DomainEvent`
|
|
35
|
+
* content surfaces — pass it to `getTrace({ redact: redactContent })`.
|
|
36
|
+
*
|
|
37
|
+
* Returns a copy only when it changes something, so unaffected events stay
|
|
38
|
+
* referentially identical (cheap) and the caller's live model is never mutated.
|
|
39
|
+
*/
|
|
40
|
+
export function redactContent(event) {
|
|
41
|
+
switch (event.type) {
|
|
42
|
+
case 'llm.end':
|
|
43
|
+
return { ...event, content: `[${event.content.length} chars]` };
|
|
44
|
+
case 'tool.start':
|
|
45
|
+
return event.args !== undefined ? { ...event, args: '[redacted]' } : event;
|
|
46
|
+
case 'tool.end':
|
|
47
|
+
return event.result !== undefined ? { ...event, result: '[redacted]' } : event;
|
|
48
|
+
case 'context.injected':
|
|
49
|
+
return event.contentSummary !== undefined
|
|
50
|
+
? { ...event, contentSummary: '[redacted]' }
|
|
51
|
+
: event;
|
|
52
|
+
case 'run.entry':
|
|
53
|
+
case 'run.exit':
|
|
54
|
+
return event.payload !== undefined ? { ...event, payload: '[redacted]' } : event;
|
|
55
|
+
case 'subflow.entry':
|
|
56
|
+
case 'subflow.exit':
|
|
57
|
+
return event.payload !== undefined ? { ...event, payload: '[redacted]' } : event;
|
|
58
|
+
case 'decision.branch':
|
|
59
|
+
return event.rationale !== undefined ? { ...event, rationale: '[redacted]' } : event;
|
|
60
|
+
default:
|
|
61
|
+
return event;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Freeze a live run model into a `Trace`. Pure: pass the `BoundaryRecorder`'s
|
|
66
|
+
* `getEvents()` output.
|
|
67
|
+
*
|
|
68
|
+
* const trace = serializeTrace(handle.boundary.getEvents(), {
|
|
69
|
+
* redact: redactContent, // PII stripped before it enters the trace
|
|
70
|
+
* capturedAtMs: Date.now(),
|
|
71
|
+
* });
|
|
72
|
+
* fs.writeFileSync('run.trace.json', JSON.stringify(trace));
|
|
73
|
+
*/
|
|
74
|
+
export function serializeTrace(events, options = {}) {
|
|
75
|
+
const { redact, redactionLabel, structure, summary, capturedAtMs } = options;
|
|
76
|
+
// A fresh array either way, so a held Trace is detached from the live store.
|
|
77
|
+
const safeEvents = redact ? events.map((e) => redact(e)) : events.slice();
|
|
78
|
+
const redaction = redactionLabel ?? (redact ? 'pii' : 'none');
|
|
79
|
+
return {
|
|
80
|
+
version: 1,
|
|
81
|
+
events: safeEvents,
|
|
82
|
+
...(structure !== undefined && { structure }),
|
|
83
|
+
...(summary !== undefined && { summary }),
|
|
84
|
+
redaction,
|
|
85
|
+
...(capturedAtMs !== undefined && { capturedAtMs }),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Rebuild the step graph from a `Trace` — the offline half of replay. The graph
|
|
90
|
+
* is ALWAYS a derived projection of `trace.events`; because those events were
|
|
91
|
+
* already redacted at serialize time, the rebuilt graph is clean too (no extra
|
|
92
|
+
* redaction needed — that's exactly why the graph is never stored). UI-free:
|
|
93
|
+
* `agentfootprint-lens`'s `<Replay>` translates this `StepGraph` into its
|
|
94
|
+
* xyflow render model.
|
|
95
|
+
*/
|
|
96
|
+
export function traceToStepGraph(trace) {
|
|
97
|
+
return buildStepGraphFromEvents(trace.events);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../../src/recorders/observability/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,wBAAwB,EAAkB,MAAM,wBAAwB,CAAC;AA6DlF;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAAkB;IAC9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,SAAS,EAAE,CAAC;QAClE,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7E,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACjF,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,cAAc,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE;gBAC5C,CAAC,CAAC,KAAK,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACnF,KAAK,eAAe,CAAC;QACrB,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACnF,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACvF;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA8B,EAC9B,UAAiC,EAAE;IAEnC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAC7E,6EAA6E;IAC7E,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1E,MAAM,SAAS,GAAmB,cAAc,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9E,OAAO;QACL,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,UAAU;QAClB,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7C,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC,SAAS;QACT,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CircuitBreaker — pure state-machine functions for the Nygard breaker
|
|
3
|
+
* pattern.
|
|
4
|
+
*
|
|
5
|
+
* Refactored from a class-with-instance-state to PURE FUNCTIONS that
|
|
6
|
+
* take a state record and return a new one. Reasons:
|
|
7
|
+
*
|
|
8
|
+
* 1. **No hidden runtime state.** Breaker state lives in scope where
|
|
9
|
+
* it's visible to commitLog, narrative, and rules — the footprintjs
|
|
10
|
+
* "everything in scope" principle. The closure used to be the
|
|
11
|
+
* source of truth and scope held only a projection; now scope IS
|
|
12
|
+
* the source of truth.
|
|
13
|
+
*
|
|
14
|
+
* 2. **Round-trippable across gate invocations.** Because state is a
|
|
15
|
+
* plain record, gate's outputMapper writes it back to agent scope;
|
|
16
|
+
* agent scope persists across the ReAct loop's many LLM-call gate
|
|
17
|
+
* invocations; gate's inputMapper reads it back in for the next
|
|
18
|
+
* call. Per-process persistence comes from the agent scope, not
|
|
19
|
+
* from a closure that hides between runs.
|
|
20
|
+
*
|
|
21
|
+
* 3. **Distributable later.** A future v2.12 `BreakerStateStore`
|
|
22
|
+
* adapter (Redis/DynamoDB) just needs to serialize/deserialize the
|
|
23
|
+
* state record. No class instances to reconstruct.
|
|
24
|
+
*
|
|
25
|
+
* 4. **Testable in isolation.** Pure functions; no instance setup.
|
|
26
|
+
*
|
|
27
|
+
* Pattern: Nygard *Release It!* — three states (CLOSED → OPEN →
|
|
28
|
+
* HALF-OPEN) with cooldown and probe-success thresholds.
|
|
29
|
+
*/
|
|
30
|
+
import type { CircuitBreakerConfig } from './types.js';
|
|
31
|
+
export type CircuitState = 'closed' | 'open' | 'half-open';
|
|
32
|
+
/** Plain serializable record holding one breaker's full state. */
|
|
33
|
+
export interface BreakerState {
|
|
34
|
+
state: CircuitState;
|
|
35
|
+
consecutiveFailures: number;
|
|
36
|
+
consecutiveSuccesses: number;
|
|
37
|
+
openedAt: number;
|
|
38
|
+
lastErrorMessage?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Thrown by `assertAdmit()` when the breaker is OPEN and the cooldown
|
|
42
|
+
* window has not elapsed. The reliability gate stage catches this,
|
|
43
|
+
* classifies via `classifyError` → `'circuit-open'`, and lets the
|
|
44
|
+
* post-decide rules route on it.
|
|
45
|
+
*/
|
|
46
|
+
export declare class CircuitOpenError extends Error {
|
|
47
|
+
readonly code: "ERR_CIRCUIT_OPEN";
|
|
48
|
+
readonly cause: unknown;
|
|
49
|
+
readonly retryAfter: number;
|
|
50
|
+
constructor(providerName: string, lastErrorMessage: string | undefined, retryAfter: number);
|
|
51
|
+
}
|
|
52
|
+
/** Initial state for a freshly-CLOSED breaker. */
|
|
53
|
+
export declare function initialBreakerState(): BreakerState;
|
|
54
|
+
/**
|
|
55
|
+
* Decide whether to admit a call. Returns the (possibly-updated) state
|
|
56
|
+
* AND whether to admit. If OPEN and cooldown elapsed, transitions to
|
|
57
|
+
* HALF-OPEN and admits. Pure: caller must use the returned state.
|
|
58
|
+
*
|
|
59
|
+
* Usage in the gate stage:
|
|
60
|
+
* ```ts
|
|
61
|
+
* const { admitted, nextState } = admitCall(scope.breakerStates[name], config);
|
|
62
|
+
* scope.breakerStates[name] = nextState;
|
|
63
|
+
* if (!admitted) throw new CircuitOpenError(name, nextState.lastErrorMessage, ...);
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function admitCall(state: BreakerState, config: CircuitBreakerConfig | undefined): {
|
|
67
|
+
admitted: boolean;
|
|
68
|
+
nextState: BreakerState;
|
|
69
|
+
};
|
|
70
|
+
/** Record a successful call. Returns the (possibly-updated) state. */
|
|
71
|
+
export declare function recordSuccess(state: BreakerState, config: CircuitBreakerConfig | undefined): BreakerState;
|
|
72
|
+
/** Record a failed call. Returns the (possibly-updated) state. */
|
|
73
|
+
export declare function recordFailure(state: BreakerState, err: unknown, config: CircuitBreakerConfig | undefined): BreakerState;
|
|
74
|
+
/** Compute the next probe time given a state + config. */
|
|
75
|
+
export declare function nextProbeTime(state: BreakerState, config: CircuitBreakerConfig | undefined): number;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* buildReliabilityGateChart — produces a footprintjs FlowChart that wraps
|
|
3
|
+
* an LLM call with rules-based reliability semantics, using the native
|
|
4
|
+
* `decide()` DSL via `addDeciderFunction` decider stages.
|
|
5
|
+
*
|
|
6
|
+
* The returned chart is mounted as a subflow in the agent's chart at
|
|
7
|
+
* Agent.build() time (only when reliability is configured). Inside the
|
|
8
|
+
* subflow:
|
|
9
|
+
*
|
|
10
|
+
* PreCheck (decider) → CallProvider (function) → PostDecide (decider)
|
|
11
|
+
* │
|
|
12
|
+
* ┌───────────────┘
|
|
13
|
+
* ▼ loopTo('pre-check')
|
|
14
|
+
*
|
|
15
|
+
* Branch outcomes (escape via $break() to stop the gate's loop;
|
|
16
|
+
* fall-through via no-$break to trigger loopTo back to PreCheck):
|
|
17
|
+
*
|
|
18
|
+
* PreCheck:
|
|
19
|
+
* 'continue' → no-op → falls through to CallProvider
|
|
20
|
+
* 'fail-fast' → set failKind, $emit, $break(reason)
|
|
21
|
+
*
|
|
22
|
+
* PostDecide:
|
|
23
|
+
* 'ok' → $break() (subflow exits normally; agent continues)
|
|
24
|
+
* 'retry' → bump attempt; falls through to loopTo
|
|
25
|
+
* 'retry-other' → bump providerIdx; falls through to loopTo
|
|
26
|
+
* 'fallback' → call config.fallback(); $break() on success
|
|
27
|
+
* 'fail-fast' → set failKind, $emit, $break(reason)
|
|
28
|
+
*
|
|
29
|
+
* The subflow is mounted WITHOUT `propagateBreak: true`. Subflow $break is
|
|
30
|
+
* local — agent.ts adds a `TranslateFailFast` agent-level stage AFTER the
|
|
31
|
+
* subflow that reads scope.reliabilityFailKind and converts it into an
|
|
32
|
+
* agent-level `$break(reason)`. This split lets normal subflow exits
|
|
33
|
+
* (`ok`/`fallback`) leave the agent running while fail-fast stops it.
|
|
34
|
+
*
|
|
35
|
+
* Three-channel discipline preserved:
|
|
36
|
+
* • SCOPE STATE — failKind/failPayload/failReason mapped to parent via
|
|
37
|
+
* outputMapper; consumed by agent's TranslateFailFast.
|
|
38
|
+
* • $emit — passive observability for external consumers.
|
|
39
|
+
* • $break(reason)— control flow + human reason for narrative.
|
|
40
|
+
*/
|
|
41
|
+
import type { FlowChart } from 'footprintjs';
|
|
42
|
+
import type { ReliabilityConfig } from './types.js';
|
|
43
|
+
/**
|
|
44
|
+
* Build the reliability gate FlowChart from a config. Mount via
|
|
45
|
+
* `addSubFlowChartNext` in the agent's chart — see `Agent.build()`.
|
|
46
|
+
*
|
|
47
|
+
* Closure state captured by stage functions:
|
|
48
|
+
* • `breakers` — Map<providerName, CircuitBreaker>; per-instance state
|
|
49
|
+
* persists across gate invocations within ONE agent process.
|
|
50
|
+
* • `preRules` / `postRules` — frozen rule arrays.
|
|
51
|
+
* • `fallbackFn` — consumer's fallback function, if configured.
|
|
52
|
+
*/
|
|
53
|
+
export declare function buildReliabilityGateChart(config: ReliabilityConfig): FlowChart;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* classifyError — pure function mapping a thrown error to one of the
|
|
3
|
+
* coarse `ReliabilityScope.errorKind` categories used by reliability rules.
|
|
4
|
+
*
|
|
5
|
+
* Centralized so rules read structured `errorKind` instead of doing
|
|
6
|
+
* regex on `error.message` themselves. Add new categories ONLY when a
|
|
7
|
+
* new rule needs to discriminate them — keep the taxonomy small.
|
|
8
|
+
*
|
|
9
|
+
* Categories:
|
|
10
|
+
* • 'ok' — no error (caller should pass `undefined` or omit)
|
|
11
|
+
* • 'circuit-open' — `CircuitOpenError` from the breaker layer
|
|
12
|
+
* • 'rate-limit' — HTTP 429 or vendor rate-limit signal
|
|
13
|
+
* • '5xx-transient' — HTTP 5xx, ETIMEDOUT, ECONNRESET, ECONNREFUSED
|
|
14
|
+
* • 'schema-fail' — `OutputSchemaError` from the schema validator
|
|
15
|
+
* • 'unknown' — anything else (default; still routable but
|
|
16
|
+
* consumers usually `'fail-fast'` on this)
|
|
17
|
+
*/
|
|
18
|
+
import type { ReliabilityScope } from './types.js';
|
|
19
|
+
type ErrorKind = ReliabilityScope['errorKind'];
|
|
20
|
+
/**
|
|
21
|
+
* Classify an error into a `ReliabilityScope['errorKind']` category.
|
|
22
|
+
*
|
|
23
|
+
* @param err - The thrown value. May be an Error, a vendor SDK error
|
|
24
|
+
* shape with `.status`/`.code`, or anything else (`unknown` defaults).
|
|
25
|
+
* @returns the matching coarse category string.
|
|
26
|
+
*/
|
|
27
|
+
export declare function classifyError(err: unknown): ErrorKind;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reliability — public surface for the v2.11.1 rules-based reliability
|
|
3
|
+
* subsystem. Internal-only helpers (CircuitBreaker class, classifyError,
|
|
4
|
+
* buildReliabilityGate) live in their own files; this barrel exports
|
|
5
|
+
* the consumer-facing types and the typed error.
|
|
6
|
+
*
|
|
7
|
+
* Consumer use:
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { Agent } from 'agentfootprint';
|
|
10
|
+
* import type { ReliabilityRule, ReliabilityScope } from 'agentfootprint/reliability';
|
|
11
|
+
* import { ReliabilityFailFastError } from 'agentfootprint/reliability';
|
|
12
|
+
*
|
|
13
|
+
* const agent = Agent.create({...}).reliability({
|
|
14
|
+
* postDecide: [
|
|
15
|
+
* { when: (s) => s.errorKind === '5xx-transient' && s.attempt < 3,
|
|
16
|
+
* then: 'retry', kind: 'transient-retry' },
|
|
17
|
+
* { when: (s) => s.error !== undefined,
|
|
18
|
+
* then: 'fail-fast', kind: 'unrecoverable' },
|
|
19
|
+
* ],
|
|
20
|
+
* }).build();
|
|
21
|
+
*
|
|
22
|
+
* try {
|
|
23
|
+
* await agent.run({ message: '...' });
|
|
24
|
+
* } catch (e) {
|
|
25
|
+
* if (e instanceof ReliabilityFailFastError) {
|
|
26
|
+
* console.log(e.kind, e.reason);
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export type { CircuitBreakerConfig, ReliabilityConfig, ReliabilityDecision, ReliabilityFallbackFn, ReliabilityProvider, ReliabilityRule, ReliabilityScope, } from './types.js';
|
|
32
|
+
export { ReliabilityFailFastError } from './types.js';
|
|
33
|
+
export { CircuitOpenError, initialBreakerState, type BreakerState, type CircuitState, } from './CircuitBreaker.js';
|
|
34
|
+
export { ValidationFailure, lastNValidationErrorsMatch, defaultStuckLoopRule, } from '../core/agent/stages/reliabilityExecution.js';
|
|
35
|
+
export type { OutputSchemaValidator } from '../core/agent/stages/reliabilityExecution.js';
|