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,31 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import { type DispatchRecord } from '../../services/dispatch/dispatch-record-writer.js';
|
|
3
|
+
import { summarize, viewSubAgent } from '../../services/code/status-line-renderer.js';
|
|
4
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
5
|
+
declare const DEFAULT_INTERVAL_MS = 10000;
|
|
6
|
+
declare const DEFAULT_STALE_THRESHOLD_MS: number;
|
|
7
|
+
type WatchSnapshot = {
|
|
8
|
+
readonly records: readonly DispatchRecord[];
|
|
9
|
+
readonly line: string;
|
|
10
|
+
readonly summary: ReturnType<typeof summarize>;
|
|
11
|
+
readonly views: readonly ReturnType<typeof viewSubAgent>[];
|
|
12
|
+
readonly stale: {
|
|
13
|
+
readonly count: number;
|
|
14
|
+
readonly thresholdSec: number;
|
|
15
|
+
readonly customThresholdSec: number;
|
|
16
|
+
readonly views: readonly ReturnType<typeof viewSubAgent>[];
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
declare function parsePositiveMs(raw: string | undefined, fallback: number, flag: string): number;
|
|
20
|
+
declare function findBatchRecords(projectRoot: string, sessionId: string, batchId: string): DispatchRecord[];
|
|
21
|
+
declare function snapshot(records: readonly DispatchRecord[], batchId: string, staleThresholdMs: number, now?: () => Date): WatchSnapshot;
|
|
22
|
+
declare function isTerminal(records: readonly DispatchRecord[]): boolean;
|
|
23
|
+
/** Register the independently runnable `peaks heartbeat watch` daemon. */
|
|
24
|
+
export declare function registerHeartbeatWatchCommand(parent: Command, io: ProgramIO): void;
|
|
25
|
+
export declare const __test__: {
|
|
26
|
+
findBatchRecords: typeof findBatchRecords;
|
|
27
|
+
isTerminal: typeof isTerminal;
|
|
28
|
+
parsePositiveMs: typeof parsePositiveMs;
|
|
29
|
+
snapshot: typeof snapshot;
|
|
30
|
+
};
|
|
31
|
+
export { DEFAULT_INTERVAL_MS, DEFAULT_STALE_THRESHOLD_MS };
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { resolveCanonicalProjectRoot } from '../../services/config/config-service.js';
|
|
4
|
+
import { getSessionIdCanonical } from '../../services/session/session-manager.js';
|
|
5
|
+
import { readRecords } from '../../services/dispatch/dispatch-record-writer.js';
|
|
6
|
+
import { renderStatusLine, summarize, viewSubAgent } from '../../services/code/status-line-renderer.js';
|
|
7
|
+
import { getErrorMessage } from '../cli-helpers.js';
|
|
8
|
+
const DEFAULT_INTERVAL_MS = 10_000;
|
|
9
|
+
const DEFAULT_STALE_THRESHOLD_MS = 5 * 60 * 1000;
|
|
10
|
+
const TERMINAL_STATUSES = new Set([
|
|
11
|
+
'done',
|
|
12
|
+
'failed',
|
|
13
|
+
'cancelled',
|
|
14
|
+
'no-execution'
|
|
15
|
+
]);
|
|
16
|
+
function parsePositiveMs(raw, fallback, flag) {
|
|
17
|
+
if (raw === undefined)
|
|
18
|
+
return fallback;
|
|
19
|
+
const value = Number(raw);
|
|
20
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
21
|
+
throw new Error(`${flag} must be a positive integer (got ${raw})`);
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
function parseMaxTicks(raw) {
|
|
26
|
+
if (raw === undefined)
|
|
27
|
+
return Number.POSITIVE_INFINITY;
|
|
28
|
+
const value = Number(raw);
|
|
29
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
30
|
+
throw new Error(`--max-ticks must be a positive integer (got ${raw})`);
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
function findBatchRecords(projectRoot, sessionId, batchId) {
|
|
35
|
+
const sessionDir = resolve(projectRoot, '.peaks', '_sub_agents', sessionId);
|
|
36
|
+
if (!existsSync(sessionDir))
|
|
37
|
+
return [];
|
|
38
|
+
const paths = readdirSync(sessionDir)
|
|
39
|
+
.filter((name) => /^dispatch-[^/\\]+\.json$/.test(name))
|
|
40
|
+
.map((name) => join(sessionDir, name));
|
|
41
|
+
return readRecords(paths).filter((record) => record.batchId === batchId);
|
|
42
|
+
}
|
|
43
|
+
function snapshot(records, batchId, staleThresholdMs, now = () => new Date()) {
|
|
44
|
+
const prefix = `[peaks-heartbeat:${batchId}]`;
|
|
45
|
+
const summary = summarize(records);
|
|
46
|
+
const views = records.map((record) => viewSubAgent(record, now));
|
|
47
|
+
const customThresholdSec = Math.floor(staleThresholdMs / 1000);
|
|
48
|
+
const staleViews = views.filter((view) => view.lastBeatAgoSec !== null && view.lastBeatAgoSec > customThresholdSec);
|
|
49
|
+
let line = renderStatusLine(prefix, records, now);
|
|
50
|
+
if (staleThresholdMs > DEFAULT_STALE_THRESHOLD_MS) {
|
|
51
|
+
line = line.replaceAll(' ⚠ stale', '');
|
|
52
|
+
}
|
|
53
|
+
else if (staleThresholdMs < DEFAULT_STALE_THRESHOLD_MS) {
|
|
54
|
+
const staleRoles = new Set(staleViews.map((view) => view.role));
|
|
55
|
+
if (staleRoles.size > 0 && !line.includes('⚠ stale')) {
|
|
56
|
+
line += ` ⚠ stale (${[...staleRoles].join(', ')})`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
records,
|
|
61
|
+
line,
|
|
62
|
+
summary,
|
|
63
|
+
views,
|
|
64
|
+
stale: {
|
|
65
|
+
count: staleViews.length,
|
|
66
|
+
thresholdSec: Math.floor(DEFAULT_STALE_THRESHOLD_MS / 1000),
|
|
67
|
+
customThresholdSec,
|
|
68
|
+
views: staleViews
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function isTerminal(records) {
|
|
73
|
+
return records.length > 0 && records.every((record) => TERMINAL_STATUSES.has(record.status));
|
|
74
|
+
}
|
|
75
|
+
function emit(io, value, json) {
|
|
76
|
+
if (json) {
|
|
77
|
+
io.stdout(`${JSON.stringify({ ok: true, data: value })}\n`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
io.stdout(`${value.line}\n`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** Register the independently runnable `peaks heartbeat watch` daemon. */
|
|
84
|
+
export function registerHeartbeatWatchCommand(parent, io) {
|
|
85
|
+
parent
|
|
86
|
+
.command('watch')
|
|
87
|
+
.description('Watch persisted sub-agent heartbeat records for one batch')
|
|
88
|
+
.requiredOption('--batch-id <id>', 'batch id to watch')
|
|
89
|
+
.option('--interval-ms <n>', `poll interval in milliseconds (default ${DEFAULT_INTERVAL_MS})`)
|
|
90
|
+
.option('--stale-threshold-ms <n>', `stale threshold in milliseconds (default ${DEFAULT_STALE_THRESHOLD_MS})`)
|
|
91
|
+
.option('--max-ticks <n>', 'stop after n ticks (test/diagnostic seam)')
|
|
92
|
+
.option('--project <path>', 'project root (defaults to current directory)')
|
|
93
|
+
.option('--session-id <id>', 'session id (defaults to the active binding)')
|
|
94
|
+
.option('--json', 'emit one JSON envelope per poll tick')
|
|
95
|
+
.action(async (options) => {
|
|
96
|
+
try {
|
|
97
|
+
const intervalMs = parsePositiveMs(options.intervalMs, DEFAULT_INTERVAL_MS, '--interval-ms');
|
|
98
|
+
const staleThresholdMs = parsePositiveMs(options.staleThresholdMs, DEFAULT_STALE_THRESHOLD_MS, '--stale-threshold-ms');
|
|
99
|
+
const maxTicks = parseMaxTicks(options.maxTicks);
|
|
100
|
+
const projectRoot = resolveCanonicalProjectRoot(options.project ?? process.cwd());
|
|
101
|
+
const sessionId = options.sessionId ?? getSessionIdCanonical(projectRoot);
|
|
102
|
+
if (!sessionId)
|
|
103
|
+
throw new Error('no active session; pass --session-id');
|
|
104
|
+
const tick = () => {
|
|
105
|
+
const records = findBatchRecords(projectRoot, sessionId, options.batchId);
|
|
106
|
+
const current = snapshot(records, options.batchId, staleThresholdMs);
|
|
107
|
+
emit(io, current, options.json === true);
|
|
108
|
+
return isTerminal(records);
|
|
109
|
+
};
|
|
110
|
+
if (tick())
|
|
111
|
+
return;
|
|
112
|
+
let count = 1;
|
|
113
|
+
await new Promise((resolveWait, reject) => {
|
|
114
|
+
const timer = setInterval(() => {
|
|
115
|
+
try {
|
|
116
|
+
count += 1;
|
|
117
|
+
if (tick() || count >= maxTicks) {
|
|
118
|
+
clearInterval(timer);
|
|
119
|
+
resolveWait();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
clearInterval(timer);
|
|
124
|
+
reject(error);
|
|
125
|
+
}
|
|
126
|
+
}, intervalMs);
|
|
127
|
+
timer.unref?.();
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
const message = getErrorMessage(error);
|
|
132
|
+
if (options.json === true)
|
|
133
|
+
io.stdout(`${JSON.stringify({ ok: false, code: 'HEARTBEAT_WATCH_FAILED', message })}\n`);
|
|
134
|
+
else
|
|
135
|
+
io.stderr(`HEARTBEAT_WATCH_FAILED: ${message}\n`);
|
|
136
|
+
process.exitCode = 1;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
export const __test__ = {
|
|
141
|
+
findBatchRecords,
|
|
142
|
+
isTerminal,
|
|
143
|
+
parsePositiveMs,
|
|
144
|
+
snapshot
|
|
145
|
+
};
|
|
146
|
+
export { DEFAULT_INTERVAL_MS, DEFAULT_STALE_THRESHOLD_MS };
|
|
@@ -6,7 +6,7 @@ import { evaluateCodeBan } from '../../services/audit/enforcers/code-ban.js';
|
|
|
6
6
|
import { isRootWrite } from '../../services/audit/enforcers/no-root-pollution.js';
|
|
7
7
|
import { checkLoginGate } from '../../services/audit/enforcers/login-gate.js';
|
|
8
8
|
import { resolveActiveSkillForCaller } from '../../services/audit/enforcers/active-skill-resolver.js';
|
|
9
|
-
import { fail, ok } from '
|
|
9
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
10
10
|
import { emitDecision, emitHint } from '../../services/hooks/output.js';
|
|
11
11
|
/**
|
|
12
12
|
* Read the hook payload. `PEAKS_HOOK_STDIN` is a test seam (same convention as
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import {
|
|
1
|
+
import { existsSync, copyFileSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
3
4
|
import { addJsonOption, printResult, getErrorMessage } from '../cli-helpers.js';
|
|
4
5
|
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
5
|
-
import { applyHookInstall, planHookInstall, readHookStatus, readInstalledEntriesFromSettings, removeHookInstall } from '../../services/skills/hooks-settings-service.js';
|
|
6
|
+
import { applyHookInstall, planHookInstall, readHookStatus, readInstalledEntriesFromSettings, removeHookInstall, listSuperpowersDenyEntries } from '../../services/skills/hooks-settings-service.js';
|
|
6
7
|
import { readJsonObjectFile } from '../../services/ide/shared/atomic-json.js';
|
|
7
8
|
import { detectIdeFromContext } from '../../services/ide/hook-translator.js';
|
|
8
9
|
import { getAdapter } from '../../services/ide/ide-registry.js';
|
|
@@ -44,6 +45,59 @@ function listExpectedEntriesForIde(ide, _skipProgress = false) {
|
|
|
44
45
|
}
|
|
45
46
|
return [{ matcher: adapter.toolMatcher, sentinel: 'peaks gate enforce' }];
|
|
46
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Slice 2026-07-24-peaks-code-bridge-002-rootcause (G6b / G10): copy the
|
|
50
|
+
* superpowers-bridge hook source from the peaks-loop repo
|
|
51
|
+
* (src/services/hooks/pre-tool-superpowers-bridge.sh) into the user-global
|
|
52
|
+
* `<userHome>/.claude/skills/peaks-code/hooks/` directory. The user-global
|
|
53
|
+
* copy is treated as a build artifact: it MUST be byte-identical to the
|
|
54
|
+
* repo source after install, and the source of truth is the repo file.
|
|
55
|
+
*
|
|
56
|
+
* Why this lives in the install command: the install is the single
|
|
57
|
+
* declared surface where the user-global directory is touched. Adding it
|
|
58
|
+
* here keeps the "hooks only ship from src/services/hooks/" invariant
|
|
59
|
+
* (G10 / AC10) — no other code path writes to `~/.claude/skills/peaks-code/hooks/`.
|
|
60
|
+
*
|
|
61
|
+
* Failure modes:
|
|
62
|
+
* - Source file missing (build not run yet) → silently skip and emit a
|
|
63
|
+
* warning. The settings.json install still succeeds; only the script
|
|
64
|
+
* distribution is skipped. Matches the "release-pack silent skip
|
|
65
|
+
* when tarball lacks dist/version.js" pattern from commit 08d93353.
|
|
66
|
+
* - Target directory unwritable → throw so the user knows.
|
|
67
|
+
* - Target file already exists with identical bytes → no-op.
|
|
68
|
+
* - Target file exists with different bytes → overwrite (the repo
|
|
69
|
+
* source is authoritative).
|
|
70
|
+
*
|
|
71
|
+
* Returns `{ copied, source, target }` so the install envelope can report
|
|
72
|
+
* it without forcing the caller to inspect the filesystem.
|
|
73
|
+
*/
|
|
74
|
+
/**
|
|
75
|
+
* Slice 2026-07-29-worktree-layer3-deny: read the on-disk
|
|
76
|
+
* `permissions.deny` block from a settings.json object and return
|
|
77
|
+
* every peaks-managed entry currently present. Used by `hooks status`
|
|
78
|
+
* to surface Layer 3 governance state without forcing the caller to
|
|
79
|
+
* re-read the file. Tolerant of missing / malformed `permissions` —
|
|
80
|
+
* a missing field returns an empty array, never throws.
|
|
81
|
+
*/
|
|
82
|
+
function readOnDiskDenyEntries(settings) {
|
|
83
|
+
const permissions = settings.permissions;
|
|
84
|
+
if (!permissions || typeof permissions !== 'object' || Array.isArray(permissions))
|
|
85
|
+
return [];
|
|
86
|
+
const deny = permissions.deny;
|
|
87
|
+
if (!Array.isArray(deny))
|
|
88
|
+
return [];
|
|
89
|
+
return deny.filter((d) => typeof d === 'string');
|
|
90
|
+
}
|
|
91
|
+
function copyBridgeHookIfPresent(userHome) {
|
|
92
|
+
const source = resolve(__dirname, '..', '..', 'services', 'hooks', 'pre-tool-superpowers-bridge.sh');
|
|
93
|
+
const target = resolve(userHome, '.claude', 'skills', 'peaks-code', 'hooks', 'pre-tool-superpowers-bridge.sh');
|
|
94
|
+
if (!existsSync(source)) {
|
|
95
|
+
return { copied: false, source, target };
|
|
96
|
+
}
|
|
97
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
98
|
+
copyFileSync(source, target);
|
|
99
|
+
return { copied: true, source, target };
|
|
100
|
+
}
|
|
47
101
|
export function registerHooksCommands(program, io) {
|
|
48
102
|
const hooks = program
|
|
49
103
|
.command('hooks')
|
|
@@ -64,14 +118,31 @@ export function registerHooksCommands(program, io) {
|
|
|
64
118
|
if (options.dryRun === true) {
|
|
65
119
|
const plan = planHookInstall(scope, projectRoot, { ide, skipProgress });
|
|
66
120
|
const dryRunEntries = listExpectedEntriesForIde(ide, skipProgress);
|
|
121
|
+
const bridgeCopy = scope === 'global'
|
|
122
|
+
? copyBridgeHookIfPresent(process.env.USERPROFILE ?? process.env.HOME ?? '')
|
|
123
|
+
: { copied: false, source: '', target: '' };
|
|
67
124
|
printResult(io, ok('hooks.install', {
|
|
68
125
|
...plan,
|
|
69
126
|
ide,
|
|
70
127
|
applied: false,
|
|
71
128
|
dryRun: true,
|
|
72
129
|
skipProgress,
|
|
73
|
-
entries: dryRunEntries
|
|
74
|
-
|
|
130
|
+
entries: dryRunEntries,
|
|
131
|
+
bridgeHookCopy: bridgeCopy,
|
|
132
|
+
// Slice 2026-07-29-worktree-layer3-deny: surface the
|
|
133
|
+
// Layer 3 deny entries the install WOULD write. The
|
|
134
|
+
// dry-run branch never actually invokes
|
|
135
|
+
// `applyHookInstall`, so the on-disk snapshot is not
|
|
136
|
+
// consulted here — the list is the desired-state
|
|
137
|
+
// constant for clarity in the JSON envelope.
|
|
138
|
+
permissionsDenyEntries: listSuperpowersDenyEntries()
|
|
139
|
+
}, [], [
|
|
140
|
+
`would install ${dryRunEntries.length} peaks-managed hook entries`,
|
|
141
|
+
`would write ${listSuperpowersDenyEntries().length} permissions.deny entries (Layer 3 worktree governance)`,
|
|
142
|
+
bridgeCopy.copied
|
|
143
|
+
? `would copy bridge hook from ${bridgeCopy.source} to ${bridgeCopy.target}`
|
|
144
|
+
: 'would not copy bridge hook (source missing or non-global scope)'
|
|
145
|
+
]), options.json);
|
|
75
146
|
return;
|
|
76
147
|
}
|
|
77
148
|
const result = applyHookInstall(scope, projectRoot, { ide, skipProgress });
|
|
@@ -82,18 +153,44 @@ export function registerHooksCommands(program, io) {
|
|
|
82
153
|
// entry; the summary mirrors the install shape, NOT a hardcoded
|
|
83
154
|
// expected list.
|
|
84
155
|
const installedEntries = listExpectedEntriesForIde(ide, skipProgress);
|
|
156
|
+
// Slice 2026-07-24-peaks-code-bridge-002-rootcause (G6b / G10): when
|
|
157
|
+
// the install targets global scope, also copy the superpowers-bridge
|
|
158
|
+
// hook script from src/services/hooks/ to the user-global hooks
|
|
159
|
+
// directory. Project scope does not need this — project's
|
|
160
|
+
// .claude/skills/peaks-code is already a junction into the npm source.
|
|
161
|
+
const bridgeCopy = scope === 'global'
|
|
162
|
+
? copyBridgeHookIfPresent(process.env.USERPROFILE ?? process.env.HOME ?? '')
|
|
163
|
+
: { copied: false, source: '', target: '' };
|
|
85
164
|
const nextActions = result.applied
|
|
86
165
|
? [
|
|
87
166
|
'Restart the IDE (or reload the workspace) so the hook entries take effect',
|
|
88
|
-
`Installed: ${installedEntries.map((e) => `${e.matcher}→${e.sentinel}`).join(', ')}
|
|
167
|
+
`Installed: ${installedEntries.map((e) => `${e.matcher}→${e.sentinel}`).join(', ')}`,
|
|
168
|
+
// Slice 2026-07-29-worktree-layer3-deny: surface L3 deny
|
|
169
|
+
// write alongside the hook install — single atomic write.
|
|
170
|
+
`Layer 3 deny: wrote ${listSuperpowersDenyEntries().length} permissions.deny entries (worktree governance)`,
|
|
171
|
+
bridgeCopy.copied
|
|
172
|
+
? `Copied bridge hook: ${bridgeCopy.target}`
|
|
173
|
+
: 'Bridge hook not copied (source missing or non-global scope)'
|
|
89
174
|
]
|
|
90
|
-
:
|
|
175
|
+
: (bridgeCopy.copied
|
|
176
|
+
? [`Bridge hook copied: ${bridgeCopy.target}`]
|
|
177
|
+
: []);
|
|
178
|
+
// Slice 2026-07-29-worktree-layer3-deny: emit L3 deny bookkeeping
|
|
179
|
+
// in the JSON envelope so downstream automation (audit / sc) can
|
|
180
|
+
// confirm Layer 3 was applied without re-reading the file. When
|
|
181
|
+
// the install is a no-op (`applied: false`) the deny block was
|
|
182
|
+
// already on disk from a prior install; we still emit the
|
|
183
|
+
// current desired list for symmetry with the dry-run envelope.
|
|
184
|
+
const denyEntries = listSuperpowersDenyEntries();
|
|
91
185
|
printResult(io, ok('hooks.install', {
|
|
92
186
|
...result,
|
|
93
187
|
ide,
|
|
94
188
|
dryRun: false,
|
|
95
189
|
skipProgress,
|
|
96
|
-
entries: installedEntries.map((e) => ({ matcher: e.matcher, sentinel: e.sentinel }))
|
|
190
|
+
entries: installedEntries.map((e) => ({ matcher: e.matcher, sentinel: e.sentinel })),
|
|
191
|
+
bridgeHookCopy: bridgeCopy,
|
|
192
|
+
permissionsDenyApplied: result.applied,
|
|
193
|
+
permissionsDenyEntries: denyEntries
|
|
97
194
|
}, [], nextActions), options.json);
|
|
98
195
|
}
|
|
99
196
|
catch (error) {
|
|
@@ -113,7 +210,16 @@ export function registerHooksCommands(program, io) {
|
|
|
113
210
|
const ide = resolveIdeForCommand(options, projectRoot);
|
|
114
211
|
try {
|
|
115
212
|
const result = removeHookInstall(scope, projectRoot, { ide });
|
|
116
|
-
|
|
213
|
+
// Slice 2026-07-29-worktree-layer3-deny: surface L3 deny removal
|
|
214
|
+
// bookkeeping. `permissionsDenyRemoved` mirrors `removed` (the
|
|
215
|
+
// service strips deny entries on the same atomic write that
|
|
216
|
+
// strips the hook entries; they share the same boolean).
|
|
217
|
+
printResult(io, ok('hooks.uninstall', {
|
|
218
|
+
...result,
|
|
219
|
+
ide,
|
|
220
|
+
permissionsDenyRemoved: result.removed,
|
|
221
|
+
permissionsDenyEntries: listSuperpowersDenyEntries()
|
|
222
|
+
}), options.json);
|
|
117
223
|
}
|
|
118
224
|
catch (error) {
|
|
119
225
|
const message = getErrorMessage(error);
|
|
@@ -141,10 +247,20 @@ export function registerHooksCommands(program, io) {
|
|
|
141
247
|
// install left behind.
|
|
142
248
|
const settingsPath = status.settingsPath;
|
|
143
249
|
const settings = existsSync(settingsPath) ? readJsonObjectFile(settingsPath) : {};
|
|
250
|
+
// Slice 2026-07-29-worktree-layer3-deny: report the Layer 3 deny
|
|
251
|
+
// entries actually on disk. We read the existing settings.json
|
|
252
|
+
// (above) and surface its `permissions.deny` block. Any entry
|
|
253
|
+
// that matches the current `SUPERPOWERS_DENIED_SKILLS` set is
|
|
254
|
+
// considered "peaks-managed"; user-written entries are passed
|
|
255
|
+
// through verbatim so the envelope reflects reality. The desired
|
|
256
|
+
// list is also included for parity with install / uninstall.
|
|
257
|
+
const onDiskDeny = readOnDiskDenyEntries(settings);
|
|
144
258
|
printResult(io, ok('hooks.status', {
|
|
145
259
|
...status,
|
|
146
260
|
ide,
|
|
147
|
-
entries: readInstalledEntriesFromSettings(settings, ide)
|
|
261
|
+
entries: readInstalledEntriesFromSettings(settings, ide),
|
|
262
|
+
permissionsDenyEntries: listSuperpowersDenyEntries(),
|
|
263
|
+
permissionsDenyOnDisk: onDiskDeny
|
|
148
264
|
}), options.json);
|
|
149
265
|
}
|
|
150
266
|
catch (error) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { detectCurrentIdeModel } from '../../services/ide/current-model-detector.js';
|
|
2
2
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
3
|
-
import { fail, ok } from '
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
4
4
|
import { listAdapterIds } from '../../services/ide/ide-registry.js';
|
|
5
5
|
export function registerIdeCommands(program, io) {
|
|
6
6
|
const ide = program.command('ide').description('Read-only introspection helpers for the registered IDE adapter layer (slice 2026-07-09 add-zcode-adapter, Slice C)');
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
14
14
|
import { mustCheckFromReport, runImpactScan } from '../../services/impact/impact-scan-service.js';
|
|
15
|
-
import { fail, ok } from '
|
|
15
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
16
16
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
17
17
|
export function registerImpactCommands(program, io) {
|
|
18
18
|
const impact = program
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/cli/commands/job-commands.ts
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { Command } from 'commander';
|
|
4
|
-
import { fail, ok } from '
|
|
4
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
5
5
|
import { addJsonOption, printResult } from '../cli-helpers.js';
|
|
6
6
|
import { JobStateStore } from '../../services/job/job-state-store.js';
|
|
7
7
|
import { JobOrchestrator } from '../../services/job/job-orchestrator.js';
|
|
@@ -11,6 +11,8 @@ import { SubAgentJobWrapper } from '../../services/job/subagent-job-wrapper.js';
|
|
|
11
11
|
import { emitJobEvent } from '../../services/job/job-event-emitter.js';
|
|
12
12
|
import { JobInitInputSchema, JobCheckpointInputSchema, JobBlockInputSchema, } from '../../services/job/job-types.js';
|
|
13
13
|
import { getCurrentSessionId } from '../../services/skills/skill-presence-service.js';
|
|
14
|
+
import { buildCostCheckEnvelope, runKarpathyCostCheck, } from '../../services/karpathy-cost/karpathy-cost-check-service.js';
|
|
15
|
+
import { read24hState } from '../../services/24h-mode/store.js';
|
|
14
16
|
function projectRoot(opts) {
|
|
15
17
|
// Reuse the workspace root resolver from peaks CLI; for now, CWD as a safe placeholder.
|
|
16
18
|
return opts.project ?? process.cwd();
|
|
@@ -285,5 +287,36 @@ export function registerJobCommands(program, io = { stdout: (t) => process.stdou
|
|
|
285
287
|
printResult(io, ok('handoff', { handoffFor: opts.jobId, ...s }), opts);
|
|
286
288
|
});
|
|
287
289
|
addJsonOption(job.commands.find(c => c.name() === 'handoff'));
|
|
290
|
+
job
|
|
291
|
+
.command('karpathy-cost-check')
|
|
292
|
+
.description('Read the slice\'s rd/karpathy-review.md and decide whether to downgrade a block gateAction to warn (slice 2026-07-30-karpathy-cost-self-review).')
|
|
293
|
+
.requiredOption('--review-file <path>', 'path to rd/karpathy-review.md (or its .json sibling if the file is JSON)')
|
|
294
|
+
.option('--project <repo>')
|
|
295
|
+
.option('--session-id <sid>')
|
|
296
|
+
.action(async (opts) => {
|
|
297
|
+
const project = projectRoot(opts);
|
|
298
|
+
const sessionId = opts.sessionId ?? getCurrentSessionId(project);
|
|
299
|
+
if (!sessionId) {
|
|
300
|
+
return printResult(io, fail('karpathy-cost-check', 'NO_ACTIVE_SESSION', 'karpathy-cost-check requires --session-id (or an active peaks-code session)', { project }, [
|
|
301
|
+
'Re-run with --session-id <sid>',
|
|
302
|
+
'Or run `peaks workspace init` to create a session first',
|
|
303
|
+
]), opts);
|
|
304
|
+
}
|
|
305
|
+
const is24hModeActive = () => {
|
|
306
|
+
try {
|
|
307
|
+
const snapshot = read24hState(project, sessionId);
|
|
308
|
+
return snapshot.state === '24H_ACTIVE';
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
const out = runKarpathyCostCheck({
|
|
315
|
+
reviewFilePath: opts.reviewFile,
|
|
316
|
+
is24hModeActive,
|
|
317
|
+
});
|
|
318
|
+
printResult(io, buildCostCheckEnvelope(out), opts);
|
|
319
|
+
});
|
|
320
|
+
addJsonOption(job.commands.find(c => c.name() === 'karpathy-cost-check'));
|
|
288
321
|
program.addCommand(job);
|
|
289
322
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `peaks lease-metrics` — slice 2026-07-29-worktree-l2-extended Part 4.A + Part 5.
|
|
3
|
+
*
|
|
4
|
+
* Part 4.A: aggregate lease-kind observability events for one session,
|
|
5
|
+
* render per-kind counts + a 5-event chronological tail.
|
|
6
|
+
*
|
|
7
|
+
* Part 5 adds:
|
|
8
|
+
* - `--rate` : leak-rate computation (spawn - release - gc)
|
|
9
|
+
* plus lifetime stats (avg / p99) per lease id.
|
|
10
|
+
* - `--all-sessions` : aggregate across every session under
|
|
11
|
+
* `.peaks/_runtime/<sid>/metrics/slices.jsonl`
|
|
12
|
+
* for the given project root. Useful for
|
|
13
|
+
* cross-session dashboards.
|
|
14
|
+
*
|
|
15
|
+
* Aggregation is pure (operates on already-read ObservabilityEvent[]);
|
|
16
|
+
* the IO layer is the JSONL read at the call site. The reader filters
|
|
17
|
+
* on `category === 'lease'`; the schema is the same as every other
|
|
18
|
+
* observability event (Part 4.A reused the existing schema v1).
|
|
19
|
+
*/
|
|
20
|
+
import { Command } from 'commander';
|
|
21
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
22
|
+
import { type ObservabilityEvent } from '../../services/observability/observability-service.js';
|
|
23
|
+
/**
|
|
24
|
+
* Part 5: leak-rate + lifetime statistics.
|
|
25
|
+
*
|
|
26
|
+
* Leaks are leases that were spawned but neither released (manual)
|
|
27
|
+
* nor auto-released nor gc'd. A naive count is
|
|
28
|
+
* `spawn - release - gc - autoRelease`; the result is the number
|
|
29
|
+
* of currently-alive leases in the absence of in-flight work
|
|
30
|
+
* (the on-disk lease files in `.peaks/_runtime/<sid>/worktree-leases/`
|
|
31
|
+
* are the canonical "alive" set; this aggregation is an estimate
|
|
32
|
+
* for sessions whose files have been pruned but the metrics
|
|
33
|
+
* stream survived).
|
|
34
|
+
*
|
|
35
|
+
* Lifetime: pair each spawn event with its first terminal event
|
|
36
|
+
* (release / gc / autoRelease / autoRelease-failed) for the same
|
|
37
|
+
* leaseId; the duration is the difference in milliseconds. The
|
|
38
|
+
* result is an avg / p99 across the completed leases. p99 is the
|
|
39
|
+
* 99th percentile; with 0-1 completed leases the field is null.
|
|
40
|
+
*/
|
|
41
|
+
export type RateStats = {
|
|
42
|
+
readonly totalSpawn: number;
|
|
43
|
+
readonly totalTerminal: number;
|
|
44
|
+
/** spawn - terminal — leases still "alive" per the metrics stream alone. */
|
|
45
|
+
readonly estimatedActive: number;
|
|
46
|
+
/** Estimated leaked = active - autoRelease-failed. Positive = worktrees
|
|
47
|
+
* the user / CLI will need to gc manually. */
|
|
48
|
+
readonly estimatedLeaked: number;
|
|
49
|
+
readonly completedLifetimes: number;
|
|
50
|
+
readonly avgLifetimeMs: number | null;
|
|
51
|
+
readonly p99LifetimeMs: number | null;
|
|
52
|
+
};
|
|
53
|
+
export declare function recomputeRate(leaseEvents: ReadonlyArray<ObservabilityEvent>): RateStats;
|
|
54
|
+
/**
|
|
55
|
+
* Part 5: enumerate every session under `.peaks/_runtime/` for a
|
|
56
|
+
* project root and aggregate their lease events. Sessions without
|
|
57
|
+
* a `metrics/slices.jsonl` are skipped silently (a clean project
|
|
58
|
+
* has no lease events to report; that's not an error).
|
|
59
|
+
*/
|
|
60
|
+
export declare function readAllSessionLeaseEvents(projectRoot: string): {
|
|
61
|
+
sessions: ReadonlyArray<{
|
|
62
|
+
sessionId: string;
|
|
63
|
+
events: ReadonlyArray<ObservabilityEvent>;
|
|
64
|
+
}>;
|
|
65
|
+
missingSessions: number;
|
|
66
|
+
};
|
|
67
|
+
export declare function registerLeaseMetricsCommand(parent: Command, io: ProgramIO): void;
|