agentfootprint 9.41.0 → 9.44.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/AGENTS.md +30 -1
- package/CLAUDE.md +3 -1
- package/ai-instructions/claude-code/SKILL.md +31 -1
- package/dist/adapters/hosting/agentcore.js +163 -23
- package/dist/adapters/hosting/agentcore.js.map +1 -1
- package/dist/adapters/hosting/firestoreSessions.js +184 -14
- package/dist/adapters/hosting/firestoreSessions.js.map +1 -1
- package/dist/adapters/hosting/googleAgentEngine.js +29 -0
- package/dist/adapters/hosting/googleAgentEngine.js.map +1 -1
- package/dist/artifacts/conformance/cases.js +20 -0
- package/dist/artifacts/conformance/cases.js.map +1 -1
- package/dist/artifacts/scopePath.js +41 -1
- package/dist/artifacts/scopePath.js.map +1 -1
- package/dist/core/Agent.js +17 -1
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/agent/AgentBuilder.js +56 -1
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +5 -1
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/buildDynamicAgentChart.js +5 -1
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/coverage/absent.js +163 -0
- package/dist/core/agent/coverage/absent.js.map +1 -0
- package/dist/core/agent/coverage/answer.js +90 -0
- package/dist/core/agent/coverage/answer.js.map +1 -0
- package/dist/core/agent/coverage/evidence.js +90 -0
- package/dist/core/agent/coverage/evidence.js.map +1 -0
- package/dist/core/agent/coverage/index.js +37 -0
- package/dist/core/agent/coverage/index.js.map +1 -0
- package/dist/core/agent/coverage/items.js +91 -0
- package/dist/core/agent/coverage/items.js.map +1 -0
- package/dist/core/agent/coverage/ledger.js +131 -0
- package/dist/core/agent/coverage/ledger.js.map +1 -0
- package/dist/core/agent/coverage/read.js +56 -0
- package/dist/core/agent/coverage/read.js.map +1 -0
- package/dist/core/agent/coverage/types.js +15 -0
- package/dist/core/agent/coverage/types.js.map +1 -0
- package/dist/core/agent/evidence/evidenceIndex.js +18 -1
- package/dist/core/agent/evidence/evidenceIndex.js.map +1 -1
- package/dist/core/agent/stages/prepareFinal.js +44 -3
- package/dist/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js +109 -3
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/agent/toolEffects.js +1 -1
- package/dist/core/outputFallback.js.map +1 -1
- package/dist/debug.js +49 -25
- package/dist/debug.js.map +1 -1
- package/dist/esm/adapters/hosting/agentcore.d.ts +8 -0
- package/dist/esm/adapters/hosting/agentcore.js +163 -23
- package/dist/esm/adapters/hosting/agentcore.js.map +1 -1
- package/dist/esm/adapters/hosting/firestoreSessions.d.ts +162 -14
- package/dist/esm/adapters/hosting/firestoreSessions.js +182 -13
- package/dist/esm/adapters/hosting/firestoreSessions.js.map +1 -1
- package/dist/esm/adapters/hosting/googleAgentEngine.d.ts +16 -1
- package/dist/esm/adapters/hosting/googleAgentEngine.js +29 -0
- package/dist/esm/adapters/hosting/googleAgentEngine.js.map +1 -1
- package/dist/esm/artifacts/conformance/cases.js +20 -0
- package/dist/esm/artifacts/conformance/cases.js.map +1 -1
- package/dist/esm/artifacts/scopePath.d.ts +31 -0
- package/dist/esm/artifacts/scopePath.js +41 -1
- package/dist/esm/artifacts/scopePath.js.map +1 -1
- package/dist/esm/core/Agent.d.ts +8 -1
- package/dist/esm/core/Agent.js +18 -2
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.d.ts +43 -0
- package/dist/esm/core/agent/AgentBuilder.js +56 -1
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/buildAgentChart.d.ts +9 -0
- package/dist/esm/core/agent/buildAgentChart.js +6 -2
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.js +6 -2
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/coverage/absent.d.ts +104 -0
- package/dist/esm/core/agent/coverage/absent.js +157 -0
- package/dist/esm/core/agent/coverage/absent.js.map +1 -0
- package/dist/esm/core/agent/coverage/answer.d.ts +46 -0
- package/dist/esm/core/agent/coverage/answer.js +86 -0
- package/dist/esm/core/agent/coverage/answer.js.map +1 -0
- package/dist/esm/core/agent/coverage/evidence.d.ts +68 -0
- package/dist/esm/core/agent/coverage/evidence.js +86 -0
- package/dist/esm/core/agent/coverage/evidence.js.map +1 -0
- package/dist/esm/core/agent/coverage/index.d.ts +17 -0
- package/dist/esm/core/agent/coverage/index.js +17 -0
- package/dist/esm/core/agent/coverage/index.js.map +1 -0
- package/dist/esm/core/agent/coverage/items.d.ts +35 -0
- package/dist/esm/core/agent/coverage/items.js +85 -0
- package/dist/esm/core/agent/coverage/items.js.map +1 -0
- package/dist/esm/core/agent/coverage/ledger.d.ts +80 -0
- package/dist/esm/core/agent/coverage/ledger.js +125 -0
- package/dist/esm/core/agent/coverage/ledger.js.map +1 -0
- package/dist/esm/core/agent/coverage/read.d.ts +51 -0
- package/dist/esm/core/agent/coverage/read.js +52 -0
- package/dist/esm/core/agent/coverage/read.js.map +1 -0
- package/dist/esm/core/agent/coverage/types.d.ts +142 -0
- package/dist/esm/core/agent/coverage/types.js +14 -0
- package/dist/esm/core/agent/coverage/types.js.map +1 -0
- package/dist/esm/core/agent/evidence/evidenceIndex.d.ts +7 -0
- package/dist/esm/core/agent/evidence/evidenceIndex.js +18 -1
- package/dist/esm/core/agent/evidence/evidenceIndex.js.map +1 -1
- package/dist/esm/core/agent/stages/prepareFinal.d.ts +18 -0
- package/dist/esm/core/agent/stages/prepareFinal.js +42 -2
- package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.js +109 -3
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/toolEffects.d.ts +2 -2
- package/dist/esm/core/agent/toolEffects.js +1 -1
- package/dist/esm/core/agent/types.d.ts +14 -0
- package/dist/esm/core/outputFallback.d.ts +15 -1
- package/dist/esm/core/outputFallback.js.map +1 -1
- package/dist/esm/debug.d.ts +1 -0
- package/dist/esm/debug.js +7 -0
- package/dist/esm/debug.js.map +1 -1
- package/dist/esm/events/dispatcher.d.ts +1 -1
- package/dist/esm/events/dispatcher.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +82 -0
- package/dist/esm/events/registry.d.ts +11 -1
- package/dist/esm/events/registry.js +10 -0
- package/dist/esm/events/registry.js.map +1 -1
- package/dist/esm/hosting/conformance/cases.d.ts +2 -1
- package/dist/esm/hosting/conformance/cases.js +229 -22
- package/dist/esm/hosting/conformance/cases.js.map +1 -1
- package/dist/esm/hosting/conformance/types.d.ts +7 -7
- package/dist/esm/hosting/errors.d.ts +28 -0
- package/dist/esm/hosting/errors.js +40 -0
- package/dist/esm/hosting/errors.js.map +1 -1
- package/dist/esm/hosting/index.d.ts +11 -3
- package/dist/esm/hosting/index.js +15 -2
- package/dist/esm/hosting/index.js.map +1 -1
- package/dist/esm/hosting/memorySessions.js +39 -0
- package/dist/esm/hosting/memorySessions.js.map +1 -1
- package/dist/esm/hosting/sessionRetention.d.ts +56 -0
- package/dist/esm/hosting/sessionRetention.js +69 -0
- package/dist/esm/hosting/sessionRetention.js.map +1 -0
- package/dist/esm/hosting/sqliteSessions.d.ts +11 -1
- package/dist/esm/hosting/sqliteSessions.js +51 -0
- package/dist/esm/hosting/sqliteSessions.js.map +1 -1
- package/dist/esm/hosting/types.d.ts +184 -0
- package/dist/esm/hosting/types.js +9 -0
- package/dist/esm/hosting/types.js.map +1 -1
- package/dist/esm/hosting-providers.d.ts +15 -11
- package/dist/esm/hosting-providers.js +21 -11
- package/dist/esm/hosting-providers.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/context-bisect/arms/apply.d.ts +54 -0
- package/dist/esm/lib/context-bisect/arms/apply.js +41 -0
- package/dist/esm/lib/context-bisect/arms/apply.js.map +1 -0
- package/dist/esm/lib/context-bisect/arms/compare.d.ts +27 -0
- package/dist/esm/lib/context-bisect/arms/compare.js +112 -0
- package/dist/esm/lib/context-bisect/arms/compare.js.map +1 -0
- package/dist/esm/lib/context-bisect/arms/index.d.ts +16 -0
- package/dist/esm/lib/context-bisect/arms/index.js +16 -0
- package/dist/esm/lib/context-bisect/arms/index.js.map +1 -0
- package/dist/esm/lib/context-bisect/arms/manifest.d.ts +79 -0
- package/dist/esm/lib/context-bisect/arms/manifest.js +199 -0
- package/dist/esm/lib/context-bisect/arms/manifest.js.map +1 -0
- package/dist/esm/lib/context-bisect/arms/probe.d.ts +54 -0
- package/dist/esm/lib/context-bisect/arms/probe.js +125 -0
- package/dist/esm/lib/context-bisect/arms/probe.js.map +1 -0
- package/dist/esm/lib/context-bisect/arms/types.d.ts +319 -0
- package/dist/esm/lib/context-bisect/arms/types.js +67 -0
- package/dist/esm/lib/context-bisect/arms/types.js.map +1 -0
- package/dist/esm/lib/context-bisect/arms/validate.d.ts +26 -0
- package/dist/esm/lib/context-bisect/arms/validate.js +122 -0
- package/dist/esm/lib/context-bisect/arms/validate.js.map +1 -0
- package/dist/esm/lib/context-bisect/arms/verdict.d.ts +53 -0
- package/dist/esm/lib/context-bisect/arms/verdict.js +103 -0
- package/dist/esm/lib/context-bisect/arms/verdict.js.map +1 -0
- package/dist/esm/lib/context-bisect/index.d.ts +1 -0
- package/dist/esm/lib/context-bisect/index.js +5 -0
- package/dist/esm/lib/context-bisect/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/index.d.ts +1 -1
- package/dist/esm/lib/injection-engine/index.js +3 -1
- package/dist/esm/lib/injection-engine/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillExamples.d.ts +16 -13
- package/dist/esm/lib/injection-engine/skillExamples.js +16 -60
- package/dist/esm/lib/injection-engine/skillExamples.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillGraph.d.ts +50 -0
- package/dist/esm/lib/injection-engine/skillGraph.js +52 -1
- package/dist/esm/lib/injection-engine/skillGraph.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillGraphCheckup.d.ts +6 -5
- package/dist/esm/lib/injection-engine/skillGraphCheckup.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillNeverRoutes.d.ts +131 -0
- package/dist/esm/lib/injection-engine/skillNeverRoutes.js +228 -0
- package/dist/esm/lib/injection-engine/skillNeverRoutes.js.map +1 -0
- package/dist/esm/lib/injection-engine/skillPartition.d.ts +69 -0
- package/dist/esm/lib/injection-engine/skillPartition.js +273 -0
- package/dist/esm/lib/injection-engine/skillPartition.js.map +1 -0
- package/dist/esm/lib/injection-engine/skillsFromDir.d.ts +83 -3
- package/dist/esm/lib/injection-engine/skillsFromDir.js +118 -7
- package/dist/esm/lib/injection-engine/skillsFromDir.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillsFromDirRoutes.d.ts +105 -0
- package/dist/esm/lib/injection-engine/skillsFromDirRoutes.js +169 -0
- package/dist/esm/lib/injection-engine/skillsFromDirRoutes.js.map +1 -0
- package/dist/esm/lib/injection-engine/startRuleClaim.d.ts +91 -0
- package/dist/esm/lib/injection-engine/startRuleClaim.js +78 -0
- package/dist/esm/lib/injection-engine/startRuleClaim.js.map +1 -0
- package/dist/esm/lib/injection-engine/toolOutcome.d.ts +12 -3
- package/dist/esm/lib/injection-engine/toolOutcome.js +2 -1
- package/dist/esm/lib/injection-engine/toolOutcome.js.map +1 -1
- package/dist/events/dispatcher.js.map +1 -1
- package/dist/events/registry.js +10 -0
- package/dist/events/registry.js.map +1 -1
- package/dist/hosting/conformance/cases.js +229 -22
- package/dist/hosting/conformance/cases.js.map +1 -1
- package/dist/hosting/errors.js +42 -1
- package/dist/hosting/errors.js.map +1 -1
- package/dist/hosting/index.js +18 -2
- package/dist/hosting/index.js.map +1 -1
- package/dist/hosting/memorySessions.js +39 -0
- package/dist/hosting/memorySessions.js.map +1 -1
- package/dist/hosting/sessionRetention.js +73 -0
- package/dist/hosting/sessionRetention.js.map +1 -0
- package/dist/hosting/sqliteSessions.js +51 -0
- package/dist/hosting/sqliteSessions.js.map +1 -1
- package/dist/hosting/types.js +10 -1
- package/dist/hosting/types.js.map +1 -1
- package/dist/hosting-providers.js +21 -11
- package/dist/hosting-providers.js.map +1 -1
- package/dist/index.js +72 -43
- package/dist/index.js.map +1 -1
- package/dist/lib/context-bisect/arms/apply.js +45 -0
- package/dist/lib/context-bisect/arms/apply.js.map +1 -0
- package/dist/lib/context-bisect/arms/compare.js +116 -0
- package/dist/lib/context-bisect/arms/compare.js.map +1 -0
- package/dist/lib/context-bisect/arms/index.js +35 -0
- package/dist/lib/context-bisect/arms/index.js.map +1 -0
- package/dist/lib/context-bisect/arms/manifest.js +207 -0
- package/dist/lib/context-bisect/arms/manifest.js.map +1 -0
- package/dist/lib/context-bisect/arms/probe.js +132 -0
- package/dist/lib/context-bisect/arms/probe.js.map +1 -0
- package/dist/lib/context-bisect/arms/types.js +68 -0
- package/dist/lib/context-bisect/arms/types.js.map +1 -0
- package/dist/lib/context-bisect/arms/validate.js +128 -0
- package/dist/lib/context-bisect/arms/validate.js.map +1 -0
- package/dist/lib/context-bisect/arms/verdict.js +107 -0
- package/dist/lib/context-bisect/arms/verdict.js.map +1 -0
- package/dist/lib/context-bisect/index.js +23 -1
- package/dist/lib/context-bisect/index.js.map +1 -1
- package/dist/lib/injection-engine/index.js +4 -1
- package/dist/lib/injection-engine/index.js.map +1 -1
- package/dist/lib/injection-engine/skillExamples.js +24 -68
- package/dist/lib/injection-engine/skillExamples.js.map +1 -1
- package/dist/lib/injection-engine/skillGraph.js +52 -1
- package/dist/lib/injection-engine/skillGraph.js.map +1 -1
- package/dist/lib/injection-engine/skillGraphCheckup.js.map +1 -1
- package/dist/lib/injection-engine/skillNeverRoutes.js +234 -0
- package/dist/lib/injection-engine/skillNeverRoutes.js.map +1 -0
- package/dist/lib/injection-engine/skillPartition.js +277 -0
- package/dist/lib/injection-engine/skillPartition.js.map +1 -0
- package/dist/lib/injection-engine/skillsFromDir.js +121 -9
- package/dist/lib/injection-engine/skillsFromDir.js.map +1 -1
- package/dist/lib/injection-engine/skillsFromDirRoutes.js +174 -0
- package/dist/lib/injection-engine/skillsFromDirRoutes.js.map +1 -0
- package/dist/lib/injection-engine/startRuleClaim.js +85 -0
- package/dist/lib/injection-engine/startRuleClaim.js.map +1 -0
- package/dist/lib/injection-engine/toolOutcome.js +2 -1
- package/dist/lib/injection-engine/toolOutcome.js.map +1 -1
- package/dist/types/adapters/hosting/agentcore.d.ts +8 -0
- package/dist/types/adapters/hosting/agentcore.d.ts.map +1 -1
- package/dist/types/adapters/hosting/firestoreSessions.d.ts +162 -14
- package/dist/types/adapters/hosting/firestoreSessions.d.ts.map +1 -1
- package/dist/types/adapters/hosting/googleAgentEngine.d.ts +16 -1
- package/dist/types/adapters/hosting/googleAgentEngine.d.ts.map +1 -1
- package/dist/types/artifacts/conformance/cases.d.ts.map +1 -1
- package/dist/types/artifacts/scopePath.d.ts +31 -0
- package/dist/types/artifacts/scopePath.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +8 -1
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/AgentBuilder.d.ts +43 -0
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts +9 -0
- 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/coverage/absent.d.ts +105 -0
- package/dist/types/core/agent/coverage/absent.d.ts.map +1 -0
- package/dist/types/core/agent/coverage/answer.d.ts +47 -0
- package/dist/types/core/agent/coverage/answer.d.ts.map +1 -0
- package/dist/types/core/agent/coverage/evidence.d.ts +69 -0
- package/dist/types/core/agent/coverage/evidence.d.ts.map +1 -0
- package/dist/types/core/agent/coverage/index.d.ts +18 -0
- package/dist/types/core/agent/coverage/index.d.ts.map +1 -0
- package/dist/types/core/agent/coverage/items.d.ts +36 -0
- package/dist/types/core/agent/coverage/items.d.ts.map +1 -0
- package/dist/types/core/agent/coverage/ledger.d.ts +81 -0
- package/dist/types/core/agent/coverage/ledger.d.ts.map +1 -0
- package/dist/types/core/agent/coverage/read.d.ts +52 -0
- package/dist/types/core/agent/coverage/read.d.ts.map +1 -0
- package/dist/types/core/agent/coverage/types.d.ts +143 -0
- package/dist/types/core/agent/coverage/types.d.ts.map +1 -0
- package/dist/types/core/agent/evidence/evidenceIndex.d.ts +7 -0
- package/dist/types/core/agent/evidence/evidenceIndex.d.ts.map +1 -1
- package/dist/types/core/agent/stages/prepareFinal.d.ts +18 -0
- package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/toolEffects.d.ts +2 -2
- package/dist/types/core/agent/types.d.ts +14 -0
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/outputFallback.d.ts +15 -1
- package/dist/types/core/outputFallback.d.ts.map +1 -1
- package/dist/types/debug.d.ts +1 -0
- package/dist/types/debug.d.ts.map +1 -1
- package/dist/types/events/dispatcher.d.ts +1 -1
- package/dist/types/events/dispatcher.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +82 -0
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/registry.d.ts +11 -1
- package/dist/types/events/registry.d.ts.map +1 -1
- package/dist/types/hosting/conformance/cases.d.ts +2 -1
- package/dist/types/hosting/conformance/cases.d.ts.map +1 -1
- package/dist/types/hosting/conformance/types.d.ts +7 -7
- package/dist/types/hosting/conformance/types.d.ts.map +1 -1
- package/dist/types/hosting/errors.d.ts +28 -0
- package/dist/types/hosting/errors.d.ts.map +1 -1
- package/dist/types/hosting/index.d.ts +11 -3
- package/dist/types/hosting/index.d.ts.map +1 -1
- package/dist/types/hosting/memorySessions.d.ts.map +1 -1
- package/dist/types/hosting/sessionRetention.d.ts +57 -0
- package/dist/types/hosting/sessionRetention.d.ts.map +1 -0
- package/dist/types/hosting/sqliteSessions.d.ts +11 -1
- package/dist/types/hosting/sqliteSessions.d.ts.map +1 -1
- package/dist/types/hosting/types.d.ts +184 -0
- package/dist/types/hosting/types.d.ts.map +1 -1
- package/dist/types/hosting-providers.d.ts +15 -11
- package/dist/types/hosting-providers.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/context-bisect/arms/apply.d.ts +55 -0
- package/dist/types/lib/context-bisect/arms/apply.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/arms/compare.d.ts +28 -0
- package/dist/types/lib/context-bisect/arms/compare.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/arms/index.d.ts +17 -0
- package/dist/types/lib/context-bisect/arms/index.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/arms/manifest.d.ts +80 -0
- package/dist/types/lib/context-bisect/arms/manifest.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/arms/probe.d.ts +55 -0
- package/dist/types/lib/context-bisect/arms/probe.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/arms/types.d.ts +320 -0
- package/dist/types/lib/context-bisect/arms/types.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/arms/validate.d.ts +27 -0
- package/dist/types/lib/context-bisect/arms/validate.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/arms/verdict.d.ts +54 -0
- package/dist/types/lib/context-bisect/arms/verdict.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/index.d.ts +1 -0
- package/dist/types/lib/context-bisect/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/index.d.ts +1 -1
- package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillExamples.d.ts +16 -13
- package/dist/types/lib/injection-engine/skillExamples.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillGraph.d.ts +50 -0
- package/dist/types/lib/injection-engine/skillGraph.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts +6 -5
- package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillNeverRoutes.d.ts +132 -0
- package/dist/types/lib/injection-engine/skillNeverRoutes.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/skillPartition.d.ts +70 -0
- package/dist/types/lib/injection-engine/skillPartition.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/skillsFromDir.d.ts +83 -3
- package/dist/types/lib/injection-engine/skillsFromDir.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillsFromDirRoutes.d.ts +106 -0
- package/dist/types/lib/injection-engine/skillsFromDirRoutes.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/startRuleClaim.d.ts +92 -0
- package/dist/types/lib/injection-engine/startRuleClaim.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/toolOutcome.d.ts +12 -3
- package/dist/types/lib/injection-engine/toolOutcome.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy arms — SUBSTITUTION counterfactuals, kept distinct from ablation's
|
|
3
|
+
* removals and sharing its statistics. See README.md in this folder for the
|
|
4
|
+
* design argument, and `types.ts` for why this is not a fifth `AblationSpec`
|
|
5
|
+
* arm.
|
|
6
|
+
*
|
|
7
|
+
* @beta Beta feature (RFC-003 Part B). The API works and is tested, but may
|
|
8
|
+
* change before GA.
|
|
9
|
+
*/
|
|
10
|
+
export { applyArm } from './apply.js';
|
|
11
|
+
export { compareStrategyArms } from './compare.js';
|
|
12
|
+
export { armFacetsFromManifest, armLabel, checkArmApplied, manifestFromEvents, matchArm, RUN_CONFIGURED_EVENT, } from './manifest.js';
|
|
13
|
+
export { checkArmApplication, collectArmRuns, nullBandFrom, scoreArmRuns, type ArmRuns, } from './probe.js';
|
|
14
|
+
export { armConfigKey, declaredFacetCount, validateStrategyArms } from './validate.js';
|
|
15
|
+
export { verdictForArm, type ArmVerdictContext } from './verdict.js';
|
|
16
|
+
export type { ArmApplication, ArmFacetMismatch, ArmFacets, ArmMemoryFacet, ArmOutcome, ArmRunResult, ArmRunner, CompareStrategyArmsOptions, ManifestMemoryLike, NullBand, RunManifestLike, StrategyArm, StrategyComparison, } from './types.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy arms — SUBSTITUTION counterfactuals, kept distinct from ablation's
|
|
3
|
+
* removals and sharing its statistics. See README.md in this folder for the
|
|
4
|
+
* design argument, and `types.ts` for why this is not a fifth `AblationSpec`
|
|
5
|
+
* arm.
|
|
6
|
+
*
|
|
7
|
+
* @beta Beta feature (RFC-003 Part B). The API works and is tested, but may
|
|
8
|
+
* change before GA.
|
|
9
|
+
*/
|
|
10
|
+
export { applyArm } from './apply.js';
|
|
11
|
+
export { compareStrategyArms } from './compare.js';
|
|
12
|
+
export { armFacetsFromManifest, armLabel, checkArmApplied, manifestFromEvents, matchArm, RUN_CONFIGURED_EVENT, } from './manifest.js';
|
|
13
|
+
export { checkArmApplication, collectArmRuns, nullBandFrom, scoreArmRuns, } from './probe.js';
|
|
14
|
+
export { armConfigKey, declaredFacetCount, validateStrategyArms } from './validate.js';
|
|
15
|
+
export { verdictForArm } from './verdict.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/context-bisect/arms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,YAAY,GAEb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,aAAa,EAA0B,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The manifest bridge — which arm did this run belong to, according to the RUN
|
|
3
|
+
* rather than according to the experimenter.
|
|
4
|
+
*
|
|
5
|
+
* Before 9.41.0 an arm label was bookkeeping: the consumer set a variable to
|
|
6
|
+
* `'rerank'`, built an agent it believed re-ranked, and nothing in the library
|
|
7
|
+
* could contradict it. `agentfootprint.agent.run_configured` names the adapters
|
|
8
|
+
* and strategies a run is about to use, so the belief became checkable — and
|
|
9
|
+
* {@link ArmFacets} is deliberately spelled in that event's own vocabulary so
|
|
10
|
+
* the check is a field-by-field comparison and not a translation layer.
|
|
11
|
+
*
|
|
12
|
+
* Two directions, both here:
|
|
13
|
+
* - **verify** — `checkArmApplied(arm, manifest)`: the arm said `retrieval:
|
|
14
|
+
* 'rerank'`; did the run agree? A contradiction costs the arm its verdict
|
|
15
|
+
* (`compare.ts`), because a difference measured between two arms that were
|
|
16
|
+
* secretly one configuration is not evidence about either.
|
|
17
|
+
* - **classify** — `matchArm(arms, manifest)`: hand it a recorded run's
|
|
18
|
+
* manifest and it says which declared arm that run belongs to. This is the
|
|
19
|
+
* door for grouping runs a study already made, offline, out of saved
|
|
20
|
+
* recordings.
|
|
21
|
+
*
|
|
22
|
+
* ## Absence is a contradiction, not a wildcard
|
|
23
|
+
*
|
|
24
|
+
* The manifest's own rule is that an absent field means "not configured", never
|
|
25
|
+
* a guessed default. So an arm declaring `window: 'tokenBudget'` against a
|
|
26
|
+
* manifest with no `window` is a MISMATCH, reported with `observed` absent. The
|
|
27
|
+
* alternative — treating absence as "could be anything" — would let a run with
|
|
28
|
+
* no window stage pass as the token-budget arm, which is exactly the mis-wiring
|
|
29
|
+
* this file exists to catch.
|
|
30
|
+
*/
|
|
31
|
+
import type { CapturedEventLike } from '../types.js';
|
|
32
|
+
import type { ArmFacetMismatch, ArmFacets, RunManifestLike, StrategyArm } from './types.js';
|
|
33
|
+
/** The event type the run manifest rides on (9.41.0). */
|
|
34
|
+
export declare const RUN_CONFIGURED_EVENT = "agentfootprint.agent.run_configured";
|
|
35
|
+
/**
|
|
36
|
+
* Pull the run manifest out of a run's captured typed events — the same
|
|
37
|
+
* `CapturedEventLike[]` bag `localizeContextBug` already accepts, so a consumer
|
|
38
|
+
* who collected events with `agent.on('*', …)` needs no second capture.
|
|
39
|
+
*
|
|
40
|
+
* One manifest per run by design; the FIRST is returned. A bag holding events
|
|
41
|
+
* from several runs is the caller's own mixing — filter by `meta.runId` first.
|
|
42
|
+
*/
|
|
43
|
+
export declare function manifestFromEvents(events: readonly CapturedEventLike[] | undefined): RunManifestLike | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Project a manifest onto the arm-facet vocabulary — the inverse of what an arm
|
|
46
|
+
* declares. Memory rows collapse to the FIRST one; a study varying retrieval
|
|
47
|
+
* across several mounted memories should declare `memory.id` and read the rows
|
|
48
|
+
* itself rather than trust a projection to pick.
|
|
49
|
+
*/
|
|
50
|
+
export declare function armFacetsFromManifest(manifest: RunManifestLike): ArmFacets;
|
|
51
|
+
/**
|
|
52
|
+
* A stable label for a set of facets — sorted `key=value`, so two runs of one
|
|
53
|
+
* configuration produce the same string whatever order the fields were written
|
|
54
|
+
* in. Useful as a grouping key for N recorded runs.
|
|
55
|
+
*/
|
|
56
|
+
export declare function armLabel(facets: ArmFacets): string;
|
|
57
|
+
/**
|
|
58
|
+
* Compare one arm's DECLARED facets against a run's manifest. Empty result =
|
|
59
|
+
* the run agreed with everything the arm claimed.
|
|
60
|
+
*
|
|
61
|
+
* Only declared facets are compared. An arm is a claim about the facets it
|
|
62
|
+
* names and says nothing about the rest — checking undeclared fields would fail
|
|
63
|
+
* every arm for differing from the manifest in ways it never claimed.
|
|
64
|
+
*/
|
|
65
|
+
export declare function checkArmApplied(arm: StrategyArm, manifest: RunManifestLike): readonly ArmFacetMismatch[];
|
|
66
|
+
/**
|
|
67
|
+
* Which declared arm does this run belong to? The offline door: group N
|
|
68
|
+
* recorded runs into arms by what each run's own manifest says.
|
|
69
|
+
*
|
|
70
|
+
* Rules, all conservative:
|
|
71
|
+
* - only arms that DECLARE facets are candidates (an arm naming nothing matches
|
|
72
|
+
* every run and would swallow the whole study);
|
|
73
|
+
* - a candidate matches when the manifest contradicts none of its facets;
|
|
74
|
+
* - the MOST SPECIFIC match wins (most declared facets), and a tie returns
|
|
75
|
+
* `undefined` — two arms fitting one run equally well is an ambiguity, and
|
|
76
|
+
* guessing which the experimenter meant is exactly the bookkeeping this
|
|
77
|
+
* function replaces.
|
|
78
|
+
*/
|
|
79
|
+
export declare function matchArm(arms: readonly StrategyArm[], manifest: RunManifestLike): StrategyArm | undefined;
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The manifest bridge — which arm did this run belong to, according to the RUN
|
|
3
|
+
* rather than according to the experimenter.
|
|
4
|
+
*
|
|
5
|
+
* Before 9.41.0 an arm label was bookkeeping: the consumer set a variable to
|
|
6
|
+
* `'rerank'`, built an agent it believed re-ranked, and nothing in the library
|
|
7
|
+
* could contradict it. `agentfootprint.agent.run_configured` names the adapters
|
|
8
|
+
* and strategies a run is about to use, so the belief became checkable — and
|
|
9
|
+
* {@link ArmFacets} is deliberately spelled in that event's own vocabulary so
|
|
10
|
+
* the check is a field-by-field comparison and not a translation layer.
|
|
11
|
+
*
|
|
12
|
+
* Two directions, both here:
|
|
13
|
+
* - **verify** — `checkArmApplied(arm, manifest)`: the arm said `retrieval:
|
|
14
|
+
* 'rerank'`; did the run agree? A contradiction costs the arm its verdict
|
|
15
|
+
* (`compare.ts`), because a difference measured between two arms that were
|
|
16
|
+
* secretly one configuration is not evidence about either.
|
|
17
|
+
* - **classify** — `matchArm(arms, manifest)`: hand it a recorded run's
|
|
18
|
+
* manifest and it says which declared arm that run belongs to. This is the
|
|
19
|
+
* door for grouping runs a study already made, offline, out of saved
|
|
20
|
+
* recordings.
|
|
21
|
+
*
|
|
22
|
+
* ## Absence is a contradiction, not a wildcard
|
|
23
|
+
*
|
|
24
|
+
* The manifest's own rule is that an absent field means "not configured", never
|
|
25
|
+
* a guessed default. So an arm declaring `window: 'tokenBudget'` against a
|
|
26
|
+
* manifest with no `window` is a MISMATCH, reported with `observed` absent. The
|
|
27
|
+
* alternative — treating absence as "could be anything" — would let a run with
|
|
28
|
+
* no window stage pass as the token-budget arm, which is exactly the mis-wiring
|
|
29
|
+
* this file exists to catch.
|
|
30
|
+
*/
|
|
31
|
+
import { declaredFacetCount } from './validate.js';
|
|
32
|
+
/** The event type the run manifest rides on (9.41.0). */
|
|
33
|
+
export const RUN_CONFIGURED_EVENT = 'agentfootprint.agent.run_configured';
|
|
34
|
+
/**
|
|
35
|
+
* Pull the run manifest out of a run's captured typed events — the same
|
|
36
|
+
* `CapturedEventLike[]` bag `localizeContextBug` already accepts, so a consumer
|
|
37
|
+
* who collected events with `agent.on('*', …)` needs no second capture.
|
|
38
|
+
*
|
|
39
|
+
* One manifest per run by design; the FIRST is returned. A bag holding events
|
|
40
|
+
* from several runs is the caller's own mixing — filter by `meta.runId` first.
|
|
41
|
+
*/
|
|
42
|
+
export function manifestFromEvents(events) {
|
|
43
|
+
const event = events?.find((e) => e.type === RUN_CONFIGURED_EVENT);
|
|
44
|
+
if (event === undefined)
|
|
45
|
+
return undefined;
|
|
46
|
+
const payload = event.payload;
|
|
47
|
+
// Structural, not a cast-and-pray: a payload that is not an object at all is
|
|
48
|
+
// no manifest, and reporting `undefined` keeps `checked: false` honest.
|
|
49
|
+
return payload !== null && typeof payload === 'object' ? payload : undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Project a manifest onto the arm-facet vocabulary — the inverse of what an arm
|
|
53
|
+
* declares. Memory rows collapse to the FIRST one; a study varying retrieval
|
|
54
|
+
* across several mounted memories should declare `memory.id` and read the rows
|
|
55
|
+
* itself rather than trust a projection to pick.
|
|
56
|
+
*/
|
|
57
|
+
export function armFacetsFromManifest(manifest) {
|
|
58
|
+
const memory = manifest.memories?.[0];
|
|
59
|
+
const provider = manifest.llm?.provider;
|
|
60
|
+
const model = manifest.llm?.model;
|
|
61
|
+
const reactMode = manifest.reactMode;
|
|
62
|
+
const scorer = manifest.skillGraph?.scorer;
|
|
63
|
+
const routing = manifest.skillGraph?.routing;
|
|
64
|
+
const continuity = manifest.skillGraph?.continuity;
|
|
65
|
+
const evidenceGate = manifest.evidenceGate;
|
|
66
|
+
return {
|
|
67
|
+
...(provider !== undefined && { provider }),
|
|
68
|
+
...(model !== undefined && { model }),
|
|
69
|
+
...(isReactMode(reactMode) && { reactMode }),
|
|
70
|
+
...(manifest.window !== undefined && { window: manifest.window }),
|
|
71
|
+
...(scorer !== undefined && { scorer }),
|
|
72
|
+
...(isPosture(routing) && { routing }),
|
|
73
|
+
...(isContinuity(continuity) && { continuity }),
|
|
74
|
+
...(isPosture(evidenceGate) && { evidenceGate }),
|
|
75
|
+
...(memory !== undefined && { memory: { ...memory } }),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* A stable label for a set of facets — sorted `key=value`, so two runs of one
|
|
80
|
+
* configuration produce the same string whatever order the fields were written
|
|
81
|
+
* in. Useful as a grouping key for N recorded runs.
|
|
82
|
+
*/
|
|
83
|
+
export function armLabel(facets) {
|
|
84
|
+
const parts = [];
|
|
85
|
+
for (const [key, value] of Object.entries(facets)) {
|
|
86
|
+
if (value === undefined)
|
|
87
|
+
continue;
|
|
88
|
+
if (key === 'memory') {
|
|
89
|
+
for (const [mk, mv] of Object.entries(value)) {
|
|
90
|
+
if (mv !== undefined)
|
|
91
|
+
parts.push(`memory.${mk}=${String(mv)}`);
|
|
92
|
+
}
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
parts.push(`${key}=${String(value)}`);
|
|
96
|
+
}
|
|
97
|
+
return parts.sort().join(',');
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Compare one arm's DECLARED facets against a run's manifest. Empty result =
|
|
101
|
+
* the run agreed with everything the arm claimed.
|
|
102
|
+
*
|
|
103
|
+
* Only declared facets are compared. An arm is a claim about the facets it
|
|
104
|
+
* names and says nothing about the rest — checking undeclared fields would fail
|
|
105
|
+
* every arm for differing from the manifest in ways it never claimed.
|
|
106
|
+
*/
|
|
107
|
+
export function checkArmApplied(arm, manifest) {
|
|
108
|
+
const facets = arm.facets;
|
|
109
|
+
if (facets === undefined)
|
|
110
|
+
return [];
|
|
111
|
+
const out = [];
|
|
112
|
+
compare(out, 'provider', facets.provider, manifest.llm?.provider);
|
|
113
|
+
compare(out, 'model', facets.model, manifest.llm?.model);
|
|
114
|
+
compare(out, 'reactMode', facets.reactMode, manifest.reactMode);
|
|
115
|
+
compare(out, 'window', facets.window, manifest.window);
|
|
116
|
+
compare(out, 'skillGraph.scorer', facets.scorer, manifest.skillGraph?.scorer);
|
|
117
|
+
compare(out, 'skillGraph.routing', facets.routing, manifest.skillGraph?.routing);
|
|
118
|
+
compare(out, 'skillGraph.continuity', facets.continuity, manifest.skillGraph?.continuity);
|
|
119
|
+
compare(out, 'evidenceGate', facets.evidenceGate, manifest.evidenceGate);
|
|
120
|
+
const memory = facets.memory;
|
|
121
|
+
if (memory !== undefined) {
|
|
122
|
+
const rows = manifest.memories ?? [];
|
|
123
|
+
if (memory.id !== undefined) {
|
|
124
|
+
// Narrowed to ONE row: a missing row is a mismatch on the id itself, and
|
|
125
|
+
// the remaining fields are then compared against that row alone.
|
|
126
|
+
const row = rows.find((r) => r.id === memory.id);
|
|
127
|
+
if (row === undefined) {
|
|
128
|
+
out.push({
|
|
129
|
+
facet: 'memory.id',
|
|
130
|
+
declared: memory.id,
|
|
131
|
+
...(rows.length > 0 && { observed: rows.map((r) => r.id ?? '?').join(', ') }),
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
for (const field of MEMORY_FIELDS) {
|
|
136
|
+
compare(out, `memory.${field}`, memory[field], row[field]);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else if (!rows.some((row) => MEMORY_FIELDS.every((f) => matches(memory[f], row[f])))) {
|
|
141
|
+
// Un-narrowed: ANY mounted memory satisfying every declared field counts.
|
|
142
|
+
// Reported as ONE mismatch — naming a per-field winner across rows would
|
|
143
|
+
// invent a memory that does not exist.
|
|
144
|
+
out.push({
|
|
145
|
+
facet: 'memory',
|
|
146
|
+
declared: armLabel({ memory }),
|
|
147
|
+
...(rows.length > 0 && {
|
|
148
|
+
observed: rows.map((row) => armLabel({ memory: row })).join(' | '),
|
|
149
|
+
}),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return out;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Which declared arm does this run belong to? The offline door: group N
|
|
157
|
+
* recorded runs into arms by what each run's own manifest says.
|
|
158
|
+
*
|
|
159
|
+
* Rules, all conservative:
|
|
160
|
+
* - only arms that DECLARE facets are candidates (an arm naming nothing matches
|
|
161
|
+
* every run and would swallow the whole study);
|
|
162
|
+
* - a candidate matches when the manifest contradicts none of its facets;
|
|
163
|
+
* - the MOST SPECIFIC match wins (most declared facets), and a tie returns
|
|
164
|
+
* `undefined` — two arms fitting one run equally well is an ambiguity, and
|
|
165
|
+
* guessing which the experimenter meant is exactly the bookkeeping this
|
|
166
|
+
* function replaces.
|
|
167
|
+
*/
|
|
168
|
+
export function matchArm(arms, manifest) {
|
|
169
|
+
const fits = arms
|
|
170
|
+
.filter((arm) => declaredFacetCount(arm.facets) > 0)
|
|
171
|
+
.filter((arm) => checkArmApplied(arm, manifest).length === 0)
|
|
172
|
+
.map((arm) => ({ arm, specificity: declaredFacetCount(arm.facets) }))
|
|
173
|
+
.sort((a, b) => b.specificity - a.specificity);
|
|
174
|
+
if (fits.length === 0)
|
|
175
|
+
return undefined;
|
|
176
|
+
if (fits.length > 1 && fits[0].specificity === fits[1].specificity)
|
|
177
|
+
return undefined;
|
|
178
|
+
return fits[0].arm;
|
|
179
|
+
}
|
|
180
|
+
// ─── internals ───────────────────────────────────────────────────────
|
|
181
|
+
const MEMORY_FIELDS = ['type', 'strategy', 'retrieval', 'embedderId', 'flavor'];
|
|
182
|
+
function matches(declared, observed) {
|
|
183
|
+
return declared === undefined || declared === observed;
|
|
184
|
+
}
|
|
185
|
+
function compare(out, facet, declared, observed) {
|
|
186
|
+
if (matches(declared, observed))
|
|
187
|
+
return;
|
|
188
|
+
out.push({ facet, declared: declared, ...(observed !== undefined && { observed }) });
|
|
189
|
+
}
|
|
190
|
+
function isReactMode(value) {
|
|
191
|
+
return value === 'classic' || value === 'dynamic' || value === 'dynamic-grouped';
|
|
192
|
+
}
|
|
193
|
+
function isPosture(value) {
|
|
194
|
+
return value === 'assist' || value === 'guard' || value === 'rails';
|
|
195
|
+
}
|
|
196
|
+
function isContinuity(value) {
|
|
197
|
+
return value === 'turn' || value === 'conversation';
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../../src/lib/context-bisect/arms/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The arm probe — seeded runs in, shared statistics out.
|
|
3
|
+
*
|
|
4
|
+
* Split in two on purpose. `collectArmRuns` only RUNS (it cannot know the
|
|
5
|
+
* reference yet: when no prior answer was supplied, the reference IS the
|
|
6
|
+
* baseline arm's first answer). `scoreArmRuns` only SCORES. Keeping them apart
|
|
7
|
+
* is what lets the reference be chosen between the two halves without a second
|
|
8
|
+
* pass over the model — the same "one ablation, two readouts" thrift
|
|
9
|
+
* `runAblationProbe` applies to cost.
|
|
10
|
+
*
|
|
11
|
+
* Everything statistical is borrowed, not re-derived: `similarityStats`,
|
|
12
|
+
* `costStatsFrom` and `resolveSamples` come from `ablation.ts` unchanged, so an
|
|
13
|
+
* arm's `AblationRunStats` is the same number computed the same way as an
|
|
14
|
+
* ablation's — which is the point of sharing the statistics while keeping the
|
|
15
|
+
* spec types apart.
|
|
16
|
+
*/
|
|
17
|
+
import type { AblationRunStats, Embedder, OutcomeComparator } from '../types.js';
|
|
18
|
+
import type { ArmApplication, ArmRunner, NullBand, RunManifestLike, StrategyArm } from './types.js';
|
|
19
|
+
/** The raw harvest of one arm's seeded runs — no scoring yet. */
|
|
20
|
+
export interface ArmRuns {
|
|
21
|
+
readonly answers: readonly string[];
|
|
22
|
+
readonly loops: readonly number[];
|
|
23
|
+
readonly tokens: readonly number[];
|
|
24
|
+
readonly manifests: readonly RunManifestLike[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Call the consumer's runner once per seed (0..samples-1) for ONE arm and
|
|
28
|
+
* normalize the two return shapes (`string` | `{output, cost?, manifest?}`) —
|
|
29
|
+
* the same normalization `runAblationProbe` performs, so a bare-string runner
|
|
30
|
+
* costs the caller nothing in ceremony.
|
|
31
|
+
*/
|
|
32
|
+
export declare function collectArmRuns(arm: StrategyArm, runner: ArmRunner, samples: number): Promise<ArmRuns>;
|
|
33
|
+
/**
|
|
34
|
+
* Score one arm's harvested answers against the reference: similarity per seed
|
|
35
|
+
* (mean/min/max/stdev) plus the outcome-flip count. Shape-identical to what an
|
|
36
|
+
* ablation probe reports.
|
|
37
|
+
*/
|
|
38
|
+
export declare function scoreArmRuns(runs: ArmRuns, reference: string, embedder: Embedder, outcomeChanged: OutcomeComparator): Promise<AblationRunStats>;
|
|
39
|
+
/**
|
|
40
|
+
* Build the inert-intervention control from the baseline arm's OWN seeded runs.
|
|
41
|
+
* See {@link NullBand} for why leave-one-out does not transfer and this does.
|
|
42
|
+
*/
|
|
43
|
+
export declare function nullBandFrom(baselineArmId: string, baselineStats: AblationRunStats, gates: boolean): NullBand;
|
|
44
|
+
/**
|
|
45
|
+
* Did this arm actually take effect? Compares every manifest the runner
|
|
46
|
+
* reported against the arm's declared facets.
|
|
47
|
+
*
|
|
48
|
+
* `checked: false` — and therefore no refusal — in exactly two cases, both of
|
|
49
|
+
* which are absence of evidence rather than evidence of absence: the runner
|
|
50
|
+
* reported no manifest, or the arm declares only ablations (no manifest names a
|
|
51
|
+
* tool catalog). Refusing a verdict in either case would punish a consumer for
|
|
52
|
+
* a capture they were never required to make.
|
|
53
|
+
*/
|
|
54
|
+
export declare function checkArmApplication(arm: StrategyArm, manifests: readonly RunManifestLike[]): ArmApplication;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The arm probe — seeded runs in, shared statistics out.
|
|
3
|
+
*
|
|
4
|
+
* Split in two on purpose. `collectArmRuns` only RUNS (it cannot know the
|
|
5
|
+
* reference yet: when no prior answer was supplied, the reference IS the
|
|
6
|
+
* baseline arm's first answer). `scoreArmRuns` only SCORES. Keeping them apart
|
|
7
|
+
* is what lets the reference be chosen between the two halves without a second
|
|
8
|
+
* pass over the model — the same "one ablation, two readouts" thrift
|
|
9
|
+
* `runAblationProbe` applies to cost.
|
|
10
|
+
*
|
|
11
|
+
* Everything statistical is borrowed, not re-derived: `similarityStats`,
|
|
12
|
+
* `costStatsFrom` and `resolveSamples` come from `ablation.ts` unchanged, so an
|
|
13
|
+
* arm's `AblationRunStats` is the same number computed the same way as an
|
|
14
|
+
* ablation's — which is the point of sharing the statistics while keeping the
|
|
15
|
+
* spec types apart.
|
|
16
|
+
*/
|
|
17
|
+
import { cosineSimilarity } from '../../../memory/embedding/cosine.js';
|
|
18
|
+
import { costStatsFrom, similarityStats } from '../ablation.js';
|
|
19
|
+
import { checkArmApplied } from './manifest.js';
|
|
20
|
+
import { declaredFacetCount } from './validate.js';
|
|
21
|
+
/**
|
|
22
|
+
* Call the consumer's runner once per seed (0..samples-1) for ONE arm and
|
|
23
|
+
* normalize the two return shapes (`string` | `{output, cost?, manifest?}`) —
|
|
24
|
+
* the same normalization `runAblationProbe` performs, so a bare-string runner
|
|
25
|
+
* costs the caller nothing in ceremony.
|
|
26
|
+
*/
|
|
27
|
+
export async function collectArmRuns(arm, runner, samples) {
|
|
28
|
+
const answers = [];
|
|
29
|
+
const loops = [];
|
|
30
|
+
const tokens = [];
|
|
31
|
+
const manifests = [];
|
|
32
|
+
for (let seed = 0; seed < samples; seed++) {
|
|
33
|
+
const raw = await runner(arm, { seed });
|
|
34
|
+
if (typeof raw === 'string') {
|
|
35
|
+
answers.push(raw);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
answers.push(raw.output);
|
|
39
|
+
if (raw.cost?.loops !== undefined)
|
|
40
|
+
loops.push(raw.cost.loops);
|
|
41
|
+
if (raw.cost?.tokens !== undefined)
|
|
42
|
+
tokens.push(raw.cost.tokens);
|
|
43
|
+
if (raw.manifest !== undefined)
|
|
44
|
+
manifests.push(raw.manifest);
|
|
45
|
+
}
|
|
46
|
+
return { answers, loops, tokens, manifests };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Score one arm's harvested answers against the reference: similarity per seed
|
|
50
|
+
* (mean/min/max/stdev) plus the outcome-flip count. Shape-identical to what an
|
|
51
|
+
* ablation probe reports.
|
|
52
|
+
*/
|
|
53
|
+
export async function scoreArmRuns(runs, reference, embedder, outcomeChanged) {
|
|
54
|
+
const referenceVec = await embedder.embed({ text: reference });
|
|
55
|
+
const similarities = [];
|
|
56
|
+
let flips = 0;
|
|
57
|
+
for (const answer of runs.answers) {
|
|
58
|
+
const vec = await embedder.embed({ text: answer });
|
|
59
|
+
similarities.push(cosineSimilarity(referenceVec, vec));
|
|
60
|
+
if (await outcomeChanged(reference, answer))
|
|
61
|
+
flips++;
|
|
62
|
+
}
|
|
63
|
+
const cost = costStatsFrom(runs.answers.length, runs.loops, runs.tokens);
|
|
64
|
+
return {
|
|
65
|
+
samples: runs.answers.length,
|
|
66
|
+
flips,
|
|
67
|
+
similarity: similarityStats(similarities),
|
|
68
|
+
...(cost !== undefined ? { cost } : {}),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build the inert-intervention control from the baseline arm's OWN seeded runs.
|
|
73
|
+
* See {@link NullBand} for why leave-one-out does not transfer and this does.
|
|
74
|
+
*/
|
|
75
|
+
export function nullBandFrom(baselineArmId, baselineStats, gates) {
|
|
76
|
+
const similarity = baselineStats.similarity;
|
|
77
|
+
const degenerate = similarity.stdev === 0;
|
|
78
|
+
const note = !gates
|
|
79
|
+
? `Reported, not applied: a custom answerChanged comparator decides the flips, so an ` +
|
|
80
|
+
`embedding-similarity band is a different instrument and must not veto its findings. The ` +
|
|
81
|
+
`control on that axis is the baseline arm's own flip count, which must be zero.`
|
|
82
|
+
: degenerate
|
|
83
|
+
? `The baseline arm '${baselineArmId}' reproduced identically on every seed (spread 0), so ` +
|
|
84
|
+
`the floor is a hard ${similarity.min.toFixed(3)}: any change clears it. That is honest ` +
|
|
85
|
+
`for a deterministic scenario and only as strong as the determinism.`
|
|
86
|
+
: `A challenger must sit further from the reference than the baseline arm '${baselineArmId}' ` +
|
|
87
|
+
`ever did across its own seeds (floor ${similarity.min.toFixed(3)}, spread ±${similarity.stdev.toFixed(3)}).`;
|
|
88
|
+
return { baselineArmId, similarity, floor: similarity.min, degenerate, gates, note };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Did this arm actually take effect? Compares every manifest the runner
|
|
92
|
+
* reported against the arm's declared facets.
|
|
93
|
+
*
|
|
94
|
+
* `checked: false` — and therefore no refusal — in exactly two cases, both of
|
|
95
|
+
* which are absence of evidence rather than evidence of absence: the runner
|
|
96
|
+
* reported no manifest, or the arm declares only ablations (no manifest names a
|
|
97
|
+
* tool catalog). Refusing a verdict in either case would punish a consumer for
|
|
98
|
+
* a capture they were never required to make.
|
|
99
|
+
*/
|
|
100
|
+
export function checkArmApplication(arm, manifests) {
|
|
101
|
+
const declares = declaredFacetCount(arm.facets) > 0;
|
|
102
|
+
if (!declares || manifests.length === 0) {
|
|
103
|
+
return { manifestsSeen: manifests.length, checked: false, applied: false, mismatches: [] };
|
|
104
|
+
}
|
|
105
|
+
// EVERY run must agree — one seed that quietly built the incumbent is enough
|
|
106
|
+
// to poison the arm's numbers, and it would be invisible in an average.
|
|
107
|
+
const mismatches = [];
|
|
108
|
+
const seen = new Set();
|
|
109
|
+
for (const manifest of manifests) {
|
|
110
|
+
for (const mismatch of checkArmApplied(arm, manifest)) {
|
|
111
|
+
const key = `${mismatch.facet}=${mismatch.observed ?? '<absent>'}`;
|
|
112
|
+
if (seen.has(key))
|
|
113
|
+
continue;
|
|
114
|
+
seen.add(key);
|
|
115
|
+
mismatches.push(mismatch);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
manifestsSeen: manifests.length,
|
|
120
|
+
checked: true,
|
|
121
|
+
applied: mismatches.length === 0,
|
|
122
|
+
mismatches,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../../../../src/lib/context-bisect/arms/probe.ts"],"names":[],"mappings":"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"}
|