peaks-loop 4.0.0-beta.8 → 4.0.0-beta.9
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/CHANGELOG.md +45 -0
- package/bin/peaks.js +1 -1
- package/dist/cli/cli-helpers.d.ts +43 -0
- package/dist/cli/cli-helpers.js +86 -0
- package/dist/cli/commands/_cli-error-envelope.d.ts +19 -0
- package/dist/cli/commands/_cli-error-envelope.js +50 -0
- package/dist/cli/commands/adapter-commands-s2a.d.ts +34 -0
- package/dist/cli/commands/adapter-commands-s2a.js +92 -0
- package/dist/cli/commands/adapter-commands.d.ts +30 -0
- package/dist/cli/commands/adapter-commands.js +35 -0
- package/dist/cli/commands/agent-commands.d.ts +20 -0
- package/dist/cli/commands/agent-commands.js +48 -0
- package/dist/cli/commands/asset-commands.d.ts +45 -0
- package/dist/cli/commands/asset-commands.js +404 -0
- package/dist/cli/commands/audit-commands.d.ts +28 -0
- package/dist/cli/commands/audit-commands.js +437 -0
- package/dist/cli/commands/bee-commands.d.ts +26 -0
- package/dist/cli/commands/bee-commands.js +169 -0
- package/dist/cli/commands/capability-commands.d.ts +16 -0
- package/dist/cli/commands/capability-commands.js +45 -0
- package/dist/cli/commands/capability-worker-config-sc-commands.d.ts +3 -0
- package/dist/cli/commands/capability-worker-config-sc-commands.js +10 -0
- package/dist/cli/commands/classify-classify-commands.d.ts +19 -0
- package/dist/cli/commands/classify-classify-commands.js +151 -0
- package/dist/cli/commands/code-commands.d.ts +80 -0
- package/dist/cli/commands/code-commands.js +798 -0
- package/dist/cli/commands/code-review-commands.d.ts +34 -0
- package/dist/cli/commands/code-review-commands.js +83 -0
- package/dist/cli/commands/codegraph-commands.d.ts +3 -0
- package/dist/cli/commands/codegraph-commands.js +99 -0
- package/dist/cli/commands/compact-command.d.ts +21 -0
- package/dist/cli/commands/compact-command.js +252 -0
- package/dist/cli/commands/complexity-commands.d.ts +9 -0
- package/dist/cli/commands/complexity-commands.js +34 -0
- package/dist/cli/commands/config-commands.d.ts +3 -0
- package/dist/cli/commands/config-commands.js +220 -0
- package/dist/cli/commands/context-builder-commands.d.ts +11 -0
- package/dist/cli/commands/context-builder-commands.js +85 -0
- package/dist/cli/commands/context-commands.d.ts +21 -0
- package/dist/cli/commands/context-commands.js +254 -0
- package/dist/cli/commands/contract-commands.d.ts +26 -0
- package/dist/cli/commands/contract-commands.js +114 -0
- package/dist/cli/commands/core/artifacts-command.d.ts +3 -0
- package/dist/cli/commands/core/artifacts-command.js +62 -0
- package/dist/cli/commands/core/binding-commands.d.ts +3 -0
- package/dist/cli/commands/core/binding-commands.js +58 -0
- package/dist/cli/commands/core/doctor-command.d.ts +11 -0
- package/dist/cli/commands/core/doctor-command.js +204 -0
- package/dist/cli/commands/core/memory-command.d.ts +3 -0
- package/dist/cli/commands/core/memory-command.js +98 -0
- package/dist/cli/commands/core/profile-command.d.ts +3 -0
- package/dist/cli/commands/core/profile-command.js +9 -0
- package/dist/cli/commands/core/proxy-command.d.ts +3 -0
- package/dist/cli/commands/core/proxy-command.js +26 -0
- package/dist/cli/commands/core/session-command.d.ts +3 -0
- package/dist/cli/commands/core/session-command.js +241 -0
- package/dist/cli/commands/core/skill-command.d.ts +3 -0
- package/dist/cli/commands/core/skill-command.js +300 -0
- package/dist/cli/commands/core/standards-command.d.ts +3 -0
- package/dist/cli/commands/core/standards-command.js +95 -0
- package/dist/cli/commands/core-artifact-commands.d.ts +15 -0
- package/dist/cli/commands/core-artifact-commands.js +31 -0
- package/dist/cli/commands/dispatch-commands.d.ts +10 -0
- package/dist/cli/commands/dispatch-commands.js +351 -0
- package/dist/cli/commands/dispatch-from-dag.d.ts +3 -0
- package/dist/cli/commands/dispatch-from-dag.js +251 -0
- package/dist/cli/commands/doc-commands.d.ts +11 -0
- package/dist/cli/commands/doc-commands.js +65 -0
- package/dist/cli/commands/evolution-commands.d.ts +27 -0
- package/dist/cli/commands/evolution-commands.js +393 -0
- package/dist/cli/commands/feedback-commands.d.ts +18 -0
- package/dist/cli/commands/feedback-commands.js +145 -0
- package/dist/cli/commands/final-review-commands.d.ts +31 -0
- package/dist/cli/commands/final-review-commands.js +161 -0
- package/dist/cli/commands/fixture-commands.d.ts +32 -0
- package/dist/cli/commands/fixture-commands.js +91 -0
- package/dist/cli/commands/fork-commands.d.ts +16 -0
- package/dist/cli/commands/fork-commands.js +163 -0
- package/dist/cli/commands/gate-commands.d.ts +3 -0
- package/dist/cli/commands/gate-commands.js +117 -0
- package/dist/cli/commands/heartbeat-commands.d.ts +3 -0
- package/dist/cli/commands/heartbeat-commands.js +135 -0
- package/dist/cli/commands/hook-handle.d.ts +17 -0
- package/dist/cli/commands/hook-handle.js +157 -0
- package/dist/cli/commands/hooks-commands.d.ts +3 -0
- package/dist/cli/commands/hooks-commands.js +156 -0
- package/dist/cli/commands/ide-commands.d.ts +25 -0
- package/dist/cli/commands/ide-commands.js +42 -0
- package/dist/cli/commands/impact-commands.d.ts +15 -0
- package/dist/cli/commands/impact-commands.js +62 -0
- package/dist/cli/commands/job-commands.d.ts +3 -0
- package/dist/cli/commands/job-commands.js +289 -0
- package/dist/cli/commands/legacy-commands.d.ts +11 -0
- package/dist/cli/commands/legacy-commands.js +32 -0
- package/dist/cli/commands/log-commands.d.ts +17 -0
- package/dist/cli/commands/log-commands.js +64 -0
- package/dist/cli/commands/loop-commands.d.ts +27 -0
- package/dist/cli/commands/loop-commands.js +262 -0
- package/dist/cli/commands/loop-eval-commands.d.ts +20 -0
- package/dist/cli/commands/loop-eval-commands.js +526 -0
- package/dist/cli/commands/memory-commands.d.ts +23 -0
- package/dist/cli/commands/memory-commands.js +129 -0
- package/dist/cli/commands/migrate-1-4-1-command.d.ts +11 -0
- package/dist/cli/commands/migrate-1-4-1-command.js +34 -0
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.d.ts +20 -0
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +52 -0
- package/dist/cli/commands/mut-commands.d.ts +20 -0
- package/dist/cli/commands/mut-commands.js +239 -0
- package/dist/cli/commands/observability-commands.d.ts +22 -0
- package/dist/cli/commands/observability-commands.js +201 -0
- package/dist/cli/commands/openspec-commands.d.ts +3 -0
- package/dist/cli/commands/openspec-commands.js +237 -0
- package/dist/cli/commands/perf-audit-commands.d.ts +22 -0
- package/dist/cli/commands/perf-audit-commands.js +132 -0
- package/dist/cli/commands/perf-commands.d.ts +3 -0
- package/dist/cli/commands/perf-commands.js +41 -0
- package/dist/cli/commands/playwright-commands.d.ts +95 -0
- package/dist/cli/commands/playwright-commands.js +432 -0
- package/dist/cli/commands/polyrepo-commands.d.ts +37 -0
- package/dist/cli/commands/polyrepo-commands.js +155 -0
- package/dist/cli/commands/prd-blocks-commands.d.ts +18 -0
- package/dist/cli/commands/prd-blocks-commands.js +50 -0
- package/dist/cli/commands/prd-commands.d.ts +18 -0
- package/dist/cli/commands/prd-commands.js +141 -0
- package/dist/cli/commands/preferences-commands.d.ts +2 -0
- package/dist/cli/commands/preferences-commands.js +197 -0
- package/dist/cli/commands/project-commands.d.ts +3 -0
- package/dist/cli/commands/project-commands.js +253 -0
- package/dist/cli/commands/qa-business-review-commands.d.ts +17 -0
- package/dist/cli/commands/qa-business-review-commands.js +148 -0
- package/dist/cli/commands/qa-commands.d.ts +94 -0
- package/dist/cli/commands/qa-commands.js +271 -0
- package/dist/cli/commands/release-commands.d.ts +24 -0
- package/dist/cli/commands/release-commands.js +231 -0
- package/dist/cli/commands/request-commands.d.ts +3 -0
- package/dist/cli/commands/request-commands.js +548 -0
- package/dist/cli/commands/retrospective-commands.d.ts +12 -0
- package/dist/cli/commands/retrospective-commands.js +175 -0
- package/dist/cli/commands/reviewer-commands.d.ts +14 -0
- package/dist/cli/commands/reviewer-commands.js +64 -0
- package/dist/cli/commands/role-commands.d.ts +13 -0
- package/dist/cli/commands/role-commands.js +85 -0
- package/dist/cli/commands/runtime-commands.d.ts +52 -0
- package/dist/cli/commands/runtime-commands.js +150 -0
- package/dist/cli/commands/sc-commands.d.ts +3 -0
- package/dist/cli/commands/sc-commands.js +45 -0
- package/dist/cli/commands/scan-commands.d.ts +3 -0
- package/dist/cli/commands/scan-commands.js +445 -0
- package/dist/cli/commands/security-audit-commands.d.ts +23 -0
- package/dist/cli/commands/security-audit-commands.js +132 -0
- package/dist/cli/commands/sediment-commands.d.ts +80 -0
- package/dist/cli/commands/sediment-commands.js +649 -0
- package/dist/cli/commands/session-auto-compact-hook-command.d.ts +37 -0
- package/dist/cli/commands/session-auto-compact-hook-command.js +127 -0
- package/dist/cli/commands/session-checkpoint-command.d.ts +10 -0
- package/dist/cli/commands/session-checkpoint-command.js +100 -0
- package/dist/cli/commands/session-migrate-skill-name.d.ts +17 -0
- package/dist/cli/commands/session-migrate-skill-name.js +41 -0
- package/dist/cli/commands/session-resume-command.d.ts +11 -0
- package/dist/cli/commands/session-resume-command.js +83 -0
- package/dist/cli/commands/share-commands.d.ts +17 -0
- package/dist/cli/commands/share-commands.js +296 -0
- package/dist/cli/commands/skill-conformance-commands.d.ts +9 -0
- package/dist/cli/commands/skill-conformance-commands.js +39 -0
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.d.ts +67 -0
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +173 -0
- package/dist/cli/commands/skill-search-commands.d.ts +25 -0
- package/dist/cli/commands/skill-search-commands.js +68 -0
- package/dist/cli/commands/skill-visibility.d.ts +8 -0
- package/dist/cli/commands/skill-visibility.js +63 -0
- package/dist/cli/commands/slice-commands.d.ts +24 -0
- package/dist/cli/commands/slice-commands.js +492 -0
- package/dist/cli/commands/slice-integrate-commands.d.ts +11 -0
- package/dist/cli/commands/slice-integrate-commands.js +74 -0
- package/dist/cli/commands/slice-review-commands.d.ts +23 -0
- package/dist/cli/commands/slice-review-commands.js +162 -0
- package/dist/cli/commands/smoke-commands.d.ts +21 -0
- package/dist/cli/commands/smoke-commands.js +203 -0
- package/dist/cli/commands/sop-commands.d.ts +3 -0
- package/dist/cli/commands/sop-commands.js +215 -0
- package/dist/cli/commands/statusline-commands.d.ts +3 -0
- package/dist/cli/commands/statusline-commands.js +169 -0
- package/dist/cli/commands/sub-agent-commands.d.ts +22 -0
- package/dist/cli/commands/sub-agent-commands.js +19 -0
- package/dist/cli/commands/sub-agent-dispatch-guard.d.ts +55 -0
- package/dist/cli/commands/sub-agent-dispatch-guard.js +57 -0
- package/dist/cli/commands/sub-agent-shared.d.ts +99 -0
- package/dist/cli/commands/sub-agent-shared.js +67 -0
- package/dist/cli/commands/test-commands.d.ts +47 -0
- package/dist/cli/commands/test-commands.js +204 -0
- package/dist/cli/commands/understand-commands.d.ts +3 -0
- package/dist/cli/commands/understand-commands.js +148 -0
- package/dist/cli/commands/upgrade-commands.d.ts +23 -0
- package/dist/cli/commands/upgrade-commands.js +119 -0
- package/dist/cli/commands/user-touchpoint-commands.d.ts +18 -0
- package/dist/cli/commands/user-touchpoint-commands.js +78 -0
- package/dist/cli/commands/verdict-aggregate-command.d.ts +14 -0
- package/dist/cli/commands/verdict-aggregate-command.js +106 -0
- package/dist/cli/commands/worker-commands.d.ts +3 -0
- package/dist/cli/commands/worker-commands.js +52 -0
- package/dist/cli/commands/workflow-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-commands.js +544 -0
- package/dist/cli/commands/workflow-plan-commands.d.ts +39 -0
- package/dist/cli/commands/workflow-plan-commands.js +163 -0
- package/dist/cli/commands/workspace/clean-command.d.ts +14 -0
- package/dist/cli/commands/workspace/clean-command.js +49 -0
- package/dist/cli/commands/workspace/helpers.d.ts +28 -0
- package/dist/cli/commands/workspace/helpers.js +87 -0
- package/dist/cli/commands/workspace/init-command.d.ts +139 -0
- package/dist/cli/commands/workspace/init-command.js +505 -0
- package/dist/cli/commands/workspace/migrate-command.d.ts +11 -0
- package/dist/cli/commands/workspace/migrate-command.js +91 -0
- package/dist/cli/commands/workspace/reconcile-command.d.ts +14 -0
- package/dist/cli/commands/workspace/reconcile-command.js +103 -0
- package/dist/cli/commands/workspace-commands.d.ts +18 -0
- package/dist/cli/commands/workspace-commands.js +50 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +30 -0
- package/dist/cli/program.d.ts +5 -0
- package/dist/cli/program.js +408 -0
- package/dist/hooks/pre-tool-use-sub-agent.d.ts +28 -0
- package/dist/hooks/pre-tool-use-sub-agent.js +105 -0
- package/dist/lib/render/message-renderer.d.ts +20 -0
- package/dist/lib/render/message-renderer.js +80 -0
- package/dist/services/adapter/adapter-registry.d.ts +48 -0
- package/dist/services/adapter/adapter-registry.js +186 -0
- package/dist/services/adapter/adapter.d.ts +27 -0
- package/dist/services/adapter/adapter.js +5 -0
- package/dist/services/adapter/auto-adapter.d.ts +11 -0
- package/dist/services/adapter/auto-adapter.js +15 -0
- package/dist/services/adapter/claude-adapter.d.ts +14 -0
- package/dist/services/adapter/claude-adapter.js +40 -0
- package/dist/services/adapter/codex-adapter.d.ts +14 -0
- package/dist/services/adapter/codex-adapter.js +14 -0
- package/dist/services/adapter/copilot-adapter.d.ts +14 -0
- package/dist/services/adapter/copilot-adapter.js +14 -0
- package/dist/services/agent/ecc-agent-service.d.ts +47 -0
- package/dist/services/agent/ecc-agent-service.js +143 -0
- package/dist/services/artifacts/artifact-lint-service.d.ts +23 -0
- package/dist/services/artifacts/artifact-lint-service.js +99 -0
- package/dist/services/artifacts/artifact-prerequisites.d.ts +78 -0
- package/dist/services/artifacts/artifact-prerequisites.js +491 -0
- package/dist/services/artifacts/artifact-service.d.ts +43 -0
- package/dist/services/artifacts/artifact-service.js +98 -0
- package/dist/services/artifacts/artifact-templates.d.ts +30 -0
- package/dist/services/artifacts/artifact-templates.js +302 -0
- package/dist/services/artifacts/repair-cycle-service.d.ts +23 -0
- package/dist/services/artifacts/repair-cycle-service.js +52 -0
- package/dist/services/artifacts/request-artifact-service.d.ts +116 -0
- package/dist/services/artifacts/request-artifact-service.js +451 -0
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +51 -0
- package/dist/services/artifacts/request-artifact-state-helpers.js +114 -0
- package/dist/services/artifacts/workspace-service.d.ts +34 -0
- package/dist/services/artifacts/workspace-service.js +272 -0
- package/dist/services/audit/artifact-writer.d.ts +93 -0
- package/dist/services/audit/artifact-writer.js +303 -0
- package/dist/services/audit/audit-goal-service.d.ts +35 -0
- package/dist/services/audit/audit-goal-service.js +75 -0
- package/dist/services/audit/audit-goal-types.d.ts +40 -0
- package/dist/services/audit/audit-goal-types.js +15 -0
- package/dist/services/audit/backing-detector.d.ts +24 -0
- package/dist/services/audit/backing-detector.js +59 -0
- package/dist/services/audit/classifier.d.ts +38 -0
- package/dist/services/audit/classifier.js +134 -0
- package/dist/services/audit/decision-writer.d.ts +76 -0
- package/dist/services/audit/decision-writer.js +217 -0
- package/dist/services/audit/enforcers/active-skill-resolver.d.ts +29 -0
- package/dist/services/audit/enforcers/active-skill-resolver.js +71 -0
- package/dist/services/audit/enforcers/code-ban.d.ts +23 -0
- package/dist/services/audit/enforcers/code-ban.js +27 -0
- package/dist/services/audit/enforcers/design-draft-confirm.d.ts +24 -0
- package/dist/services/audit/enforcers/design-draft-confirm.js +58 -0
- package/dist/services/audit/enforcers/lint-audit-regression.d.ts +21 -0
- package/dist/services/audit/enforcers/lint-audit-regression.js +86 -0
- package/dist/services/audit/enforcers/lint-catalog-governance.d.ts +32 -0
- package/dist/services/audit/enforcers/lint-catalog-governance.js +48 -0
- package/dist/services/audit/enforcers/lint-cli-back.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-cli-back.js +35 -0
- package/dist/services/audit/enforcers/lint-output-style.d.ts +11 -0
- package/dist/services/audit/enforcers/lint-output-style.js +94 -0
- package/dist/services/audit/enforcers/lint-reference-integrity.d.ts +6 -0
- package/dist/services/audit/enforcers/lint-reference-integrity.js +83 -0
- package/dist/services/audit/enforcers/lint-reference-shape.d.ts +30 -0
- package/dist/services/audit/enforcers/lint-reference-shape.js +272 -0
- package/dist/services/audit/enforcers/lint-style.d.ts +49 -0
- package/dist/services/audit/enforcers/lint-style.js +173 -0
- package/dist/services/audit/enforcers/lint-workflow-shape.d.ts +4 -0
- package/dist/services/audit/enforcers/lint-workflow-shape.js +100 -0
- package/dist/services/audit/enforcers/login-gate.d.ts +23 -0
- package/dist/services/audit/enforcers/login-gate.js +40 -0
- package/dist/services/audit/enforcers/mock-placement.d.ts +25 -0
- package/dist/services/audit/enforcers/mock-placement.js +48 -0
- package/dist/services/audit/enforcers/no-root-pollution.d.ts +21 -0
- package/dist/services/audit/enforcers/no-root-pollution.js +56 -0
- package/dist/services/audit/enforcers/pre-rd-scan.d.ts +22 -0
- package/dist/services/audit/enforcers/pre-rd-scan.js +23 -0
- package/dist/services/audit/enforcers/prototype-fidelity.d.ts +25 -0
- package/dist/services/audit/enforcers/prototype-fidelity.js +75 -0
- package/dist/services/audit/enforcers/resume-detection.d.ts +21 -0
- package/dist/services/audit/enforcers/resume-detection.js +52 -0
- package/dist/services/audit/enforcers/sub-agent-sid.d.ts +25 -0
- package/dist/services/audit/enforcers/sub-agent-sid.js +63 -0
- package/dist/services/audit/prose-ratio-calculator.d.ts +45 -0
- package/dist/services/audit/prose-ratio-calculator.js +52 -0
- package/dist/services/audit/red-line-catalog-p2-a.d.ts +21 -0
- package/dist/services/audit/red-line-catalog-p2-a.js +229 -0
- package/dist/services/audit/red-line-catalog-p2-b.d.ts +19 -0
- package/dist/services/audit/red-line-catalog-p2-b.js +225 -0
- package/dist/services/audit/red-line-catalog.d.ts +51 -0
- package/dist/services/audit/red-line-catalog.js +195 -0
- package/dist/services/audit/red-lines-service.d.ts +23 -0
- package/dist/services/audit/red-lines-service.js +464 -0
- package/dist/services/audit/scanners/openspec-scanner.d.ts +15 -0
- package/dist/services/audit/scanners/openspec-scanner.js +55 -0
- package/dist/services/audit/scanners/rules-tree-scanner.d.ts +16 -0
- package/dist/services/audit/scanners/rules-tree-scanner.js +56 -0
- package/dist/services/audit/scanners/skills-tree-scanner.d.ts +17 -0
- package/dist/services/audit/scanners/skills-tree-scanner.js +68 -0
- package/dist/services/audit/static-service.d.ts +60 -0
- package/dist/services/audit/static-service.js +130 -0
- package/dist/services/audit/types.d.ts +86 -0
- package/dist/services/audit/types.js +13 -0
- package/dist/services/audit-independent/perf-audit-service.d.ts +151 -0
- package/dist/services/audit-independent/perf-audit-service.js +316 -0
- package/dist/services/audit-independent/security-audit-service.d.ts +155 -0
- package/dist/services/audit-independent/security-audit-service.js +316 -0
- package/dist/services/classify/classify-service.d.ts +42 -0
- package/dist/services/classify/classify-service.js +122 -0
- package/dist/services/classify/classify-types.d.ts +79 -0
- package/dist/services/classify/classify-types.js +90 -0
- package/dist/services/code/auto-compact-orchestrator.d.ts +98 -0
- package/dist/services/code/auto-compact-orchestrator.js +343 -0
- package/dist/services/code/batch-heartbeat-poller.d.ts +51 -0
- package/dist/services/code/batch-heartbeat-poller.js +88 -0
- package/dist/services/code/dag-orchestrator.d.ts +128 -0
- package/dist/services/code/dag-orchestrator.js +304 -0
- package/dist/services/code/emit-handoff.d.ts +49 -0
- package/dist/services/code/emit-handoff.js +79 -0
- package/dist/services/code/job-shape-decision.d.ts +71 -0
- package/dist/services/code/job-shape-decision.js +151 -0
- package/dist/services/code/mode-gate.d.ts +163 -0
- package/dist/services/code/mode-gate.js +212 -0
- package/dist/services/code/post-compact-detector.d.ts +61 -0
- package/dist/services/code/post-compact-detector.js +240 -0
- package/dist/services/code/status-line-renderer.d.ts +34 -0
- package/dist/services/code/status-line-renderer.js +55 -0
- package/dist/services/code/step-08-gate.d.ts +90 -0
- package/dist/services/code/step-08-gate.js +136 -0
- package/dist/services/code/user-touchpoint-classifier.d.ts +44 -0
- package/dist/services/code/user-touchpoint-classifier.js +145 -0
- package/dist/services/code-review/ecc-bridge.d.ts +148 -0
- package/dist/services/code-review/ecc-bridge.js +242 -0
- package/dist/services/code-review/ocr-service.d.ts +129 -0
- package/dist/services/code-review/ocr-service.js +369 -0
- package/dist/services/codegraph/codegraph-process-runner.d.ts +2 -0
- package/dist/services/codegraph/codegraph-process-runner.js +93 -0
- package/dist/services/codegraph/codegraph-service.d.ts +43 -0
- package/dist/services/codegraph/codegraph-service.js +160 -0
- package/dist/services/compact/decision-tables.d.ts +66 -0
- package/dist/services/compact/decision-tables.js +127 -0
- package/dist/services/compact/request-transition-hook.d.ts +20 -0
- package/dist/services/compact/request-transition-hook.js +110 -0
- package/dist/services/compact/suggest-service.d.ts +74 -0
- package/dist/services/compact/suggest-service.js +203 -0
- package/dist/services/complexity/complexity-estimator.d.ts +34 -0
- package/dist/services/complexity/complexity-estimator.js +64 -0
- package/dist/services/config/config-migration.d.ts +45 -0
- package/dist/services/config/config-migration.js +154 -0
- package/dist/services/config/config-restore.d.ts +10 -0
- package/dist/services/config/config-restore.js +47 -0
- package/dist/services/config/config-rollback.d.ts +13 -0
- package/dist/services/config/config-rollback.js +26 -0
- package/dist/services/config/config-safety.d.ts +40 -0
- package/dist/services/config/config-safety.js +359 -0
- package/dist/services/config/config-service.d.ts +69 -0
- package/dist/services/config/config-service.js +814 -0
- package/dist/services/config/config-types.d.ts +119 -0
- package/dist/services/config/config-types.js +18 -0
- package/dist/services/config/model-routing.d.ts +66 -0
- package/dist/services/config/model-routing.js +105 -0
- package/dist/services/config/provider-service.d.ts +48 -0
- package/dist/services/config/provider-service.js +143 -0
- package/dist/services/config/proxy-service.d.ts +21 -0
- package/dist/services/config/proxy-service.js +44 -0
- package/dist/services/config/sidecar-store.d.ts +25 -0
- package/dist/services/config/sidecar-store.js +61 -0
- package/dist/services/config/workspace-state-service.d.ts +30 -0
- package/dist/services/config/workspace-state-service.js +142 -0
- package/dist/services/context/artifact-meta.d.ts +72 -0
- package/dist/services/context/artifact-meta.js +105 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +37 -0
- package/dist/services/context/auto-compact-dispatcher.js +240 -0
- package/dist/services/context/auto-compact-reader.d.ts +51 -0
- package/dist/services/context/auto-compact-reader.js +164 -0
- package/dist/services/context/auto-compact-types.d.ts +143 -0
- package/dist/services/context/auto-compact-types.js +36 -0
- package/dist/services/context/collector.d.ts +24 -0
- package/dist/services/context/collector.js +133 -0
- package/dist/services/context/context-builder.d.ts +30 -0
- package/dist/services/context/context-builder.js +78 -0
- package/dist/services/context/context-guard.d.ts +49 -0
- package/dist/services/context/context-guard.js +91 -0
- package/dist/services/context/context-schema.d.ts +415 -0
- package/dist/services/context/context-schema.js +73 -0
- package/dist/services/context/dispatch-context-guard.d.ts +27 -0
- package/dist/services/context/dispatch-context-guard.js +192 -0
- package/dist/services/context/doc-retriever.d.ts +26 -0
- package/dist/services/context/doc-retriever.js +51 -0
- package/dist/services/context/headroom-client.d.ts +34 -0
- package/dist/services/context/headroom-client.js +117 -0
- package/dist/services/context/headroom-fetcher.d.ts +6 -0
- package/dist/services/context/headroom-fetcher.js +28 -0
- package/dist/services/context/headroom-prefs.d.ts +46 -0
- package/dist/services/context/headroom-prefs.js +34 -0
- package/dist/services/context/index.d.ts +7 -0
- package/dist/services/context/index.js +6 -0
- package/dist/services/context/main-session-monitor.d.ts +89 -0
- package/dist/services/context/main-session-monitor.js +142 -0
- package/dist/services/context/renderer.d.ts +20 -0
- package/dist/services/context/renderer.js +30 -0
- package/dist/services/context/shared-channel.d.ts +93 -0
- package/dist/services/context/shared-channel.js +308 -0
- package/dist/services/context/threshold.d.ts +35 -0
- package/dist/services/context/threshold.js +76 -0
- package/dist/services/context/tokenizer.d.ts +12 -0
- package/dist/services/context/tokenizer.js +43 -0
- package/dist/services/context/types.d.ts +93 -0
- package/dist/services/context/types.js +9 -0
- package/dist/services/crystallization/crystallization-service.d.ts +239 -0
- package/dist/services/crystallization/crystallization-service.js +397 -0
- package/dist/services/crystallization/crystallization-store.d.ts +75 -0
- package/dist/services/crystallization/crystallization-store.js +193 -0
- package/dist/services/crystallization/crystallization-types.d.ts +313 -0
- package/dist/services/crystallization/crystallization-types.js +299 -0
- package/dist/services/crystallization/evidence-brief-builder.d.ts +237 -0
- package/dist/services/crystallization/evidence-brief-builder.js +240 -0
- package/dist/services/dashboard/project-dashboard-service.d.ts +91 -0
- package/dist/services/dashboard/project-dashboard-service.js +147 -0
- package/dist/services/dispatch/batch-counter.d.ts +27 -0
- package/dist/services/dispatch/batch-counter.js +102 -0
- package/dist/services/dispatch/contract-store.d.ts +63 -0
- package/dist/services/dispatch/contract-store.js +157 -0
- package/dist/services/dispatch/dispatch-record-writer.d.ts +138 -0
- package/dist/services/dispatch/dispatch-record-writer.js +460 -0
- package/dist/services/dispatch/heartbeat-truncator.d.ts +26 -0
- package/dist/services/dispatch/heartbeat-truncator.js +13 -0
- package/dist/services/dispatch/leak-detector.d.ts +11 -0
- package/dist/services/dispatch/leak-detector.js +72 -0
- package/dist/services/dispatch/slice-dag.d.ts +81 -0
- package/dist/services/dispatch/slice-dag.js +238 -0
- package/dist/services/dispatch/sub-agent-dispatcher.d.ts +239 -0
- package/dist/services/dispatch/sub-agent-dispatcher.js +382 -0
- package/dist/services/dispatch/test-tool-detection.d.ts +36 -0
- package/dist/services/dispatch/test-tool-detection.js +46 -0
- package/dist/services/doc/doc-generator.d.ts +38 -0
- package/dist/services/doc/doc-generator.js +122 -0
- package/dist/services/doctor/doctor-service.d.ts +149 -0
- package/dist/services/doctor/doctor-service.js +929 -0
- package/dist/services/evolution/evolution-service.d.ts +137 -0
- package/dist/services/evolution/evolution-service.js +281 -0
- package/dist/services/evolution/evolution-store.d.ts +57 -0
- package/dist/services/evolution/evolution-store.js +232 -0
- package/dist/services/evolution/evolution-types.d.ts +706 -0
- package/dist/services/evolution/evolution-types.js +286 -0
- package/dist/services/evolution/independent-evaluator-runner.d.ts +90 -0
- package/dist/services/evolution/independent-evaluator-runner.js +106 -0
- package/dist/services/evolution/regression-skeptic-runner.d.ts +64 -0
- package/dist/services/evolution/regression-skeptic-runner.js +113 -0
- package/dist/services/feedback/feedback-promotion-service.d.ts +123 -0
- package/dist/services/feedback/feedback-promotion-service.js +300 -0
- package/dist/services/filesystem/file-lock.d.ts +11 -0
- package/dist/services/filesystem/file-lock.js +152 -0
- package/dist/services/final-review/final-review-service.d.ts +12 -0
- package/dist/services/final-review/final-review-service.js +52 -0
- package/dist/services/final-review/final-review-types.d.ts +42 -0
- package/dist/services/final-review/final-review-types.js +18 -0
- package/dist/services/fixture/fixture-capture-service.d.ts +87 -0
- package/dist/services/fixture/fixture-capture-service.js +317 -0
- package/dist/services/fixture/fixture-sanitize-service.d.ts +117 -0
- package/dist/services/fixture/fixture-sanitize-service.js +161 -0
- package/dist/services/fixture/index.d.ts +8 -0
- package/dist/services/fixture/index.js +8 -0
- package/dist/services/fork/fork-sync-state.d.ts +85 -0
- package/dist/services/fork/fork-sync-state.js +130 -0
- package/dist/services/fuzzy-matching/fuzzy-match-service.d.ts +15 -0
- package/dist/services/fuzzy-matching/fuzzy-match-service.js +56 -0
- package/dist/services/fuzzy-matching/fzf-pick-service.d.ts +68 -0
- package/dist/services/fuzzy-matching/fzf-pick-service.js +158 -0
- package/dist/services/fuzzy-matching/types.d.ts +20 -0
- package/dist/services/fuzzy-matching/types.js +1 -0
- package/dist/services/handoff/handoff-parser.d.ts +28 -0
- package/dist/services/handoff/handoff-parser.js +69 -0
- package/dist/services/handoff/handoff-types.d.ts +39 -0
- package/dist/services/handoff/handoff-types.js +19 -0
- package/dist/services/handoff/handoff-writer.d.ts +23 -0
- package/dist/services/handoff/handoff-writer.js +30 -0
- package/dist/services/hooks/auto-compact-hook-install.d.ts +104 -0
- package/dist/services/hooks/auto-compact-hook-install.js +157 -0
- package/dist/services/hooks/output.d.ts +92 -0
- package/dist/services/hooks/output.js +111 -0
- package/dist/services/hooks/presence-marker-detector.d.ts +16 -0
- package/dist/services/hooks/presence-marker-detector.js +105 -0
- package/dist/services/ide/adapters/claude-code-adapter.d.ts +18 -0
- package/dist/services/ide/adapters/claude-code-adapter.js +103 -0
- package/dist/services/ide/adapters/codex-adapter.d.ts +46 -0
- package/dist/services/ide/adapters/codex-adapter.js +97 -0
- package/dist/services/ide/adapters/cursor-adapter.d.ts +36 -0
- package/dist/services/ide/adapters/cursor-adapter.js +84 -0
- package/dist/services/ide/adapters/hermes-adapter.d.ts +21 -0
- package/dist/services/ide/adapters/hermes-adapter.js +51 -0
- package/dist/services/ide/adapters/openclaw-adapter.d.ts +14 -0
- package/dist/services/ide/adapters/openclaw-adapter.js +42 -0
- package/dist/services/ide/adapters/trae-adapter.d.ts +42 -0
- package/dist/services/ide/adapters/trae-adapter.js +83 -0
- package/dist/services/ide/adapters/zcode-adapter.d.ts +40 -0
- package/dist/services/ide/adapters/zcode-adapter.js +220 -0
- package/dist/services/ide/current-model-detector.d.ts +14 -0
- package/dist/services/ide/current-model-detector.js +60 -0
- package/dist/services/ide/hook-protocol.d.ts +47 -0
- package/dist/services/ide/hook-protocol.js +74 -0
- package/dist/services/ide/hook-translator.d.ts +72 -0
- package/dist/services/ide/hook-translator.js +128 -0
- package/dist/services/ide/ide-detector.d.ts +10 -0
- package/dist/services/ide/ide-detector.js +19 -0
- package/dist/services/ide/ide-registry.d.ts +14 -0
- package/dist/services/ide/ide-registry.js +63 -0
- package/dist/services/ide/ide-types.d.ts +253 -0
- package/dist/services/ide/ide-types.js +2 -0
- package/dist/services/ide/resource-profile.d.ts +52 -0
- package/dist/services/ide/resource-profile.js +33 -0
- package/dist/services/ide/shared/atomic-json.d.ts +15 -0
- package/dist/services/ide/shared/atomic-json.js +58 -0
- package/dist/services/ide/shared/safe-path.d.ts +11 -0
- package/dist/services/ide/shared/safe-path.js +29 -0
- package/dist/services/impact/impact-scan-service.d.ts +66 -0
- package/dist/services/impact/impact-scan-service.js +197 -0
- package/dist/services/job/job-event-emitter.d.ts +30 -0
- package/dist/services/job/job-event-emitter.js +5 -0
- package/dist/services/job/job-orchestrator.d.ts +50 -0
- package/dist/services/job/job-orchestrator.js +104 -0
- package/dist/services/job/job-progress-store.d.ts +60 -0
- package/dist/services/job/job-progress-store.js +70 -0
- package/dist/services/job/job-resource-snapshot.d.ts +7 -0
- package/dist/services/job/job-resource-snapshot.js +75 -0
- package/dist/services/job/job-rotation.d.ts +17 -0
- package/dist/services/job/job-rotation.js +30 -0
- package/dist/services/job/job-state-store.d.ts +24 -0
- package/dist/services/job/job-state-store.js +60 -0
- package/dist/services/job/job-types.d.ts +444 -0
- package/dist/services/job/job-types.js +87 -0
- package/dist/services/job/subagent-job-wrapper.d.ts +35 -0
- package/dist/services/job/subagent-job-wrapper.js +30 -0
- package/dist/services/legacy/legacy-detector.d.ts +34 -0
- package/dist/services/legacy/legacy-detector.js +111 -0
- package/dist/services/log/log-commands-service.d.ts +54 -0
- package/dist/services/log/log-commands-service.js +83 -0
- package/dist/services/log/logger.d.ts +103 -0
- package/dist/services/log/logger.js +224 -0
- package/dist/services/log/redact.d.ts +32 -0
- package/dist/services/log/redact.js +89 -0
- package/dist/services/log/retention.d.ts +34 -0
- package/dist/services/log/retention.js +78 -0
- package/dist/services/loop/evaluator-dispatcher.d.ts +50 -0
- package/dist/services/loop/evaluator-dispatcher.js +552 -0
- package/dist/services/loop/loop-bee-relation-service.d.ts +107 -0
- package/dist/services/loop/loop-bee-relation-service.js +211 -0
- package/dist/services/loop/loop-bee-relation-store.d.ts +53 -0
- package/dist/services/loop/loop-bee-relation-store.js +130 -0
- package/dist/services/loop/loop-bee-relation-types.d.ts +118 -0
- package/dist/services/loop/loop-bee-relation-types.js +114 -0
- package/dist/services/loop/loop-release-service.d.ts +46 -0
- package/dist/services/loop/loop-release-service.js +66 -0
- package/dist/services/loop/loop-release-store.d.ts +55 -0
- package/dist/services/loop/loop-release-store.js +134 -0
- package/dist/services/loop/loop-release-types.d.ts +250 -0
- package/dist/services/loop/loop-release-types.js +162 -0
- package/dist/services/loop/monotonic-guard.d.ts +80 -0
- package/dist/services/loop/monotonic-guard.js +232 -0
- package/dist/services/loop/monotonic-runner.d.ts +58 -0
- package/dist/services/loop/monotonic-runner.js +231 -0
- package/dist/services/loop/run-driver.d.ts +70 -0
- package/dist/services/loop/run-driver.js +400 -0
- package/dist/services/loop/spec-service.d.ts +90 -0
- package/dist/services/loop/spec-service.js +497 -0
- package/dist/services/memory/llm-reranker.d.ts +174 -0
- package/dist/services/memory/llm-reranker.js +284 -0
- package/dist/services/memory/memory-search-service.d.ts +93 -0
- package/dist/services/memory/memory-search-service.js +117 -0
- package/dist/services/memory/project-context-service.d.ts +21 -0
- package/dist/services/memory/project-context-service.js +161 -0
- package/dist/services/memory/project-memory-service.d.ts +167 -0
- package/dist/services/memory/project-memory-service.js +817 -0
- package/dist/services/migrate-skill-name/migrate.d.ts +17 -0
- package/dist/services/migrate-skill-name/migrate.js +152 -0
- package/dist/services/migrate-skill-name/schema.d.ts +42 -0
- package/dist/services/migrate-skill-name/schema.js +25 -0
- package/dist/services/migration/v2-10-to-v2-11-service.d.ts +44 -0
- package/dist/services/migration/v2-10-to-v2-11-service.js +190 -0
- package/dist/services/migration/v2-10-to-v2-11-types.d.ts +41 -0
- package/dist/services/migration/v2-10-to-v2-11-types.js +23 -0
- package/dist/services/mode/bypass-tracker.d.ts +4 -0
- package/dist/services/mode/bypass-tracker.js +31 -0
- package/dist/services/mode/mode-enforcement.d.ts +14 -0
- package/dist/services/mode/mode-enforcement.js +84 -0
- package/dist/services/mut/assert-scanner.d.ts +6 -0
- package/dist/services/mut/assert-scanner.js +116 -0
- package/dist/services/mut/index.d.ts +8 -0
- package/dist/services/mut/index.js +7 -0
- package/dist/services/mut/mut-runner.d.ts +39 -0
- package/dist/services/mut/mut-runner.js +29 -0
- package/dist/services/mut/production-stryker.d.ts +2 -0
- package/dist/services/mut/production-stryker.js +75 -0
- package/dist/services/mut/report-builder.d.ts +11 -0
- package/dist/services/mut/report-builder.js +110 -0
- package/dist/services/mut/report-loader.d.ts +31 -0
- package/dist/services/mut/report-loader.js +78 -0
- package/dist/services/mut/thresholds.d.ts +21 -0
- package/dist/services/mut/thresholds.js +22 -0
- package/dist/services/mut/types.d.ts +336 -0
- package/dist/services/mut/types.js +59 -0
- package/dist/services/observability/aggregation.d.ts +64 -0
- package/dist/services/observability/aggregation.js +217 -0
- package/dist/services/observability/jsonl-store.d.ts +59 -0
- package/dist/services/observability/jsonl-store.js +120 -0
- package/dist/services/observability/observability-service.d.ts +95 -0
- package/dist/services/observability/observability-service.js +119 -0
- package/dist/services/observability/report-formatter.d.ts +42 -0
- package/dist/services/observability/report-formatter.js +156 -0
- package/dist/services/openspec/openspec-archive-service.d.ts +12 -0
- package/dist/services/openspec/openspec-archive-service.js +28 -0
- package/dist/services/openspec/openspec-bridge-service.d.ts +16 -0
- package/dist/services/openspec/openspec-bridge-service.js +76 -0
- package/dist/services/openspec/openspec-init-service.d.ts +23 -0
- package/dist/services/openspec/openspec-init-service.js +122 -0
- package/dist/services/openspec/openspec-propose-from-doctor-service.d.ts +31 -0
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +95 -0
- package/dist/services/openspec/openspec-render-service.d.ts +38 -0
- package/dist/services/openspec/openspec-render-service.js +130 -0
- package/dist/services/openspec/openspec-scan-service.d.ts +6 -0
- package/dist/services/openspec/openspec-scan-service.js +123 -0
- package/dist/services/openspec/openspec-types.d.ts +39 -0
- package/dist/services/openspec/openspec-types.js +1 -0
- package/dist/services/openspec/openspec-validate-service.d.ts +27 -0
- package/dist/services/openspec/openspec-validate-service.js +77 -0
- package/dist/services/perf/perf-baseline-service.d.ts +70 -0
- package/dist/services/perf/perf-baseline-service.js +214 -0
- package/dist/services/polyrepo/polyrepo-dispatcher.d.ts +34 -0
- package/dist/services/polyrepo/polyrepo-dispatcher.js +119 -0
- package/dist/services/polyrepo/polyrepo-scanner.d.ts +9 -0
- package/dist/services/polyrepo/polyrepo-scanner.js +94 -0
- package/dist/services/polyrepo/polyrepo-service.d.ts +34 -0
- package/dist/services/polyrepo/polyrepo-service.js +49 -0
- package/dist/services/polyrepo/polyrepo-types.d.ts +55 -0
- package/dist/services/polyrepo/polyrepo-types.js +1 -0
- package/dist/services/prd/handoff-auto-regen.d.ts +22 -0
- package/dist/services/prd/handoff-auto-regen.js +73 -0
- package/dist/services/prd/handoff-service.d.ts +54 -0
- package/dist/services/prd/handoff-service.js +142 -0
- package/dist/services/prd/handoff-types.d.ts +64 -0
- package/dist/services/prd/handoff-types.js +22 -0
- package/dist/services/prd/prd-blocks-checker.d.ts +51 -0
- package/dist/services/prd/prd-blocks-checker.js +130 -0
- package/dist/services/prd/project-scan-bootstrap-service.d.ts +52 -0
- package/dist/services/prd/project-scan-bootstrap-service.js +445 -0
- package/dist/services/prd/project-scan-reader.d.ts +24 -0
- package/dist/services/prd/project-scan-reader.js +150 -0
- package/dist/services/prd/project-scan-sediment.d.ts +97 -0
- package/dist/services/prd/project-scan-sediment.js +445 -0
- package/dist/services/prd/project-scan-types.d.ts +66 -0
- package/dist/services/prd/project-scan-types.js +20 -0
- package/dist/services/preferences/preferences-service.d.ts +38 -0
- package/dist/services/preferences/preferences-service.js +198 -0
- package/dist/services/preferences/preferences-types.d.ts +148 -0
- package/dist/services/preferences/preferences-types.js +53 -0
- package/dist/services/profiles/profile-service.d.ts +6 -0
- package/dist/services/profiles/profile-service.js +19 -0
- package/dist/services/progress/progress-service.d.ts +125 -0
- package/dist/services/progress/progress-service.js +192 -0
- package/dist/services/providers/minimax-provider-service.d.ts +24 -0
- package/dist/services/providers/minimax-provider-service.js +143 -0
- package/dist/services/providers/minimax-worker-service.d.ts +21 -0
- package/dist/services/providers/minimax-worker-service.js +83 -0
- package/dist/services/proxy/proxy-service.d.ts +7 -0
- package/dist/services/proxy/proxy-service.js +31 -0
- package/dist/services/qa/browser-event-logger.d.ts +40 -0
- package/dist/services/qa/browser-event-logger.js +54 -0
- package/dist/services/qa/browser-restart-detector.d.ts +74 -0
- package/dist/services/qa/browser-restart-detector.js +138 -0
- package/dist/services/qa/browser-reuse-hint.d.ts +18 -0
- package/dist/services/qa/browser-reuse-hint.js +18 -0
- package/dist/services/qa/browser-wrapper-service.d.ts +37 -0
- package/dist/services/qa/browser-wrapper-service.js +88 -0
- package/dist/services/qa/qa-business-review-state.d.ts +47 -0
- package/dist/services/qa/qa-business-review-state.js +96 -0
- package/dist/services/rd/ast-gate.d.ts +19 -0
- package/dist/services/rd/ast-gate.js +71 -0
- package/dist/services/rd/impl.d.ts +9 -0
- package/dist/services/rd/impl.js +57 -0
- package/dist/services/rd/rd-service.d.ts +129 -0
- package/dist/services/rd/rd-service.js +441 -0
- package/dist/services/rd/reviewer-dispatch-policy.d.ts +122 -0
- package/dist/services/rd/reviewer-dispatch-policy.js +148 -0
- package/dist/services/rd/standards-diagnostic.d.ts +76 -0
- package/dist/services/rd/standards-diagnostic.js +166 -0
- package/dist/services/rd/strategic-stage.d.ts +4 -0
- package/dist/services/rd/strategic-stage.js +15 -0
- package/dist/services/rd/strategy.d.ts +13 -0
- package/dist/services/rd/strategy.js +60 -0
- package/dist/services/rd/tactical-stage.d.ts +33 -0
- package/dist/services/rd/tactical-stage.js +62 -0
- package/dist/services/rd/types.d.ts +252 -0
- package/dist/services/rd/types.js +47 -0
- package/dist/services/recommendations/capability-availability.d.ts +5 -0
- package/dist/services/recommendations/capability-availability.js +40 -0
- package/dist/services/recommendations/capability-map-service.d.ts +7 -0
- package/dist/services/recommendations/capability-map-service.js +131 -0
- package/dist/services/recommendations/capability-seed-items.d.ts +2 -0
- package/dist/services/recommendations/capability-seed-items.js +140 -0
- package/dist/services/recommendations/capability-seed-mappings.d.ts +2 -0
- package/dist/services/recommendations/capability-seed-mappings.js +54 -0
- package/dist/services/recommendations/capability-seed-sources.d.ts +2 -0
- package/dist/services/recommendations/capability-seed-sources.js +35 -0
- package/dist/services/recommendations/recommendation-service.d.ts +8 -0
- package/dist/services/recommendations/recommendation-service.js +106 -0
- package/dist/services/recommendations/recommendation-types.d.ts +129 -0
- package/dist/services/recommendations/recommendation-types.js +1 -0
- package/dist/services/recommendations/seed-capability-catalog.d.ts +3 -0
- package/dist/services/recommendations/seed-capability-catalog.js +3 -0
- package/dist/services/refactor/refactor-service.d.ts +9 -0
- package/dist/services/refactor/refactor-service.js +36 -0
- package/dist/services/release/release-state.d.ts +70 -0
- package/dist/services/release/release-state.js +140 -0
- package/dist/services/retrospective/retrospective-index.d.ts +37 -0
- package/dist/services/retrospective/retrospective-index.js +110 -0
- package/dist/services/retrospective/retrospective-search-service.d.ts +55 -0
- package/dist/services/retrospective/retrospective-search-service.js +107 -0
- package/dist/services/retrospective/retrospective-show.d.ts +40 -0
- package/dist/services/retrospective/retrospective-show.js +109 -0
- package/dist/services/reviewer/model-family.d.ts +18 -0
- package/dist/services/reviewer/model-family.js +70 -0
- package/dist/services/reviewer/providers/anthropic.d.ts +2 -0
- package/dist/services/reviewer/providers/anthropic.js +61 -0
- package/dist/services/reviewer/providers/ollama.d.ts +26 -0
- package/dist/services/reviewer/providers/ollama.js +38 -0
- package/dist/services/reviewer/providers/openai.d.ts +2 -0
- package/dist/services/reviewer/providers/openai.js +63 -0
- package/dist/services/reviewer/reviewer-config.d.ts +34 -0
- package/dist/services/reviewer/reviewer-config.js +100 -0
- package/dist/services/reviewer/reviewer-service.d.ts +56 -0
- package/dist/services/reviewer/reviewer-service.js +263 -0
- package/dist/services/reviewer/selection-strategies.d.ts +27 -0
- package/dist/services/reviewer/selection-strategies.js +53 -0
- package/dist/services/role/role-registry.d.ts +38 -0
- package/dist/services/role/role-registry.js +83 -0
- package/dist/services/runtime/runtime-detector.d.ts +15 -0
- package/dist/services/runtime/runtime-detector.js +62 -0
- package/dist/services/runtime/runtime-service.d.ts +59 -0
- package/dist/services/runtime/runtime-service.js +51 -0
- package/dist/services/runtime/vendor-adapter.d.ts +59 -0
- package/dist/services/runtime/vendor-adapter.js +1 -0
- package/dist/services/runtime/vendors/claude-code.d.ts +7 -0
- package/dist/services/runtime/vendors/claude-code.js +39 -0
- package/dist/services/runtime/vendors/codex.d.ts +7 -0
- package/dist/services/runtime/vendors/codex.js +43 -0
- package/dist/services/runtime/vendors/copilot.d.ts +7 -0
- package/dist/services/runtime/vendors/copilot.js +40 -0
- package/dist/services/sc/index.d.ts +1 -0
- package/dist/services/sc/index.js +1 -0
- package/dist/services/sc/sc-service.d.ts +131 -0
- package/dist/services/sc/sc-service.js +552 -0
- package/dist/services/scan/acceptance-coverage-service.d.ts +42 -0
- package/dist/services/scan/acceptance-coverage-service.js +140 -0
- package/dist/services/scan/api-surface-service.d.ts +69 -0
- package/dist/services/scan/api-surface-service.js +239 -0
- package/dist/services/scan/archetype-service.d.ts +5 -0
- package/dist/services/scan/archetype-service.js +254 -0
- package/dist/services/scan/diff-scope-service.d.ts +40 -0
- package/dist/services/scan/diff-scope-service.js +198 -0
- package/dist/services/scan/existing-system-service.d.ts +7 -0
- package/dist/services/scan/existing-system-service.js +300 -0
- package/dist/services/scan/file-size-scan.d.ts +23 -0
- package/dist/services/scan/file-size-scan.js +68 -0
- package/dist/services/scan/karpathy-service.d.ts +60 -0
- package/dist/services/scan/karpathy-service.js +228 -0
- package/dist/services/scan/libraries-service.d.ts +24 -0
- package/dist/services/scan/libraries-service.js +419 -0
- package/dist/services/scan/libraries-types.d.ts +59 -0
- package/dist/services/scan/libraries-types.js +9 -0
- package/dist/services/scan/orphan-service.d.ts +76 -0
- package/dist/services/scan/orphan-service.js +538 -0
- package/dist/services/scan/scan-types.d.ts +59 -0
- package/dist/services/scan/scan-types.js +1 -0
- package/dist/services/scan/type-sanity-service.d.ts +23 -0
- package/dist/services/scan/type-sanity-service.js +116 -0
- package/dist/services/security/safe-settings-path.d.ts +12 -0
- package/dist/services/security/safe-settings-path.js +104 -0
- package/dist/services/sediment/dispose-confirm.d.ts +9 -0
- package/dist/services/sediment/dispose-confirm.js +5 -0
- package/dist/services/sediment/json-schema.d.ts +247 -0
- package/dist/services/sediment/json-schema.js +26 -0
- package/dist/services/sediment/manifest-lint.d.ts +13 -0
- package/dist/services/sediment/manifest-lint.js +11 -0
- package/dist/services/sediment/pool-paths.d.ts +22 -0
- package/dist/services/sediment/pool-paths.js +25 -0
- package/dist/services/sediment/pool-read.d.ts +20 -0
- package/dist/services/sediment/pool-read.js +73 -0
- package/dist/services/sediment/pool-rebuild-index.d.ts +15 -0
- package/dist/services/sediment/pool-rebuild-index.js +28 -0
- package/dist/services/sediment/pool-write.d.ts +14 -0
- package/dist/services/sediment/pool-write.js +25 -0
- package/dist/services/sediment/promotion-gate.d.ts +12 -0
- package/dist/services/sediment/promotion-gate.js +20 -0
- package/dist/services/sediment/types.d.ts +52 -0
- package/dist/services/sediment/types.js +1 -0
- package/dist/services/session/binding-status-service.d.ts +56 -0
- package/dist/services/session/binding-status-service.js +106 -0
- package/dist/services/session/binding-store.d.ts +161 -0
- package/dist/services/session/binding-store.js +509 -0
- package/dist/services/session/caller-binding-service.d.ts +70 -0
- package/dist/services/session/caller-binding-service.js +148 -0
- package/dist/services/session/caller-id-types.d.ts +77 -0
- package/dist/services/session/caller-id-types.js +46 -0
- package/dist/services/session/getSessionDir.d.ts +1 -0
- package/dist/services/session/getSessionDir.js +27 -0
- package/dist/services/session/index.d.ts +6 -0
- package/dist/services/session/index.js +7 -0
- package/dist/services/session/platform-fallbacks.d.ts +31 -0
- package/dist/services/session/platform-fallbacks.js +35 -0
- package/dist/services/session/resolve-caller-id.d.ts +57 -0
- package/dist/services/session/resolve-caller-id.js +88 -0
- package/dist/services/session/session-binding-bridge.d.ts +76 -0
- package/dist/services/session/session-binding-bridge.js +247 -0
- package/dist/services/session/session-checkpoint-service.d.ts +57 -0
- package/dist/services/session/session-checkpoint-service.js +143 -0
- package/dist/services/session/session-manager.d.ts +168 -0
- package/dist/services/session/session-manager.js +502 -0
- package/dist/services/session/session-resume-service.d.ts +25 -0
- package/dist/services/session/session-resume-service.js +101 -0
- package/dist/services/share/bundle-reader.d.ts +100 -0
- package/dist/services/share/bundle-reader.js +434 -0
- package/dist/services/share/bundle-types.d.ts +392 -0
- package/dist/services/share/bundle-types.js +318 -0
- package/dist/services/share/bundle-writer.d.ts +97 -0
- package/dist/services/share/bundle-writer.js +429 -0
- package/dist/services/share/run-state-contract.d.ts +133 -0
- package/dist/services/share/run-state-contract.js +138 -0
- package/dist/services/signal/cancel-handler.d.ts +14 -0
- package/dist/services/signal/cancel-handler.js +76 -0
- package/dist/services/skill/resume-detector.d.ts +54 -0
- package/dist/services/skill/resume-detector.js +334 -0
- package/dist/services/skill/skill-scheduler.d.ts +40 -0
- package/dist/services/skill/skill-scheduler.js +53 -0
- package/dist/services/skill/skill-search-service.d.ts +88 -0
- package/dist/services/skill/skill-search-service.js +228 -0
- package/dist/services/skillhub/release-diff.d.ts +18 -0
- package/dist/services/skillhub/release-diff.js +38 -0
- package/dist/services/skillhub/release-export.d.ts +8 -0
- package/dist/services/skillhub/release-export.js +31 -0
- package/dist/services/skillhub/release-gc-blobs.d.ts +13 -0
- package/dist/services/skillhub/release-gc-blobs.js +32 -0
- package/dist/services/skillhub/release-import.d.ts +7 -0
- package/dist/services/skillhub/release-import.js +64 -0
- package/dist/services/skillhub/release-retain.d.ts +23 -0
- package/dist/services/skillhub/release-retain.js +94 -0
- package/dist/services/skillhub/sqlite-store.d.ts +22 -0
- package/dist/services/skillhub/sqlite-store.js +63 -0
- package/dist/services/skillhub/tar-runtime.d.ts +21 -0
- package/dist/services/skillhub/tar-runtime.js +91 -0
- package/dist/services/skillhub/types.d.ts +115 -0
- package/dist/services/skillhub/types.js +1 -0
- package/dist/services/skills/hooks-settings-service.d.ts +137 -0
- package/dist/services/skills/hooks-settings-service.js +396 -0
- package/dist/services/skills/skill-conformance-service.d.ts +40 -0
- package/dist/services/skills/skill-conformance-service.js +139 -0
- package/dist/services/skills/skill-presence-service.d.ts +158 -0
- package/dist/services/skills/skill-presence-service.js +474 -0
- package/dist/services/skills/skill-registry.d.ts +17 -0
- package/dist/services/skills/skill-registry.js +67 -0
- package/dist/services/skills/skill-runbook-service.d.ts +11 -0
- package/dist/services/skills/skill-runbook-service.js +128 -0
- package/dist/services/skills/skill-statusline-renderer.d.ts +6 -0
- package/dist/services/skills/skill-statusline-renderer.js +55 -0
- package/dist/services/skills/skill-statusline-service.d.ts +24 -0
- package/dist/services/skills/skill-statusline-service.js +110 -0
- package/dist/services/skills/statusline-settings-service.d.ts +59 -0
- package/dist/services/skills/statusline-settings-service.js +141 -0
- package/dist/services/skills/sync-service.d.ts +86 -0
- package/dist/services/skills/sync-service.js +271 -0
- package/dist/services/slice/calibration-store.d.ts +39 -0
- package/dist/services/slice/calibration-store.js +68 -0
- package/dist/services/slice/cross-pass-edge-merger.d.ts +53 -0
- package/dist/services/slice/cross-pass-edge-merger.js +246 -0
- package/dist/services/slice/granularity-decider.d.ts +37 -0
- package/dist/services/slice/granularity-decider.js +40 -0
- package/dist/services/slice/llm-arbitrator.d.ts +35 -0
- package/dist/services/slice/llm-arbitrator.js +63 -0
- package/dist/services/slice/multi-pass-orchestrator.d.ts +67 -0
- package/dist/services/slice/multi-pass-orchestrator.js +225 -0
- package/dist/services/slice/schema-router.d.ts +44 -0
- package/dist/services/slice/schema-router.js +61 -0
- package/dist/services/slice/slice-archive-service.d.ts +20 -0
- package/dist/services/slice/slice-archive-service.js +111 -0
- package/dist/services/slice/slice-benchmark-service.d.ts +19 -0
- package/dist/services/slice/slice-benchmark-service.js +60 -0
- package/dist/services/slice/slice-check-service.d.ts +2 -0
- package/dist/services/slice/slice-check-service.js +459 -0
- package/dist/services/slice/slice-check-types.d.ts +104 -0
- package/dist/services/slice/slice-check-types.js +28 -0
- package/dist/services/slice/slice-decompose-runners.d.ts +23 -0
- package/dist/services/slice/slice-decompose-runners.js +174 -0
- package/dist/services/slice/slice-decompose-service.d.ts +24 -0
- package/dist/services/slice/slice-decompose-service.js +532 -0
- package/dist/services/slice/slice-decompose-types.d.ts +263 -0
- package/dist/services/slice/slice-decompose-types.js +30 -0
- package/dist/services/slice/slice-integration.d.ts +43 -0
- package/dist/services/slice/slice-integration.js +106 -0
- package/dist/services/slice/slice-pick-service.d.ts +32 -0
- package/dist/services/slice/slice-pick-service.js +75 -0
- package/dist/services/slice/slice-review-state.d.ts +70 -0
- package/dist/services/slice/slice-review-state.js +109 -0
- package/dist/services/slice/slice-topology-types.d.ts +115 -0
- package/dist/services/slice/slice-topology-types.js +20 -0
- package/dist/services/smoke/smoke-paths-state.d.ts +73 -0
- package/dist/services/smoke/smoke-paths-state.js +117 -0
- package/dist/services/sop/gate-enforce-service.d.ts +33 -0
- package/dist/services/sop/gate-enforce-service.js +168 -0
- package/dist/services/sop/sop-advance-service.d.ts +74 -0
- package/dist/services/sop/sop-advance-service.js +115 -0
- package/dist/services/sop/sop-check-service.d.ts +45 -0
- package/dist/services/sop/sop-check-service.js +181 -0
- package/dist/services/sop/sop-paths.d.ts +62 -0
- package/dist/services/sop/sop-paths.js +92 -0
- package/dist/services/sop/sop-registry-service.d.ts +46 -0
- package/dist/services/sop/sop-registry-service.js +89 -0
- package/dist/services/sop/sop-service.d.ts +55 -0
- package/dist/services/sop/sop-service.js +222 -0
- package/dist/services/sop/sop-types.d.ts +95 -0
- package/dist/services/sop/sop-types.js +11 -0
- package/dist/services/standards/ide-aware-standards-service.d.ts +94 -0
- package/dist/services/standards/ide-aware-standards-service.js +91 -0
- package/dist/services/standards/loop-engineering-lint.d.ts +38 -0
- package/dist/services/standards/loop-engineering-lint.js +101 -0
- package/dist/services/standards/loop-engineering-readiness-lint.d.ts +111 -0
- package/dist/services/standards/loop-engineering-readiness-lint.js +248 -0
- package/dist/services/standards/migrate-claude-rules-service.d.ts +19 -0
- package/dist/services/standards/migrate-claude-rules-service.js +214 -0
- package/dist/services/standards/migrate-service.d.ts +63 -0
- package/dist/services/standards/migrate-service.js +193 -0
- package/dist/services/standards/missing-standards-detector.d.ts +81 -0
- package/dist/services/standards/missing-standards-detector.js +139 -0
- package/dist/services/standards/project-context.d.ts +24 -0
- package/dist/services/standards/project-context.js +314 -0
- package/dist/services/standards/project-standards-service.d.ts +114 -0
- package/dist/services/standards/project-standards-service.js +693 -0
- package/dist/services/tech/tech-service.d.ts +69 -0
- package/dist/services/tech/tech-service.js +299 -0
- package/dist/services/test-cache/test-cache-service.d.ts +70 -0
- package/dist/services/test-cache/test-cache-service.js +175 -0
- package/dist/services/understand/hybrid-types.d.ts +32 -0
- package/dist/services/understand/hybrid-types.js +1 -0
- package/dist/services/understand/understand-hybrid-service.d.ts +10 -0
- package/dist/services/understand/understand-hybrid-service.js +100 -0
- package/dist/services/understand/understand-scan-service.d.ts +28 -0
- package/dist/services/understand/understand-scan-service.js +170 -0
- package/dist/services/understand/understand-types.d.ts +50 -0
- package/dist/services/understand/understand-types.js +1 -0
- package/dist/services/upgrade/1x-detector-service.d.ts +7 -0
- package/dist/services/upgrade/1x-detector-service.js +94 -0
- package/dist/services/upgrade/gitignore-migrate-service.d.ts +56 -0
- package/dist/services/upgrade/gitignore-migrate-service.js +170 -0
- package/dist/services/upgrade/upgrade-service.d.ts +81 -0
- package/dist/services/upgrade/upgrade-service.js +403 -0
- package/dist/services/verdict/envelopes.d.ts +93 -0
- package/dist/services/verdict/envelopes.js +349 -0
- package/dist/services/verdict/verdict-aggregator.d.ts +94 -0
- package/dist/services/verdict/verdict-aggregator.js +112 -0
- package/dist/services/workflow/artifact-paths.d.ts +59 -0
- package/dist/services/workflow/artifact-paths.js +166 -0
- package/dist/services/workflow/autonomous-resume-writer.d.ts +16 -0
- package/dist/services/workflow/autonomous-resume-writer.js +170 -0
- package/dist/services/workflow/pipeline-verify-service.d.ts +90 -0
- package/dist/services/workflow/pipeline-verify-service.js +449 -0
- package/dist/services/workflow/plan-reader.d.ts +29 -0
- package/dist/services/workflow/plan-reader.js +174 -0
- package/dist/services/workflow/plan-refresher.d.ts +32 -0
- package/dist/services/workflow/plan-refresher.js +353 -0
- package/dist/services/workflow/plan-trigger-detector.d.ts +55 -0
- package/dist/services/workflow/plan-trigger-detector.js +142 -0
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +19 -0
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +300 -0
- package/dist/services/workflow/workflow-autonomous-service.d.ts +100 -0
- package/dist/services/workflow/workflow-autonomous-service.js +306 -0
- package/dist/services/workflow/workflow-loader.d.ts +63 -0
- package/dist/services/workflow/workflow-loader.js +168 -0
- package/dist/services/workflow/workflow-router-service.d.ts +85 -0
- package/dist/services/workflow/workflow-router-service.js +233 -0
- package/dist/services/workflow/workflow-skip-service.d.ts +106 -0
- package/dist/services/workflow/workflow-skip-service.js +209 -0
- package/dist/services/workflow/workflow-spec.d.ts +116 -0
- package/dist/services/workflow/workflow-spec.js +431 -0
- package/dist/services/workflow/workflow-state-store.d.ts +27 -0
- package/dist/services/workflow/workflow-state-store.js +95 -0
- package/dist/services/workspace/claude-settings-template.d.ts +101 -0
- package/dist/services/workspace/claude-settings-template.js +254 -0
- package/dist/services/workspace/migrate-1-4-1-service.d.ts +44 -0
- package/dist/services/workspace/migrate-1-4-1-service.js +195 -0
- package/dist/services/workspace/migrate-service.d.ts +2 -0
- package/dist/services/workspace/migrate-service.js +613 -0
- package/dist/services/workspace/migrate-types.d.ts +127 -0
- package/dist/services/workspace/migrate-types.js +21 -0
- package/dist/services/workspace/reconcile-service.d.ts +188 -0
- package/dist/services/workspace/reconcile-service.js +683 -0
- package/dist/services/workspace/reconcile-types.d.ts +130 -0
- package/dist/services/workspace/reconcile-types.js +13 -0
- package/dist/services/workspace/sid-naming-guard.d.ts +17 -0
- package/dist/services/workspace/sid-naming-guard.js +34 -0
- package/dist/services/workspace/templates/project-scan/audit-output-schema.md +100 -0
- package/dist/services/workspace/templates/project-scan/business-knowledge.md +44 -0
- package/dist/services/workspace/templates/project-scan/index.d.ts +34 -0
- package/dist/services/workspace/templates/project-scan/index.js +60 -0
- package/dist/services/workspace/templates/project-scan/perf-template.md +109 -0
- package/dist/services/workspace/templates/project-scan/security-template.md +99 -0
- package/dist/services/workspace/workspace-claude-settings-materializer.d.ts +45 -0
- package/dist/services/workspace/workspace-claude-settings-materializer.js +194 -0
- package/dist/services/workspace/workspace-clean-service.d.ts +28 -0
- package/dist/services/workspace/workspace-clean-service.js +46 -0
- package/dist/services/workspace/workspace-service.d.ts +177 -0
- package/dist/services/workspace/workspace-service.js +432 -0
- package/dist/services/workspace/workspace-state-service.d.ts +7 -0
- package/dist/services/workspace/workspace-state-service.js +43 -0
- package/dist/shared/format-md-compact.d.ts +32 -0
- package/dist/shared/format-md-compact.js +297 -0
- package/dist/shared/frontmatter.d.ts +6 -0
- package/dist/shared/frontmatter.js +165 -0
- package/dist/shared/fs-utils.d.ts +4 -0
- package/dist/shared/fs-utils.js +16 -0
- package/dist/shared/fs.d.ts +4 -0
- package/dist/shared/fs.js +26 -0
- package/dist/shared/incrementing-number.d.ts +23 -0
- package/dist/shared/incrementing-number.js +68 -0
- package/dist/shared/json-schema-mini.d.ts +10 -0
- package/dist/shared/json-schema-mini.js +113 -0
- package/dist/shared/path-safety.d.ts +21 -0
- package/dist/shared/path-safety.js +54 -0
- package/dist/shared/path-utils.d.ts +13 -0
- package/dist/shared/path-utils.js +56 -0
- package/dist/shared/paths.d.ts +6 -0
- package/dist/shared/paths.js +50 -0
- package/dist/shared/planner-response.d.ts +21 -0
- package/dist/shared/planner-response.js +26 -0
- package/dist/shared/platform.d.ts +6 -0
- package/dist/shared/platform.js +11 -0
- package/dist/shared/process.d.ts +5 -0
- package/dist/shared/process.js +12 -0
- package/dist/shared/result.d.ts +22 -0
- package/dist/shared/result.js +46 -0
- package/dist/shared/stale-policy.d.ts +67 -0
- package/dist/shared/stale-policy.js +85 -0
- package/dist/shared/version.d.ts +1 -0
- package/dist/shared/version.js +1 -0
- package/dist/skills/peaks-maker/index.d.ts +5 -0
- package/dist/skills/peaks-maker/index.js +32 -0
- package/package.json +5 -4
- package/scripts/copy-templates.mjs +1 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 2026-06-16-playwright-restart-loop — G1.
|
|
3
|
+
*
|
|
4
|
+
* BrowserRestartDetector
|
|
5
|
+
*
|
|
6
|
+
* Watches a stream of `mcp__playwright__browser_*` tool invocations
|
|
7
|
+
* (synthetic, fed in by tests or by the sub-agent-progress signal)
|
|
8
|
+
* and emits a halt signal when the model repeatedly tears down
|
|
9
|
+
* and re-spawns the browser context.
|
|
10
|
+
*
|
|
11
|
+
* The detector is intentionally simple and dependency-free:
|
|
12
|
+
* - `record(event)` appends one event to a ring buffer.
|
|
13
|
+
* - `shouldHalt()` returns true when >= `maxRestarts` close->navigate
|
|
14
|
+
* pairs have occurred within `windowMs` of each other.
|
|
15
|
+
* - `diagnostic()` renders the user-facing message.
|
|
16
|
+
*
|
|
17
|
+
* It does NOT call playwright MCP. It does NOT spawn processes. It
|
|
18
|
+
* only inspects the synthetic event log.
|
|
19
|
+
*
|
|
20
|
+
* R2 (per PRD): server-restart is a different MCP-level event;
|
|
21
|
+
* only `browser_close` followed by `browser_navigate` (or
|
|
22
|
+
* `browser_navigate` followed by `browser_close`, in either order)
|
|
23
|
+
* within `windowMs` counts as a restart. A standalone
|
|
24
|
+
* `browser_install` is not a tab close.
|
|
25
|
+
*
|
|
26
|
+
* Window: pairs are evaluated per (close_ts, navigate_ts) delta. The
|
|
27
|
+
* detector uses a sliding window of `windowMs` (default 30s, the
|
|
28
|
+
* PRD R4 default). Older events fall out of the window.
|
|
29
|
+
*
|
|
30
|
+
* Test seam: the test suite feeds a hand-rolled sequence of
|
|
31
|
+
* `BrowserEvent` objects; production will call `record` from the
|
|
32
|
+
* sub-agent-progress signal when it sees an
|
|
33
|
+
* `mcp__playwright__browser_*` invocation.
|
|
34
|
+
*/
|
|
35
|
+
const DEFAULT_MAX_RESTARTS = 3;
|
|
36
|
+
const DEFAULT_WINDOW_MS = 30_000;
|
|
37
|
+
/**
|
|
38
|
+
* Tools that count as "tab close" (PRD R2: distinguishes tab-close
|
|
39
|
+
* from server-restart). A close must be followed by a `browser_navigate`
|
|
40
|
+
* to count as a restart.
|
|
41
|
+
*/
|
|
42
|
+
const TAB_CLOSE_TOOLS = new Set(['browser_close']);
|
|
43
|
+
/**
|
|
44
|
+
* Tools that count as "tab spawn" (resets context). The detector
|
|
45
|
+
* specifically tracks `browser_navigate` because the user-reported
|
|
46
|
+
* loop pattern is `browser_close` -> `browser_navigate` -> `browser_close`.
|
|
47
|
+
* Other browser tools (e.g. `browser_click`, `browser_screenshot`)
|
|
48
|
+
* are inert for restart counting.
|
|
49
|
+
*/
|
|
50
|
+
const TAB_SPAWN_TOOLS = new Set(['browser_navigate']);
|
|
51
|
+
export class BrowserRestartDetector {
|
|
52
|
+
maxRestarts;
|
|
53
|
+
windowMs;
|
|
54
|
+
enabled;
|
|
55
|
+
events = [];
|
|
56
|
+
constructor(options = {}) {
|
|
57
|
+
this.maxRestarts = options.maxRestarts ?? DEFAULT_MAX_RESTARTS;
|
|
58
|
+
this.windowMs = options.windowMs ?? DEFAULT_WINDOW_MS;
|
|
59
|
+
this.enabled = options.enabled !== false;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Record a single browser event. Returns true when this event
|
|
63
|
+
* caused a restart count to increment (i.e. it was a navigate
|
|
64
|
+
* that paired with a prior close inside the window). Returns
|
|
65
|
+
* false for inert events.
|
|
66
|
+
*/
|
|
67
|
+
record(event) {
|
|
68
|
+
if (!this.enabled)
|
|
69
|
+
return false;
|
|
70
|
+
this.events.push(event);
|
|
71
|
+
// Trim old events that fall outside the window relative to
|
|
72
|
+
// the LATEST event we have seen (not Date.now()). Tests feed
|
|
73
|
+
// synthetic 2026-06-16 timestamps; using Date.now() would drop
|
|
74
|
+
// everything. We only need a 2-event sliding window per pair,
|
|
75
|
+
// but keep more for the diagnostic.
|
|
76
|
+
const last = this.events[this.events.length - 1];
|
|
77
|
+
if (last === undefined)
|
|
78
|
+
return false;
|
|
79
|
+
const cutoff = Date.parse(last.ts) - this.windowMs;
|
|
80
|
+
while (this.events.length > 0) {
|
|
81
|
+
const first = this.events[0];
|
|
82
|
+
if (first === undefined)
|
|
83
|
+
break;
|
|
84
|
+
if (Date.parse(first.ts) >= cutoff)
|
|
85
|
+
break;
|
|
86
|
+
this.events.shift();
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Count of close->navigate pairs detected within the window. A
|
|
92
|
+
* pair is one `browser_close` followed by a `browser_navigate`
|
|
93
|
+
* within `windowMs` of each other.
|
|
94
|
+
*/
|
|
95
|
+
restartCount() {
|
|
96
|
+
if (!this.enabled)
|
|
97
|
+
return 0;
|
|
98
|
+
let count = 0;
|
|
99
|
+
let pendingCloseTs = null;
|
|
100
|
+
// Walk in chronological order (the contract is: events are
|
|
101
|
+
// pushed in order; if not, the worst case is a missed pair
|
|
102
|
+
// which is still conservative).
|
|
103
|
+
for (const ev of this.events) {
|
|
104
|
+
const t = Date.parse(ev.ts);
|
|
105
|
+
if (TAB_CLOSE_TOOLS.has(ev.tool)) {
|
|
106
|
+
pendingCloseTs = t;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (TAB_SPAWN_TOOLS.has(ev.tool)) {
|
|
110
|
+
if (pendingCloseTs !== null) {
|
|
111
|
+
const delta = t - pendingCloseTs;
|
|
112
|
+
if (delta >= 0 && delta <= this.windowMs) {
|
|
113
|
+
count += 1;
|
|
114
|
+
// Reset so we don't double-count. The next close must
|
|
115
|
+
// re-arm the pending state.
|
|
116
|
+
pendingCloseTs = null;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// A navigate WITHOUT a preceding close is a normal
|
|
121
|
+
// session start, not a restart.
|
|
122
|
+
pendingCloseTs = null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return count;
|
|
126
|
+
}
|
|
127
|
+
shouldHalt() {
|
|
128
|
+
return this.restartCount() >= this.maxRestarts;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Returns the human-readable diagnostic the user will see when
|
|
132
|
+
* `shouldHalt` flips to true. Format: AC1 contract.
|
|
133
|
+
*/
|
|
134
|
+
diagnostic() {
|
|
135
|
+
const count = this.restartCount();
|
|
136
|
+
return `playwright browser restart loop detected (${count} restarts in this slice). Reusing the same browser tab is the intended pattern. See .peaks/memory/playwright-restart-loop-2026-06-16.md`;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 2026-06-16-playwright-restart-loop — G2.
|
|
3
|
+
*
|
|
4
|
+
* The browser-context reuse hint is appended to the sub-agent prompt
|
|
5
|
+
* whenever a peaks-qa-dispatched sub-agent (peaks-ui or general-purpose
|
|
6
|
+
* with a browser-E2E role) is invoked. The hint tells the model to
|
|
7
|
+
* keep one browser tab alive across the QA slice and to NOT call
|
|
8
|
+
* `browser_close` between steps.
|
|
9
|
+
*
|
|
10
|
+
* The constant lives here so both the dispatch CLI
|
|
11
|
+
* (`src/cli/commands/sub-agent-commands.ts`) and any future
|
|
12
|
+
* SKILL.md / dispatch table can reference the SAME string. Drift
|
|
13
|
+
* between "the detector knows X" and "the dispatch prompt says X"
|
|
14
|
+
* is the most common bug in this slice, so a single source of
|
|
15
|
+
* truth is non-negotiable.
|
|
16
|
+
*/
|
|
17
|
+
export declare const BROWSER_REUSE_HINT = "reuse existing browser tab; do NOT call mcp__playwright__browser_close between steps within this slice \u2014 closing and re-opening the tab repeatedly is a restart loop and will be halted by the slice guard";
|
|
18
|
+
export declare const BROWSER_RESTART_LOOP_MEMORY_PATH = ".peaks/memory/playwright-restart-loop-2026-06-16.md";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 2026-06-16-playwright-restart-loop — G2.
|
|
3
|
+
*
|
|
4
|
+
* The browser-context reuse hint is appended to the sub-agent prompt
|
|
5
|
+
* whenever a peaks-qa-dispatched sub-agent (peaks-ui or general-purpose
|
|
6
|
+
* with a browser-E2E role) is invoked. The hint tells the model to
|
|
7
|
+
* keep one browser tab alive across the QA slice and to NOT call
|
|
8
|
+
* `browser_close` between steps.
|
|
9
|
+
*
|
|
10
|
+
* The constant lives here so both the dispatch CLI
|
|
11
|
+
* (`src/cli/commands/sub-agent-commands.ts`) and any future
|
|
12
|
+
* SKILL.md / dispatch table can reference the SAME string. Drift
|
|
13
|
+
* between "the detector knows X" and "the dispatch prompt says X"
|
|
14
|
+
* is the most common bug in this slice, so a single source of
|
|
15
|
+
* truth is non-negotiable.
|
|
16
|
+
*/
|
|
17
|
+
export const BROWSER_REUSE_HINT = 'reuse existing browser tab; do NOT call mcp__playwright__browser_close between steps within this slice — closing and re-opening the tab repeatedly is a restart loop and will be halted by the slice guard';
|
|
18
|
+
export const BROWSER_RESTART_LOOP_MEMORY_PATH = '.peaks/memory/playwright-restart-loop-2026-06-16.md';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 3 — `peaks browser action <intent> [args...]` thin wrapper.
|
|
3
|
+
*
|
|
4
|
+
* Five supported intents: navigate, click, fill, snapshot, extract.
|
|
5
|
+
* Each intent invokes EXACTLY ONE Playwright MCP tool call. No auto
|
|
6
|
+
* snapshots between intents, no retry, no selector caching, no healing.
|
|
7
|
+
*
|
|
8
|
+
* Anti-features (per slice 3 spec):
|
|
9
|
+
* - No retry / circuit-breaker
|
|
10
|
+
* - No selector caching
|
|
11
|
+
* - No accessibility tree customization
|
|
12
|
+
* - No screenshot / video
|
|
13
|
+
* - No "smart selector healing"
|
|
14
|
+
*
|
|
15
|
+
* Selectors are restricted to simple forms (`#id`, `.class`, `tag#id`,
|
|
16
|
+
* `tag.class`, `tag`). Anything else returns a fall-back error pointing
|
|
17
|
+
* the caller to the raw MCP.
|
|
18
|
+
*/
|
|
19
|
+
export type BrowserIntent = 'navigate' | 'click' | 'fill' | 'snapshot' | 'extract';
|
|
20
|
+
export type McpCaller = (tool: string, args: Record<string, unknown>) => Promise<unknown>;
|
|
21
|
+
export interface BrowserActionArgs {
|
|
22
|
+
url?: string | undefined;
|
|
23
|
+
selector?: string | undefined;
|
|
24
|
+
value?: string | undefined;
|
|
25
|
+
expression?: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
export interface BrowserActionResult {
|
|
28
|
+
readonly intent: BrowserIntent;
|
|
29
|
+
readonly ok: boolean;
|
|
30
|
+
readonly data: unknown;
|
|
31
|
+
readonly elapsedMs: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Run a single browser intent. Throws on validation errors; returns
|
|
35
|
+
* a structured result on success.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runBrowserAction(intent: BrowserIntent, args: BrowserActionArgs, caller: McpCaller): Promise<BrowserActionResult>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slice 3 — `peaks browser action <intent> [args...]` thin wrapper.
|
|
3
|
+
*
|
|
4
|
+
* Five supported intents: navigate, click, fill, snapshot, extract.
|
|
5
|
+
* Each intent invokes EXACTLY ONE Playwright MCP tool call. No auto
|
|
6
|
+
* snapshots between intents, no retry, no selector caching, no healing.
|
|
7
|
+
*
|
|
8
|
+
* Anti-features (per slice 3 spec):
|
|
9
|
+
* - No retry / circuit-breaker
|
|
10
|
+
* - No selector caching
|
|
11
|
+
* - No accessibility tree customization
|
|
12
|
+
* - No screenshot / video
|
|
13
|
+
* - No "smart selector healing"
|
|
14
|
+
*
|
|
15
|
+
* Selectors are restricted to simple forms (`#id`, `.class`, `tag#id`,
|
|
16
|
+
* `tag.class`, `tag`). Anything else returns a fall-back error pointing
|
|
17
|
+
* the caller to the raw MCP.
|
|
18
|
+
*/
|
|
19
|
+
// Simple selectors only: `#id`, `.class`, `tag`, `tag#id`, `tag.class`.
|
|
20
|
+
// Anything else (xpath, attribute, pseudo-class chains, descendants) →
|
|
21
|
+
// fall back to raw MCP.
|
|
22
|
+
const SIMPLE_SELECTOR = /^([a-zA-Z][a-zA-Z0-9-]*)?([#.][a-zA-Z][a-zA-Z0-9_-]*)?$/;
|
|
23
|
+
/**
|
|
24
|
+
* Run a single browser intent. Throws on validation errors; returns
|
|
25
|
+
* a structured result on success.
|
|
26
|
+
*/
|
|
27
|
+
export async function runBrowserAction(intent, args, caller) {
|
|
28
|
+
const start = Date.now();
|
|
29
|
+
const tool = toolFor(intent, args);
|
|
30
|
+
const data = await caller(tool.name, tool.args);
|
|
31
|
+
return {
|
|
32
|
+
intent,
|
|
33
|
+
ok: true,
|
|
34
|
+
data,
|
|
35
|
+
elapsedMs: Date.now() - start
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function toolFor(intent, args) {
|
|
39
|
+
switch (intent) {
|
|
40
|
+
case 'navigate': {
|
|
41
|
+
if (typeof args.url !== 'string' || args.url.length === 0) {
|
|
42
|
+
throw new Error('navigate requires a non-empty --url');
|
|
43
|
+
}
|
|
44
|
+
return { name: 'mcp__playwright__browser_navigate', args: { url: args.url } };
|
|
45
|
+
}
|
|
46
|
+
case 'click': {
|
|
47
|
+
assertSimpleSelector(args.selector);
|
|
48
|
+
return {
|
|
49
|
+
name: 'mcp__playwright__browser_click',
|
|
50
|
+
args: { selector: args.selector }
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
case 'fill': {
|
|
54
|
+
assertSimpleSelector(args.selector);
|
|
55
|
+
if (typeof args.value !== 'string') {
|
|
56
|
+
throw new Error('fill requires both --selector and --value');
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
name: 'mcp__playwright__browser_fill_form',
|
|
60
|
+
args: { fields: [{ selector: args.selector, value: args.value }] }
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
case 'snapshot': {
|
|
64
|
+
return { name: 'mcp__playwright__browser_snapshot', args: {} };
|
|
65
|
+
}
|
|
66
|
+
case 'extract': {
|
|
67
|
+
if (typeof args.expression !== 'string' || args.expression.length === 0) {
|
|
68
|
+
throw new Error('extract requires a non-empty --expression');
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
name: 'mcp__playwright__browser_evaluate',
|
|
72
|
+
args: { function: args.expression }
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
default: {
|
|
76
|
+
const exhaustive = intent;
|
|
77
|
+
throw new Error(`unknown intent "${String(exhaustive)}" — fall back to raw MCP`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function assertSimpleSelector(selector) {
|
|
82
|
+
if (typeof selector !== 'string' || selector.length === 0) {
|
|
83
|
+
throw new Error('selector is required (fall back to raw MCP for complex selectors)');
|
|
84
|
+
}
|
|
85
|
+
if (!SIMPLE_SELECTOR.test(selector)) {
|
|
86
|
+
throw new Error(`selector "${selector}" is not a simple selector — fall back to raw MCP`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.15.0 follow-up — G5: QA business-perspective review state.
|
|
3
|
+
*
|
|
4
|
+
* Similar in shape to G1 (slice review) but lives on the QA side and
|
|
5
|
+
* uses the 6-item business checklist from the 12 Gaps positioning
|
|
6
|
+
* memory. Technical verification (coverage / P99 / security scan) is
|
|
7
|
+
* AI auto-decided in `peaks-rd`'s fan-out; QA only records what the
|
|
8
|
+
* user (business / product reviewer) sees.
|
|
9
|
+
*
|
|
10
|
+
* Persistence: `.peaks/_runtime/<sid>/qa-business-reviews/<rid>.json`.
|
|
11
|
+
*
|
|
12
|
+
* 6 items: business-flow / req-coverage / boundary-cases / ui-assembly /
|
|
13
|
+
* exception-tone / mergeable
|
|
14
|
+
* decision: pending | accepted | rejected
|
|
15
|
+
* threshold: avg >= 3 AND no item <= 2 (same as G1)
|
|
16
|
+
*/
|
|
17
|
+
export type QaReviewDecision = 'pending' | 'accepted' | 'rejected';
|
|
18
|
+
export interface QaReviewItem {
|
|
19
|
+
readonly id: string;
|
|
20
|
+
readonly question: string;
|
|
21
|
+
readonly score: number | null;
|
|
22
|
+
readonly note?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface QaBusinessReview {
|
|
25
|
+
readonly requestId: string;
|
|
26
|
+
readonly sessionId: string;
|
|
27
|
+
readonly createdAt: string;
|
|
28
|
+
readonly updatedAt: string;
|
|
29
|
+
readonly decision: QaReviewDecision;
|
|
30
|
+
readonly items: readonly QaReviewItem[];
|
|
31
|
+
readonly rejectionReason?: string;
|
|
32
|
+
}
|
|
33
|
+
/** 6-item business checklist (12 Gaps QA perspective). */
|
|
34
|
+
export declare const QA_BUSINESS_ITEMS: readonly {
|
|
35
|
+
id: string;
|
|
36
|
+
question: string;
|
|
37
|
+
}[];
|
|
38
|
+
export declare function buildEmptyQaReview(requestId: string, sessionId: string, now?: Date): QaBusinessReview;
|
|
39
|
+
export declare function getQaReviewDir(projectRoot: string, sessionId: string): string;
|
|
40
|
+
export declare function getQaReviewPath(projectRoot: string, sessionId: string, requestId: string): string;
|
|
41
|
+
export declare function readQaReview(projectRoot: string, sessionId: string, requestId: string): QaBusinessReview | null;
|
|
42
|
+
export declare function writeQaReview(projectRoot: string, review: QaBusinessReview): void;
|
|
43
|
+
export declare function scoreQaItem(review: QaBusinessReview, itemId: string, score: number, note?: string, now?: Date): QaBusinessReview;
|
|
44
|
+
export declare function averageQaScore(review: QaBusinessReview): number | null;
|
|
45
|
+
export declare function deriveQaDecision(review: QaBusinessReview): QaReviewDecision;
|
|
46
|
+
export declare function acceptQaReview(review: QaBusinessReview, now?: Date): QaBusinessReview;
|
|
47
|
+
export declare function rejectQaReview(review: QaBusinessReview, reason: string, now?: Date): QaBusinessReview;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.15.0 follow-up — G5: QA business-perspective review state.
|
|
3
|
+
*
|
|
4
|
+
* Similar in shape to G1 (slice review) but lives on the QA side and
|
|
5
|
+
* uses the 6-item business checklist from the 12 Gaps positioning
|
|
6
|
+
* memory. Technical verification (coverage / P99 / security scan) is
|
|
7
|
+
* AI auto-decided in `peaks-rd`'s fan-out; QA only records what the
|
|
8
|
+
* user (business / product reviewer) sees.
|
|
9
|
+
*
|
|
10
|
+
* Persistence: `.peaks/_runtime/<sid>/qa-business-reviews/<rid>.json`.
|
|
11
|
+
*
|
|
12
|
+
* 6 items: business-flow / req-coverage / boundary-cases / ui-assembly /
|
|
13
|
+
* exception-tone / mergeable
|
|
14
|
+
* decision: pending | accepted | rejected
|
|
15
|
+
* threshold: avg >= 3 AND no item <= 2 (same as G1)
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
18
|
+
import { dirname, join, resolve } from 'node:path';
|
|
19
|
+
/** 6-item business checklist (12 Gaps QA perspective). */
|
|
20
|
+
export const QA_BUSINESS_ITEMS = [
|
|
21
|
+
{ id: 'business-flow', question: '这个功能"用起来"对吗?(业务流程顺不顺,操作路径是否反人类,跟现有系统交互有没有断层)' },
|
|
22
|
+
{ id: 'req-coverage', question: '老板提的需求都覆盖了吗?(大需求点 vs 小需求点,显式需求 vs 隐式需求)' },
|
|
23
|
+
{ id: 'boundary-cases', question: '边界 case 跟业务预期一致吗?(异常输入 / 错误提示用户语言 / 空加载失败状态)' },
|
|
24
|
+
{ id: 'ui-assembly', question: '页面模式 / 关键交互 / 信息密度 跟产品预期一致吗?(装配验收,非视觉设计)' },
|
|
25
|
+
{ id: 'exception-tone', question: '异常态 / 边界态视觉跟产品语调一致吗?(空状态有引导 / 加载态不闪烁 / 失败态有重试入口)' },
|
|
26
|
+
{ id: 'mergeable', question: '能合入下个小版本吗?(业务风险 / 用户体验风险 / 集成断点)' }
|
|
27
|
+
];
|
|
28
|
+
export function buildEmptyQaReview(requestId, sessionId, now = new Date()) {
|
|
29
|
+
return {
|
|
30
|
+
requestId,
|
|
31
|
+
sessionId,
|
|
32
|
+
createdAt: now.toISOString(),
|
|
33
|
+
updatedAt: now.toISOString(),
|
|
34
|
+
decision: 'pending',
|
|
35
|
+
items: QA_BUSINESS_ITEMS.map((it) => ({ id: it.id, question: it.question, score: null }))
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function getQaReviewDir(projectRoot, sessionId) {
|
|
39
|
+
return resolve(projectRoot, '.peaks', '_runtime', sessionId, 'qa-business-reviews');
|
|
40
|
+
}
|
|
41
|
+
export function getQaReviewPath(projectRoot, sessionId, requestId) {
|
|
42
|
+
return join(getQaReviewDir(projectRoot, sessionId), `${requestId}.json`);
|
|
43
|
+
}
|
|
44
|
+
export function readQaReview(projectRoot, sessionId, requestId) {
|
|
45
|
+
const path = getQaReviewPath(projectRoot, sessionId, requestId);
|
|
46
|
+
if (!existsSync(path))
|
|
47
|
+
return null;
|
|
48
|
+
try {
|
|
49
|
+
return JSON.parse(readFileSync(path, 'utf8'));
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
console.warn(`readQaReview: failed to read or parse ${path}: ${err.message}`);
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function writeQaReview(projectRoot, review) {
|
|
57
|
+
const path = getQaReviewPath(projectRoot, review.sessionId, review.requestId);
|
|
58
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
59
|
+
writeFileSync(path, JSON.stringify(review, null, 2), 'utf8');
|
|
60
|
+
}
|
|
61
|
+
export function scoreQaItem(review, itemId, score, note, now = new Date()) {
|
|
62
|
+
let found = false;
|
|
63
|
+
const items = review.items.map((it) => {
|
|
64
|
+
if (it.id !== itemId)
|
|
65
|
+
return it;
|
|
66
|
+
found = true;
|
|
67
|
+
return { id: it.id, question: it.question, score, ...(note !== undefined ? { note } : {}) };
|
|
68
|
+
});
|
|
69
|
+
if (!found)
|
|
70
|
+
return review;
|
|
71
|
+
return { ...review, items, updatedAt: now.toISOString() };
|
|
72
|
+
}
|
|
73
|
+
export function averageQaScore(review) {
|
|
74
|
+
const scored = review.items.filter((it) => it.score !== null);
|
|
75
|
+
if (scored.length === 0)
|
|
76
|
+
return null;
|
|
77
|
+
return scored.reduce((sum, it) => sum + it.score, 0) / scored.length;
|
|
78
|
+
}
|
|
79
|
+
export function deriveQaDecision(review) {
|
|
80
|
+
if (review.items.some((it) => it.score === 1))
|
|
81
|
+
return 'rejected';
|
|
82
|
+
const avg = averageQaScore(review);
|
|
83
|
+
if (avg === null)
|
|
84
|
+
return 'pending';
|
|
85
|
+
if (avg < 3)
|
|
86
|
+
return 'rejected';
|
|
87
|
+
if (review.items.some((it) => it.score !== null && it.score <= 2))
|
|
88
|
+
return 'rejected';
|
|
89
|
+
return 'accepted';
|
|
90
|
+
}
|
|
91
|
+
export function acceptQaReview(review, now = new Date()) {
|
|
92
|
+
return { ...review, decision: 'accepted', updatedAt: now.toISOString() };
|
|
93
|
+
}
|
|
94
|
+
export function rejectQaReview(review, reason, now = new Date()) {
|
|
95
|
+
return { ...review, decision: 'rejected', rejectionReason: reason, updatedAt: now.toISOString() };
|
|
96
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AstGateResult } from './types.js';
|
|
2
|
+
export interface AstGateContext {
|
|
3
|
+
readonly deps: Readonly<Record<string, {
|
|
4
|
+
readonly version: string;
|
|
5
|
+
readonly source: string;
|
|
6
|
+
readonly resolved: string;
|
|
7
|
+
}>>;
|
|
8
|
+
readonly docSummaries: ReadonlyArray<{
|
|
9
|
+
readonly dep: string;
|
|
10
|
+
readonly version: string;
|
|
11
|
+
readonly apis: ReadonlyArray<string>;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
export interface RunAstGateInput {
|
|
15
|
+
readonly project: string;
|
|
16
|
+
readonly changedFiles: ReadonlyArray<string>;
|
|
17
|
+
readonly context: AstGateContext;
|
|
18
|
+
}
|
|
19
|
+
export declare function runAstGate(input: RunAstGateInput): Promise<AstGateResult>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per spec §4.2 战术审计 — AST hard gate.
|
|
3
|
+
*
|
|
4
|
+
* Hard constraints:
|
|
5
|
+
* H6 (CLI裁决): gate result is computed by AST analysis, not LLM.
|
|
6
|
+
* H2 (locked version): any external API call whose name is NOT in the
|
|
7
|
+
* locked-version doc summary fails the gate.
|
|
8
|
+
*
|
|
9
|
+
* Implementation: TypeScript Compiler API for import + call expression
|
|
10
|
+
* extraction. v1 uses regex for speed; production wiring migrates to
|
|
11
|
+
* the Compiler API for accuracy.
|
|
12
|
+
*/
|
|
13
|
+
import { readFile } from 'node:fs/promises';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
const IMPORT_RE = /import\s*\{([^}]+)\}\s*from\s*['"]([^'"]+)['"]/g;
|
|
16
|
+
const CALL_RE = /\b([a-zA-Z_$][\w$]*)\s*\(/g;
|
|
17
|
+
export async function runAstGate(input) {
|
|
18
|
+
const violations = [];
|
|
19
|
+
const externalCalls = [];
|
|
20
|
+
for (const file of input.changedFiles) {
|
|
21
|
+
const fullPath = join(input.project, file);
|
|
22
|
+
let content;
|
|
23
|
+
try {
|
|
24
|
+
content = await readFile(fullPath, 'utf8');
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
// Find imports from external deps.
|
|
30
|
+
const imports = [...content.matchAll(IMPORT_RE)];
|
|
31
|
+
const importMap = new Map(); // localName -> depName
|
|
32
|
+
for (const imp of imports) {
|
|
33
|
+
const depName = imp[2];
|
|
34
|
+
if (input.context.deps[depName] === undefined)
|
|
35
|
+
continue; // not an external dep
|
|
36
|
+
const names = imp[1].split(',').map((n) => n.trim().split(/\s+as\s+/)[0]);
|
|
37
|
+
for (const n of names) {
|
|
38
|
+
if (n)
|
|
39
|
+
importMap.set(n, depName);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Find call expressions that match imported names.
|
|
43
|
+
const calls = [...content.matchAll(CALL_RE)];
|
|
44
|
+
for (const c of calls) {
|
|
45
|
+
const name = c[1];
|
|
46
|
+
const dep = importMap.get(name);
|
|
47
|
+
if (!dep)
|
|
48
|
+
continue;
|
|
49
|
+
const idx = c.index ?? 0;
|
|
50
|
+
const line = content.slice(0, idx).split('\n').length;
|
|
51
|
+
const depVersion = input.context.deps[dep]?.version ?? '';
|
|
52
|
+
const docSummary = input.context.docSummaries.find((d) => d.dep === dep && d.version === depVersion);
|
|
53
|
+
const apis = docSummary?.apis ?? [];
|
|
54
|
+
externalCalls.push({ file, line, api: name, version: depVersion });
|
|
55
|
+
if (apis.length > 0 && !apis.includes(name)) {
|
|
56
|
+
violations.push({
|
|
57
|
+
file,
|
|
58
|
+
line,
|
|
59
|
+
api: name,
|
|
60
|
+
expectedVersion: depVersion,
|
|
61
|
+
actualVersion: 'unknown', // could resolve via npm view if needed
|
|
62
|
+
severity: 'error',
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
passed: violations.length === 0,
|
|
69
|
+
violations,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type AstGateResult, type ExternalApiCall, type ImplOutput } from './types.js';
|
|
2
|
+
export interface WriteImplInput {
|
|
3
|
+
readonly out: string;
|
|
4
|
+
readonly inputSig: string;
|
|
5
|
+
readonly changedFiles: ReadonlyArray<string>;
|
|
6
|
+
readonly externalApiCalls: ReadonlyArray<ExternalApiCall>;
|
|
7
|
+
readonly astGate: AstGateResult;
|
|
8
|
+
}
|
|
9
|
+
export declare function writeImpl(input: WriteImplInput): Promise<ImplOutput>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per spec §4.3 战术审计 (peaks-rd/战术) — impl.json writer + TACT.sig computation.
|
|
3
|
+
* Spec anchor: docs/superpowers/specs/2026-06-21-context-audit-redesign-design.md §4.3
|
|
4
|
+
* (R1-W3 consolidation; previously referenced as §4.2 which is `peaks-mut`).
|
|
5
|
+
*
|
|
6
|
+
* Hard constraints:
|
|
7
|
+
* H8 (audit trail hashable): TACT.sig chains from STRAT.sig via inputSig.
|
|
8
|
+
* H6 (CLI裁决): refuses to write when AST gate has violations —
|
|
9
|
+
* LLM MUST auto-fix and re-run.
|
|
10
|
+
*/
|
|
11
|
+
import { createHash } from 'node:crypto';
|
|
12
|
+
import { writeFile, rename, unlink } from 'node:fs/promises';
|
|
13
|
+
import { ImplOutputSchema } from './types.js';
|
|
14
|
+
function sha256Of(content) {
|
|
15
|
+
const { sha256: _omit, ...rest } = content;
|
|
16
|
+
void _omit;
|
|
17
|
+
const canonical = JSON.stringify(rest, Object.keys(rest).sort());
|
|
18
|
+
return createHash('sha256').update(canonical).digest('hex');
|
|
19
|
+
}
|
|
20
|
+
export async function writeImpl(input) {
|
|
21
|
+
// Defense-in-depth: passed flag and violations[] must agree.
|
|
22
|
+
// A caller passing passed=true with non-empty violations (lying input)
|
|
23
|
+
// would otherwise bypass the gate. Both checks are load-bearing.
|
|
24
|
+
if (!input.astGate.passed) {
|
|
25
|
+
throw new Error(`BLOCKED: AST gate failed — ${input.astGate.violations.length} violations. ` +
|
|
26
|
+
'LLM MUST auto-fix and re-run before TACT.sig can be written. ' +
|
|
27
|
+
'(spec §4.2 战术审计)');
|
|
28
|
+
}
|
|
29
|
+
if (input.astGate.violations.length > 0) {
|
|
30
|
+
throw new Error(`BLOCKED: AST gate state is inconsistent — passed=true but ` +
|
|
31
|
+
`${input.astGate.violations.length} violations present. ` +
|
|
32
|
+
'Refusing to write TACT.sig to prevent gate bypass. ' +
|
|
33
|
+
'(impl.ts: defense-in-depth check, audit R2-W2)');
|
|
34
|
+
}
|
|
35
|
+
const partial = {
|
|
36
|
+
version: '1.0',
|
|
37
|
+
sha256: '',
|
|
38
|
+
generatedAt: new Date().toISOString(),
|
|
39
|
+
inputSig: input.inputSig,
|
|
40
|
+
changedFiles: [...input.changedFiles],
|
|
41
|
+
externalApiCalls: [...input.externalApiCalls],
|
|
42
|
+
astGateResult: input.astGate,
|
|
43
|
+
};
|
|
44
|
+
const sha256 = sha256Of(partial);
|
|
45
|
+
const final = { ...partial, sha256 };
|
|
46
|
+
ImplOutputSchema.parse(final);
|
|
47
|
+
const tmp = `${input.out}.tmp`;
|
|
48
|
+
try {
|
|
49
|
+
await writeFile(tmp, JSON.stringify(final, null, 2), 'utf8');
|
|
50
|
+
await rename(tmp, input.out);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
await unlink(tmp).catch(() => undefined);
|
|
54
|
+
throw err;
|
|
55
|
+
}
|
|
56
|
+
return final;
|
|
57
|
+
}
|