@tea-agent/loop-agent 0.1.0-fe-test.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +114 -0
- package/CHANGELOG.md +2283 -0
- package/README.md +177 -0
- package/bin/agent-worker.js +22 -0
- package/bin/loop-agent.js +57 -0
- package/dist/adapters/aimax.js +91 -0
- package/dist/adapters/context.js +32 -0
- package/dist/adapters/index.js +29 -0
- package/dist/adapters/loop-agent.js +192 -0
- package/dist/adapters/types.js +1 -0
- package/dist/application/context-usage/skill-resolution-stats.js +263 -0
- package/dist/application/dag/args.js +486 -0
- package/dist/application/dag/generate-task-dag.js +408 -0
- package/dist/application/dag/report-dag.js +14 -0
- package/dist/application/dag/run-dag.js +109 -0
- package/dist/application/dag/validate-dag.js +166 -0
- package/dist/application/evaluation/alias.js +184 -0
- package/dist/application/evaluation/budget.js +192 -0
- package/dist/application/evaluation/campaign-hash.js +47 -0
- package/dist/application/evaluation/campaign-matrix.js +372 -0
- package/dist/application/evaluation/campaign-scorecard.js +135 -0
- package/dist/application/evaluation/campaign.js +370 -0
- package/dist/application/evaluation/candidate-hash.js +75 -0
- package/dist/application/evaluation/candidate.js +69 -0
- package/dist/application/evaluation/corpus-hash.js +38 -0
- package/dist/application/evaluation/corpus.js +56 -0
- package/dist/application/evaluation/experiment.js +294 -0
- package/dist/application/evaluation/ignition.js +198 -0
- package/dist/application/evaluation/integrity-audit.js +162 -0
- package/dist/application/evaluation/outer-loop.js +132 -0
- package/dist/application/evaluation/pi-cell-executor.js +39 -0
- package/dist/application/evaluation/private-verifier.js +46 -0
- package/dist/application/evaluation/promotion-policy.js +151 -0
- package/dist/application/evaluation/proposer.js +98 -0
- package/dist/application/evaluation/replay.js +289 -0
- package/dist/application/evaluation/types.js +652 -0
- package/dist/application/loop/run-action.js +19 -0
- package/dist/application/task-lifecycle/advance.js +1204 -0
- package/dist/application/task-lifecycle/gates.js +130 -0
- package/dist/application/task-lifecycle/index.js +7 -0
- package/dist/application/task-lifecycle/observe.js +424 -0
- package/dist/application/task-lifecycle/plan-transitions.js +251 -0
- package/dist/application/task-lifecycle/recommendations.js +180 -0
- package/dist/application/task-lifecycle/record.js +73 -0
- package/dist/application/task-lifecycle/types.js +1 -0
- package/dist/build-stamp.json +6 -0
- package/dist/cli/catalog.js +24 -0
- package/dist/cli/command-definitions.js +659 -0
- package/dist/cli/help.js +56 -0
- package/dist/cli/index.js +5 -0
- package/dist/cli/program.js +647 -0
- package/dist/cli/router.js +13 -0
- package/dist/cli/update/init-surface-notifier.js +167 -0
- package/dist/cli/update/notifier.js +117 -0
- package/dist/cli/update/npm-client.js +151 -0
- package/dist/cli/update/policy.js +92 -0
- package/dist/cli/update/runtime-activity.js +29 -0
- package/dist/cli/update/state.js +68 -0
- package/dist/cli-governance/active-residue-check.js +38 -0
- package/dist/cli.js +57 -0
- package/dist/commands/client-recovery.js +1373 -0
- package/dist/commands/closeout.js +13 -0
- package/dist/commands/coverage-audit.js +14 -0
- package/dist/commands/coverage-report.js +50 -0
- package/dist/commands/cursor-prompt.js +182 -0
- package/dist/commands/dag-approve.js +142 -0
- package/dist/commands/dag-final-verification.js +76 -0
- package/dist/commands/dag-init-hybrid.js +57 -0
- package/dist/commands/dag-reconcile-run.js +5 -0
- package/dist/commands/dag-reconcile-tasks.js +51 -0
- package/dist/commands/dag-reject.js +91 -0
- package/dist/commands/dag-report.js +76 -0
- package/dist/commands/dag-request-interrupt.js +20 -0
- package/dist/commands/dag-rerun-task.js +19 -0
- package/dist/commands/dag-rerun.js +111 -0
- package/dist/commands/dag-resume.js +35 -0
- package/dist/commands/dag-run-task.js +12 -0
- package/dist/commands/dag-validate.js +20 -0
- package/dist/commands/dag-workflow-compile.js +91 -0
- package/dist/commands/dag-workflow-plan.js +130 -0
- package/dist/commands/dag-workflow-validate.js +66 -0
- package/dist/commands/delegate.js +130 -0
- package/dist/commands/docs-archive.js +5 -0
- package/dist/commands/docs-audit.js +6 -0
- package/dist/commands/doctor.js +283 -0
- package/dist/commands/eval.js +1398 -0
- package/dist/commands/examples.js +90 -0
- package/dist/commands/goal.js +92 -0
- package/dist/commands/handoff-check.js +5 -0
- package/dist/commands/harvest.js +44 -0
- package/dist/commands/import-prd.js +81 -0
- package/dist/commands/init-upgrade.js +3085 -0
- package/dist/commands/init.js +3630 -0
- package/dist/commands/inspect.js +11 -0
- package/dist/commands/instructions.js +223 -0
- package/dist/commands/knowledge.js +162 -0
- package/dist/commands/loop-benchmark.js +72 -0
- package/dist/commands/loop.js +251 -0
- package/dist/commands/new-task.js +5 -0
- package/dist/commands/operator.js +44 -0
- package/dist/commands/pi-prompt.js +174 -0
- package/dist/commands/pi-reuse-benchmark.js +153 -0
- package/dist/commands/plan-list.js +5 -0
- package/dist/commands/plan.js +50 -0
- package/dist/commands/promote-run.js +29 -0
- package/dist/commands/reference-index.js +16 -0
- package/dist/commands/run-dag-progress.js +123 -0
- package/dist/commands/run-dag.js +22 -0
- package/dist/commands/spine.js +38 -0
- package/dist/commands/stats.js +113 -0
- package/dist/commands/status.js +57 -0
- package/dist/commands/study-init.js +192 -0
- package/dist/commands/task-advance.js +366 -0
- package/dist/commands/task-contract.js +269 -0
- package/dist/commands/task-source-prepare.js +479 -0
- package/dist/commands/task-status.js +133 -0
- package/dist/commands/workflow.js +259 -0
- package/dist/commands/worktree-create.js +31 -0
- package/dist/commands/worktree-list.js +5 -0
- package/dist/commands/worktree-remove.js +26 -0
- package/dist/executors/config-core.js +5 -0
- package/dist/executors/config.js +2 -0
- package/dist/executors/dag-pi-executor.js +1277 -0
- package/dist/executors/dag-static-executor.js +42 -0
- package/dist/executors/dag.js +3 -0
- package/dist/executors/index.js +6 -0
- package/dist/executors/model-routing.js +71 -0
- package/dist/executors/pi-defaults.js +9 -0
- package/dist/executors/pi-event-serializer.js +65 -0
- package/dist/executors/pi-executor.js +981 -0
- package/dist/executors/pi-playwright-cli-tool.js +1006 -0
- package/dist/executors/pi-prompt-transport.js +198 -0
- package/dist/executors/pi-reuse-benchmark.js +316 -0
- package/dist/executors/pi-runtime-reuse.js +29 -0
- package/dist/executors/pi-sdk-executor.js +722 -0
- package/dist/executors/pi-sdk.js +1 -0
- package/dist/executors/pi-writer-tool-policy.js +266 -0
- package/dist/executors/pi.js +3 -0
- package/dist/executors/playwright-cli-launcher.js +63 -0
- package/dist/executors/process-tree.js +33 -0
- package/dist/executors/shell-executor.js +3055 -0
- package/dist/executors/shell-presets.js +99 -0
- package/dist/executors/shell-verification.js +262 -0
- package/dist/executors/shell-write-guard.js +543 -0
- package/dist/executors/shell.js +3 -0
- package/dist/executors/static.js +1 -0
- package/dist/governance/checks.js +437 -0
- package/dist/governance/document-index-closure.js +164 -0
- package/dist/governance/exec-plans.js +549 -0
- package/dist/governance/harness.js +9 -0
- package/dist/governance/index.js +3 -0
- package/dist/governance/manifest-types.js +254 -0
- package/dist/governance/manifest.js +2 -0
- package/dist/governance/path-guard.js +69 -0
- package/dist/governance/path-guards.js +2 -0
- package/dist/governance/profiles.js +3 -0
- package/dist/governance/requirement-coverage.js +425 -0
- package/dist/governance/skill-safety.js +135 -0
- package/dist/governance/spine-audit.js +155 -0
- package/dist/infrastructure/evaluation/alias-store.js +199 -0
- package/dist/infrastructure/evaluation/campaign-store.js +154 -0
- package/dist/infrastructure/evaluation/candidate-store.js +439 -0
- package/dist/infrastructure/evaluation/corpus-store.js +181 -0
- package/dist/infrastructure/evaluation/experiment-store.js +124 -0
- package/dist/infrastructure/evaluation/ignition-store.js +82 -0
- package/dist/infrastructure/evaluation/private-verifier-store.js +145 -0
- package/dist/infrastructure/evaluation/proposer-store.js +78 -0
- package/dist/infrastructure/evaluation/store.js +40 -0
- package/dist/infrastructure/harness/active-residue-policy.js +73 -0
- package/dist/infrastructure/harness/artifact-store.js +72 -0
- package/dist/infrastructure/harness/atomic-write.js +50 -0
- package/dist/infrastructure/harness/completed-facts-guard.js +40 -0
- package/dist/infrastructure/harness/loop-action-store.js +20 -0
- package/dist/infrastructure/harness/loop-store.js +41 -0
- package/dist/infrastructure/harness/one-shot-run-store.js +94 -0
- package/dist/infrastructure/harness/task-store.js +108 -0
- package/dist/records/closeout.js +2 -0
- package/dist/records/harvest.js +215 -0
- package/dist/records/index.js +3 -0
- package/dist/records/one-shot-runs.js +386 -0
- package/dist/records/promotion.js +200 -0
- package/dist/shared/artifacts-core.js +107 -0
- package/dist/shared/artifacts.js +2 -0
- package/dist/shared/context-files.js +32 -0
- package/dist/shared/context.js +2 -0
- package/dist/shared/copy-dir.js +17 -0
- package/dist/shared/git-progress.js +172 -0
- package/dist/shared/index.js +5 -0
- package/dist/shared/logger.js +17 -0
- package/dist/shared/one-shot-prompt-args.js +98 -0
- package/dist/shared/openspec-spec.js +125 -0
- package/dist/shared/operator/capabilities.js +2659 -0
- package/dist/shared/operator/command-lifecycle.js +94 -0
- package/dist/shared/operator/envelope.js +59 -0
- package/dist/shared/operator/index.js +5 -0
- package/dist/shared/operator/registry.js +38 -0
- package/dist/shared/operator/types.js +5 -0
- package/dist/shared/output-truncation.js +37 -0
- package/dist/shared/package-metadata.js +530 -0
- package/dist/shared/path-refs.js +31 -0
- package/dist/shared/pi-retry-settings.js +23 -0
- package/dist/shared/playwright-cli-command-policy.js +41 -0
- package/dist/shared/preview.js +39 -0
- package/dist/shared/prompts.js +26 -0
- package/dist/shared/reference-context.js +264 -0
- package/dist/shared/resilient-git.js +133 -0
- package/dist/shared/runtime-activity.js +6 -0
- package/dist/shared/timeout-policy.js +24 -0
- package/dist/shared/timeout.js +1 -0
- package/dist/shared/types.js +5 -0
- package/dist/sidecars/cursor-prompt/executor.js +428 -0
- package/dist/sidecars/cursor-prompt/index.js +3 -0
- package/dist/sidecars/cursor-prompt/stream.js +121 -0
- package/dist/task/config-types.js +235 -0
- package/dist/task/config.js +2 -0
- package/dist/task/contract/adopt.js +166 -0
- package/dist/task/contract/apply.js +326 -0
- package/dist/task/contract/canonicalize.js +60 -0
- package/dist/task/contract/constants.js +30 -0
- package/dist/task/contract/diff.js +177 -0
- package/dist/task/contract/hash.js +42 -0
- package/dist/task/contract/import-revision.js +96 -0
- package/dist/task/contract/index.js +17 -0
- package/dist/task/contract/journal.js +155 -0
- package/dist/task/contract/lock.js +153 -0
- package/dist/task/contract/observe.js +296 -0
- package/dist/task/contract/paths.js +19 -0
- package/dist/task/contract/project.js +185 -0
- package/dist/task/contract/recover.js +312 -0
- package/dist/task/contract/request-ledger.js +37 -0
- package/dist/task/contract/schema.js +153 -0
- package/dist/task/contract/transaction.js +160 -0
- package/dist/task/contract/types.js +1 -0
- package/dist/task/contract/validate-draft.js +106 -0
- package/dist/task/dag-source-paths.js +50 -0
- package/dist/task/delegate.js +208 -0
- package/dist/task/frontend-preflight.js +131 -0
- package/dist/task/frontend-project-capability.js +570 -0
- package/dist/task/goal-audit.js +51 -0
- package/dist/task/goal-policy.js +8 -0
- package/dist/task/goal.js +3 -0
- package/dist/task/ids.js +1 -0
- package/dist/task/index.js +12 -0
- package/dist/task/lifecycle.js +1 -0
- package/dist/task/operator/capabilities.js +6 -0
- package/dist/task/operator/envelope.js +2 -0
- package/dist/task/operator/index.js +5 -0
- package/dist/task/operator/registry.js +2 -0
- package/dist/task/operator/types.js +1 -0
- package/dist/task/paths.js +1 -0
- package/dist/task/read-model.js +140 -0
- package/dist/task/runtime.js +708 -0
- package/dist/task/source-prepare/artifact-meta.js +137 -0
- package/dist/task/source-prepare/build-draft.js +232 -0
- package/dist/task/source-prepare/completeness.js +248 -0
- package/dist/task/source-prepare/index.js +10 -0
- package/dist/task/source-prepare/parse-intent.js +496 -0
- package/dist/task/source-prepare/path-policy.js +197 -0
- package/dist/task/source-prepare/placeholder-paths.js +77 -0
- package/dist/task/source-prepare/prepare.js +920 -0
- package/dist/task/source-prepare/reference-integrity.js +290 -0
- package/dist/task/source-prepare/semantic-intake.js +717 -0
- package/dist/task/source-prepare/types.js +7 -0
- package/dist/task/source-references.js +228 -0
- package/dist/task/source-state.js +1 -0
- package/dist/task/state.js +41 -0
- package/dist/task/subagent-guidance.js +1 -0
- package/dist/task/task-demand-routing.js +443 -0
- package/dist/task/workflow-state-types.js +92 -0
- package/dist/task/worktree-cleanup.js +140 -0
- package/dist/task/worktree.js +388 -0
- package/dist/verification/maven/cache.js +142 -0
- package/dist/verification/maven/index.js +120 -0
- package/dist/verification/maven/plan-commands.js +421 -0
- package/dist/verification/maven/pom-static.js +136 -0
- package/dist/verification/maven/scope-resolve.js +153 -0
- package/dist/verification/maven/stale.js +130 -0
- package/dist/verification/maven/types.js +23 -0
- package/dist/verification/maven/workspace-graph.js +322 -0
- package/dist/worker/cli.js +957 -0
- package/dist/worker/closeout/apply.js +73 -0
- package/dist/worker/closeout/preview.js +30 -0
- package/dist/worker/console/app-data.js +316 -0
- package/dist/worker/console/chat/artifact-card.js +30 -0
- package/dist/worker/console/chat/assistant-content.js +121 -0
- package/dist/worker/console/chat/chat-event-store.js +981 -0
- package/dist/worker/console/chat/chat-ui-policy.js +25 -0
- package/dist/worker/console/chat/compaction-errors.js +64 -0
- package/dist/worker/console/chat/composer-draft-store.js +45 -0
- package/dist/worker/console/chat/context-panel.js +54 -0
- package/dist/worker/console/chat/contract-apply-receipt-store.js +174 -0
- package/dist/worker/console/chat/explore-tools.js +299 -0
- package/dist/worker/console/chat/human-gate-card.js +45 -0
- package/dist/worker/console/chat/interview-adapter.js +149 -0
- package/dist/worker/console/chat/mcp-inventory.js +221 -0
- package/dist/worker/console/chat/model-resolver.js +215 -0
- package/dist/worker/console/chat/operation-card.js +92 -0
- package/dist/worker/console/chat/pi-console-config.js +376 -0
- package/dist/worker/console/chat/pi-runtime.js +2446 -0
- package/dist/worker/console/chat/repo-browser.js +140 -0
- package/dist/worker/console/chat/repo-walk.js +125 -0
- package/dist/worker/console/chat/resource-loader.js +59 -0
- package/dist/worker/console/chat/resource-preferences-store.js +152 -0
- package/dist/worker/console/chat/routes.js +3137 -0
- package/dist/worker/console/chat/runtime-context.js +102 -0
- package/dist/worker/console/chat/runtime-selection.js +96 -0
- package/dist/worker/console/chat/semantic-activity.js +489 -0
- package/dist/worker/console/chat/session-store.js +484 -0
- package/dist/worker/console/chat/shortcuts.js +217 -0
- package/dist/worker/console/chat/tool-adapter.js +131 -0
- package/dist/worker/console/chat/tool-preview.js +247 -0
- package/dist/worker/console/chat/tools.js +212 -0
- package/dist/worker/console/chat/turn-execution-registry.js +82 -0
- package/dist/worker/console/chat/turn-process.js +346 -0
- package/dist/worker/console/chat/usage.js +165 -0
- package/dist/worker/console/chat/workspace-landing.js +103 -0
- package/dist/worker/console/dag-confirmation.js +347 -0
- package/dist/worker/console/dag-execution-receipt.js +393 -0
- package/dist/worker/console/doctor.js +230 -0
- package/dist/worker/console/draft-store.js +158 -0
- package/dist/worker/console/harness-pi-model-matrix.js +137 -0
- package/dist/worker/console/human-gate-token.js +130 -0
- package/dist/worker/console/index.js +17 -0
- package/dist/worker/console/inspect-split.js +82 -0
- package/dist/worker/console/interview/assessment.js +67 -0
- package/dist/worker/console/interview/grill-me.js +277 -0
- package/dist/worker/console/interview/session.js +100 -0
- package/dist/worker/console/interview/tools.js +109 -0
- package/dist/worker/console/loopback.js +16 -0
- package/dist/worker/console/mutation-gate-receipt-store.js +184 -0
- package/dist/worker/console/night-aux-ticker.js +146 -0
- package/dist/worker/console/observe-health-match.js +179 -0
- package/dist/worker/console/observe-link.js +42 -0
- package/dist/worker/console/open-browser.js +134 -0
- package/dist/worker/console/operation-run-facts.js +190 -0
- package/dist/worker/console/operation-runner.js +353 -0
- package/dist/worker/console/operation-sse.js +184 -0
- package/dist/worker/console/operation-store.js +169 -0
- package/dist/worker/console/operation-wait.js +355 -0
- package/dist/worker/console/operator-actions.js +3768 -0
- package/dist/worker/console/operator-selection.js +105 -0
- package/dist/worker/console/operator-surface-health.js +24 -0
- package/dist/worker/console/operator-user-error.js +45 -0
- package/dist/worker/console/pi-readiness.js +288 -0
- package/dist/worker/console/prd-identity.js +102 -0
- package/dist/worker/console/prd-intake-bridge.js +441 -0
- package/dist/worker/console/prd-reference-discovery.js +124 -0
- package/dist/worker/console/recovery-cta.js +320 -0
- package/dist/worker/console/recovery-error-copy.js +198 -0
- package/dist/worker/console/recovery-selection.js +107 -0
- package/dist/worker/console/repo-fingerprint.js +35 -0
- package/dist/worker/console/resolve-dag-run-for-task.js +115 -0
- package/dist/worker/console/resource-loader.js +95 -0
- package/dist/worker/console/routes.js +475 -0
- package/dist/worker/console/security.js +170 -0
- package/dist/worker/console/server.js +357 -0
- package/dist/worker/console/sibling-controller.js +33 -0
- package/dist/worker/console/static/assets/abnfDiagram-N423BO3Z-BmOEx0gA.js +1 -0
- package/dist/worker/console/static/assets/arc-BGiVVe8b.js +1 -0
- package/dist/worker/console/static/assets/architectureDiagram-T3A2C74G-nDdu4rgJ.js +36 -0
- package/dist/worker/console/static/assets/blockDiagram-VBNYF7ZC-Bb5u0BWf.js +132 -0
- package/dist/worker/console/static/assets/c4Diagram-5PPSVZJV-BlhC0j94.js +10 -0
- package/dist/worker/console/static/assets/channel-Tl-FkUqr.js +1 -0
- package/dist/worker/console/static/assets/chunk-2GRJ4B5K-Ai8_qQXI.js +1 -0
- package/dist/worker/console/static/assets/chunk-2Q5K7J3B-B9gyCjqX.js +1 -0
- package/dist/worker/console/static/assets/chunk-5RXB4S5H-Bzbj3zGH.js +231 -0
- package/dist/worker/console/static/assets/chunk-5VM5RSS4-BT415PvT.js +15 -0
- package/dist/worker/console/static/assets/chunk-6Q2QTUOP-D_A5_5QL.js +88 -0
- package/dist/worker/console/static/assets/chunk-GF5L2VYU-srJkaP3f.js +206 -0
- package/dist/worker/console/static/assets/chunk-JWPE2WC7-UYGvEP4l.js +1 -0
- package/dist/worker/console/static/assets/chunk-KBJHAD2P-B8luBrrz.js +1 -0
- package/dist/worker/console/static/assets/chunk-RYQCIY6F-DN7wXZSq.js +1 -0
- package/dist/worker/console/static/assets/chunk-XXDRQBXY-DXKyMuKS.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-BaehtRk4.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-BaehtRk4.js +1 -0
- package/dist/worker/console/static/assets/cose-bilkent-JH36ORCC-dqvoynXj.js +1 -0
- package/dist/worker/console/static/assets/cynefin-VYW2F7L2--PcyL34A.js +166 -0
- package/dist/worker/console/static/assets/cynefinDiagram-MW4NZA55-DvWs_hTY.js +62 -0
- package/dist/worker/console/static/assets/cytoscape.esm-yzknjiTM.js +321 -0
- package/dist/worker/console/static/assets/dagre-VZM6K2ZE-DxeIxbyO.js +4 -0
- package/dist/worker/console/static/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/worker/console/static/assets/diagram-7IWD3JNH-DPCG61Of.js +30 -0
- package/dist/worker/console/static/assets/diagram-B4RE2ZJO-CmuU50-U.js +3 -0
- package/dist/worker/console/static/assets/diagram-LBJQPF4R-B61XLD_v.js +24 -0
- package/dist/worker/console/static/assets/diagram-Q27KOJAE-BB7HTRRY.js +24 -0
- package/dist/worker/console/static/assets/diagram-UB23O5K3-DvkboAIp.js +41 -0
- package/dist/worker/console/static/assets/ebnfDiagram-BXEA7PRR-BdJ_y1fL.js +1 -0
- package/dist/worker/console/static/assets/erDiagram-JOGREHBK-9bUBZTRi.js +85 -0
- package/dist/worker/console/static/assets/flowDiagram-UKHOOZJN-Dw4L4RBa.js +156 -0
- package/dist/worker/console/static/assets/ganttDiagram-PKOTCBZU-Jr82N_QP.js +292 -0
- package/dist/worker/console/static/assets/gitGraphDiagram-DS77QQ5N-DAz9wFLr.js +106 -0
- package/dist/worker/console/static/assets/graph-DOmOIIwC.js +1 -0
- package/dist/worker/console/static/assets/index-B7Y-0g3J.css +1 -0
- package/dist/worker/console/static/assets/index-DkCrqaYg.js +325 -0
- package/dist/worker/console/static/assets/infoDiagram-6WML65LV-CBB5Np7y.js +2 -0
- package/dist/worker/console/static/assets/init-Gi6I4Gst.js +1 -0
- package/dist/worker/console/static/assets/ishikawaDiagram-WSZJBQD7-D8IOp94y.js +70 -0
- package/dist/worker/console/static/assets/journeyDiagram-NVQOT4AX-Dgd3AHGG.js +139 -0
- package/dist/worker/console/static/assets/kanban-definition-27J2QSJJ-BmYOxLE9.js +89 -0
- package/dist/worker/console/static/assets/layout-D-LzfAck.js +1 -0
- package/dist/worker/console/static/assets/linear-DfYTEF6J.js +1 -0
- package/dist/worker/console/static/assets/map-DxJ2ADlA.js +1 -0
- package/dist/worker/console/static/assets/mermaid.core-BjuFPRqa.js +308 -0
- package/dist/worker/console/static/assets/mindmap-definition-FAOFIHXS-CLyUViGd.js +96 -0
- package/dist/worker/console/static/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/worker/console/static/assets/pegDiagram-VL7TDLO6-BvX2Di4-.js +1 -0
- package/dist/worker/console/static/assets/pieDiagram-7S7Q4E2Y-BFj0_OLv.js +39 -0
- package/dist/worker/console/static/assets/quadrantDiagram-CIZ2JOQS-BIUrD_hx.js +7 -0
- package/dist/worker/console/static/assets/railroadDiagram-AXF67PYL-CHBB48fj.js +1 -0
- package/dist/worker/console/static/assets/requirementDiagram-LRYGKXZP-sJrYw2Sf.js +84 -0
- package/dist/worker/console/static/assets/sankeyDiagram-W5VNT64P-BzHH6fPR.js +40 -0
- package/dist/worker/console/static/assets/sequenceDiagram-SI44F4Z6-7QCnelCt.js +162 -0
- package/dist/worker/console/static/assets/sizeCapture-X5ZJPWSS-sDYSxn72.js +1 -0
- package/dist/worker/console/static/assets/stateDiagram-OKZ733FA-XpiUdwzm.js +1 -0
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-eEhq2A8Y.js +1 -0
- package/dist/worker/console/static/assets/swimlanes-SLNWSIFB-DvqgNPzD.js +2 -0
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-la8AC7fo.js +8 -0
- package/dist/worker/console/static/assets/timeline-definition-Z64GVDOM-2TyOYNx0.js +120 -0
- package/dist/worker/console/static/assets/vennDiagram-T6HMQDX7-B-nM6wM2.js +34 -0
- package/dist/worker/console/static/assets/wardleyDiagram-T6FBY63Y-B86wPdbr.js +78 -0
- package/dist/worker/console/static/assets/xychartDiagram-ELKLHX3M-Dr1C4AQz.js +7 -0
- package/dist/worker/console/static/favicon.svg +37 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_AMS-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Main-Bold.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Main-Italic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Main-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Math-Italic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Script-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Size1-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Size2-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Size3-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Size4-Regular.woff2 +0 -0
- package/dist/worker/console/static/fonts/katex/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/dist/worker/console/static/index.html +15 -0
- package/dist/worker/console/static-src/app/console-types.js +184 -0
- package/dist/worker/console/static-src/app/useConsoleShell.js +101 -0
- package/dist/worker/console/static-src/app/useOperatorActions.js +324 -0
- package/dist/worker/console/static-src/app/usePrdImport.js +172 -0
- package/dist/worker/console/static-src/app/useRecoveryActions.js +289 -0
- package/dist/worker/console/static-src/app/useRecoveryConsole.js +425 -0
- package/dist/worker/console/static-src/app/useTaskWizard.js +296 -0
- package/dist/worker/console/static-src/chat-markdown-security.js +38 -0
- package/dist/worker/console/static-src/chat-view-types.js +2 -0
- package/dist/worker/console/static-src/night/night-types.js +24 -0
- package/dist/worker/console/static-src/night/useNightBoard.js +94 -0
- package/dist/worker/console/static-src/night/useNightWizard.js +171 -0
- package/dist/worker/console/static-src/night-prepare-result.js +118 -0
- package/dist/worker/console/static-src/operator-chat/activity-journey.js +125 -0
- package/dist/worker/console/static-src/operator-chat/activity-rail-presentation.js +73 -0
- package/dist/worker/console/static-src/operator-chat/activity-references.js +20 -0
- package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +420 -0
- package/dist/worker/console/static-src/operator-chat/format.js +71 -0
- package/dist/worker/console/static-src/operator-chat/landing-density.js +23 -0
- package/dist/worker/console/static-src/operator-chat/mutation-gate.js +45 -0
- package/dist/worker/console/static-src/operator-chat/refs.js +86 -0
- package/dist/worker/console/static-src/operator-chat/resource-auto-invocation.js +91 -0
- package/dist/worker/console/static-src/operator-chat/resource-diagnostics.js +204 -0
- package/dist/worker/console/static-src/operator-chat/runtime-snapshot-store.js +257 -0
- package/dist/worker/console/static-src/operator-chat/session-title-watcher.js +128 -0
- package/dist/worker/console/static-src/operator-chat/sidebar-split.js +90 -0
- package/dist/worker/console/static-src/operator-chat/slash-palette-layout.js +24 -0
- package/dist/worker/console/static-src/operator-chat/slash-palette-nav.js +141 -0
- package/dist/worker/console/static-src/operator-chat/spatial-overlay.js +38 -0
- package/dist/worker/console/static-src/operator-chat/tools-catalog.js +77 -0
- package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +690 -0
- package/dist/worker/console/static-src/operator-chat/turn-submission.js +158 -0
- package/dist/worker/console/static-src/operator-chat/types.js +1 -0
- package/dist/worker/console/static-src/operator-chat/useActivityRailTransition.js +59 -0
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +495 -0
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +780 -0
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +280 -0
- package/dist/worker/console/static-src/operator-chat/useComposer.js +257 -0
- package/dist/worker/console/static-src/operator-chat/useInterview.js +108 -0
- package/dist/worker/console/static-src/operator-chat/useOverlayFocus.js +84 -0
- package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +148 -0
- package/dist/worker/console/static-src/operator-chat/useRuntimeControls.js +358 -0
- package/dist/worker/console/static-src/operator-chat/useRuntimeSnapshot.js +196 -0
- package/dist/worker/console/static-src/operator-chat/useWorkspaceLayout.js +58 -0
- package/dist/worker/console/static-src/operator-chat/workspace-layout-mode.js +35 -0
- package/dist/worker/console/static-src/prd-file-import.js +218 -0
- package/dist/worker/console/vite.config.js +27 -0
- package/dist/worker/console/workflow-kinds.js +46 -0
- package/dist/worker/delivery/final-verification.js +302 -0
- package/dist/worker/delivery/git-transaction.js +497 -0
- package/dist/worker/delivery/package.js +537 -0
- package/dist/worker/delivery/verification-bundle.js +544 -0
- package/dist/worker/feature/acceptance-policy.js +227 -0
- package/dist/worker/feature/advance.js +301 -0
- package/dist/worker/feature/decision-loader.js +99 -0
- package/dist/worker/feature/discover.js +14 -0
- package/dist/worker/feature/doctor.js +223 -0
- package/dist/worker/feature/fullstack-validate.js +337 -0
- package/dist/worker/feature/next-action.js +140 -0
- package/dist/worker/feature/profile-schema.js +47 -0
- package/dist/worker/feature/ready-plan-projection.js +82 -0
- package/dist/worker/feature/reducer.js +137 -0
- package/dist/worker/feature/review.js +678 -0
- package/dist/worker/feature/run.js +390 -0
- package/dist/worker/feature/scaffold.js +812 -0
- package/dist/worker/feature/types.js +1 -0
- package/dist/worker/follow-up/approve.js +273 -0
- package/dist/worker/follow-up/factory.js +234 -0
- package/dist/worker/follow-up/paths.js +25 -0
- package/dist/worker/follow-up/policy.js +26 -0
- package/dist/worker/follow-up/schema.js +93 -0
- package/dist/worker/follow-up/store.js +96 -0
- package/dist/worker/loop-agent/command-result.js +1 -0
- package/dist/worker/loop-agent/controller-protocol.js +143 -0
- package/dist/worker/loop-agent/loop-agent-client.js +489 -0
- package/dist/worker/loop-agent/parse-json.js +14 -0
- package/dist/worker/materialize/harness-task-lifecycle-probe.js +126 -0
- package/dist/worker/materialize/harness-task-lineage.js +220 -0
- package/dist/worker/materialize/harness-task-materializer.js +648 -0
- package/dist/worker/metrics/projector.js +139 -0
- package/dist/worker/observability/dag-execution-trajectory.js +591 -0
- package/dist/worker/observability/event-history.js +216 -0
- package/dist/worker/observability/event-store.js +83 -0
- package/dist/worker/observability/events.js +79 -0
- package/dist/worker/observability/interrupt-eligibility.js +264 -0
- package/dist/worker/observability/progress-composite.js +34 -0
- package/dist/worker/observability/read-model.js +2499 -0
- package/dist/worker/observability/snapshot-store.js +43 -0
- package/dist/worker/observability/types.js +1 -0
- package/dist/worker/observe/dag-node-execution-output.js +180 -0
- package/dist/worker/observe/dag-run-artifacts.js +90 -0
- package/dist/worker/observe/health.js +58 -0
- package/dist/worker/observe/night-jobs.js +104 -0
- package/dist/worker/observe/node-input.js +441 -0
- package/dist/worker/observe/paths.js +174 -0
- package/dist/worker/observe/routes.js +1077 -0
- package/dist/worker/observe/server.js +117 -0
- package/dist/worker/observe/spec-evidence.js +398 -0
- package/dist/worker/observe/static/api.js +117 -0
- package/dist/worker/observe/static/app.js +169 -0
- package/dist/worker/observe/static/constants.js +182 -0
- package/dist/worker/observe/static/copy.js +67 -0
- package/dist/worker/observe/static/custom-select.js +567 -0
- package/dist/worker/observe/static/dag-edge-routing.js +368 -0
- package/dist/worker/observe/static/dag-helpers.js +161 -0
- package/dist/worker/observe/static/dag-history-labels.js +95 -0
- package/dist/worker/observe/static/dag-layout.d.ts +36 -0
- package/dist/worker/observe/static/dag-layout.js +163 -0
- package/dist/worker/observe/static/dag-model.js +145 -0
- package/dist/worker/observe/static/dom.js +220 -0
- package/dist/worker/observe/static/favicon.svg +37 -0
- package/dist/worker/observe/static/format-pool.d.ts +71 -0
- package/dist/worker/observe/static/format-pool.js +153 -0
- package/dist/worker/observe/static/format.js +347 -0
- package/dist/worker/observe/static/index.html +409 -0
- package/dist/worker/observe/static/kpi.js +78 -0
- package/dist/worker/observe/static/markdown-render.js +124 -0
- package/dist/worker/observe/static/operator-chrome.css +517 -0
- package/dist/worker/observe/static/operator-chrome.d.ts +83 -0
- package/dist/worker/observe/static/operator-chrome.js +623 -0
- package/dist/worker/observe/static/relations.js +133 -0
- package/dist/worker/observe/static/router.js +156 -0
- package/dist/worker/observe/static/run-processing.js +148 -0
- package/dist/worker/observe/static/shell-chrome.js +65 -0
- package/dist/worker/observe/static/state.js +496 -0
- package/dist/worker/observe/static/styles.css +3567 -0
- package/dist/worker/observe/static/views/batch.js +227 -0
- package/dist/worker/observe/static/views/dag-graph.js +508 -0
- package/dist/worker/observe/static/views/dag-inspector.js +1722 -0
- package/dist/worker/observe/static/views/dag-trajectory.js +313 -0
- package/dist/worker/observe/static/views/dag.js +483 -0
- package/dist/worker/observe/static/views/dags.js +877 -0
- package/dist/worker/observe/static/views/dashboard.js +747 -0
- package/dist/worker/observe/static/views/failures.js +143 -0
- package/dist/worker/observe/static/views/feature.js +492 -0
- package/dist/worker/observe/static/views/night.js +201 -0
- package/dist/worker/observe/static/views/pool.js +708 -0
- package/dist/worker/observe/static/views/run.js +453 -0
- package/dist/worker/observe/static/views/session-timeline.js +771 -0
- package/dist/worker/observe/static/views/shell.js +7 -0
- package/dist/worker/observe/static/views/task.js +315 -0
- package/dist/worker/observe/static/views/timeline.js +163 -0
- package/dist/worker/outcomes/adapters.js +153 -0
- package/dist/worker/outcomes/declared-artifacts.js +103 -0
- package/dist/worker/outcomes/evidence-tokens.js +29 -0
- package/dist/worker/outcomes/gate.js +40 -0
- package/dist/worker/outcomes/projector.js +227 -0
- package/dist/worker/outcomes/registry.js +1 -0
- package/dist/worker/outcomes/store.js +131 -0
- package/dist/worker/outcomes/types.js +79 -0
- package/dist/worker/pool/attempt-identity.js +41 -0
- package/dist/worker/pool/attempt-lease.js +184 -0
- package/dist/worker/pool/attempt-transition.js +210 -0
- package/dist/worker/pool/begin-attempt-with-lease.js +26 -0
- package/dist/worker/pool/begin-attempt.js +35 -0
- package/dist/worker/pool/doctor.js +165 -0
- package/dist/worker/pool/failure-routing.js +182 -0
- package/dist/worker/pool/migrate-state.js +303 -0
- package/dist/worker/pool/reconcile.js +285 -0
- package/dist/worker/pool/recovery-decision.js +163 -0
- package/dist/worker/pool/run-owner-store.js +126 -0
- package/dist/worker/pool/run-store.js +360 -0
- package/dist/worker/pool/runtime-reconcile-inventory.js +127 -0
- package/dist/worker/pool/state-projection.js +57 -0
- package/dist/worker/pool/types.js +17 -0
- package/dist/worker/pool/validation.js +144 -0
- package/dist/worker/preflight.js +157 -0
- package/dist/worker/profile-mapping.js +76 -0
- package/dist/worker/progress-reporter.js +63 -0
- package/dist/worker/report/morning-report.js +155 -0
- package/dist/worker/repos/repo-resolver.js +23 -0
- package/dist/worker/run-task/execute-prepared-task.js +178 -0
- package/dist/worker/run-task/run-task.js +912 -0
- package/dist/worker/runner/run-ready.js +561 -0
- package/dist/worker/runner/single-task-attempt.js +176 -0
- package/dist/worker/scheduler/admission.js +547 -0
- package/dist/worker/scheduler/auto-followup.js +99 -0
- package/dist/worker/scheduler/cli.js +644 -0
- package/dist/worker/scheduler/clock-install/darwin-launchd.js +238 -0
- package/dist/worker/scheduler/clock-install/linux-systemd-user.js +224 -0
- package/dist/worker/scheduler/clock-install/types.js +1 -0
- package/dist/worker/scheduler/clock-install/win32-schtasks.js +227 -0
- package/dist/worker/scheduler/clock-install.js +284 -0
- package/dist/worker/scheduler/clock.js +420 -0
- package/dist/worker/scheduler/dispatcher.js +503 -0
- package/dist/worker/scheduler/doctor.js +431 -0
- package/dist/worker/scheduler/evidence.js +170 -0
- package/dist/worker/scheduler/git-base.js +90 -0
- package/dist/worker/scheduler/index.js +25 -0
- package/dist/worker/scheduler/lease.js +114 -0
- package/dist/worker/scheduler/lifecycle.js +348 -0
- package/dist/worker/scheduler/lock.js +80 -0
- package/dist/worker/scheduler/morning-window.js +191 -0
- package/dist/worker/scheduler/night-git-finalizer.js +114 -0
- package/dist/worker/scheduler/night-harvest.js +412 -0
- package/dist/worker/scheduler/paths.js +92 -0
- package/dist/worker/scheduler/prepared-attempt-recovery.js +471 -0
- package/dist/worker/scheduler/recovery.js +277 -0
- package/dist/worker/scheduler/reservation.js +146 -0
- package/dist/worker/scheduler/retry.js +199 -0
- package/dist/worker/scheduler/scheduler-loop.js +272 -0
- package/dist/worker/scheduler/store.js +275 -0
- package/dist/worker/scheduler/traceability.js +54 -0
- package/dist/worker/scheduler/trigger.js +258 -0
- package/dist/worker/scheduler/types.js +369 -0
- package/dist/worker/scheduler/workspace-adapter.js +128 -0
- package/dist/worker/task-graph/acceptance-schema.js +40 -0
- package/dist/worker/task-graph/ready-planner.js +267 -0
- package/dist/worker/task-graph/ready-queue.js +23 -0
- package/dist/worker/task-graph/task-graph-schema.js +59 -0
- package/dist/worker/task-graph/types.js +1 -0
- package/dist/worker/task-graph/validate.js +293 -0
- package/dist/worker/task-spec/complexity-mapping.js +8 -0
- package/dist/worker/task-spec/schema.js +125 -0
- package/dist/worker/task-spec/types.js +1 -0
- package/dist/worker/task-spec/validate.js +391 -0
- package/dist/worker/task-spec/workflow-routing.js +149 -0
- package/dist/workflows/dag/authoring.js +8 -0
- package/dist/workflows/dag/authority-surface.js +138 -0
- package/dist/workflows/dag/backend-test-analysis-contract.js +507 -0
- package/dist/workflows/dag/backend-test-case-coverage-analysis.js +1985 -0
- package/dist/workflows/dag/backend-test-case-manifest.js +638 -0
- package/dist/workflows/dag/backend-test-classification-contract.js +38 -0
- package/dist/workflows/dag/backend-test-contract-envelope.js +205 -0
- package/dist/workflows/dag/backend-test-coverage-contract.js +202 -0
- package/dist/workflows/dag/backend-test-execution-contract.js +715 -0
- package/dist/workflows/dag/backend-test-gap-fill.js +205 -0
- package/dist/workflows/dag/backend-test-intake-context.js +178 -0
- package/dist/workflows/dag/backend-test-layout.js +133 -0
- package/dist/workflows/dag/backend-test-markdown-workflow.js +1984 -0
- package/dist/workflows/dag/backend-test-module-stem.js +26 -0
- package/dist/workflows/dag/backend-test-pytest-collection.js +859 -0
- package/dist/workflows/dag/backend-test-result-contract.js +1030 -0
- package/dist/workflows/dag/backend-test-scenario-param.js +1670 -0
- package/dist/workflows/dag/backend-test-scenario-partitions.js +249 -0
- package/dist/workflows/dag/backend-test-semantic-review-contract.js +36 -0
- package/dist/workflows/dag/backend-test-stability-contract.js +57 -0
- package/dist/workflows/dag/backend-test-writer-completeness.js +1058 -0
- package/dist/workflows/dag/budget-enforcement.js +67 -0
- package/dist/workflows/dag/canvas-observer.js +474 -0
- package/dist/workflows/dag/context-policy.js +137 -0
- package/dist/workflows/dag/contract-output-registry.js +14 -0
- package/dist/workflows/dag/contract-validator-registrations.js +10 -0
- package/dist/workflows/dag/controller-identity.js +104 -0
- package/dist/workflows/dag/convergence/controller.js +596 -0
- package/dist/workflows/dag/decision-envelope.js +557 -0
- package/dist/workflows/dag/decision-evidence.js +153 -0
- package/dist/workflows/dag/decision-gates.js +1 -0
- package/dist/workflows/dag/dynamic-runtime/condition.js +48 -0
- package/dist/workflows/dag/dynamic-runtime/loop-until.js +161 -0
- package/dist/workflows/dag/dynamic-runtime/map.js +435 -0
- package/dist/workflows/dag/dynamic-runtime/reduction.js +72 -0
- package/dist/workflows/dag/dynamic-runtime/shared.js +203 -0
- package/dist/workflows/dag/event-observer.js +132 -0
- package/dist/workflows/dag/executor-registry.js +23 -0
- package/dist/workflows/dag/facts.js +4 -0
- package/dist/workflows/dag/failure-category.js +118 -0
- package/dist/workflows/dag/failure-routing.js +105 -0
- package/dist/workflows/dag/final-verification.js +180 -0
- package/dist/workflows/dag/frontend-implementation-contract.js +1911 -0
- package/dist/workflows/dag/frontend-lint-baseline.js +474 -0
- package/dist/workflows/dag/frontend-plan-render.js +90 -0
- package/dist/workflows/dag/frontend-prewrite-gate.js +1011 -0
- package/dist/workflows/dag/frontend-project-capability.js +1 -0
- package/dist/workflows/dag/frontend-recovery-plan.js +73 -0
- package/dist/workflows/dag/frontend-recovery-root-manifest.js +123 -0
- package/dist/workflows/dag/frontend-recovery-run.js +539 -0
- package/dist/workflows/dag/frontend-repair.js +541 -0
- package/dist/workflows/dag/frontend-review-context.js +116 -0
- package/dist/workflows/dag/frontend-risk.js +161 -0
- package/dist/workflows/dag/frontend-test-case-checklist.js +343 -0
- package/dist/workflows/dag/frontend-test-case-manifest.js +104 -0
- package/dist/workflows/dag/frontend-test-case-quality.js +105 -0
- package/dist/workflows/dag/frontend-test-html-report.js +174 -0
- package/dist/workflows/dag/frontend-test-l5-report.js +177 -0
- package/dist/workflows/dag/frontend-test-result-contract.js +487 -0
- package/dist/workflows/dag/frontend-verification-trace.js +275 -0
- package/dist/workflows/dag/frontend-worktree-diff.js +201 -0
- package/dist/workflows/dag/frontend-writer-recovery.js +106 -0
- package/dist/workflows/dag/frontend-writer-rollback.js +821 -0
- package/dist/workflows/dag/governance-constants.js +5 -0
- package/dist/workflows/dag/governance-profile.js +413 -0
- package/dist/workflows/dag/index.js +6 -0
- package/dist/workflows/dag/init-hybrid.js +7345 -0
- package/dist/workflows/dag/interrupt-request.js +559 -0
- package/dist/workflows/dag/knowledge-curator.js +165 -0
- package/dist/workflows/dag/l5-report-metrics.js +33 -0
- package/dist/workflows/dag/lifecycle.js +855 -0
- package/dist/workflows/dag/liveness-policy.js +251 -0
- package/dist/workflows/dag/node-execution.js +1081 -0
- package/dist/workflows/dag/observer-compose.js +52 -0
- package/dist/workflows/dag/output-protocol.js +356 -0
- package/dist/workflows/dag/project-governance-context.js +514 -0
- package/dist/workflows/dag/prompt-source.js +88 -0
- package/dist/workflows/dag/prompt.js +348 -0
- package/dist/workflows/dag/reconcile-run.js +145 -0
- package/dist/workflows/dag/reconcile-tasks.js +404 -0
- package/dist/workflows/dag/recovery-recommendation.js +329 -0
- package/dist/workflows/dag/repair-artifact.js +363 -0
- package/dist/workflows/dag/report.js +1229 -0
- package/dist/workflows/dag/rerun-plan.js +614 -0
- package/dist/workflows/dag/rerun-run.js +556 -0
- package/dist/workflows/dag/rerun-task.js +370 -0
- package/dist/workflows/dag/retry-policy.js +263 -0
- package/dist/workflows/dag/run-store.js +41 -0
- package/dist/workflows/dag/runner.js +1069 -0
- package/dist/workflows/dag/runtime-contract.js +87 -0
- package/dist/workflows/dag/runtime.js +5 -0
- package/dist/workflows/dag/scheduler.js +497 -0
- package/dist/workflows/dag/sdd-embedded.js +128 -0
- package/dist/workflows/dag/skill-instructions.js +478 -0
- package/dist/workflows/dag/skill-snapshot.js +553 -0
- package/dist/workflows/dag/skills.js +41 -0
- package/dist/workflows/dag/spec.js +3 -0
- package/dist/workflows/dag/task-contract-binding.js +138 -0
- package/dist/workflows/dag/task-demand-routing.js +1 -0
- package/dist/workflows/dag/topo.js +30 -0
- package/dist/workflows/dag/types.js +1145 -0
- package/dist/workflows/dag/upstream-artifacts.js +98 -0
- package/dist/workflows/dag/validate.js +998 -0
- package/dist/workflows/dag/workspace-checkpoint.js +186 -0
- package/dist/workflows/dynamic/artifacts.js +65 -0
- package/dist/workflows/dynamic/compile.js +371 -0
- package/dist/workflows/dynamic/compileTypes.js +1 -0
- package/dist/workflows/dynamic/errors.js +5 -0
- package/dist/workflows/dynamic/index.js +7 -0
- package/dist/workflows/dynamic/profiles.js +156 -0
- package/dist/workflows/dynamic/spec.js +115 -0
- package/dist/workflows/dynamic/validate.js +275 -0
- package/dist/workflows/loop/actions/dag-action.js +129 -0
- package/dist/workflows/loop/actions/pi-review.js +267 -0
- package/dist/workflows/loop/actions/shared.js +157 -0
- package/dist/workflows/loop/actions/shell-verify.js +82 -0
- package/dist/workflows/loop/actions/types.js +1 -0
- package/dist/workflows/loop/actions/workflow-action.js +255 -0
- package/dist/workflows/loop/actions.js +160 -0
- package/dist/workflows/loop/benchmark.js +510 -0
- package/dist/workflows/loop/closeout.js +135 -0
- package/dist/workflows/loop/context.js +47 -0
- package/dist/workflows/loop/events.js +26 -0
- package/dist/workflows/loop/hash.js +32 -0
- package/dist/workflows/loop/index.js +8 -0
- package/dist/workflows/loop/paths.js +17 -0
- package/dist/workflows/loop/policy/auto-policy.js +112 -0
- package/dist/workflows/loop/policy/path-patterns.js +13 -0
- package/dist/workflows/loop/rounds.js +81 -0
- package/dist/workflows/loop/signals.js +52 -0
- package/dist/workflows/loop/state.js +116 -0
- package/dist/workflows/loop/templates.js +54 -0
- package/dist/workflows/loop/types.js +28 -0
- package/docs/README.md +82 -0
- package/docs/architecture/README.md +35 -0
- package/docs/architecture/dag-execution.md +165 -0
- package/docs/architecture/evolution.md +108 -0
- package/docs/architecture/facts-and-state.md +74 -0
- package/docs/architecture/runtime-boundaries.md +226 -0
- package/docs/architecture/system-overview.md +100 -0
- package/docs/architecture/worker-and-feature.md +122 -0
- package/docs/governance/README.md +18 -0
- package/docs/governance/harness-methodology-debugging.md +177 -0
- package/docs/governance/harness-methodology-tdd.md +130 -0
- package/docs/governance/harness-methodology-verification.md +27 -0
- package/docs/init-surface.manifest.json +358 -0
- package/docs/operations/README.md +15 -0
- package/docs/operations/local-development-environment.md +77 -0
- package/docs/skills/README.md +7 -0
- package/docs/skills/vetted-skill-registry.md +49 -0
- package/docs/templates/README.md +67 -0
- package/docs/templates/adr.md +60 -0
- package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -0
- package/docs/templates/agent-dag-decision-envelope.schema.json +213 -0
- package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -0
- package/docs/templates/agent-dag-decision-gate.prompt.md +246 -0
- package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -0
- package/docs/templates/agent-dag-report.schema.json +473 -0
- package/docs/templates/agent-dag-review-verdict.prompt.md +68 -0
- package/docs/templates/agent-dag.base.json +190 -0
- package/docs/templates/agent-dag.final-verification.json +185 -0
- package/docs/templates/agent-dag.schema.json +590 -0
- package/docs/templates/agent-dag.supervised-implementation.json +640 -0
- package/docs/templates/agent-worker-production-readiness-checklist.md +47 -0
- package/docs/templates/backend-test-analysis.schema.json +37 -0
- package/docs/templates/backend-test-case-manifest.schema.json +223 -0
- package/docs/templates/backend-test-dag.classify.prompt.md +75 -0
- package/docs/templates/backend-test-dag.generate-pytest.prompt.md +41 -0
- package/docs/templates/backend-test-dag.json +671 -0
- package/docs/templates/backend-test-dag.retrospect.prompt.md +165 -0
- package/docs/templates/backend-test-dag.review-cases.prompt.md +36 -0
- package/docs/templates/backend-test-execution.schema.json +138 -0
- package/docs/templates/backend-test-result.schema.json +99 -0
- package/docs/templates/branch-merge-report.md +115 -0
- package/docs/templates/evaluation/agents-map-slim-v1.candidate.json +9 -0
- package/docs/templates/evaluation/agents-map-slim-v1.md +87 -0
- package/docs/templates/evaluation/agents-map-verbose-v0.candidate.json +9 -0
- package/docs/templates/evaluation/agents-map-verbose-v0.md +153 -0
- package/docs/templates/evaluation/campaign-budget-v1.json +12 -0
- package/docs/templates/evaluation/campaign-dogfood-v0.json +24 -0
- package/docs/templates/evaluation/campaign-evidence-v1.json +44 -0
- package/docs/templates/evaluation/context-policy-baseline-v1.json +17 -0
- package/docs/templates/evaluation/context-policy-role-specialized-v1.json +28 -0
- package/docs/templates/evaluation/corpus-dogfood-v0.manifest.json +118 -0
- package/docs/templates/evaluation/matrix-dag-dry-run-v1.json +21 -0
- package/docs/templates/evaluation/matrix-fixture-v1.json +10 -0
- package/docs/templates/evaluation/private-verifier-dogfood-v0.json +16 -0
- package/docs/templates/exec-plan.md +66 -0
- package/docs/templates/feature-spec.md +53 -0
- package/docs/templates/frontend-design-contract.md +68 -0
- package/docs/templates/frontend-eval/fixtures/failures/01-type-build-error.md +17 -0
- package/docs/templates/frontend-eval/fixtures/failures/02-unit-component-test-fail.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/03-fixture-schema-drift.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/05-forbidden-write-writeset-expansion.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/06-unapproved-dependency-add.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/07-mock-production-on.md +21 -0
- package/docs/templates/frontend-eval/fixtures/functional/01-simple-component-style.md +29 -0
- package/docs/templates/frontend-eval/fixtures/functional/02-form-validation.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/03-list-detail-page.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/04-api-mock.md +29 -0
- package/docs/templates/frontend-eval/fixtures/functional/05-permission-auth-gated-ui.md +27 -0
- package/docs/templates/frontend-eval/fixtures/functional/06-ssr-server-client-boundary.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/07-shared-public-component-api.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/08-pure-local-no-remote.md +27 -0
- package/docs/templates/frontend-eval/metrics.md +138 -0
- package/docs/templates/frontend-eval/smoke-targets.md +53 -0
- package/docs/templates/frontend-implementation-contract.schema.json +35 -0
- package/docs/templates/frontend-task-constraints.md +62 -0
- package/docs/templates/frontend-task-requirement.md +104 -0
- package/docs/templates/frontend-test-case-checklist.md +44 -0
- package/docs/templates/frontend-test-case.example.md +143 -0
- package/docs/templates/frontend-test-dag.generate-cases.prompt.md +63 -0
- package/docs/templates/frontend-test-dag.json +409 -0
- package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +21 -0
- package/docs/templates/frontend-test-dag.retrospect.prompt.md +5 -0
- package/docs/templates/frontend-test-dag.review-cases.prompt.md +5 -0
- package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -0
- package/docs/templates/frontend-test-standard-scenarios.v1.json +159 -0
- package/docs/templates/harness.schema.json +351 -0
- package/docs/templates/hybrid-dag.json +188 -0
- package/docs/templates/init-evolution-review.md +35 -0
- package/docs/templates/init-managed-agents.md +157 -0
- package/docs/templates/interactive-ui-round2-experiment.md +66 -0
- package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -0
- package/docs/templates/knowledge-sync-dag.json +178 -0
- package/docs/templates/knowledge-sync-draft.schema.json +71 -0
- package/docs/templates/product-line/AGENTS.md +9 -0
- package/docs/templates/product-line/README.md +42 -0
- package/docs/templates/product-line/acceptance.yaml +23 -0
- package/docs/templates/product-line/closeout.yaml +9 -0
- package/docs/templates/product-line/design.md +13 -0
- package/docs/templates/product-line/feature-scaffold-batch.example.yaml +31 -0
- package/docs/templates/product-line/feature.yaml +11 -0
- package/docs/templates/product-line/links.md +10 -0
- package/docs/templates/product-line/requirement.md +17 -0
- package/docs/templates/product-line/scaffold-samples/README.md +36 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/acceptance.yaml +16 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/design.md +14 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/feature.yaml +14 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/requirement.md +6 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/tasks/BE-IMPL-001.yaml +83 -0
- package/docs/templates/product-line/scaffold-samples/backend-only/tasks/task-graph.yaml +14 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/acceptance.yaml +18 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/design.md +18 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/feature.yaml +14 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/requirement.md +6 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/tasks/BE-IMPL-001.yaml +84 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/tasks/CONTRACT-001.yaml +84 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/tasks/FE-IMPL-001.yaml +86 -0
- package/docs/templates/product-line/scaffold-samples/fe-with-api/tasks/task-graph.yaml +40 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/acceptance.yaml +16 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/design.md +14 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/feature.yaml +14 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/requirement.md +6 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/tasks/FE-IMPL-001.yaml +85 -0
- package/docs/templates/product-line/scaffold-samples/frontend-only/tasks/task-graph.yaml +14 -0
- package/docs/templates/product-line/task-graph.yaml +23 -0
- package/docs/templates/product-line/task.yaml +68 -0
- package/docs/templates/product-line/test-plan.md +7 -0
- package/docs/templates/production-readiness-checklist.md +57 -0
- package/docs/templates/progress-log.md +27 -0
- package/docs/templates/project-start-checklist.md +9 -0
- package/docs/templates/qa-report.md +48 -0
- package/docs/templates/sprint-contract.md +29 -0
- package/docs/templates/worker-dogfood-evidence.md +80 -0
- package/docs/templates/worker-dogfood-setup.md +68 -0
- package/examples/decision-gate-agent-dag.json +177 -0
- package/examples/example-dag.json +46 -0
- package/examples/hybrid-loop-agent-dag.json +189 -0
- package/examples/l5-report-coms-process-definition.html +322 -0
- package/examples/l5-report-demo.html +79 -0
- package/harness.json +90 -0
- package/package.json +98 -0
- package/scripts/kb-bootstrap-init-skeleton.sh +241 -0
- package/scripts/kb-graph-incremental-prepare.mjs +386 -0
- package/scripts/kb-graph-materialize.mjs +105 -0
- package/scripts/kb-graph-promote.mjs +164 -0
- package/scripts/kb-query.mjs +554 -0
- package/skills/agent-worker/SKILL.md +48 -0
- package/skills/agent-worker/references/agent-worker-operator.md +159 -0
- package/skills/ai-engineering-context/SKILL.md +48 -0
- package/skills/analyze-product-dependencies/SKILL.md +108 -0
- package/skills/analyze-product-dependencies/references/api-documentation-schema.md +35 -0
- package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +38 -0
- package/skills/analyze-product-dependencies/references/example.md +76 -0
- package/skills/analyze-product-dependencies/references/forward-test-cases.md +110 -0
- package/skills/analyze-product-dependencies/references/input-contract.md +34 -0
- package/skills/analyze-product-dependencies/references/kb-integration.md +64 -0
- package/skills/analyze-product-dependencies/references/scouting-rules.md +76 -0
- package/skills/analyze-product-dependencies/scripts/test-validators.mjs +460 -0
- package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +194 -0
- package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +200 -0
- package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +90 -0
- package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +138 -0
- package/skills/analyze-product-requirements/SKILL.md +145 -0
- package/skills/analyze-product-requirements/references/acceptance-criteria.md +87 -0
- package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +70 -0
- package/skills/analyze-product-requirements/references/example.md +104 -0
- package/skills/analyze-product-requirements/references/forward-test-cases.md +144 -0
- package/skills/analyze-product-requirements/references/kb-integration.md +56 -0
- package/skills/analyze-product-requirements/references/product-analysis-schema.md +41 -0
- package/skills/analyze-product-requirements/references/product-requirement-schema.md +42 -0
- package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +66 -0
- package/skills/analyze-product-requirements/scripts/compute-source-identity.mjs +35 -0
- package/skills/analyze-product-requirements/scripts/test-validators.mjs +501 -0
- package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +100 -0
- package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +109 -0
- package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +109 -0
- package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +175 -0
- package/skills/browser-tools/SKILL.md +196 -0
- package/skills/browser-tools/browser-content.js +103 -0
- package/skills/browser-tools/browser-cookies.js +35 -0
- package/skills/browser-tools/browser-eval.js +53 -0
- package/skills/browser-tools/browser-hn-scraper.js +108 -0
- package/skills/browser-tools/browser-nav.js +44 -0
- package/skills/browser-tools/browser-pick.js +162 -0
- package/skills/browser-tools/browser-screenshot.js +34 -0
- package/skills/browser-tools/browser-start.js +86 -0
- package/skills/browser-tools/package-lock.json +2556 -0
- package/skills/browser-tools/package.json +19 -0
- package/skills/code-review-core/SKILL.md +20 -0
- package/skills/codebase-scout/SKILL.md +19 -0
- package/skills/frontend-bounded-implement/SKILL.md +53 -0
- package/skills/frontend-design-review/SKILL.md +79 -0
- package/skills/frontend-design-review/references/review-checklist.md +43 -0
- package/skills/frontend-implementation/SKILL.md +52 -0
- package/skills/frontend-implementation/references/code-standards.md +33 -0
- package/skills/frontend-implementation/references/design-spec.md +56 -0
- package/skills/frontend-implementation/references/node-contracts.md +31 -0
- package/skills/frontend-review/SKILL.md +55 -0
- package/skills/frontend-review/references/review-findings.md +50 -0
- package/skills/frontend-verification/SKILL.md +61 -0
- package/skills/frontend-verification/references/verification-checklist.md +48 -0
- package/skills/grill-me/SKILL.md +10 -0
- package/skills/grill-with-docs/SKILL.md +80 -0
- package/skills/grill-with-docs/adr-format.md +58 -0
- package/skills/grill-with-docs/context-format.md +52 -0
- package/skills/init-capability-evolution/SKILL.md +70 -0
- package/skills/local-jacoco-coverage/SKILL.md +281 -0
- package/skills/local-jacoco-coverage/references/requirement-to-source-mapping.md +85 -0
- package/skills/local-jacoco-coverage/references/runtime-alignment.md +106 -0
- package/skills/local-jacoco-coverage/scripts/run-coverage-analysis.sh +148 -0
- package/skills/local-jacoco-coverage/scripts/start-jacoco-agent.sh +110 -0
- package/skills/loop-agent/SKILL.md +68 -0
- package/skills/loop-agent/references/README.md +67 -0
- package/skills/loop-agent/references/command-reference.md +645 -0
- package/skills/loop-agent/references/docs-converge.md +126 -0
- package/skills/loop-agent/references/harness-policy.md +289 -0
- package/skills/loop-agent/references/hybrid-dag.md +245 -0
- package/skills/loop-agent/references/learned/README.md +21 -0
- package/skills/loop-agent/references/long-running-loop.md +57 -0
- package/skills/loop-agent/references/model-routing.md +45 -0
- package/skills/loop-agent/references/multi-worktree.md +54 -0
- package/skills/loop-agent/references/one-shot-runs.md +84 -0
- package/skills/loop-agent/references/orchestrator-and-interventions.md +175 -0
- package/skills/loop-agent/references/pi-prompt.md +23 -0
- package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -0
- package/skills/loop-agent/references/post-implementation-and-patterns.md +54 -0
- package/skills/loop-agent/references/source-and-plan-practice.md +169 -0
- package/skills/loop-agent/references/task-workflow.md +104 -0
- package/skills/loop-agent/references/verification-and-failure-handling.md +148 -0
- package/skills/playwright-cli/SKILL.md +93 -0
- package/skills/playwright-cli/references/element-attributes.md +23 -0
- package/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/skills/playwright-cli/references/request-mocking.md +87 -0
- package/skills/playwright-cli/references/running-code.md +241 -0
- package/skills/playwright-cli/references/session-management.md +225 -0
- package/skills/playwright-cli/references/storage-state.md +275 -0
- package/skills/playwright-cli/references/test-generation.md +433 -0
- package/skills/playwright-cli/references/tracing.md +5 -0
- package/skills/playwright-cli/references/video-recording.md +5 -0
- package/skills/playwright-cli-case-generator/SKILL.md +108 -0
- package/skills/requesting-code-review/SKILL.md +101 -0
- package/skills/requesting-code-review/code-reviewer.md +168 -0
- package/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/systematic-debugging/SKILL.md +312 -0
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/systematic-debugging/find-polluter.sh +63 -0
- package/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/systematic-debugging/test-academic.md +14 -0
- package/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/test-driven-development/SKILL.md +27 -0
- package/skills/using-git-worktrees/SKILL.md +215 -0
- package/skills/verification-before-completion/SKILL.md +154 -0
- package/skills/webapp-testing/SKILL.md +19 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operator Chat — operator action → Pi tool schema adapter (roadmap M0-C).
|
|
3
|
+
*
|
|
4
|
+
* The capabilities registry (src/shared/operator/capabilities.ts) is the
|
|
5
|
+
* SINGLE source of truth for each action's typed input schema AND its model
|
|
6
|
+
* policy (modelCallable / humanConfirmation). This adapter renders that
|
|
7
|
+
* registry into the descriptor shape the Pi model invokes; it no longer
|
|
8
|
+
* maintains a second hand-written INPUT_PARAMS table (that drift risk is gone).
|
|
9
|
+
*
|
|
10
|
+
* High-risk / long-running actions ARE mapped as tools (2026-07-25 widening),
|
|
11
|
+
* but the registry now declares their modelCallable policy:
|
|
12
|
+
* - "always": model can invoke; dispatch runs server-side (2026-08-11:
|
|
13
|
+
* runDag/dagRerun/standaloneTaskRerun/workerTaskRetry are autonomous —
|
|
14
|
+
* runDag consumes a server-issued single-use execution receipt, and the
|
|
15
|
+
* recovery actions pass server-side read-only run-facts checks).
|
|
16
|
+
* - "prepare-only": model can invoke but the mutation needs a human-origin
|
|
17
|
+
* confirmation (Night Scheduler mutation-gate faces).
|
|
18
|
+
* - "never": the action is the human confirmation itself (confirmDagConfirmation)
|
|
19
|
+
* and MUST NOT appear as a model-callable tool (M0-B / roadmap G03).
|
|
20
|
+
*
|
|
21
|
+
* The adapter does NOT register tools with the SDK directly — that is the
|
|
22
|
+
* session layer's job (chat/pi-runtime.ts). This keeps the adapter pure and
|
|
23
|
+
* unit-testable against the registry.
|
|
24
|
+
*/
|
|
25
|
+
import { buildOperatorCapabilitiesDocument } from "../../../shared/operator/capabilities.js";
|
|
26
|
+
/**
|
|
27
|
+
* Executable mutation faces reserved for browser HumanGate routes.
|
|
28
|
+
*
|
|
29
|
+
* Derived from the capabilities registry: any action that still requires human
|
|
30
|
+
* confirmation (and is not itself the confirm step with modelCallable=never)
|
|
31
|
+
* must NOT be registered as a model-executable tool. The model may only call
|
|
32
|
+
* prepare helpers (prepareDagConfirmation / prepareMutationGate); the browser
|
|
33
|
+
* mutation gate + HMAC token perform the consuming dispatch.
|
|
34
|
+
*
|
|
35
|
+
* 2026-08-11: runDag / dagRerun / standaloneTaskRerun / workerTaskRetry are no
|
|
36
|
+
* longer gate-only (autonomous execution + run-facts checks) and drop out of
|
|
37
|
+
* this derived list automatically.
|
|
38
|
+
*
|
|
39
|
+
* `contractApply` is also gate-only even though its registry face remains
|
|
40
|
+
* `humanConfirmation: "conditional"` (assessment soft-gate for workspace UI);
|
|
41
|
+
* Chat executes it only via the contract-apply Human Gate route.
|
|
42
|
+
*/
|
|
43
|
+
const EXPLICIT_EXECUTABLE_GATE_ONLY = ["contractApply"];
|
|
44
|
+
export function listExecutableGateOnlyActions() {
|
|
45
|
+
const derived = buildOperatorCapabilitiesDocument()
|
|
46
|
+
.actions.filter((action) => action.humanConfirmation === "required" &&
|
|
47
|
+
action.modelCallable !== "never")
|
|
48
|
+
.map((action) => action.action);
|
|
49
|
+
return [...new Set([...EXPLICIT_EXECUTABLE_GATE_ONLY, ...derived])].sort();
|
|
50
|
+
}
|
|
51
|
+
/** Frozen snapshot for tests / drift checks (recomputed from registry). */
|
|
52
|
+
export const EXECUTABLE_GATE_ONLY_ACTIONS = Object.freeze(listExecutableGateOnlyActions());
|
|
53
|
+
const EXECUTABLE_GATE_ONLY = new Set(EXECUTABLE_GATE_ONLY_ACTIONS);
|
|
54
|
+
/**
|
|
55
|
+
* Build the FULL Chat tool schema set from the capabilities registry — every
|
|
56
|
+
* registry action, INCLUDING modelCallable="never" ones (e.g.
|
|
57
|
+
* confirmDagConfirmation). Used by internal audits / capability surfaces that
|
|
58
|
+
* need to see the complete registry. The session layer uses
|
|
59
|
+
* buildModelCallableToolSchemas() to render only model-callable tools.
|
|
60
|
+
*/
|
|
61
|
+
export function buildOperatorChatToolSchemas() {
|
|
62
|
+
const doc = buildOperatorCapabilitiesDocument();
|
|
63
|
+
const out = [];
|
|
64
|
+
for (const action of doc.actions) {
|
|
65
|
+
// Fail-closed: every registry action MUST carry inputParams. An action
|
|
66
|
+
// missing inputParams is a contract gap (the model could call it but we
|
|
67
|
+
// don't know which params its dispatcher reads). Throw at boot so the gap
|
|
68
|
+
// is caught in tests and never ships.
|
|
69
|
+
if (!Array.isArray(action.inputParams)) {
|
|
70
|
+
throw new Error(`Operator Chat tool schema gap: registry action "${action.action}" has no inputParams. Add inputParams (must match the dispatcher's paramsOf reads) in src/shared/operator/capabilities.ts.`);
|
|
71
|
+
}
|
|
72
|
+
out.push({
|
|
73
|
+
toolId: action.action,
|
|
74
|
+
action: action.action,
|
|
75
|
+
description: action.description,
|
|
76
|
+
cli: action.cli,
|
|
77
|
+
kind: action.kind,
|
|
78
|
+
inputParams: action.inputParams.map((p) => ({
|
|
79
|
+
name: p.name,
|
|
80
|
+
type: p.type,
|
|
81
|
+
required: p.required,
|
|
82
|
+
description: p.description,
|
|
83
|
+
...(p.itemsType ? { itemsType: p.itemsType } : {}),
|
|
84
|
+
})),
|
|
85
|
+
modelCallable: action.modelCallable,
|
|
86
|
+
humanConfirmation: action.humanConfirmation,
|
|
87
|
+
...(action.resultPolicy ? { resultPolicy: action.resultPolicy } : {}),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build ONLY the model-callable tool schemas — i.e. exclude
|
|
94
|
+
* modelCallable="never" actions (roadmap M0-B / G03). This is the set the Pi
|
|
95
|
+
* session actually registers as custom tools: the human confirmation action
|
|
96
|
+
* (confirmDagConfirmation) is NOT a model tool; it can only be invoked by the
|
|
97
|
+
* browser mutation gate with a server-signed confirmation token.
|
|
98
|
+
*/
|
|
99
|
+
export function buildModelCallableToolSchemas() {
|
|
100
|
+
return buildOperatorChatToolSchemas().filter((s) => s.modelCallable !== "never" && !EXECUTABLE_GATE_ONLY.has(s.action));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Names of actions that MUST NOT be model-callable (roadmap G03 / G14).
|
|
104
|
+
* Derived from the registry so adding a "never" policy there is the only edit
|
|
105
|
+
* needed. Used by the three-gate tool whitelist to deny model invocation.
|
|
106
|
+
*/
|
|
107
|
+
export function modelForbiddenActions() {
|
|
108
|
+
return buildOperatorChatToolSchemas()
|
|
109
|
+
.filter((s) => s.modelCallable === "never" || EXECUTABLE_GATE_ONLY.has(s.action))
|
|
110
|
+
.map((s) => s.action);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Verify the adapter covers exactly the registry and nothing more.
|
|
114
|
+
* Used by boot/red-team checks (V15 — the full registry is schema'd).
|
|
115
|
+
*/
|
|
116
|
+
export function verifyOperatorChatToolSurface() {
|
|
117
|
+
const schemas = buildOperatorChatToolSchemas();
|
|
118
|
+
const doc = buildOperatorCapabilitiesDocument();
|
|
119
|
+
const covered = schemas.map((s) => s.action).sort();
|
|
120
|
+
const expected = doc.actions.map((a) => a.action).sort();
|
|
121
|
+
const coveredSet = new Set(covered);
|
|
122
|
+
const expectedSet = new Set(expected);
|
|
123
|
+
const missing = expected.filter((a) => !coveredSet.has(a));
|
|
124
|
+
const extra = covered.filter((a) => !expectedSet.has(a));
|
|
125
|
+
return {
|
|
126
|
+
ok: missing.length === 0 && extra.length === 0,
|
|
127
|
+
covered,
|
|
128
|
+
missing,
|
|
129
|
+
extra,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable tool argument / result projection for Operator Chat (UI-04).
|
|
3
|
+
*
|
|
4
|
+
* Display-only: never mutates raw Pi ToolResult, session JSONL, or model context.
|
|
5
|
+
*/
|
|
6
|
+
const PREVIEW_KEYS = [
|
|
7
|
+
"command",
|
|
8
|
+
"query",
|
|
9
|
+
"operation",
|
|
10
|
+
"tool",
|
|
11
|
+
"server",
|
|
12
|
+
"symbol",
|
|
13
|
+
"path",
|
|
14
|
+
"file_path",
|
|
15
|
+
"filePath",
|
|
16
|
+
"pattern",
|
|
17
|
+
"glob",
|
|
18
|
+
"url",
|
|
19
|
+
];
|
|
20
|
+
const DEFAULT_PREVIEW_MAX = 120;
|
|
21
|
+
const DEFAULT_RESULT_MAX = 800;
|
|
22
|
+
function asRecord(value) {
|
|
23
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
24
|
+
return undefined;
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function parseArgs(args) {
|
|
28
|
+
if (args === undefined || args === null)
|
|
29
|
+
return undefined;
|
|
30
|
+
if (typeof args === "string") {
|
|
31
|
+
const trimmed = args.trim();
|
|
32
|
+
if (!trimmed)
|
|
33
|
+
return undefined;
|
|
34
|
+
try {
|
|
35
|
+
return asRecord(JSON.parse(trimmed));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return asRecord(args);
|
|
42
|
+
}
|
|
43
|
+
function clampOneLine(value, maxLen) {
|
|
44
|
+
const s = value.replace(/\s+/g, " ").trim();
|
|
45
|
+
if (!s)
|
|
46
|
+
return "";
|
|
47
|
+
return s.length > maxLen ? `${s.slice(0, maxLen)}…` : s;
|
|
48
|
+
}
|
|
49
|
+
function fieldString(input, key) {
|
|
50
|
+
const value = input[key];
|
|
51
|
+
if (typeof value === "string" && value.trim())
|
|
52
|
+
return value.trim();
|
|
53
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
54
|
+
return String(value);
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
/** Tool-specific header adapters (display only). */
|
|
58
|
+
function adapterPreview(toolName, input, maxLen) {
|
|
59
|
+
const name = (toolName ?? "").toLowerCase();
|
|
60
|
+
if (name === "bash" || name === "shell") {
|
|
61
|
+
const command = fieldString(input, "command");
|
|
62
|
+
return command ? clampOneLine(command, maxLen) : undefined;
|
|
63
|
+
}
|
|
64
|
+
if (name === "mcp" || name.startsWith("mcp_")) {
|
|
65
|
+
const server = fieldString(input, "server");
|
|
66
|
+
const tool = fieldString(input, "tool") ?? fieldString(input, "name");
|
|
67
|
+
const query = fieldString(input, "query");
|
|
68
|
+
if (server && tool)
|
|
69
|
+
return clampOneLine(`${server} · ${tool}`, maxLen);
|
|
70
|
+
if (tool)
|
|
71
|
+
return clampOneLine(tool, maxLen);
|
|
72
|
+
if (query)
|
|
73
|
+
return clampOneLine(query, maxLen);
|
|
74
|
+
if (server)
|
|
75
|
+
return clampOneLine(server, maxLen);
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
if (name === "lsp_navigation" || name.includes("lsp")) {
|
|
79
|
+
const parts = [
|
|
80
|
+
fieldString(input, "operation"),
|
|
81
|
+
fieldString(input, "symbol"),
|
|
82
|
+
fieldString(input, "path") ??
|
|
83
|
+
fieldString(input, "file_path") ??
|
|
84
|
+
fieldString(input, "filePath"),
|
|
85
|
+
].filter(Boolean);
|
|
86
|
+
const line = fieldString(input, "line") ?? fieldString(input, "position");
|
|
87
|
+
if (parts.length === 0 && !line)
|
|
88
|
+
return undefined;
|
|
89
|
+
const base = parts.join(" · ");
|
|
90
|
+
return clampOneLine(line ? `${base}${base ? ":" : ""}${line}` : base, maxLen);
|
|
91
|
+
}
|
|
92
|
+
if (name === "symbol_search" || name.includes("symbol_search")) {
|
|
93
|
+
const query = fieldString(input, "query") ?? fieldString(input, "symbol");
|
|
94
|
+
return query ? clampOneLine(query, maxLen) : undefined;
|
|
95
|
+
}
|
|
96
|
+
if (name === "read" ||
|
|
97
|
+
name === "read_symbol" ||
|
|
98
|
+
name === "read_enclosing" ||
|
|
99
|
+
name.startsWith("read_")) {
|
|
100
|
+
const path = fieldString(input, "path") ??
|
|
101
|
+
fieldString(input, "file_path") ??
|
|
102
|
+
fieldString(input, "filePath");
|
|
103
|
+
const symbol = fieldString(input, "symbol");
|
|
104
|
+
const line = fieldString(input, "line");
|
|
105
|
+
if (!path && !symbol)
|
|
106
|
+
return undefined;
|
|
107
|
+
const bits = [path, symbol, line].filter(Boolean);
|
|
108
|
+
return clampOneLine(bits.join(" · "), maxLen);
|
|
109
|
+
}
|
|
110
|
+
// Family prefixes (pi-lens / codegraph) — generic field heuristic below.
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
/** One-line summary for a tool-call header; empty when nothing useful. */
|
|
114
|
+
export function getToolPreview(args, options) {
|
|
115
|
+
const maxLen = options?.maxLen ?? DEFAULT_PREVIEW_MAX;
|
|
116
|
+
const input = parseArgs(args);
|
|
117
|
+
if (!input) {
|
|
118
|
+
if (typeof args === "string") {
|
|
119
|
+
const s = args.replace(/\s+/g, " ").trim();
|
|
120
|
+
if (!s || s === "{}")
|
|
121
|
+
return "";
|
|
122
|
+
return s.length > maxLen ? `${s.slice(0, maxLen)}…` : s;
|
|
123
|
+
}
|
|
124
|
+
return "";
|
|
125
|
+
}
|
|
126
|
+
const adapted = adapterPreview(options?.toolName, input, maxLen);
|
|
127
|
+
if (adapted)
|
|
128
|
+
return adapted;
|
|
129
|
+
for (const key of PREVIEW_KEYS) {
|
|
130
|
+
const value = input[key];
|
|
131
|
+
if (typeof value === "string" && value.trim()) {
|
|
132
|
+
return clampOneLine(value, maxLen);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const keys = Object.keys(input);
|
|
136
|
+
if (keys.length === 0)
|
|
137
|
+
return "";
|
|
138
|
+
const first = input[keys[0]];
|
|
139
|
+
const s = String(first ?? "").replace(/\s+/g, " ").trim();
|
|
140
|
+
if (!s)
|
|
141
|
+
return "";
|
|
142
|
+
return s.length > maxLen ? `${s.slice(0, maxLen)}…` : s;
|
|
143
|
+
}
|
|
144
|
+
/** Section labels for ToolCard expand body. */
|
|
145
|
+
export function getToolSectionLabels(toolName) {
|
|
146
|
+
const name = (toolName ?? "").toLowerCase();
|
|
147
|
+
if (name === "bash" || name === "shell") {
|
|
148
|
+
return { argsLabel: "命令", resultLabel: "输出" };
|
|
149
|
+
}
|
|
150
|
+
if (name === "mcp" || name.startsWith("mcp_")) {
|
|
151
|
+
return { argsLabel: "参数", resultLabel: "结果" };
|
|
152
|
+
}
|
|
153
|
+
return { argsLabel: "入参", resultLabel: "结果" };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Extract human-readable text from a Pi ToolResult-like value or its
|
|
157
|
+
* already-serialized browser preview string.
|
|
158
|
+
*/
|
|
159
|
+
export function extractToolResultText(result) {
|
|
160
|
+
if (result === undefined || result === null)
|
|
161
|
+
return "";
|
|
162
|
+
if (typeof result === "string") {
|
|
163
|
+
const trimmed = result.trim();
|
|
164
|
+
if (!trimmed)
|
|
165
|
+
return "";
|
|
166
|
+
// Prefer unwrapping standard Pi ToolResult JSON shells.
|
|
167
|
+
if ((trimmed.startsWith("{") && trimmed.endsWith("}")) ||
|
|
168
|
+
(trimmed.startsWith("[") && trimmed.endsWith("]"))) {
|
|
169
|
+
try {
|
|
170
|
+
return extractToolResultText(JSON.parse(trimmed));
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
if (typeof result === "number" || typeof result === "boolean") {
|
|
179
|
+
return String(result);
|
|
180
|
+
}
|
|
181
|
+
const record = asRecord(result);
|
|
182
|
+
if (!record) {
|
|
183
|
+
try {
|
|
184
|
+
return JSON.stringify(result, null, 2);
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return String(result);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Standard Pi ToolResult: { content: [{ type: "text", text }] }
|
|
191
|
+
const content = record.content;
|
|
192
|
+
if (Array.isArray(content)) {
|
|
193
|
+
const texts = [];
|
|
194
|
+
for (const block of content) {
|
|
195
|
+
const item = asRecord(block);
|
|
196
|
+
if (!item)
|
|
197
|
+
continue;
|
|
198
|
+
if (item.type === "text" && typeof item.text === "string") {
|
|
199
|
+
texts.push(item.text);
|
|
200
|
+
}
|
|
201
|
+
else if (typeof item.text === "string") {
|
|
202
|
+
texts.push(item.text);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (texts.length > 0)
|
|
206
|
+
return texts.join("\n");
|
|
207
|
+
}
|
|
208
|
+
if (typeof record.text === "string")
|
|
209
|
+
return record.text;
|
|
210
|
+
if (typeof record.output === "string")
|
|
211
|
+
return record.output;
|
|
212
|
+
if (typeof record.message === "string")
|
|
213
|
+
return record.message;
|
|
214
|
+
try {
|
|
215
|
+
return JSON.stringify(result, null, 2);
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return String(result);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
export function formatToolArgsDisplay(args) {
|
|
222
|
+
if (args === undefined || args === null)
|
|
223
|
+
return "";
|
|
224
|
+
try {
|
|
225
|
+
return typeof args === "string" ? args : JSON.stringify(args, null, 2);
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return String(args);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
export function truncateToolResult(text, options) {
|
|
232
|
+
if (text === undefined)
|
|
233
|
+
return { text: "", truncated: false };
|
|
234
|
+
const maxLen = options?.maxLen ?? DEFAULT_RESULT_MAX;
|
|
235
|
+
if (text.length <= maxLen)
|
|
236
|
+
return { text, truncated: false };
|
|
237
|
+
return { text: `${text.slice(0, maxLen)}…`, truncated: true };
|
|
238
|
+
}
|
|
239
|
+
export function toolCallDurationSeconds(createdAt, finishedAt) {
|
|
240
|
+
if (finishedAt === undefined ||
|
|
241
|
+
!Number.isFinite(createdAt) ||
|
|
242
|
+
!Number.isFinite(finishedAt)) {
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
const secs = Math.round((finishedAt - createdAt) / 1000);
|
|
246
|
+
return secs > 0 ? secs : undefined;
|
|
247
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operator Chat — tool policy (ADR 0011 UX-first full Pi tools).
|
|
3
|
+
*
|
|
4
|
+
* Operator Chat registers and activates full Pi builtins
|
|
5
|
+
* (read/write/edit/bash/grep/find/ls) plus model-callable operator actions and
|
|
6
|
+
* optional safe-* explore custom tools. Discipline is primarily soft
|
|
7
|
+
* (system prompt: prefer DAG paths). Hard denies remain for non-Pi
|
|
8
|
+
* write channels (apply_patch / full-tools / shell / coding-chat) and for
|
|
9
|
+
* modelCallable="never" actions (e.g. confirmDagConfirmation).
|
|
10
|
+
*
|
|
11
|
+
* 2026-08-11: runDag / dagRerun / standaloneTaskRerun / workerTaskRetry are
|
|
12
|
+
* model-callable (autonomous DAG execution); the browser Human Gate still
|
|
13
|
+
* covers Night Scheduler mutations, contractApply and confirmDagConfirmation.
|
|
14
|
+
*
|
|
15
|
+
* Interview / Official surfaces keep their own OFFICIAL_DENIED path; this
|
|
16
|
+
* module only filters Chat-side denial so Interview is not widened.
|
|
17
|
+
*/
|
|
18
|
+
import { buildOperatorCapabilitiesDocument } from "../../../shared/operator/capabilities.js";
|
|
19
|
+
import { OFFICIAL_DENIED_TOOL_IDS } from "../resource-loader.js";
|
|
20
|
+
import { EXECUTABLE_GATE_ONLY_ACTIONS } from "./tool-adapter.js";
|
|
21
|
+
const EXECUTABLE_GATE_ONLY = new Set(EXECUTABLE_GATE_ONLY_ACTIONS);
|
|
22
|
+
/**
|
|
23
|
+
* Actions the model MAY invoke. Derived from the registry but filtered by the
|
|
24
|
+
* modelCallable policy: modelCallable="never" actions (e.g. confirmDagConfirmation)
|
|
25
|
+
* are the human confirmation itself and MUST NOT be model-callable (roadmap
|
|
26
|
+
* M0-B / G03). They are never registered as Pi tools AND denied at the gate.
|
|
27
|
+
*/
|
|
28
|
+
export const OPERATOR_CHAT_ALLOWED_TOOLS = Object.freeze(buildOperatorCapabilitiesDocument()
|
|
29
|
+
.actions.filter((a) => a.modelCallable !== "never" && !EXECUTABLE_GATE_ONLY.has(a.action))
|
|
30
|
+
.map((a) => a.action));
|
|
31
|
+
/**
|
|
32
|
+
* Operator actions that MUST NOT be model-callable (roadmap M0-B / G03).
|
|
33
|
+
* Derived from the registry's modelCallable="never" policy. These are the
|
|
34
|
+
* human confirmation actions (confirmDagConfirmation) — the model can only
|
|
35
|
+
* prepare them; the browser mutation gate executes the confirm with a
|
|
36
|
+
* server-signed confirmation token.
|
|
37
|
+
*/
|
|
38
|
+
export const OPERATOR_CHAT_MODEL_FORBIDDEN_ACTIONS = Object.freeze(buildOperatorCapabilitiesDocument()
|
|
39
|
+
.actions.filter((a) => a.modelCallable === "never" || EXECUTABLE_GATE_ONLY.has(a.action))
|
|
40
|
+
.map((a) => a.action));
|
|
41
|
+
/**
|
|
42
|
+
* Operator actions denied by the legacy MVP boundary. Kept EMPTY since the
|
|
43
|
+
* owner decided (2026-07-25) that the full operator surface is Chat-callable.
|
|
44
|
+
* Retained (empty) so downstream guards referencing it keep compiling and
|
|
45
|
+
* stay defensive against future additions.
|
|
46
|
+
*/
|
|
47
|
+
export const OPERATOR_CHAT_DENIED_OPERATOR_ACTIONS = Object.freeze([]);
|
|
48
|
+
/** Full Pi builtin explore / coding tools admitted by ADR 0011. */
|
|
49
|
+
export const OPERATOR_CHAT_PI_BUILTIN_TOOLS = Object.freeze([
|
|
50
|
+
"read",
|
|
51
|
+
"write",
|
|
52
|
+
"edit",
|
|
53
|
+
"bash",
|
|
54
|
+
"grep",
|
|
55
|
+
"find",
|
|
56
|
+
"ls",
|
|
57
|
+
]);
|
|
58
|
+
const _PI_BUILTIN_ALLOW = new Set(OPERATOR_CHAT_PI_BUILTIN_TOOLS.map((t) => t.toLowerCase()));
|
|
59
|
+
// Operator actions that OFFICIAL_DENIED_TOOL_IDS carries for Interview safety
|
|
60
|
+
// but that the Chat now deliberately allows. Compare on a COMPACTED form
|
|
61
|
+
// (strip - and _) because OFFICIAL lists both camelCase and snake_case.
|
|
62
|
+
const _ALLOWED_OPERATOR_ACTIONS_COMPACT = new Set(OPERATOR_CHAT_ALLOWED_TOOLS.map((t) => t.toLowerCase().replace(/[-_]/g, "")));
|
|
63
|
+
/**
|
|
64
|
+
* Tools denied for Operator Chat. Built from OFFICIAL_DENIED minus:
|
|
65
|
+
* - Pi builtins allowed by ADR 0011
|
|
66
|
+
* - model-callable operator actions
|
|
67
|
+
* Does NOT re-add bash/read/grep/edit/write.
|
|
68
|
+
*/
|
|
69
|
+
export const OPERATOR_CHAT_DENIED_TOOLS = Object.freeze([
|
|
70
|
+
...new Set(OFFICIAL_DENIED_TOOL_IDS.filter((id) => {
|
|
71
|
+
const lower = id.toLowerCase();
|
|
72
|
+
if (_PI_BUILTIN_ALLOW.has(lower))
|
|
73
|
+
return false;
|
|
74
|
+
if (_ALLOWED_OPERATOR_ACTIONS_COMPACT.has(lower.replace(/[-_]/g, ""))) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
})),
|
|
79
|
+
]);
|
|
80
|
+
/**
|
|
81
|
+
* Operator actions denied by model policy (modelCallable="never"). These are
|
|
82
|
+
* human-only actions (the confirmation itself) — derived from the registry so
|
|
83
|
+
* adding a "never" policy there is the only edit needed. Kept separate from
|
|
84
|
+
* OPERATOR_CHAT_DENIED_OPERATOR_ACTIONS (legacy empty MVP boundary list) to
|
|
85
|
+
* preserve the two distinct concerns (model policy vs MVP mutation boundary).
|
|
86
|
+
*/
|
|
87
|
+
const DENIED_MODEL_POLICY = new Set(OPERATOR_CHAT_MODEL_FORBIDDEN_ACTIONS.map((a) => a.toLowerCase()));
|
|
88
|
+
const ALLOWED = new Set(OPERATOR_CHAT_ALLOWED_TOOLS.map((t) => t.toLowerCase()));
|
|
89
|
+
const DENIED_ACTIONS = new Set(OPERATOR_CHAT_DENIED_OPERATOR_ACTIONS.map((a) => a.toLowerCase()));
|
|
90
|
+
const DENIED_TOOLS = new Set(OPERATOR_CHAT_DENIED_TOOLS.map((t) => t.toLowerCase()));
|
|
91
|
+
/** Pi builtins are authorized without being operator registry actions. */
|
|
92
|
+
const PI_BUILTIN_AUTHORIZED = new Set(OPERATOR_CHAT_PI_BUILTIN_TOOLS.map((t) => t.toLowerCase()));
|
|
93
|
+
export function isOperatorChatToolAllowed(toolId) {
|
|
94
|
+
const id = toolId.trim().toLowerCase();
|
|
95
|
+
if (PI_BUILTIN_AUTHORIZED.has(id))
|
|
96
|
+
return true;
|
|
97
|
+
return ALLOWED.has(id);
|
|
98
|
+
}
|
|
99
|
+
export function isOperatorChatToolDenied(toolId) {
|
|
100
|
+
const id = toolId.trim().toLowerCase();
|
|
101
|
+
// Pi builtins are never denied under ADR 0011.
|
|
102
|
+
if (PI_BUILTIN_AUTHORIZED.has(id))
|
|
103
|
+
return false;
|
|
104
|
+
if (DENIED_TOOLS.has(id))
|
|
105
|
+
return true;
|
|
106
|
+
if (DENIED_ACTIONS.has(id))
|
|
107
|
+
return true;
|
|
108
|
+
// modelCallable="never" actions are always denied to the model (roadmap G03).
|
|
109
|
+
if (DENIED_MODEL_POLICY.has(id))
|
|
110
|
+
return true;
|
|
111
|
+
// normalize snake/camel/kebab
|
|
112
|
+
const compact = id.replace(/[-_]/g, "");
|
|
113
|
+
for (const d of DENIED_TOOLS) {
|
|
114
|
+
if (d.replace(/[-_]/g, "") === compact)
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
for (const d of DENIED_ACTIONS) {
|
|
118
|
+
if (d.replace(/[-_]/g, "") === compact)
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
for (const d of DENIED_MODEL_POLICY) {
|
|
122
|
+
if (d.replace(/[-_]/g, "") === compact)
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Three-gate authorization (design §7.5): session create / setActiveTools /
|
|
129
|
+
* per-tool-call. Server-side only — UI hiding is insufficient.
|
|
130
|
+
*/
|
|
131
|
+
export function authorizeOperatorChatTool(toolId) {
|
|
132
|
+
const id = toolId.trim();
|
|
133
|
+
if (!id) {
|
|
134
|
+
return {
|
|
135
|
+
ok: false,
|
|
136
|
+
code: "tool-unknown",
|
|
137
|
+
toolId: id,
|
|
138
|
+
message: "empty tool id is not allowed in General Operator Chat",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (isOperatorChatToolDenied(id)) {
|
|
142
|
+
return {
|
|
143
|
+
ok: false,
|
|
144
|
+
code: "tool-denied",
|
|
145
|
+
toolId: id,
|
|
146
|
+
message: `tool "${id}" is denied in General Operator Chat (no apply_patch/full-tools/shell/coding-chat; modelCallable=never still blocked)`,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (!isOperatorChatToolAllowed(id)) {
|
|
150
|
+
return {
|
|
151
|
+
ok: false,
|
|
152
|
+
code: "tool-unknown",
|
|
153
|
+
toolId: id,
|
|
154
|
+
message: `tool "${id}" is not registered for General Operator Chat (new operator actions default to deny)`,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return { ok: true, toolId: id };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Filter a requested tool list against the Chat whitelist.
|
|
161
|
+
* Returns allowed + denied (for diagnostics / red-team evidence).
|
|
162
|
+
*/
|
|
163
|
+
export function filterOperatorChatTools(requested) {
|
|
164
|
+
const allowed = [];
|
|
165
|
+
const denied = [];
|
|
166
|
+
for (const toolId of requested) {
|
|
167
|
+
const decision = authorizeOperatorChatTool(toolId);
|
|
168
|
+
if (decision.ok)
|
|
169
|
+
allowed.push(decision.toolId);
|
|
170
|
+
else
|
|
171
|
+
denied.push(toolId);
|
|
172
|
+
}
|
|
173
|
+
return { allowed, denied };
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Non-Pi write / coding channels that must never appear in Operator Chat.
|
|
177
|
+
* ADR 0011 allows Pi builtins read/write/edit/bash/grep/find/ls; this guard
|
|
178
|
+
* only blocks alternate coding surfaces (apply_patch, full-tools, shell,
|
|
179
|
+
* coding-chat).
|
|
180
|
+
*/
|
|
181
|
+
const NON_PI_WRITE_CHANNELS = [
|
|
182
|
+
"apply_patch",
|
|
183
|
+
"apply-patch",
|
|
184
|
+
"full-tools",
|
|
185
|
+
"full_tools",
|
|
186
|
+
"coding-chat",
|
|
187
|
+
"coding_chat",
|
|
188
|
+
"shell",
|
|
189
|
+
];
|
|
190
|
+
/**
|
|
191
|
+
* Assert that a requested tool set contains no prohibited non-Pi write
|
|
192
|
+
* channel. Pi builtins (including write/edit/bash) are allowed (ADR 0011).
|
|
193
|
+
*/
|
|
194
|
+
export function assertNoWriteToolInList(requested) {
|
|
195
|
+
const lower = new Set(requested.map((t) => t.trim().toLowerCase()));
|
|
196
|
+
for (const v of NON_PI_WRITE_CHANNELS) {
|
|
197
|
+
if (lower.has(v)) {
|
|
198
|
+
throw new Error(`non-Pi write channel "${v}" must not appear in Operator Chat tool list (ADR 0011)`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Back-compat alias kept for callers that still reference the old name.
|
|
204
|
+
* @deprecated use {@link assertNoWriteToolInList}.
|
|
205
|
+
*/
|
|
206
|
+
export function assertNoBashInToolList(requested) {
|
|
207
|
+
assertNoWriteToolInList(requested);
|
|
208
|
+
}
|
|
209
|
+
/** Canonical sorted tool list to hand to setActiveToolsByName. */
|
|
210
|
+
export function canonicalOperatorChatToolList() {
|
|
211
|
+
return [...OPERATOR_CHAT_ALLOWED_TOOLS].sort();
|
|
212
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-scoped ownership of in-flight Chat Turn executions.
|
|
3
|
+
*
|
|
4
|
+
* Registry entries must exist before HTTP 202 is returned, and every
|
|
5
|
+
* completion path (success / abort / failure) must clear them in finally so
|
|
6
|
+
* durable active leases cannot outlive the owning process.
|
|
7
|
+
*/
|
|
8
|
+
function keyFor(sessionId, turnId) {
|
|
9
|
+
return `${sessionId}\0${turnId}`;
|
|
10
|
+
}
|
|
11
|
+
export function createChatTurnExecutionRegistry() {
|
|
12
|
+
const entries = new Map();
|
|
13
|
+
const bySession = new Map();
|
|
14
|
+
return {
|
|
15
|
+
register(input) {
|
|
16
|
+
const existingSession = bySession.get(input.sessionId);
|
|
17
|
+
if (existingSession && existingSession !== input.turnId) {
|
|
18
|
+
throw new Error(`CHAT_TURN_EXECUTION_ACTIVE: ${input.sessionId} already owns ${existingSession}`);
|
|
19
|
+
}
|
|
20
|
+
const key = keyFor(input.sessionId, input.turnId);
|
|
21
|
+
const prior = entries.get(key);
|
|
22
|
+
if (prior)
|
|
23
|
+
return prior;
|
|
24
|
+
let resolveCompletion;
|
|
25
|
+
const completion = new Promise((resolve) => {
|
|
26
|
+
resolveCompletion = resolve;
|
|
27
|
+
});
|
|
28
|
+
// Prevent unhandled rejection if nobody awaits.
|
|
29
|
+
void completion.catch(() => undefined);
|
|
30
|
+
const entry = {
|
|
31
|
+
sessionId: input.sessionId,
|
|
32
|
+
turnId: input.turnId,
|
|
33
|
+
clientRequestId: input.clientRequestId,
|
|
34
|
+
controller: input.controller ?? new AbortController(),
|
|
35
|
+
completion,
|
|
36
|
+
resolveCompletion,
|
|
37
|
+
};
|
|
38
|
+
entries.set(key, entry);
|
|
39
|
+
bySession.set(input.sessionId, input.turnId);
|
|
40
|
+
return entry;
|
|
41
|
+
},
|
|
42
|
+
get(sessionId, turnId) {
|
|
43
|
+
return entries.get(keyFor(sessionId, turnId));
|
|
44
|
+
},
|
|
45
|
+
getBySession(sessionId) {
|
|
46
|
+
const turnId = bySession.get(sessionId);
|
|
47
|
+
if (!turnId)
|
|
48
|
+
return undefined;
|
|
49
|
+
return entries.get(keyFor(sessionId, turnId));
|
|
50
|
+
},
|
|
51
|
+
clear(sessionId, turnId) {
|
|
52
|
+
const key = keyFor(sessionId, turnId);
|
|
53
|
+
entries.delete(key);
|
|
54
|
+
if (bySession.get(sessionId) === turnId)
|
|
55
|
+
bySession.delete(sessionId);
|
|
56
|
+
},
|
|
57
|
+
async waitForCompletion(sessionId, turnId, timeoutMs) {
|
|
58
|
+
const entry = entries.get(keyFor(sessionId, turnId));
|
|
59
|
+
if (!entry)
|
|
60
|
+
return { status: "missing" };
|
|
61
|
+
let timer;
|
|
62
|
+
try {
|
|
63
|
+
const outcome = await Promise.race([
|
|
64
|
+
entry.completion.then((value) => ({ kind: "done", value })),
|
|
65
|
+
new Promise((resolve) => {
|
|
66
|
+
timer = setTimeout(() => resolve({ kind: "timeout" }), timeoutMs);
|
|
67
|
+
}),
|
|
68
|
+
]);
|
|
69
|
+
if (outcome.kind === "timeout")
|
|
70
|
+
return { status: "timeout" };
|
|
71
|
+
return { status: "completed", outcome: outcome.value };
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
if (timer)
|
|
75
|
+
clearTimeout(timer);
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
size() {
|
|
79
|
+
return entries.size;
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|