peaks-loop 4.0.0-beta.9 → 4.0.1
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 +910 -141
- package/README-en.md +26 -7
- package/README.md +75 -6
- 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 +47 -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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: skill presence current + freshness
|
|
3
|
+
* (`skill-presence:current` and `skill-presence:freshness`).
|
|
4
|
+
*
|
|
5
|
+
* Two checks sharing one read of the `presence` context field.
|
|
6
|
+
* - `skill-presence:current` is informational: passes when the
|
|
7
|
+
* presence is wired, with a message describing the active
|
|
8
|
+
* skill / mode / gate / setAt. When no presence is wired, it
|
|
9
|
+
* also passes (absence is the common case outside peaks-qa
|
|
10
|
+
* flows).
|
|
11
|
+
* - `skill-presence:freshness` is the operational gate: fails
|
|
12
|
+
* when the presence's `setAt` is older than the freshness
|
|
13
|
+
* threshold (default 24h) OR when `setAt` is unparsable. When
|
|
14
|
+
* no presence is wired it passes trivially ("nothing to age-
|
|
15
|
+
* check").
|
|
16
|
+
*
|
|
17
|
+
* Both checks share the presence signal computed once in
|
|
18
|
+
* `index.ts`; the legacy monolithic function probed it inline.
|
|
19
|
+
*/
|
|
20
|
+
const SKILL_PRESENCE_FRESHNESS_THRESHOLD_MS = 24 * 60 * 60 * 1000;
|
|
21
|
+
function run({ options, presence }) {
|
|
22
|
+
const freshnessThresholdMs = options.skillPresenceFreshnessThresholdMs ?? SKILL_PRESENCE_FRESHNESS_THRESHOLD_MS;
|
|
23
|
+
if (presence === null) {
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
id: 'skill-presence:current',
|
|
27
|
+
ok: true,
|
|
28
|
+
message: 'No active Peaks skill presence (.peaks/.active-skill.json absent or invalid)'
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 'skill-presence:freshness',
|
|
32
|
+
ok: true,
|
|
33
|
+
message: 'No active Peaks skill presence to age-check'
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
const modePart = presence.mode !== undefined ? `, mode ${presence.mode}` : '';
|
|
38
|
+
const gatePart = presence.gate !== undefined ? `, gate ${presence.gate}` : '';
|
|
39
|
+
const checks = [{
|
|
40
|
+
id: 'skill-presence:current',
|
|
41
|
+
ok: true,
|
|
42
|
+
message: `Active Peaks skill presence: ${presence.skill}${modePart}${gatePart} (set ${presence.setAt})`
|
|
43
|
+
}];
|
|
44
|
+
const setAtMs = Date.parse(presence.setAt);
|
|
45
|
+
if (Number.isNaN(setAtMs)) {
|
|
46
|
+
checks.push({
|
|
47
|
+
id: 'skill-presence:freshness',
|
|
48
|
+
ok: false,
|
|
49
|
+
message: `Skill presence ${presence.skill} has invalid setAt: ${presence.setAt}`
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const ageMs = Date.now() - setAtMs;
|
|
54
|
+
if (ageMs > freshnessThresholdMs) {
|
|
55
|
+
const ageHours = Math.round(ageMs / (60 * 60 * 1000));
|
|
56
|
+
checks.push({
|
|
57
|
+
id: 'skill-presence:freshness',
|
|
58
|
+
ok: false,
|
|
59
|
+
message: `Skill presence ${presence.skill} is stale (set ${presence.setAt}, ~${ageHours}h ago); run peaks skill presence:clear if the role has ended`
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
checks.push({
|
|
64
|
+
id: 'skill-presence:freshness',
|
|
65
|
+
ok: true,
|
|
66
|
+
message: `Skill presence ${presence.skill} is fresh (set ${presence.setAt})`
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return checks;
|
|
71
|
+
}
|
|
72
|
+
export const check = {
|
|
73
|
+
name: 'skill-presence',
|
|
74
|
+
run
|
|
75
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: required skill declares a `## Default runbook` section
|
|
3
|
+
* (`skill-runbook:<skill-name>`).
|
|
4
|
+
*
|
|
5
|
+
* Emits one `DoctorCheck` per *required* skill (we don't gate
|
|
6
|
+
* user-added skills; only the ones the doctor guarantees exist).
|
|
7
|
+
* Passes when the SKILL.md body contains a `## Default runbook`
|
|
8
|
+
* heading; fails with an actionable "missing a ## Default runbook
|
|
9
|
+
* section" message. Read failures degrade to a single
|
|
10
|
+
* `skill-runbook:<name>` fail (no second `skill-apply-note`
|
|
11
|
+
* emitted for the same skill).
|
|
12
|
+
*/
|
|
13
|
+
import type { DoctorCheckPlugin } from '../types.js';
|
|
14
|
+
export declare const check: DoctorCheckPlugin;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: required skill declares a `## Default runbook` section
|
|
3
|
+
* (`skill-runbook:<skill-name>`).
|
|
4
|
+
*
|
|
5
|
+
* Emits one `DoctorCheck` per *required* skill (we don't gate
|
|
6
|
+
* user-added skills; only the ones the doctor guarantees exist).
|
|
7
|
+
* Passes when the SKILL.md body contains a `## Default runbook`
|
|
8
|
+
* heading; fails with an actionable "missing a ## Default runbook
|
|
9
|
+
* section" message. Read failures degrade to a single
|
|
10
|
+
* `skill-runbook:<name>` fail (no second `skill-apply-note`
|
|
11
|
+
* emitted for the same skill).
|
|
12
|
+
*/
|
|
13
|
+
import { readText } from 'peaks-loop-shared/fs';
|
|
14
|
+
import { requiredSkillNames } from 'peaks-loop-shared/paths';
|
|
15
|
+
import { getErrorMessage } from 'peaks-loop-shared/result';
|
|
16
|
+
const REQUIRED_SKILL_NAMES = new Set(requiredSkillNames);
|
|
17
|
+
async function run({ registry }) {
|
|
18
|
+
const checks = [];
|
|
19
|
+
for (const skill of registry.skills) {
|
|
20
|
+
if (!REQUIRED_SKILL_NAMES.has(skill.name)) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const body = await readText(skill.skillPath);
|
|
25
|
+
const hasRunbook = /## Default runbook\s/.test(body);
|
|
26
|
+
checks.push({
|
|
27
|
+
id: `skill-runbook:${skill.name}`,
|
|
28
|
+
ok: hasRunbook,
|
|
29
|
+
message: hasRunbook
|
|
30
|
+
? `Skill ${skill.name} declares a Default runbook`
|
|
31
|
+
: `Skill ${skill.name} is missing a ## Default runbook section`
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
checks.push({
|
|
36
|
+
id: `skill-runbook:${skill.name}`,
|
|
37
|
+
ok: false,
|
|
38
|
+
message: `Skill ${skill.name} runbook check failed: ${getErrorMessage(error)}`
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return checks;
|
|
43
|
+
}
|
|
44
|
+
export const check = {
|
|
45
|
+
name: 'skill-runbook',
|
|
46
|
+
run
|
|
47
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: statusline install discovery nudge (`statusline:install`).
|
|
3
|
+
*
|
|
4
|
+
* Informational only (always passes). When a Peaks skill is active
|
|
5
|
+
* but the statusLine is not installed, the message suggests running
|
|
6
|
+
* `peaks statusline install` so the active skill shows in the
|
|
7
|
+
* terminal status bar. When no skill is active, the message
|
|
8
|
+
* downgrades to "install is optional".
|
|
9
|
+
*
|
|
10
|
+
* The check is non-failing because the statusline is a UI
|
|
11
|
+
* accelerator — its absence does not break the doctor pipeline.
|
|
12
|
+
*/
|
|
13
|
+
import type { DoctorCheckPlugin } from '../types.js';
|
|
14
|
+
export declare const check: DoctorCheckPlugin;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: statusline install discovery nudge (`statusline:install`).
|
|
3
|
+
*
|
|
4
|
+
* Informational only (always passes). When a Peaks skill is active
|
|
5
|
+
* but the statusLine is not installed, the message suggests running
|
|
6
|
+
* `peaks statusline install` so the active skill shows in the
|
|
7
|
+
* terminal status bar. When no skill is active, the message
|
|
8
|
+
* downgrades to "install is optional".
|
|
9
|
+
*
|
|
10
|
+
* The check is non-failing because the statusline is a UI
|
|
11
|
+
* accelerator — its absence does not break the doctor pipeline.
|
|
12
|
+
*/
|
|
13
|
+
function run({ presence, statusLineInstalled }) {
|
|
14
|
+
if (presence !== null && !statusLineInstalled) {
|
|
15
|
+
return [{
|
|
16
|
+
id: 'statusline:install',
|
|
17
|
+
ok: true,
|
|
18
|
+
message: 'A Peaks skill is active but the statusLine is not installed; run `peaks statusline install` so the active skill shows in the terminal status bar'
|
|
19
|
+
}];
|
|
20
|
+
}
|
|
21
|
+
return [{
|
|
22
|
+
id: 'statusline:install',
|
|
23
|
+
ok: true,
|
|
24
|
+
message: statusLineInstalled
|
|
25
|
+
? 'Peaks statusLine is installed'
|
|
26
|
+
: 'Peaks statusLine not installed (no active skill; install optional)'
|
|
27
|
+
}];
|
|
28
|
+
}
|
|
29
|
+
export const check = {
|
|
30
|
+
name: 'statusline-install',
|
|
31
|
+
run
|
|
32
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: statusline runtime diagnostic (`statusline:runtime`).
|
|
3
|
+
*
|
|
4
|
+
* Informational only (always passes). Reports the running peaks
|
|
5
|
+
* version + platform string. On Windows, adds a hint that the
|
|
6
|
+
* statusLine shows nothing in git bash when `peaks` is not on PATH
|
|
7
|
+
* in the shell Claude Code spawns — the user must reinstall
|
|
8
|
+
* globally if the version is older than `CLI_VERSION` and reload
|
|
9
|
+
* Claude Code. On other platforms, the message is a short platform
|
|
10
|
+
* marker.
|
|
11
|
+
*/
|
|
12
|
+
import type { DoctorCheckPlugin } from '../types.js';
|
|
13
|
+
export declare const check: DoctorCheckPlugin;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: statusline runtime diagnostic (`statusline:runtime`).
|
|
3
|
+
*
|
|
4
|
+
* Informational only (always passes). Reports the running peaks
|
|
5
|
+
* version + platform string. On Windows, adds a hint that the
|
|
6
|
+
* statusLine shows nothing in git bash when `peaks` is not on PATH
|
|
7
|
+
* in the shell Claude Code spawns — the user must reinstall
|
|
8
|
+
* globally if the version is older than `CLI_VERSION` and reload
|
|
9
|
+
* Claude Code. On other platforms, the message is a short platform
|
|
10
|
+
* marker.
|
|
11
|
+
*/
|
|
12
|
+
import { CLI_VERSION } from 'peaks-loop-shared/version';
|
|
13
|
+
function run({ platform }) {
|
|
14
|
+
if (platform === 'win32') {
|
|
15
|
+
return [{
|
|
16
|
+
id: 'statusline:runtime',
|
|
17
|
+
ok: true,
|
|
18
|
+
message: `peaks ${CLI_VERSION} (win32): if the statusLine shows nothing in git bash, verify \`peaks\` resolves on PATH in the shell Claude Code uses (run \`peaks -v\` there), reinstall globally with \`npm i -g peaks-loop@latest\` if the version is older than ${CLI_VERSION}, then re-run \`peaks statusline install\` and reload Claude Code`
|
|
19
|
+
}];
|
|
20
|
+
}
|
|
21
|
+
return [{
|
|
22
|
+
id: 'statusline:runtime',
|
|
23
|
+
ok: true,
|
|
24
|
+
message: `peaks ${CLI_VERSION} (${platform}): statusLine command is \`peaks statusline\``
|
|
25
|
+
}];
|
|
26
|
+
}
|
|
27
|
+
export const check = {
|
|
28
|
+
name: 'statusline-runtime',
|
|
29
|
+
run
|
|
30
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: optional user config presence (`config:user`).
|
|
3
|
+
*
|
|
4
|
+
* Single informational check that flags whether the user has a
|
|
5
|
+
* personal `~/.peaks/config.json`. This check NEVER fails
|
|
6
|
+
* (presence is optional) — it just tells the operator the file
|
|
7
|
+
* is present vs absent so they can correlate it with later
|
|
8
|
+
* "user-config says X" surprises.
|
|
9
|
+
*/
|
|
10
|
+
import type { DoctorCheckPlugin } from '../types.js';
|
|
11
|
+
export declare const check: DoctorCheckPlugin;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: optional user config presence (`config:user`).
|
|
3
|
+
*
|
|
4
|
+
* Single informational check that flags whether the user has a
|
|
5
|
+
* personal `~/.peaks/config.json`. This check NEVER fails
|
|
6
|
+
* (presence is optional) — it just tells the operator the file
|
|
7
|
+
* is present vs absent so they can correlate it with later
|
|
8
|
+
* "user-config says X" surprises.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync } from 'node:fs';
|
|
11
|
+
import { homedir } from 'node:os';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
function run() {
|
|
14
|
+
const userConfigPath = join(homedir(), '.peaks', 'config.json');
|
|
15
|
+
const hasUserConfig = existsSync(userConfigPath);
|
|
16
|
+
return [{
|
|
17
|
+
id: 'config:user',
|
|
18
|
+
ok: true,
|
|
19
|
+
message: hasUserConfig
|
|
20
|
+
? 'User config exists at ~/.peaks/config.json'
|
|
21
|
+
: 'Optional user config not found at ~/.peaks/config.json'
|
|
22
|
+
}];
|
|
23
|
+
}
|
|
24
|
+
export const check = {
|
|
25
|
+
name: 'user-config',
|
|
26
|
+
run
|
|
27
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: workspace initialization guard (`skill-presence:workspace`).
|
|
3
|
+
*
|
|
4
|
+
* Fail-closed rule: when a skill is actively orchestrating AND the
|
|
5
|
+
* workspace session binding is absent, the check fails and tells the
|
|
6
|
+
* operator to run `peaks workspace init --project <repo>`. This is
|
|
7
|
+
* the #1 reported failure mode where `.peaks/` artifacts are never
|
|
8
|
+
* created — the SKILL.md "MUST create the workspace" prose turned
|
|
9
|
+
* into an executable check.
|
|
10
|
+
*
|
|
11
|
+
* When no skill is active, the check passes (workspace guard is
|
|
12
|
+
* N/A). When a skill IS active AND the workspace session exists,
|
|
13
|
+
* it also passes (the happy path).
|
|
14
|
+
*/
|
|
15
|
+
import type { DoctorCheckPlugin } from '../types.js';
|
|
16
|
+
export declare const check: DoctorCheckPlugin;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: workspace initialization guard (`skill-presence:workspace`).
|
|
3
|
+
*
|
|
4
|
+
* Fail-closed rule: when a skill is actively orchestrating AND the
|
|
5
|
+
* workspace session binding is absent, the check fails and tells the
|
|
6
|
+
* operator to run `peaks workspace init --project <repo>`. This is
|
|
7
|
+
* the #1 reported failure mode where `.peaks/` artifacts are never
|
|
8
|
+
* created — the SKILL.md "MUST create the workspace" prose turned
|
|
9
|
+
* into an executable check.
|
|
10
|
+
*
|
|
11
|
+
* When no skill is active, the check passes (workspace guard is
|
|
12
|
+
* N/A). When a skill IS active AND the workspace session exists,
|
|
13
|
+
* it also passes (the happy path).
|
|
14
|
+
*/
|
|
15
|
+
function run({ presence, workspaceInitialized }) {
|
|
16
|
+
if (presence !== null && !workspaceInitialized) {
|
|
17
|
+
return [{
|
|
18
|
+
id: 'skill-presence:workspace',
|
|
19
|
+
ok: false,
|
|
20
|
+
message: `Skill ${presence.skill} is active but no workspace session exists (.peaks/_runtime/session.json missing); run \`peaks workspace init --project <repo>\` — peaks-code Step 0 must anchor the workspace before any work`
|
|
21
|
+
}];
|
|
22
|
+
}
|
|
23
|
+
return [{
|
|
24
|
+
id: 'skill-presence:workspace',
|
|
25
|
+
ok: true,
|
|
26
|
+
message: presence === null
|
|
27
|
+
? 'No active skill presence; workspace guard not applicable'
|
|
28
|
+
: `Workspace session present for active skill ${presence.skill}`
|
|
29
|
+
}];
|
|
30
|
+
}
|
|
31
|
+
export const check = {
|
|
32
|
+
name: 'workspace-init',
|
|
33
|
+
run
|
|
34
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: workspace layout is post-F3 canonical
|
|
3
|
+
* (`build:workspace-layout-canonical`).
|
|
4
|
+
*
|
|
5
|
+
* Build-hygiene check that surfaces any leftover top-level session
|
|
6
|
+
* dirs (`.peaks/<YYYY-MM-DD-session-<hex>>/`), the legacy runtime
|
|
7
|
+
* dotfiles (`.peaks/.session.json`, `.peaks/.active-skill.json`),
|
|
8
|
+
* OR per-change-id top-level dirs (`.peaks/NNN-YYYY-MM-DD-<slug>/`).
|
|
9
|
+
*
|
|
10
|
+
* The post-F3 canonical layout puts session dirs under
|
|
11
|
+
* `.peaks/_runtime/<sid>/` and the runtime binding at
|
|
12
|
+
* `.peaks/_runtime/session.json`. The legacy paths must be absent.
|
|
13
|
+
*
|
|
14
|
+
* The pure `inspectWorkspaceLayout` helper is exported so tests
|
|
15
|
+
* can drive the filesystem walk without monkey-patching
|
|
16
|
+
* `process.cwd()` or `findProjectRoot`. Both scanners fail-soft
|
|
17
|
+
* (return `[]` on read errors) so a flaky filesystem read on a
|
|
18
|
+
* non-fatal probe path never escalates into a doctor failure.
|
|
19
|
+
*/
|
|
20
|
+
import type { DoctorCheckPlugin, WorkspaceLayoutInspection } from '../types.js';
|
|
21
|
+
/**
|
|
22
|
+
* Pure helper that inspects the on-disk workspace layout for
|
|
23
|
+
* post-F3-canonical violations. Exported so tests can drive the
|
|
24
|
+
* filesystem walk without monkey-patching `process.cwd()` or
|
|
25
|
+
* `findProjectRoot`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function inspectWorkspaceLayout(opts: {
|
|
28
|
+
projectRoot: string;
|
|
29
|
+
topLevelScanner?: (root: string) => string[];
|
|
30
|
+
dotfileScanner?: (root: string) => string[];
|
|
31
|
+
perChangeIdScanner?: (root: string) => string[];
|
|
32
|
+
}): WorkspaceLayoutInspection;
|
|
33
|
+
export declare const check: DoctorCheckPlugin;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check: workspace layout is post-F3 canonical
|
|
3
|
+
* (`build:workspace-layout-canonical`).
|
|
4
|
+
*
|
|
5
|
+
* Build-hygiene check that surfaces any leftover top-level session
|
|
6
|
+
* dirs (`.peaks/<YYYY-MM-DD-session-<hex>>/`), the legacy runtime
|
|
7
|
+
* dotfiles (`.peaks/.session.json`, `.peaks/.active-skill.json`),
|
|
8
|
+
* OR per-change-id top-level dirs (`.peaks/NNN-YYYY-MM-DD-<slug>/`).
|
|
9
|
+
*
|
|
10
|
+
* The post-F3 canonical layout puts session dirs under
|
|
11
|
+
* `.peaks/_runtime/<sid>/` and the runtime binding at
|
|
12
|
+
* `.peaks/_runtime/session.json`. The legacy paths must be absent.
|
|
13
|
+
*
|
|
14
|
+
* The pure `inspectWorkspaceLayout` helper is exported so tests
|
|
15
|
+
* can drive the filesystem walk without monkey-patching
|
|
16
|
+
* `process.cwd()` or `findProjectRoot`. Both scanners fail-soft
|
|
17
|
+
* (return `[]` on read errors) so a flaky filesystem read on a
|
|
18
|
+
* non-fatal probe path never escalates into a doctor failure.
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync, lstatSync, readdirSync } from 'node:fs';
|
|
21
|
+
import { join } from 'node:path';
|
|
22
|
+
import { getErrorMessage } from 'peaks-loop-shared/result';
|
|
23
|
+
const SESSION_DIR_PATTERN = /^\d{4}-\d{2}-\d{2}-session-[a-f0-9]+$/;
|
|
24
|
+
/**
|
|
25
|
+
* Slice 007 — per-change-id top-level dir pattern. Matches the
|
|
26
|
+
* F3-canonical (pre-canonicalization) layout the 5 already-shipped
|
|
27
|
+
* slices left behind, e.g. `.peaks/001-2026-06-06-doctor-dist-version-check/`.
|
|
28
|
+
* The pattern is intentionally narrow so it does NOT match the
|
|
29
|
+
* post-F3 system dirs (`_runtime/`, `_dogfood/`, `retrospective/`,
|
|
30
|
+
* `memory/`, `perf-baseline/`, `project-scan/`, `sops/`,
|
|
31
|
+
* `0NN-session-...`, `YYYY-MM-DD-session-...`).
|
|
32
|
+
*/
|
|
33
|
+
const PER_CHANGE_ID_PATTERN = /^\d{3}-\d{4}-\d{2}-\d{2}-[a-z][a-z0-9-]*[a-z0-9]$/;
|
|
34
|
+
const LEGACY_DOTFILES = ['.session.json', '.active-skill.json'];
|
|
35
|
+
/**
|
|
36
|
+
* Pure helper that inspects the on-disk workspace layout for
|
|
37
|
+
* post-F3-canonical violations. Exported so tests can drive the
|
|
38
|
+
* filesystem walk without monkey-patching `process.cwd()` or
|
|
39
|
+
* `findProjectRoot`.
|
|
40
|
+
*/
|
|
41
|
+
export function inspectWorkspaceLayout(opts) {
|
|
42
|
+
const topLevel = opts.topLevelScanner ?? defaultTopLevelSessionDirScanner;
|
|
43
|
+
const dotfiles = opts.dotfileScanner ?? defaultLegacyDotfileScanner;
|
|
44
|
+
const perChangeId = opts.perChangeIdScanner ?? defaultPerChangeIdDirScanner;
|
|
45
|
+
return {
|
|
46
|
+
topLevelSessionDirs: safeList(() => topLevel(opts.projectRoot)),
|
|
47
|
+
legacyDotfiles: safeList(() => dotfiles(opts.projectRoot)),
|
|
48
|
+
perChangeIdDirs: safeList(() => perChangeId(opts.projectRoot))
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function safeList(reader) {
|
|
52
|
+
try {
|
|
53
|
+
const out = reader();
|
|
54
|
+
return Array.isArray(out) ? out : [];
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function defaultTopLevelSessionDirScanner(projectRoot) {
|
|
61
|
+
const peaksRoot = join(projectRoot, '.peaks');
|
|
62
|
+
if (!existsSync(peaksRoot))
|
|
63
|
+
return [];
|
|
64
|
+
let names;
|
|
65
|
+
try {
|
|
66
|
+
names = readdirSync(peaksRoot);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
const offenders = [];
|
|
72
|
+
for (const name of names) {
|
|
73
|
+
if (!SESSION_DIR_PATTERN.test(name))
|
|
74
|
+
continue;
|
|
75
|
+
const full = join(peaksRoot, name);
|
|
76
|
+
try {
|
|
77
|
+
const stat = existsSync(full) ? lstatSync(full) : null;
|
|
78
|
+
if (stat === null)
|
|
79
|
+
continue;
|
|
80
|
+
// Directories only — the regex should never match a dotfile or
|
|
81
|
+
// regular file, but be defensive against weird filesystem state
|
|
82
|
+
// (e.g. someone manually created a file whose name happens to
|
|
83
|
+
// match the session-id pattern).
|
|
84
|
+
if (stat.isDirectory()) {
|
|
85
|
+
offenders.push(join('.peaks', name) + '/');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return offenders;
|
|
93
|
+
}
|
|
94
|
+
function defaultLegacyDotfileScanner(projectRoot) {
|
|
95
|
+
const peaksRoot = join(projectRoot, '.peaks');
|
|
96
|
+
if (!existsSync(peaksRoot))
|
|
97
|
+
return [];
|
|
98
|
+
const offenders = [];
|
|
99
|
+
for (const name of LEGACY_DOTFILES) {
|
|
100
|
+
if (existsSync(join(peaksRoot, name))) {
|
|
101
|
+
offenders.push(join('.peaks', name));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return offenders;
|
|
105
|
+
}
|
|
106
|
+
function defaultPerChangeIdDirScanner(projectRoot) {
|
|
107
|
+
const peaksRoot = join(projectRoot, '.peaks');
|
|
108
|
+
if (!existsSync(peaksRoot))
|
|
109
|
+
return [];
|
|
110
|
+
let names;
|
|
111
|
+
try {
|
|
112
|
+
names = readdirSync(peaksRoot);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
const offenders = [];
|
|
118
|
+
for (const name of names) {
|
|
119
|
+
if (!PER_CHANGE_ID_PATTERN.test(name))
|
|
120
|
+
continue;
|
|
121
|
+
const full = join(peaksRoot, name);
|
|
122
|
+
try {
|
|
123
|
+
const stat = existsSync(full) ? lstatSync(full) : null;
|
|
124
|
+
if (stat === null)
|
|
125
|
+
continue;
|
|
126
|
+
if (stat.isDirectory()) {
|
|
127
|
+
offenders.push(join('.peaks', name) + '/');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return offenders;
|
|
135
|
+
}
|
|
136
|
+
function defaultWorkspaceLayoutProbe(projectRootResolver) {
|
|
137
|
+
const projectRoot = projectRootResolver();
|
|
138
|
+
if (projectRoot === null) {
|
|
139
|
+
return { topLevelSessionDirs: [], legacyDotfiles: [], perChangeIdDirs: [] };
|
|
140
|
+
}
|
|
141
|
+
return inspectWorkspaceLayout({ projectRoot });
|
|
142
|
+
}
|
|
143
|
+
function run({ options, projectRootResolver }) {
|
|
144
|
+
const probe = options.workspaceLayoutProbe ?? (() => defaultWorkspaceLayoutProbe(projectRootResolver));
|
|
145
|
+
try {
|
|
146
|
+
const layout = probe();
|
|
147
|
+
// Back-compat: probes injected by older tests (pre-slice-007)
|
|
148
|
+
// return a 2-field shape (no perChangeIdDirs). Treat missing
|
|
149
|
+
// field as empty.
|
|
150
|
+
const perChangeIdDirs = layout.perChangeIdDirs ?? [];
|
|
151
|
+
if (layout.topLevelSessionDirs.length === 0 && layout.legacyDotfiles.length === 0 && perChangeIdDirs.length === 0) {
|
|
152
|
+
return [{
|
|
153
|
+
id: 'build:workspace-layout-canonical',
|
|
154
|
+
ok: true,
|
|
155
|
+
message: 'Workspace layout is canonical: no top-level session dirs, no legacy runtime dotfiles, no per-change-id top-level dirs'
|
|
156
|
+
}];
|
|
157
|
+
}
|
|
158
|
+
const offenders = [
|
|
159
|
+
...layout.topLevelSessionDirs.map((p) => `top-level session dir: ${p}`),
|
|
160
|
+
...layout.legacyDotfiles.map((p) => `legacy dotfile: ${p}`),
|
|
161
|
+
...perChangeIdDirs.map((p) => `per-change-id top-level dir: ${p}`)
|
|
162
|
+
];
|
|
163
|
+
return [{
|
|
164
|
+
id: 'build:workspace-layout-canonical',
|
|
165
|
+
ok: false,
|
|
166
|
+
message: `Workspace layout is not canonical. Offenders: ${offenders.join('; ')}. Run \`peaks workspace migrate --to-runtime --project <repo> --apply\` to consolidate.`
|
|
167
|
+
}];
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return [{
|
|
171
|
+
id: 'build:workspace-layout-canonical',
|
|
172
|
+
ok: false,
|
|
173
|
+
message: `Workspace layout check failed: ${getErrorMessage(error)}`
|
|
174
|
+
}];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export const check = {
|
|
178
|
+
name: 'workspace-layout',
|
|
179
|
+
run
|
|
180
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doctor-service facade (slice rid-004).
|
|
3
|
+
*
|
|
4
|
+
* Public entrypoint for the code-driven fixed-registry doctor
|
|
5
|
+
* pipeline. Replaces the legacy 1309-line monolithic `runDoctor`
|
|
6
|
+
* with a thin dispatcher that:
|
|
7
|
+
*
|
|
8
|
+
* 1. Resolves all cross-domain injections (project-root resolver,
|
|
9
|
+
* skill loader, sid validator, schema root, presence, etc.)
|
|
10
|
+
* and builds a read-only `DoctorContext` once.
|
|
11
|
+
* 2. Walks the `PLUGINS` array in `plugin-registry.ts` in order,
|
|
12
|
+
* calling each plugin's `run(context)`, flattening the
|
|
13
|
+
* returned `DoctorCheck[]` into the accumulator.
|
|
14
|
+
* 3. Updates `context.accumulatedChecks` after each plugin so the
|
|
15
|
+
* `check-id-schema` self-validation plugin observes the full
|
|
16
|
+
* prior list.
|
|
17
|
+
* 4. Hands the accumulated checks to `report/final-summary.ts`
|
|
18
|
+
* which builds the public `DoctorReport`.
|
|
19
|
+
*
|
|
20
|
+
* The `runDoctor` signature is unchanged from the legacy version;
|
|
21
|
+
* main peaks-loop package imports it via
|
|
22
|
+
* `import { runDoctor } from '../index.js'`.
|
|
23
|
+
*
|
|
24
|
+
* slice-3b Option C: the doctor package stays standalone by
|
|
25
|
+
* accepting the cross-domain utilities as injectable probes. When
|
|
26
|
+
* no injection is provided, the doctor falls back to a safe
|
|
27
|
+
* "no-op / assume healthy" probe so the standalone test suite
|
|
28
|
+
* does not depend on the main package. The CLI wires the main-
|
|
29
|
+
* package implementations at call-site
|
|
30
|
+
* (`src/cli/commands/core/doctor-command.ts`).
|
|
31
|
+
*/
|
|
32
|
+
import type { DoctorOptions, DoctorReport } from './types.js';
|
|
33
|
+
/**
|
|
34
|
+
* Pure helper extracted so tests can drive the filesystem check
|
|
35
|
+
* without monkey-patching `process.cwd()` or `findProjectRoot`.
|
|
36
|
+
* Returns `true` when EITHER the canonical
|
|
37
|
+
* `.peaks/_runtime/session.json` OR the legacy
|
|
38
|
+
* `.peaks/.session.json` exists.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isWorkspaceInitializedAt(projectRoot: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Public entrypoint. Walks the `PLUGINS` array, building the
|
|
43
|
+
* `DoctorContext` once at the top and threading it through every
|
|
44
|
+
* plugin. The accumulator is a mutable list shared via
|
|
45
|
+
* `context.accumulatedChecks` so plugins like `check-id-schema`
|
|
46
|
+
* that need to observe the prior list can do so.
|
|
47
|
+
*/
|
|
48
|
+
export declare function runDoctor(options?: DoctorOptions): Promise<DoctorReport>;
|