agent-nuvira 3.3.13 → 3.3.14
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/README.md +67 -1
- package/dist/agents/agents/planner.d.ts.map +1 -1
- package/dist/agents/agents/planner.js +9 -0
- package/dist/agents/agents/planner.js.map +1 -1
- package/dist/agents/orchestrator.d.ts +31 -0
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +74 -126
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/cli/chat.d.ts +89 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +765 -33
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +12 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts +12 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +86 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/decisions.d.ts +28 -0
- package/dist/cli/decisions.d.ts.map +1 -0
- package/dist/cli/decisions.js +140 -0
- package/dist/cli/decisions.js.map +1 -0
- package/dist/cli/doctor.d.ts +6 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +46 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/failover-runner.d.ts.map +1 -1
- package/dist/cli/failover-runner.js +19 -1
- package/dist/cli/failover-runner.js.map +1 -1
- package/dist/cli/feedback.d.ts.map +1 -1
- package/dist/cli/feedback.js +5 -1
- package/dist/cli/feedback.js.map +1 -1
- package/dist/cli/hooks.d.ts +30 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +224 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/knowledge.d.ts +9 -1
- package/dist/cli/knowledge.d.ts.map +1 -1
- package/dist/cli/knowledge.js +93 -2
- package/dist/cli/knowledge.js.map +1 -1
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +47 -12
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/model.d.ts +20 -0
- package/dist/cli/model.d.ts.map +1 -1
- package/dist/cli/model.js +294 -14
- package/dist/cli/model.js.map +1 -1
- package/dist/cli/rate.d.ts +78 -0
- package/dist/cli/rate.d.ts.map +1 -0
- package/dist/cli/rate.js +294 -0
- package/dist/cli/rate.js.map +1 -0
- package/dist/config/process-env.d.ts.map +1 -1
- package/dist/config/process-env.js +10 -0
- package/dist/config/process-env.js.map +1 -1
- package/dist/enterprise/vault.d.ts.map +1 -1
- package/dist/enterprise/vault.js +5 -21
- package/dist/enterprise/vault.js.map +1 -1
- package/dist/gateway/hook-contract.d.ts +33 -0
- package/dist/gateway/hook-contract.d.ts.map +1 -1
- package/dist/gateway/hook-contract.js +97 -0
- package/dist/gateway/hook-contract.js.map +1 -1
- package/dist/inference/gemini-adapter.d.ts.map +1 -1
- package/dist/inference/gemini-adapter.js +4 -0
- package/dist/inference/gemini-adapter.js.map +1 -1
- package/dist/inference/interface.d.ts +37 -0
- package/dist/inference/interface.d.ts.map +1 -1
- package/dist/inference/native-tools.d.ts +16 -1
- package/dist/inference/native-tools.d.ts.map +1 -1
- package/dist/inference/native-tools.js +34 -10
- package/dist/inference/native-tools.js.map +1 -1
- package/dist/inference/route-resolver.d.ts +30 -0
- package/dist/inference/route-resolver.d.ts.map +1 -1
- package/dist/inference/route-resolver.js +158 -1
- package/dist/inference/route-resolver.js.map +1 -1
- package/dist/inference/tools.d.ts +16 -1
- package/dist/inference/tools.d.ts.map +1 -1
- package/dist/inference/tools.js +51 -18
- package/dist/inference/tools.js.map +1 -1
- package/dist/learning/acceptance-model.d.ts +247 -0
- package/dist/learning/acceptance-model.d.ts.map +1 -0
- package/dist/learning/acceptance-model.js +708 -0
- package/dist/learning/acceptance-model.js.map +1 -0
- package/dist/learning/auto-router.d.ts +68 -24
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +301 -96
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/autonomy-policy.d.ts +12 -16
- package/dist/learning/autonomy-policy.d.ts.map +1 -1
- package/dist/learning/autonomy-policy.js +50 -48
- package/dist/learning/autonomy-policy.js.map +1 -1
- package/dist/learning/behavioural-labels.d.ts +86 -0
- package/dist/learning/behavioural-labels.d.ts.map +1 -0
- package/dist/learning/behavioural-labels.js +166 -0
- package/dist/learning/behavioural-labels.js.map +1 -0
- package/dist/learning/capability-evidence.d.ts +167 -0
- package/dist/learning/capability-evidence.d.ts.map +1 -0
- package/dist/learning/capability-evidence.js +210 -0
- package/dist/learning/capability-evidence.js.map +1 -0
- package/dist/learning/capability-readiness.d.ts +64 -0
- package/dist/learning/capability-readiness.d.ts.map +1 -0
- package/dist/learning/capability-readiness.js +74 -0
- package/dist/learning/capability-readiness.js.map +1 -0
- package/dist/learning/capability-types.d.ts +169 -0
- package/dist/learning/capability-types.d.ts.map +1 -0
- package/dist/learning/capability-types.js +20 -0
- package/dist/learning/capability-types.js.map +1 -0
- package/dist/learning/catalog-feed.d.ts +89 -0
- package/dist/learning/catalog-feed.d.ts.map +1 -0
- package/dist/learning/catalog-feed.js +211 -0
- package/dist/learning/catalog-feed.js.map +1 -0
- package/dist/learning/cli-intent-effects.d.ts +60 -0
- package/dist/learning/cli-intent-effects.d.ts.map +1 -0
- package/dist/learning/cli-intent-effects.js +153 -0
- package/dist/learning/cli-intent-effects.js.map +1 -0
- package/dist/learning/command-adaptation.d.ts +41 -0
- package/dist/learning/command-adaptation.d.ts.map +1 -0
- package/dist/learning/command-adaptation.js +122 -0
- package/dist/learning/command-adaptation.js.map +1 -0
- package/dist/learning/consent-picture.d.ts +42 -0
- package/dist/learning/consent-picture.d.ts.map +1 -0
- package/dist/learning/consent-picture.js +53 -0
- package/dist/learning/consent-picture.js.map +1 -0
- package/dist/learning/context-budget.d.ts +37 -6
- package/dist/learning/context-budget.d.ts.map +1 -1
- package/dist/learning/context-budget.js +38 -9
- package/dist/learning/context-budget.js.map +1 -1
- package/dist/learning/decision-log.d.ts +114 -0
- package/dist/learning/decision-log.d.ts.map +1 -0
- package/dist/learning/decision-log.js +296 -0
- package/dist/learning/decision-log.js.map +1 -0
- package/dist/learning/deliverable-class.d.ts.map +1 -1
- package/dist/learning/deliverable-class.js +19 -0
- package/dist/learning/deliverable-class.js.map +1 -1
- package/dist/learning/deliverable-corpus.d.ts +117 -0
- package/dist/learning/deliverable-corpus.d.ts.map +1 -0
- package/dist/learning/deliverable-corpus.js +176 -0
- package/dist/learning/deliverable-corpus.js.map +1 -0
- package/dist/learning/error-repair.d.ts +22 -1
- package/dist/learning/error-repair.d.ts.map +1 -1
- package/dist/learning/error-repair.js +37 -0
- package/dist/learning/error-repair.js.map +1 -1
- package/dist/learning/exhaustion-report.d.ts +136 -0
- package/dist/learning/exhaustion-report.d.ts.map +1 -0
- package/dist/learning/exhaustion-report.js +239 -0
- package/dist/learning/exhaustion-report.js.map +1 -0
- package/dist/learning/failure-bookkeeping.d.ts +16 -0
- package/dist/learning/failure-bookkeeping.d.ts.map +1 -1
- package/dist/learning/failure-bookkeeping.js +51 -5
- package/dist/learning/failure-bookkeeping.js.map +1 -1
- package/dist/learning/gate-friction.d.ts +39 -0
- package/dist/learning/gate-friction.d.ts.map +1 -0
- package/dist/learning/gate-friction.js +91 -0
- package/dist/learning/gate-friction.js.map +1 -0
- package/dist/learning/harness-narration.d.ts +34 -0
- package/dist/learning/harness-narration.d.ts.map +1 -0
- package/dist/learning/harness-narration.js +58 -0
- package/dist/learning/harness-narration.js.map +1 -0
- package/dist/learning/hub-skill-catalog.d.ts.map +1 -1
- package/dist/learning/hub-skill-catalog.js +1 -2
- package/dist/learning/hub-skill-catalog.js.map +1 -1
- package/dist/learning/hybrid-router.d.ts +65 -0
- package/dist/learning/hybrid-router.d.ts.map +1 -1
- package/dist/learning/hybrid-router.js +186 -0
- package/dist/learning/hybrid-router.js.map +1 -1
- package/dist/learning/knowledge-base.d.ts +229 -3
- package/dist/learning/knowledge-base.d.ts.map +1 -1
- package/dist/learning/knowledge-base.js +593 -24
- package/dist/learning/knowledge-base.js.map +1 -1
- package/dist/learning/knowledge-eval.d.ts +171 -0
- package/dist/learning/knowledge-eval.d.ts.map +1 -0
- package/dist/learning/knowledge-eval.js +196 -0
- package/dist/learning/knowledge-eval.js.map +1 -0
- package/dist/learning/knowledge-turn.d.ts +92 -0
- package/dist/learning/knowledge-turn.d.ts.map +1 -0
- package/dist/learning/knowledge-turn.js +190 -0
- package/dist/learning/knowledge-turn.js.map +1 -0
- package/dist/learning/learned-commands.d.ts +64 -0
- package/dist/learning/learned-commands.d.ts.map +1 -0
- package/dist/learning/learned-commands.js +108 -0
- package/dist/learning/learned-commands.js.map +1 -0
- package/dist/learning/lexical-search.d.ts +50 -0
- package/dist/learning/lexical-search.d.ts.map +1 -0
- package/dist/learning/lexical-search.js +111 -0
- package/dist/learning/lexical-search.js.map +1 -0
- package/dist/learning/machine-facts.d.ts +71 -0
- package/dist/learning/machine-facts.d.ts.map +1 -0
- package/dist/learning/machine-facts.js +164 -0
- package/dist/learning/machine-facts.js.map +1 -0
- package/dist/learning/markdown-outline.d.ts +73 -0
- package/dist/learning/markdown-outline.d.ts.map +1 -0
- package/dist/learning/markdown-outline.js +136 -0
- package/dist/learning/markdown-outline.js.map +1 -0
- package/dist/learning/model-first-router.d.ts +33 -1
- package/dist/learning/model-first-router.d.ts.map +1 -1
- package/dist/learning/model-first-router.js +123 -9
- package/dist/learning/model-first-router.js.map +1 -1
- package/dist/learning/model-identity.d.ts +80 -0
- package/dist/learning/model-identity.d.ts.map +1 -0
- package/dist/learning/model-identity.js +115 -0
- package/dist/learning/model-identity.js.map +1 -0
- package/dist/learning/model-registry.d.ts +141 -2
- package/dist/learning/model-registry.d.ts.map +1 -1
- package/dist/learning/model-registry.js +324 -38
- package/dist/learning/model-registry.js.map +1 -1
- package/dist/learning/model-scoring.d.ts.map +1 -1
- package/dist/learning/model-scoring.js +8 -1
- package/dist/learning/model-scoring.js.map +1 -1
- package/dist/learning/model-selection.d.ts.map +1 -1
- package/dist/learning/model-selection.js +41 -0
- package/dist/learning/model-selection.js.map +1 -1
- package/dist/learning/outcome-observation.d.ts +49 -0
- package/dist/learning/outcome-observation.d.ts.map +1 -0
- package/dist/learning/outcome-observation.js +95 -0
- package/dist/learning/outcome-observation.js.map +1 -0
- package/dist/learning/pair-entitlement.d.ts +184 -0
- package/dist/learning/pair-entitlement.d.ts.map +1 -0
- package/dist/learning/pair-entitlement.js +214 -0
- package/dist/learning/pair-entitlement.js.map +1 -0
- package/dist/learning/provider-fallback.d.ts +23 -1
- package/dist/learning/provider-fallback.d.ts.map +1 -1
- package/dist/learning/provider-fallback.js +24 -0
- package/dist/learning/provider-fallback.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +65 -1
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +123 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/requirement-probe.d.ts +55 -0
- package/dist/learning/requirement-probe.d.ts.map +1 -0
- package/dist/learning/requirement-probe.js +77 -0
- package/dist/learning/requirement-probe.js.map +1 -0
- package/dist/learning/resilient-call.d.ts +20 -1
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +42 -4
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/learning/response-usability.d.ts +85 -0
- package/dist/learning/response-usability.d.ts.map +1 -0
- package/dist/learning/response-usability.js +135 -0
- package/dist/learning/response-usability.js.map +1 -0
- package/dist/learning/router-bandit.d.ts +132 -0
- package/dist/learning/router-bandit.d.ts.map +1 -1
- package/dist/learning/router-bandit.js +253 -0
- package/dist/learning/router-bandit.js.map +1 -1
- package/dist/learning/routing-history.d.ts +41 -2
- package/dist/learning/routing-history.d.ts.map +1 -1
- package/dist/learning/routing-history.js.map +1 -1
- package/dist/learning/run-trace.d.ts +21 -0
- package/dist/learning/run-trace.d.ts.map +1 -1
- package/dist/learning/run-trace.js +38 -0
- package/dist/learning/run-trace.js.map +1 -1
- package/dist/learning/session-grant.d.ts +75 -0
- package/dist/learning/session-grant.d.ts.map +1 -0
- package/dist/learning/session-grant.js +112 -0
- package/dist/learning/session-grant.js.map +1 -0
- package/dist/learning/task-model-continuity.d.ts +73 -0
- package/dist/learning/task-model-continuity.d.ts.map +1 -0
- package/dist/learning/task-model-continuity.js +87 -0
- package/dist/learning/task-model-continuity.js.map +1 -0
- package/dist/learning/turn-feedback.d.ts +93 -0
- package/dist/learning/turn-feedback.d.ts.map +1 -0
- package/dist/learning/turn-feedback.js +127 -0
- package/dist/learning/turn-feedback.js.map +1 -0
- package/dist/learning/turn-report.d.ts +104 -2
- package/dist/learning/turn-report.d.ts.map +1 -1
- package/dist/learning/turn-report.js +161 -6
- package/dist/learning/turn-report.js.map +1 -1
- package/dist/learning/verdict-routing.d.ts +51 -0
- package/dist/learning/verdict-routing.d.ts.map +1 -0
- package/dist/learning/verdict-routing.js +122 -0
- package/dist/learning/verdict-routing.js.map +1 -0
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +5 -0
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/manager.d.ts +10 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +20 -0
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/mcp-discovery.d.ts +34 -0
- package/dist/mcp/mcp-discovery.d.ts.map +1 -0
- package/dist/mcp/mcp-discovery.js +71 -0
- package/dist/mcp/mcp-discovery.js.map +1 -0
- package/dist/mcp/mcp-schema-cache.d.ts +17 -0
- package/dist/mcp/mcp-schema-cache.d.ts.map +1 -1
- package/dist/mcp/mcp-schema-cache.js +47 -3
- package/dist/mcp/mcp-schema-cache.js.map +1 -1
- package/dist/mcp/types.d.ts +28 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/ask-user.js +4 -0
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/capability-registry.d.ts +150 -0
- package/dist/tools/capability-registry.d.ts.map +1 -0
- package/dist/tools/capability-registry.js +400 -0
- package/dist/tools/capability-registry.js.map +1 -0
- package/dist/tools/child-agent-runtime.d.ts.map +1 -1
- package/dist/tools/child-agent-runtime.js +19 -5
- package/dist/tools/child-agent-runtime.js.map +1 -1
- package/dist/tools/coding-tools.d.ts +17 -5
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +80 -11
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/command-memo.d.ts +116 -0
- package/dist/tools/command-memo.d.ts.map +1 -0
- package/dist/tools/command-memo.js +202 -0
- package/dist/tools/command-memo.js.map +1 -0
- package/dist/tools/git-tool.d.ts.map +1 -1
- package/dist/tools/git-tool.js +13 -3
- package/dist/tools/git-tool.js.map +1 -1
- package/dist/tools/harness-directive.d.ts +42 -0
- package/dist/tools/harness-directive.d.ts.map +1 -0
- package/dist/tools/harness-directive.js +45 -0
- package/dist/tools/harness-directive.js.map +1 -0
- package/dist/tools/loop-skill-hint.d.ts +74 -174
- package/dist/tools/loop-skill-hint.d.ts.map +1 -1
- package/dist/tools/loop-skill-hint.js +110 -536
- package/dist/tools/loop-skill-hint.js.map +1 -1
- package/dist/tools/mcp-client-tool.d.ts +2 -0
- package/dist/tools/mcp-client-tool.d.ts.map +1 -1
- package/dist/tools/mcp-client-tool.js +3 -0
- package/dist/tools/mcp-client-tool.js.map +1 -1
- package/dist/tools/modality/shared.d.ts +1 -4
- package/dist/tools/modality/shared.d.ts.map +1 -1
- package/dist/tools/modality/shared.js +7 -22
- package/dist/tools/modality/shared.js.map +1 -1
- package/dist/tools/plan-store.d.ts +20 -2
- package/dist/tools/plan-store.d.ts.map +1 -1
- package/dist/tools/plan-store.js +51 -7
- package/dist/tools/plan-store.js.map +1 -1
- package/dist/tools/registry.d.ts +76 -3
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +486 -26
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/remediation-ladder.d.ts.map +1 -1
- package/dist/tools/remediation-ladder.js +8 -0
- package/dist/tools/remediation-ladder.js.map +1 -1
- package/dist/tools/run-cli.d.ts.map +1 -1
- package/dist/tools/run-cli.js +29 -4
- package/dist/tools/run-cli.js.map +1 -1
- package/dist/tools/run-terminal.d.ts +11 -0
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +265 -10
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +321 -13
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +867 -66
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/utils/atomic-store.d.ts +53 -0
- package/dist/utils/atomic-store.d.ts.map +1 -0
- package/dist/utils/atomic-store.js +178 -0
- package/dist/utils/atomic-store.js.map +1 -0
- package/dist/utils/binary-probe.d.ts +25 -0
- package/dist/utils/binary-probe.d.ts.map +1 -0
- package/dist/utils/binary-probe.js +48 -0
- package/dist/utils/binary-probe.js.map +1 -0
- package/dist/utils/workspace-path.d.ts +50 -0
- package/dist/utils/workspace-path.d.ts.map +1 -0
- package/dist/utils/workspace-path.js +86 -0
- package/dist/utils/workspace-path.js.map +1 -0
- package/dist/web-dashboard/chat-console.d.ts +24 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +38 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/project-context.d.ts +27 -2
- package/dist/web-dashboard/project-context.d.ts.map +1 -1
- package/dist/web-dashboard/project-context.js +32 -2
- package/dist/web-dashboard/project-context.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +11 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +362 -11
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +170 -1
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.d.ts +11 -2
- package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.js +24 -12
- package/dist/web-dashboard/workspace-guard.js.map +1 -1
- package/dist/web-dashboard/workspace-resolution.d.ts +87 -0
- package/dist/web-dashboard/workspace-resolution.d.ts.map +1 -0
- package/dist/web-dashboard/workspace-resolution.js +105 -0
- package/dist/web-dashboard/workspace-resolution.js.map +1 -0
- package/package.json +1 -1
- package/src/web-dashboard/public/assets/index-zjbdJnO-.js +210 -0
- package/src/web-dashboard/public/assets/index-zjbdJnO-.js.map +1 -0
- package/src/web-dashboard/public/index.html +1 -1
- package/src/web-dashboard/public/assets/index-DhiuR4S2.js +0 -210
- package/src/web-dashboard/public/assets/index-DhiuR4S2.js.map +0 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Machine facts — what THIS machine is, detected once per run.
|
|
3
|
+
*
|
|
4
|
+
* WHY. The agent reasons about "how do I do X here" constantly, and the honest
|
|
5
|
+
* inputs to that reasoning are facts about the host: which OS and release, which
|
|
6
|
+
* architecture, which shell, and — the one that actually decides the command —
|
|
7
|
+
* WHICH PACKAGE MANAGERS ARE INSTALLED. A model that assumes `apt` on a machine
|
|
8
|
+
* that only has `dnf`, or `brew` on Windows, produces a command that cannot run.
|
|
9
|
+
* The harness should hand it the facts once rather than let it guess per turn.
|
|
10
|
+
*
|
|
11
|
+
* THE ASYMMETRY WITH THE PER-OS COMMAND MAP (Bundle 47). That map declares the
|
|
12
|
+
* command for the two verbs where the OS DETERMINES it and a wrong guess is
|
|
13
|
+
* expensive. This module is the opposite side: it detects what is PRESENT on the
|
|
14
|
+
* host, from the same `which`/`where` resolver the shell uses (`binary-probe`).
|
|
15
|
+
* Presence is a fact, not a declaration, so it cannot drift — and it is the input
|
|
16
|
+
* that lets the model derive a command for anything the map does not cover,
|
|
17
|
+
* instead of the map having to enumerate the world.
|
|
18
|
+
*
|
|
19
|
+
* DETECTED ONCE. The whole result is memoized for the process (OS and installed
|
|
20
|
+
* tools cannot change mid-run), and `binary-probe` is memoized a second time per
|
|
21
|
+
* name, so the ~25 lookups are paid once. `resetMachineFactsCache()` exists for
|
|
22
|
+
* test isolation.
|
|
23
|
+
*
|
|
24
|
+
* INPUTS ARE INJECTABLE. A test can pass a platform and a fake `binary` probe;
|
|
25
|
+
* the real call uses `process.platform`, `process.env` and `binaryOnPath`.
|
|
26
|
+
*/
|
|
27
|
+
import * as os from 'node:os';
|
|
28
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
29
|
+
import { binaryOnPath } from '../utils/binary-probe.js';
|
|
30
|
+
/**
|
|
31
|
+
* The catalog we probe, grouped by ecosystem. Not a per-OS mapping — a union,
|
|
32
|
+
* probed for presence on whatever host this is, because presence is the fact.
|
|
33
|
+
* The ORDER decides suggestion order: the OS-native managers first, then the
|
|
34
|
+
* JS/Python/build ecosystems.
|
|
35
|
+
*/
|
|
36
|
+
const NATIVE_BY_OS = {
|
|
37
|
+
windows: ['winget', 'choco', 'scoop'],
|
|
38
|
+
macos: ['brew', 'port'],
|
|
39
|
+
linux: ['apt', 'apt-get', 'dnf', 'yum', 'pacman', 'zypper', 'apk', 'snap', 'flatpak'],
|
|
40
|
+
other: [],
|
|
41
|
+
};
|
|
42
|
+
const ECOSYSTEM_MANAGERS = [
|
|
43
|
+
// JS
|
|
44
|
+
'bun', 'pnpm', 'yarn', 'npm',
|
|
45
|
+
// Python
|
|
46
|
+
'uv', 'poetry', 'pip3', 'pip',
|
|
47
|
+
// Build / language
|
|
48
|
+
'cargo', 'go', 'gem', 'composer', 'dotnet',
|
|
49
|
+
];
|
|
50
|
+
let cached = null;
|
|
51
|
+
/** Clear the memo (test isolation). */
|
|
52
|
+
export function resetMachineFactsCache() {
|
|
53
|
+
cached = null;
|
|
54
|
+
}
|
|
55
|
+
/** Best-effort Linux distro from /etc/os-release. Never throws. */
|
|
56
|
+
function readLinuxDistro() {
|
|
57
|
+
try {
|
|
58
|
+
if (!existsSync('/etc/os-release'))
|
|
59
|
+
return { id: null, pretty: null };
|
|
60
|
+
const text = readFileSync('/etc/os-release', 'utf-8');
|
|
61
|
+
const id = /^ID="?([^"\n]+)"?/m.exec(text)?.[1]?.trim() ?? null;
|
|
62
|
+
const pretty = /^PRETTY_NAME="?([^"\n]+)"?/m.exec(text)?.[1]?.trim() ?? null;
|
|
63
|
+
return { id, pretty };
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return { id: null, pretty: null };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function osLabel(platform) {
|
|
70
|
+
if (platform === 'win32')
|
|
71
|
+
return { os: 'windows', osName: `Windows ${os.release()}`, distro: null };
|
|
72
|
+
if (platform === 'darwin')
|
|
73
|
+
return { os: 'macos', osName: `macOS (Darwin ${os.release()})`, distro: null };
|
|
74
|
+
if (platform === 'linux') {
|
|
75
|
+
const d = readLinuxDistro();
|
|
76
|
+
return { os: 'linux', osName: d.pretty ?? `Linux ${os.release()}`, distro: d.id };
|
|
77
|
+
}
|
|
78
|
+
return { os: 'other', osName: `${os.type()} ${os.release()}`, distro: null };
|
|
79
|
+
}
|
|
80
|
+
function resolveShell(platform, env) {
|
|
81
|
+
const shellPath = platform === 'win32'
|
|
82
|
+
? env.ComSpec ?? env.COMSPEC ?? null
|
|
83
|
+
: env.SHELL ?? null;
|
|
84
|
+
if (!shellPath)
|
|
85
|
+
return { shell: null, shellName: null };
|
|
86
|
+
// Split on BOTH separators: a Windows path must basename correctly even when
|
|
87
|
+
// this code runs on POSIX (the platform is injectable, and `dirname`/`basename`
|
|
88
|
+
// follow the HOST's rules, not the injected platform's).
|
|
89
|
+
const base = shellPath.split(/[\\/]/).pop() ?? shellPath;
|
|
90
|
+
return { shell: shellPath, shellName: base.replace(/\.exe$/i, '') };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Detect this machine's facts. Memoized for the process when called with no
|
|
94
|
+
* overrides (the real path); an override call (a test) always computes fresh.
|
|
95
|
+
*/
|
|
96
|
+
export function detectMachineFacts(probe = {}) {
|
|
97
|
+
if (!probe.platform && !probe.binary && !probe.env && cached)
|
|
98
|
+
return cached;
|
|
99
|
+
const platform = probe.platform ?? process.platform;
|
|
100
|
+
const env = probe.env ?? process.env;
|
|
101
|
+
const isBinary = probe.binary ?? binaryOnPath;
|
|
102
|
+
const { os: osNameKey, osName, distro } = osLabel(platform);
|
|
103
|
+
const { shell, shellName } = resolveShell(platform, env);
|
|
104
|
+
const ordered = [...NATIVE_BY_OS[osNameKey], ...ECOSYSTEM_MANAGERS];
|
|
105
|
+
const seen = new Set();
|
|
106
|
+
const packageManagers = [];
|
|
107
|
+
for (const name of ordered) {
|
|
108
|
+
if (seen.has(name))
|
|
109
|
+
continue;
|
|
110
|
+
seen.add(name);
|
|
111
|
+
try {
|
|
112
|
+
if (isBinary(name))
|
|
113
|
+
packageManagers.push(name);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// A probe failure is "unknown", and unknown is not "present".
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const facts = {
|
|
120
|
+
detectedAt: Date.now(),
|
|
121
|
+
platform,
|
|
122
|
+
os: osNameKey,
|
|
123
|
+
osName,
|
|
124
|
+
distro,
|
|
125
|
+
arch: os.arch(),
|
|
126
|
+
shell,
|
|
127
|
+
shellName,
|
|
128
|
+
packageManagers,
|
|
129
|
+
};
|
|
130
|
+
if (!probe.platform && !probe.binary && !probe.env)
|
|
131
|
+
cached = facts;
|
|
132
|
+
return facts;
|
|
133
|
+
}
|
|
134
|
+
/** One bounded line the model reads — the machine, stated, not assumed. */
|
|
135
|
+
export function buildMachineFactsBlock(facts = detectMachineFacts()) {
|
|
136
|
+
const present = facts.packageManagers.length > 0 ? facts.packageManagers.join(', ') : '(none detected)';
|
|
137
|
+
return [
|
|
138
|
+
'',
|
|
139
|
+
'## This machine',
|
|
140
|
+
`OS: ${facts.osName} · arch ${facts.arch} · shell ${facts.shellName ?? 'unknown'}`,
|
|
141
|
+
`Package managers / toolchains present: ${present}`,
|
|
142
|
+
'Choose commands for THIS machine from these facts. A tool not listed is not installed — do not assume one, and do not hardcode the OS it "usually" is.',
|
|
143
|
+
].join('\n');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The machine facts as a discoverable capability, so the SAME facts the prompt
|
|
147
|
+
* carries are reachable through a capability search (and so readiness can reason
|
|
148
|
+
* about what is present). Read-only, no requirements, no grant.
|
|
149
|
+
*/
|
|
150
|
+
export function machineFactsCapability(facts = detectMachineFacts()) {
|
|
151
|
+
const pms = facts.packageManagers;
|
|
152
|
+
return {
|
|
153
|
+
id: 'action:machine-facts',
|
|
154
|
+
kind: 'action',
|
|
155
|
+
ref: 'machine-facts',
|
|
156
|
+
name: 'This machine',
|
|
157
|
+
oneLiner: `${facts.osName} · arch ${facts.arch} · shell ${facts.shellName ?? 'unknown'} · present: ${pms.length > 0 ? pms.join(', ') : 'none detected'}`,
|
|
158
|
+
effectClass: 'read',
|
|
159
|
+
reversible: true,
|
|
160
|
+
requires: {},
|
|
161
|
+
tags: ['machine', 'environment', 'os', 'platform', 'arch', facts.os, facts.arch, ...pms],
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=machine-facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-facts.js","sourceRoot":"","sources":["../../src/learning/machine-facts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown outline (`src/learning/markdown-outline.ts`) — heading structure for
|
|
3
|
+
* document retrieval.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. Paragraph chunking treats a design document as a bag of
|
|
6
|
+
* paragraphs, which loses the one thing that makes a document navigable: the
|
|
7
|
+
* section a passage belongs to. A passage inside "Token refresh > Failure modes"
|
|
8
|
+
* is a different claim from the same words appearing in an unrelated appendix,
|
|
9
|
+
* and a reader asking "what does the spec say about token refresh?" needs the
|
|
10
|
+
* section, not a floating 512-token block.
|
|
11
|
+
*
|
|
12
|
+
* Two consumers, one parse:
|
|
13
|
+
* - CHUNKING tags every chunk with its heading path, so retrieval can rank on
|
|
14
|
+
* structure and a citation can name the section;
|
|
15
|
+
* - the whole-document read (`readKnowledgeDocument`) walks the same outline to
|
|
16
|
+
* serve one section verbatim.
|
|
17
|
+
*
|
|
18
|
+
* THE BREADCRUMB TRICK. A chunk is EMBEDDED with its heading path prepended but
|
|
19
|
+
* STORED without it. The path is context that belongs in the vector (a passage
|
|
20
|
+
* under "Refunds" should answer refund questions even when it never repeats the
|
|
21
|
+
* word), but it is not part of the passage, and storing it would corrupt both the
|
|
22
|
+
* citation and any faithful quote of the document.
|
|
23
|
+
*
|
|
24
|
+
* WHAT THIS DOES NOT DO. Setext headings (`Title\n=====`) and headings implied by
|
|
25
|
+
* layout in extracted PDF text are not detected — there is no reliable signal for
|
|
26
|
+
* either, and guessing would invent structure the document does not have. Text
|
|
27
|
+
* without `#` headings yields exactly one section and chunks exactly as before,
|
|
28
|
+
* so a non-Markdown document is unaffected.
|
|
29
|
+
*/
|
|
30
|
+
export interface OutlineSection {
|
|
31
|
+
/** Heading text alone, or `(preamble)` for content before the first heading. */
|
|
32
|
+
title: string;
|
|
33
|
+
/**
|
|
34
|
+
* The full ancestor chain, ` > `-joined, EXCLUDING the section's own heading —
|
|
35
|
+
* e.g. `Auth Design > Token refresh` for a section titled `Failure modes`.
|
|
36
|
+
* Empty for a preamble or an unheaded document.
|
|
37
|
+
*/
|
|
38
|
+
headingPath: string;
|
|
39
|
+
/** Heading depth (1–6), or 0 for a preamble. */
|
|
40
|
+
level: number;
|
|
41
|
+
/** The section's text, heading line included when it has one. */
|
|
42
|
+
text: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Split Markdown into heading-delimited sections, tracking the ancestor chain.
|
|
46
|
+
* Deterministic and total: every character of the input lands in exactly one
|
|
47
|
+
* section, and a document with no headings comes back as one section.
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseMarkdownOutline(text: string): OutlineSection[];
|
|
50
|
+
export interface StructuredChunk {
|
|
51
|
+
/** `<label>#<i>` — sequential across the WHOLE document, so re-ingest overwrites. */
|
|
52
|
+
id: string;
|
|
53
|
+
chunkIndex: number;
|
|
54
|
+
/** The passage as it appears in the document — what gets stored and quoted. */
|
|
55
|
+
text: string;
|
|
56
|
+
/** What gets EMBEDDED: the heading breadcrumb, then the passage. */
|
|
57
|
+
embedText: string;
|
|
58
|
+
/** Ancestor chain, ` > `-joined (may be empty). */
|
|
59
|
+
headingPath: string;
|
|
60
|
+
/** The section's own title, when the chunk came from a titled section. */
|
|
61
|
+
title: string;
|
|
62
|
+
tokenCount: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Chunk a document along its heading structure.
|
|
66
|
+
*
|
|
67
|
+
* Each section is chunked on its own (so a passage never straddles two headings),
|
|
68
|
+
* and every chunk carries the section's heading path. Numbering is global and
|
|
69
|
+
* sequential because the ids are the overwrite/delete keys: a per-section index
|
|
70
|
+
* would collide across sections and break the retired-tail delete on re-ingest.
|
|
71
|
+
*/
|
|
72
|
+
export declare function chunkMarkdown(text: string, label: string, chunkTokens?: number, overlapTokens?: number): StructuredChunk[];
|
|
73
|
+
//# sourceMappingURL=markdown-outline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-outline.d.ts","sourceRoot":"","sources":["../../src/learning/markdown-outline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CA+CnE;AAED,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,MAA6B,EAC1C,aAAa,GAAE,MAA+B,GAC7C,eAAe,EAAE,CAuCnB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown outline (`src/learning/markdown-outline.ts`) — heading structure for
|
|
3
|
+
* document retrieval.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. Paragraph chunking treats a design document as a bag of
|
|
6
|
+
* paragraphs, which loses the one thing that makes a document navigable: the
|
|
7
|
+
* section a passage belongs to. A passage inside "Token refresh > Failure modes"
|
|
8
|
+
* is a different claim from the same words appearing in an unrelated appendix,
|
|
9
|
+
* and a reader asking "what does the spec say about token refresh?" needs the
|
|
10
|
+
* section, not a floating 512-token block.
|
|
11
|
+
*
|
|
12
|
+
* Two consumers, one parse:
|
|
13
|
+
* - CHUNKING tags every chunk with its heading path, so retrieval can rank on
|
|
14
|
+
* structure and a citation can name the section;
|
|
15
|
+
* - the whole-document read (`readKnowledgeDocument`) walks the same outline to
|
|
16
|
+
* serve one section verbatim.
|
|
17
|
+
*
|
|
18
|
+
* THE BREADCRUMB TRICK. A chunk is EMBEDDED with its heading path prepended but
|
|
19
|
+
* STORED without it. The path is context that belongs in the vector (a passage
|
|
20
|
+
* under "Refunds" should answer refund questions even when it never repeats the
|
|
21
|
+
* word), but it is not part of the passage, and storing it would corrupt both the
|
|
22
|
+
* citation and any faithful quote of the document.
|
|
23
|
+
*
|
|
24
|
+
* WHAT THIS DOES NOT DO. Setext headings (`Title\n=====`) and headings implied by
|
|
25
|
+
* layout in extracted PDF text are not detected — there is no reliable signal for
|
|
26
|
+
* either, and guessing would invent structure the document does not have. Text
|
|
27
|
+
* without `#` headings yields exactly one section and chunks exactly as before,
|
|
28
|
+
* so a non-Markdown document is unaffected.
|
|
29
|
+
*/
|
|
30
|
+
import { chunkText, DEFAULT_CHUNK_TOKENS, DEFAULT_OVERLAP_TOKENS } from './retrieval.js';
|
|
31
|
+
/** `## Heading`, optional trailing hashes. */
|
|
32
|
+
const HEADING_RE = /^(#{1,6})\s+(.+?)\s*#*\s*$/;
|
|
33
|
+
/**
|
|
34
|
+
* Split Markdown into heading-delimited sections, tracking the ancestor chain.
|
|
35
|
+
* Deterministic and total: every character of the input lands in exactly one
|
|
36
|
+
* section, and a document with no headings comes back as one section.
|
|
37
|
+
*/
|
|
38
|
+
export function parseMarkdownOutline(text) {
|
|
39
|
+
const lines = text.split('\n');
|
|
40
|
+
const sections = [];
|
|
41
|
+
/** Ancestors by level; index = level - 1. */
|
|
42
|
+
const trail = [];
|
|
43
|
+
// The section currently being accumulated. It starts as the preamble, which
|
|
44
|
+
// only survives if any content actually precedes the first heading.
|
|
45
|
+
let title = '(preamble)';
|
|
46
|
+
let headingPath = '';
|
|
47
|
+
let level = 0;
|
|
48
|
+
let buffer = [];
|
|
49
|
+
const flush = () => {
|
|
50
|
+
const body = buffer.join('\n');
|
|
51
|
+
// A preamble with no content is not a section; every later section is, even
|
|
52
|
+
// an empty one (a heading with nothing under it is still a section).
|
|
53
|
+
if (sections.length > 0 || body.trim()) {
|
|
54
|
+
sections.push({ title, headingPath, level, text: body });
|
|
55
|
+
}
|
|
56
|
+
buffer = [];
|
|
57
|
+
};
|
|
58
|
+
for (const line of lines) {
|
|
59
|
+
const match = HEADING_RE.exec(line);
|
|
60
|
+
if (!match) {
|
|
61
|
+
buffer.push(line);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
flush();
|
|
65
|
+
level = match[1].length;
|
|
66
|
+
title = match[2].trim();
|
|
67
|
+
// Everything at or below this level is no longer an ancestor.
|
|
68
|
+
trail.length = Math.max(0, level - 1);
|
|
69
|
+
headingPath = trail.filter(Boolean).join(' > ');
|
|
70
|
+
trail[level - 1] = title;
|
|
71
|
+
buffer = [line];
|
|
72
|
+
}
|
|
73
|
+
flush();
|
|
74
|
+
// A document with no headings at all is not "all preamble" — it simply has no
|
|
75
|
+
// structure, and saying so is more honest than implying something came before
|
|
76
|
+
// a heading that does not exist.
|
|
77
|
+
if (sections.length === 1 && sections[0].level === 0) {
|
|
78
|
+
return [{ ...sections[0], title: '(document)' }];
|
|
79
|
+
}
|
|
80
|
+
return sections.length > 0 ? sections : [{ title: '(document)', headingPath: '', level: 0, text }];
|
|
81
|
+
}
|
|
82
|
+
/** A chunk's heading label: the section title, prefixed by its ancestors. */
|
|
83
|
+
function crumb(section) {
|
|
84
|
+
if (!section.title || section.title === '(preamble)' || section.title === '(document)') {
|
|
85
|
+
return section.headingPath;
|
|
86
|
+
}
|
|
87
|
+
return section.headingPath ? `${section.headingPath} > ${section.title}` : section.title;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Chunk a document along its heading structure.
|
|
91
|
+
*
|
|
92
|
+
* Each section is chunked on its own (so a passage never straddles two headings),
|
|
93
|
+
* and every chunk carries the section's heading path. Numbering is global and
|
|
94
|
+
* sequential because the ids are the overwrite/delete keys: a per-section index
|
|
95
|
+
* would collide across sections and break the retired-tail delete on re-ingest.
|
|
96
|
+
*/
|
|
97
|
+
export function chunkMarkdown(text, label, chunkTokens = DEFAULT_CHUNK_TOKENS, overlapTokens = DEFAULT_OVERLAP_TOKENS) {
|
|
98
|
+
const sections = parseMarkdownOutline(text);
|
|
99
|
+
const chunks = [];
|
|
100
|
+
sections.forEach((section, sectionIndex) => {
|
|
101
|
+
const headingLabel = crumb(section);
|
|
102
|
+
const body = section.text.trim();
|
|
103
|
+
if (!body)
|
|
104
|
+
return;
|
|
105
|
+
// Per-section labels keep `chunkText`'s ids unique within the call; they are
|
|
106
|
+
// replaced with the document-wide index below.
|
|
107
|
+
const parts = chunkText(body, `${label}~s${sectionIndex}`, chunkTokens, overlapTokens);
|
|
108
|
+
for (const part of parts) {
|
|
109
|
+
const chunkIndex = chunks.length;
|
|
110
|
+
chunks.push({
|
|
111
|
+
id: `${label}#${chunkIndex}`,
|
|
112
|
+
chunkIndex,
|
|
113
|
+
text: part.text,
|
|
114
|
+
embedText: headingLabel ? `${headingLabel}\n\n${part.text}` : part.text,
|
|
115
|
+
headingPath: headingLabel,
|
|
116
|
+
title: section.title,
|
|
117
|
+
tokenCount: part.tokenCount,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
// An empty document still needs its one (empty) chunk, so a re-ingest of a
|
|
122
|
+
// blanked file deletes the previous content rather than leaving the tail.
|
|
123
|
+
if (chunks.length === 0) {
|
|
124
|
+
chunks.push({
|
|
125
|
+
id: `${label}#0`,
|
|
126
|
+
chunkIndex: 0,
|
|
127
|
+
text: '',
|
|
128
|
+
embedText: '',
|
|
129
|
+
headingPath: '',
|
|
130
|
+
title: '(empty)',
|
|
131
|
+
tokenCount: 0,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return chunks;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=markdown-outline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-outline.js","sourceRoot":"","sources":["../../src/learning/markdown-outline.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* then picked a model within the winning provider.
|
|
17
17
|
*/
|
|
18
18
|
import { type ModelRegistryEntry } from './model-registry.js';
|
|
19
|
+
import { type PairEntitlement } from './pair-entitlement.js';
|
|
19
20
|
import { type CatalogProviderEntry } from '../inference/provider-catalog.js';
|
|
20
21
|
import { type ComplexityLevel } from './hybrid-router.js';
|
|
21
22
|
import type { ConfigManager } from '../config/manager.js';
|
|
@@ -46,6 +47,13 @@ export interface ModelCandidate {
|
|
|
46
47
|
};
|
|
47
48
|
/** Human-readable explanation. */
|
|
48
49
|
reason: string;
|
|
50
|
+
/**
|
|
51
|
+
* Whether the router MAY call this pair — read from this pair's OWN registry
|
|
52
|
+
* row (see `learning/pair-entitlement.ts`). Scored dimensions rank a model;
|
|
53
|
+
* this one says whether the call can happen at all. Kept on the candidate so
|
|
54
|
+
* the pool can be ordered by it and so `model explain` can print it.
|
|
55
|
+
*/
|
|
56
|
+
entitlement?: PairEntitlement;
|
|
49
57
|
/** Registry entry for additional metadata. */
|
|
50
58
|
entry?: ModelRegistryEntry;
|
|
51
59
|
/** Catalog entry for pricing/context. */
|
|
@@ -63,6 +71,30 @@ export interface TaskRequirements {
|
|
|
63
71
|
* Estimate task requirements from description and complexity.
|
|
64
72
|
*/
|
|
65
73
|
export declare function estimateTaskRequirements(taskDescription: string, complexity: ComplexityLevel, estimatedInputTokens?: number): TaskRequirements;
|
|
74
|
+
/**
|
|
75
|
+
* P6 (fix_model_routing) — POOL HYGIENE: could this provider really serve this
|
|
76
|
+
* model id?
|
|
77
|
+
*
|
|
78
|
+
* The registry can hold pairs that are syntactically fine and physically
|
|
79
|
+
* impossible, and a `verified` status on one of them is worse than useless — it
|
|
80
|
+
* spends a fallback slot, a round trip, and (as an "eligible model") credibility
|
|
81
|
+
* on a call that cannot succeed. Observed on disk: `gemini/qwen2.5:0.5b` and
|
|
82
|
+
* `groq/wire-stub-model` marked verified.
|
|
83
|
+
*
|
|
84
|
+
* Deliberately CONSERVATIVE — only two rules, both of which are decidable from
|
|
85
|
+
* the id alone:
|
|
86
|
+
*
|
|
87
|
+
* 1. An Ollama-style TAGGED id (`name:tag`) is a LOCAL runner's naming
|
|
88
|
+
* scheme. A hosted provider does not serve `qwen2.5:0.5b`; the `:tag` form
|
|
89
|
+
* belongs to the local-ops providers (see KEYLESS_PROVIDERS).
|
|
90
|
+
* 2. Stub/fixture ids (`wire-stub-model`, `test-…`, `…-stub`) come from test
|
|
91
|
+
* harnesses and must never be routed to.
|
|
92
|
+
*
|
|
93
|
+
* Anything needing a catalog to adjudicate (a vendor that does not serve a
|
|
94
|
+
* family) is NOT guessed at here: a wrong exclusion silently removes a working
|
|
95
|
+
* model, which is the more expensive mistake.
|
|
96
|
+
*/
|
|
97
|
+
export declare function isPairPlausible(provider: string, model: string): boolean;
|
|
66
98
|
/**
|
|
67
99
|
* Build the full model candidate list across all providers.
|
|
68
100
|
* This is the core of model-first routing: instead of scoring providers,
|
|
@@ -87,7 +119,7 @@ export declare function pickBestModelCandidate(taskDescription: string, complexi
|
|
|
87
119
|
* pairs + non-chat models excluded) — the report can never disagree with what
|
|
88
120
|
* routing would actually consider.
|
|
89
121
|
*/
|
|
90
|
-
export declare function countEligibleModels(allowedProviders?: string[]): {
|
|
122
|
+
export declare function countEligibleModels(allowedProviders?: string[], configManager?: ConfigManager): {
|
|
91
123
|
models: number;
|
|
92
124
|
providers: number;
|
|
93
125
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-first-router.d.ts","sourceRoot":"","sources":["../../src/learning/model-first-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAsB,KAAK,oBAAoB,EAAwB,MAAM,kCAAkC,CAAC;AACvH,OAAO,
|
|
1
|
+
{"version":3,"file":"model-first-router.d.ts","sourceRoot":"","sources":["../../src/learning/model-first-router.ts"],"names":[],"mappings":"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"}
|