agent-nuvira 3.3.13 → 3.3.15
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 +603 -25
- 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/parity/drivers.d.ts.map +1 -1
- package/dist/parity/drivers.js +3 -0
- package/dist/parity/drivers.js.map +1 -1
- package/dist/parity/observation.d.ts +12 -0
- package/dist/parity/observation.d.ts.map +1 -1
- package/dist/parity/observation.js +14 -0
- package/dist/parity/observation.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/dist/agents/nvda-addon.d.ts +0 -14
- package/dist/agents/nvda-addon.js +0 -52
- package/dist/forwarded.d.ts +0 -2
- package/dist/forwarded.js +0 -2
- 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,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared mechanics for the JSON stores under `~/.nuvira/memory`: an advisory
|
|
3
|
+
* CROSS-PROCESS lock and an atomic write.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS (measured, 2026-10-07). Several long-lived processes share one
|
|
6
|
+
* memory dir — the dashboard, the gateway, the warmup daemon and any CLI run —
|
|
7
|
+
* and each holds a JSON store in memory and flushes the WHOLE map back on
|
|
8
|
+
* persist. Two consequences, both measured, neither theoretical:
|
|
9
|
+
*
|
|
10
|
+
* 1. LOST UPDATES. Two processes read the file, each learns something, each
|
|
11
|
+
* writes its own snapshot. The second write wins entirely, so the first
|
|
12
|
+
* process's learning is gone — on the registry this flipped a strict-pin
|
|
13
|
+
* verdict from `credit-exhausted` back to `unverified` between two runs of
|
|
14
|
+
* the same command.
|
|
15
|
+
* 2. TORN READS. A plain `writeFileSync` is not atomic, so a reader that
|
|
16
|
+
* catches the file mid-write parses a truncated document. Every store here
|
|
17
|
+
* catches that and returns an EMPTY state, which the next persist then
|
|
18
|
+
* writes back — turning one unlucky read into a wiped file.
|
|
19
|
+
*
|
|
20
|
+
* The lock closes (1) for whatever critical section the caller wraps; the atomic
|
|
21
|
+
* write closes (2) outright, and that one needs no cooperation from other
|
|
22
|
+
* processes. Both are deliberately synchronous, because every caller here is on
|
|
23
|
+
* a synchronous path that must never throw.
|
|
24
|
+
*/
|
|
25
|
+
import { closeSync, mkdirSync, openSync, renameSync, rmSync, statSync, writeFileSync, writeSync, } from 'node:fs';
|
|
26
|
+
import { dirname } from 'node:path';
|
|
27
|
+
export const DEFAULT_LOCK_TIMEOUT_MS = 2_000;
|
|
28
|
+
export const DEFAULT_LOCK_STALE_MS = 10_000;
|
|
29
|
+
export const DEFAULT_LOCK_RETRY_MS = 10;
|
|
30
|
+
/**
|
|
31
|
+
* Sleep without spinning. `Atomics.wait` is permitted on the Node main thread
|
|
32
|
+
* (unlike a browser's), so a contended lock costs no CPU; the busy loop is only
|
|
33
|
+
* a fallback for an engine without `SharedArrayBuffer`.
|
|
34
|
+
*/
|
|
35
|
+
function sleepSync(ms) {
|
|
36
|
+
if (ms <= 0)
|
|
37
|
+
return;
|
|
38
|
+
try {
|
|
39
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
const until = Date.now() + ms;
|
|
43
|
+
while (Date.now() < until) {
|
|
44
|
+
/* last resort */
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Try ONCE to take the lock. An exclusive create (`wx`) is the atomic primitive:
|
|
50
|
+
* exactly one caller can win it, everywhere, without a daemon.
|
|
51
|
+
*
|
|
52
|
+
* A lock older than `staleMs` is broken, because the alternative is a store that
|
|
53
|
+
* can never be written again after one process is killed mid-section. The
|
|
54
|
+
* holder's pid is written for diagnosis, not for correctness — pid reuse makes
|
|
55
|
+
* pid liveness an unsafe test, and the mtime is what decides.
|
|
56
|
+
*/
|
|
57
|
+
export function tryAcquireFileLock(lockPath, staleMs = DEFAULT_LOCK_STALE_MS) {
|
|
58
|
+
const take = () => {
|
|
59
|
+
try {
|
|
60
|
+
const fd = openSync(lockPath, 'wx');
|
|
61
|
+
try {
|
|
62
|
+
writeSync(fd, `${process.pid}\n`);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
/* the pid is diagnostics only */
|
|
66
|
+
}
|
|
67
|
+
closeSync(fd);
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
if (take())
|
|
75
|
+
return true;
|
|
76
|
+
// Someone holds it — break it only if it is too old to belong to a live call.
|
|
77
|
+
try {
|
|
78
|
+
if (Date.now() - statSync(lockPath).mtimeMs > staleMs) {
|
|
79
|
+
rmSync(lockPath, { force: true });
|
|
80
|
+
return take();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
/* lost the race to break it, or it vanished — either way, do not own it */
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
/** Release a lock this process holds. Best-effort: never throws. */
|
|
89
|
+
export function releaseFileLock(lockPath) {
|
|
90
|
+
try {
|
|
91
|
+
rmSync(lockPath, { force: true });
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
/* a lock left behind expires by `staleMs` */
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Run `fn` while holding `lockPath`, or — if the lock cannot be taken within
|
|
99
|
+
* `timeoutMs` — run it anyway and report `heldLock: false`.
|
|
100
|
+
*
|
|
101
|
+
* RUNNING ANYWAY IS THE POINT. Every caller here is a best-effort write on a
|
|
102
|
+
* routing path: refusing to persist because a lock is busy would trade a rare
|
|
103
|
+
* lost update for a certain lost learning. A contention timeout is a signal to
|
|
104
|
+
* the caller, not a failure.
|
|
105
|
+
*/
|
|
106
|
+
export function withFileLockSync(lockPath, fn, opts = {}) {
|
|
107
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS;
|
|
108
|
+
const staleMs = opts.staleMs ?? DEFAULT_LOCK_STALE_MS;
|
|
109
|
+
const retryMs = opts.retryMs ?? DEFAULT_LOCK_RETRY_MS;
|
|
110
|
+
try {
|
|
111
|
+
mkdirSync(dirname(lockPath), { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
/* the write itself will fail loudly enough if the dir is truly unusable */
|
|
115
|
+
}
|
|
116
|
+
const deadline = Date.now() + timeoutMs;
|
|
117
|
+
let heldLock = tryAcquireFileLock(lockPath, staleMs);
|
|
118
|
+
while (!heldLock && Date.now() < deadline) {
|
|
119
|
+
sleepSync(retryMs);
|
|
120
|
+
heldLock = tryAcquireFileLock(lockPath, staleMs);
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
return { value: fn(), heldLock };
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
if (heldLock)
|
|
127
|
+
releaseFileLock(lockPath);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
let atomicWriteSeq = 0;
|
|
131
|
+
/**
|
|
132
|
+
* Write `content` to `path` so that no reader can ever see a partial document:
|
|
133
|
+
* write a uniquely-named sibling, then `rename`.
|
|
134
|
+
*
|
|
135
|
+
* The unique name matters — a fixed `.tmp` lets two writers race on the temp
|
|
136
|
+
* file itself and publish each other's bytes. `rename` over an existing path is
|
|
137
|
+
* atomic on POSIX and on Windows (`MoveFileEx` with replace).
|
|
138
|
+
*/
|
|
139
|
+
export function writeFileAtomicSync(path, content) {
|
|
140
|
+
const tmp = `${path}.tmp-${process.pid}-${(atomicWriteSeq += 1)}`;
|
|
141
|
+
try {
|
|
142
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
143
|
+
writeFileSync(tmp, content, 'utf-8');
|
|
144
|
+
renameSync(tmp, path);
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
try {
|
|
148
|
+
rmSync(tmp, { force: true });
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
/* nothing to clean up */
|
|
152
|
+
}
|
|
153
|
+
throw err;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** Recursively sort object keys so two structurally equal values stringify identically. */
|
|
157
|
+
function sortForComparison(value) {
|
|
158
|
+
if (Array.isArray(value))
|
|
159
|
+
return value.map(sortForComparison);
|
|
160
|
+
if (value && typeof value === 'object') {
|
|
161
|
+
const out = {};
|
|
162
|
+
const src = value;
|
|
163
|
+
for (const key of Object.keys(src).sort())
|
|
164
|
+
out[key] = sortForComparison(src[key]);
|
|
165
|
+
return out;
|
|
166
|
+
}
|
|
167
|
+
return value;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Order-independent JSON for comparing two records. `JSON.stringify` depends on
|
|
171
|
+
* key insertion order, so two entries built by different code paths can be
|
|
172
|
+
* semantically identical and compare unequal — which would make a merge treat an
|
|
173
|
+
* untouched entry as a change and clobber a peer's learning.
|
|
174
|
+
*/
|
|
175
|
+
export function stableJson(value) {
|
|
176
|
+
return JSON.stringify(sortForComparison(value));
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=atomic-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-store.js","sourceRoot":"","sources":["../../src/utils/atomic-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is an executable on PATH? ONE implementation, shared.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS FILE EXISTS. Two copies of this function already existed —
|
|
5
|
+
* `tools/modality/shared.ts` and `enterprise/vault.ts` — with identical bodies;
|
|
6
|
+
* the modality one even documents itself as "mirrors vault.ts binaryOnPath". The
|
|
7
|
+
* capability layer needs a third caller (a requirement pre-flight), so the
|
|
8
|
+
* duplication is resolved here rather than tripled.
|
|
9
|
+
*
|
|
10
|
+
* WHY `which`/`where` RATHER THAN A PATH SCAN. The OS resolver already handles
|
|
11
|
+
* PATHEXT, shell shims and `.cmd` wrappers. A hand-rolled `existsSync` scan
|
|
12
|
+
* silently disagrees with what the shell will ACTUALLY run, which is the wrong
|
|
13
|
+
* answer for a check whose whole job is to predict whether a command will work.
|
|
14
|
+
*
|
|
15
|
+
* MEMOIZED. OS tool presence cannot change mid-process, and this is consulted on
|
|
16
|
+
* every `Vault.open` (which every ConfigManager construction triggers) and on
|
|
17
|
+
* every capability readiness check, so one spawn per tool per process is enough.
|
|
18
|
+
*/
|
|
19
|
+
/** True when `name` resolves on PATH. Never throws. */
|
|
20
|
+
export declare function binaryOnPath(name: string): boolean;
|
|
21
|
+
/** Which of `names` resolve on PATH. */
|
|
22
|
+
export declare function binariesOnPath(names: string[]): Record<string, boolean>;
|
|
23
|
+
/** Clear the memo — for test isolation, which is why it is exported. */
|
|
24
|
+
export declare function resetBinaryProbeCache(): void;
|
|
25
|
+
//# sourceMappingURL=binary-probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-probe.d.ts","sourceRoot":"","sources":["../../src/utils/binary-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAalD;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIvE;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is an executable on PATH? ONE implementation, shared.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS FILE EXISTS. Two copies of this function already existed —
|
|
5
|
+
* `tools/modality/shared.ts` and `enterprise/vault.ts` — with identical bodies;
|
|
6
|
+
* the modality one even documents itself as "mirrors vault.ts binaryOnPath". The
|
|
7
|
+
* capability layer needs a third caller (a requirement pre-flight), so the
|
|
8
|
+
* duplication is resolved here rather than tripled.
|
|
9
|
+
*
|
|
10
|
+
* WHY `which`/`where` RATHER THAN A PATH SCAN. The OS resolver already handles
|
|
11
|
+
* PATHEXT, shell shims and `.cmd` wrappers. A hand-rolled `existsSync` scan
|
|
12
|
+
* silently disagrees with what the shell will ACTUALLY run, which is the wrong
|
|
13
|
+
* answer for a check whose whole job is to predict whether a command will work.
|
|
14
|
+
*
|
|
15
|
+
* MEMOIZED. OS tool presence cannot change mid-process, and this is consulted on
|
|
16
|
+
* every `Vault.open` (which every ConfigManager construction triggers) and on
|
|
17
|
+
* every capability readiness check, so one spawn per tool per process is enough.
|
|
18
|
+
*/
|
|
19
|
+
import { execFileSync } from 'node:child_process';
|
|
20
|
+
const cache = new Map();
|
|
21
|
+
/** True when `name` resolves on PATH. Never throws. */
|
|
22
|
+
export function binaryOnPath(name) {
|
|
23
|
+
const cached = cache.get(name);
|
|
24
|
+
if (cached !== undefined)
|
|
25
|
+
return cached;
|
|
26
|
+
let found;
|
|
27
|
+
try {
|
|
28
|
+
execFileSync(process.platform === 'win32' ? 'where' : 'which', [name], { stdio: 'ignore' });
|
|
29
|
+
found = true;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
found = false;
|
|
33
|
+
}
|
|
34
|
+
cache.set(name, found);
|
|
35
|
+
return found;
|
|
36
|
+
}
|
|
37
|
+
/** Which of `names` resolve on PATH. */
|
|
38
|
+
export function binariesOnPath(names) {
|
|
39
|
+
const out = {};
|
|
40
|
+
for (const n of names)
|
|
41
|
+
out[n] = binaryOnPath(n);
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
/** Clear the memo — for test isolation, which is why it is exported. */
|
|
45
|
+
export function resetBinaryProbeCache() {
|
|
46
|
+
cache.clear();
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=binary-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-probe.js","sourceRoot":"","sources":["../../src/utils/binary-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEzC,uDAAuD;AACvD,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5F,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,cAAc,CAAC,KAAe;IAC5C,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,qBAAqB;IACnC,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path rules shared by the SURFACES that resolve a workspace (the dashboard's
|
|
3
|
+
* chat server) and the TOOLS that must respect one (the tool registry's
|
|
4
|
+
* `ask_user`, which adopts a folder the user names in a reply).
|
|
5
|
+
*
|
|
6
|
+
* It lives in `utils/` rather than next to either user because it has two, and
|
|
7
|
+
* a tool importing the dashboard would invert the dependency: `src/tools` is
|
|
8
|
+
* driven by the CLI, the SDK and the child agent too, none of which are the
|
|
9
|
+
* dashboard. The rules are pure string/filesystem questions, so a shared,
|
|
10
|
+
* dependency-free home is the honest one.
|
|
11
|
+
*
|
|
12
|
+
* See the Cluster G write-up in `docs/PLAN_MODEL_ROUTING_PARITY.md` for the
|
|
13
|
+
* measured failures these answer.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* True when `p` exists and is a directory something can actually run in.
|
|
17
|
+
*
|
|
18
|
+
* The exists+isDirectory pair is deliberate: a configured path that has since
|
|
19
|
+
* been deleted, or one that points at a FILE, is not a workspace, and treating
|
|
20
|
+
* it as one is how a turn ends up scoped to nothing and reporting success.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isUsableDirectory(p: string | undefined): p is string;
|
|
23
|
+
/**
|
|
24
|
+
* Expand `~` and make the path absolute. Returns undefined for anything that is
|
|
25
|
+
* not a path we can act on: empty, a URL, or a RELATIVE path.
|
|
26
|
+
*
|
|
27
|
+
* A relative path is rejected on purpose and is the important case. Resolving
|
|
28
|
+
* it would require a base directory, and the only basis for choosing one is the
|
|
29
|
+
* process's own cwd — which is exactly the guess that produced the reported
|
|
30
|
+
* "it went to kuttaaddon": the dashboard was started from the home folder and
|
|
31
|
+
* read a checkout sitting there as the user's project.
|
|
32
|
+
*/
|
|
33
|
+
export declare function normalizeWorkspacePath(raw: string): string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* The DIRECTORY the user named in their own message, if any.
|
|
36
|
+
*
|
|
37
|
+
* Deliberately narrow, and each restriction has a failure behind it:
|
|
38
|
+
* - ONLY an absolute path (or `~/…`) counts — see {@link normalizeWorkspacePath}.
|
|
39
|
+
* - The candidate must be an existing DIRECTORY. A path in a message is usually
|
|
40
|
+
* a FILE the user is talking about ("fix /Users/x/proj/src/app.ts"); adopting
|
|
41
|
+
* that file's folder would silently move the turn into a project the user
|
|
42
|
+
* merely mentioned.
|
|
43
|
+
* - Trailing sentence punctuation and wrapping quotes are trimmed, so
|
|
44
|
+
* "work in /Users/you/app." and '"/Users/you/app"' both resolve.
|
|
45
|
+
*
|
|
46
|
+
* With nothing else available, the user's own words do not get to relocate the
|
|
47
|
+
* turn by accident.
|
|
48
|
+
*/
|
|
49
|
+
export declare function directoryFromMessage(message: string | undefined): string | undefined;
|
|
50
|
+
//# sourceMappingURL=workspace-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-path.d.ts","sourceRoot":"","sources":["../../src/utils/workspace-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,IAAI,MAAM,CAOpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMtE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAYpF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path rules shared by the SURFACES that resolve a workspace (the dashboard's
|
|
3
|
+
* chat server) and the TOOLS that must respect one (the tool registry's
|
|
4
|
+
* `ask_user`, which adopts a folder the user names in a reply).
|
|
5
|
+
*
|
|
6
|
+
* It lives in `utils/` rather than next to either user because it has two, and
|
|
7
|
+
* a tool importing the dashboard would invert the dependency: `src/tools` is
|
|
8
|
+
* driven by the CLI, the SDK and the child agent too, none of which are the
|
|
9
|
+
* dashboard. The rules are pure string/filesystem questions, so a shared,
|
|
10
|
+
* dependency-free home is the honest one.
|
|
11
|
+
*
|
|
12
|
+
* See the Cluster G write-up in `docs/PLAN_MODEL_ROUTING_PARITY.md` for the
|
|
13
|
+
* measured failures these answer.
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, statSync } from 'node:fs';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
18
|
+
/**
|
|
19
|
+
* True when `p` exists and is a directory something can actually run in.
|
|
20
|
+
*
|
|
21
|
+
* The exists+isDirectory pair is deliberate: a configured path that has since
|
|
22
|
+
* been deleted, or one that points at a FILE, is not a workspace, and treating
|
|
23
|
+
* it as one is how a turn ends up scoped to nothing and reporting success.
|
|
24
|
+
*/
|
|
25
|
+
export function isUsableDirectory(p) {
|
|
26
|
+
if (typeof p !== 'string' || !p.trim())
|
|
27
|
+
return false;
|
|
28
|
+
try {
|
|
29
|
+
return existsSync(p) && statSync(p).isDirectory();
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Expand `~` and make the path absolute. Returns undefined for anything that is
|
|
37
|
+
* not a path we can act on: empty, a URL, or a RELATIVE path.
|
|
38
|
+
*
|
|
39
|
+
* A relative path is rejected on purpose and is the important case. Resolving
|
|
40
|
+
* it would require a base directory, and the only basis for choosing one is the
|
|
41
|
+
* process's own cwd — which is exactly the guess that produced the reported
|
|
42
|
+
* "it went to kuttaaddon": the dashboard was started from the home folder and
|
|
43
|
+
* read a checkout sitting there as the user's project.
|
|
44
|
+
*/
|
|
45
|
+
export function normalizeWorkspacePath(raw) {
|
|
46
|
+
const t = raw.trim().replace(/^["'`]+|["'`]+$/g, '');
|
|
47
|
+
if (!t || /^[a-z][a-z0-9+.-]*:\/\//i.test(t))
|
|
48
|
+
return undefined;
|
|
49
|
+
if (t === '~')
|
|
50
|
+
return resolve(homedir());
|
|
51
|
+
if (t.startsWith('~/') || t.startsWith('~\\'))
|
|
52
|
+
return resolve(join(homedir(), t.slice(2)));
|
|
53
|
+
return isAbsolute(t) ? resolve(t) : undefined;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The DIRECTORY the user named in their own message, if any.
|
|
57
|
+
*
|
|
58
|
+
* Deliberately narrow, and each restriction has a failure behind it:
|
|
59
|
+
* - ONLY an absolute path (or `~/…`) counts — see {@link normalizeWorkspacePath}.
|
|
60
|
+
* - The candidate must be an existing DIRECTORY. A path in a message is usually
|
|
61
|
+
* a FILE the user is talking about ("fix /Users/x/proj/src/app.ts"); adopting
|
|
62
|
+
* that file's folder would silently move the turn into a project the user
|
|
63
|
+
* merely mentioned.
|
|
64
|
+
* - Trailing sentence punctuation and wrapping quotes are trimmed, so
|
|
65
|
+
* "work in /Users/you/app." and '"/Users/you/app"' both resolve.
|
|
66
|
+
*
|
|
67
|
+
* With nothing else available, the user's own words do not get to relocate the
|
|
68
|
+
* turn by accident.
|
|
69
|
+
*/
|
|
70
|
+
export function directoryFromMessage(message) {
|
|
71
|
+
if (typeof message !== 'string' || !message)
|
|
72
|
+
return undefined;
|
|
73
|
+
// Path-ish tokens: start at `~`, `/`, or a drive letter; stop at whitespace
|
|
74
|
+
// and at the delimiters that end a sentence, a clause or an inline-code span.
|
|
75
|
+
const candidates = message.match(/(?:~[\\/]|\/|[A-Za-z]:[\\/])[^\s"'`<>|]*/g) ?? [];
|
|
76
|
+
for (const raw of candidates) {
|
|
77
|
+
const cleaned = raw.replace(/[.,;:!?)\]}]+$/, '');
|
|
78
|
+
if (!cleaned)
|
|
79
|
+
continue;
|
|
80
|
+
const abs = normalizeWorkspacePath(cleaned);
|
|
81
|
+
if (abs && isUsableDirectory(abs))
|
|
82
|
+
return abs;
|
|
83
|
+
}
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=workspace-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-path.js","sourceRoot":"","sources":["../../src/utils/workspace-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAqB;IACrD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/D,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA2B;IAC9D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC9D,4EAA4E;IAC5E,8EAA8E;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,IAAI,EAAE,CAAC;IACpF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAChD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -39,6 +39,12 @@ export interface ChatEngine {
|
|
|
39
39
|
projectContext?: string;
|
|
40
40
|
/** P4 — attached project dir; the engine recalls its sessions + facts. */
|
|
41
41
|
projectPath?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Cluster G — this turn has NO workspace. Carried into the tool context so
|
|
44
|
+
* a write asks WHERE the file goes rather than dropping it in the
|
|
45
|
+
* dashboard process's own cwd (see `unscopedWriteRefusal`).
|
|
46
|
+
*/
|
|
47
|
+
unscopedWorkspace?: boolean;
|
|
42
48
|
/**
|
|
43
49
|
* Session 3 — channel/format POLICY merged into the STABLE (system)
|
|
44
50
|
* layer instead of being re-injected into every user turn. The gateway
|
|
@@ -532,6 +538,8 @@ export declare class ChatConsole {
|
|
|
532
538
|
model?: string;
|
|
533
539
|
projectContext?: string;
|
|
534
540
|
projectPath?: string;
|
|
541
|
+
/** Cluster G — no workspace for this turn: writes must ask where. */
|
|
542
|
+
unscopedWorkspace?: boolean;
|
|
535
543
|
attachments?: ChatAttachment[];
|
|
536
544
|
recordTurn?: boolean;
|
|
537
545
|
/** WS1 — a finding was recorded this turn, with the gate's verdict. */
|
|
@@ -582,6 +590,22 @@ export declare class ChatConsole {
|
|
|
582
590
|
private planStoreFor;
|
|
583
591
|
/** Drop a session's in-memory AND on-disk plan (new conversation / delete). */
|
|
584
592
|
private clearPlan;
|
|
593
|
+
/**
|
|
594
|
+
* The live session grants across this process's sessions (Bundle 37a).
|
|
595
|
+
*
|
|
596
|
+
* The grant is keyed to the session's plan store, so the console — which owns
|
|
597
|
+
* every session's store — is the one place that can see them all. A session
|
|
598
|
+
* with no grant, or an expired one, simply does not appear (an expired grant
|
|
599
|
+
* must never be shown as live).
|
|
600
|
+
*/
|
|
601
|
+
listSessionGrants(): Array<{
|
|
602
|
+
sessionId: string;
|
|
603
|
+
categories: string[];
|
|
604
|
+
grantedAt: number;
|
|
605
|
+
expiresAt: number;
|
|
606
|
+
}>;
|
|
607
|
+
/** End a session's grant — the user asked to be asked again (Bundle 37a). */
|
|
608
|
+
revokeSessionGrant(sessionId: string): boolean;
|
|
585
609
|
/** Forget a session's history (new conversation) + drop its pending questions. */
|
|
586
610
|
reset(sessionId: string): void;
|
|
587
611
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-console.d.ts","sourceRoot":"","sources":["../../src/web-dashboard/chat-console.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAA2C,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAM9G,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAEhC,yCAAyC;AACzC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACzB,UAAU,CACR,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACnD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC;YAAE,MAAM,EAAE,OAAO,CAAC;YAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClJ,gEAAgE;QAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACpC,+EAA+E;QAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,0EAA0E;QAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB;;;;WAIG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB;;;;WAIG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB;;;;WAIG;QACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QAClC;;;;WAIG;QACH,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,4EAA4E;QAC5E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAAC,EAAE,CAAC,EAAE,OAAO,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;QAC5L;;;;;;WAMG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,sFAAsF;QACtF,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,kFAAkF;QAClF,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1B,sEAAsE;QACtE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;QAChD,qEAAqE;QACrE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,sBAAsB,EAAE,cAAc,KAAK,IAAI,CAAC;QAC7E,yEAAyE;QACzE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,wBAAwB,EAAE,iBAAiB,KAAK,IAAI,CAAC;QACrF,uEAAuE;QACvE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,yBAAyB,EAAE,WAAW,KAAK,IAAI,CAAC;QAC7E;;;;;WAKG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB;;;;;WAKG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,2EAA2E;QAC3E,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,KAAK,IAAI,CAAC;QAClH,0EAA0E;QAC1E,SAAS,CAAC,EAAE,aAAa,CAAC;QAC1B,iGAAiG;QACjG,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YACrD,6EAA6E;YAC7E,SAAS,CAAC,CAAC,GAAG,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1G,4EAA4E;YAC5E,aAAa,CAAC,CAAC,GAAG,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,GAAG,MAAM,GAAG,SAAS,CAAC;YACjF,SAAS,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;gBAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;gBAAC,IAAI,EAAE,UAAU,CAAC;gBAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/J,MAAM,CAAC,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,CAAC;YACjD,gBAAgB,CAAC,CAAC,KAAK,EAAE;gBAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;gBAAC,IAAI,EAAE,UAAU,CAAC;gBAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YACtJ,SAAS,EAAE;gBAAE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG;oBAAE,QAAQ,EAAE,MAAM,CAAC;oBAAC,SAAS,EAAE,MAAM,CAAA;iBAAE,GAAG,IAAI,CAAA;aAAE,CAAC;SACxF,CAAC;KACH,GACA,OAAO,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,kBAAkB,EAAE,CAAC;QAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,2FAA2F;QAC3F,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,iFAAiF;QACjF,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,wEAAwE;QACxE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,0EAA0E;QAC1E,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,0EAA0E;QAC1E,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,2EAA2E;QAC3E,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,yEAAyE;QACzE,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf;;;;WAIG;QACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;QACvC;;;;WAIG;QACH,QAAQ,CAAC,EAAE,OAAO,yBAAyB,EAAE,WAAW,EAAE,CAAC;QAC3D,8EAA8E;QAC9E,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC;QAC3D,uEAAuE;QACvE,MAAM,CAAC,EAAE,OAAO,gCAAgC,EAAE,aAAa,CAAC;QAChE,yEAAyE;QACzE,UAAU,CAAC,EAAE,OAAO,4BAA4B,EAAE,UAAU,CAAC;QAC7D;;;;;;;;;WASG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAOD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,yBAAyB,EAAE,WAAW,EAAE,CAAC;IAC3D,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC;IAC3D,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,gCAAgC,EAAE,aAAa,CAAC;IAChE,mFAAmF;IACnF,UAAU,CAAC,EAAE,OAAO,4BAA4B,EAAE,UAAU,CAAC;IAC7D,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACjC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,2GAA2G;IAC3G,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;OAQG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAClC;AAED,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IACE,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACD;IACE,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IACtG,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE,qFAAqF;IACrF,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,gFAAgF;IAChF,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GACD;IACE,oDAAoD;IACpD,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE;;;;;;;;;;OAUG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,OAAO,yBAAyB,EAAE,WAAW,CAAC;CACxD,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,GACxD;IACE;;;;;;OAMG;IACH,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEN,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD,qBAAa,WAAW;IAsCV,OAAO,CAAC,QAAQ,CAAC,IAAI;IArCjC,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAmE;IACpF,gFAAgF;IAChF,OAAO,CAAC,gBAAgB,CAGpB;IACJ,8EAA8E;IAC9E,OAAO,CAAC,UAAU,CAAgC;IAClD;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAsC;IAC1D;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,0EAA0E;QAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,KAAK,IAAI,CAAC;gBAEkB,IAAI,GAAE,kBAAuB;IA2B1D,4EAA4E;IAC5E,OAAO,CAAC,aAAa,CAAC,CAA4C;IAElE,iGAAiG;IACjG,OAAO,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI;IAK7E,OAAO,CAAC,IAAI;IAUZ,oEAAoE;YACtD,YAAY;IAO1B,2DAA2D;IAC3D,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE;IAItC;;;OAGG;IACH,IAAI,IAAI,kBAAkB,EAAE;IAe5B;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAY1D,8EAA8E;IAC9E,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAUzE;;;;;;;;OAQG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAKhD,gFAAgF;IAChF,OAAO,CAAC,OAAO;IAcf,8DAA8D;IAC9D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIlC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAyB5E;;;;;;;;;;OAUG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAehE;;;;;;;;OAQG;IACG,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;QAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,uEAAuE;QACvE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,yBAAyB,EAAE,WAAW,KAAK,IAAI,CAAC;QAC7E;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,GACL,OAAO,CAAC,gBAAgB,CAAC;IA8U5B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAgBjC;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAenB;;;OAGG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,cAAmB,GAAG,OAAO;IAcpF;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IASpB,+EAA+E;IAC/E,OAAO,CAAC,SAAS;IAKjB,kFAAkF;IAClF,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAY/B;AAiFD,kFAAkF;AAClF,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
|
1
|
+
{"version":3,"file":"chat-console.d.ts","sourceRoot":"","sources":["../../src/web-dashboard/chat-console.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ import { dirname } from 'node:path';
|
|
|
19
19
|
import { isSuggestedFollowup, normalizeFollowups } from '../tools/followup-utils.js';
|
|
20
20
|
import { looksLikeReasoningLeakReply, stripLeadingReasoningTrace, stripToolCallArtifacts, } from '../inference/tool-call-utils.js';
|
|
21
21
|
import { createPersistentPlanStore, planFilePath, writePlanFile, } from '../tools/plan-store.js';
|
|
22
|
+
import { getSessionGrant, clearSessionGrant } from '../learning/session-grant.js';
|
|
22
23
|
/** Per-session per-message limits (the CLI has no hard cap; bound the server). */
|
|
23
24
|
const MAX_MESSAGE_LENGTH = 8000;
|
|
24
25
|
const DEFAULT_MAX_TURNS = 40;
|
|
@@ -369,6 +370,12 @@ export class ChatConsole {
|
|
|
369
370
|
// P4 — the attached project dir triggers the engine's per-turn recall
|
|
370
371
|
// of that project's prior sessions + facts.
|
|
371
372
|
...(opts.projectPath ? { projectPath: opts.projectPath } : {}),
|
|
373
|
+
// Cluster G — this turn has NO workspace (nothing attached, nothing
|
|
374
|
+
// named in the message, no configured default). The engine carries the
|
|
375
|
+
// flag into the tool context so a write asks WHERE to put the file
|
|
376
|
+
// instead of landing in the dashboard process's own cwd, which belongs
|
|
377
|
+
// to nobody and used to be invisible to the user.
|
|
378
|
+
...(opts.unscopedWorkspace ? { unscopedWorkspace: true } : {}),
|
|
372
379
|
// P4 — stream answer tokens to the GUI (the typewriter bubble).
|
|
373
380
|
onToken: (text) => emitTurn({ kind: 'token', text }),
|
|
374
381
|
history: history.map((h) => ({ role: h.role, content: h.content })),
|
|
@@ -686,6 +693,37 @@ export class ChatConsole {
|
|
|
686
693
|
this.planStores.delete(sessionId);
|
|
687
694
|
writePlanFile(planFilePath(sessionId), null);
|
|
688
695
|
}
|
|
696
|
+
/**
|
|
697
|
+
* The live session grants across this process's sessions (Bundle 37a).
|
|
698
|
+
*
|
|
699
|
+
* The grant is keyed to the session's plan store, so the console — which owns
|
|
700
|
+
* every session's store — is the one place that can see them all. A session
|
|
701
|
+
* with no grant, or an expired one, simply does not appear (an expired grant
|
|
702
|
+
* must never be shown as live).
|
|
703
|
+
*/
|
|
704
|
+
listSessionGrants() {
|
|
705
|
+
const out = [];
|
|
706
|
+
for (const [sessionId, store] of this.planStores) {
|
|
707
|
+
const grant = getSessionGrant(store);
|
|
708
|
+
if (grant) {
|
|
709
|
+
out.push({
|
|
710
|
+
sessionId,
|
|
711
|
+
categories: [...grant.categories],
|
|
712
|
+
grantedAt: grant.grantedAt,
|
|
713
|
+
expiresAt: grant.expiresAt,
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
return out.sort((a, b) => b.grantedAt - a.grantedAt);
|
|
718
|
+
}
|
|
719
|
+
/** End a session's grant — the user asked to be asked again (Bundle 37a). */
|
|
720
|
+
revokeSessionGrant(sessionId) {
|
|
721
|
+
const store = this.planStores.get(sessionId);
|
|
722
|
+
if (!store)
|
|
723
|
+
return false;
|
|
724
|
+
clearSessionGrant(store);
|
|
725
|
+
return true;
|
|
726
|
+
}
|
|
689
727
|
/** Forget a session's history (new conversation) + drop its pending questions. */
|
|
690
728
|
reset(sessionId) {
|
|
691
729
|
for (const [id, p] of this.pendingQuestions) {
|