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,313 @@
|
|
|
1
|
+
# peaks-cron-scheduler deployment guide
|
|
2
|
+
|
|
3
|
+
> **Slice 2026-07-29-worktree-l2-extended Part 20.** Companion to
|
|
4
|
+
> the scheduler implementation in
|
|
5
|
+
> `src/cli/commands/cron-scheduler-commands.ts`. This file
|
|
6
|
+
> ships the install recipe operators actually run.
|
|
7
|
+
|
|
8
|
+
## What the scheduler does
|
|
9
|
+
|
|
10
|
+
`peaks cron-scheduler` is a long-running background process
|
|
11
|
+
that wakes up once per minute and runs any task in
|
|
12
|
+
`.peaks/cron/schedule.json` whose `intervalMs` has elapsed
|
|
13
|
+
since the last run. Built-in tasks include `lease-gc-daily`
|
|
14
|
+
(24h interval; sweeps orphan worktree leases). See
|
|
15
|
+
`peaks cron init` to bootstrap the schedule.
|
|
16
|
+
|
|
17
|
+
## Quick start (manual)
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
# 1. Initialize the schedule (idempotent)
|
|
21
|
+
peaks cron init --project .
|
|
22
|
+
|
|
23
|
+
# 2. Start the scheduler as a detached background process
|
|
24
|
+
peaks cron-scheduler start --project .
|
|
25
|
+
|
|
26
|
+
# 3. Confirm it is alive
|
|
27
|
+
peaks cron-scheduler status --project .
|
|
28
|
+
|
|
29
|
+
# 4. Trigger a one-shot run if you need it
|
|
30
|
+
peaks cron-scheduler run-once --project .
|
|
31
|
+
|
|
32
|
+
# 5. Stop the scheduler (SIGTERM)
|
|
33
|
+
peaks cron-scheduler stop --project .
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The pid is written to `.peaks/cron/scheduler.pid` so
|
|
37
|
+
`stop` and `status` can find the process without operator
|
|
38
|
+
guesswork. If the pid file is stale, `stop` removes it
|
|
39
|
+
unconditionally (the `isPidAlive` check filters dead entries).
|
|
40
|
+
|
|
41
|
+
## Windows service install (NSSM)
|
|
42
|
+
|
|
43
|
+
The scheduler is a normal CLI process. NSSM (the Non-Sucking
|
|
44
|
+
Service Manager) is the recommended wrapper for running it
|
|
45
|
+
as a real Windows service that auto-restarts on crash.
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
# 1. Download NSSM (https://nssm.cc/) and put nssm.exe on PATH.
|
|
49
|
+
|
|
50
|
+
# 2. Install the service. NSSM is happy with node + script
|
|
51
|
+
# args, so the same call works on Windows + POSIX.
|
|
52
|
+
nssm install peaks-cron-scheduler "C:\\Program Files\\nodejs\\node.exe" \
|
|
53
|
+
"C:\\Users\\<you>\\.claude\\skills\\peaks-loop\\bin\\peaks.js" \
|
|
54
|
+
"cron-scheduler" "start" "--project" "C:\\path\\to\\peaks-project"
|
|
55
|
+
|
|
56
|
+
# 3. Set the working directory (NSSM inherits the install
|
|
57
|
+
# caller's cwd by default; that may not be the project).
|
|
58
|
+
nssm set peaks-cron-scheduler AppDirectory "C:\\path\\to\\peaks-project"
|
|
59
|
+
|
|
60
|
+
# 4. Set environment variables (if needed for proxies / mirrors).
|
|
61
|
+
nssm set peaks-cron-scheduler AppEnvironmentExtra "PEAKS_HOME=C:\\Users\\<you>\\.peaks"
|
|
62
|
+
|
|
63
|
+
# 5. Configure auto-restart on crash.
|
|
64
|
+
nssm set peaks-cron-scheduler AppExit Default Restart
|
|
65
|
+
nssm set peaks-cron-scheduler AppRestartDelay 5000
|
|
66
|
+
|
|
67
|
+
# 6. Start the service.
|
|
68
|
+
nssm start peaks-cron-scheduler
|
|
69
|
+
|
|
70
|
+
# 7. Verify.
|
|
71
|
+
nssm status peaks-cron-scheduler
|
|
72
|
+
peaks cron-scheduler status --project .
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The same NSSM recipe works on POSIX (use `nssm` from your
|
|
76
|
+
distro's package manager) — NSSM runs the same commands on
|
|
77
|
+
both Windows and Linux. The pid-file pattern is the same.
|
|
78
|
+
|
|
79
|
+
## Logs
|
|
80
|
+
|
|
81
|
+
`peaks-cron-scheduler.js` writes to its own stdout/stderr;
|
|
82
|
+
NSSM captures them to the Windows Event Log when the
|
|
83
|
+
service is running. For a debug session, run the scheduler
|
|
84
|
+
in the foreground:
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
node bin/peaks.js cron-scheduler start --project . # will not detach; use a tmux/foreground
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
(This is not the production path — the production path is
|
|
91
|
+
`peaks cron-scheduler start` which uses detached spawn and
|
|
92
|
+
returns immediately. The detached flag means the parent can
|
|
93
|
+
exit cleanly without the child.)
|
|
94
|
+
|
|
95
|
+
## Troubleshooting
|
|
96
|
+
|
|
97
|
+
- **"scheduler.pid stale"** — `stop` removes the pid file
|
|
98
|
+
unconditionally. Restart with `start`.
|
|
99
|
+
- **"no lease lease lease-id"** — the schedule was created
|
|
100
|
+
with `peaks cron init` but the user's `.peaks/cron/` is
|
|
101
|
+
read-only. Check filesystem permissions.
|
|
102
|
+
- **"docker not found"** — the scheduler runs shell commands
|
|
103
|
+
via `execSync`. If a task is `docker rm --force ...` and
|
|
104
|
+
docker is missing, the task fails (the scheduler does not
|
|
105
|
+
crash — it logs and continues to the next tick).
|
|
106
|
+
|
|
107
|
+
## When NOT to use this scheduler
|
|
108
|
+
|
|
109
|
+
- **Production with strict timing** — peaks-cron is a
|
|
110
|
+
best-effort CLI scheduler, not a real cron daemon. For
|
|
111
|
+
mission-critical periodic work, use the OS cron / systemd
|
|
112
|
+
timer / Windows Task Scheduler to invoke
|
|
113
|
+
`peaks cron-scheduler run-once --project .` on a precise
|
|
114
|
+
interval. The OS scheduler is reliable; the in-process
|
|
115
|
+
scheduler is portable.
|
|
116
|
+
- **Multi-tenant** — peaks-cron runs all tasks in the
|
|
117
|
+
schedule.json in a single process. If two users have
|
|
118
|
+
conflicting lease-gc schedules, the in-process scheduler
|
|
119
|
+
will collide. The OS scheduler + per-tenant
|
|
120
|
+
`peaks cron-scheduler run-once` is the right shape.
|
|
121
|
+
|
|
122
|
+
## Source pointer
|
|
123
|
+
|
|
124
|
+
The CLI surface lives in
|
|
125
|
+
`src/cli/commands/cron-scheduler-commands.ts`. The pure
|
|
126
|
+
`runSchedulerLoop` function is the async loop; `start` /
|
|
127
|
+
`stop` / `status` are thin shells around pid-file
|
|
128
|
+
management.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
# Appendix A — NSSM (Non-Sucking Service Manager) detailed install
|
|
133
|
+
|
|
134
|
+
> **Slice 2026-07-29-rid-prose-only-sweep Part 39.** This
|
|
135
|
+
> appendix is the operator-focused, step-by-step NSSM install
|
|
136
|
+
> recipe for `peaks-cron-scheduler` on Windows. NSSM wraps any
|
|
137
|
+
> long-running process as a real Windows service that starts at
|
|
138
|
+
> boot, restarts on crash, and writes to the Windows Event Log.
|
|
139
|
+
|
|
140
|
+
## Why NSSM (not Windows Task Scheduler)
|
|
141
|
+
|
|
142
|
+
Windows Task Scheduler can run `peaks-cron-scheduler start`
|
|
143
|
+
on a schedule, but it does not manage the long-running process:
|
|
144
|
+
if `node` crashes, Task Scheduler will not restart it until
|
|
145
|
+
the next trigger. NSSM (and node-windows, a Node-native
|
|
146
|
+
alternative) treat the process as a service with auto-restart.
|
|
147
|
+
|
|
148
|
+
## Install NSSM
|
|
149
|
+
|
|
150
|
+
Download NSSM from <https://nssm.cc/> (the official site
|
|
151
|
+
hosts the binary). NSSM is a single `nssm.exe` (~50 KB); put
|
|
152
|
+
it on PATH (e.g. `C:\Windows\System32` or a custom dir).
|
|
153
|
+
|
|
154
|
+
For a 64-bit Windows host, NSSM ships 32-bit and 64-bit
|
|
155
|
+
binaries in the same zip — use `win64\nssm.exe`. The 32-bit
|
|
156
|
+
binary works for 32-bit services; the 64-bit binary is the
|
|
157
|
+
default for modern systems.
|
|
158
|
+
|
|
159
|
+
```sh
|
|
160
|
+
# Verify NSSM is on PATH and reports its version
|
|
161
|
+
nssm version
|
|
162
|
+
# NSSM 2.24, 64-bit
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
If `nssm` is not on PATH, the install will fail with
|
|
166
|
+
`'nssm' is not recognized`. The peaks-cron-scheduler NSSM
|
|
167
|
+
install does not put NSSM on PATH for the operator; it
|
|
168
|
+
expects NSSM to be installed first.
|
|
169
|
+
|
|
170
|
+
## Install the service
|
|
171
|
+
|
|
172
|
+
```sh
|
|
173
|
+
# 1. Install the service. NSSM is happy with `node` + script
|
|
174
|
+
# args, so the same call works on Windows + POSIX.
|
|
175
|
+
nssm install peaks-cron-scheduler "C:\Program Files\nodejs\node.exe" \
|
|
176
|
+
"C:\Users\<you>\.claude\skills\peaks-loop\bin\peaks.js" \
|
|
177
|
+
"cron-scheduler" "start" "--project" "C:\path\to\peaks-project"
|
|
178
|
+
|
|
179
|
+
# 2. Set the working directory (NSSM inherits the install
|
|
180
|
+
# caller's cwd by default; that may not be the project).
|
|
181
|
+
nssm set peaks-cron-scheduler AppDirectory "C:\path\to\peaks-project"
|
|
182
|
+
|
|
183
|
+
# 3. Set environment variables (if needed for proxies / mirrors).
|
|
184
|
+
nssm set peaks-cron-scheduler AppEnvironmentExtra "PEAKS_HOME=C:\Users\<you>\.peaks"
|
|
185
|
+
|
|
186
|
+
# 4. Configure auto-restart on crash.
|
|
187
|
+
nssm set peaks-cron-scheduler AppExit Default Restart
|
|
188
|
+
nssm set peaks-cron-scheduler AppRestartDelay 5000
|
|
189
|
+
|
|
190
|
+
# 5. Set log file paths (NSSM redirects stdout/stderr).
|
|
191
|
+
nssm set peaks-cron-scheduler AppStdoutCreationDisposition 4 # OPEN_ALWAYS
|
|
192
|
+
nssm set peaks-cron-scheduler AppStderrCreationDisposition 4
|
|
193
|
+
nssm set peaks-cron-scheduler AppStdout "C:\path\to\logs\peaks-cron-scheduler.out.log"
|
|
194
|
+
nssm set peaks-cron-scheduler AppStderr "C:\path\to\logs\peaks-cron-scheduler.err.log"
|
|
195
|
+
nssm set peaks-cron-scheduler AppRotateFiles 1 # rotate on size
|
|
196
|
+
nssm set peaks-cron-scheduler AppRotateBytes 10485760 # 10 MB per file
|
|
197
|
+
|
|
198
|
+
# 6. Start the service.
|
|
199
|
+
nssm start peaks-cron-scheduler
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
The same NSSM recipe works on POSIX (use `nssm` from your
|
|
203
|
+
distro's package manager) — NSSM runs the same commands on
|
|
204
|
+
both Windows and Linux. The pid-file pattern is the same.
|
|
205
|
+
|
|
206
|
+
## Verify
|
|
207
|
+
|
|
208
|
+
```sh
|
|
209
|
+
# 1. NSSM-level status
|
|
210
|
+
nssm status peaks-cron-scheduler
|
|
211
|
+
# SERVICE_RUNNING
|
|
212
|
+
|
|
213
|
+
# 2. peaks-level status (peaks-cli reads the pid file)
|
|
214
|
+
peaks cron-scheduler status --project C:\path\to\peaks-project
|
|
215
|
+
# {
|
|
216
|
+
# "data": {
|
|
217
|
+
# "alive": true,
|
|
218
|
+
# "pid": 12345,
|
|
219
|
+
# "scheduleEntries": 1,
|
|
220
|
+
# "dueTaskCount": 0
|
|
221
|
+
# }
|
|
222
|
+
# }
|
|
223
|
+
|
|
224
|
+
# 3. Force a one-shot to verify the schedule is reachable
|
|
225
|
+
peaks cron-scheduler run-once --project C:\path\to\peaks-project
|
|
226
|
+
# {
|
|
227
|
+
# "data": {
|
|
228
|
+
# "ran": 1,
|
|
229
|
+
# "records": [{ ... }]
|
|
230
|
+
# }
|
|
231
|
+
# }
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
If `nssm status` reports `SERVICE_STOPPED`, the service
|
|
235
|
+
crashed on startup. Check the log file at
|
|
236
|
+
`<AppStderr>` (typically `C:\path\to\logs\peaks-cron-scheduler.err.log`).
|
|
237
|
+
The most common cause is `nssm` not finding the node binary
|
|
238
|
+
at `<AppStdout>` — verify with
|
|
239
|
+
`nssm get peaks-cron-scheduler AppStdout` + `AppParameters`.
|
|
240
|
+
|
|
241
|
+
## Uninstall
|
|
242
|
+
|
|
243
|
+
```sh
|
|
244
|
+
# 1. Stop the service
|
|
245
|
+
nssm stop peaks-cron-scheduler
|
|
246
|
+
|
|
247
|
+
# 2. Remove the service registration
|
|
248
|
+
nssm remove peaks-cron-scheduler confirm
|
|
249
|
+
|
|
250
|
+
# 3. (Optional) Remove the log files
|
|
251
|
+
rm "C:\path\to\logs\peaks-cron-scheduler.out.log"
|
|
252
|
+
rm "C:\path\to\logs\peaks-cron-scheduler.err.log"
|
|
253
|
+
|
|
254
|
+
# 4. (Optional) Remove the cron-schedule state
|
|
255
|
+
# Note: the peaks-cli schedule lives under .peaks/cron/ and
|
|
256
|
+
# is NOT in NSSM. Removing NSSM does not affect the schedule.
|
|
257
|
+
peaks cron list --project C:\path\to\peaks-project
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
If the service refuses to stop, escalate:
|
|
261
|
+
`taskkill /F /IM node.exe /FI "WINDOWTITLE eq peaks-cron-scheduler*"`
|
|
262
|
+
or `nssm set peaks-cron-scheduler AppStopMethodSkip 0` to
|
|
263
|
+
force NSSM to honor `Ctrl+C` instead of `WM_CLOSE`.
|
|
264
|
+
|
|
265
|
+
## Troubleshooting
|
|
266
|
+
|
|
267
|
+
- **"nssm: command not found"** — NSSM is not on PATH.
|
|
268
|
+
Install it (see `Install NSSM` above) and re-run the
|
|
269
|
+
`nssm install` command.
|
|
270
|
+
- **"SERVICE_PAUSED" on startup** — Windows Defender or
|
|
271
|
+
another AV is blocking the binary. Add the node binary
|
|
272
|
+
to the AV exclusion list or sign the peaks-cli install.
|
|
273
|
+
- **Service runs but no log lines** — the AppStdout path is
|
|
274
|
+
wrong, or the directory is not writable. NSSM needs the
|
|
275
|
+
AppStderr file's parent directory to exist before
|
|
276
|
+
service start. `mkdir -p` the log dir before
|
|
277
|
+
`nssm start`.
|
|
278
|
+
- **Auto-restart not firing** — `AppExit Default Restart`
|
|
279
|
+
is set, but Windows also has a per-process recovery
|
|
280
|
+
policy (`sc failure` for native services). For NSSM,
|
|
281
|
+
`AppRestartDelay` is in milliseconds; 5000 is the
|
|
282
|
+
default. 0 means "restart immediately", which can cause
|
|
283
|
+
a crash loop if the underlying issue is fatal.
|
|
284
|
+
- **Schedule has tasks but they don't fire** — verify
|
|
285
|
+
the schedule file is reachable by the service user
|
|
286
|
+
(the user the service runs as, not your interactive
|
|
287
|
+
user). `peaks cron list` from the interactive shell
|
|
288
|
+
may show entries that the service user cannot see
|
|
289
|
+
(different HOME / different `PEAKS_HOME` env).
|
|
290
|
+
|
|
291
|
+
## Production checklist
|
|
292
|
+
|
|
293
|
+
- [ ] NSSM installed on PATH
|
|
294
|
+
- [ ] Node.js installed at the path NSSM is configured for
|
|
295
|
+
- [ ] peaks-loop installed at the path NSSM is configured for
|
|
296
|
+
- [ ] Project root has a populated `.peaks/cron/schedule.json`
|
|
297
|
+
(run `peaks cron init` from the project dir first)
|
|
298
|
+
- [ ] Log directory exists and is writable by the service user
|
|
299
|
+
- [ ] `nssm status peaks-cron-scheduler` reports `SERVICE_RUNNING`
|
|
300
|
+
- [ ] `peaks cron-scheduler status` reports `alive: true`
|
|
301
|
+
- [ ] `peaks cron-scheduler run-once` runs the lease-gc-daily
|
|
302
|
+
task without error
|
|
303
|
+
- [ ] Service survives a reboot (`shutdown /r` then
|
|
304
|
+
`nssm status peaks-cron-scheduler`)
|
|
305
|
+
|
|
306
|
+
## Related memory
|
|
307
|
+
|
|
308
|
+
- [[2026-07-29-worktree-l2-extended-part15]] — peaks-cron
|
|
309
|
+
init / list / run / peaks-cron-scheduler start (Part 15)
|
|
310
|
+
- [[2026-07-29-worktree-l2-extended-part20]] — first pass
|
|
311
|
+
NSSM recipe (Part 20)
|
|
312
|
+
- [[2026-07-29-worktree-l2-extended-part14]] — peaks-cron
|
|
313
|
+
schedule.json shape + built-in `lease-gc-daily` task
|
|
@@ -70,3 +70,30 @@ When a skill body adds a new external reference, it must include the equivalent
|
|
|
70
70
|
3. add the capability discovery clause, the reference-only qualifier, the do-not-execute clause, and the Peaks-authoritative gate to that section;
|
|
71
71
|
4. for MCP servers, point the LLM at the tool-list self-check (its own `mcp__<server>__*` namespace) instead of describing manual `~/.claude/settings.json` edits;
|
|
72
72
|
5. rerun the audit.
|
|
73
|
+
|
|
74
|
+
## Superpowers transition contract (effective 2026-07-24, slice 2026-07-24-peaks-code-bridge-002-rootcause)
|
|
75
|
+
|
|
76
|
+
`peaks-code` cooperates with the **superpowers** skill family under the following contract. This contract sits alongside Stage 1–3 above and is binding on every peaks-code dispatch.
|
|
77
|
+
|
|
78
|
+
### Trigger
|
|
79
|
+
|
|
80
|
+
When the user (or the active IDE skill picker) suggests invoking `superpowers:brainstorming`, `superpowers:writing-plans`, `superpowers:executing-plans`, or any other superpowers skill during a peaks-code request, the LLM MUST apply the transition steps below before continuing the peaks-code 11-step sequence.
|
|
81
|
+
|
|
82
|
+
### Transition steps (binding)
|
|
83
|
+
|
|
84
|
+
1. **Discovery** — confirm the superpowers skill is present via the LLM's own tool list / `peaks capabilities --source access-repo --json`. If absent, surface the install command (`claude install skill superpowers:<skill>`) and stop until the user installs.
|
|
85
|
+
2. **Reference-only invocation** — invoke the superpowers skill as **reference material**. The output (a brainstorming map, a plan, a TDD recipe, etc.) is read; it is not executed as the workflow body. Quote the methods/surfaces the peaks-rd plan borrows; never persist or "execute" the superpowers output verbatim.
|
|
86
|
+
3. **Re-author through peaks-rd** — re-author the borrowed plan as a peaks-rd artefact at `.peaks/_runtime/<sessionId>/rd/requests/<rid>.md`. peaks-rd owns the slice contract, the rollback plan, and the test plan. The superpowers output may inform the prose; it does not replace the peaks-rd envelope.
|
|
87
|
+
4. **Continue peaks-code** — from Step 3 (sub-agent fan-out) onward. Do NOT call `superpowers:executing-plans` or `superpowers:subagent-driven-development` to run the resulting plan; use `peaks sub-agent dispatch rd` / `peaks sub-agent dispatch qa` instead.
|
|
88
|
+
5. **Do not edit upstream** — the `superpowers:writing-plans` and `superpowers:brainstorming` upstream SKILL.md files are owned by the superpowers npm/Claude-Code skill distribution. Any direct edit is silently overwritten on the next `claude install skill superpowers:<skill>` refresh. If a user-facing bridge is needed, place it in `peaks-code/SKILL.md` (BRIDGE chapter), `peaks-code/references/runbook.md` (Step 2.7), `peaks-code/references/boundaries.md` (superpowers red lines), and this file (transition contract).
|
|
89
|
+
6. **Mandatory closure** — when the request is complete, run `peaks request transition` through `spec-locked → implemented → qa-handoff → handed-off` and `peaks memory extract`. A half-finished state file under `.peaks/_runtime/<sessionId>/` is treated as pollution.
|
|
90
|
+
|
|
91
|
+
### What peaks-code MUST NOT do
|
|
92
|
+
|
|
93
|
+
- Dispatch `superpowers:executing-plans` or `superpowers:subagent-driven-development` to replace peaks-rd or peaks-qa.
|
|
94
|
+
- Adopt superpowers' bare worktree convention (`~/.claude/worktrees/<branch>/`) inside peaks-code requests; peaks-loop uses `.peaks/_runtime/<sessionId>/<role>/...` (gitignored) and the active junction at `~/.claude/skills/peaks-*`.
|
|
95
|
+
- Hand-author hook scripts at `~/.claude/skills/peaks-code/hooks/*`. Hook source MUST come from `src/services/hooks/*.sh` in the peaks-loop repo, distributed via `peaks hooks install` (which itself respects the existing `peaks gate enforce` entry and is append-only).
|
|
96
|
+
|
|
97
|
+
### Phrase the audit looks for
|
|
98
|
+
|
|
99
|
+
When a peaks-code skill body mentions a superpowers skill by name, the body MUST include all four: a "reference only" qualifier, a "do not auto-run" clause, a "re-author through peaks-rd" clause, and a "Peaks artefacts remain authoritative" clause. The `tests/unit/skills/peaks-code-superpowers-bridge.test.ts` guard test enforces this on every peaks-* SKILL.md.
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>peaks lease-stats dashboard</title>
|
|
6
|
+
<style>
|
|
7
|
+
:root {
|
|
8
|
+
--bg: #0f1115;
|
|
9
|
+
--fg: #e6e6e6;
|
|
10
|
+
--muted: #9aa0a6;
|
|
11
|
+
--accent: #6cc4ff;
|
|
12
|
+
--ok: #6ee787;
|
|
13
|
+
--warn: #f0c674;
|
|
14
|
+
--err: #ff6b6b;
|
|
15
|
+
--card: #1a1d24;
|
|
16
|
+
--border: #2a2e36;
|
|
17
|
+
}
|
|
18
|
+
* { box-sizing: border-box; }
|
|
19
|
+
body {
|
|
20
|
+
margin: 0;
|
|
21
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
22
|
+
background: var(--bg);
|
|
23
|
+
color: var(--fg);
|
|
24
|
+
line-height: 1.5;
|
|
25
|
+
}
|
|
26
|
+
header {
|
|
27
|
+
padding: 1.5rem 2rem;
|
|
28
|
+
border-bottom: 1px solid var(--border);
|
|
29
|
+
background: var(--card);
|
|
30
|
+
}
|
|
31
|
+
header h1 {
|
|
32
|
+
margin: 0 0 .25rem 0;
|
|
33
|
+
font-size: 1.1rem;
|
|
34
|
+
letter-spacing: .04em;
|
|
35
|
+
}
|
|
36
|
+
header .sub {
|
|
37
|
+
color: var(--muted);
|
|
38
|
+
font-size: .85rem;
|
|
39
|
+
}
|
|
40
|
+
main {
|
|
41
|
+
max-width: 960px;
|
|
42
|
+
margin: 0 auto;
|
|
43
|
+
padding: 2rem;
|
|
44
|
+
display: grid;
|
|
45
|
+
gap: 1.5rem;
|
|
46
|
+
}
|
|
47
|
+
.card {
|
|
48
|
+
background: var(--card);
|
|
49
|
+
border: 1px solid var(--border);
|
|
50
|
+
border-radius: 8px;
|
|
51
|
+
padding: 1.25rem 1.5rem;
|
|
52
|
+
}
|
|
53
|
+
.card h2 {
|
|
54
|
+
margin: 0 0 1rem 0;
|
|
55
|
+
font-size: 0.95rem;
|
|
56
|
+
color: var(--accent);
|
|
57
|
+
text-transform: uppercase;
|
|
58
|
+
letter-spacing: .08em;
|
|
59
|
+
}
|
|
60
|
+
.stat {
|
|
61
|
+
display: flex;
|
|
62
|
+
justify-content: space-between;
|
|
63
|
+
align-items: baseline;
|
|
64
|
+
padding: .35rem 0;
|
|
65
|
+
border-bottom: 1px dashed var(--border);
|
|
66
|
+
}
|
|
67
|
+
.stat:last-child { border-bottom: none; }
|
|
68
|
+
.stat .label { color: var(--muted); font-size: .9rem; }
|
|
69
|
+
.stat .value { font-size: 1.05rem; font-weight: 600; }
|
|
70
|
+
.stat .value.ok { color: var(--ok); }
|
|
71
|
+
.stat .value.warn { color: var(--warn); }
|
|
72
|
+
.stat .value.err { color: var(--err); }
|
|
73
|
+
.bar {
|
|
74
|
+
height: 6px;
|
|
75
|
+
background: var(--bg);
|
|
76
|
+
border-radius: 3px;
|
|
77
|
+
overflow: hidden;
|
|
78
|
+
margin-top: .75rem;
|
|
79
|
+
}
|
|
80
|
+
.bar .fill { height: 100%; background: var(--accent); }
|
|
81
|
+
.bar .fill.warn { background: var(--warn); }
|
|
82
|
+
.bar .fill.err { background: var(--err); }
|
|
83
|
+
table { width: 100%; border-collapse: collapse; font-size: .9rem; }
|
|
84
|
+
th, td { text-align: left; padding: .4rem .6rem; border-bottom: 1px solid var(--border); }
|
|
85
|
+
th { color: var(--muted); font-weight: 500; }
|
|
86
|
+
td.num { text-align: right; font-variant-numeric: tabular-nums; }
|
|
87
|
+
.empty { color: var(--muted); font-style: italic; }
|
|
88
|
+
code { background: var(--bg); padding: 1px 6px; border-radius: 3px; font-size: .85em; }
|
|
89
|
+
.footer { text-align: center; color: var(--muted); font-size: .8rem; margin-top: 2rem; }
|
|
90
|
+
</style>
|
|
91
|
+
</head>
|
|
92
|
+
<body>
|
|
93
|
+
<header>
|
|
94
|
+
<h1>peaks lease-stats dashboard</h1>
|
|
95
|
+
<div class="sub">auto-refreshes every 30s. Source: <code>peaks lease-stats --json</code></div>
|
|
96
|
+
</header>
|
|
97
|
+
<main>
|
|
98
|
+
<section class="card" id="rates">
|
|
99
|
+
<h2>lease lifecycle (project-wide)</h2>
|
|
100
|
+
<div class="stat"><span class="label">leases spawned</span><span class="value" id="stat-spawn">—</span></div>
|
|
101
|
+
<div class="stat"><span class="label">leases released (manual)</span><span class="value" id="stat-release">—</span></div>
|
|
102
|
+
<div class="stat"><span class="label">leases auto-released</span><span class="value" id="stat-auto">—</span></div>
|
|
103
|
+
<div class="stat"><span class="label">leases gc'd</span><span class="value" id="stat-gc">—</span></div>
|
|
104
|
+
<div class="stat"><span class="label">auto-release failures</span><span class="value" id="stat-fail">—</span></div>
|
|
105
|
+
</section>
|
|
106
|
+
|
|
107
|
+
<section class="card" id="rate">
|
|
108
|
+
<h2>leak rate</h2>
|
|
109
|
+
<div class="stat"><span class="label">estimated active</span><span class="value" id="stat-active">—</span></div>
|
|
110
|
+
<div class="stat"><span class="label">estimated leaked</span><span class="value" id="stat-leaked">—</span></div>
|
|
111
|
+
<div class="bar"><div class="fill" id="bar-leaked"></div></div>
|
|
112
|
+
<div class="stat" id="row-lifetimes" style="display:none"><span class="label">avg lease lifetime</span><span class="value" id="stat-avglife">—</span></div>
|
|
113
|
+
<div class="stat" id="row-p99" style="display:none"><span class="label">p99 lease lifetime</span><span class="value" id="stat-p99">—</span></div>
|
|
114
|
+
</section>
|
|
115
|
+
|
|
116
|
+
<section class="card" id="rid-table">
|
|
117
|
+
<h2>top rids (by event count)</h2>
|
|
118
|
+
<table>
|
|
119
|
+
<thead><tr><th>rid</th><th class="num">events</th></tr></thead>
|
|
120
|
+
<tbody id="rid-body"><tr><td colspan="2" class="empty">no events recorded</td></tr></tbody>
|
|
121
|
+
</table>
|
|
122
|
+
</section>
|
|
123
|
+
|
|
124
|
+
<section class="card" id="role-table">
|
|
125
|
+
<h2>by role</h2>
|
|
126
|
+
<table>
|
|
127
|
+
<thead><tr><th>role</th><th class="num">events</th></tr></thead>
|
|
128
|
+
<tbody id="role-body"><tr><td colspan="2" class="empty">no events recorded</td></tr></tbody>
|
|
129
|
+
</table>
|
|
130
|
+
</section>
|
|
131
|
+
|
|
132
|
+
<section class="card" id="iso-table">
|
|
133
|
+
<h2>by isolation mode</h2>
|
|
134
|
+
<table>
|
|
135
|
+
<thead><tr><th>isolation</th><th class="num">events</th></tr></thead>
|
|
136
|
+
<tbody id="iso-body"><tr><td colspan="2" class="empty">no events recorded</td></tr></tbody>
|
|
137
|
+
</table>
|
|
138
|
+
</section>
|
|
139
|
+
</main>
|
|
140
|
+
<div class="footer">part 26 — open <code>lease-dashboard.html</code> in a browser served by a static file server</div>
|
|
141
|
+
<script>
|
|
142
|
+
// Part 26 dashboard. Fetches the live peaks lease-stats
|
|
143
|
+
// envelope every 30s and re-renders the cards. The endpoint
|
|
144
|
+
// is a sibling field to `node bin/peaks.js audit red-lines`
|
|
145
|
+
// — any project root that has a populated .peaks/observability
|
|
146
|
+
// stream will render correctly.
|
|
147
|
+
//
|
|
148
|
+
// Use: serve this file via `python3 -m http.server 8080` and
|
|
149
|
+
// configure the peaks CLI to expose a JSON endpoint on the
|
|
150
|
+
// same port. (The simplest local setup is a tiny shell script
|
|
151
|
+
// that wraps `peaks lease-stats --project . --json | jq .`.)
|
|
152
|
+
async function refresh() {
|
|
153
|
+
try {
|
|
154
|
+
const res = await fetch('./lease-stats.json', { cache: 'no-store' });
|
|
155
|
+
if (!res.ok) throw new Error('HTTP ' + res.status);
|
|
156
|
+
const env = await res.json();
|
|
157
|
+
render(env.data);
|
|
158
|
+
} catch (err) {
|
|
159
|
+
// Render a soft error: the page stays useful as a static
|
|
160
|
+
// reference even when the JSON endpoint is down.
|
|
161
|
+
document.getElementById('stat-spawn').textContent = 'err: ' + err.message;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function render(d) {
|
|
165
|
+
if (!d) return;
|
|
166
|
+
const c = d.counts || {};
|
|
167
|
+
document.getElementById('stat-spawn').textContent = c.spawn ?? '—';
|
|
168
|
+
document.getElementById('stat-release').textContent = c.release ?? '—';
|
|
169
|
+
document.getElementById('stat-auto').textContent = c.autoRelease ?? '—';
|
|
170
|
+
document.getElementById('stat-gc').textContent = c.gc ?? '—';
|
|
171
|
+
document.getElementById('stat-fail').textContent = c['autoRelease-failed'] ?? '—';
|
|
172
|
+
if (d.rate) {
|
|
173
|
+
const active = d.rate.estimatedActive ?? 0;
|
|
174
|
+
const leaked = d.rate.estimatedLeaked ?? 0;
|
|
175
|
+
const denom = Math.max(active, 1);
|
|
176
|
+
const pct = Math.round((leaked / denom) * 100);
|
|
177
|
+
const cls = leaked === 0 ? 'ok' : (pct < 10 ? 'warn' : 'err');
|
|
178
|
+
const aEl = document.getElementById('stat-active');
|
|
179
|
+
const lEl = document.getElementById('stat-leaked');
|
|
180
|
+
aEl.textContent = active;
|
|
181
|
+
aEl.className = 'value ' + cls;
|
|
182
|
+
lEl.textContent = leaked + ' (' + pct + '%)';
|
|
183
|
+
lEl.className = 'value ' + cls;
|
|
184
|
+
const bar = document.getElementById('bar-leaked');
|
|
185
|
+
bar.style.width = pct + '%';
|
|
186
|
+
bar.className = 'fill ' + cls;
|
|
187
|
+
if (d.rate.avgLifetimeMs !== null && d.rate.avgLifetimeMs !== undefined) {
|
|
188
|
+
document.getElementById('row-lifetimes').style.display = 'flex';
|
|
189
|
+
document.getElementById('stat-avglife').textContent = formatMs(d.rate.avgLifetimeMs);
|
|
190
|
+
}
|
|
191
|
+
if (d.rate.p99LifetimeMs !== null && d.rate.p99LifetimeMs !== undefined) {
|
|
192
|
+
document.getElementById('row-p99').style.display = 'flex';
|
|
193
|
+
document.getElementById('stat-p99').textContent = formatMs(d.rate.p99LifetimeMs);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
fillTable('rid-body', d.perRid || [], (r) => [r.rid, r.count]);
|
|
197
|
+
fillTable('role-body', d.perRole || [], (r) => [r.role, r.count]);
|
|
198
|
+
fillTable('iso-body', d.perIsolation || [], (r) => [r.isolation, r.count]);
|
|
199
|
+
}
|
|
200
|
+
function fillTable(id, rows, mapper) {
|
|
201
|
+
const body = document.getElementById(id);
|
|
202
|
+
if (rows.length === 0) {
|
|
203
|
+
body.innerHTML = '<tr><td colspan="2" class="empty">no events recorded</td></tr>';
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
body.innerHTML = rows.map((r) => {
|
|
207
|
+
const [a, b] = mapper(r);
|
|
208
|
+
return '<tr><td>' + escape(a) + '</td><td class="num">' + b + '</td></tr>';
|
|
209
|
+
}).join('');
|
|
210
|
+
}
|
|
211
|
+
function escape(s) {
|
|
212
|
+
return String(s).replace(/[&<>"]/g, (c) => ({'&':'&','<':'<','>':'>','"':'"'}[c]));
|
|
213
|
+
}
|
|
214
|
+
function formatMs(ms) {
|
|
215
|
+
if (ms < 1000) return ms + 'ms';
|
|
216
|
+
if (ms < 60_000) return (ms / 1000).toFixed(1) + 's';
|
|
217
|
+
if (ms < 3_600_000) return (ms / 60_000).toFixed(1) + 'm';
|
|
218
|
+
return (ms / 3_600_000).toFixed(1) + 'h';
|
|
219
|
+
}
|
|
220
|
+
refresh();
|
|
221
|
+
setInterval(refresh, 30_000);
|
|
222
|
+
</script>
|
|
223
|
+
</body>
|
|
224
|
+
</html>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"ok": true,
|
|
3
|
+
"command": "lease.stats",
|
|
4
|
+
"data": {
|
|
5
|
+
"projectRoot": ".",
|
|
6
|
+
"sessionCount": 0,
|
|
7
|
+
"totalLeaseEvents": 0,
|
|
8
|
+
"rate": {
|
|
9
|
+
"totalSpawn": 0,
|
|
10
|
+
"totalTerminal": 0,
|
|
11
|
+
"estimatedActive": 0,
|
|
12
|
+
"estimatedLeaked": 0,
|
|
13
|
+
"completedLifetimes": 0,
|
|
14
|
+
"avgLifetimeMs": null,
|
|
15
|
+
"p99LifetimeMs": null
|
|
16
|
+
},
|
|
17
|
+
"perRid": [],
|
|
18
|
+
"perRole": [],
|
|
19
|
+
"perIsolation": []
|
|
20
|
+
},
|
|
21
|
+
"warnings": [],
|
|
22
|
+
"nextActions": [
|
|
23
|
+
"0 lease events across 0 session(s); 0 estimated active, 0 estimated leaked.",
|
|
24
|
+
"Pipe to `jq` or paste into a dashboard for visual rendering."
|
|
25
|
+
]
|
|
26
|
+
}
|