peaks-loop 4.0.0-beta.9 → 4.0.3
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 +572 -234
- package/README-en.md +67 -30
- package/README.md +67 -30
- package/agents/karpathy-reviewer.md +33 -0
- package/bin/peaks.js +0 -0
- package/dist/cli/cli-helpers.d.ts +31 -6
- package/dist/cli/cli-helpers.js +48 -25
- package/dist/cli/commands/_register.d.ts +3 -0
- package/dist/cli/commands/_register.js +139 -0
- package/dist/cli/commands/_super.d.ts +10 -0
- package/dist/cli/commands/_super.js +97 -0
- package/dist/cli/commands/adapter-commands-s2a.js +1 -1
- package/dist/cli/commands/asset-commands.js +33 -16
- package/dist/cli/commands/audit-commands.js +2 -2
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +12 -0
- package/dist/cli/commands/autonomous-swarm-commands.js +120 -0
- package/dist/cli/commands/bee-commands.js +1 -1
- package/dist/cli/commands/capability-commands.js +1 -1
- package/dist/cli/commands/capability-worker-config-sc-commands.js +0 -2
- package/dist/cli/commands/changeset-commands.d.ts +13 -0
- package/dist/cli/commands/changeset-commands.js +46 -0
- package/dist/cli/commands/code-commands.d.ts +11 -1
- package/dist/cli/commands/code-commands.js +19 -699
- package/dist/cli/commands/code-job-shape-commands.d.ts +9 -0
- package/dist/cli/commands/code-job-shape-commands.js +164 -0
- package/dist/cli/commands/code-mode-gate-commands.d.ts +9 -0
- package/dist/cli/commands/code-mode-gate-commands.js +223 -0
- package/dist/cli/commands/code-review-commands.js +2 -2
- package/dist/cli/commands/code-run-command.d.ts +12 -0
- package/dist/cli/commands/code-run-command.js +68 -0
- package/dist/cli/commands/code-runtime-commands.d.ts +11 -0
- package/dist/cli/commands/code-runtime-commands.js +391 -0
- package/dist/cli/commands/codegraph-commands.js +1 -1
- package/dist/cli/commands/compact-command.js +53 -1
- package/dist/cli/commands/complexity-commands.js +1 -1
- package/dist/cli/commands/config-commands.js +4 -75
- package/dist/cli/commands/container-commands.d.ts +28 -0
- package/dist/cli/commands/container-commands.js +221 -0
- package/dist/cli/commands/context-commands.js +3 -2
- package/dist/cli/commands/core/artifacts-command.js +1 -1
- package/dist/cli/commands/core/binding-commands.js +1 -1
- package/dist/cli/commands/core/doctor-command.js +63 -3
- package/dist/cli/commands/core/memory-command.js +1 -1
- package/dist/cli/commands/core/profile-command.js +1 -1
- package/dist/cli/commands/core/proxy-command.js +1 -1
- package/dist/cli/commands/core/session-command.js +9 -7
- package/dist/cli/commands/core/skill-command.js +7 -4
- package/dist/cli/commands/core/standards-command.js +1 -1
- package/dist/cli/commands/cron-commands.d.ts +57 -0
- package/dist/cli/commands/cron-commands.js +257 -0
- package/dist/cli/commands/cron-scheduler-commands.d.ts +47 -0
- package/dist/cli/commands/cron-scheduler-commands.js +284 -0
- package/dist/cli/commands/dashboard-commands.d.ts +4 -0
- package/dist/cli/commands/dashboard-commands.js +10 -0
- package/dist/cli/commands/dashboard-long-run.d.ts +25 -0
- package/dist/cli/commands/dashboard-long-run.js +122 -0
- package/dist/cli/commands/dashboard-summary.d.ts +12 -0
- package/dist/cli/commands/dashboard-summary.js +58 -0
- package/dist/cli/commands/dispatch-commands.d.ts +0 -7
- package/dist/cli/commands/dispatch-commands.js +372 -8
- package/dist/cli/commands/dispatch-from-dag.js +4 -1
- package/dist/cli/commands/doc-commands.js +1 -1
- package/dist/cli/commands/ecc-commands.d.ts +30 -0
- package/dist/cli/commands/ecc-commands.js +119 -0
- package/dist/cli/commands/evolution-commands.js +1 -1
- package/dist/cli/commands/feedback-commands.js +1 -1
- package/dist/cli/commands/final-review-commands.js +1 -1
- package/dist/cli/commands/fixture-commands.js +1 -1
- package/dist/cli/commands/fork-commands.js +1 -1
- package/dist/cli/commands/gate-commands.js +128 -6
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +21 -0
- package/dist/cli/commands/governance-classify-contract-commands.js +273 -0
- package/dist/cli/commands/heartbeat-commands.js +76 -5
- package/dist/cli/commands/heartbeat-watch-command.d.ts +31 -0
- package/dist/cli/commands/heartbeat-watch-command.js +146 -0
- package/dist/cli/commands/hook-handle.js +1 -1
- package/dist/cli/commands/hooks-commands.js +126 -10
- package/dist/cli/commands/ide-commands.js +1 -1
- package/dist/cli/commands/impact-commands.js +1 -1
- package/dist/cli/commands/job-commands.js +34 -1
- package/dist/cli/commands/lease-metrics-commands.d.ts +67 -0
- package/dist/cli/commands/lease-metrics-commands.js +231 -0
- package/dist/cli/commands/lease-stats-commands.d.ts +65 -0
- package/dist/cli/commands/lease-stats-commands.js +107 -0
- package/dist/cli/commands/legacy-commands.js +1 -1
- package/dist/cli/commands/log-commands.js +1 -1
- package/dist/cli/commands/loop-commands.js +1 -1
- package/dist/cli/commands/loop-eval-commands.js +1 -1
- package/dist/cli/commands/memory-commands.js +1 -1
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +1 -1
- package/dist/cli/commands/mut-commands.d.ts +1 -1
- package/dist/cli/commands/mut-commands.js +1 -5
- package/dist/cli/commands/observability-commands.js +1 -1
- package/dist/cli/commands/openspec-commands.js +65 -4
- package/dist/cli/commands/perf-audit-commands.js +3 -3
- package/dist/cli/commands/perf-commands.js +1 -1
- package/dist/cli/commands/polyrepo-commands.js +1 -1
- package/dist/cli/commands/prd-blocks-commands.js +1 -1
- package/dist/cli/commands/prd-commands.js +4 -2
- package/dist/cli/commands/preferences-commands.js +23 -3
- package/dist/cli/commands/project-commands.js +1 -1
- package/dist/cli/commands/qa-business-review-commands.js +1 -1
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +39 -3
- package/dist/cli/commands/release-commands.d.ts +15 -0
- package/dist/cli/commands/release-commands.js +113 -21
- package/dist/cli/commands/request-commands.js +1 -1
- package/dist/cli/commands/retrospective-commands.js +1 -1
- package/dist/cli/commands/reviewer-commands.js +1 -1
- package/dist/cli/commands/role-commands.js +1 -1
- package/dist/cli/commands/runtime-commands-helpers.d.ts +7 -0
- package/dist/cli/commands/runtime-commands-helpers.js +24 -0
- package/dist/cli/commands/runtime-commands.js +1 -2
- package/dist/cli/commands/sc-commands.js +4 -2
- package/dist/cli/commands/scan-commands.js +1 -1
- package/dist/cli/commands/security-audit-commands.js +3 -3
- package/dist/cli/commands/sediment-commands.js +10 -1
- package/dist/cli/commands/session-24h-mode.d.ts +26 -0
- package/dist/cli/commands/session-24h-mode.js +196 -0
- package/dist/cli/commands/share-commands.d.ts +19 -0
- package/dist/cli/commands/share-commands.js +121 -2
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +1 -1
- package/dist/cli/commands/skill-search-commands.js +4 -1
- package/dist/cli/commands/slice-commands.js +1 -1
- package/dist/cli/commands/slice-integrate-commands.js +1 -1
- package/dist/cli/commands/slice-review-commands.js +1 -1
- package/dist/cli/commands/smoke-commands.js +1 -1
- package/dist/cli/commands/sop-commands.js +1 -1
- package/dist/cli/commands/spill-demo-command.d.ts +7 -0
- package/dist/cli/commands/spill-demo-command.js +29 -0
- package/dist/cli/commands/statusline-commands.d.ts +12 -0
- package/dist/cli/commands/statusline-commands.js +79 -17
- package/dist/cli/commands/sub-agent-commands.js +2 -1
- package/dist/cli/commands/sub-agent-shared.d.ts +10 -0
- package/dist/cli/commands/sub-agent-shared.js +24 -1
- package/dist/cli/commands/swarm-commands.d.ts +13 -0
- package/dist/cli/commands/swarm-commands.js +77 -0
- package/dist/cli/commands/tech-commands.d.ts +64 -0
- package/dist/cli/commands/tech-commands.js +195 -0
- package/dist/cli/commands/understand-commands.js +1 -1
- package/dist/cli/commands/upgrade-commands.d.ts +2 -0
- package/dist/cli/commands/upgrade-commands.js +40 -5
- package/dist/cli/commands/user-touchpoint-commands.js +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +1 -1
- package/dist/cli/commands/vm-commands.d.ts +31 -0
- package/dist/cli/commands/vm-commands.js +274 -0
- package/dist/cli/commands/workflow-commands.js +24 -1
- package/dist/cli/commands/workflow-plan-commands.js +1 -1
- package/dist/cli/commands/workspace/init-command.js +1 -1
- package/dist/cli/commands/workspace/migrate-command.js +1 -1
- package/dist/cli/commands/workspace/reconcile-command.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +29 -0
- package/dist/cli/commands/worktree-auth-commands.js +652 -0
- package/dist/cli/index.js +58 -13
- package/dist/cli/program.d.ts +2 -2
- package/dist/cli/program.js +86 -281
- package/dist/services/24h-mode/decider.d.ts +103 -0
- package/dist/services/24h-mode/decider.js +144 -0
- package/dist/services/24h-mode/index.d.ts +12 -0
- package/dist/services/24h-mode/index.js +12 -0
- package/dist/services/24h-mode/state.d.ts +48 -0
- package/dist/services/24h-mode/state.js +51 -0
- package/dist/services/24h-mode/store.d.ts +27 -0
- package/dist/services/24h-mode/store.js +119 -0
- package/dist/services/artifacts/artifact-prerequisites.js +1 -1
- package/dist/services/artifacts/request-artifact-service.js +1 -1
- package/dist/services/artifacts/workspace-service.js +1 -1
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +91 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +31 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.d.ts +23 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +59 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.d.ts +28 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +86 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +41 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +27 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +47 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.d.ts +19 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +47 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.d.ts +18 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +70 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +53 -0
- package/dist/services/audit/red-line-catalog-p2-a.d.ts +0 -6
- package/dist/services/audit/red-line-catalog-p2-a.js +230 -1
- package/dist/services/audit/static-service.d.ts +32 -25
- package/dist/services/audit/static-service.js +30 -109
- package/dist/services/audit-independent/index.d.ts +2 -0
- package/dist/services/audit-independent/index.js +2 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +127 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +446 -0
- package/dist/services/changeset/changeset-check-service.d.ts +22 -0
- package/dist/services/changeset/changeset-check-service.js +47 -0
- package/dist/services/code/auto-compact-modes.d.ts +30 -0
- package/dist/services/code/auto-compact-modes.js +38 -0
- package/dist/services/code/auto-compact-orchestrator.d.ts +43 -5
- package/dist/services/code/auto-compact-orchestrator.js +101 -21
- package/dist/services/code/dag-orchestrator.d.ts +30 -1
- package/dist/services/code/dag-orchestrator.js +106 -1
- package/dist/services/code/status-line-renderer.d.ts +2 -0
- package/dist/services/code/status-line-renderer.js +21 -3
- package/dist/services/code-review/ocr-service.d.ts +1 -1
- package/dist/services/code-review/ocr-service.js +6 -3
- package/dist/services/compact-history/compact-history-service.d.ts +41 -0
- package/dist/services/compact-history/compact-history-service.js +62 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +16 -0
- package/dist/services/compact-statusline/compact-statusline-service.js +83 -0
- package/dist/services/config/config-service.d.ts +1 -12
- package/dist/services/config/config-service.js +3 -72
- package/dist/services/config/config-types.d.ts +2 -4
- package/dist/services/config/config-types.js +1 -1
- package/dist/services/container/container-lease.d.ts +67 -0
- package/dist/services/container/container-lease.js +135 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +40 -5
- package/dist/services/context/auto-compact-dispatcher.js +32 -102
- package/dist/services/context/auto-compact-reader.js +1 -1
- package/dist/services/context/auto-compact-types.d.ts +27 -2
- package/dist/services/context/auto-compact-types.js +8 -1
- package/dist/services/context/build-dispatch-system-prompt.d.ts +75 -0
- package/dist/services/context/build-dispatch-system-prompt.js +117 -0
- package/dist/services/context/collector.d.ts +2 -2
- package/dist/services/context/context-builder.d.ts +4 -4
- package/dist/services/context/context-schema.d.ts +48 -48
- package/dist/services/context/ide-detect.d.ts +4 -0
- package/dist/services/context/ide-detect.js +24 -0
- package/dist/services/context/main-session-monitor.d.ts +1 -4
- package/dist/services/context/main-session-monitor.js +1 -24
- package/dist/services/context/memory-index-reader.d.ts +8 -0
- package/dist/services/context/memory-index-reader.js +57 -0
- package/dist/services/context/memory-lru-cache.d.ts +12 -0
- package/dist/services/context/memory-lru-cache.js +60 -0
- package/dist/services/context/memory-preflight-config.d.ts +19 -0
- package/dist/services/context/memory-preflight-config.js +25 -0
- package/dist/services/context/memory-preflight-service.d.ts +19 -0
- package/dist/services/context/memory-preflight-service.js +120 -0
- package/dist/services/context/spillover-store.d.ts +23 -0
- package/dist/services/context/spillover-store.js +155 -0
- package/dist/services/context/spillover-types.d.ts +18 -0
- package/dist/services/context/spillover-types.js +1 -0
- package/dist/services/crystallization/crystallization-service.d.ts +22 -5
- package/dist/services/crystallization/crystallization-service.js +8 -14
- package/dist/services/crystallization/crystallization-types.d.ts +6 -6
- package/dist/services/crystallization/evidence-brief-builder.d.ts +1 -1
- package/dist/services/crystallization/index.d.ts +13 -0
- package/dist/services/crystallization/index.js +13 -0
- package/dist/services/dashboard/project-dashboard-service.js +2 -2
- package/dist/services/dispatch/await-batch.d.ts +70 -0
- package/dist/services/dispatch/await-batch.js +272 -0
- package/dist/services/dispatch/batch-counter.js +1 -1
- package/dist/services/dispatch/dispatch-record-writer.d.ts +126 -4
- package/dist/services/dispatch/dispatch-record-writer.js +239 -9
- package/dist/services/dispatch/slice-dag.d.ts +46 -0
- package/dist/services/dispatch/slice-dag.js +6 -0
- package/dist/services/dispatch/stage-enum.d.ts +27 -0
- package/dist/services/dispatch/stage-enum.js +48 -0
- package/dist/services/dispatch/startup-timeout.d.ts +86 -0
- package/dist/services/dispatch/startup-timeout.js +97 -0
- package/dist/services/dispatch/sub-agent-dispatcher.js +40 -89
- package/dist/services/dispatch/test-tool-detection.d.ts +25 -1
- package/dist/services/dispatch/test-tool-detection.js +80 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.d.ts +18 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +64 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +69 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.d.ts +32 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +110 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.d.ts +24 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +164 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +57 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +19 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +66 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +33 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.d.ts +20 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.js +85 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.js +30 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.js +25 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.js +19 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.d.ts +21 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +75 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.js +47 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +32 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +30 -0
- package/dist/services/doctor/doctor-service/checks/user-config.d.ts +11 -0
- package/dist/services/doctor/doctor-service/checks/user-config.js +27 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +34 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.d.ts +33 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +180 -0
- package/dist/services/doctor/doctor-service/index.d.ts +48 -0
- package/dist/services/doctor/doctor-service/index.js +254 -0
- package/dist/services/doctor/doctor-service/plugin-registry.d.ts +41 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +77 -0
- package/dist/services/doctor/doctor-service/report/final-summary.d.ts +20 -0
- package/dist/services/doctor/doctor-service/report/final-summary.js +29 -0
- package/dist/services/doctor/doctor-service/types.d.ts +245 -0
- package/dist/services/doctor/doctor-service/types.js +15 -0
- package/dist/services/doctor/doctor-service.d.ts +15 -146
- package/dist/services/doctor/doctor-service.js +22 -926
- package/dist/services/doctor/index.d.ts +22 -0
- package/dist/services/doctor/index.js +22 -0
- package/dist/services/env/shell-probe.d.ts +71 -0
- package/dist/services/env/shell-probe.js +161 -0
- package/dist/services/evolution/evolution-types.d.ts +39 -39
- package/dist/services/final-review/final-review-service.d.ts +11 -1
- package/dist/services/final-review/index.d.ts +2 -0
- package/dist/services/final-review/index.js +1 -0
- package/dist/services/hooks/auto-compact-hook-install.d.ts +4 -5
- package/dist/services/hooks/auto-compact-hook-install.js +4 -5
- package/dist/services/hooks/worktree-authorization-gate.d.ts +205 -0
- package/dist/services/hooks/worktree-authorization-gate.js +492 -0
- package/dist/services/ide/adapters/claude-code-adapter.js +2 -2
- package/dist/services/ide/adapters/qoder-adapter.d.ts +25 -0
- package/dist/services/ide/adapters/qoder-adapter.js +57 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +16 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +45 -0
- package/dist/services/ide/ide-registry.js +6 -0
- package/dist/services/ide/ide-types.d.ts +1 -1
- package/dist/services/job/job-types.d.ts +56 -56
- package/dist/services/job-snapshot/index.d.ts +8 -0
- package/dist/services/job-snapshot/index.js +7 -0
- package/dist/services/{job/job-resource-snapshot.d.ts → job-snapshot/snapshot.d.ts} +1 -1
- package/dist/services/job-snapshot/types.d.ts +7 -0
- package/dist/services/job-snapshot/types.js +1 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.d.ts +67 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +108 -0
- package/dist/services/log/retention.d.ts +16 -0
- package/dist/services/log/retention.js +17 -0
- package/dist/services/loop/loop-bee-relation-types.d.ts +6 -6
- package/dist/services/loop/loop-release-types.d.ts +24 -24
- package/dist/services/loop/monotonic-runner.d.ts +17 -11
- package/dist/services/loop/monotonic-runner.js +118 -79
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +8 -0
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +253 -0
- package/dist/services/memory/project-memory-service/index/ranking.d.ts +6 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +171 -0
- package/dist/services/memory/project-memory-service/index/search.d.ts +34 -0
- package/dist/services/memory/project-memory-service/index/search.js +194 -0
- package/dist/services/memory/project-memory-service/index.d.ts +9 -0
- package/dist/services/memory/project-memory-service/index.js +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +9 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +106 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.d.ts +7 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +96 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +5 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +56 -0
- package/dist/services/memory/project-memory-service/store/paths.d.ts +8 -0
- package/dist/services/memory/project-memory-service/store/paths.js +116 -0
- package/dist/services/memory/project-memory-service/types.d.ts +128 -0
- package/dist/services/memory/project-memory-service/types.js +9 -0
- package/dist/services/memory/project-memory-service.d.ts +1 -167
- package/dist/services/memory/project-memory-service.js +19 -816
- package/dist/services/migrate-skill-name/schema.d.ts +2 -2
- package/dist/services/observability/aggregation.d.ts +27 -0
- package/dist/services/observability/aggregation.js +72 -0
- package/dist/services/observability/observability-service.d.ts +73 -7
- package/dist/services/observability/observability-service.js +87 -1
- package/dist/services/openspec/artifact-boundary.d.ts +138 -0
- package/dist/services/openspec/artifact-boundary.js +150 -0
- package/dist/services/openspec/coverage-evidence-reader.d.ts +191 -0
- package/dist/services/openspec/coverage-evidence-reader.js +386 -0
- package/dist/services/openspec/openspec-archive-service.d.ts +70 -0
- package/dist/services/openspec/openspec-archive-service.js +320 -8
- package/dist/services/openspec/openspec-bridge-service.js +1 -1
- package/dist/services/openspec/openspec-init-service.js +1 -1
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-render-service.js +7 -4
- package/dist/services/openspec/openspec-scan-service.js +1 -1
- package/dist/services/openspec/openspec-validate-service.js +5 -4
- package/dist/services/preferences/preferences-service.js +10 -0
- package/dist/services/preferences/preferences-types.d.ts +13 -0
- package/dist/services/preferences/preferences-types.js +11 -0
- package/dist/services/qa/screenshot-archive-service.d.ts +51 -0
- package/dist/services/qa/screenshot-archive-service.js +134 -0
- package/dist/services/rd/rd-service.js +10 -11
- package/dist/services/rd/types.d.ts +32 -32
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +60 -0
- package/dist/services/rd-swarm/rd-swarm-service.js +93 -0
- package/dist/services/recommendations/capability-seed-items.js +0 -1
- package/dist/services/recommendations/capability-seed-mappings.js +0 -1
- package/dist/services/recommendations/capability-seed-sources.js +0 -1
- package/dist/services/release/version-precheck-service.d.ts +51 -0
- package/dist/services/release/version-precheck-service.js +257 -0
- package/dist/services/scan/acceptance-coverage-service.js +1 -1
- package/dist/services/scan/archetype-service.js +1 -1
- package/dist/services/scan/existing-system-service.js +1 -1
- package/dist/services/scan/libraries-service.js +1 -1
- package/dist/services/sediment/json-schema.d.ts +40 -40
- package/dist/services/share/bundle-types.d.ts +12 -12
- package/dist/services/share/run-state-contract.d.ts +2 -2
- package/dist/services/skill/skill-search-service.d.ts +12 -7
- package/dist/services/skill/skill-search-service.js +8 -4
- package/dist/services/skillhub/migrations/001-initial.sql +71 -0
- package/dist/services/skillhub/migrations/002-loop-release.sql +32 -0
- package/dist/services/skillhub/migrations/003-loop-bee-relation.sql +35 -0
- package/dist/services/skillhub/migrations/004-loop-bee-extension.sql +65 -0
- package/dist/services/skillhub/migrations/005-evolution-evaluation.sql +81 -0
- package/dist/services/skillhub/migrations/006-crystallization-event.sql +92 -0
- package/dist/services/skills/hooks-settings-service.d.ts +75 -0
- package/dist/services/skills/hooks-settings-service.js +230 -2
- package/dist/services/skills/skill-registry.d.ts +1 -0
- package/dist/services/skills/skill-registry.js +6 -4
- package/dist/services/skills/skill-runbook-service.js +1 -1
- package/dist/services/slice/slice-check-service.js +1 -1
- package/dist/services/standards/main-session-monitor-ban-hook.d.ts +14 -0
- package/dist/services/standards/main-session-monitor-ban-hook.js +19 -0
- package/dist/services/standards/missing-standards-detector.d.ts +25 -0
- package/dist/services/standards/missing-standards-detector.js +43 -12
- package/dist/services/tech/tech-change-id-service.d.ts +82 -0
- package/dist/services/tech/tech-change-id-service.js +117 -0
- package/dist/services/understand/understand-hybrid-service.js +1 -1
- package/dist/services/understand/understand-scan-service.js +2 -2
- package/dist/services/upgrade/upgrade-service.js +4 -3
- package/dist/services/verdict/envelopes.d.ts +2 -2
- package/dist/services/verdict/envelopes.js +2 -2
- package/dist/services/verdict/verdict-aggregator.d.ts +3 -3
- package/dist/services/vm/vm-lease.d.ts +40 -0
- package/dist/services/vm/vm-lease.js +137 -0
- package/dist/services/workflow/autonomous-resume-writer.js +1 -1
- package/dist/services/workflow/pipeline-verify-gate-support.d.ts +47 -0
- package/dist/services/workflow/pipeline-verify-gate-support.js +194 -0
- package/dist/services/workflow/pipeline-verify-service.d.ts +17 -81
- package/dist/services/workflow/pipeline-verify-service.js +42 -218
- package/dist/services/workflow/pipeline-verify-types.d.ts +90 -0
- package/dist/services/workflow/pipeline-verify-types.js +10 -0
- package/dist/services/workflow/plan-reader.d.ts +1 -1
- package/dist/services/workflow/plan-reader.js +1 -1
- package/dist/services/workflow/plan-refresher.d.ts +1 -1
- package/dist/services/workflow/plan-refresher.js +1 -1
- package/dist/services/workflow/plan-trigger-detector.d.ts +1 -1
- package/dist/services/workflow/plan-trigger-detector.js +1 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +1 -1
- package/dist/services/workflow/workflow-autonomous-service.d.ts +2 -98
- package/dist/services/workflow/workflow-autonomous-types.d.ts +114 -0
- package/dist/services/workflow/workflow-autonomous-types.js +21 -0
- package/dist/services/workflow/workflow-router-service.js +18 -16
- package/dist/services/workflow/workflow-spec-lint.d.ts +13 -0
- package/dist/services/workflow/workflow-spec-lint.js +75 -0
- package/dist/services/workflow/workflow-spec-types.d.ts +100 -0
- package/dist/services/workflow/workflow-spec-types.js +13 -0
- package/dist/services/workflow/workflow-spec-yaml.d.ts +17 -0
- package/dist/services/workflow/workflow-spec-yaml.js +88 -0
- package/dist/services/workflow/workflow-spec.d.ts +11 -91
- package/dist/services/workflow/workflow-spec.js +16 -145
- package/dist/services/workspace/migrate-service.js +1 -1
- package/dist/services/workspace/workspace-service.js +1 -1
- package/dist/services/worktree/worktree-lease.d.ts +170 -0
- package/dist/services/worktree/worktree-lease.js +242 -0
- package/package.json +91 -51
- package/scripts/clean-dist.mjs +31 -1
- package/scripts/copy-templates.mjs +16 -0
- package/scripts/sync-version.mjs +53 -2
- package/skills/bee/peaks-perf-audit/SKILL.md +17 -0
- package/skills/bee/peaks-prd/SKILL.md +16 -0
- package/skills/bee/peaks-prd/test-prompts.json +12 -0
- package/skills/bee/peaks-qa/SKILL.md +16 -1
- package/skills/bee/peaks-qa/references/qa-sub-agent-dispatch.md +22 -0
- package/skills/bee/peaks-qa/test-prompts.json +12 -0
- package/skills/bee/peaks-rd/SKILL.md +29 -20
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +39 -0
- package/skills/bee/peaks-rd/test-prompts.json +12 -0
- package/skills/bee/peaks-reviewer/SKILL.md +17 -0
- package/skills/bee/peaks-sc/SKILL.md +16 -0
- package/skills/bee/peaks-security-audit/SKILL.md +17 -0
- package/skills/bee/peaks-txt/SKILL.md +16 -0
- package/skills/bee/peaks-txt/test-prompts.json +12 -0
- package/skills/bee/peaks-ui/SKILL.md +49 -43
- package/skills/bee/peaks-ui/test-prompts.json +12 -0
- package/skills/peaks-code/SKILL.md +54 -109
- package/skills/peaks-code/references/boundaries.md +15 -1
- package/skills/peaks-code/references/cron-scheduler-deployment.md +313 -0
- package/skills/peaks-code/references/external-skill-invocation.md +27 -0
- package/skills/peaks-code/references/lease-dashboard.html +224 -0
- package/skills/peaks-code/references/lease-stats.sample.json +26 -0
- package/skills/peaks-code/references/peaks-worktree-l2-enforcers.md +208 -0
- package/skills/peaks-code/references/periodic-checkpoint.md +4 -4
- package/skills/peaks-code/references/runbook.md +63 -1
- package/skills/peaks-code/references/startup-sequence.md +110 -0
- package/skills/peaks-code/references/step-0-8-gate.md +1 -1
- package/skills/peaks-code/references/sub-agent-dispatch.md +92 -1
- package/skills/peaks-code/references/worktree-governance.md +123 -0
- package/skills/peaks-code/test-prompts.json +12 -0
- package/skills/peaks-doctor/SKILL.md +1 -1
- package/skills/peaks-ide/SKILL.md +1 -1
- package/skills/peaks-solo/SKILL.md +21 -0
- package/skills/peaks-solo/references/triage-decision-table.md +6 -0
- package/skills/peaks-sop/test-prompts.json +17 -0
- package/dist/cli/commands/agent-commands.d.ts +0 -20
- package/dist/cli/commands/agent-commands.js +0 -48
- package/dist/cli/commands/classify-classify-commands.d.ts +0 -19
- package/dist/cli/commands/classify-classify-commands.js +0 -151
- package/dist/cli/commands/contract-commands.d.ts +0 -26
- package/dist/cli/commands/contract-commands.js +0 -114
- package/dist/cli/commands/session-auto-compact-hook-command.d.ts +0 -37
- package/dist/cli/commands/session-auto-compact-hook-command.js +0 -127
- package/dist/cli/commands/worker-commands.d.ts +0 -3
- package/dist/cli/commands/worker-commands.js +0 -52
- package/dist/services/agent/ecc-agent-service.d.ts +0 -47
- package/dist/services/agent/ecc-agent-service.js +0 -143
- package/dist/services/config/provider-service.d.ts +0 -48
- package/dist/services/config/provider-service.js +0 -143
- package/dist/services/context/dispatch-context-guard.d.ts +0 -27
- package/dist/services/context/dispatch-context-guard.js +0 -192
- package/dist/services/context/shared-channel.d.ts +0 -93
- package/dist/services/context/shared-channel.js +0 -308
- package/dist/services/filesystem/file-lock.d.ts +0 -11
- package/dist/services/filesystem/file-lock.js +0 -152
- package/dist/services/mut/assert-scanner.d.ts +0 -6
- package/dist/services/mut/assert-scanner.js +0 -116
- package/dist/services/mut/index.d.ts +0 -8
- package/dist/services/mut/index.js +0 -7
- package/dist/services/mut/mut-runner.d.ts +0 -39
- package/dist/services/mut/mut-runner.js +0 -29
- package/dist/services/mut/production-stryker.d.ts +0 -2
- package/dist/services/mut/production-stryker.js +0 -75
- package/dist/services/mut/report-builder.d.ts +0 -11
- package/dist/services/mut/report-builder.js +0 -110
- package/dist/services/mut/report-loader.d.ts +0 -31
- package/dist/services/mut/report-loader.js +0 -78
- package/dist/services/mut/thresholds.d.ts +0 -21
- package/dist/services/mut/thresholds.js +0 -22
- package/dist/services/mut/types.d.ts +0 -336
- package/dist/services/mut/types.js +0 -59
- package/dist/services/providers/minimax-provider-service.d.ts +0 -24
- package/dist/services/providers/minimax-provider-service.js +0 -143
- package/dist/services/providers/minimax-worker-service.d.ts +0 -21
- package/dist/services/providers/minimax-worker-service.js +0 -83
- package/dist/shared/fs.d.ts +0 -4
- package/dist/shared/fs.js +0 -26
- package/dist/shared/paths.d.ts +0 -6
- package/dist/shared/paths.js +0 -50
- package/dist/shared/result.d.ts +0 -22
- package/dist/shared/result.js +0 -46
- package/dist/shared/version.d.ts +0 -1
- package/dist/shared/version.js +0 -1
- package/examples/video-demo/README.md +0 -142
- package/examples/video-demo/out/en-closing-960.png +0 -0
- package/examples/video-demo/out/zh-closing-960.png +0 -0
- package/examples/video-demo/preview/peaks-loop-demo-en.mp4 +0 -0
- package/examples/video-demo/preview/peaks-loop-demo.mp4 +0 -0
- /package/dist/services/{job/job-resource-snapshot.js → job-snapshot/snapshot.js} +0 -0
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
17
17
|
import { checkPrdBlocks } from '../../services/prd/prd-blocks-checker.js';
|
|
18
|
-
import { ok } from '
|
|
18
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
19
19
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
20
20
|
export function registerPrdBlocksCommands(program, io) {
|
|
21
21
|
// Find existing `prd` top-level command (registered by prd-commands.ts).
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { readFile } from 'node:fs/promises';
|
|
17
17
|
import { initHandoff, readHandoff, showHandoff, verifyHandoff, writeHandoff } from '../../services/prd/handoff-service.js';
|
|
18
|
-
import { fail, ok } from '
|
|
18
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
19
19
|
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
20
20
|
/** Split a comma-separated string into a trimmed, non-empty list.
|
|
21
21
|
* Empty / undefined input → empty array. */
|
|
@@ -37,7 +37,9 @@ async function resolveBody(bodyArg) {
|
|
|
37
37
|
return bodyArg;
|
|
38
38
|
}
|
|
39
39
|
export function registerPrdCommands(program, io) {
|
|
40
|
-
const prd = program
|
|
40
|
+
const prd = program
|
|
41
|
+
.command('prd', { hidden: true })
|
|
42
|
+
.description('peaks-prd role: artifact + handoff primitives');
|
|
41
43
|
const handoff = prd.command('handoff').description('Write / verify / show the immutable PRD handoff (sha256-locked, schemaVersion: 2)');
|
|
42
44
|
// peaks prd handoff init
|
|
43
45
|
addJsonOption(handoff
|
|
@@ -12,6 +12,26 @@ const ALLOWED_KEYS = new Set([
|
|
|
12
12
|
'swarmSpeculative',
|
|
13
13
|
'loopAutonomousEnabled',
|
|
14
14
|
]);
|
|
15
|
+
/**
|
|
16
|
+
* Stable, sorted list of allowed preference keys. Used in error messages
|
|
17
|
+
* so a PREFERENCES_KEY_UNKNOWN throw is self-documenting (the operator
|
|
18
|
+
* sees exactly which keys are valid without reading the source).
|
|
19
|
+
*/
|
|
20
|
+
const ALLOWED_KEYS_LIST = Array.from(ALLOWED_KEYS).sort();
|
|
21
|
+
/**
|
|
22
|
+
* Build a PREFERENCES_KEY_UNKNOWN error with the allowed-keys list baked
|
|
23
|
+
* in. Throwing a plain Error here is the legacy path that the CLI
|
|
24
|
+
* surfaces verbatim on stderr; the helper exists so all three sites
|
|
25
|
+
* (`get` / `set` / `reset`) emit the same operator-facing message.
|
|
26
|
+
*
|
|
27
|
+
* Stage-3 follow-up (ice-cola surface check 2026-07-22, follow-on to
|
|
28
|
+
* report item 5.3): previously the message was just `PREFERENCES_KEY_UNKNOWN:
|
|
29
|
+
* <key>` which forced the operator to look up valid keys elsewhere. The
|
|
30
|
+
* new message lists the valid keys inline so the response is actionable.
|
|
31
|
+
*/
|
|
32
|
+
function unknownKeyError(key) {
|
|
33
|
+
return new Error(`PREFERENCES_KEY_UNKNOWN: ${key}. Allowed keys: ${ALLOWED_KEYS_LIST.join(', ')}.`);
|
|
34
|
+
}
|
|
15
35
|
export function registerPreferencesCommands(program) {
|
|
16
36
|
const prefs = program
|
|
17
37
|
.command('preferences')
|
|
@@ -25,7 +45,7 @@ export function registerPreferencesCommands(program) {
|
|
|
25
45
|
.action((opts) => {
|
|
26
46
|
try {
|
|
27
47
|
if (!ALLOWED_KEYS.has(opts.key)) {
|
|
28
|
-
throw
|
|
48
|
+
throw unknownKeyError(opts.key);
|
|
29
49
|
}
|
|
30
50
|
const all = loadPreferences(opts.project);
|
|
31
51
|
const value = all[opts.key];
|
|
@@ -71,7 +91,7 @@ export function registerPreferencesCommands(program) {
|
|
|
71
91
|
.action((opts) => {
|
|
72
92
|
try {
|
|
73
93
|
if (!ALLOWED_KEYS.has(opts.key)) {
|
|
74
|
-
throw
|
|
94
|
+
throw unknownKeyError(opts.key);
|
|
75
95
|
}
|
|
76
96
|
let parsed = opts.value;
|
|
77
97
|
try {
|
|
@@ -106,7 +126,7 @@ export function registerPreferencesCommands(program) {
|
|
|
106
126
|
.action((opts) => {
|
|
107
127
|
try {
|
|
108
128
|
if (!ALLOWED_KEYS.has(opts.key)) {
|
|
109
|
-
throw
|
|
129
|
+
throw unknownKeyError(opts.key);
|
|
110
130
|
}
|
|
111
131
|
const filePath = preferencesPath(opts.project);
|
|
112
132
|
// Read raw on-disk state (not the merged view) so removing a key
|
|
@@ -4,7 +4,7 @@ import { extractSessionMemories, readMemoryIndex, readProjectMemories, readProje
|
|
|
4
4
|
import { readBusinessKnowledge } from '../../services/prd/project-scan-reader.js';
|
|
5
5
|
import { applyStalePolicy, DEFAULT_STALE_DAYS } from '../../shared/stale-policy.js';
|
|
6
6
|
import { formatMdCompact } from '../../shared/format-md-compact.js';
|
|
7
|
-
import { fail, ok } from '
|
|
7
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
8
8
|
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
9
9
|
export function registerProjectCommands(program, io) {
|
|
10
10
|
const project = program.command('project').description('Aggregate Peaks state for a target project (read-only)');
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
16
16
|
import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
|
|
17
17
|
import { acceptQaReview, buildEmptyQaReview, deriveQaDecision, QA_BUSINESS_ITEMS, readQaReview, rejectQaReview, scoreQaItem, writeQaReview } from '../../services/qa/qa-business-review-state.js';
|
|
18
|
-
import { fail, ok } from '
|
|
18
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
19
19
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
20
20
|
export function registerQaBusinessReviewCommands(program, io) {
|
|
21
21
|
// G5 commands registered as TOP-LEVEL commands prefixed with `qa-business-`
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
import { Command } from 'commander';
|
|
29
29
|
import { type ProgramIO } from '../cli-helpers.js';
|
|
30
30
|
import { type BrowserEvent } from '../../services/qa/browser-restart-detector.js';
|
|
31
|
-
import type
|
|
31
|
+
import { type MutReportJson } from 'peaks-loop-mut';
|
|
32
32
|
export type QaRunOptions = {
|
|
33
33
|
project: string;
|
|
34
34
|
browser?: boolean;
|
|
@@ -26,8 +26,11 @@
|
|
|
26
26
|
* backend-only or already-covered-by-unit-tests work.
|
|
27
27
|
*/
|
|
28
28
|
import { join } from 'node:path';
|
|
29
|
+
import { resolve } from 'node:path';
|
|
29
30
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
30
|
-
import { fail, ok } from '
|
|
31
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
32
|
+
import { archiveScreenshots } from '../../services/qa/screenshot-archive-service.js';
|
|
33
|
+
import { getSessionId } from '../../services/session/session-manager.js';
|
|
31
34
|
import { BrowserRestartDetector } from '../../services/qa/browser-restart-detector.js';
|
|
32
35
|
import { BrowserEventLogger } from '../../services/qa/browser-event-logger.js';
|
|
33
36
|
import { BROWSER_REUSE_HINT } from '../../services/qa/browser-reuse-hint.js';
|
|
@@ -36,7 +39,7 @@ import { buildContext } from '../../services/context/context-builder.js';
|
|
|
36
39
|
// Plan 1 / Task 10 — production fetcher (replaces mockFetcher).
|
|
37
40
|
import { createHeadroomFetcher } from '../../services/context/headroom-fetcher.js';
|
|
38
41
|
// Plan 2 / Task 8 — consume MUT.sig from peaks-mut into verdict envelope.
|
|
39
|
-
import { loadMutReport, mutReportPath } from '
|
|
42
|
+
import { loadMutReport, mutReportPath } from 'peaks-loop-mut';
|
|
40
43
|
function buildHeadroomFetcher(sid) {
|
|
41
44
|
return createHeadroomFetcher({
|
|
42
45
|
cacheDir: `.peaks/_runtime/${sid}/doc-cache`,
|
|
@@ -200,7 +203,7 @@ export function readQaRunOptions(options) {
|
|
|
200
203
|
}
|
|
201
204
|
export function registerQaCommands(program, io) {
|
|
202
205
|
const qa = program
|
|
203
|
-
.command('qa')
|
|
206
|
+
.command('qa', { hidden: true })
|
|
204
207
|
.description('peaks-qa slice: run QA gates (functional / security / browser E2E / mutation) for the active project');
|
|
205
208
|
addJsonOption(qa
|
|
206
209
|
.command('run')
|
|
@@ -268,4 +271,37 @@ export function registerQaCommands(program, io) {
|
|
|
268
271
|
process.exitCode = 1;
|
|
269
272
|
}
|
|
270
273
|
});
|
|
274
|
+
// rid-012 (2026-07-27) — screenshot archive.
|
|
275
|
+
// Enforces peaks-qa SKILL.md "Hard contracts for browser validation"
|
|
276
|
+
// Contract 1: every Playwright `browser_take_screenshot` MUST land under
|
|
277
|
+
// `.peaks/_runtime/<sessionId>/qa/screenshots/`, not at the project root.
|
|
278
|
+
// When the LLM forgets to pass `filename`, Playwright MCP scatters
|
|
279
|
+
// `.png` files at the repo top level. This subcommand is the
|
|
280
|
+
// remediation: scan `--source` (default: project root) and move stray
|
|
281
|
+
// screenshots into `.peaks/_runtime/<session-id>/qa/screenshots/`.
|
|
282
|
+
addJsonOption(qa
|
|
283
|
+
.command('archive-screenshots')
|
|
284
|
+
.description('Move stray Playwright screenshots (.png/.jpg/.jpeg) from the ' +
|
|
285
|
+
'project root into .peaks/_runtime/<session-id>/qa/screenshots/. ' +
|
|
286
|
+
'Enforces peaks-qa SKILL.md Contract 1.')
|
|
287
|
+
.option('--source <dir>', 'directory to scan for stray screenshots (default: project root)', '.')
|
|
288
|
+
.option('--project <path>', 'project root (default: cwd)', '.')
|
|
289
|
+
.option('--session-id <sid>', 'target session id; defaults to the active session', '')).action((options) => {
|
|
290
|
+
try {
|
|
291
|
+
const projectRoot = resolve(options.project);
|
|
292
|
+
const sid = options.sessionId?.trim() || getSessionId(projectRoot) || 'ad-hoc';
|
|
293
|
+
const targetDir = join(projectRoot, '.peaks', '_runtime', sid, 'qa', 'screenshots');
|
|
294
|
+
const envelope = archiveScreenshots({ sourceDir: options.source, targetDir });
|
|
295
|
+
printResult(io, ok('qa.archive-screenshots', envelope, [], envelope.moved.length === 0
|
|
296
|
+
? ['No stray screenshots found in ' + envelope.scannedSource]
|
|
297
|
+
: [
|
|
298
|
+
`Moved ${envelope.moved.length} file(s) to ${envelope.targetDir}`,
|
|
299
|
+
'Re-run peaks qa run to verify the gate passes'
|
|
300
|
+
]), options.json);
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
process.exitCode = 1;
|
|
304
|
+
printResult(io, fail('qa.archive-screenshots', 'ARCHIVE_FAILED', error instanceof Error ? error.message : 'Unknown error', { project: options.project, source: options.source }, ['Verify the source dir exists and is readable']), options.json);
|
|
305
|
+
}
|
|
306
|
+
});
|
|
271
307
|
}
|
|
@@ -19,6 +19,21 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import type { Command } from 'commander';
|
|
21
21
|
import { isReleaseStage } from '../../services/release/release-state.js';
|
|
22
|
+
import { type LayerResult } from '../../services/release/version-precheck-service.js';
|
|
22
23
|
import { type ProgramIO } from '../cli-helpers.js';
|
|
24
|
+
export declare function executeCanaryAction(opts: {
|
|
25
|
+
percent: string;
|
|
26
|
+
note?: string;
|
|
27
|
+
project?: string;
|
|
28
|
+
json?: boolean;
|
|
29
|
+
}, io: ProgramIO, projectRoot: string): {
|
|
30
|
+
ok: boolean;
|
|
31
|
+
payload: Readonly<Record<string, unknown>>;
|
|
32
|
+
status: 'PRECHECK_BLOCKER' | 'INVALID_PERCENT' | 'INVALID_TRANSITION' | 'OK';
|
|
33
|
+
blockerLayer?: {
|
|
34
|
+
name: string;
|
|
35
|
+
result: LayerResult;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
23
38
|
export declare function registerReleaseCommands(program: Command, io: ProgramIO): void;
|
|
24
39
|
export { isReleaseStage };
|
|
@@ -19,12 +19,74 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
21
21
|
import { hotfixRelease, isReleaseStage, planRelease, readReleaseState, rollbackRelease, transitionRelease, watchWindow, writeReleaseState } from '../../services/release/release-state.js';
|
|
22
|
-
import {
|
|
22
|
+
import { runAllLayers } from '../../services/release/version-precheck-service.js';
|
|
23
|
+
import { runChangesetHardGate } from '../../services/changeset/changeset-check-service.js';
|
|
24
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
23
25
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
24
26
|
const CANARY_PERCENTS = {
|
|
25
27
|
10: 'canary-10',
|
|
26
28
|
50: 'canary-50'
|
|
27
29
|
};
|
|
30
|
+
// rid-010 — extracted canary action handler so AC-8 can drive the canary
|
|
31
|
+
// precheck-guard via direct function call (not via program.parseAsync with a
|
|
32
|
+
// mocked service). Returns the result envelope for the caller to print.
|
|
33
|
+
export function executeCanaryAction(opts, io, projectRoot) {
|
|
34
|
+
// rid-010 — precheck guard (Layer A or Layer B blocker refuses canary).
|
|
35
|
+
// rid-011 — changeset hard gate runs inline in the canary closure BEFORE
|
|
36
|
+
// this function is called (step 0 short-circuits with CHANGESET_BLOCKED).
|
|
37
|
+
// Layers C/D default warning → do not block canary; --strict upgrade would
|
|
38
|
+
// be a separate flag (out of scope for rid-011).
|
|
39
|
+
// Layers C/D default warning → do not block canary; --strict upgrade would
|
|
40
|
+
// be a separate flag (out of scope for rid-010).
|
|
41
|
+
const precheck = runAllLayers({ projectRoot, strict: false });
|
|
42
|
+
const blockerEntry = Object.entries(precheck.layers).find(([, l]) => l.status === 'blocker');
|
|
43
|
+
if (blockerEntry !== undefined) {
|
|
44
|
+
const [name, result] = blockerEntry;
|
|
45
|
+
return {
|
|
46
|
+
ok: false,
|
|
47
|
+
status: 'PRECHECK_BLOCKER',
|
|
48
|
+
blockerLayer: { name, result },
|
|
49
|
+
payload: {
|
|
50
|
+
projectRoot,
|
|
51
|
+
precheckSnapshotAt: precheck.snapshotAt,
|
|
52
|
+
layer: name,
|
|
53
|
+
message: result.message,
|
|
54
|
+
remediation: result.remediation
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const percent = Number.parseInt(opts.percent, 10);
|
|
59
|
+
if (percent !== 10 && percent !== 50) {
|
|
60
|
+
return {
|
|
61
|
+
ok: false,
|
|
62
|
+
status: 'INVALID_PERCENT',
|
|
63
|
+
payload: { projectRoot, got: opts.percent }
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const state = readReleaseState(projectRoot);
|
|
67
|
+
const targetStage = CANARY_PERCENTS[percent];
|
|
68
|
+
const result = transitionRelease(state, targetStage, opts.note);
|
|
69
|
+
if ('error' in result) {
|
|
70
|
+
return {
|
|
71
|
+
ok: false,
|
|
72
|
+
status: 'INVALID_TRANSITION',
|
|
73
|
+
payload: { projectRoot, error: result.error }
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
writeReleaseState(projectRoot, result.state);
|
|
77
|
+
return {
|
|
78
|
+
ok: true,
|
|
79
|
+
status: 'OK',
|
|
80
|
+
payload: {
|
|
81
|
+
projectRoot,
|
|
82
|
+
percent,
|
|
83
|
+
currentStage: targetStage,
|
|
84
|
+
nextAction: percent === 10
|
|
85
|
+
? 'peaks release canary --percent 50'
|
|
86
|
+
: 'peaks release promote'
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
28
90
|
export function registerReleaseCommands(program, io) {
|
|
29
91
|
const release = program
|
|
30
92
|
.command('release')
|
|
@@ -53,37 +115,43 @@ export function registerReleaseCommands(program, io) {
|
|
|
53
115
|
'Run `peaks release canary --percent 10` to begin the canary phase.'
|
|
54
116
|
]), opts.json ?? false);
|
|
55
117
|
});
|
|
56
|
-
// 2. canary
|
|
118
|
+
// 2. canary — rid-010 wires precheck as the first step via executeCanaryAction
|
|
57
119
|
addJsonOption(release
|
|
58
120
|
.command('canary')
|
|
59
121
|
.description('Advance the active release to a canary stage. Two percent values supported: ' +
|
|
60
122
|
'10 (first canary, requires stage=planned) and 50 (second canary, requires ' +
|
|
61
|
-
'stage=canary-10).
|
|
123
|
+
'stage=canary-10). Runs `peaks release precheck` first and refuses with ' +
|
|
124
|
+
'PRECHECK_BLOCKER if any blocker layer (rootVsShared or tagCollision) fails.')
|
|
62
125
|
.requiredOption('--percent <10|50>', 'canary percent (10 or 50)')
|
|
63
126
|
.option('--note <text>', 'optional note for the stage transition')
|
|
64
127
|
.option('--project <path>', 'project root (default: cwd)')).action((opts) => {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
128
|
+
const projectRoot = opts.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
129
|
+
// rid-011 — changeset hard gate (step 0).
|
|
130
|
+
const gate = runChangesetHardGate(projectRoot);
|
|
131
|
+
if (gate.state === 'staged-present') {
|
|
132
|
+
process.exitCode = 1;
|
|
133
|
+
printResult(io, fail('release.canary', 'CHANGESET_BLOCKED', `${gate.stagedFiles.length} staged .changeset/*.md file(s) — refusing canary`, { projectRoot, state: gate.state, stagedFiles: [...gate.stagedFiles], snapshotAt: gate.snapshotAt }, [`Drain pending changesets (coordinating LLM: drain via the standard changeset consumption path), then re-run \`peaks changeset check --project ${projectRoot}\` to confirm clean state.`]), opts.json ?? false);
|
|
68
134
|
return;
|
|
69
135
|
}
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
136
|
+
const result = executeCanaryAction(opts, io, projectRoot);
|
|
137
|
+
if (result.status === 'PRECHECK_BLOCKER') {
|
|
138
|
+
const layer = result.blockerLayer;
|
|
139
|
+
printResult(io, fail('release.canary', 'PRECHECK_BLOCKER', `precheck blocker on layer '${layer?.name ?? 'unknown'}': ${layer?.result.message ?? ''}`, result.payload, [
|
|
140
|
+
`Run 'peaks release precheck --project ${projectRoot}' for the full 4-layer envelope.`,
|
|
141
|
+
`Run 'peaks release precheck --strict' to also surface warning-layer issues.`,
|
|
142
|
+
`Remediation: ${layer?.result.remediation ?? ''}`
|
|
143
|
+
]), opts.json ?? false);
|
|
76
144
|
return;
|
|
77
145
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
146
|
+
if (result.status === 'INVALID_PERCENT') {
|
|
147
|
+
printResult(io, fail('release.canary', 'INVALID_PERCENT', `--percent must be 10 or 50 (got "${opts.percent}")`, result.payload, []), opts.json ?? false);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (result.status === 'INVALID_TRANSITION') {
|
|
151
|
+
printResult(io, fail('release.canary', 'INVALID_TRANSITION', String(result.payload['error'] ?? ''), result.payload, []), opts.json ?? false);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
printResult(io, ok('release.canary', result.payload, [], []), opts.json ?? false);
|
|
87
155
|
});
|
|
88
156
|
// 3. promote
|
|
89
157
|
addJsonOption(release
|
|
@@ -211,6 +279,13 @@ export function registerReleaseCommands(program, io) {
|
|
|
211
279
|
.option('--note <text>', 'optional hotfix note')
|
|
212
280
|
.option('--project <path>', 'project root (default: cwd)')).action((version, opts) => {
|
|
213
281
|
const projectRoot = opts.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
282
|
+
// rid-011 — changeset hard gate (step 0). No --skip-changeset-check override.
|
|
283
|
+
const changesetGate = runChangesetHardGate(projectRoot);
|
|
284
|
+
if (changesetGate.state === 'staged-present') {
|
|
285
|
+
process.exitCode = 1;
|
|
286
|
+
printResult(io, fail('release.hotfix', 'CHANGESET_BLOCKED', `${changesetGate.stagedFiles.length} staged .changeset/*.md file(s) — refusing to start hotfix`, { projectRoot, stagedFiles: [...changesetGate.stagedFiles], snapshotAt: changesetGate.snapshotAt }, [`Drain pending changesets (coordinating LLM: drain via the standard changeset consumption path), then re-run \`peaks changeset check --project ${projectRoot}\` to confirm clean state.`]), opts.json ?? false);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
214
289
|
const state = readReleaseState(projectRoot);
|
|
215
290
|
const result = hotfixRelease(state, version, opts.note);
|
|
216
291
|
if ('error' in result) {
|
|
@@ -226,6 +301,23 @@ export function registerReleaseCommands(program, io) {
|
|
|
226
301
|
'Hotfix started at canary-10. Run `peaks release canary --percent 50` to advance.'
|
|
227
302
|
]), opts.json ?? false);
|
|
228
303
|
});
|
|
304
|
+
// 8. precheck — rid-010 (Phase 4 slice 1) — 4-layer version precheck.
|
|
305
|
+
addJsonOption(release
|
|
306
|
+
.command('precheck')
|
|
307
|
+
.description('Run the 4-layer version precheck (rootVsShared / tagCollision / ' +
|
|
308
|
+
'changesetStaged / workspaceLockstep). Layer A+B are blockers by default; ' +
|
|
309
|
+
'Layer C+D are warnings unless --strict is passed (CI parity mode). ' +
|
|
310
|
+
'Shared with publish.yml gate-cli-version step §(A).')
|
|
311
|
+
.option('--strict', 'treat warnings as blockers (CI parity mode)')
|
|
312
|
+
.option('--project <path>', 'project root (default: cwd)')).action((opts) => {
|
|
313
|
+
const projectRoot = opts.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
314
|
+
const envelope = runAllLayers({ projectRoot, strict: opts.strict === true });
|
|
315
|
+
process.exitCode = envelope.ok ? 0 : 1;
|
|
316
|
+
const warningLines = envelope.overall === 'warning'
|
|
317
|
+
? ['Warning layers reported but did not block. Re-run with --strict to upgrade.']
|
|
318
|
+
: [];
|
|
319
|
+
printResult(io, ok('release.precheck', envelope, [], warningLines), opts.json ?? false);
|
|
320
|
+
});
|
|
229
321
|
}
|
|
230
322
|
// Re-export for tests / external consumers.
|
|
231
323
|
export { isReleaseStage };
|
|
@@ -4,7 +4,7 @@ import { ConfirmationRequiredError } from '../../services/mode/mode-enforcement.
|
|
|
4
4
|
import { recordBypass, isBypassLimitReached, MAX_BYPASSES_PER_SESSION } from '../../services/mode/bypass-tracker.js';
|
|
5
5
|
import { lintRequestArtifact } from '../../services/artifacts/artifact-lint-service.js';
|
|
6
6
|
import { getRepairCycleStatus } from '../../services/artifacts/repair-cycle-service.js';
|
|
7
|
-
import { fail, ok } from '
|
|
7
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
8
8
|
import { formatMdCompact } from '../../shared/format-md-compact.js';
|
|
9
9
|
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
10
10
|
/**
|
|
@@ -5,7 +5,7 @@ import { loadRetrospectiveIndex } from '../../services/retrospective/retrospecti
|
|
|
5
5
|
import { showRetrospective } from '../../services/retrospective/retrospective-show.js';
|
|
6
6
|
import { searchRetrospective } from '../../services/retrospective/retrospective-search-service.js';
|
|
7
7
|
import { pickFromList } from '../../services/fuzzy-matching/fzf-pick-service.js';
|
|
8
|
-
import { fail, ok } from '
|
|
8
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
9
9
|
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
10
10
|
const VALID_RETRO_TYPES = ['refactor', 'feature', 'bugfix', 'config', 'docs', 'chore'];
|
|
11
11
|
const VALID_RETRO_OUTCOMES = ['shipped', 'blocked', 'in-flight', 'cancelled'];
|
|
@@ -2,7 +2,7 @@ import { runReviewer, REVIEWER_ID } from '../../services/reviewer/reviewer-servi
|
|
|
2
2
|
import { loadReviewerConfig } from '../../services/reviewer/reviewer-config.js';
|
|
3
3
|
import { deriveModelFamily } from '../../services/reviewer/model-family.js';
|
|
4
4
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
5
|
-
import { fail, ok } from '
|
|
5
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
6
6
|
export function registerReviewerCommands(program, io) {
|
|
7
7
|
const reviewer = program
|
|
8
8
|
.command('reviewer')
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
12
12
|
import { DEFAULT_SENIOR_FE_ROLE, grantPermission, readRoleRegistry, roleHasPermission, upsertRole, writeRoleRegistry } from '../../services/role/role-registry.js';
|
|
13
|
-
import { fail, ok } from '
|
|
13
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
14
14
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
15
15
|
export function registerRoleCommands(program, io) {
|
|
16
16
|
const role = program
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Internal helper exposed for tests + future programmatic callers:
|
|
2
|
+
* resolve the registry file location, ensuring the parent dir
|
|
3
|
+
* exists. Idempotent. */
|
|
4
|
+
export declare function ensureRegistryDir(registryFile: string): void;
|
|
5
|
+
/** Internal helper for tests: locate the registry file under the
|
|
6
|
+
* given project root. Thin wrapper so tests can stub the resolution. */
|
|
7
|
+
export declare function registryFileFor(projectRoot: string): string;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal helpers for the adapter-registry path used by
|
|
3
|
+
* `peaks adapter register|list`. Extracted from runtime-commands.ts
|
|
4
|
+
* after Task 1.7 (design §13.1) retired the `peaks runtime compact`
|
|
5
|
+
* dispatch — the registry plumbing is still used by the
|
|
6
|
+
* adapter-registration CLI, so it lives here as a stand-alone module
|
|
7
|
+
* rather than re-attaching to the retired dispatch surface.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdirSync } from 'node:fs';
|
|
10
|
+
import { dirname } from 'node:path';
|
|
11
|
+
import { AdapterRegistry } from '../../services/adapter/adapter-registry.js';
|
|
12
|
+
/** Internal helper exposed for tests + future programmatic callers:
|
|
13
|
+
* resolve the registry file location, ensuring the parent dir
|
|
14
|
+
* exists. Idempotent. */
|
|
15
|
+
export function ensureRegistryDir(registryFile) {
|
|
16
|
+
mkdirSync(dirname(registryFile), { recursive: true });
|
|
17
|
+
}
|
|
18
|
+
/** Internal helper for tests: locate the registry file under the
|
|
19
|
+
* given project root. Thin wrapper so tests can stub the resolution. */
|
|
20
|
+
export function registryFileFor(projectRoot) {
|
|
21
|
+
const f = AdapterRegistry.defaultFile(projectRoot);
|
|
22
|
+
ensureRegistryDir(f);
|
|
23
|
+
return f;
|
|
24
|
+
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { existsSync, mkdirSync } from 'node:fs';
|
|
2
2
|
import { join, dirname } from 'node:path';
|
|
3
3
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
4
|
-
import { fail, ok } from '
|
|
5
|
-
import { getErrorMessage } from '../../shared/result.js';
|
|
4
|
+
import { fail, getErrorMessage, ok } from 'peaks-loop-shared/result';
|
|
6
5
|
import { detectRuntime } from '../../services/runtime/runtime-detector.js';
|
|
7
6
|
import { RuntimeService } from '../../services/runtime/runtime-service.js';
|
|
8
7
|
import { AdapterRegistry } from '../../services/adapter/adapter-registry.js';
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { createArtifactRetentionReport, createChangeImpact, getChangeTraceabilityStatus, getScHelpText, recordCommitBoundary, validateArtifactRetention } from '../../services/sc/sc-service.js';
|
|
2
|
-
import { ok } from '
|
|
2
|
+
import { ok } from 'peaks-loop-shared/result';
|
|
3
3
|
import { addJsonOption, multipleOption, printResult } from '../cli-helpers.js';
|
|
4
4
|
export function registerSCCommands(program, io) {
|
|
5
|
-
const sc = program
|
|
5
|
+
const sc = program
|
|
6
|
+
.command('sc', { hidden: true })
|
|
7
|
+
.description('Source control and change traceability (peaks-sc integration)');
|
|
6
8
|
registerSCStatusCommands(sc, io);
|
|
7
9
|
registerSCArtifactCommands(sc, io);
|
|
8
10
|
}
|
|
@@ -10,7 +10,7 @@ import { scanApiSurface, formatApiSurfaceMarkdown } from '../../services/scan/ap
|
|
|
10
10
|
import { scanOrphans, formatOrphanMarkdown } from '../../services/scan/orphan-service.js';
|
|
11
11
|
import { scanKarpathy, formatKarpathyMarkdown } from '../../services/scan/karpathy-service.js';
|
|
12
12
|
import { isRequestType, VALID_REQUEST_TYPES } from '../../services/artifacts/artifact-prerequisites.js';
|
|
13
|
-
import { fail, ok } from '
|
|
13
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
14
14
|
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
15
15
|
function parsePositiveInt(value, fallback) {
|
|
16
16
|
if (value === undefined)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
|
-
import { detectSecurityAudit, isSecurityAuditEnvelope, runSecurityAudit, } from '../../services/audit-independent/
|
|
2
|
+
import { detectSecurityAudit, isSecurityAuditEnvelope, runSecurityAudit, } from '../../services/audit-independent/index.js';
|
|
3
3
|
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
4
|
-
import { fail, ok } from '
|
|
4
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
5
5
|
function resolveEnvelope(envelopePath) {
|
|
6
6
|
if (envelopePath === undefined || envelopePath === '-') {
|
|
7
7
|
// Read from stdin
|
|
@@ -36,7 +36,7 @@ function readStdinSync() {
|
|
|
36
36
|
}
|
|
37
37
|
export function registerSecurityAuditCommands(program, io) {
|
|
38
38
|
const securityAudit = program
|
|
39
|
-
.command('security-audit')
|
|
39
|
+
.command('security-audit', { hidden: true })
|
|
40
40
|
.description('Independent security audit skill driver. Reads the immutable peaks-prd handoff (sha256-locked) + the project-level security-template.md, then writes a structured security-<rid>.md artifact. Decoupled from peaks-rd 5-way fan-out per slice v2.12.0 (Group A, Tier 2). See skills/bee/peaks-security-audit/SKILL.md for the full workflow.');
|
|
41
41
|
addJsonOption(securityAudit
|
|
42
42
|
.command('detect')
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
import { writeFileSync, mkdirSync, readFileSync, existsSync, readdirSync, rmSync } from "node:fs";
|
|
28
28
|
import { join, basename } from "node:path";
|
|
29
29
|
import { SYSTEM_PATH_FORBIDDEN, assertNotSystemPath, resolveSegmentsDir, resolveStateDbPath, resolveBlobsDir, resolveUserBeesDir, resolveUserBeeDir, } from "../../services/sediment/pool-paths.js";
|
|
30
|
+
import { peaksHome } from "../../services/sop/sop-paths.js";
|
|
30
31
|
import { writeBeeManifest } from "../../services/sediment/pool-write.js";
|
|
31
32
|
import { readPool } from "../../services/sediment/pool-read.js";
|
|
32
33
|
import { rebuildIndexFromFs } from "../../services/sediment/pool-rebuild-index.js";
|
|
@@ -636,7 +637,15 @@ export function registerSedimentCommands(program, io) {
|
|
|
636
637
|
.command("sediment <args...>")
|
|
637
638
|
.description("Sediment pool operations (LLM-coordinated; see peaks-maker skill)")
|
|
638
639
|
.action(async (args) => {
|
|
639
|
-
|
|
640
|
+
// D-018: peaks-loop's `state.db` (loop engineering + bee sediment pool)
|
|
641
|
+
// lives at PEAKS_HOME-based path, NOT under the project root. The
|
|
642
|
+
// original `process.env.HOME ?? USERPROFILE ?? process.cwd()` would
|
|
643
|
+
// resolve `home` to cwd when invoked from a project (e.g.
|
|
644
|
+
// `peaks skill sediment list` from peaks-loop/), producing
|
|
645
|
+
// `<project>/.peaks/state.db` — wrong. Per design contract
|
|
646
|
+
// (peaks-maker SKILL.md §22 + sop-paths.ts §29), the canonical
|
|
647
|
+
// home is `~/.peaks` (or PEAKS_HOME override for test isolation).
|
|
648
|
+
const home = peaksHome();
|
|
640
649
|
const r = await runSediment(args, { home });
|
|
641
650
|
// Delegate the JSON rendering AND the process.exitCode side-effect
|
|
642
651
|
// to the shared CLI shim helper (Critical #1 fix). The library
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks session 24h-mode` — state-only CLI for the 24h mode backbone.
|
|
3
|
+
*
|
|
4
|
+
* Rid-020a (state-only slice). Exposes four sub-actions so the LLM
|
|
5
|
+
* orchestrator can introspect, transition, audit retry attempts, and
|
|
6
|
+
* reset the 24h state machine without touching the JSON file
|
|
7
|
+
* directly. The LLM is the decision-maker; the CLI is the muscle
|
|
8
|
+
* (same contract as `peaks session checkpoint`).
|
|
9
|
+
*
|
|
10
|
+
* Sub-actions (all accept --json for machine-readable envelopes):
|
|
11
|
+
* - `peaks session 24h-mode state` — read snapshot
|
|
12
|
+
* - `peaks session 24h-mode transition` — move to a new state
|
|
13
|
+
* - `peaks session 24h-mode attempts` — read attempts map
|
|
14
|
+
* - `peaks session 24h-mode reset` — wipe the snapshot
|
|
15
|
+
*
|
|
16
|
+
* peaks-code is the skill that should drive this CLI; we do not
|
|
17
|
+
* add a new top-level verb (peaks-loop is enhancement, not a new
|
|
18
|
+
* CLI surface — see `.peaks/memory/peaks-loop-is-enhancement-not-new-cli.md`).
|
|
19
|
+
*/
|
|
20
|
+
import type { Command } from 'commander';
|
|
21
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
22
|
+
export declare function registerSession24hModeCommand(session: Command, io: ProgramIO): void;
|
|
23
|
+
export declare const SESSION_24H_MODE_CONSTANTS: {
|
|
24
|
+
readonly STATES: readonly ["IDLE", "BRAINSTORM", "USER_CONFIRM", "24H_ACTIVE", "WAITING_USER", "HANDOFF"];
|
|
25
|
+
readonly HANDOFF_EXIT_CONDITIONS: readonly ["user_abort", "all_triggers_resolved", "b3_unresolvable"];
|
|
26
|
+
};
|