peaks-loop 4.1.1 → 4.1.2
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 +50 -0
- package/README-en.md +4 -4
- package/README.md +25 -4
- package/bin/node-floor.mjs +59 -0
- package/bin/peaks.js +13 -0
- package/config/eslint/tsconfig.lint.json +2 -1
- package/dist/cli/cli-helpers.d.ts +0 -1
- package/dist/cli/cli-helpers.js +0 -1
- package/dist/cli/commands/_cli-error-envelope.js +0 -3
- package/dist/cli/commands/adapter-commands-s2a.d.ts +0 -1
- package/dist/cli/commands/adapter-commands.d.ts +0 -1
- package/dist/cli/commands/api-diff-commands.d.ts +0 -1
- package/dist/cli/commands/api-diff-commands.js +0 -1
- package/dist/cli/commands/audit-commands.js +21 -24
- package/dist/cli/commands/autonomous-swarm-commands.js +0 -1
- package/dist/cli/commands/bee-commands.d.ts +0 -2
- package/dist/cli/commands/bee-commands.js +0 -2
- package/dist/cli/commands/best-practice-scan-command.d.ts +0 -1
- package/dist/cli/commands/best-practice-scan-helpers.js +0 -1
- package/dist/cli/commands/changeset-commands.d.ts +0 -2
- package/dist/cli/commands/changeset-commands.js +0 -2
- package/dist/cli/commands/code-commands.d.ts +0 -3
- package/dist/cli/commands/code-commands.js +0 -3
- package/dist/cli/commands/code-gate-command.d.ts +0 -1
- package/dist/cli/commands/code-gate-command.js +0 -1
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +0 -1
- package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +0 -1
- package/dist/cli/commands/code-job-shape-commands.d.ts +0 -2
- package/dist/cli/commands/code-job-shape-commands.js +0 -3
- package/dist/cli/commands/code-mode-gate-commands.d.ts +0 -2
- package/dist/cli/commands/code-mode-gate-commands.js +0 -3
- package/dist/cli/commands/code-mode-gate-should-pause-command.js +0 -4
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +0 -1
- package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +0 -2
- package/dist/cli/commands/code-mode-status-command.d.ts +0 -1
- package/dist/cli/commands/code-mode-status-command.js +0 -1
- package/dist/cli/commands/code-orchestrator-can-do.d.ts +0 -1
- package/dist/cli/commands/code-orchestrator-can-do.js +0 -1
- package/dist/cli/commands/code-run-command.js +0 -1
- package/dist/cli/commands/code-runtime-commands.d.ts +0 -3
- package/dist/cli/commands/code-runtime-commands.js +0 -15
- package/dist/cli/commands/codegraph-command-runtime.d.ts +6 -0
- package/dist/cli/commands/codegraph-command-runtime.js +19 -7
- package/dist/cli/commands/codegraph-commands.js +20 -193
- package/dist/cli/commands/codegraph-init-command.d.ts +8 -0
- package/dist/cli/commands/codegraph-init-command.js +162 -0
- package/dist/cli/commands/codegraph-status-command.js +5 -6
- package/dist/cli/commands/compact-command.d.ts +0 -1
- package/dist/cli/commands/compact-command.js +0 -4
- package/dist/cli/commands/container-commands.d.ts +0 -1
- package/dist/cli/commands/container-commands.js +0 -1
- package/dist/cli/commands/context-commands.d.ts +0 -1
- package/dist/cli/commands/context-commands.js +0 -1
- package/dist/cli/commands/core/doctor-command.d.ts +0 -1
- package/dist/cli/commands/core/doctor-command.js +0 -9
- package/dist/cli/commands/core/memory-command.js +0 -1
- package/dist/cli/commands/core/session-command.js +0 -14
- package/dist/cli/commands/core/skill-command.js +0 -9
- package/dist/cli/commands/core-artifact-commands.d.ts +0 -1
- package/dist/cli/commands/core-artifact-commands.js +0 -1
- package/dist/cli/commands/cron-commands-actions.d.ts +0 -1
- package/dist/cli/commands/cron-commands-actions.js +0 -2
- package/dist/cli/commands/cron-commands-schedule.d.ts +0 -3
- package/dist/cli/commands/cron-commands-schedule.js +0 -1
- package/dist/cli/commands/cron-commands.d.ts +0 -1
- package/dist/cli/commands/cron-commands.js +0 -2
- package/dist/cli/commands/cron-scheduler-commands.d.ts +0 -1
- package/dist/cli/commands/cron-scheduler-commands.js +0 -1
- package/dist/cli/commands/cron-scheduler-persist.d.ts +0 -5
- package/dist/cli/commands/cron-scheduler-persist.js +0 -5
- package/dist/cli/commands/dashboard-summary.d.ts +0 -1
- package/dist/cli/commands/dispatch-commands.d.ts +0 -1
- package/dist/cli/commands/dispatch-commands.js +10 -37
- package/dist/cli/commands/dispatch-from-dag.js +0 -4
- package/dist/cli/commands/doctor/invoke-from-code.js +0 -1
- package/dist/cli/commands/e2e-verify.d.ts +0 -1
- package/dist/cli/commands/ecc-commands.d.ts +0 -1
- package/dist/cli/commands/evolution-commands.d.ts +0 -1
- package/dist/cli/commands/evolution-commands.js +0 -1
- package/dist/cli/commands/feedback-commands.d.ts +0 -1
- package/dist/cli/commands/feedback-commands.js +0 -2
- package/dist/cli/commands/fixture-commands.d.ts +0 -2
- package/dist/cli/commands/fresh-context-commands.d.ts +0 -1
- package/dist/cli/commands/gate-commands-enforce.d.ts +0 -3
- package/dist/cli/commands/gate-commands-enforce.js +0 -4
- package/dist/cli/commands/gate-commands.js +0 -2
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +0 -3
- package/dist/cli/commands/governance-classify-contract-commands.js +0 -4
- package/dist/cli/commands/heartbeat-commands-action.js +0 -6
- package/dist/cli/commands/heartbeat-commands-validation.d.ts +0 -2
- package/dist/cli/commands/heartbeat-commands-validation.js +0 -2
- package/dist/cli/commands/heartbeat-commands.d.ts +0 -1
- package/dist/cli/commands/heartbeat-commands.js +0 -1
- package/dist/cli/commands/hooks-commands.js +0 -11
- package/dist/cli/commands/ide-commands.d.ts +0 -1
- package/dist/cli/commands/job-add-slice-command.d.ts +0 -2
- package/dist/cli/commands/job-add-slice-command.js +0 -2
- package/dist/cli/commands/job-commands.js +0 -4
- package/dist/cli/commands/lease-metrics-commands.d.ts +0 -1
- package/dist/cli/commands/lease-metrics-commands.js +0 -1
- package/dist/cli/commands/lease-stats-commands.d.ts +0 -1
- package/dist/cli/commands/lease-stats-commands.js +0 -1
- package/dist/cli/commands/log-commands.d.ts +0 -2
- package/dist/cli/commands/log-commands.js +0 -3
- package/dist/cli/commands/loop-eval-commands.js +0 -3
- package/dist/cli/commands/memory-commands.d.ts +0 -1
- package/dist/cli/commands/memory-commands.js +0 -1
- package/dist/cli/commands/observability-commands.d.ts +0 -6
- package/dist/cli/commands/observability-commands.js +0 -6
- package/dist/cli/commands/outer-cache-commands.js +0 -2
- package/dist/cli/commands/playwright-commands.d.ts +0 -1
- package/dist/cli/commands/playwright-commands.js +0 -1
- package/dist/cli/commands/polyrepo-commands.d.ts +0 -1
- package/dist/cli/commands/prd-commands.d.ts +0 -1
- package/dist/cli/commands/prd-commands.js +0 -2
- package/dist/cli/commands/preferences-commands.js +0 -2
- package/dist/cli/commands/primer-command.d.ts +0 -1
- package/dist/cli/commands/primer-command.js +0 -1
- package/dist/cli/commands/project-commands.js +0 -1
- package/dist/cli/commands/qa-commands.d.ts +0 -1
- package/dist/cli/commands/qa-commands.js +0 -2
- package/dist/cli/commands/release-commands.js +0 -9
- package/dist/cli/commands/request-commands.d.ts +0 -1
- package/dist/cli/commands/request-commands.js +0 -10
- package/dist/cli/commands/request-format-helpers.d.ts +0 -1
- package/dist/cli/commands/request-format-helpers.js +0 -2
- package/dist/cli/commands/runtime-commands.d.ts +0 -1
- package/dist/cli/commands/sc-commands.js +0 -1
- package/dist/cli/commands/session-24h-mode.d.ts +0 -1
- package/dist/cli/commands/session-24h-mode.js +0 -2
- package/dist/cli/commands/session-checkpoint-command.d.ts +0 -1
- package/dist/cli/commands/session-checkpoint-command.js +0 -1
- package/dist/cli/commands/session-resume-command.d.ts +0 -1
- package/dist/cli/commands/session-resume-command.js +0 -1
- package/dist/cli/commands/shadcn-commands.js +0 -2
- package/dist/cli/commands/share-commands.d.ts +0 -3
- package/dist/cli/commands/share-commands.js +0 -13
- package/dist/cli/commands/skill-search-commands.d.ts +0 -2
- package/dist/cli/commands/slice-commands.js +0 -2
- package/dist/cli/commands/slice-integrate-commands.js +0 -1
- package/dist/cli/commands/spill-demo-command.d.ts +0 -1
- package/dist/cli/commands/statusline-commands.js +0 -4
- package/dist/cli/commands/sub-agent/detached.js +0 -2
- package/dist/cli/commands/sub-agent-commands.d.ts +0 -3
- package/dist/cli/commands/sub-agent-shared.d.ts +0 -8
- package/dist/cli/commands/sub-agent-shared.js +0 -5
- package/dist/cli/commands/sub-agent-shutdown-commands.d.ts +0 -1
- package/dist/cli/commands/tech-commands.d.ts +0 -4
- package/dist/cli/commands/tech-commands.js +0 -4
- package/dist/cli/commands/vendor-detect.d.ts +0 -3
- package/dist/cli/commands/vendor-detect.js +0 -2
- package/dist/cli/commands/verdict-aggregate-command.d.ts +0 -1
- package/dist/cli/commands/verdict-aggregate-command.js +0 -7
- package/dist/cli/commands/vm-commands.d.ts +0 -1
- package/dist/cli/commands/vm-commands.js +5 -29
- package/dist/cli/commands/vm-hypervisor-probe.d.ts +27 -0
- package/dist/cli/commands/vm-hypervisor-probe.js +78 -0
- package/dist/cli/commands/vm-status-command.d.ts +3 -0
- package/dist/cli/commands/vm-status-command.js +50 -0
- package/dist/cli/commands/wave-plan-commands.d.ts +0 -1
- package/dist/cli/commands/web-lifecycle-commands.d.ts +0 -1
- package/dist/cli/commands/workflow-commands.js +0 -14
- package/dist/cli/commands/workflow-plan-commands-actions.js +0 -2
- package/dist/cli/commands/workflow-plan-commands-session.js +0 -2
- package/dist/cli/commands/workflow-plan-commands.d.ts +0 -1
- package/dist/cli/commands/workspace/clean-command.d.ts +0 -1
- package/dist/cli/commands/workspace/clean-command.js +0 -1
- package/dist/cli/commands/workspace/helpers.d.ts +0 -1
- package/dist/cli/commands/workspace/helpers.js +0 -1
- package/dist/cli/commands/workspace/init-command.d.ts +0 -6
- package/dist/cli/commands/workspace/init-command.js +0 -17
- package/dist/cli/commands/workspace/migrate-command.d.ts +0 -2
- package/dist/cli/commands/workspace/migrate-command.js +0 -2
- package/dist/cli/commands/workspace/reconcile-command.d.ts +0 -2
- package/dist/cli/commands/workspace/reconcile-command.js +0 -3
- package/dist/cli/commands/workspace-commands.d.ts +0 -2
- package/dist/cli/commands/workspace-commands.js +0 -4
- package/dist/cli/commands/worktree-auth-commands.d.ts +0 -1
- package/dist/cli/commands/worktree-auth-commands.js +0 -1
- package/dist/cli/commands/worktree-auth-grant-command.d.ts +0 -1
- package/dist/cli/commands/worktree-auth-grant-command.js +0 -1
- package/dist/cli/commands/worktree-auth-manage-commands.d.ts +0 -1
- package/dist/cli/commands/worktree-auth-manage-commands.js +0 -1
- package/dist/cli/commands/worktree-lease-commands.js +0 -1
- package/dist/cli/program.js +0 -7
- package/dist/reporters/bdd-reporter.js +0 -1
- package/dist/services/24h-mode/auto-engage.d.ts +0 -1
- package/dist/services/24h-mode/auto-engage.js +0 -1
- package/dist/services/24h-mode/decider.d.ts +0 -3
- package/dist/services/24h-mode/decider.js +0 -3
- package/dist/services/24h-mode/index.d.ts +0 -2
- package/dist/services/24h-mode/index.js +0 -2
- package/dist/services/24h-mode/state.d.ts +0 -1
- package/dist/services/24h-mode/state.js +0 -1
- package/dist/services/24h-mode/store.d.ts +0 -1
- package/dist/services/24h-mode/store.js +0 -1
- package/dist/services/adapter/adapter-registry.js +0 -1
- package/dist/services/artifacts/artifact-prerequisites.d.ts +0 -5
- package/dist/services/artifacts/artifact-prerequisites.js +0 -19
- package/dist/services/artifacts/artifact-templates.d.ts +0 -1
- package/dist/services/artifacts/artifact-templates.js +0 -1
- package/dist/services/artifacts/request-artifact-service.d.ts +0 -5
- package/dist/services/artifacts/request-artifact-service.js +0 -12
- package/dist/services/artifacts/request-artifact-state-helpers.d.ts +0 -1
- package/dist/services/artifacts/request-artifact-state-helpers.js +0 -1
- package/dist/services/audit/artifact-writer.d.ts +0 -1
- package/dist/services/audit/artifact-writer.js +0 -1
- package/dist/services/audit/decision-writer.js +3 -1
- package/dist/services/audit/enforcer-liveness.js +0 -1
- package/dist/services/audit/enforcers/active-skill-resolver.d.ts +0 -2
- package/dist/services/audit/enforcers/active-skill-resolver.js +0 -2
- package/dist/services/audit/red-line-audit-input.d.ts +11 -0
- package/dist/services/audit/red-line-audit-input.js +103 -0
- package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +0 -1
- package/dist/services/audit/red-line-catalog-p2-a.js +0 -9
- package/dist/services/audit/types.d.ts +0 -2
- package/dist/services/audit/types.js +0 -2
- package/dist/services/audit-independent/perf-audit-service.d.ts +0 -2
- package/dist/services/audit-independent/security-audit-service.d.ts +0 -5
- package/dist/services/audit-independent/security-audit-service.js +0 -2
- package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +0 -5
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +0 -5
- package/dist/services/best-practice/language-detector.js +0 -1
- package/dist/services/best-practice/output-formatter.d.ts +0 -1
- package/dist/services/best-practice/scan-orchestrator.d.ts +0 -1
- package/dist/services/capability-audit-service/types.d.ts +1 -3
- package/dist/services/capability-guard-runner/contracts/J08.js +2 -2
- package/dist/services/changeset/changeset-check-service.d.ts +0 -3
- package/dist/services/changeset/changeset-check-service.js +0 -3
- package/dist/services/classify/classify-service.d.ts +0 -1
- package/dist/services/classify/classify-service.js +0 -1
- package/dist/services/classify/classify-types.d.ts +0 -1
- package/dist/services/classify/classify-types.js +0 -1
- package/dist/services/code/auto-compact-lifecycle.d.ts +0 -11
- package/dist/services/code/auto-compact-lifecycle.js +0 -10
- package/dist/services/code/auto-compact-modes.d.ts +0 -3
- package/dist/services/code/auto-compact-modes.js +0 -3
- package/dist/services/code/auto-compact-orchestrator.d.ts +0 -9
- package/dist/services/code/auto-compact-orchestrator.js +0 -29
- package/dist/services/code/batch-heartbeat-poller.js +0 -1
- package/dist/services/code/compact-event-settle.js +0 -1
- package/dist/services/code/dag-orchestrator.d.ts +0 -1
- package/dist/services/code/dag-orchestrator.js +0 -1
- package/dist/services/code/mode-gate-types.d.ts +0 -2
- package/dist/services/code/mode-gate-types.js +0 -1
- package/dist/services/code/mode-gate.d.ts +0 -5
- package/dist/services/code/mode-gate.js +0 -5
- package/dist/services/code/orchestrator-can-do-advisories.d.ts +0 -2
- package/dist/services/code/orchestrator-can-do-advisories.js +0 -5
- package/dist/services/code/orchestrator-can-do.d.ts +0 -4
- package/dist/services/code/orchestrator-can-do.js +0 -3
- package/dist/services/code/status-line-renderer.js +0 -1
- package/dist/services/code-review/ecc-bridge.d.ts +0 -1
- package/dist/services/codegraph/codegraph-autorefresh.js +6 -4
- package/dist/services/codegraph/codegraph-backend-advice.d.ts +26 -0
- package/dist/services/codegraph/codegraph-backend-advice.js +166 -0
- package/dist/services/codegraph/codegraph-config-repair-writer.d.ts +0 -24
- package/dist/services/codegraph/codegraph-config-repair-writer.js +32 -73
- package/dist/services/codegraph/codegraph-exclude-integrity.d.ts +14 -6
- package/dist/services/codegraph/codegraph-exclude-integrity.js +24 -14
- package/dist/services/codegraph/codegraph-exclude-reconciler.d.ts +9 -2
- package/dist/services/codegraph/codegraph-exclude-reconciler.js +87 -18
- package/dist/services/codegraph/codegraph-exclude-repair.d.ts +9 -61
- package/dist/services/codegraph/codegraph-exclude-repair.js +67 -139
- package/dist/services/codegraph/codegraph-foreign-removal.d.ts +21 -0
- package/dist/services/codegraph/codegraph-foreign-removal.js +77 -0
- package/dist/services/codegraph/codegraph-index-integrity.d.ts +12 -25
- package/dist/services/codegraph/codegraph-index-integrity.js +84 -23
- package/dist/services/codegraph/codegraph-preflight-service.js +15 -6
- package/dist/services/codegraph/codegraph-project-config.d.ts +35 -0
- package/dist/services/codegraph/codegraph-project-config.js +90 -0
- package/dist/services/codegraph/codegraph-service.d.ts +1 -2
- package/dist/services/codegraph/codegraph-service.js +11 -11
- package/dist/services/codegraph/codegraph-upstream-layout.d.ts +24 -0
- package/dist/services/codegraph/codegraph-upstream-layout.js +85 -0
- package/dist/services/comments/comment-audit.d.ts +15 -4
- package/dist/services/comments/comment-audit.js +25 -4
- package/dist/services/comments/comment-citations.d.ts +8 -2
- package/dist/services/comments/comment-citations.js +31 -33
- package/dist/services/comments/comment-hygiene.d.ts +29 -3
- package/dist/services/comments/comment-hygiene.js +40 -3
- package/dist/services/comments/comment-prune.js +52 -4
- package/dist/services/comments/comment-spans.d.ts +30 -0
- package/dist/services/comments/comment-spans.js +266 -0
- package/dist/services/comments/prune-apply.d.ts +22 -0
- package/dist/services/comments/prune-apply.js +69 -2
- package/dist/services/compact/decision-tables.d.ts +0 -2
- package/dist/services/compact/decision-tables.js +0 -2
- package/dist/services/compact/request-transition-hook.js +0 -2
- package/dist/services/compact-history/compact-history-service.d.ts +0 -2
- package/dist/services/compact-history/compact-history-service.js +0 -1
- package/dist/services/compact-statusline/compact-lifecycle-store.js +0 -2
- package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +0 -1
- package/dist/services/compact-statusline/compact-statusline-service.js +0 -4
- package/dist/services/config/config-rollback.js +0 -1
- package/dist/services/config/config-safety.d.ts +0 -1
- package/dist/services/config/config-safety.js +0 -1
- package/dist/services/config/config-service.d.ts +0 -1
- package/dist/services/config/config-service.js +0 -1
- package/dist/services/config/model-routing.d.ts +0 -3
- package/dist/services/config/model-routing.js +0 -5
- package/dist/services/container/container-lease.d.ts +0 -1
- package/dist/services/container/container-lease.js +0 -1
- package/dist/services/context/artifact-meta.js +0 -1
- package/dist/services/context/auto-compact-dispatcher-input.d.ts +0 -3
- package/dist/services/context/auto-compact-dispatcher.js +0 -14
- package/dist/services/context/auto-compact-reader-input.d.ts +0 -1
- package/dist/services/context/auto-compact-reader.d.ts +0 -2
- package/dist/services/context/auto-compact-reader.js +0 -7
- package/dist/services/context/auto-compact-types.d.ts +0 -11
- package/dist/services/context/auto-compact-types.js +0 -1
- package/dist/services/context/build-dispatch-system-prompt.d.ts +11 -29
- package/dist/services/context/build-dispatch-system-prompt.js +8 -27
- package/dist/services/context/codegraph-unavailable-block.d.ts +38 -0
- package/dist/services/context/codegraph-unavailable-block.js +77 -0
- package/dist/services/context/context-audit-hint.d.ts +0 -1
- package/dist/services/context/context-audit-hint.js +0 -1
- package/dist/services/context/context-audit.d.ts +0 -1
- package/dist/services/context/context-audit.js +0 -1
- package/dist/services/context/harness-window-config.d.ts +0 -4
- package/dist/services/context/harness-window-config.js +0 -4
- package/dist/services/context/main-session-monitor.d.ts +0 -2
- package/dist/services/context/main-session-monitor.js +0 -2
- package/dist/services/context/memory-index-reader.d.ts +0 -2
- package/dist/services/context/memory-index-reader.js +0 -1
- package/dist/services/context/memory-preflight-config.d.ts +0 -1
- package/dist/services/context/memory-preflight-service.d.ts +0 -1
- package/dist/services/context/memory-preflight-service.js +0 -3
- package/dist/services/context/memory-preflight-support.d.ts +0 -5
- package/dist/services/context/post-compact-reinjection.d.ts +0 -1
- package/dist/services/context/post-compact-reinjection.js +0 -1
- package/dist/services/context/summary-view.d.ts +0 -1
- package/dist/services/context/summary-view.js +0 -1
- package/dist/services/crystallization/crystallization-service.d.ts +5 -11
- package/dist/services/crystallization/crystallization-service.js +3 -11
- package/dist/services/crystallization/crystallization-store.d.ts +6 -6
- package/dist/services/dispatch/await-batch-helpers.js +0 -3
- package/dist/services/dispatch/await-batch.d.ts +0 -1
- package/dist/services/dispatch/await-batch.js +0 -4
- package/dist/services/dispatch/batch-counter.js +0 -1
- package/dist/services/dispatch/conflict-replay.d.ts +0 -1
- package/dist/services/dispatch/conflict-replay.js +0 -1
- package/dist/services/dispatch/contract-store.d.ts +0 -2
- package/dist/services/dispatch/contract-store.js +0 -2
- package/dist/services/dispatch/dispatch-record-input-types.d.ts +0 -2
- package/dist/services/dispatch/dispatch-record-types.d.ts +0 -10
- package/dist/services/dispatch/dispatch-record-upgrade-fields.js +0 -7
- package/dist/services/dispatch/dispatch-record-upgrade-guards.js +0 -2
- package/dist/services/dispatch/dispatch-record-writer.d.ts +0 -5
- package/dist/services/dispatch/dispatch-record-writer.js +0 -21
- package/dist/services/dispatch/dispatch-sub-agent.d.ts +0 -1
- package/dist/services/dispatch/dispatch-sub-agent.js +0 -1
- package/dist/services/dispatch/e2e-fixtures.js +0 -1
- package/dist/services/dispatch/file-overlap-wave-planner.d.ts +0 -1
- package/dist/services/dispatch/file-overlap-wave-planner.js +0 -1
- package/dist/services/dispatch/isolation-lease.d.ts +0 -2
- package/dist/services/dispatch/isolation-lease.js +0 -2
- package/dist/services/dispatch/service-shutdown.js +0 -1
- package/dist/services/dispatch/session-capsule.js +0 -1
- package/dist/services/dispatch/slice-dag-types.d.ts +0 -1
- package/dist/services/dispatch/slice-dag.js +0 -2
- package/dist/services/dispatch/stage-enum.d.ts +0 -1
- package/dist/services/dispatch/stage-enum.js +0 -1
- package/dist/services/dispatch/startup-timeout.d.ts +0 -1
- package/dist/services/dispatch/sub-agent-batch-await.js +0 -3
- package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +0 -1
- package/dist/services/dispatch/sub-agent-dispatcher.js +0 -2
- package/dist/services/dispatch/test-tool-detection.d.ts +0 -3
- package/dist/services/dispatch/test-tool-detection.js +0 -2
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +19 -12
- package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +1 -2
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +0 -2
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +0 -2
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +0 -1
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +0 -1
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +0 -1
- package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +0 -3
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +0 -2
- package/dist/services/doctor/doctor-service/index.d.ts +0 -1
- package/dist/services/doctor/doctor-service/index.js +0 -1
- package/dist/services/doctor/doctor-service/plugin-registry.d.ts +0 -2
- package/dist/services/doctor/doctor-service/plugin-registry.js +0 -2
- package/dist/services/doctor/doctor-service/probe-types.d.ts +0 -4
- package/dist/services/doctor/doctor-service/report/final-summary.d.ts +0 -1
- package/dist/services/doctor/doctor-service/report/final-summary.js +0 -1
- package/dist/services/doctor/doctor-service/types.d.ts +0 -5
- package/dist/services/doctor/doctor-service/types.js +0 -1
- package/dist/services/doctor/doctor-service.d.ts +0 -1
- package/dist/services/doctor/doctor-service.js +0 -2
- package/dist/services/env/shell-probe.js +0 -1
- package/dist/services/evidence/evidence-generator.js +0 -8
- package/dist/services/evolution/evolution-constraints.d.ts +0 -2
- package/dist/services/evolution/evolution-constraints.js +0 -2
- package/dist/services/evolution/evolution-service.d.ts +2 -12
- package/dist/services/evolution/evolution-service.js +0 -9
- package/dist/services/evolution/evolution-store.d.ts +6 -8
- package/dist/services/evolution/evolution-store.js +1 -3
- package/dist/services/evolution/evolution-types.d.ts +0 -2
- package/dist/services/evolution/evolution-types.js +0 -6
- package/dist/services/evolution/independent-evaluator-runner.d.ts +0 -3
- package/dist/services/evolution/independent-evaluator-runner.js +0 -1
- package/dist/services/evolution/regression-skeptic-runner.d.ts +0 -1
- package/dist/services/feedback/feedback-promotion-service.d.ts +0 -8
- package/dist/services/feedback/feedback-promotion-service.js +0 -10
- package/dist/services/feedback/promotion-artifact-evidence.d.ts +0 -1
- package/dist/services/feedback/promotion-artifact-evidence.js +0 -1
- package/dist/services/final-review/final-review-evidence-budget.d.ts +0 -3
- package/dist/services/final-review/final-review-evidence-budget.js +0 -5
- package/dist/services/final-review/final-review-evidence-sources.d.ts +0 -1
- package/dist/services/final-review/final-review-evidence-sources.js +0 -1
- package/dist/services/final-review/final-review-output-budget.d.ts +0 -1
- package/dist/services/final-review/final-review-output-budget.js +0 -3
- package/dist/services/final-review/final-review-service.d.ts +0 -1
- package/dist/services/final-review/final-review-service.js +0 -1
- package/dist/services/fixture/fixture-capture-service.js +0 -1
- package/dist/services/fixture/fixture-sanitize-service.d.ts +0 -3
- package/dist/services/fixture/fixture-sanitize-service.js +0 -3
- package/dist/services/fresh-context/config.js +0 -1
- package/dist/services/fresh-context/fresh-context-block.js +0 -1
- package/dist/services/fresh-context/trigger-scan.d.ts +0 -1
- package/dist/services/fresh-context/trigger-scan.js +0 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.d.ts +0 -1
- package/dist/services/fuzzy-matching/fzf-pick-service.js +0 -1
- package/dist/services/handoff/handoff-parser.d.ts +0 -1
- package/dist/services/handoff/handoff-parser.js +0 -1
- package/dist/services/handoff/handoff-types.d.ts +0 -1
- package/dist/services/handoff/handoff-types.js +0 -1
- package/dist/services/handoff/handoff-writer.d.ts +0 -1
- package/dist/services/handoff/handoff-writer.js +0 -1
- package/dist/services/hooks/auto-compact-hook-install.d.ts +0 -1
- package/dist/services/hooks/auto-compact-hook-install.js +0 -1
- package/dist/services/hooks/output.d.ts +0 -1
- package/dist/services/hooks/output.js +0 -1
- package/dist/services/hooks/pre-tool-code-gate.d.ts +0 -1
- package/dist/services/hooks/pre-tool-code-gate.js +0 -1
- package/dist/services/hooks/presence-marker-detector.js +0 -1
- package/dist/services/hooks/worktree-authorization-gate.d.ts +0 -3
- package/dist/services/hooks/worktree-authorization-gate.js +0 -1
- package/dist/services/ide/adapters/claude-code-adapter.d.ts +0 -5
- package/dist/services/ide/adapters/claude-code-adapter.js +0 -11
- package/dist/services/ide/adapters/qoder-adapter.d.ts +0 -3
- package/dist/services/ide/adapters/qoder-adapter.js +0 -5
- package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +0 -2
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +0 -2
- package/dist/services/ide/adapters/trae-adapter.d.ts +0 -3
- package/dist/services/ide/adapters/trae-adapter.js +3 -6
- package/dist/services/ide/adapters/zcode-adapter.js +0 -2
- package/dist/services/ide/current-model-detector.js +0 -1
- package/dist/services/ide/hook-protocol.d.ts +0 -2
- package/dist/services/ide/hook-protocol.js +0 -2
- package/dist/services/ide/ide-compact-types.d.ts +0 -7
- package/dist/services/ide/ide-types.d.ts +0 -12
- package/dist/services/ide/resource-profile.d.ts +0 -1
- package/dist/services/job/job-commit-verification.d.ts +0 -2
- package/dist/services/job/job-commit-verification.js +0 -2
- package/dist/services/job/job-orchestrator.d.ts +0 -1
- package/dist/services/job/job-orchestrator.js +0 -1
- package/dist/services/job/job-progress-store.d.ts +0 -2
- package/dist/services/job/job-progress-store.js +0 -3
- package/dist/services/job/job-types.js +0 -1
- package/dist/services/job-snapshot/snapshot.js +0 -1
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +0 -1
- package/dist/services/legacy/legacy-detector.js +0 -1
- package/dist/services/log/log-commands-service.d.ts +0 -2
- package/dist/services/log/log-commands-service.js +0 -2
- package/dist/services/log/logger.d.ts +0 -1
- package/dist/services/log/logger.js +0 -1
- package/dist/services/log/redact.d.ts +0 -1
- package/dist/services/log/redact.js +0 -1
- package/dist/services/log/retention.d.ts +0 -1
- package/dist/services/log/retention.js +0 -1
- package/dist/services/loop/loop-bee-relation-service.d.ts +3 -3
- package/dist/services/loop/loop-bee-relation-service.js +14 -13
- package/dist/services/loop/loop-bee-relation-store.d.ts +9 -10
- package/dist/services/loop/loop-bee-relation-store.js +1 -2
- package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
- package/dist/services/loop/loop-bee-relation-types.js +1 -1
- package/dist/services/loop/loop-release-service.d.ts +3 -3
- package/dist/services/loop/loop-release-service.js +1 -1
- package/dist/services/loop/loop-release-store.d.ts +6 -7
- package/dist/services/loop/loop-release-store.js +0 -1
- package/dist/services/loop/monotonic-guard.d.ts +0 -1
- package/dist/services/loop/monotonic-guard.js +0 -1
- package/dist/services/memory/memory-ingest-service.js +0 -1
- package/dist/services/memory/project-context-service.d.ts +0 -1
- package/dist/services/memory/project-context-service.js +0 -1
- package/dist/services/memory/project-memory-service/index/reindex.d.ts +0 -2
- package/dist/services/memory/project-memory-service/index/reindex.js +0 -1
- package/dist/services/memory/project-memory-service/index/search.d.ts +0 -1
- package/dist/services/memory/project-memory-service/index/search.js +0 -1
- package/dist/services/memory/project-memory-service/memory-kinds.d.ts +0 -1
- package/dist/services/memory/project-memory-service/memory-kinds.js +0 -1
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +0 -1
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +0 -1
- package/dist/services/memory/project-memory-service.js +0 -1
- package/dist/services/mode/mode-enforcement.js +0 -1
- package/dist/services/mode/mode-status-service.d.ts +0 -2
- package/dist/services/mode/mode-status-service.js +0 -2
- package/dist/services/observability/aggregation.d.ts +0 -4
- package/dist/services/observability/aggregation.js +0 -6
- package/dist/services/observability/observability-schema.js +0 -1
- package/dist/services/observability/observability-service.d.ts +0 -5
- package/dist/services/observability/observability-service.js +0 -4
- package/dist/services/observability/report-formatter.d.ts +0 -2
- package/dist/services/observability/report-formatter.js +0 -2
- package/dist/services/openspec/artifact-boundary.d.ts +0 -4
- package/dist/services/openspec/artifact-boundary.js +0 -4
- package/dist/services/openspec/coverage-evidence-reader.d.ts +0 -1
- package/dist/services/openspec/coverage-evidence-reader.js +0 -1
- package/dist/services/polyrepo/polyrepo-dispatcher.js +0 -1
- package/dist/services/polyrepo/polyrepo-scanner.js +0 -1
- package/dist/services/polyrepo/polyrepo-service.js +0 -1
- package/dist/services/polyrepo/polyrepo-types.d.ts +0 -1
- package/dist/services/prd/best-practice-auto-trigger.d.ts +0 -2
- package/dist/services/prd/best-practice-auto-trigger.js +0 -2
- package/dist/services/prd/gate-evidence-derivation.d.ts +0 -4
- package/dist/services/prd/gate-evidence-derivation.js +0 -5
- package/dist/services/prd/handoff-auto-regen.js +0 -5
- package/dist/services/prd/handoff-frontmatter-shape.d.ts +0 -2
- package/dist/services/prd/handoff-frontmatter-shape.js +0 -2
- package/dist/services/prd/handoff-frontmatter.d.ts +0 -1
- package/dist/services/prd/handoff-frontmatter.js +0 -2
- package/dist/services/prd/handoff-gate-evidence.d.ts +0 -1
- package/dist/services/prd/handoff-gate-evidence.js +0 -4
- package/dist/services/prd/handoff-path-resolution.d.ts +0 -7
- package/dist/services/prd/handoff-path-resolution.js +0 -10
- package/dist/services/prd/handoff-service.d.ts +0 -2
- package/dist/services/prd/handoff-service.js +0 -2
- package/dist/services/prd/handoff-types.d.ts +0 -2
- package/dist/services/prd/handoff-types.js +0 -1
- package/dist/services/prd/project-scan-bootstrap-service.d.ts +0 -1
- package/dist/services/prd/project-scan-bootstrap-service.js +0 -4
- package/dist/services/prd/project-scan-types.d.ts +0 -1
- package/dist/services/prd/project-scan-types.js +0 -1
- package/dist/services/preferences/preferences-service.d.ts +0 -1
- package/dist/services/preferences/preferences-service.js +0 -5
- package/dist/services/preferences/preferences-types.d.ts +0 -14
- package/dist/services/preferences/preferences-types.js +0 -4
- package/dist/services/progress/progress-service.js +0 -1
- package/dist/services/qa/bdd-test-style-verifier.d.ts +0 -1
- package/dist/services/qa/bdd-test-style-verifier.js +0 -1
- package/dist/services/qa/browser-event-logger.d.ts +0 -1
- package/dist/services/qa/browser-event-logger.js +0 -1
- package/dist/services/qa/browser-restart-detector.d.ts +0 -1
- package/dist/services/qa/browser-restart-detector.js +0 -1
- package/dist/services/qa/browser-reuse-hint.d.ts +0 -1
- package/dist/services/qa/browser-reuse-hint.js +0 -1
- package/dist/services/qa/qa-business-review-state.js +0 -2
- package/dist/services/qa/screenshot-archive-service.d.ts +0 -1
- package/dist/services/qa/screenshot-archive-service.js +0 -1
- package/dist/services/rd/impl.js +0 -1
- package/dist/services/rd/rd-service.d.ts +0 -5
- package/dist/services/rd/rd-service.js +0 -5
- package/dist/services/rd/reviewer-dispatch-policy.d.ts +0 -4
- package/dist/services/rd/reviewer-dispatch-policy.js +0 -4
- package/dist/services/rd/standards-diagnostic.js +0 -1
- package/dist/services/rd/tactical-stage.js +0 -1
- package/dist/services/rd-swarm/rd-swarm-types.d.ts +0 -1
- package/dist/services/rd-swarm/rd-swarm-types.js +0 -1
- package/dist/services/recommendations/installed-capability-detector.d.ts +0 -1
- package/dist/services/recommendations/installed-capability-detector.js +0 -1
- package/dist/services/release/version-precheck-service.d.ts +0 -2
- package/dist/services/release/version-precheck-service.js +0 -3
- package/dist/services/retrospective/retrospective-index.d.ts +0 -1
- package/dist/services/retrospective/retrospective-index.js +0 -1
- package/dist/services/retrospective/retrospective-show.d.ts +0 -1
- package/dist/services/retrospective/retrospective-show.js +0 -1
- package/dist/services/reviewer/model-family.js +0 -1
- package/dist/services/reviewer/reviewer-config.js +0 -1
- package/dist/services/reviewer/reviewer-service.d.ts +0 -1
- package/dist/services/reviewer/reviewer-service.js +0 -3
- package/dist/services/reviewer/selection-strategies.js +0 -1
- package/dist/services/runtime/runtime-detector.js +0 -1
- package/dist/services/runtime/runtime-service.d.ts +0 -2
- package/dist/services/runtime/vendor-adapter.d.ts +0 -7
- package/dist/services/runtime/vendors/claude-code.js +0 -1
- package/dist/services/runtime/vendors/codex.js +0 -1
- package/dist/services/runtime/vendors/copilot.js +0 -1
- package/dist/services/sc/sc-service.js +0 -6
- package/dist/services/scan/acceptance-coverage-service.js +0 -2
- package/dist/services/scan/api-diff-recorded.d.ts +0 -1
- package/dist/services/scan/api-diff-recorded.js +0 -1
- package/dist/services/scan/api-diff-service.d.ts +0 -1
- package/dist/services/scan/api-diff-service.js +0 -1
- package/dist/services/scan/api-diff-types.d.ts +0 -1
- package/dist/services/scan/api-diff-types.js +0 -1
- package/dist/services/scan/archetype-service.js +0 -1
- package/dist/services/scan/file-size-policy.d.ts +0 -1
- package/dist/services/scan/file-size-policy.js +0 -5
- package/dist/services/scan/file-size-scan.d.ts +0 -1
- package/dist/services/security/safe-settings-path.js +0 -1
- package/dist/services/session/binding-store.d.ts +0 -4
- package/dist/services/session/binding-store.js +0 -7
- package/dist/services/session/caller-binding-service.d.ts +0 -6
- package/dist/services/session/caller-binding-service.js +0 -4
- package/dist/services/session/caller-id-types.d.ts +0 -3
- package/dist/services/session/caller-id-types.js +0 -2
- package/dist/services/session/getSessionDir.js +0 -1
- package/dist/services/session/index.js +0 -1
- package/dist/services/session/platform-fallbacks.d.ts +0 -3
- package/dist/services/session/platform-fallbacks.js +0 -3
- package/dist/services/session/resolve-caller-id.d.ts +0 -2
- package/dist/services/session/resolve-caller-id.js +0 -2
- package/dist/services/session/session-binding-bridge.d.ts +0 -2
- package/dist/services/session/session-binding-bridge.js +0 -15
- package/dist/services/session/session-checkpoint-service.d.ts +0 -1
- package/dist/services/session/session-checkpoint-service.js +0 -1
- package/dist/services/session/session-manager.d.ts +0 -8
- package/dist/services/session/session-manager.js +0 -19
- package/dist/services/session/session-resume-service.d.ts +0 -1
- package/dist/services/session/session-resume-service.js +0 -1
- package/dist/services/share/bundle-reader.d.ts +2 -5
- package/dist/services/share/bundle-reader.js +6 -8
- package/dist/services/share/bundle-writer.d.ts +2 -2
- package/dist/services/skill/resume-detector.js +0 -3
- package/dist/services/skill/skill-scheduler.d.ts +0 -1
- package/dist/services/skill/skill-scheduler.js +0 -1
- package/dist/services/skill/skill-search-service.d.ts +0 -2
- package/dist/services/skill/skill-search-service.js +0 -2
- package/dist/services/skillhub/release-diff.d.ts +2 -2
- package/dist/services/skillhub/release-export.d.ts +2 -2
- package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
- package/dist/services/skillhub/release-import.d.ts +2 -2
- package/dist/services/skillhub/release-import.js +2 -1
- package/dist/services/skillhub/release-retain.d.ts +2 -2
- package/dist/services/skillhub/release-retain.js +2 -1
- package/dist/services/skillhub/sqlite-store.d.ts +3 -3
- package/dist/services/skillhub/sqlite-store.js +4 -5
- package/dist/services/skills/hooks-codegate-superpowers.d.ts +0 -3
- package/dist/services/skills/hooks-codegate-superpowers.js +0 -14
- package/dist/services/skills/hooks-settings-service.d.ts +0 -2
- package/dist/services/skills/hooks-settings-service.js +0 -6
- package/dist/services/skills/presence-lease-service.d.ts +0 -1
- package/dist/services/skills/presence-lease-service.js +0 -1
- package/dist/services/skills/session-start-hook-constants.d.ts +0 -4
- package/dist/services/skills/session-start-hook-constants.js +0 -4
- package/dist/services/skills/skill-presence-service.d.ts +0 -8
- package/dist/services/skills/skill-presence-service.js +0 -13
- package/dist/services/skills/skill-statusline-model.d.ts +0 -6
- package/dist/services/skills/skill-statusline-model.js +1 -4
- package/dist/services/skills/skill-statusline-renderer.d.ts +0 -1
- package/dist/services/skills/skill-statusline-renderer.js +0 -12
- package/dist/services/skills/skill-statusline-service.js +0 -6
- package/dist/services/skills/skill-statusline-sid-suffix.d.ts +0 -2
- package/dist/services/skills/skill-statusline-sid-suffix.js +0 -2
- package/dist/services/skills/statusline-palette.d.ts +0 -2
- package/dist/services/skills/statusline-palette.js +0 -3
- package/dist/services/slice/slice-archive-service.js +0 -1
- package/dist/services/slice/slice-benchmark-service.d.ts +0 -1
- package/dist/services/slice/slice-benchmark-service.js +0 -1
- package/dist/services/slice/slice-check-service.js +0 -6
- package/dist/services/slice/slice-check-types.d.ts +0 -1
- package/dist/services/slice/slice-pick-service.d.ts +0 -1
- package/dist/services/slice/slice-pick-service.js +0 -1
- package/dist/services/slice/slice-review-state.js +0 -2
- package/dist/services/sqlite/sqlite-driver.d.ts +118 -0
- package/dist/services/sqlite/sqlite-driver.js +159 -0
- package/dist/services/standards/ide-aware-standards-service.d.ts +0 -2
- package/dist/services/standards/ide-aware-standards-service.js +0 -1
- package/dist/services/standards/loop-engineering-readiness-lint.d.ts +0 -1
- package/dist/services/standards/loop-engineering-readiness-lint.js +0 -1
- package/dist/services/standards/migrate-claude-rules-service.js +0 -3
- package/dist/services/standards/migrate-service.d.ts +0 -1
- package/dist/services/standards/migrate-service.js +0 -1
- package/dist/services/standards/missing-standards-detector.d.ts +0 -2
- package/dist/services/standards/missing-standards-detector.js +0 -3
- package/dist/services/standards/project-standards-service.d.ts +0 -1
- package/dist/services/standards/project-standards-service.js +0 -1
- package/dist/services/standards/standards-render.d.ts +0 -1
- package/dist/services/standards/standards-render.js +0 -1
- package/dist/services/standards/ui-library-dispatch-block.d.ts +0 -1
- package/dist/services/standards/ui-library-dispatch-block.js +0 -1
- package/dist/services/tech/tech-change-id-service.d.ts +0 -7
- package/dist/services/tech/tech-change-id-service.js +0 -7
- package/dist/services/tech/tech-service.js +0 -5
- package/dist/services/verdict/envelope-parsers.d.ts +0 -2
- package/dist/services/verdict/envelope-parsers.js +0 -2
- package/dist/services/verdict/envelopes.d.ts +0 -1
- package/dist/services/vm/vm-lease.js +0 -1
- package/dist/services/web/aria-node.d.ts +0 -1
- package/dist/services/web/bounded-output.d.ts +0 -1
- package/dist/services/web/bounded-output.js +0 -1
- package/dist/services/web/browser-acquire.js +0 -1
- package/dist/services/web/browser-cache-probe.js +0 -1
- package/dist/services/web/browser-session-manager.js +0 -1
- package/dist/services/web/daemon-entry.js +0 -1
- package/dist/services/web/daemon-registry.js +0 -1
- package/dist/services/web/daemon-supervisor.d.ts +4 -3
- package/dist/services/web/daemon-supervisor.js +4 -4
- package/dist/services/web/playwright-loader.js +0 -1
- package/dist/services/web/playwright-types.d.ts +0 -1
- package/dist/services/web/snapshot-pruner.js +0 -1
- package/dist/services/web/untrusted-envelope.d.ts +0 -1
- package/dist/services/web/web-artifact-paths.js +0 -1
- package/dist/services/web/web-client.d.ts +0 -1
- package/dist/services/web/web-daemon-service.js +0 -1
- package/dist/services/web/web-fallback.d.ts +0 -1
- package/dist/services/web/web-fallback.js +0 -1
- package/dist/services/web/web-install-service.js +0 -1
- package/dist/services/web/web-login-profile.js +0 -1
- package/dist/services/web/web-protocol.d.ts +0 -1
- package/dist/services/web/web-protocol.js +0 -1
- package/dist/services/web/web-status-report.js +0 -1
- package/dist/services/workflow/artifact-paths.js +0 -3
- package/dist/services/workflow/autonomous-resume-writer.js +0 -2
- package/dist/services/workflow/pipeline-verify-gate-support.d.ts +0 -5
- package/dist/services/workflow/pipeline-verify-gate-support.js +0 -11
- package/dist/services/workflow/pipeline-verify-service.d.ts +0 -2
- package/dist/services/workflow/pipeline-verify-service.js +0 -15
- package/dist/services/workflow/pipeline-verify-types.d.ts +0 -10
- package/dist/services/workflow/pipeline-verify-types.js +0 -2
- package/dist/services/workflow/plan-reader.d.ts +0 -1
- package/dist/services/workflow/plan-reader.js +0 -5
- package/dist/services/workflow/plan-refresher.js +0 -2
- package/dist/services/workflow/plan-trigger-detector.d.ts +0 -2
- package/dist/services/workflow/plan-trigger-detector.js +0 -3
- package/dist/services/workflow/workflow-autonomous-resume-helpers.js +0 -5
- package/dist/services/workflow/workflow-autonomous-service.js +0 -2
- package/dist/services/workflow/workflow-autonomous-types.d.ts +0 -2
- package/dist/services/workflow/workflow-autonomous-types.js +0 -2
- package/dist/services/workflow/workflow-graph-types.d.ts +0 -1
- package/dist/services/workflow/workflow-graph-types.js +0 -1
- package/dist/services/workflow/workflow-router-service.js +0 -4
- package/dist/services/workflow/workflow-skip-service.d.ts +0 -1
- package/dist/services/workflow/workflow-skip-service.js +0 -1
- package/dist/services/workflow/workflow-spec-lint.d.ts +0 -2
- package/dist/services/workflow/workflow-spec-lint.js +0 -2
- package/dist/services/workflow/workflow-spec-types.d.ts +0 -1
- package/dist/services/workflow/workflow-spec-types.js +0 -1
- package/dist/services/workflow/workflow-spec-yaml.d.ts +0 -2
- package/dist/services/workflow/workflow-spec-yaml.js +0 -2
- package/dist/services/workflow/workflow-spec.js +0 -1
- package/dist/services/workflow/workflow-state-store.js +0 -1
- package/dist/services/workspace/claude-settings-template.d.ts +0 -4
- package/dist/services/workspace/claude-settings-template.js +0 -4
- package/dist/services/workspace/migrate-1-4-1-service.d.ts +0 -1
- package/dist/services/workspace/migrate-1-4-1-service.js +0 -1
- package/dist/services/workspace/migrate-service.js +0 -8
- package/dist/services/workspace/migrate-types.d.ts +0 -4
- package/dist/services/workspace/migrate-types.js +0 -1
- package/dist/services/workspace/reconcile-migrate.d.ts +0 -3
- package/dist/services/workspace/reconcile-migrate.js +0 -5
- package/dist/services/workspace/reconcile-service.d.ts +0 -3
- package/dist/services/workspace/reconcile-service.js +0 -7
- package/dist/services/workspace/reconcile-types.d.ts +0 -5
- package/dist/services/workspace/sid-naming-guard.d.ts +0 -1
- package/dist/services/workspace/sid-naming-guard.js +0 -1
- package/dist/services/workspace/templates/project-scan/index.d.ts +0 -3
- package/dist/services/workspace/templates/project-scan/index.js +0 -3
- package/dist/services/workspace/workspace-claude-settings-materializer.d.ts +0 -1
- package/dist/services/workspace/workspace-claude-settings-materializer.js +0 -4
- package/dist/services/workspace/workspace-service.d.ts +0 -7
- package/dist/services/workspace/workspace-service.js +0 -16
- package/dist/services/worktree/playwright-profile.js +0 -1
- package/dist/services/worktree/worktree-lease-types.d.ts +0 -1
- package/dist/services/worktree/worktree-lease-types.js +0 -1
- package/dist/services/worktree/worktree-lease.d.ts +0 -2
- package/dist/services/worktree/worktree-lease.js +0 -2
- package/dist/shared/format-md-compact.d.ts +0 -2
- package/dist/shared/format-md-compact.js +0 -2
- package/dist/shared/incrementing-number.d.ts +0 -1
- package/dist/shared/incrementing-number.js +0 -1
- package/dist/shared/path-utils.d.ts +0 -1
- package/dist/shared/path-utils.js +0 -1
- package/dist/shared/runtime-root.d.ts +0 -1
- package/dist/shared/runtime-root.js +0 -1
- package/dist/shared/stale-policy.d.ts +0 -1
- package/dist/shared/stale-policy.js +0 -1
- package/package.json +12 -10
- package/scripts/canonical-store-link.mjs +296 -0
- package/scripts/canonical-store-prune.mjs +131 -0
- package/scripts/canonical-store.mjs +298 -0
- package/scripts/install-skills.mjs +175 -383
- package/skills/peaks-audit/SKILL.md +3 -3
- package/dist/services/codegraph/codegraph-include-reconciler.d.ts +0 -10
- package/dist/services/codegraph/codegraph-include-reconciler.js +0 -160
|
@@ -9,19 +9,29 @@ import {
|
|
|
9
9
|
mkdirSync,
|
|
10
10
|
openSync,
|
|
11
11
|
readFileSync,
|
|
12
|
-
readlinkSync,
|
|
13
12
|
realpathSync,
|
|
14
13
|
readdirSync,
|
|
15
14
|
renameSync,
|
|
16
|
-
symlinkSync,
|
|
17
15
|
unlinkSync,
|
|
18
16
|
writeFileSync
|
|
19
17
|
} from 'node:fs';
|
|
20
|
-
import {
|
|
18
|
+
import { randomUUID } from 'node:crypto';
|
|
21
19
|
import { homedir } from 'node:os';
|
|
22
|
-
import {
|
|
20
|
+
import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
23
21
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
24
22
|
|
|
23
|
+
// The canonical store — `~/.peaks/{skills,agents,output-styles}`. Skills are
|
|
24
|
+
// linked to it instead of to `<packageRoot>/skills/<name>`; see the loop in
|
|
25
|
+
// `installBundledSkills` for why the target moved and why repair is now
|
|
26
|
+
// unconditional. `canonical-store-link.mjs` is the same contract for the two
|
|
27
|
+
// families whose entry is a single FILE rather than a tree, and it is where the
|
|
28
|
+
// "the symlink was refused, here is the report" fallback lives. MUST both stay in
|
|
29
|
+
// `package.json#files`: this file IS the npm postinstall, and an unpublished
|
|
30
|
+
// sibling import breaks every user's install.
|
|
31
|
+
import { reconcileCanonicalEntry } from './canonical-store.mjs';
|
|
32
|
+
import { reconcileCanonicalFileEntry } from './canonical-store-link.mjs';
|
|
33
|
+
import { pruneBundledEntries } from './canonical-store-prune.mjs';
|
|
34
|
+
|
|
25
35
|
function getPathStats(path) {
|
|
26
36
|
try {
|
|
27
37
|
return lstatSync(path);
|
|
@@ -30,24 +40,6 @@ function getPathStats(path) {
|
|
|
30
40
|
}
|
|
31
41
|
}
|
|
32
42
|
|
|
33
|
-
function isBrokenSymlink(stats, targetPath) {
|
|
34
|
-
return stats.isSymbolicLink() && !existsSync(targetPath);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function validateManagedMarkerPath(markerPath) {
|
|
38
|
-
const markerStats = getPathStats(markerPath);
|
|
39
|
-
if (!markerStats) return;
|
|
40
|
-
if (markerStats.isSymbolicLink()) {
|
|
41
|
-
throw new Error('Peaks managed marker path must not be a symlink');
|
|
42
|
-
}
|
|
43
|
-
if (!markerStats.isFile()) {
|
|
44
|
-
throw new Error('Peaks managed marker path must be a file');
|
|
45
|
-
}
|
|
46
|
-
if (markerStats.nlink !== 1) {
|
|
47
|
-
throw new Error('Peaks managed marker path must not be hardlinked');
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
43
|
function validateOpenFile(fd, path, errorMessage) {
|
|
52
44
|
const fdStats = fstatSync(fd);
|
|
53
45
|
const pathStats = lstatSync(path);
|
|
@@ -64,26 +56,6 @@ function validateOpenFile(fd, path, errorMessage) {
|
|
|
64
56
|
}
|
|
65
57
|
}
|
|
66
58
|
|
|
67
|
-
function createFileIdentity(path) {
|
|
68
|
-
const stats = lstatSync(path);
|
|
69
|
-
if (!stats.isFile() || stats.isSymbolicLink() || stats.nlink !== 1) {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
return { dev: stats.dev, ino: stats.ino };
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function isSameFileIdentity(path, identity) {
|
|
76
|
-
if (identity === null) return false;
|
|
77
|
-
const stats = getPathStats(path);
|
|
78
|
-
return Boolean(
|
|
79
|
-
stats?.isFile() &&
|
|
80
|
-
!stats.isSymbolicLink() &&
|
|
81
|
-
stats.nlink === 1 &&
|
|
82
|
-
stats.dev === identity.dev &&
|
|
83
|
-
stats.ino === identity.ino
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
59
|
function getSafeReadOpenFlags() {
|
|
88
60
|
return typeof constants.O_NOFOLLOW === 'number'
|
|
89
61
|
? constants.O_RDONLY | constants.O_NOFOLLOW
|
|
@@ -100,94 +72,6 @@ function readFileSafely(path, errorMessage) {
|
|
|
100
72
|
}
|
|
101
73
|
}
|
|
102
74
|
|
|
103
|
-
function getManagedTarget(targetPath) {
|
|
104
|
-
const markerPath = `${targetPath}.peaks-managed`;
|
|
105
|
-
validateManagedMarkerPath(markerPath);
|
|
106
|
-
if (!existsSync(markerPath)) {
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
return readFileSafely(markerPath, 'Peaks managed marker path changed during read').trim();
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function markManagedPeaksLink(targetPath, sourcePath) {
|
|
113
|
-
const markerPath = `${targetPath}.peaks-managed`;
|
|
114
|
-
validateManagedMarkerPath(markerPath);
|
|
115
|
-
writeFileAtomically(
|
|
116
|
-
markerPath,
|
|
117
|
-
`${sourcePath}\n`,
|
|
118
|
-
'Peaks managed marker path changed during write',
|
|
119
|
-
() => validateManagedMarkerPath(markerPath)
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function readPackageSourceFile(path) {
|
|
124
|
-
const stats = lstatSync(path);
|
|
125
|
-
if (!stats.isFile() || stats.isSymbolicLink()) {
|
|
126
|
-
throw new Error('Peaks package source path must be a file');
|
|
127
|
-
}
|
|
128
|
-
return readFileSync(path, 'utf8');
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function hashContent(content) {
|
|
132
|
-
return createHash('sha256').update(content).digest('hex');
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
function hashFileContent(path) {
|
|
136
|
-
return hashContent(readFileSafely(path, 'Peaks managed file path changed during read'));
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function createManagedOutputStyleMarker(sourcePath, outputStyleName) {
|
|
140
|
-
const content = readPackageSourceFile(sourcePath);
|
|
141
|
-
return `${JSON.stringify({ version: 1, kind: 'output-style', outputStyleName, sourcePath, contentSha256: hashContent(content) })}\n`;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function parseManagedOutputStyleMarker(managedTarget) {
|
|
145
|
-
if (managedTarget === null) return null;
|
|
146
|
-
try {
|
|
147
|
-
const marker = JSON.parse(managedTarget);
|
|
148
|
-
if (
|
|
149
|
-
marker?.version !== 1 ||
|
|
150
|
-
marker?.kind !== 'output-style' ||
|
|
151
|
-
typeof marker.outputStyleName !== 'string' ||
|
|
152
|
-
typeof marker.sourcePath !== 'string' ||
|
|
153
|
-
typeof marker.contentSha256 !== 'string'
|
|
154
|
-
) {
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
return marker;
|
|
158
|
-
} catch {
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
function isTrustedOutputStyleSource(marker, sourcePath, outputStyleName) {
|
|
164
|
-
return (
|
|
165
|
-
marker.outputStyleName === outputStyleName &&
|
|
166
|
-
resolve(marker.sourcePath) === resolve(sourcePath) &&
|
|
167
|
-
basename(resolve(marker.sourcePath)) === outputStyleName
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
function getManagedPeaksOutputStyleIdentity(
|
|
172
|
-
managedTarget,
|
|
173
|
-
targetPath,
|
|
174
|
-
sourcePath,
|
|
175
|
-
outputStyleName
|
|
176
|
-
) {
|
|
177
|
-
const marker = parseManagedOutputStyleMarker(managedTarget);
|
|
178
|
-
const sourceHash = hashContent(readPackageSourceFile(sourcePath));
|
|
179
|
-
if (
|
|
180
|
-
marker === null ||
|
|
181
|
-
!isTrustedOutputStyleSource(marker, sourcePath, outputStyleName) ||
|
|
182
|
-
!existsSync(targetPath) ||
|
|
183
|
-
hashFileContent(targetPath) !== sourceHash ||
|
|
184
|
-
marker.contentSha256 !== sourceHash
|
|
185
|
-
) {
|
|
186
|
-
return null;
|
|
187
|
-
}
|
|
188
|
-
return createFileIdentity(targetPath);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
75
|
function validateInstallRoot(targetRoot, label) {
|
|
192
76
|
const rootStats = lstatSync(targetRoot);
|
|
193
77
|
if (rootStats.isSymbolicLink()) {
|
|
@@ -210,7 +94,7 @@ function createInstallRootValidator(targetRoot, label) {
|
|
|
210
94
|
}
|
|
211
95
|
|
|
212
96
|
function createInstallResult() {
|
|
213
|
-
return { installed: [], skipped: [] };
|
|
97
|
+
return { installed: [], skipped: [], pruned: [], fallbacks: [] };
|
|
214
98
|
}
|
|
215
99
|
|
|
216
100
|
function resolvePackageRoot(options = {}) {
|
|
@@ -334,39 +218,6 @@ function getSafeTempOpenFlags() {
|
|
|
334
218
|
return typeof constants.O_NOFOLLOW === 'number' ? baseFlags | constants.O_NOFOLLOW : baseFlags;
|
|
335
219
|
}
|
|
336
220
|
|
|
337
|
-
function writeFileExclusively(path, content, errorMessage, validateBeforeWrite) {
|
|
338
|
-
validateBeforeWrite();
|
|
339
|
-
let fd = openSync(path, getSafeTempOpenFlags(), 0o600);
|
|
340
|
-
let closeError = null;
|
|
341
|
-
let identity = null;
|
|
342
|
-
try {
|
|
343
|
-
validateOpenFile(fd, path, errorMessage);
|
|
344
|
-
validateBeforeWrite();
|
|
345
|
-
validateOpenFile(fd, path, errorMessage);
|
|
346
|
-
identity = createFileIdentity(path);
|
|
347
|
-
if (identity === null) {
|
|
348
|
-
throw new Error(errorMessage);
|
|
349
|
-
}
|
|
350
|
-
fchmodSync(fd, 0o600);
|
|
351
|
-
writeFileSync(fd, content, 'utf8');
|
|
352
|
-
const writeFd = fd;
|
|
353
|
-
fd = null;
|
|
354
|
-
closeSync(writeFd);
|
|
355
|
-
return identity;
|
|
356
|
-
} finally {
|
|
357
|
-
if (fd !== null) {
|
|
358
|
-
try {
|
|
359
|
-
closeSync(fd);
|
|
360
|
-
} catch (error) {
|
|
361
|
-
closeError = error;
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
if (closeError) {
|
|
365
|
-
throw closeError;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
|
|
370
221
|
function writeFileAtomically(configPath, content, errorMessage, validateBeforeWrite) {
|
|
371
222
|
validateBeforeWrite();
|
|
372
223
|
|
|
@@ -784,51 +635,43 @@ export function installBundledSkills(options = {}) {
|
|
|
784
635
|
for (const { skillName, sourcePath } of candidates) {
|
|
785
636
|
const targetPath = join(targetRoot, skillName);
|
|
786
637
|
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
// worktree was removed, Windows keeps the Junction entry but its target
|
|
798
|
-
// no longer resolves. Repair only when reconciliation was explicitly
|
|
799
|
-
// requested; normal postinstall keeps its existing ownership behavior.
|
|
800
|
-
if (
|
|
801
|
-
(current.isSymbolicLink() || isBrokenSymlink(current, targetPath)) &&
|
|
802
|
-
(managedTarget === linkTarget ||
|
|
803
|
-
(options.reconcileJunctions === true && managedTarget !== null && !linkTargetExists))
|
|
804
|
-
) {
|
|
805
|
-
validateSkillsRoot();
|
|
806
|
-
unlinkSync(targetPath);
|
|
807
|
-
validateSkillsRoot();
|
|
808
|
-
unlinkSync(`${targetPath}.peaks-managed`);
|
|
809
|
-
} else {
|
|
810
|
-
skipped.push(skillName);
|
|
811
|
-
continue;
|
|
812
|
-
}
|
|
813
|
-
}
|
|
814
|
-
|
|
638
|
+
// Slice 2 (`agents-canonical-store`) — the entry points at the CANONICAL
|
|
639
|
+
// STORE (`~/.peaks/skills/<name>`), not at `<packageRoot>/skills/<name>`,
|
|
640
|
+
// because `<packageRoot>` changes on every `npm i -g peaks-loop@latest` and
|
|
641
|
+
// the links must bind to a PATH peaks-loop owns, not to a VERSION. Repair is
|
|
642
|
+
// the only behaviour: an entry peaks-loop owns (sidecar matches, or the link
|
|
643
|
+
// dangles) is relinked onto the store; only a real directory the user authored
|
|
644
|
+
// is left alone and reported `skipped`. `options.reconcileJunctions` is
|
|
645
|
+
// therefore READ NOWHERE here — still accepted (`sync-service.ts` forwards it)
|
|
646
|
+
// so passing it changes nothing, and removing it is a CLI-surface change this
|
|
647
|
+
// slice does not own.
|
|
815
648
|
validateSkillsRoot();
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
649
|
+
const reconciled = reconcileCanonicalEntry({
|
|
650
|
+
kind: 'skills',
|
|
651
|
+
name: skillName,
|
|
652
|
+
sourcePath,
|
|
653
|
+
linkPath: targetPath
|
|
654
|
+
});
|
|
655
|
+
validateSkillsRoot();
|
|
656
|
+
|
|
657
|
+
if (reconciled.linkAction === 'skipped') {
|
|
658
|
+
skipped.push(skillName);
|
|
659
|
+
continue;
|
|
827
660
|
}
|
|
828
661
|
installed.push(skillName);
|
|
829
662
|
}
|
|
830
663
|
|
|
831
|
-
|
|
664
|
+
// Slice 3 — PRUNE. The loop above only ever ADDS. A skill removed from the
|
|
665
|
+
// package left its canonical copy, every IDE link and every sidecar on the
|
|
666
|
+
// user's machine forever, because nothing walked the DESTINATIONS. This does,
|
|
667
|
+
// and deletes only what `isManagedEntry` proves is ours.
|
|
668
|
+
const { pruned } = pruneBundledEntries({
|
|
669
|
+
kind: 'skills',
|
|
670
|
+
keepNames: candidates.map((candidate) => candidate.skillName),
|
|
671
|
+
linkDirs: [targetRoot]
|
|
672
|
+
});
|
|
673
|
+
|
|
674
|
+
return { installed, skipped, pruned };
|
|
832
675
|
}
|
|
833
676
|
|
|
834
677
|
/**
|
|
@@ -891,73 +734,55 @@ export function installBundledOutputStyles(options = {}) {
|
|
|
891
734
|
|
|
892
735
|
const installed = [];
|
|
893
736
|
const skipped = [];
|
|
737
|
+
const fallbacks = [];
|
|
894
738
|
mkdirSync(targetRoot, { recursive: true });
|
|
895
739
|
const validateOutputStylesRoot = createInstallRootValidator(targetRoot, 'Peaks output styles');
|
|
896
740
|
|
|
741
|
+
// Slice 4 (`agents-canonical-store`) — same move slice 2 made for skills, with the
|
|
742
|
+
// one difference the brief calls out: a style is a FILE, so the link is a file
|
|
743
|
+
// symlink, which Windows only grants with developer mode or Administrator.
|
|
744
|
+
// `reconcileCanonicalFileEntry` is the whole policy — canonical copy, link, and the
|
|
745
|
+
// reported fallback to a real copy when the host refuses the link. The loop below
|
|
746
|
+
// no longer decides ownership, and that is deliberate: the decision it used to make
|
|
747
|
+
// was `resolve(marker.sourcePath) === resolve(sourcePath)`, a string comparison
|
|
748
|
+
// against a version-scoped package path that went false forever on the first
|
|
749
|
+
// upgrade and silently froze the style.
|
|
750
|
+
const bundledStyleNames = [];
|
|
897
751
|
for (const outputStyleName of readdirSync(outputStylesRoot)) {
|
|
898
752
|
const sourcePath = join(outputStylesRoot, outputStyleName);
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
753
|
+
if (!lstatSync(sourcePath).isFile() || !outputStyleName.endsWith('.md')) continue;
|
|
754
|
+
bundledStyleNames.push(outputStyleName);
|
|
755
|
+
|
|
756
|
+
validateOutputStylesRoot();
|
|
757
|
+
const reconciled = reconcileCanonicalFileEntry({
|
|
758
|
+
kind: 'output-styles',
|
|
759
|
+
name: outputStyleName,
|
|
760
|
+
sourcePath,
|
|
761
|
+
linkPath: join(targetRoot, outputStyleName),
|
|
762
|
+
createFileLink: options.createFileLink
|
|
763
|
+
});
|
|
764
|
+
validateOutputStylesRoot();
|
|
765
|
+
|
|
766
|
+
if (reconciled.linkAction === 'skipped') {
|
|
767
|
+
skipped.push(outputStyleName);
|
|
902
768
|
continue;
|
|
903
769
|
}
|
|
904
|
-
|
|
905
|
-
const current = getPathStats(targetPath);
|
|
906
|
-
if (current) {
|
|
907
|
-
const managedTarget = getManagedTarget(targetPath);
|
|
908
|
-
const managedTargetIdentity = getManagedPeaksOutputStyleIdentity(
|
|
909
|
-
managedTarget,
|
|
910
|
-
targetPath,
|
|
911
|
-
sourcePath,
|
|
912
|
-
outputStyleName
|
|
913
|
-
);
|
|
914
|
-
if (isSameFileIdentity(targetPath, managedTargetIdentity)) {
|
|
915
|
-
validateOutputStylesRoot();
|
|
916
|
-
if (!isSameFileIdentity(targetPath, managedTargetIdentity)) {
|
|
917
|
-
throw new Error('Peaks output style path changed during unlink');
|
|
918
|
-
}
|
|
919
|
-
unlinkSync(targetPath);
|
|
920
|
-
validateOutputStylesRoot();
|
|
921
|
-
unlinkSync(`${targetPath}.peaks-managed`);
|
|
922
|
-
} else {
|
|
923
|
-
skipped.push(outputStyleName);
|
|
924
|
-
continue;
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
|
|
928
|
-
const markerPath = `${targetPath}.peaks-managed`;
|
|
929
|
-
validateManagedMarkerPath(markerPath);
|
|
930
|
-
if (!current && existsSync(markerPath)) {
|
|
931
|
-
validateOutputStylesRoot();
|
|
932
|
-
unlinkSync(markerPath);
|
|
933
|
-
}
|
|
934
|
-
const createdTargetIdentity = writeFileExclusively(
|
|
935
|
-
targetPath,
|
|
936
|
-
readPackageSourceFile(sourcePath),
|
|
937
|
-
'Peaks output style path changed during write',
|
|
938
|
-
validateOutputStylesRoot
|
|
939
|
-
);
|
|
940
|
-
try {
|
|
941
|
-
writeFileExclusively(
|
|
942
|
-
markerPath,
|
|
943
|
-
createManagedOutputStyleMarker(sourcePath, outputStyleName),
|
|
944
|
-
'Peaks managed marker path changed during write',
|
|
945
|
-
() => {
|
|
946
|
-
validateOutputStylesRoot();
|
|
947
|
-
validateManagedMarkerPath(markerPath);
|
|
948
|
-
}
|
|
949
|
-
);
|
|
950
|
-
} catch (error) {
|
|
951
|
-
validateOutputStylesRoot();
|
|
952
|
-
if (isSameFileIdentity(targetPath, createdTargetIdentity)) {
|
|
953
|
-
unlinkSync(targetPath);
|
|
954
|
-
}
|
|
955
|
-
throw error;
|
|
956
|
-
}
|
|
957
770
|
installed.push(outputStyleName);
|
|
771
|
+
if (reconciled.fallback !== null) {
|
|
772
|
+
fallbacks.push({ name: outputStyleName, ...reconciled.fallback });
|
|
773
|
+
}
|
|
958
774
|
}
|
|
959
775
|
|
|
960
|
-
|
|
776
|
+
// The delete half, for the same reason skills have one: the loop above only ever
|
|
777
|
+
// adds. A style removed from the package used to leave its canonical copy, its IDE
|
|
778
|
+
// link and both sidecars behind forever.
|
|
779
|
+
const { pruned } = pruneBundledEntries({
|
|
780
|
+
kind: 'output-styles',
|
|
781
|
+
keepNames: bundledStyleNames,
|
|
782
|
+
linkDirs: [targetRoot]
|
|
783
|
+
});
|
|
784
|
+
|
|
785
|
+
return { installed, skipped, pruned, fallbacks };
|
|
961
786
|
}
|
|
962
787
|
|
|
963
788
|
/**
|
|
@@ -1111,72 +936,26 @@ export function installBundledOutputStyleDefault(options = {}) {
|
|
|
1111
936
|
/**
|
|
1112
937
|
* Slice 7/7 — bundled agents (Claude Code sub-agent prompts).
|
|
1113
938
|
*
|
|
1114
|
-
*
|
|
1115
|
-
*
|
|
1116
|
-
*
|
|
1117
|
-
*
|
|
1118
|
-
*
|
|
939
|
+
* Writes into the IDE's sub-agent loader directory (`~/.claude/agents/` for Claude
|
|
940
|
+
* Code, and whatever `agentsDir` the detected profile declares). The bytes live in
|
|
941
|
+
* the canonical store (`~/.peaks/agents/<name>`) and the IDE entry is a link to it.
|
|
942
|
+
*
|
|
943
|
+
* Ownership policy — ONE predicate, in `canonical-store-link.mjs::isOwnedFileEntry`,
|
|
944
|
+
* and it is deliberately not a string comparison:
|
|
945
|
+
* - entry resolves to the canonical copy → leave it (idempotent run)
|
|
946
|
+
* - entry is a link we wrote (sidecar agrees, dangles) → relink onto the store
|
|
947
|
+
* - entry is a real file with OUR sidecar beside it → re-point it at the store
|
|
948
|
+
* - entry is a real file with a LEGACY sidecar whose
|
|
949
|
+
* recorded package path no longer resolves → same: repair it
|
|
950
|
+
* - entry is a real file we never wrote (no sidecar) → skip (user-authored)
|
|
951
|
+
* - entry is a real file whose sidecar names a path
|
|
952
|
+
* that STILL resolves → skip (a second live install)
|
|
1119
953
|
*
|
|
1120
|
-
*
|
|
1121
|
-
*
|
|
1122
|
-
*
|
|
1123
|
-
*
|
|
1124
|
-
* SHA matches, sourcePath matches → skip (idempotent re-install)
|
|
1125
|
-
* - file present, marker present,
|
|
1126
|
-
* SHA matches, sourcePath differs → skip (stale package path;
|
|
1127
|
-
* preserve user's local file)
|
|
1128
|
-
* - file present, marker present,
|
|
1129
|
-
* SHA differs → overwrite (package upgrade)
|
|
1130
|
-
* - file present, no marker → skip (user-authored file;
|
|
1131
|
-
* preserve)
|
|
954
|
+
* The two "skip" arms above are the ones the old code got wrong in opposite
|
|
955
|
+
* directions: it skipped whenever the package path merely DIFFERED, which froze
|
|
956
|
+
* every entry on the first upgrade, silently and permanently. See
|
|
957
|
+
* `isOwnedFileEntry` for why a vanished package path is proof of an earlier install.
|
|
1132
958
|
*/
|
|
1133
|
-
function createManagedAgentMarker(sourcePath, agentName) {
|
|
1134
|
-
const content = readPackageSourceFile(sourcePath);
|
|
1135
|
-
return `${JSON.stringify({ version: 1, kind: 'agent', agentName, sourcePath, contentSha256: hashContent(content) })}\n`;
|
|
1136
|
-
}
|
|
1137
|
-
|
|
1138
|
-
function parseManagedAgentMarker(managedTarget) {
|
|
1139
|
-
if (managedTarget === null) return null;
|
|
1140
|
-
try {
|
|
1141
|
-
const marker = JSON.parse(managedTarget);
|
|
1142
|
-
if (
|
|
1143
|
-
marker?.version !== 1 ||
|
|
1144
|
-
marker?.kind !== 'agent' ||
|
|
1145
|
-
typeof marker.agentName !== 'string' ||
|
|
1146
|
-
typeof marker.sourcePath !== 'string' ||
|
|
1147
|
-
typeof marker.contentSha256 !== 'string'
|
|
1148
|
-
) {
|
|
1149
|
-
return null;
|
|
1150
|
-
}
|
|
1151
|
-
return marker;
|
|
1152
|
-
} catch {
|
|
1153
|
-
return null;
|
|
1154
|
-
}
|
|
1155
|
-
}
|
|
1156
|
-
|
|
1157
|
-
function isTrustedAgentSource(marker, sourcePath, agentName) {
|
|
1158
|
-
return (
|
|
1159
|
-
marker.agentName === agentName &&
|
|
1160
|
-
resolve(marker.sourcePath) === resolve(sourcePath) &&
|
|
1161
|
-
basename(resolve(marker.sourcePath)) === agentName
|
|
1162
|
-
);
|
|
1163
|
-
}
|
|
1164
|
-
|
|
1165
|
-
function getManagedPeaksAgentIdentity(managedTarget, targetPath, sourcePath, agentName) {
|
|
1166
|
-
const marker = parseManagedAgentMarker(managedTarget);
|
|
1167
|
-
const sourceHash = hashContent(readPackageSourceFile(sourcePath));
|
|
1168
|
-
if (
|
|
1169
|
-
marker === null ||
|
|
1170
|
-
!isTrustedAgentSource(marker, sourcePath, agentName) ||
|
|
1171
|
-
!existsSync(targetPath) ||
|
|
1172
|
-
hashFileContent(targetPath) !== sourceHash ||
|
|
1173
|
-
marker.contentSha256 !== sourceHash
|
|
1174
|
-
) {
|
|
1175
|
-
return null;
|
|
1176
|
-
}
|
|
1177
|
-
return createFileIdentity(targetPath);
|
|
1178
|
-
}
|
|
1179
|
-
|
|
1180
959
|
export function installBundledAgents(options = {}) {
|
|
1181
960
|
const packageRoot = resolvePackageRoot(options);
|
|
1182
961
|
const agentsRoot = join(packageRoot, 'agents');
|
|
@@ -1210,73 +989,82 @@ export function installBundledAgents(options = {}) {
|
|
|
1210
989
|
|
|
1211
990
|
const installed = [];
|
|
1212
991
|
const skipped = [];
|
|
992
|
+
const fallbacks = [];
|
|
1213
993
|
mkdirSync(targetRoot, { recursive: true });
|
|
1214
994
|
const validateAgentsRoot = createInstallRootValidator(targetRoot, 'Peaks agents');
|
|
1215
995
|
|
|
996
|
+
// Slice 4 (`agents-canonical-store`) — the canonical store owns the bytes and the
|
|
997
|
+
// IDE entry points at it. Everything this loop used to decide about ownership is
|
|
998
|
+
// now `reconcileCanonicalFileEntry`'s, and the reason is the defect the brief
|
|
999
|
+
// names as this slice's core: the old test was
|
|
1000
|
+
// `resolve(marker.sourcePath) === resolve(sourcePath)`, a STRING comparison against
|
|
1001
|
+
// the package path of the installing version — a path with a node version inside it
|
|
1002
|
+
// (`…\nvm\v24.21.0\node_modules\peaks-loop\agents\…`). It went false the first time
|
|
1003
|
+
// the package moved and stayed false, so the agent silently never updated again.
|
|
1004
|
+
const bundledAgentNames = [];
|
|
1216
1005
|
for (const agentFileName of readdirSync(agentsRoot)) {
|
|
1217
1006
|
const sourcePath = join(agentsRoot, agentFileName);
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1007
|
+
if (!lstatSync(sourcePath).isFile() || !agentFileName.endsWith('.md')) continue;
|
|
1008
|
+
bundledAgentNames.push(agentFileName);
|
|
1009
|
+
|
|
1010
|
+
validateAgentsRoot();
|
|
1011
|
+
const reconciled = reconcileCanonicalFileEntry({
|
|
1012
|
+
kind: 'agents',
|
|
1013
|
+
name: agentFileName,
|
|
1014
|
+
sourcePath,
|
|
1015
|
+
linkPath: join(targetRoot, agentFileName),
|
|
1016
|
+
createFileLink: options.createFileLink
|
|
1017
|
+
});
|
|
1018
|
+
validateAgentsRoot();
|
|
1019
|
+
|
|
1020
|
+
if (reconciled.linkAction === 'skipped') {
|
|
1021
|
+
skipped.push(agentFileName);
|
|
1221
1022
|
continue;
|
|
1222
1023
|
}
|
|
1223
|
-
|
|
1224
|
-
const current = getPathStats(targetPath);
|
|
1225
|
-
if (current) {
|
|
1226
|
-
const managedTarget = getManagedTarget(targetPath);
|
|
1227
|
-
const managedTargetIdentity = getManagedPeaksAgentIdentity(
|
|
1228
|
-
managedTarget,
|
|
1229
|
-
targetPath,
|
|
1230
|
-
sourcePath,
|
|
1231
|
-
agentFileName
|
|
1232
|
-
);
|
|
1233
|
-
if (isSameFileIdentity(targetPath, managedTargetIdentity)) {
|
|
1234
|
-
validateAgentsRoot();
|
|
1235
|
-
if (!isSameFileIdentity(targetPath, managedTargetIdentity)) {
|
|
1236
|
-
throw new Error('Peaks agent path changed during unlink');
|
|
1237
|
-
}
|
|
1238
|
-
unlinkSync(targetPath);
|
|
1239
|
-
validateAgentsRoot();
|
|
1240
|
-
unlinkSync(`${targetPath}.peaks-managed`);
|
|
1241
|
-
} else {
|
|
1242
|
-
skipped.push(agentFileName);
|
|
1243
|
-
continue;
|
|
1244
|
-
}
|
|
1245
|
-
}
|
|
1246
|
-
|
|
1247
|
-
const markerPath = `${targetPath}.peaks-managed`;
|
|
1248
|
-
validateManagedMarkerPath(markerPath);
|
|
1249
|
-
if (!current && existsSync(markerPath)) {
|
|
1250
|
-
validateAgentsRoot();
|
|
1251
|
-
unlinkSync(markerPath);
|
|
1252
|
-
}
|
|
1253
|
-
const createdTargetIdentity = writeFileExclusively(
|
|
1254
|
-
targetPath,
|
|
1255
|
-
readPackageSourceFile(sourcePath),
|
|
1256
|
-
'Peaks agent path changed during write',
|
|
1257
|
-
validateAgentsRoot
|
|
1258
|
-
);
|
|
1259
|
-
try {
|
|
1260
|
-
writeFileExclusively(
|
|
1261
|
-
markerPath,
|
|
1262
|
-
createManagedAgentMarker(sourcePath, agentFileName),
|
|
1263
|
-
'Peaks managed marker path changed during write',
|
|
1264
|
-
() => {
|
|
1265
|
-
validateAgentsRoot();
|
|
1266
|
-
validateManagedMarkerPath(markerPath);
|
|
1267
|
-
}
|
|
1268
|
-
);
|
|
1269
|
-
} catch (error) {
|
|
1270
|
-
validateAgentsRoot();
|
|
1271
|
-
if (isSameFileIdentity(targetPath, createdTargetIdentity)) {
|
|
1272
|
-
unlinkSync(targetPath);
|
|
1273
|
-
}
|
|
1274
|
-
throw error;
|
|
1275
|
-
}
|
|
1276
1024
|
installed.push(agentFileName);
|
|
1025
|
+
if (reconciled.fallback !== null) {
|
|
1026
|
+
fallbacks.push({ name: agentFileName, ...reconciled.fallback });
|
|
1027
|
+
}
|
|
1277
1028
|
}
|
|
1278
1029
|
|
|
1279
|
-
|
|
1030
|
+
// The delete half: an agent the package stops shipping used to leave its canonical
|
|
1031
|
+
// copy, its IDE entry and both sidecars on the machine forever.
|
|
1032
|
+
const { pruned } = pruneBundledEntries({
|
|
1033
|
+
kind: 'agents',
|
|
1034
|
+
keepNames: bundledAgentNames,
|
|
1035
|
+
linkDirs: [targetRoot]
|
|
1036
|
+
});
|
|
1037
|
+
|
|
1038
|
+
return { installed, skipped, pruned, fallbacks };
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
/**
|
|
1042
|
+
* A fallback is not a failure — but it must never LOOK like a plain success. The
|
|
1043
|
+
* entry is a real copy instead of a link, and the postinstall says so, naming each
|
|
1044
|
+
* one. Silence here would be the same shape as the defect this slice fixes: an
|
|
1045
|
+
* outcome nobody can observe from the outside.
|
|
1046
|
+
*/
|
|
1047
|
+
function reportCopyFallbacks(label, fallbacks) {
|
|
1048
|
+
if (fallbacks.length === 0) return;
|
|
1049
|
+
process.stderr.write(
|
|
1050
|
+
`Peaks ${label}: ${fallbacks.map((entry) => entry.name).join(', ')} ` +
|
|
1051
|
+
'installed as REAL COPIES because this host refused a symlink ' +
|
|
1052
|
+
`(${fallbacks[0].code ?? 'no code returned'})\n`
|
|
1053
|
+
);
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
/**
|
|
1057
|
+
* The other half of the same rule, for the other bucket. A `skipped` entry means the
|
|
1058
|
+
* canonical copy WAS written and the IDE entry was NOT — a half migration. Whatever the
|
|
1059
|
+
* cause (a file the user authored, or an entry whose sidecar names a second live
|
|
1060
|
+
* installation), it must not be invisible: the whole defect this slice fixes was an
|
|
1061
|
+
* outcome nobody could observe from outside.
|
|
1062
|
+
*/
|
|
1063
|
+
function reportLeftAlone(label, skipped) {
|
|
1064
|
+
if (skipped.length === 0) return;
|
|
1065
|
+
process.stderr.write(
|
|
1066
|
+
`Peaks ${label}: left alone, not peaks-loop's to replace: ${skipped.join(', ')}\n`
|
|
1067
|
+
);
|
|
1280
1068
|
}
|
|
1281
1069
|
|
|
1282
1070
|
/**
|
|
@@ -1320,11 +1108,14 @@ export function installBundledAgentsForAllPlatforms(options = {}) {
|
|
|
1320
1108
|
? { ...options, ideId, targetRoot: options.targetRoot }
|
|
1321
1109
|
: { ...options, ideId };
|
|
1322
1110
|
const result = installBundledAgents(platformOpts);
|
|
1111
|
+
reportCopyFallbacks(`agents in ${profile.agentsDir}`, result.fallbacks);
|
|
1112
|
+
reportLeftAlone(`agents in ${profile.agentsDir}`, result.skipped);
|
|
1323
1113
|
perPlatform.push({
|
|
1324
1114
|
ideId,
|
|
1325
1115
|
agentsDir: profile.agentsDir,
|
|
1326
1116
|
installed: result.installed,
|
|
1327
|
-
skipped: result.skipped
|
|
1117
|
+
skipped: result.skipped,
|
|
1118
|
+
fallbacks: result.fallbacks
|
|
1328
1119
|
});
|
|
1329
1120
|
} catch (err) {
|
|
1330
1121
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -1465,6 +1256,7 @@ if (
|
|
|
1465
1256
|
`Peaks output styles skipped because local files already exist: ${outputStylesResult.skipped.join(', ')}\n`
|
|
1466
1257
|
);
|
|
1467
1258
|
}
|
|
1259
|
+
reportCopyFallbacks('output styles', outputStylesResult.fallbacks);
|
|
1468
1260
|
|
|
1469
1261
|
// Slice 2026-08-02 — auto-register bundled output style.
|
|
1470
1262
|
//
|