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 @@
|
|
|
1
|
+
{"version":3,"file":"turn-feedback.d.ts","sourceRoot":"","sources":["../../src/learning/turn-feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAExF,kDAAkD;AAClD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,CAAC;AAE5D,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,uEAAuE;IACvE,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAa7D;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAMrD;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA0ChE;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,KAAK,SAAK,GAAG,KAAK,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC,CAcD"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn feedback — the user's verdict on a turn, recorded as the LABEL a quality
|
|
3
|
+
* signal is fit to.
|
|
4
|
+
*
|
|
5
|
+
* THE GAP THIS CLOSES. Every honesty signal the harness has is DERIVED: a tool
|
|
6
|
+
* ran, a plan step closed, a flag fired. None of them answers "was this any
|
|
7
|
+
* good?", and a quality score fit to derived signals would just be a second copy
|
|
8
|
+
* of the verification verdict. The missing input was a LABEL, and the only source
|
|
9
|
+
* of one is the person who asked.
|
|
10
|
+
*
|
|
11
|
+
* WHY THIS IS THE CHEAPEST SOURCE. The derived correction signal
|
|
12
|
+
* (`detectRegressionSignal`) yields NEGATIVES ONLY — silence is not acceptance, so
|
|
13
|
+
* it can never produce the positive class. An explicit verdict yields both, which
|
|
14
|
+
* is what makes a fitted `P(accepted | features)` possible at all.
|
|
15
|
+
*
|
|
16
|
+
* WHAT IT DOES NOT DO. It fits nothing and routes nothing. Recording the label
|
|
17
|
+
* and using it are separate decisions, and the second one waits until enough rows
|
|
18
|
+
* exist to mean anything (see `docs/DESIGN_CAPABILITY_BY_MEASUREMENT.md` §4.2).
|
|
19
|
+
*
|
|
20
|
+
* PROVENANCE IS PART OF THE LABEL. A verdict carries its `source` ('cli' |
|
|
21
|
+
* 'dashboard') so a future fit can weigh a human judgement against a derived one,
|
|
22
|
+
* and the corpus keeps `verdict: null` for "not judged" — never a fabricated
|
|
23
|
+
* `false`, because reading silence as acceptance would manufacture the positive
|
|
24
|
+
* class rather than measure it.
|
|
25
|
+
*/
|
|
26
|
+
import { getTrace, listTraces, recordTraceVerdict } from './reasoning-trace.js';
|
|
27
|
+
import { labelDeliverableByTrace } from './deliverable-corpus.js';
|
|
28
|
+
import { applyVerdictToRouter } from './verdict-routing.js';
|
|
29
|
+
/**
|
|
30
|
+
* The verdict words the CLI accepts. Deliberately narrow — `good`/`bad` are the
|
|
31
|
+
* friendly forms, `accepted`/`rejected` the precise ones. No synonyms beyond
|
|
32
|
+
* these: a parser that accepts eight spellings is a parser nobody can predict.
|
|
33
|
+
*/
|
|
34
|
+
export function parseVerdict(text) {
|
|
35
|
+
switch ((text || '').trim().toLowerCase()) {
|
|
36
|
+
case 'good':
|
|
37
|
+
case 'accepted':
|
|
38
|
+
case 'accept':
|
|
39
|
+
return 'accepted';
|
|
40
|
+
case 'bad':
|
|
41
|
+
case 'rejected':
|
|
42
|
+
case 'reject':
|
|
43
|
+
return 'rejected';
|
|
44
|
+
default:
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** The most recent trace, or null when nothing has been recorded yet. */
|
|
49
|
+
export function latestRateableTraceId() {
|
|
50
|
+
try {
|
|
51
|
+
return listTraces(1)[0]?.id ?? null;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Record the user's verdict on a turn: on the trace (the durable per-turn record)
|
|
59
|
+
* and, when the turn delivered an authored artifact, on that specific corpus row.
|
|
60
|
+
*
|
|
61
|
+
* `traceId` is optional — omitted, it means "the turn I just saw", which is the
|
|
62
|
+
* common case for the CLI. Both writes are best-effort and reported, never thrown:
|
|
63
|
+
* feedback must never break anything.
|
|
64
|
+
*/
|
|
65
|
+
export function rateTurn(input) {
|
|
66
|
+
const now = input.now ?? Date.now();
|
|
67
|
+
const traceId = input.traceId ?? latestRateableTraceId() ?? undefined;
|
|
68
|
+
if (!traceId) {
|
|
69
|
+
return { ok: false, error: 'No trace to rate yet — run a turn first.' };
|
|
70
|
+
}
|
|
71
|
+
const trace = getTrace(traceId);
|
|
72
|
+
if (!trace) {
|
|
73
|
+
return { ok: false, error: `Trace not found: ${traceId}` };
|
|
74
|
+
}
|
|
75
|
+
if (!recordTraceVerdict(traceId, input.verdict, input.source, now)) {
|
|
76
|
+
return { ok: false, error: `Could not record the verdict on ${traceId}.` };
|
|
77
|
+
}
|
|
78
|
+
let corpusLabeled = false;
|
|
79
|
+
try {
|
|
80
|
+
corpusLabeled = labelDeliverableByTrace(traceId, input.verdict, now);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// A corpus write is best-effort — the verdict on the trace is the durable half.
|
|
84
|
+
corpusLabeled = false;
|
|
85
|
+
}
|
|
86
|
+
// Bundle 36 — the same verdict also corrects the ROUTER, so an explicit
|
|
87
|
+
// rejection reaches the bandit the way the derived one already did. Keyed on
|
|
88
|
+
// the trace, so it is applied once however many times the turn is rated.
|
|
89
|
+
// Best-effort: the label is recorded whether or not routing could be corrected.
|
|
90
|
+
let router;
|
|
91
|
+
try {
|
|
92
|
+
router = applyVerdictToRouter(traceId, input.verdict);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
router = undefined;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
ok: true,
|
|
99
|
+
rated: {
|
|
100
|
+
traceId,
|
|
101
|
+
goal: trace.goal,
|
|
102
|
+
verdict: input.verdict,
|
|
103
|
+
source: input.source,
|
|
104
|
+
at: now,
|
|
105
|
+
corpusLabeled,
|
|
106
|
+
...(router ? { router } : {}),
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** Recent verdicts, most recent first, for a review surface. */
|
|
111
|
+
export function listTurnVerdicts(limit = 20) {
|
|
112
|
+
try {
|
|
113
|
+
return listTraces(limit)
|
|
114
|
+
.filter((t) => t.userVerdict)
|
|
115
|
+
.map((t) => ({
|
|
116
|
+
traceId: t.id,
|
|
117
|
+
goal: t.goal,
|
|
118
|
+
verdict: t.userVerdict.verdict,
|
|
119
|
+
source: t.userVerdict.source,
|
|
120
|
+
at: t.userVerdict.at,
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=turn-feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-feedback.js","sourceRoot":"","sources":["../../src/learning/turn-feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,17 @@
|
|
|
14
14
|
* trace cannot be talked into saying "done" about work the run did not verify.
|
|
15
15
|
*/
|
|
16
16
|
import type { Plan, PlanStepStatus } from '../tools/plan-store.js';
|
|
17
|
-
/**
|
|
18
|
-
|
|
17
|
+
/**
|
|
18
|
+
* The honesty verdict for a turn's outcome.
|
|
19
|
+
*
|
|
20
|
+
* `delivered-and-read-back` (2026-10-07, user decision) is the AUTHORED-DOCUMENT
|
|
21
|
+
* verdict and is deliberately NOT `verified`: for a document the meaningful check
|
|
22
|
+
* is that the file EXISTS at the promised path and was read back — which read-back
|
|
23
|
+
* confirms a file is present, NOT that a section has content. It is labelled so it
|
|
24
|
+
* can never read as a completeness proof, and the capability feeds treat it as
|
|
25
|
+
* NEUTRAL (neither reward nor penalty), because it proves existence, not quality.
|
|
26
|
+
*/
|
|
27
|
+
export type TurnVerification = 'verified' | 'unverified' | 'blocked' | 'not-applicable' | 'delivered-and-read-back';
|
|
19
28
|
/** The run's honesty flags, carried so the report can never hide one. */
|
|
20
29
|
export interface TurnReportFlags {
|
|
21
30
|
unverifiedActionClaim?: boolean;
|
|
@@ -25,6 +34,23 @@ export interface TurnReportFlags {
|
|
|
25
34
|
undeliveredArtifact?: boolean;
|
|
26
35
|
unfulfilledPromise?: boolean;
|
|
27
36
|
noActionTaken?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Bundle 19 — a file this turn WROTE declares that its own content was omitted.
|
|
39
|
+
* The artifact admits it is incomplete, so the turn cannot read as finished work.
|
|
40
|
+
*/
|
|
41
|
+
incompleteArtifactClaim?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Bundle 20 — the answer ASSERTS a file was written, and the turn wrote nothing.
|
|
44
|
+
* A function of the turn's own claim, so it is disclosed even when the ask was
|
|
45
|
+
* never recognised as an authored deliverable (see `unverifiedFileClaim`).
|
|
46
|
+
*/
|
|
47
|
+
unverifiedFileClaim?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Bundle 23 (item 13) — the ask named a magnitude and the written artifact is
|
|
50
|
+
* far short of it. A factual comparison of the file against the request, so it
|
|
51
|
+
* makes the turn `unverified` rather than reading as finished work.
|
|
52
|
+
*/
|
|
53
|
+
artifactShortfall?: boolean;
|
|
28
54
|
}
|
|
29
55
|
/** One step, with the evidence that its status is honest. */
|
|
30
56
|
export interface TurnReportStep {
|
|
@@ -50,10 +76,53 @@ export interface TurnReport {
|
|
|
50
76
|
stepCounts: TurnReportStepCounts;
|
|
51
77
|
toolCalls: string[];
|
|
52
78
|
successfulToolCalls: string[];
|
|
79
|
+
/**
|
|
80
|
+
* Tools that were ATTEMPTED and did not succeed — a refusal, an unknown tool, a
|
|
81
|
+
* failed run. Derived as `toolCalls − successfulToolCalls`, so it costs no extra
|
|
82
|
+
* plumbing and cannot drift from either list.
|
|
83
|
+
*/
|
|
84
|
+
failedToolCalls: string[];
|
|
85
|
+
/**
|
|
86
|
+
* ACCURACY EVIDENCE (B2/B3 wiring) — did the turn's own CHECKS pass?
|
|
87
|
+
*
|
|
88
|
+
* `undefined` when NO verification tool ran, and that distinction is the whole
|
|
89
|
+
* reason this is tri-state rather than a boolean: "nobody checked" is not "the
|
|
90
|
+
* check failed". Booking the former as a failure would penalise a turn that was
|
|
91
|
+
* never asked to prove anything, which is the same kind of invented signal this
|
|
92
|
+
* programme exists to remove — a plain question and a failing test suite must not
|
|
93
|
+
* teach the router the same lesson.
|
|
94
|
+
*/
|
|
95
|
+
checksPassed?: boolean;
|
|
53
96
|
mutations: number;
|
|
54
97
|
changedPaths: string[];
|
|
55
98
|
verification: TurnVerification;
|
|
56
99
|
flags: TurnReportFlags;
|
|
100
|
+
/**
|
|
101
|
+
* E1 — decisions the run took ON THE USER'S BEHALF because nobody was
|
|
102
|
+
* reachable (an unattended `ask_user` default), one line each. Recorded
|
|
103
|
+
* evidence, never the model's narration: a turn may not read as a decision the
|
|
104
|
+
* user made when the harness made it for them.
|
|
105
|
+
*/
|
|
106
|
+
assumptions: string[];
|
|
107
|
+
/**
|
|
108
|
+
* C6 — what the turn COST, from the persisted cost ledger (tokens, USD, calls).
|
|
109
|
+
*
|
|
110
|
+
* The programme's measured run A spent **1,192,115 input tokens in 82 steps** and
|
|
111
|
+
* the turn reported none of it: the only economy figure anywhere was a session
|
|
112
|
+
* total, so a single expensive turn was invisible and the ratio that mattered
|
|
113
|
+
* (484 input tokens per output token) could not be seen at all. A cost you have
|
|
114
|
+
* to go and compute is a cost nobody watches.
|
|
115
|
+
*
|
|
116
|
+
* Read from the LEDGER, not from a counter: a continuation or a resumed turn runs
|
|
117
|
+
* in a fresh process, and only a timestamp window survives that. Absent when no
|
|
118
|
+
* call was recorded at all (a turn that never reached a provider has no cost to
|
|
119
|
+
* report — `0` would read as "it was free").
|
|
120
|
+
*/
|
|
121
|
+
cost?: {
|
|
122
|
+
usd: number;
|
|
123
|
+
tokens: number;
|
|
124
|
+
calls: number;
|
|
125
|
+
};
|
|
57
126
|
/** One deterministic sentence for the console/trace, or null when trivial. */
|
|
58
127
|
summary: string | null;
|
|
59
128
|
}
|
|
@@ -67,12 +136,45 @@ export interface BuildTurnReportInput {
|
|
|
67
136
|
/** Distinct files changed this turn (from the run trace). */
|
|
68
137
|
changedPaths?: readonly string[];
|
|
69
138
|
flags?: TurnReportFlags;
|
|
139
|
+
/** E1 — recorded decisions taken on the user's behalf (see TurnReport). */
|
|
140
|
+
assumptions?: readonly string[];
|
|
141
|
+
/** C6 — the turn's measured cost from the ledger (see `TurnReport.cost`). */
|
|
142
|
+
cost?: {
|
|
143
|
+
usd: number;
|
|
144
|
+
tokens: number;
|
|
145
|
+
calls: number;
|
|
146
|
+
};
|
|
70
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Bundle 21 — is this the authored-document read-back case?
|
|
150
|
+
*
|
|
151
|
+
* The ONE translation of "documents are verified by read-back", shared so the
|
|
152
|
+
* tool loop (which SETS `unverifiedEdit`) and the turn report (which DELIVERS the
|
|
153
|
+
* verdict) cannot drift: a file written and then READ BACK for an authored ask.
|
|
154
|
+
* The read must FOLLOW the write — reading an unrelated file is not evidence about
|
|
155
|
+
* this deliverable — and it is deliberately NOT generalised to code, where a
|
|
156
|
+
* read-back proves nothing about behaviour.
|
|
157
|
+
*/
|
|
158
|
+
export declare function isAuthoredReadBack(goal: string, successfulToolCalls: readonly string[]): boolean;
|
|
71
159
|
/**
|
|
72
160
|
* Build the report from recorded evidence. Never throws; unknown inputs are
|
|
73
161
|
* treated as absent rather than guessed.
|
|
74
162
|
*/
|
|
75
163
|
export declare function buildTurnReport(input: BuildTurnReportInput): TurnReport;
|
|
164
|
+
/**
|
|
165
|
+
* C6 — the spend at which a turn's cost is worth saying out loud on its own.
|
|
166
|
+
*
|
|
167
|
+
* A cent: below it, a chat answer's cost is noise; at or above it, the turn bought
|
|
168
|
+
* something real and the user should see the price without asking. Stated here
|
|
169
|
+
* rather than inline so the threshold is a decision, not a magic number.
|
|
170
|
+
*/
|
|
171
|
+
export declare const COST_NOTICE_USD = 0.01;
|
|
172
|
+
/** `$0.0042 / 12.3K tok (3 calls)` — the turn's measured spend, one line. */
|
|
173
|
+
export declare function formatCost(cost: {
|
|
174
|
+
usd: number;
|
|
175
|
+
tokens: number;
|
|
176
|
+
calls: number;
|
|
177
|
+
}): string;
|
|
76
178
|
/** A compact, human-readable close-out block for the console / chat surface. */
|
|
77
179
|
export declare function formatTurnReport(report: TurnReport): string;
|
|
78
180
|
//# sourceMappingURL=turn-report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-report.d.ts","sourceRoot":"","sources":["../../src/learning/turn-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"turn-report.d.ts","sourceRoot":"","sources":["../../src/learning/turn-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,10 +13,38 @@
|
|
|
13
13
|
* model's self-narration. That is the whole point: a report built from the
|
|
14
14
|
* trace cannot be talked into saying "done" about work the run did not verify.
|
|
15
15
|
*/
|
|
16
|
+
import { wantsAuthoredArtifact } from './deliverable-class.js';
|
|
16
17
|
/** Tools whose success is evidence that a change was OBSERVED. */
|
|
17
18
|
const VERIFICATION_TOOLS = new Set(['run_terminal', 'test', 'browser', 'run_cli', 'run_tests']);
|
|
18
19
|
/** Tools that MUTATE the workspace. */
|
|
19
20
|
const MUTATION_TOOLS = new Set(['write_file', 'edit_file', 'apply_patch', 'multi_edit']);
|
|
21
|
+
/**
|
|
22
|
+
* Tools that READ a file back. Only meaningful for the authored-document verdict
|
|
23
|
+
* below, where the run's own read of the file it wrote is the deliverable evidence.
|
|
24
|
+
* For CODE this is NOT verification (`VERIFICATION_TOOLS` decides that), which is
|
|
25
|
+
* why it is a separate set and never folded into `observed`.
|
|
26
|
+
*/
|
|
27
|
+
const READBACK_TOOLS = new Set(['read_file', 'open_file', 'view_file']);
|
|
28
|
+
/**
|
|
29
|
+
* The flags that mean a turn is NOT finished work, whatever else it did.
|
|
30
|
+
*
|
|
31
|
+
* `unverifiedEdit` is deliberately NOT here. For a CODE turn it stays a hard
|
|
32
|
+
* `unverified` (below); for an AUTHORED DOCUMENT the read-back IS the meaningful
|
|
33
|
+
* check, so the flag is demoted to the `delivered-and-read-back` verdict instead of
|
|
34
|
+
* forcing `unverified` — that is the user's 2026-10-07 decision, and putting it here
|
|
35
|
+
* would silently override it.
|
|
36
|
+
*/
|
|
37
|
+
const UNFINISHED_FLAGS = [
|
|
38
|
+
'unverifiedActionClaim',
|
|
39
|
+
'unverifiedEditClaim',
|
|
40
|
+
'unverifiedBuildClaim',
|
|
41
|
+
'undeliveredArtifact',
|
|
42
|
+
'unfulfilledPromise',
|
|
43
|
+
'noActionTaken',
|
|
44
|
+
'incompleteArtifactClaim',
|
|
45
|
+
'unverifiedFileClaim',
|
|
46
|
+
'artifactShortfall',
|
|
47
|
+
];
|
|
20
48
|
function hasAnyFlag(flags) {
|
|
21
49
|
return Boolean(flags.unverifiedActionClaim ||
|
|
22
50
|
flags.unverifiedEdit ||
|
|
@@ -24,7 +52,35 @@ function hasAnyFlag(flags) {
|
|
|
24
52
|
flags.unverifiedBuildClaim ||
|
|
25
53
|
flags.undeliveredArtifact ||
|
|
26
54
|
flags.unfulfilledPromise ||
|
|
27
|
-
flags.noActionTaken
|
|
55
|
+
flags.noActionTaken ||
|
|
56
|
+
flags.incompleteArtifactClaim ||
|
|
57
|
+
flags.unverifiedFileClaim ||
|
|
58
|
+
flags.artifactShortfall);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Bundle 21 — is this the authored-document read-back case?
|
|
62
|
+
*
|
|
63
|
+
* The ONE translation of "documents are verified by read-back", shared so the
|
|
64
|
+
* tool loop (which SETS `unverifiedEdit`) and the turn report (which DELIVERS the
|
|
65
|
+
* verdict) cannot drift: a file written and then READ BACK for an authored ask.
|
|
66
|
+
* The read must FOLLOW the write — reading an unrelated file is not evidence about
|
|
67
|
+
* this deliverable — and it is deliberately NOT generalised to code, where a
|
|
68
|
+
* read-back proves nothing about behaviour.
|
|
69
|
+
*/
|
|
70
|
+
export function isAuthoredReadBack(goal, successfulToolCalls) {
|
|
71
|
+
let authoredAsk = false;
|
|
72
|
+
try {
|
|
73
|
+
authoredAsk = wantsAuthoredArtifact(goal ?? '');
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
authoredAsk = false;
|
|
77
|
+
}
|
|
78
|
+
if (!authoredAsk)
|
|
79
|
+
return false;
|
|
80
|
+
const lastMutationIdx = successfulToolCalls.reduce((acc, t, i) => (MUTATION_TOOLS.has(t) ? i : acc), -1);
|
|
81
|
+
if (lastMutationIdx < 0)
|
|
82
|
+
return false;
|
|
83
|
+
return successfulToolCalls.slice(lastMutationIdx + 1).some((t) => READBACK_TOOLS.has(t));
|
|
28
84
|
}
|
|
29
85
|
/**
|
|
30
86
|
* Build the report from recorded evidence. Never throws; unknown inputs are
|
|
@@ -35,6 +91,7 @@ export function buildTurnReport(input) {
|
|
|
35
91
|
const toolCalls = [...(input.toolCalls ?? [])];
|
|
36
92
|
const successfulToolCalls = [...(input.successfulToolCalls ?? [])];
|
|
37
93
|
const changedPaths = [...new Set(input.changedPaths ?? [])];
|
|
94
|
+
const assumptions = [...new Set(input.assumptions ?? [])];
|
|
38
95
|
const plan = input.plan ?? null;
|
|
39
96
|
const steps = plan
|
|
40
97
|
? plan.steps.map((s) => ({
|
|
@@ -54,13 +111,48 @@ export function buildTurnReport(input) {
|
|
|
54
111
|
const mutated = (input.mutations ?? 0) > 0 || successfulToolCalls.some((t) => MUTATION_TOOLS.has(t));
|
|
55
112
|
const observed = successfulToolCalls.some((t) => VERIFICATION_TOOLS.has(t));
|
|
56
113
|
const flagsSet = hasAnyFlag(flags);
|
|
114
|
+
// An authored-document ask whose file was written and then READ BACK — but only
|
|
115
|
+
// when the read followed the write (a read of an unrelated file is not evidence
|
|
116
|
+
// about this deliverable). See the verdict doc for why this is NOT `verified`.
|
|
117
|
+
const authoredReadBack = isAuthoredReadBack(input.goal ?? '', successfulToolCalls);
|
|
118
|
+
const unfinishedFlag = UNFINISHED_FLAGS.some((k) => Boolean(flags[k]));
|
|
119
|
+
// A tool counts as failed when it was attempted and is not in the success list.
|
|
120
|
+
// Multiset-safe: a call that appears once in each (ran twice, failed once) is a
|
|
121
|
+
// failure, because something the run tried DID fail.
|
|
122
|
+
const attemptedCounts = new Map();
|
|
123
|
+
for (const name of toolCalls)
|
|
124
|
+
attemptedCounts.set(name, (attemptedCounts.get(name) ?? 0) + 1);
|
|
125
|
+
for (const name of successfulToolCalls) {
|
|
126
|
+
attemptedCounts.set(name, (attemptedCounts.get(name) ?? 0) - 1);
|
|
127
|
+
}
|
|
128
|
+
const failedToolCalls = [];
|
|
129
|
+
for (const [name, remaining] of attemptedCounts) {
|
|
130
|
+
if (remaining > 0)
|
|
131
|
+
failedToolCalls.push(name);
|
|
132
|
+
}
|
|
133
|
+
// Only CHECKS decide this, and only when at least one ran (see `checksPassed`).
|
|
134
|
+
const checksRan = observed || failedToolCalls.some((t) => VERIFICATION_TOOLS.has(t));
|
|
135
|
+
const checksBroke = failedToolCalls.some((t) => VERIFICATION_TOOLS.has(t));
|
|
136
|
+
const checksPassed = checksRan ? observed && !checksBroke : undefined;
|
|
57
137
|
let verification;
|
|
58
138
|
if (stepCounts.blocked > 0) {
|
|
59
139
|
verification = 'blocked';
|
|
60
140
|
}
|
|
141
|
+
else if (unfinishedFlag) {
|
|
142
|
+
// A single UNFINISHED flag is enough: the run said something its evidence did
|
|
143
|
+
// not support (or did nothing at all), so the whole turn is UNVERIFIED rather
|
|
144
|
+
// than "mostly fine". A bare `unverifiedEdit` is deliberately excluded — see
|
|
145
|
+
// `UNFINISHED_FLAGS`.
|
|
146
|
+
verification = 'unverified';
|
|
147
|
+
}
|
|
148
|
+
else if (mutated && !observed && authoredReadBack) {
|
|
149
|
+
// The authored deliverable exists and was read back. This is delivery
|
|
150
|
+
// evidence, never a completeness check — hence its own label.
|
|
151
|
+
verification = 'delivered-and-read-back';
|
|
152
|
+
}
|
|
61
153
|
else if (flagsSet) {
|
|
62
|
-
//
|
|
63
|
-
// not
|
|
154
|
+
// The residual case: a bare `unverifiedEdit` (or any flag on a turn that did
|
|
155
|
+
// not mutate). It is still an unverified turn.
|
|
64
156
|
verification = 'unverified';
|
|
65
157
|
}
|
|
66
158
|
else if (mutated && !observed) {
|
|
@@ -84,7 +176,15 @@ export function buildTurnReport(input) {
|
|
|
84
176
|
}
|
|
85
177
|
}
|
|
86
178
|
}
|
|
87
|
-
const summary = buildSummary({
|
|
179
|
+
const summary = buildSummary({
|
|
180
|
+
planned: Boolean(plan),
|
|
181
|
+
stepCounts,
|
|
182
|
+
verification,
|
|
183
|
+
mutations: input.mutations ?? 0,
|
|
184
|
+
changedPaths,
|
|
185
|
+
assumptions,
|
|
186
|
+
cost: input.cost,
|
|
187
|
+
});
|
|
88
188
|
return {
|
|
89
189
|
goal: input.goal,
|
|
90
190
|
planned: Boolean(plan),
|
|
@@ -92,10 +192,16 @@ export function buildTurnReport(input) {
|
|
|
92
192
|
stepCounts,
|
|
93
193
|
toolCalls,
|
|
94
194
|
successfulToolCalls,
|
|
195
|
+
failedToolCalls,
|
|
196
|
+
...(checksPassed === undefined ? {} : { checksPassed }),
|
|
95
197
|
mutations: input.mutations ?? 0,
|
|
96
198
|
changedPaths,
|
|
97
199
|
verification,
|
|
98
200
|
flags,
|
|
201
|
+
assumptions,
|
|
202
|
+
// C6 — carried only when the ledger had something to report (absence is not
|
|
203
|
+
// "free", it is "nothing recorded": see the field's doc).
|
|
204
|
+
...(input.cost ? { cost: input.cost } : {}),
|
|
99
205
|
summary,
|
|
100
206
|
};
|
|
101
207
|
}
|
|
@@ -112,13 +218,46 @@ function buildSummary(input) {
|
|
|
112
218
|
else if (input.mutations > 0) {
|
|
113
219
|
parts.push(`${input.mutations} change(s)`);
|
|
114
220
|
}
|
|
221
|
+
// E1 — an assumption is always worth saying: it is a decision the USER did not
|
|
222
|
+
// make, and it must not be silent even on a turn that changed nothing.
|
|
223
|
+
if (input.assumptions.length > 0) {
|
|
224
|
+
parts.push(`${input.assumptions.length} decision(s) made for you`);
|
|
225
|
+
}
|
|
115
226
|
parts.push(`verification: ${input.verification}`);
|
|
116
227
|
// Nothing informative at all (a plain answer with no plan and no changes).
|
|
117
|
-
if (!input.planned &&
|
|
118
|
-
|
|
228
|
+
if (!input.planned &&
|
|
229
|
+
input.mutations === 0 &&
|
|
230
|
+
input.verification === 'not-applicable' &&
|
|
231
|
+
input.assumptions.length === 0) {
|
|
232
|
+
// C6 — except when the turn actually SPENT something. The cost is the one
|
|
233
|
+
// thing a trivial-looking turn can still be wrong about (a long prompt on an
|
|
234
|
+
// expensive model), and it is exactly the number run A had no way to see.
|
|
235
|
+
return input.cost && input.cost.usd >= COST_NOTICE_USD ? formatCost(input.cost) : null;
|
|
119
236
|
}
|
|
237
|
+
if (input.cost)
|
|
238
|
+
parts.push(formatCost(input.cost));
|
|
120
239
|
return parts.join(' · ');
|
|
121
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* C6 — the spend at which a turn's cost is worth saying out loud on its own.
|
|
243
|
+
*
|
|
244
|
+
* A cent: below it, a chat answer's cost is noise; at or above it, the turn bought
|
|
245
|
+
* something real and the user should see the price without asking. Stated here
|
|
246
|
+
* rather than inline so the threshold is a decision, not a magic number.
|
|
247
|
+
*/
|
|
248
|
+
export const COST_NOTICE_USD = 0.01;
|
|
249
|
+
/** `$0.0042 / 12.3K tok (3 calls)` — the turn's measured spend, one line. */
|
|
250
|
+
export function formatCost(cost) {
|
|
251
|
+
const usd = cost.usd >= 0.01 ? `$${cost.usd.toFixed(4)}` : `$${cost.usd.toFixed(6)}`;
|
|
252
|
+
// Millions are the scale that matters here: the measured run A burned 1,192,115
|
|
253
|
+
// input tokens, and `1192.1K` reads as noise where `1.19M` reads as a number.
|
|
254
|
+
const tokens = cost.tokens >= 1_000_000
|
|
255
|
+
? `${(cost.tokens / 1_000_000).toFixed(2)}M tok`
|
|
256
|
+
: cost.tokens >= 1000
|
|
257
|
+
? `${(cost.tokens / 1000).toFixed(1)}K tok`
|
|
258
|
+
: `${cost.tokens} tok`;
|
|
259
|
+
return `cost: ${usd} / ${tokens} (${cost.calls} call${cost.calls === 1 ? '' : 's'})`;
|
|
260
|
+
}
|
|
122
261
|
/** A compact, human-readable close-out block for the console / chat surface. */
|
|
123
262
|
export function formatTurnReport(report) {
|
|
124
263
|
const lines = [];
|
|
@@ -129,9 +268,25 @@ export function formatTurnReport(report) {
|
|
|
129
268
|
const icon = s.status === 'done' ? '✅' : s.status === 'running' ? '🔄' : s.status === 'blocked' ? '⛔' : '⬜';
|
|
130
269
|
lines.push(` ${icon} ${s.description}${s.note ? ` — ${s.note}` : ''}${s.evidence ? ` (${s.evidence})` : ''}`);
|
|
131
270
|
}
|
|
271
|
+
// E1 — disclose every decision taken on the user's behalf, from the recorded
|
|
272
|
+
// assumptions. Printed even when the report has no summary parts of its own.
|
|
273
|
+
if (report.assumptions.length > 0) {
|
|
274
|
+
lines.push(' 🤝 decided for you — nobody was reachable to answer:');
|
|
275
|
+
for (const a of report.assumptions.slice(0, 10))
|
|
276
|
+
lines.push(` • ${a}`);
|
|
277
|
+
if (report.assumptions.length > 10)
|
|
278
|
+
lines.push(` • …and ${report.assumptions.length - 10} more`);
|
|
279
|
+
}
|
|
280
|
+
// C6 — the price of the turn, from the ledger. Printed after the work, because
|
|
281
|
+
// "what it did" and "what it cost" are the two things a user judges a turn on.
|
|
282
|
+
if (report.cost)
|
|
283
|
+
lines.push(` 💰 ${formatCost(report.cost)}`);
|
|
132
284
|
if (report.verification === 'unverified') {
|
|
133
285
|
lines.push(' ⚠️ UNVERIFIED — a change or claim was not confirmed by any observation.');
|
|
134
286
|
}
|
|
287
|
+
else if (report.verification === 'delivered-and-read-back') {
|
|
288
|
+
lines.push(' 📄 DELIVERED-AND-READ-BACK — the document exists and was read back. This is NOT a completeness check.');
|
|
289
|
+
}
|
|
135
290
|
else if (report.verification === 'blocked') {
|
|
136
291
|
lines.push(' ⛔ BLOCKED — at least one step could not complete.');
|
|
137
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-report.js","sourceRoot":"","sources":["../../src/learning/turn-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"turn-report.js","sourceRoot":"","sources":["../../src/learning/turn-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verdict → router: what an EXPLICIT user verdict does to model ROUTING.
|
|
3
|
+
*
|
|
4
|
+
* THE GAP THIS CLOSES. The derived correction signal (a regression reported in the
|
|
5
|
+
* user's next message) already reaches the router bandit — `chat.ts` calls
|
|
6
|
+
* `AutoModelRouter.recordUserRejection`, which applies the deferred
|
|
7
|
+
* `userAccepted: false` delta to the arm that served the turn. An EXPLICIT verdict
|
|
8
|
+
* (`nuvira rate bad`, the dashboard's 👎) did not: it recorded the label a quality
|
|
9
|
+
* fit reads and stopped there. So the clearest statement a user can make — "this
|
|
10
|
+
* turn was not what I wanted" — reached the dataset but never the router.
|
|
11
|
+
*
|
|
12
|
+
* This module is the bridge. It reads the trace the verdict names, recovers the arm
|
|
13
|
+
* the turn was learned under (provider/model/complexity + the task intent the
|
|
14
|
+
* router bucketed it by), and applies the SAME `α−δ / β+δ` the derived path uses —
|
|
15
|
+
* once per trace, deduped in the bandit itself (`recordExplicitVerdict`).
|
|
16
|
+
*
|
|
17
|
+
* WHAT IT DELIBERATELY DOES NOT DO.
|
|
18
|
+
* - It never applies an ACCEPTANCE to the bandit. A turn is recorded as its own
|
|
19
|
+
* outcome at the end of the turn (see `turnOutcomeObservation`); a 👍 adds no new
|
|
20
|
+
* observation, and inventing a second positive sample for it would be the same
|
|
21
|
+
* fabrication the label subsystem exists to avoid. The verdict is still stored —
|
|
22
|
+
* it is what the fitted quality model reads.
|
|
23
|
+
* - It never creates an arm. A rejection corrects one that already exists; a turn
|
|
24
|
+
* that was never routed (not auto, bandit off) has nothing to correct.
|
|
25
|
+
* - It is best-effort throughout. A missing trace, an unreadable config or a
|
|
26
|
+
* failed bandit write leaves the recorded label untouched and is reported, never
|
|
27
|
+
* thrown.
|
|
28
|
+
*/
|
|
29
|
+
/** What applying a verdict to the router did, for a caller to report honestly. */
|
|
30
|
+
export interface VerdictRoutingOutcome {
|
|
31
|
+
/** True when the verdict was processed (the delta may or may not have moved a prior). */
|
|
32
|
+
applied: boolean;
|
|
33
|
+
/** True when this exact trace had already been applied — nothing moved twice. */
|
|
34
|
+
alreadyApplied: boolean;
|
|
35
|
+
/** How many Beta priors (provider and/or model) the delta moved. */
|
|
36
|
+
moved: number;
|
|
37
|
+
provider?: string;
|
|
38
|
+
model?: string;
|
|
39
|
+
complexity?: string;
|
|
40
|
+
/** Why nothing applied, or what moved — always a human sentence. */
|
|
41
|
+
reason: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Apply the user's EXPLICIT verdict on `traceId` to the router bandit.
|
|
45
|
+
*
|
|
46
|
+
* `verdict === 'rejected'` is the only case that moves an arm — see the module
|
|
47
|
+
* header for why an acceptance does not. Every early return names its reason so
|
|
48
|
+
* the CLI can print the truth instead of a silent no-op.
|
|
49
|
+
*/
|
|
50
|
+
export declare function applyVerdictToRouter(traceId: string, verdict: 'accepted' | 'rejected'): VerdictRoutingOutcome;
|
|
51
|
+
//# sourceMappingURL=verdict-routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verdict-routing.d.ts","sourceRoot":"","sources":["../../src/learning/verdict-routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAQH,kFAAkF;AAClF,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,OAAO,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,cAAc,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;CAChB;AA0BD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,GAAG,UAAU,GAC/B,qBAAqB,CAwDvB"}
|