agentfootprint 9.40.0 → 9.43.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 +4 -1
- package/ai-instructions/claude-code/SKILL.md +31 -1
- package/dist/adapters/hosting/agentcore.js +71 -10
- 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/adapters/memory/agentcore.js +3 -1
- package/dist/adapters/memory/agentcore.js.map +1 -1
- package/dist/artifacts/conformance/cases.js +840 -0
- package/dist/artifacts/conformance/cases.js.map +1 -0
- package/dist/artifacts/conformance/index.js +18 -0
- package/dist/artifacts/conformance/index.js.map +1 -0
- package/dist/artifacts/conformance/run.js +223 -0
- package/dist/artifacts/conformance/run.js.map +1 -0
- package/dist/artifacts/conformance/types.js +11 -0
- package/dist/artifacts/conformance/types.js.map +1 -0
- package/dist/artifacts/index.js +10 -1
- package/dist/artifacts/index.js.map +1 -1
- package/dist/core/Agent.js +100 -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/runManifest.js +102 -0
- package/dist/core/agent/runManifest.js.map +1 -0
- 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/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 +71 -10
- 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/adapters/memory/agentcore.js +3 -1
- package/dist/esm/adapters/memory/agentcore.js.map +1 -1
- package/dist/esm/artifacts/conformance/cases.d.ts +23 -0
- package/dist/esm/artifacts/conformance/cases.js +837 -0
- package/dist/esm/artifacts/conformance/cases.js.map +1 -0
- package/dist/esm/artifacts/conformance/index.d.ts +11 -0
- package/dist/esm/artifacts/conformance/index.js +11 -0
- package/dist/esm/artifacts/conformance/index.js.map +1 -0
- package/dist/esm/artifacts/conformance/run.d.ts +47 -0
- package/dist/esm/artifacts/conformance/run.js +217 -0
- package/dist/esm/artifacts/conformance/run.js.map +1 -0
- package/dist/esm/artifacts/conformance/types.d.ts +197 -0
- package/dist/esm/artifacts/conformance/types.js +10 -0
- package/dist/esm/artifacts/conformance/types.js.map +1 -0
- package/dist/esm/artifacts/index.d.ts +1 -0
- package/dist/esm/artifacts/index.js +5 -0
- package/dist/esm/artifacts/index.js.map +1 -1
- package/dist/esm/core/Agent.d.ts +34 -1
- package/dist/esm/core/Agent.js +100 -1
- 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/runManifest.d.ts +80 -0
- package/dist/esm/core/agent/runManifest.js +98 -0
- package/dist/esm/core/agent/runManifest.js.map +1 -0
- 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/debug.d.ts +1 -0
- package/dist/esm/debug.js +7 -0
- package/dist/esm/debug.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +205 -0
- package/dist/esm/events/registry.d.ts +7 -1
- package/dist/esm/events/registry.js +6 -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 +88 -2
- 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 +2 -0
- package/dist/esm/index.js +25 -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/esm/memory/define.js +12 -0
- package/dist/esm/memory/define.js.map +1 -1
- package/dist/esm/memory/define.types.d.ts +27 -0
- package/dist/esm/memory/define.types.js.map +1 -1
- package/dist/esm/strategies/attach.js.map +1 -1
- package/dist/events/registry.js +6 -0
- package/dist/events/registry.js.map +1 -1
- package/dist/hosting/conformance/cases.js +88 -2
- 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 +78 -38
- 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/memory/define.js +12 -0
- package/dist/memory/define.js.map +1 -1
- package/dist/memory/define.types.js.map +1 -1
- package/dist/strategies/attach.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/adapters/memory/agentcore.d.ts.map +1 -1
- package/dist/types/artifacts/conformance/cases.d.ts +24 -0
- package/dist/types/artifacts/conformance/cases.d.ts.map +1 -0
- package/dist/types/artifacts/conformance/index.d.ts +12 -0
- package/dist/types/artifacts/conformance/index.d.ts.map +1 -0
- package/dist/types/artifacts/conformance/run.d.ts +48 -0
- package/dist/types/artifacts/conformance/run.d.ts.map +1 -0
- package/dist/types/artifacts/conformance/types.d.ts +198 -0
- package/dist/types/artifacts/conformance/types.d.ts.map +1 -0
- package/dist/types/artifacts/index.d.ts +1 -0
- package/dist/types/artifacts/index.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +34 -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/runManifest.d.ts +81 -0
- package/dist/types/core/agent/runManifest.d.ts.map +1 -0
- 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/debug.d.ts +1 -0
- package/dist/types/debug.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +205 -0
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/registry.d.ts +7 -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 +2 -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/dist/types/memory/define.d.ts.map +1 -1
- package/dist/types/memory/define.types.d.ts +27 -0
- package/dist/types/memory/define.types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -93,12 +93,21 @@
|
|
|
93
93
|
* visible wherever the graph reports its problems — because a reader who meets
|
|
94
94
|
* it only in prose docs will meet a clean report first.
|
|
95
95
|
*
|
|
96
|
+
* ## The opposite assertion lives next door
|
|
97
|
+
*
|
|
98
|
+
* Everything here is POSITIVE: this rule claims this phrase. The negative form
|
|
99
|
+
* — a phrase that must claim NO skill, which is the assertion that catches
|
|
100
|
+
* over-triggering — is `skillNeverRoutes.ts`, declared on the GRAPH rather than
|
|
101
|
+
* on a rule (a phrase that must route nowhere belongs to no skill). Both ask
|
|
102
|
+
* `startRuleClaim.ts` the same question and differ only in which answer is a
|
|
103
|
+
* defect; a phrase declared BOTH ways is reported there as the contradiction it
|
|
104
|
+
* is.
|
|
105
|
+
*
|
|
96
106
|
* Composed into `graph.checkup()` by `skillGraph.ts`, exactly like
|
|
97
107
|
* `skillContract`/`skillIntent`/`skillVocabulary`: this module owns the rule
|
|
98
108
|
* AND its boundaries, and reports in the shared `GraphProblem` voice.
|
|
99
109
|
*/
|
|
100
|
-
import type
|
|
101
|
-
import { type SkillMatchData } from './skillMatch.js';
|
|
110
|
+
import { type StartRuleDecl } from './startRuleClaim.js';
|
|
102
111
|
import type { GraphProblem } from './skillGraphCheckup.js';
|
|
103
112
|
/**
|
|
104
113
|
* The statement the check-up makes about its own reach, carried on
|
|
@@ -111,18 +120,12 @@ export declare const EXAMPLES_BOUNDARY: string;
|
|
|
111
120
|
* only the order-independent check (self-match) could run. */
|
|
112
121
|
export declare const EXAMPLES_ORDER_NOT_CHECKED: string;
|
|
113
122
|
/**
|
|
114
|
-
* The slice of an entry declaration this module reads —
|
|
115
|
-
*
|
|
116
|
-
*
|
|
123
|
+
* The slice of an entry declaration this module reads — the shared claim shape
|
|
124
|
+
* ({@link StartRuleDecl}, which owns "who claims a phrase") plus the one field
|
|
125
|
+
* only this check reads. Structural, so `skillGraph.ts`'s module-private
|
|
126
|
+
* `EntryDecl` satisfies it unchanged (the same trick `skillIntent.ts` uses).
|
|
117
127
|
*/
|
|
118
|
-
export interface ExampleRuleDecl {
|
|
119
|
-
readonly id: string;
|
|
120
|
-
/** The compiled condition (from `match:`) or the author's `when`. Absent on
|
|
121
|
-
* an unconditional entry and on an intent rule (no sync predicate). */
|
|
122
|
-
readonly when?: (ctx: InjectionContext) => boolean;
|
|
123
|
-
/** The serializable matcher behind `when`, when declared as data — quoted
|
|
124
|
-
* back in the messages, and the one way to spot the intent arm. */
|
|
125
|
-
readonly match?: SkillMatchData;
|
|
128
|
+
export interface ExampleRuleDecl extends StartRuleDecl {
|
|
126
129
|
/** The phrasings this rule claims (build-time TEST material). */
|
|
127
130
|
readonly examples?: readonly string[];
|
|
128
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillExamples.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillExamples.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"skillExamples.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillExamples.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4GG;AAEH,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAEsC,CAAC;AAErE;+DAC+D;AAC/D,eAAO,MAAM,0BAA0B,QAG4B,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;gEACgE;AAChE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAOD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACnE,SAAS,MAAM,EAAE,GAAG,SAAS,CAgD/B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,GAAG,eAAe,CAyLlB"}
|
|
@@ -208,6 +208,16 @@ export interface SkillGraphFlatConfig {
|
|
|
208
208
|
* See {@link BuildOptions.scopeTools}.
|
|
209
209
|
*/
|
|
210
210
|
readonly scopeTools?: boolean;
|
|
211
|
+
/**
|
|
212
|
+
* Phrasings this graph must claim NOWHERE — the negative routing rows. Same
|
|
213
|
+
* machine as `.neverRoutes([...])`; see that method for what the check
|
|
214
|
+
* proves and what it deliberately does not. A row a declared start rule
|
|
215
|
+
* claims is an ERROR (`never-routes-claimed`), naming the rule.
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* skillGraph({ skills, start: { rules }, neverRoutes: ['what is the weather'] });
|
|
219
|
+
*/
|
|
220
|
+
readonly neverRoutes?: readonly string[];
|
|
211
221
|
readonly check?: GraphCheckMode;
|
|
212
222
|
/** Baseline agent tool names — see {@link BuildOptions.knownTools}. */
|
|
213
223
|
readonly knownTools?: readonly string[];
|
|
@@ -232,6 +242,10 @@ export interface SkillGraphTreeConfig {
|
|
|
232
242
|
readonly scopeTools?: boolean;
|
|
233
243
|
readonly start?: never;
|
|
234
244
|
readonly steps?: never;
|
|
245
|
+
/** A tree has no start RULES for a negative row to be judged against, so the
|
|
246
|
+
* type refuses it here and `build()` refuses it at runtime (see
|
|
247
|
+
* {@link SkillGraphBuilder.neverRoutes}). */
|
|
248
|
+
readonly neverRoutes?: never;
|
|
235
249
|
readonly check?: GraphCheckMode;
|
|
236
250
|
/** Baseline agent tool names — see {@link BuildOptions.knownTools}. */
|
|
237
251
|
readonly knownTools?: readonly string[];
|
|
@@ -815,6 +829,42 @@ export interface SkillGraphBuilder {
|
|
|
815
829
|
* router per graph. Flat graphs only.
|
|
816
830
|
*/
|
|
817
831
|
classify(scorer: IntentScorer, policy?: Partial<RoutingPolicy>): SkillGraphBuilder;
|
|
832
|
+
/**
|
|
833
|
+
* Declare phrasings this graph must claim **NOWHERE** — the negative form of
|
|
834
|
+
* a rule's `examples`, and the one that catches the expensive failure.
|
|
835
|
+
*
|
|
836
|
+
* An under-triggering skill costs a turn (the model tier picks instead). An
|
|
837
|
+
* OVER-triggering skill costs the answer: the wrong body enters the system
|
|
838
|
+
* prompt and the wrong tools enter the tools slot, and everything said after
|
|
839
|
+
* that is shaped by a skill with no business in the turn.
|
|
840
|
+
*
|
|
841
|
+
* It is declared on the GRAPH, not on a skill, because a phrase that must
|
|
842
|
+
* route nowhere belongs to no skill: the assertion is satisfied only when
|
|
843
|
+
* EVERY rule declines, and a row hung on one skill would vanish the day that
|
|
844
|
+
* skill was deleted — exactly when a graph is re-partitioned, which is
|
|
845
|
+
* exactly when over-triggering appears.
|
|
846
|
+
*
|
|
847
|
+
* `graph.checkup()` runs every declared start condition over the phrase on a
|
|
848
|
+
* cold-start context and reports the rule that claims it, BY NAME, as an
|
|
849
|
+
* ERROR (`never-routes-claimed`) — so a default `.build()` refuses.
|
|
850
|
+
*
|
|
851
|
+
* **What it proves, exactly:** no declared start RULE claims the phrase. Not
|
|
852
|
+
* "no routing at all": an intent rule is judged by a classifier at run time, a
|
|
853
|
+
* scorer / `.entryByRead()` menu ranks descriptions, and `read_skill` can
|
|
854
|
+
* always open an open skill by name. That statement rides the report itself
|
|
855
|
+
* (`checkup().notes`).
|
|
856
|
+
*
|
|
857
|
+
* Accepts one phrase or a list; call it as often as you like (rows
|
|
858
|
+
* accumulate). A duplicate row is refused — one row already asserts it
|
|
859
|
+
* against every rule.
|
|
860
|
+
*
|
|
861
|
+
* @example
|
|
862
|
+
* skillGraph()
|
|
863
|
+
* .entry(billing, { match: { keywords: ['refund', 'charge'] } })
|
|
864
|
+
* .neverRoutes(["what's the weather in Berlin"])
|
|
865
|
+
* .build();
|
|
866
|
+
*/
|
|
867
|
+
neverRoutes(phrases: string | readonly string[]): SkillGraphBuilder;
|
|
818
868
|
build(opts?: BuildOptions): SkillGraph;
|
|
819
869
|
}
|
|
820
870
|
export declare function skillGraph(): SkillGraphBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillGraph.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillGraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAIL,KAAK,YAAY,EAElB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"skillGraph.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ import { type SkillMatchData } from './skillMatch.js';
|
|
|
34
34
|
* engine-type-free, which is what keeps that law intact here).
|
|
35
35
|
*/
|
|
36
36
|
export type CheckupTriggerKind = 'always' | 'rule' | 'on-tool-return' | 'llm-activated';
|
|
37
|
-
export type GraphProblemCode = 'unknown-skill' | 'no-entry' | 'unreachable-skill' | 'model-edge-only' | 'multi-entry-fanout' | 'dead-entry-step' | 'ambiguous-routes' | 'self-loop' | 'rule-id-exists' | 'overlapping-rules' | 'rules-shadowed-by-order' | 'intent-without-classify' | 'duplicate-intent-example' | 'overlapping-intents' | 'body-foreign-tool' | 'body-unknown-tool' | 'example-misses-own-rule' | 'example-shadowed-by-earlier' | 'example-shadowed-by-default' | 'example-unclaimed' | 'artifact-kind-unsatisfied';
|
|
37
|
+
export type GraphProblemCode = 'unknown-skill' | 'no-entry' | 'unreachable-skill' | 'model-edge-only' | 'multi-entry-fanout' | 'dead-entry-step' | 'ambiguous-routes' | 'self-loop' | 'rule-id-exists' | 'overlapping-rules' | 'rules-shadowed-by-order' | 'intent-without-classify' | 'duplicate-intent-example' | 'overlapping-intents' | 'body-foreign-tool' | 'body-unknown-tool' | 'example-misses-own-rule' | 'example-shadowed-by-earlier' | 'example-shadowed-by-default' | 'example-unclaimed' | 'never-routes-claimed' | 'never-routes-by-default' | 'never-routes-contradicts-example' | 'tools-share-prefix' | 'few-declared-edges' | 'skill-wraps-one-tool' | 'artifact-kind-unsatisfied';
|
|
38
38
|
/** One issue found by the check-up. `kind: 'error'` fails `ok` (and `'throw'`). */
|
|
39
39
|
export interface GraphProblem {
|
|
40
40
|
readonly kind: 'error' | 'warning';
|
|
@@ -45,10 +45,11 @@ export interface GraphProblem {
|
|
|
45
45
|
readonly from?: string;
|
|
46
46
|
readonly to?: string;
|
|
47
47
|
/**
|
|
48
|
-
* The declared
|
|
49
|
-
* `
|
|
50
|
-
* phrase
|
|
51
|
-
*
|
|
48
|
+
* The declared phrase this problem is about — present on the `example-*`
|
|
49
|
+
* codes and on the `never-routes-*` ones, the checks that reason about a
|
|
50
|
+
* concrete phrase (in the positive and the negative direction respectively).
|
|
51
|
+
* The message always quotes it too; this is the same string as data, so a
|
|
52
|
+
* tool can group by phrase without parsing prose.
|
|
52
53
|
*/
|
|
53
54
|
readonly example?: string;
|
|
54
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillGraphCheckup.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillGraphCheckup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,MAAM,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAExF,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,UAAU,GACV,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,GAClB,WAAW,GAEX,gBAAgB,GAKhB,mBAAmB,GACnB,yBAAyB,GAIzB,yBAAyB,GAIzB,0BAA0B,GAG1B,qBAAqB,GAIrB,mBAAmB,GACnB,mBAAmB,GAInB,yBAAyB,GAKzB,6BAA6B,GAO7B,6BAA6B,GAO7B,mBAAmB,
|
|
1
|
+
{"version":3,"file":"skillGraphCheckup.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillGraphCheckup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,MAAM,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAExF,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,UAAU,GACV,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,GAClB,WAAW,GAEX,gBAAgB,GAKhB,mBAAmB,GACnB,yBAAyB,GAIzB,yBAAyB,GAIzB,0BAA0B,GAG1B,qBAAqB,GAIrB,mBAAmB,GACnB,mBAAmB,GAInB,yBAAyB,GAKzB,6BAA6B,GAO7B,6BAA6B,GAO7B,mBAAmB,GAOnB,sBAAsB,GAKtB,yBAAyB,GAIzB,kCAAkC,GAOlC,oBAAoB,GAEpB,oBAAoB,GAEpB,sBAAsB,GAGtB,2BAA2B,CAAC;AAMhC,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;qDACiD;IACjD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;+EAG2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,oFAAoF;IACpF,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACzF,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/D;;;;;;;;OAQG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,8BAA8B;AAC9B,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAwV9D;AA2CD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAI3D"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* skillNeverRoutes — the NEGATIVE routing row: a phrase this graph must claim
|
|
3
|
+
* NOWHERE.
|
|
4
|
+
*
|
|
5
|
+
* ## Why the negative form is the valuable one
|
|
6
|
+
*
|
|
7
|
+
* `skillExamples.ts` pins the positive assertion — this rule claims this
|
|
8
|
+
* phrasing — and it cannot state the opposite. Field use says the opposite is
|
|
9
|
+
* the one that catches the expensive failure. An UNDER-triggering skill costs a
|
|
10
|
+
* turn: the deterministic layer declines, the model tier picks, and the answer
|
|
11
|
+
* is usually still reachable. An OVER-triggering skill costs the whole answer:
|
|
12
|
+
* the wrong body enters the system prompt, the wrong tools enter the tools
|
|
13
|
+
* slot, and everything the model then says is shaped by a skill that had no
|
|
14
|
+
* business in the turn. One reviewer of a production graph had written his own
|
|
15
|
+
* harness for exactly this, outside the library, because the library could only
|
|
16
|
+
* express the cheap half.
|
|
17
|
+
*
|
|
18
|
+
* ## Where a negative row lives, and why it is NOT on a skill
|
|
19
|
+
*
|
|
20
|
+
* `examples` sits on the rule it is about. A negative row cannot: the phrase it
|
|
21
|
+
* describes belongs to NO skill, and hanging it on one would make three things
|
|
22
|
+
* wrong at once —
|
|
23
|
+
*
|
|
24
|
+
* • it would read as that skill's business ("weather questions, filed under
|
|
25
|
+
* billing") when the point is that it is nobody's;
|
|
26
|
+
* • the assertion is satisfied only when EVERY rule declines, so a row read
|
|
27
|
+
* as one rule's property would be checked against one rule and pass while
|
|
28
|
+
* another rule swallowed the phrase;
|
|
29
|
+
* • deleting the skill would delete the assertion — exactly when a graph is
|
|
30
|
+
* re-partitioned, which is exactly when over-triggering is introduced.
|
|
31
|
+
*
|
|
32
|
+
* A negative row is a property of the PARTITION, so it is declared at the graph
|
|
33
|
+
* level (`.neverRoutes([...])` / `neverRoutes: [...]`) and judged against every
|
|
34
|
+
* rule in declaration order.
|
|
35
|
+
*
|
|
36
|
+
* ## What is asserted — precisely, and what it does NOT cover
|
|
37
|
+
*
|
|
38
|
+
* The claim this module proves is: **no declared start RULE claims the
|
|
39
|
+
* phrase.** It runs the compiled conditions on a cold-start context, exactly as
|
|
40
|
+
* `skillExamples.ts` does, and reports the rule that says yes.
|
|
41
|
+
*
|
|
42
|
+
* It does NOT prove "no routing at all occurs", and could not without becoming
|
|
43
|
+
* a different kind of check:
|
|
44
|
+
*
|
|
45
|
+
* • an INTENT rule compiles to no sync predicate — a classifier judges it at
|
|
46
|
+
* run time, with a scorer (and, for `llmClassifier`, a model call). Running
|
|
47
|
+
* that would make the check async, non-deterministic, and in the LLM case
|
|
48
|
+
* billable — `graph.checkupIntents()` is where scorer-dependent auditing
|
|
49
|
+
* already lives;
|
|
50
|
+
* • a scorer menu (`.entryBy()`) and `.entryByRead()` RANK descriptions;
|
|
51
|
+
* there is no claim to run;
|
|
52
|
+
* • the model tier can open any open skill by name with `read_skill`, at
|
|
53
|
+
* which point no declaration is deciding anything.
|
|
54
|
+
*
|
|
55
|
+
* That statement ships on the report as {@link NEVER_ROUTES_BOUNDARY}, next to
|
|
56
|
+
* the problems, for the same reason the examples boundary does: a reader who
|
|
57
|
+
* meets a boundary only in prose docs meets a clean report first.
|
|
58
|
+
*
|
|
59
|
+
* A predicate that THROWS on the cold context counts as a no-match here, and is
|
|
60
|
+
* not reported — because routing itself treats a throw as a no-match, so the
|
|
61
|
+
* phrase really does not route through that rule. Its own rule's `examples`
|
|
62
|
+
* report the throw as an error (that is a defect in the rule, not in the
|
|
63
|
+
* partition).
|
|
64
|
+
*
|
|
65
|
+
* Composed into `graph.checkup()` by `skillGraph.ts`, like every other domain
|
|
66
|
+
* check, and reporting in the shared `GraphProblem` voice.
|
|
67
|
+
*
|
|
68
|
+
* Zone: PURE CORE. Pinned by
|
|
69
|
+
* `test/lib/injection-engine/skill-graph-fence.test.ts`.
|
|
70
|
+
*/
|
|
71
|
+
import type { GraphProblem } from './skillGraphCheckup.js';
|
|
72
|
+
import { type StartRuleDecl } from './startRuleClaim.js';
|
|
73
|
+
/**
|
|
74
|
+
* The statement the negative check makes about its own reach, carried on
|
|
75
|
+
* `GraphCheckup.notes` whenever a graph declared any negative row. Same voice
|
|
76
|
+
* as `EXAMPLES_BOUNDARY` (skillExamples.ts): silence here is evidence about the declared
|
|
77
|
+
* RULES, and about nothing downstream of them.
|
|
78
|
+
*/
|
|
79
|
+
export declare const NEVER_ROUTES_BOUNDARY: string;
|
|
80
|
+
/** The slice of an entry declaration this check reads: the shared claim shape,
|
|
81
|
+
* plus the POSITIVE phrases the same rule declared (a phrase asserted both
|
|
82
|
+
* ways is a contradiction the author wrote, and is reported as one). */
|
|
83
|
+
export interface NeverRoutesRuleDecl extends StartRuleDecl {
|
|
84
|
+
readonly examples?: readonly string[];
|
|
85
|
+
}
|
|
86
|
+
/** What {@link checkNeverRoutes} found, plus what it wants to say about its own
|
|
87
|
+
* reach. Both empty when the graph declared no negative row. */
|
|
88
|
+
export interface NeverRoutesCheckup {
|
|
89
|
+
readonly problems: readonly GraphProblem[];
|
|
90
|
+
readonly notes: readonly string[];
|
|
91
|
+
}
|
|
92
|
+
/** How two phrases are compared for "the same phrase": trimmed and
|
|
93
|
+
* case-folded, the same normalization `duplicate-intent-example` uses — an
|
|
94
|
+
* author who writes one row in two casings meant one row. Exported so the
|
|
95
|
+
* builder's accumulated-rows set is keyed the SAME way the refusal is; two
|
|
96
|
+
* spellings of one rule is how a duplicate slips through. */
|
|
97
|
+
export declare function neverRouteKey(phrase: string): string;
|
|
98
|
+
/**
|
|
99
|
+
* Validate a graph-level `neverRoutes` list at DECLARATION time, refusing every
|
|
100
|
+
* shape whose check-up answer could only mislead — each refusal naming the fix:
|
|
101
|
+
*
|
|
102
|
+
* • not an array / an EMPTY array — nothing to assert, and a check-up that
|
|
103
|
+
* passes in silence reads as coverage;
|
|
104
|
+
* • a non-string or blank entry — there is no phrase to run a matcher on;
|
|
105
|
+
* • a phrase already declared — a repeat asserts nothing the first one did
|
|
106
|
+
* not, and reads as if two different phrasings were meant.
|
|
107
|
+
*
|
|
108
|
+
* A single string is accepted and read as a one-row list: `.neverRoutes('what
|
|
109
|
+
* is the weather')` is the commonest call, and making the author type brackets
|
|
110
|
+
* for it buys nothing.
|
|
111
|
+
*
|
|
112
|
+
* Returns a frozen copy of the ROWS THIS CALL ADDS, so the stored list cannot
|
|
113
|
+
* drift from the validated one.
|
|
114
|
+
*/
|
|
115
|
+
export declare function validateNeverRoutes(phrases: unknown, where: string, alreadyDeclared: ReadonlySet<string>): readonly string[];
|
|
116
|
+
/**
|
|
117
|
+
* Run the negative rows against the declared start rules. Pure, and
|
|
118
|
+
* byte-identically silent when the graph declared none (one length check and
|
|
119
|
+
* out).
|
|
120
|
+
*
|
|
121
|
+
* Unlike the positive examples, this needs NO `orderDecides` gate: the
|
|
122
|
+
* assertion is "nobody claims it", which every rule has to satisfy, so the
|
|
123
|
+
* order they are read in cannot change the answer. That is also why it is the
|
|
124
|
+
* one phrase check that stays meaningful under a classifier — tier 1 is still
|
|
125
|
+
* read first there, and a rule that claims the phrase still takes the turn
|
|
126
|
+
* before any scorer runs.
|
|
127
|
+
*/
|
|
128
|
+
export declare function checkNeverRoutes(input: {
|
|
129
|
+
readonly entries: readonly NeverRoutesRuleDecl[];
|
|
130
|
+
readonly phrases: readonly string[];
|
|
131
|
+
}): NeverRoutesCheckup;
|
|
132
|
+
//# sourceMappingURL=skillNeverRoutes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillNeverRoutes.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillNeverRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAI6B,CAAC;AAEhE;;yEAEyE;AACzE,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;iEACiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAOD;;;;8DAI8D;AAC9D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,SAAS,MAAM,EAAE,CAsCnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,GAAG,kBAAkB,CA0FrB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* skillPartition — three ADVISORY signals about the shape of the partition
|
|
3
|
+
* itself: how a graph cut the world into skills.
|
|
4
|
+
*
|
|
5
|
+
* ## Why the partition is worth a check at all
|
|
6
|
+
*
|
|
7
|
+
* Everything else the check-up reports is a wiring fact — an edge to a skill
|
|
8
|
+
* that is not there, a rule that can never win. The partition is upstream of
|
|
9
|
+
* all of it, and it is the decision with the most leverage: a graph whose
|
|
10
|
+
* skills follow SYSTEMS rather than CAPABILITIES makes one ordinary question
|
|
11
|
+
* cross four skills, and the capability the user actually wanted ends up
|
|
12
|
+
* implemented outside the graph, by hand, where nothing can see it. Field use
|
|
13
|
+
* produced exactly that shape — nineteen skills, ONE declared edge, and tool
|
|
14
|
+
* names carrying the system that owns them (`influx_*`, `pmax_*`, `pstore_*`,
|
|
15
|
+
* `rvtools_*`) with the skills following the prefixes.
|
|
16
|
+
*
|
|
17
|
+
* The important part: all three of those are visible from NAMES AND STRUCTURE
|
|
18
|
+
* ALONE, at build time, with no run and no model. So the runtime can say them.
|
|
19
|
+
*
|
|
20
|
+
* ## Why every one of them is an advisory, and stays one
|
|
21
|
+
*
|
|
22
|
+
* Each signal has a legitimate design behind it:
|
|
23
|
+
*
|
|
24
|
+
* • a skill really can be one system's capability (a weather skill wrapping a
|
|
25
|
+
* weather API is not a mistake);
|
|
26
|
+
* • a deliberately FLAT menu of independent skills really does declare almost
|
|
27
|
+
* no edges — a scorer or the model picks, and there is nothing to hand off;
|
|
28
|
+
* • a one-call capability really can be one tool with a short body.
|
|
29
|
+
*
|
|
30
|
+
* So none of them is ever an error, and none of them says "this is wrong". Each
|
|
31
|
+
* message states the SIGNAL AS A FACT the author can check against their own
|
|
32
|
+
* intent — "your 19 skills declare 1 route", "every tool in `powerstore` shares
|
|
33
|
+
* the prefix `pstore_`" — and then names the design each fact usually indicates
|
|
34
|
+
* and the design it is also consistent with. This library's check-up teaches;
|
|
35
|
+
* it does not grade.
|
|
36
|
+
*
|
|
37
|
+
* ## The thresholds, and why each one is where it is
|
|
38
|
+
*
|
|
39
|
+
* Named constants below, each with the argument beside it. They are chosen so a
|
|
40
|
+
* SMALL graph is silent (small graphs have no partition problem worth naming),
|
|
41
|
+
* so a trivially-true observation is never dressed up as a finding (one tool
|
|
42
|
+
* shares a prefix with itself), and so the commonest honest naming convention —
|
|
43
|
+
* a VERB first — never fires.
|
|
44
|
+
*
|
|
45
|
+
* Zone: PURE CORE. Pinned by
|
|
46
|
+
* `test/lib/injection-engine/skill-graph-fence.test.ts`.
|
|
47
|
+
*/
|
|
48
|
+
import type { GraphProblem } from './skillGraphCheckup.js';
|
|
49
|
+
import type { Injection } from './types.js';
|
|
50
|
+
/** What the partition check reads. Counts, because that is what the signals
|
|
51
|
+
* are about — no check here reasons about which edge goes where. */
|
|
52
|
+
export interface PartitionInput {
|
|
53
|
+
/** Every skill in the graph (wired or not). */
|
|
54
|
+
readonly skills: readonly Injection[];
|
|
55
|
+
/** Declared routes, of any kind (a bare/model edge is still a declared
|
|
56
|
+
* handoff — the signal is about handoffs that were never written down at
|
|
57
|
+
* all, not about how deterministic they are). */
|
|
58
|
+
readonly routeCount: number;
|
|
59
|
+
/** Declared entries — quoted in the ratio message so the fact is complete. */
|
|
60
|
+
readonly entryCount: number;
|
|
61
|
+
/** A decision `tree()` owns its own routing and declares no routes by
|
|
62
|
+
* construction, so the edge-ratio signal does not apply there. */
|
|
63
|
+
readonly isTree: boolean;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Run the three partition signals. Pure, and cheap: one pass over the skills
|
|
67
|
+
* and two integers. Every problem it produces is a WARNING.
|
|
68
|
+
*/
|
|
69
|
+
export declare function checkPartition(input: PartitionInput): GraphProblem[];
|
|
70
|
+
//# sourceMappingURL=skillPartition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillPartition.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillPartition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA+G5C;qEACqE;AACrE,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC;;sDAEkD;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;uEACmE;IACnE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,EAAE,CAsFpE"}
|
|
@@ -76,9 +76,36 @@
|
|
|
76
76
|
* others take `defineSkill`'s defaults.
|
|
77
77
|
* - unknown frontmatter keys are still IGNORED, not rejected, so a file
|
|
78
78
|
* carrying another tool's metadata still loads here. `name`,
|
|
79
|
-
* `description`, `tools`, `steps` and `
|
|
80
|
-
* that used one of those
|
|
81
|
-
* release can change, and it changes it loudly.
|
|
79
|
+
* `description`, `tools`, `steps`, `onSkip` and `routes` are the KNOWN
|
|
80
|
+
* keys — a file that used one of those six for something else is the one
|
|
81
|
+
* case a release can change, and it changes it loudly.
|
|
82
|
+
*
|
|
83
|
+
* ── The routing, and the door that reads it (9.43.0) ─────────────────────────
|
|
84
|
+
* A runbook says what to do, what to do it with, in what order — and where the
|
|
85
|
+
* work goes NEXT. That last part is the graph, and until now it had to be
|
|
86
|
+
* hand-wired in code even when the files said it plainly. `routes:` closes it:
|
|
87
|
+
*
|
|
88
|
+
* ---
|
|
89
|
+
* name: billing
|
|
90
|
+
* tools: lookup_order, issue_refund
|
|
91
|
+
* routes:
|
|
92
|
+
* - escalation: on issue_refund status=denied
|
|
93
|
+
* - receipts: on issue_refund
|
|
94
|
+
* ---
|
|
95
|
+
*
|
|
96
|
+
* const runbook = await runbookFromDir('./skills', { tools: [...] });
|
|
97
|
+
* const graph = skillGraph({ ...runbook, start: 'billing' });
|
|
98
|
+
*
|
|
99
|
+
* TWO DOORS, one truth: `skillsFromDir` returns skills and REFUSES a file that
|
|
100
|
+
* declares `routes:` (a door that dropped the routing would hand back a graph
|
|
101
|
+
* you believed was declared on disk); {@link runbookFromDir} returns
|
|
102
|
+
* `{ skills, steps }`. Same law as `tools:` — the file PICKS (a route names a
|
|
103
|
+
* skill id this directory declares; an unknown id is refused at load, by name,
|
|
104
|
+
* listing what is available), it never DEFINES. A guard is one of the two DATA
|
|
105
|
+
* conditions a route already has (`on <tool_name>`, `status=<outcome>`), and
|
|
106
|
+
* nothing else: a `when` predicate is CODE, no file can carry code, and that
|
|
107
|
+
* conditional stays in your source. See `skillsFromDirRoutes.ts` for the whole
|
|
108
|
+
* grammar and every refusal.
|
|
82
109
|
*
|
|
83
110
|
* A worked example feeding this into a graph:
|
|
84
111
|
* `examples/features/47-skills-from-dir-graph.ts`.
|
|
@@ -111,6 +138,7 @@
|
|
|
111
138
|
import type { Injection } from './types.js';
|
|
112
139
|
import type { Tool } from '../../core/tools.js';
|
|
113
140
|
import { type SurfaceMode } from './factories/defineSkill.js';
|
|
141
|
+
import type { SkillGraphStep } from './skillGraph.js';
|
|
114
142
|
export interface SkillsFromDirOptions {
|
|
115
143
|
/**
|
|
116
144
|
* Where a loaded skill's body lands once activated. Defaults to
|
|
@@ -133,6 +161,31 @@ export interface SkillsFromDirOptions {
|
|
|
133
161
|
*/
|
|
134
162
|
readonly tools?: readonly Tool[];
|
|
135
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* A whole runbook directory, read as the two things a graph is made of
|
|
166
|
+
* (9.43.0): the skills, and the edges between them.
|
|
167
|
+
*
|
|
168
|
+
* Spreads straight into the graph — the field names are the graph's own, so
|
|
169
|
+
* nothing has to be translated at the call site:
|
|
170
|
+
*
|
|
171
|
+
* const runbook = await runbookFromDir('./skills', { tools });
|
|
172
|
+
* const graph = skillGraph({ ...runbook, start: 'triage' });
|
|
173
|
+
*/
|
|
174
|
+
export interface DirRunbook {
|
|
175
|
+
/** Every `SKILL.md` under the directory, as Skill Injections — byte-identical
|
|
176
|
+
* to what `skillsFromDir` returns for the same directory. */
|
|
177
|
+
readonly skills: readonly Injection[];
|
|
178
|
+
/**
|
|
179
|
+
* The declared edges, ready for `skillGraph({ steps })`. In skill-name order,
|
|
180
|
+
* then file order, so a graph built from a directory is stable.
|
|
181
|
+
*
|
|
182
|
+
* NAME NOTE, because two different things are spelled `steps` in this
|
|
183
|
+
* library: a file's own `steps:` key is that SKILL's tool sequence (which
|
|
184
|
+
* rides on the skill, unchanged); these `steps` are the GRAPH's edges, read
|
|
185
|
+
* from each file's `routes:` key. They never meet.
|
|
186
|
+
*/
|
|
187
|
+
readonly steps: readonly SkillGraphStep[];
|
|
188
|
+
}
|
|
136
189
|
/**
|
|
137
190
|
* Load every `SKILL.md` under `dir` as a Skill Injection.
|
|
138
191
|
*
|
|
@@ -155,4 +208,31 @@ export interface SkillsFromDirOptions {
|
|
|
155
208
|
* does not carry, or sequences a tool the file itself did not declare.
|
|
156
209
|
*/
|
|
157
210
|
export declare function skillsFromDir(dir: string, opts?: SkillsFromDirOptions): Promise<readonly Injection[]>;
|
|
211
|
+
/**
|
|
212
|
+
* Load a directory as a whole RUNBOOK (9.43.0) — the skills AND the edges
|
|
213
|
+
* between them.
|
|
214
|
+
*
|
|
215
|
+
* `skillsFromDir` reads what one skill is; this reads what the skills are TO
|
|
216
|
+
* EACH OTHER, from each file's `routes:` key, and hands back both halves ready
|
|
217
|
+
* for `skillGraph({ ...runbook, start })`. Everything else is identical: same
|
|
218
|
+
* layouts, same frontmatter, same tool registry, same refusals.
|
|
219
|
+
*
|
|
220
|
+
* The routing a file may carry is deliberately small, and the boundary is a
|
|
221
|
+
* security property rather than a limitation — see `skillsFromDirRoutes.ts`:
|
|
222
|
+
* a route NAMES a skill this directory declares (an unknown id is refused at
|
|
223
|
+
* load, by name, listing what is available — never a half-graph), and a guard
|
|
224
|
+
* is one of the two DATA conditions a route already has (`on <tool>`,
|
|
225
|
+
* `status=<outcome>`). A `when` predicate is code, so no file can express one;
|
|
226
|
+
* that conditional stays in your source, where `skillGraph({ steps })` takes it.
|
|
227
|
+
*
|
|
228
|
+
* @param dir - A local filesystem path. Same rule as `skillsFromDir`.
|
|
229
|
+
* @param opts - Applied uniformly to every loaded skill.
|
|
230
|
+
*
|
|
231
|
+
* @throws everything `skillsFromDir` throws, plus: a route to an id no
|
|
232
|
+
* `SKILL.md` in the directory declares (the message lists what is
|
|
233
|
+
* available), a guard the grammar cannot express (the message quotes the
|
|
234
|
+
* whole grammar), a guard naming a tool the file itself does not declare,
|
|
235
|
+
* and a file routing to the same skill twice.
|
|
236
|
+
*/
|
|
237
|
+
export declare function runbookFromDir(dir: string, opts?: SkillsFromDirOptions): Promise<DirRunbook>;
|
|
158
238
|
//# sourceMappingURL=skillsFromDir.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillsFromDir.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillsFromDir.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"skillsFromDir.d.ts","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillsFromDir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAoBtD,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;CAClC;AA2BD;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB;kEAC8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAoB/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,UAAU,CAAC,CASrB"}
|