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.
Files changed (776) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README-en.md +4 -4
  3. package/README.md +25 -4
  4. package/bin/node-floor.mjs +59 -0
  5. package/bin/peaks.js +13 -0
  6. package/config/eslint/tsconfig.lint.json +2 -1
  7. package/dist/cli/cli-helpers.d.ts +0 -1
  8. package/dist/cli/cli-helpers.js +0 -1
  9. package/dist/cli/commands/_cli-error-envelope.js +0 -3
  10. package/dist/cli/commands/adapter-commands-s2a.d.ts +0 -1
  11. package/dist/cli/commands/adapter-commands.d.ts +0 -1
  12. package/dist/cli/commands/api-diff-commands.d.ts +0 -1
  13. package/dist/cli/commands/api-diff-commands.js +0 -1
  14. package/dist/cli/commands/audit-commands.js +21 -24
  15. package/dist/cli/commands/autonomous-swarm-commands.js +0 -1
  16. package/dist/cli/commands/bee-commands.d.ts +0 -2
  17. package/dist/cli/commands/bee-commands.js +0 -2
  18. package/dist/cli/commands/best-practice-scan-command.d.ts +0 -1
  19. package/dist/cli/commands/best-practice-scan-helpers.js +0 -1
  20. package/dist/cli/commands/changeset-commands.d.ts +0 -2
  21. package/dist/cli/commands/changeset-commands.js +0 -2
  22. package/dist/cli/commands/code-commands.d.ts +0 -3
  23. package/dist/cli/commands/code-commands.js +0 -3
  24. package/dist/cli/commands/code-gate-command.d.ts +0 -1
  25. package/dist/cli/commands/code-gate-command.js +0 -1
  26. package/dist/cli/commands/code-job-shape-commands-read-job-shape.d.ts +0 -1
  27. package/dist/cli/commands/code-job-shape-commands-read-job-shape.js +0 -1
  28. package/dist/cli/commands/code-job-shape-commands.d.ts +0 -2
  29. package/dist/cli/commands/code-job-shape-commands.js +0 -3
  30. package/dist/cli/commands/code-mode-gate-commands.d.ts +0 -2
  31. package/dist/cli/commands/code-mode-gate-commands.js +0 -3
  32. package/dist/cli/commands/code-mode-gate-should-pause-command.js +0 -4
  33. package/dist/cli/commands/code-mode-gate-should-pause-envelope.d.ts +0 -1
  34. package/dist/cli/commands/code-mode-gate-should-pause-envelope.js +0 -2
  35. package/dist/cli/commands/code-mode-status-command.d.ts +0 -1
  36. package/dist/cli/commands/code-mode-status-command.js +0 -1
  37. package/dist/cli/commands/code-orchestrator-can-do.d.ts +0 -1
  38. package/dist/cli/commands/code-orchestrator-can-do.js +0 -1
  39. package/dist/cli/commands/code-run-command.js +0 -1
  40. package/dist/cli/commands/code-runtime-commands.d.ts +0 -3
  41. package/dist/cli/commands/code-runtime-commands.js +0 -15
  42. package/dist/cli/commands/codegraph-command-runtime.d.ts +6 -0
  43. package/dist/cli/commands/codegraph-command-runtime.js +19 -7
  44. package/dist/cli/commands/codegraph-commands.js +20 -193
  45. package/dist/cli/commands/codegraph-init-command.d.ts +8 -0
  46. package/dist/cli/commands/codegraph-init-command.js +162 -0
  47. package/dist/cli/commands/codegraph-status-command.js +5 -6
  48. package/dist/cli/commands/compact-command.d.ts +0 -1
  49. package/dist/cli/commands/compact-command.js +0 -4
  50. package/dist/cli/commands/container-commands.d.ts +0 -1
  51. package/dist/cli/commands/container-commands.js +0 -1
  52. package/dist/cli/commands/context-commands.d.ts +0 -1
  53. package/dist/cli/commands/context-commands.js +0 -1
  54. package/dist/cli/commands/core/doctor-command.d.ts +0 -1
  55. package/dist/cli/commands/core/doctor-command.js +0 -9
  56. package/dist/cli/commands/core/memory-command.js +0 -1
  57. package/dist/cli/commands/core/session-command.js +0 -14
  58. package/dist/cli/commands/core/skill-command.js +0 -9
  59. package/dist/cli/commands/core-artifact-commands.d.ts +0 -1
  60. package/dist/cli/commands/core-artifact-commands.js +0 -1
  61. package/dist/cli/commands/cron-commands-actions.d.ts +0 -1
  62. package/dist/cli/commands/cron-commands-actions.js +0 -2
  63. package/dist/cli/commands/cron-commands-schedule.d.ts +0 -3
  64. package/dist/cli/commands/cron-commands-schedule.js +0 -1
  65. package/dist/cli/commands/cron-commands.d.ts +0 -1
  66. package/dist/cli/commands/cron-commands.js +0 -2
  67. package/dist/cli/commands/cron-scheduler-commands.d.ts +0 -1
  68. package/dist/cli/commands/cron-scheduler-commands.js +0 -1
  69. package/dist/cli/commands/cron-scheduler-persist.d.ts +0 -5
  70. package/dist/cli/commands/cron-scheduler-persist.js +0 -5
  71. package/dist/cli/commands/dashboard-summary.d.ts +0 -1
  72. package/dist/cli/commands/dispatch-commands.d.ts +0 -1
  73. package/dist/cli/commands/dispatch-commands.js +10 -37
  74. package/dist/cli/commands/dispatch-from-dag.js +0 -4
  75. package/dist/cli/commands/doctor/invoke-from-code.js +0 -1
  76. package/dist/cli/commands/e2e-verify.d.ts +0 -1
  77. package/dist/cli/commands/ecc-commands.d.ts +0 -1
  78. package/dist/cli/commands/evolution-commands.d.ts +0 -1
  79. package/dist/cli/commands/evolution-commands.js +0 -1
  80. package/dist/cli/commands/feedback-commands.d.ts +0 -1
  81. package/dist/cli/commands/feedback-commands.js +0 -2
  82. package/dist/cli/commands/fixture-commands.d.ts +0 -2
  83. package/dist/cli/commands/fresh-context-commands.d.ts +0 -1
  84. package/dist/cli/commands/gate-commands-enforce.d.ts +0 -3
  85. package/dist/cli/commands/gate-commands-enforce.js +0 -4
  86. package/dist/cli/commands/gate-commands.js +0 -2
  87. package/dist/cli/commands/governance-classify-contract-commands.d.ts +0 -3
  88. package/dist/cli/commands/governance-classify-contract-commands.js +0 -4
  89. package/dist/cli/commands/heartbeat-commands-action.js +0 -6
  90. package/dist/cli/commands/heartbeat-commands-validation.d.ts +0 -2
  91. package/dist/cli/commands/heartbeat-commands-validation.js +0 -2
  92. package/dist/cli/commands/heartbeat-commands.d.ts +0 -1
  93. package/dist/cli/commands/heartbeat-commands.js +0 -1
  94. package/dist/cli/commands/hooks-commands.js +0 -11
  95. package/dist/cli/commands/ide-commands.d.ts +0 -1
  96. package/dist/cli/commands/job-add-slice-command.d.ts +0 -2
  97. package/dist/cli/commands/job-add-slice-command.js +0 -2
  98. package/dist/cli/commands/job-commands.js +0 -4
  99. package/dist/cli/commands/lease-metrics-commands.d.ts +0 -1
  100. package/dist/cli/commands/lease-metrics-commands.js +0 -1
  101. package/dist/cli/commands/lease-stats-commands.d.ts +0 -1
  102. package/dist/cli/commands/lease-stats-commands.js +0 -1
  103. package/dist/cli/commands/log-commands.d.ts +0 -2
  104. package/dist/cli/commands/log-commands.js +0 -3
  105. package/dist/cli/commands/loop-eval-commands.js +0 -3
  106. package/dist/cli/commands/memory-commands.d.ts +0 -1
  107. package/dist/cli/commands/memory-commands.js +0 -1
  108. package/dist/cli/commands/observability-commands.d.ts +0 -6
  109. package/dist/cli/commands/observability-commands.js +0 -6
  110. package/dist/cli/commands/outer-cache-commands.js +0 -2
  111. package/dist/cli/commands/playwright-commands.d.ts +0 -1
  112. package/dist/cli/commands/playwright-commands.js +0 -1
  113. package/dist/cli/commands/polyrepo-commands.d.ts +0 -1
  114. package/dist/cli/commands/prd-commands.d.ts +0 -1
  115. package/dist/cli/commands/prd-commands.js +0 -2
  116. package/dist/cli/commands/preferences-commands.js +0 -2
  117. package/dist/cli/commands/primer-command.d.ts +0 -1
  118. package/dist/cli/commands/primer-command.js +0 -1
  119. package/dist/cli/commands/project-commands.js +0 -1
  120. package/dist/cli/commands/qa-commands.d.ts +0 -1
  121. package/dist/cli/commands/qa-commands.js +0 -2
  122. package/dist/cli/commands/release-commands.js +0 -9
  123. package/dist/cli/commands/request-commands.d.ts +0 -1
  124. package/dist/cli/commands/request-commands.js +0 -10
  125. package/dist/cli/commands/request-format-helpers.d.ts +0 -1
  126. package/dist/cli/commands/request-format-helpers.js +0 -2
  127. package/dist/cli/commands/runtime-commands.d.ts +0 -1
  128. package/dist/cli/commands/sc-commands.js +0 -1
  129. package/dist/cli/commands/session-24h-mode.d.ts +0 -1
  130. package/dist/cli/commands/session-24h-mode.js +0 -2
  131. package/dist/cli/commands/session-checkpoint-command.d.ts +0 -1
  132. package/dist/cli/commands/session-checkpoint-command.js +0 -1
  133. package/dist/cli/commands/session-resume-command.d.ts +0 -1
  134. package/dist/cli/commands/session-resume-command.js +0 -1
  135. package/dist/cli/commands/shadcn-commands.js +0 -2
  136. package/dist/cli/commands/share-commands.d.ts +0 -3
  137. package/dist/cli/commands/share-commands.js +0 -13
  138. package/dist/cli/commands/skill-search-commands.d.ts +0 -2
  139. package/dist/cli/commands/slice-commands.js +0 -2
  140. package/dist/cli/commands/slice-integrate-commands.js +0 -1
  141. package/dist/cli/commands/spill-demo-command.d.ts +0 -1
  142. package/dist/cli/commands/statusline-commands.js +0 -4
  143. package/dist/cli/commands/sub-agent/detached.js +0 -2
  144. package/dist/cli/commands/sub-agent-commands.d.ts +0 -3
  145. package/dist/cli/commands/sub-agent-shared.d.ts +0 -8
  146. package/dist/cli/commands/sub-agent-shared.js +0 -5
  147. package/dist/cli/commands/sub-agent-shutdown-commands.d.ts +0 -1
  148. package/dist/cli/commands/tech-commands.d.ts +0 -4
  149. package/dist/cli/commands/tech-commands.js +0 -4
  150. package/dist/cli/commands/vendor-detect.d.ts +0 -3
  151. package/dist/cli/commands/vendor-detect.js +0 -2
  152. package/dist/cli/commands/verdict-aggregate-command.d.ts +0 -1
  153. package/dist/cli/commands/verdict-aggregate-command.js +0 -7
  154. package/dist/cli/commands/vm-commands.d.ts +0 -1
  155. package/dist/cli/commands/vm-commands.js +5 -29
  156. package/dist/cli/commands/vm-hypervisor-probe.d.ts +27 -0
  157. package/dist/cli/commands/vm-hypervisor-probe.js +78 -0
  158. package/dist/cli/commands/vm-status-command.d.ts +3 -0
  159. package/dist/cli/commands/vm-status-command.js +50 -0
  160. package/dist/cli/commands/wave-plan-commands.d.ts +0 -1
  161. package/dist/cli/commands/web-lifecycle-commands.d.ts +0 -1
  162. package/dist/cli/commands/workflow-commands.js +0 -14
  163. package/dist/cli/commands/workflow-plan-commands-actions.js +0 -2
  164. package/dist/cli/commands/workflow-plan-commands-session.js +0 -2
  165. package/dist/cli/commands/workflow-plan-commands.d.ts +0 -1
  166. package/dist/cli/commands/workspace/clean-command.d.ts +0 -1
  167. package/dist/cli/commands/workspace/clean-command.js +0 -1
  168. package/dist/cli/commands/workspace/helpers.d.ts +0 -1
  169. package/dist/cli/commands/workspace/helpers.js +0 -1
  170. package/dist/cli/commands/workspace/init-command.d.ts +0 -6
  171. package/dist/cli/commands/workspace/init-command.js +0 -17
  172. package/dist/cli/commands/workspace/migrate-command.d.ts +0 -2
  173. package/dist/cli/commands/workspace/migrate-command.js +0 -2
  174. package/dist/cli/commands/workspace/reconcile-command.d.ts +0 -2
  175. package/dist/cli/commands/workspace/reconcile-command.js +0 -3
  176. package/dist/cli/commands/workspace-commands.d.ts +0 -2
  177. package/dist/cli/commands/workspace-commands.js +0 -4
  178. package/dist/cli/commands/worktree-auth-commands.d.ts +0 -1
  179. package/dist/cli/commands/worktree-auth-commands.js +0 -1
  180. package/dist/cli/commands/worktree-auth-grant-command.d.ts +0 -1
  181. package/dist/cli/commands/worktree-auth-grant-command.js +0 -1
  182. package/dist/cli/commands/worktree-auth-manage-commands.d.ts +0 -1
  183. package/dist/cli/commands/worktree-auth-manage-commands.js +0 -1
  184. package/dist/cli/commands/worktree-lease-commands.js +0 -1
  185. package/dist/cli/program.js +0 -7
  186. package/dist/reporters/bdd-reporter.js +0 -1
  187. package/dist/services/24h-mode/auto-engage.d.ts +0 -1
  188. package/dist/services/24h-mode/auto-engage.js +0 -1
  189. package/dist/services/24h-mode/decider.d.ts +0 -3
  190. package/dist/services/24h-mode/decider.js +0 -3
  191. package/dist/services/24h-mode/index.d.ts +0 -2
  192. package/dist/services/24h-mode/index.js +0 -2
  193. package/dist/services/24h-mode/state.d.ts +0 -1
  194. package/dist/services/24h-mode/state.js +0 -1
  195. package/dist/services/24h-mode/store.d.ts +0 -1
  196. package/dist/services/24h-mode/store.js +0 -1
  197. package/dist/services/adapter/adapter-registry.js +0 -1
  198. package/dist/services/artifacts/artifact-prerequisites.d.ts +0 -5
  199. package/dist/services/artifacts/artifact-prerequisites.js +0 -19
  200. package/dist/services/artifacts/artifact-templates.d.ts +0 -1
  201. package/dist/services/artifacts/artifact-templates.js +0 -1
  202. package/dist/services/artifacts/request-artifact-service.d.ts +0 -5
  203. package/dist/services/artifacts/request-artifact-service.js +0 -12
  204. package/dist/services/artifacts/request-artifact-state-helpers.d.ts +0 -1
  205. package/dist/services/artifacts/request-artifact-state-helpers.js +0 -1
  206. package/dist/services/audit/artifact-writer.d.ts +0 -1
  207. package/dist/services/audit/artifact-writer.js +0 -1
  208. package/dist/services/audit/decision-writer.js +3 -1
  209. package/dist/services/audit/enforcer-liveness.js +0 -1
  210. package/dist/services/audit/enforcers/active-skill-resolver.d.ts +0 -2
  211. package/dist/services/audit/enforcers/active-skill-resolver.js +0 -2
  212. package/dist/services/audit/red-line-audit-input.d.ts +11 -0
  213. package/dist/services/audit/red-line-audit-input.js +103 -0
  214. package/dist/services/audit/red-line-catalog-p2-a-bee-runtime.d.ts +0 -1
  215. package/dist/services/audit/red-line-catalog-p2-a.js +0 -9
  216. package/dist/services/audit/types.d.ts +0 -2
  217. package/dist/services/audit/types.js +0 -2
  218. package/dist/services/audit-independent/perf-audit-service.d.ts +0 -2
  219. package/dist/services/audit-independent/security-audit-service.d.ts +0 -5
  220. package/dist/services/audit-independent/security-audit-service.js +0 -2
  221. package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +0 -5
  222. package/dist/services/autonomous-swarm/autonomous-swarm-service.js +0 -5
  223. package/dist/services/best-practice/language-detector.js +0 -1
  224. package/dist/services/best-practice/output-formatter.d.ts +0 -1
  225. package/dist/services/best-practice/scan-orchestrator.d.ts +0 -1
  226. package/dist/services/capability-audit-service/types.d.ts +1 -3
  227. package/dist/services/capability-guard-runner/contracts/J08.js +2 -2
  228. package/dist/services/changeset/changeset-check-service.d.ts +0 -3
  229. package/dist/services/changeset/changeset-check-service.js +0 -3
  230. package/dist/services/classify/classify-service.d.ts +0 -1
  231. package/dist/services/classify/classify-service.js +0 -1
  232. package/dist/services/classify/classify-types.d.ts +0 -1
  233. package/dist/services/classify/classify-types.js +0 -1
  234. package/dist/services/code/auto-compact-lifecycle.d.ts +0 -11
  235. package/dist/services/code/auto-compact-lifecycle.js +0 -10
  236. package/dist/services/code/auto-compact-modes.d.ts +0 -3
  237. package/dist/services/code/auto-compact-modes.js +0 -3
  238. package/dist/services/code/auto-compact-orchestrator.d.ts +0 -9
  239. package/dist/services/code/auto-compact-orchestrator.js +0 -29
  240. package/dist/services/code/batch-heartbeat-poller.js +0 -1
  241. package/dist/services/code/compact-event-settle.js +0 -1
  242. package/dist/services/code/dag-orchestrator.d.ts +0 -1
  243. package/dist/services/code/dag-orchestrator.js +0 -1
  244. package/dist/services/code/mode-gate-types.d.ts +0 -2
  245. package/dist/services/code/mode-gate-types.js +0 -1
  246. package/dist/services/code/mode-gate.d.ts +0 -5
  247. package/dist/services/code/mode-gate.js +0 -5
  248. package/dist/services/code/orchestrator-can-do-advisories.d.ts +0 -2
  249. package/dist/services/code/orchestrator-can-do-advisories.js +0 -5
  250. package/dist/services/code/orchestrator-can-do.d.ts +0 -4
  251. package/dist/services/code/orchestrator-can-do.js +0 -3
  252. package/dist/services/code/status-line-renderer.js +0 -1
  253. package/dist/services/code-review/ecc-bridge.d.ts +0 -1
  254. package/dist/services/codegraph/codegraph-autorefresh.js +6 -4
  255. package/dist/services/codegraph/codegraph-backend-advice.d.ts +26 -0
  256. package/dist/services/codegraph/codegraph-backend-advice.js +166 -0
  257. package/dist/services/codegraph/codegraph-config-repair-writer.d.ts +0 -24
  258. package/dist/services/codegraph/codegraph-config-repair-writer.js +32 -73
  259. package/dist/services/codegraph/codegraph-exclude-integrity.d.ts +14 -6
  260. package/dist/services/codegraph/codegraph-exclude-integrity.js +24 -14
  261. package/dist/services/codegraph/codegraph-exclude-reconciler.d.ts +9 -2
  262. package/dist/services/codegraph/codegraph-exclude-reconciler.js +87 -18
  263. package/dist/services/codegraph/codegraph-exclude-repair.d.ts +9 -61
  264. package/dist/services/codegraph/codegraph-exclude-repair.js +67 -139
  265. package/dist/services/codegraph/codegraph-foreign-removal.d.ts +21 -0
  266. package/dist/services/codegraph/codegraph-foreign-removal.js +77 -0
  267. package/dist/services/codegraph/codegraph-index-integrity.d.ts +12 -25
  268. package/dist/services/codegraph/codegraph-index-integrity.js +84 -23
  269. package/dist/services/codegraph/codegraph-preflight-service.js +15 -6
  270. package/dist/services/codegraph/codegraph-project-config.d.ts +35 -0
  271. package/dist/services/codegraph/codegraph-project-config.js +90 -0
  272. package/dist/services/codegraph/codegraph-service.d.ts +1 -2
  273. package/dist/services/codegraph/codegraph-service.js +11 -11
  274. package/dist/services/codegraph/codegraph-upstream-layout.d.ts +24 -0
  275. package/dist/services/codegraph/codegraph-upstream-layout.js +85 -0
  276. package/dist/services/comments/comment-audit.d.ts +15 -4
  277. package/dist/services/comments/comment-audit.js +25 -4
  278. package/dist/services/comments/comment-citations.d.ts +8 -2
  279. package/dist/services/comments/comment-citations.js +31 -33
  280. package/dist/services/comments/comment-hygiene.d.ts +29 -3
  281. package/dist/services/comments/comment-hygiene.js +40 -3
  282. package/dist/services/comments/comment-prune.js +52 -4
  283. package/dist/services/comments/comment-spans.d.ts +30 -0
  284. package/dist/services/comments/comment-spans.js +266 -0
  285. package/dist/services/comments/prune-apply.d.ts +22 -0
  286. package/dist/services/comments/prune-apply.js +69 -2
  287. package/dist/services/compact/decision-tables.d.ts +0 -2
  288. package/dist/services/compact/decision-tables.js +0 -2
  289. package/dist/services/compact/request-transition-hook.js +0 -2
  290. package/dist/services/compact-history/compact-history-service.d.ts +0 -2
  291. package/dist/services/compact-history/compact-history-service.js +0 -1
  292. package/dist/services/compact-statusline/compact-lifecycle-store.js +0 -2
  293. package/dist/services/compact-statusline/compact-lifecycle-types.d.ts +0 -1
  294. package/dist/services/compact-statusline/compact-statusline-service.js +0 -4
  295. package/dist/services/config/config-rollback.js +0 -1
  296. package/dist/services/config/config-safety.d.ts +0 -1
  297. package/dist/services/config/config-safety.js +0 -1
  298. package/dist/services/config/config-service.d.ts +0 -1
  299. package/dist/services/config/config-service.js +0 -1
  300. package/dist/services/config/model-routing.d.ts +0 -3
  301. package/dist/services/config/model-routing.js +0 -5
  302. package/dist/services/container/container-lease.d.ts +0 -1
  303. package/dist/services/container/container-lease.js +0 -1
  304. package/dist/services/context/artifact-meta.js +0 -1
  305. package/dist/services/context/auto-compact-dispatcher-input.d.ts +0 -3
  306. package/dist/services/context/auto-compact-dispatcher.js +0 -14
  307. package/dist/services/context/auto-compact-reader-input.d.ts +0 -1
  308. package/dist/services/context/auto-compact-reader.d.ts +0 -2
  309. package/dist/services/context/auto-compact-reader.js +0 -7
  310. package/dist/services/context/auto-compact-types.d.ts +0 -11
  311. package/dist/services/context/auto-compact-types.js +0 -1
  312. package/dist/services/context/build-dispatch-system-prompt.d.ts +11 -29
  313. package/dist/services/context/build-dispatch-system-prompt.js +8 -27
  314. package/dist/services/context/codegraph-unavailable-block.d.ts +38 -0
  315. package/dist/services/context/codegraph-unavailable-block.js +77 -0
  316. package/dist/services/context/context-audit-hint.d.ts +0 -1
  317. package/dist/services/context/context-audit-hint.js +0 -1
  318. package/dist/services/context/context-audit.d.ts +0 -1
  319. package/dist/services/context/context-audit.js +0 -1
  320. package/dist/services/context/harness-window-config.d.ts +0 -4
  321. package/dist/services/context/harness-window-config.js +0 -4
  322. package/dist/services/context/main-session-monitor.d.ts +0 -2
  323. package/dist/services/context/main-session-monitor.js +0 -2
  324. package/dist/services/context/memory-index-reader.d.ts +0 -2
  325. package/dist/services/context/memory-index-reader.js +0 -1
  326. package/dist/services/context/memory-preflight-config.d.ts +0 -1
  327. package/dist/services/context/memory-preflight-service.d.ts +0 -1
  328. package/dist/services/context/memory-preflight-service.js +0 -3
  329. package/dist/services/context/memory-preflight-support.d.ts +0 -5
  330. package/dist/services/context/post-compact-reinjection.d.ts +0 -1
  331. package/dist/services/context/post-compact-reinjection.js +0 -1
  332. package/dist/services/context/summary-view.d.ts +0 -1
  333. package/dist/services/context/summary-view.js +0 -1
  334. package/dist/services/crystallization/crystallization-service.d.ts +5 -11
  335. package/dist/services/crystallization/crystallization-service.js +3 -11
  336. package/dist/services/crystallization/crystallization-store.d.ts +6 -6
  337. package/dist/services/dispatch/await-batch-helpers.js +0 -3
  338. package/dist/services/dispatch/await-batch.d.ts +0 -1
  339. package/dist/services/dispatch/await-batch.js +0 -4
  340. package/dist/services/dispatch/batch-counter.js +0 -1
  341. package/dist/services/dispatch/conflict-replay.d.ts +0 -1
  342. package/dist/services/dispatch/conflict-replay.js +0 -1
  343. package/dist/services/dispatch/contract-store.d.ts +0 -2
  344. package/dist/services/dispatch/contract-store.js +0 -2
  345. package/dist/services/dispatch/dispatch-record-input-types.d.ts +0 -2
  346. package/dist/services/dispatch/dispatch-record-types.d.ts +0 -10
  347. package/dist/services/dispatch/dispatch-record-upgrade-fields.js +0 -7
  348. package/dist/services/dispatch/dispatch-record-upgrade-guards.js +0 -2
  349. package/dist/services/dispatch/dispatch-record-writer.d.ts +0 -5
  350. package/dist/services/dispatch/dispatch-record-writer.js +0 -21
  351. package/dist/services/dispatch/dispatch-sub-agent.d.ts +0 -1
  352. package/dist/services/dispatch/dispatch-sub-agent.js +0 -1
  353. package/dist/services/dispatch/e2e-fixtures.js +0 -1
  354. package/dist/services/dispatch/file-overlap-wave-planner.d.ts +0 -1
  355. package/dist/services/dispatch/file-overlap-wave-planner.js +0 -1
  356. package/dist/services/dispatch/isolation-lease.d.ts +0 -2
  357. package/dist/services/dispatch/isolation-lease.js +0 -2
  358. package/dist/services/dispatch/service-shutdown.js +0 -1
  359. package/dist/services/dispatch/session-capsule.js +0 -1
  360. package/dist/services/dispatch/slice-dag-types.d.ts +0 -1
  361. package/dist/services/dispatch/slice-dag.js +0 -2
  362. package/dist/services/dispatch/stage-enum.d.ts +0 -1
  363. package/dist/services/dispatch/stage-enum.js +0 -1
  364. package/dist/services/dispatch/startup-timeout.d.ts +0 -1
  365. package/dist/services/dispatch/sub-agent-batch-await.js +0 -3
  366. package/dist/services/dispatch/sub-agent-dispatcher-types.d.ts +0 -1
  367. package/dist/services/dispatch/sub-agent-dispatcher.js +0 -2
  368. package/dist/services/dispatch/test-tool-detection.d.ts +0 -3
  369. package/dist/services/dispatch/test-tool-detection.js +0 -2
  370. package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +19 -12
  371. package/dist/services/doctor/doctor-service/checks/codegraph-index-integrity.js +1 -2
  372. package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +0 -2
  373. package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +0 -2
  374. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +0 -1
  375. package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +0 -1
  376. package/dist/services/doctor/doctor-service/checks/multi-binary-drift.d.ts +0 -1
  377. package/dist/services/doctor/doctor-service/checks/multi-binary-drift.js +0 -3
  378. package/dist/services/doctor/doctor-service/checks/workspace-layout.js +0 -2
  379. package/dist/services/doctor/doctor-service/index.d.ts +0 -1
  380. package/dist/services/doctor/doctor-service/index.js +0 -1
  381. package/dist/services/doctor/doctor-service/plugin-registry.d.ts +0 -2
  382. package/dist/services/doctor/doctor-service/plugin-registry.js +0 -2
  383. package/dist/services/doctor/doctor-service/probe-types.d.ts +0 -4
  384. package/dist/services/doctor/doctor-service/report/final-summary.d.ts +0 -1
  385. package/dist/services/doctor/doctor-service/report/final-summary.js +0 -1
  386. package/dist/services/doctor/doctor-service/types.d.ts +0 -5
  387. package/dist/services/doctor/doctor-service/types.js +0 -1
  388. package/dist/services/doctor/doctor-service.d.ts +0 -1
  389. package/dist/services/doctor/doctor-service.js +0 -2
  390. package/dist/services/env/shell-probe.js +0 -1
  391. package/dist/services/evidence/evidence-generator.js +0 -8
  392. package/dist/services/evolution/evolution-constraints.d.ts +0 -2
  393. package/dist/services/evolution/evolution-constraints.js +0 -2
  394. package/dist/services/evolution/evolution-service.d.ts +2 -12
  395. package/dist/services/evolution/evolution-service.js +0 -9
  396. package/dist/services/evolution/evolution-store.d.ts +6 -8
  397. package/dist/services/evolution/evolution-store.js +1 -3
  398. package/dist/services/evolution/evolution-types.d.ts +0 -2
  399. package/dist/services/evolution/evolution-types.js +0 -6
  400. package/dist/services/evolution/independent-evaluator-runner.d.ts +0 -3
  401. package/dist/services/evolution/independent-evaluator-runner.js +0 -1
  402. package/dist/services/evolution/regression-skeptic-runner.d.ts +0 -1
  403. package/dist/services/feedback/feedback-promotion-service.d.ts +0 -8
  404. package/dist/services/feedback/feedback-promotion-service.js +0 -10
  405. package/dist/services/feedback/promotion-artifact-evidence.d.ts +0 -1
  406. package/dist/services/feedback/promotion-artifact-evidence.js +0 -1
  407. package/dist/services/final-review/final-review-evidence-budget.d.ts +0 -3
  408. package/dist/services/final-review/final-review-evidence-budget.js +0 -5
  409. package/dist/services/final-review/final-review-evidence-sources.d.ts +0 -1
  410. package/dist/services/final-review/final-review-evidence-sources.js +0 -1
  411. package/dist/services/final-review/final-review-output-budget.d.ts +0 -1
  412. package/dist/services/final-review/final-review-output-budget.js +0 -3
  413. package/dist/services/final-review/final-review-service.d.ts +0 -1
  414. package/dist/services/final-review/final-review-service.js +0 -1
  415. package/dist/services/fixture/fixture-capture-service.js +0 -1
  416. package/dist/services/fixture/fixture-sanitize-service.d.ts +0 -3
  417. package/dist/services/fixture/fixture-sanitize-service.js +0 -3
  418. package/dist/services/fresh-context/config.js +0 -1
  419. package/dist/services/fresh-context/fresh-context-block.js +0 -1
  420. package/dist/services/fresh-context/trigger-scan.d.ts +0 -1
  421. package/dist/services/fresh-context/trigger-scan.js +0 -1
  422. package/dist/services/fuzzy-matching/fzf-pick-service.d.ts +0 -1
  423. package/dist/services/fuzzy-matching/fzf-pick-service.js +0 -1
  424. package/dist/services/handoff/handoff-parser.d.ts +0 -1
  425. package/dist/services/handoff/handoff-parser.js +0 -1
  426. package/dist/services/handoff/handoff-types.d.ts +0 -1
  427. package/dist/services/handoff/handoff-types.js +0 -1
  428. package/dist/services/handoff/handoff-writer.d.ts +0 -1
  429. package/dist/services/handoff/handoff-writer.js +0 -1
  430. package/dist/services/hooks/auto-compact-hook-install.d.ts +0 -1
  431. package/dist/services/hooks/auto-compact-hook-install.js +0 -1
  432. package/dist/services/hooks/output.d.ts +0 -1
  433. package/dist/services/hooks/output.js +0 -1
  434. package/dist/services/hooks/pre-tool-code-gate.d.ts +0 -1
  435. package/dist/services/hooks/pre-tool-code-gate.js +0 -1
  436. package/dist/services/hooks/presence-marker-detector.js +0 -1
  437. package/dist/services/hooks/worktree-authorization-gate.d.ts +0 -3
  438. package/dist/services/hooks/worktree-authorization-gate.js +0 -1
  439. package/dist/services/ide/adapters/claude-code-adapter.d.ts +0 -5
  440. package/dist/services/ide/adapters/claude-code-adapter.js +0 -11
  441. package/dist/services/ide/adapters/qoder-adapter.d.ts +0 -3
  442. package/dist/services/ide/adapters/qoder-adapter.js +0 -5
  443. package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +0 -2
  444. package/dist/services/ide/adapters/tongyi-lingma-adapter.js +0 -2
  445. package/dist/services/ide/adapters/trae-adapter.d.ts +0 -3
  446. package/dist/services/ide/adapters/trae-adapter.js +3 -6
  447. package/dist/services/ide/adapters/zcode-adapter.js +0 -2
  448. package/dist/services/ide/current-model-detector.js +0 -1
  449. package/dist/services/ide/hook-protocol.d.ts +0 -2
  450. package/dist/services/ide/hook-protocol.js +0 -2
  451. package/dist/services/ide/ide-compact-types.d.ts +0 -7
  452. package/dist/services/ide/ide-types.d.ts +0 -12
  453. package/dist/services/ide/resource-profile.d.ts +0 -1
  454. package/dist/services/job/job-commit-verification.d.ts +0 -2
  455. package/dist/services/job/job-commit-verification.js +0 -2
  456. package/dist/services/job/job-orchestrator.d.ts +0 -1
  457. package/dist/services/job/job-orchestrator.js +0 -1
  458. package/dist/services/job/job-progress-store.d.ts +0 -2
  459. package/dist/services/job/job-progress-store.js +0 -3
  460. package/dist/services/job/job-types.js +0 -1
  461. package/dist/services/job-snapshot/snapshot.js +0 -1
  462. package/dist/services/karpathy-cost/karpathy-cost-check-service.js +0 -1
  463. package/dist/services/legacy/legacy-detector.js +0 -1
  464. package/dist/services/log/log-commands-service.d.ts +0 -2
  465. package/dist/services/log/log-commands-service.js +0 -2
  466. package/dist/services/log/logger.d.ts +0 -1
  467. package/dist/services/log/logger.js +0 -1
  468. package/dist/services/log/redact.d.ts +0 -1
  469. package/dist/services/log/redact.js +0 -1
  470. package/dist/services/log/retention.d.ts +0 -1
  471. package/dist/services/log/retention.js +0 -1
  472. package/dist/services/loop/loop-bee-relation-service.d.ts +3 -3
  473. package/dist/services/loop/loop-bee-relation-service.js +14 -13
  474. package/dist/services/loop/loop-bee-relation-store.d.ts +9 -10
  475. package/dist/services/loop/loop-bee-relation-store.js +1 -2
  476. package/dist/services/loop/loop-bee-relation-types.d.ts +1 -1
  477. package/dist/services/loop/loop-bee-relation-types.js +1 -1
  478. package/dist/services/loop/loop-release-service.d.ts +3 -3
  479. package/dist/services/loop/loop-release-service.js +1 -1
  480. package/dist/services/loop/loop-release-store.d.ts +6 -7
  481. package/dist/services/loop/loop-release-store.js +0 -1
  482. package/dist/services/loop/monotonic-guard.d.ts +0 -1
  483. package/dist/services/loop/monotonic-guard.js +0 -1
  484. package/dist/services/memory/memory-ingest-service.js +0 -1
  485. package/dist/services/memory/project-context-service.d.ts +0 -1
  486. package/dist/services/memory/project-context-service.js +0 -1
  487. package/dist/services/memory/project-memory-service/index/reindex.d.ts +0 -2
  488. package/dist/services/memory/project-memory-service/index/reindex.js +0 -1
  489. package/dist/services/memory/project-memory-service/index/search.d.ts +0 -1
  490. package/dist/services/memory/project-memory-service/index/search.js +0 -1
  491. package/dist/services/memory/project-memory-service/memory-kinds.d.ts +0 -1
  492. package/dist/services/memory/project-memory-service/memory-kinds.js +0 -1
  493. package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +0 -1
  494. package/dist/services/memory/project-memory-service/parsers/frontmatter.js +0 -1
  495. package/dist/services/memory/project-memory-service.js +0 -1
  496. package/dist/services/mode/mode-enforcement.js +0 -1
  497. package/dist/services/mode/mode-status-service.d.ts +0 -2
  498. package/dist/services/mode/mode-status-service.js +0 -2
  499. package/dist/services/observability/aggregation.d.ts +0 -4
  500. package/dist/services/observability/aggregation.js +0 -6
  501. package/dist/services/observability/observability-schema.js +0 -1
  502. package/dist/services/observability/observability-service.d.ts +0 -5
  503. package/dist/services/observability/observability-service.js +0 -4
  504. package/dist/services/observability/report-formatter.d.ts +0 -2
  505. package/dist/services/observability/report-formatter.js +0 -2
  506. package/dist/services/openspec/artifact-boundary.d.ts +0 -4
  507. package/dist/services/openspec/artifact-boundary.js +0 -4
  508. package/dist/services/openspec/coverage-evidence-reader.d.ts +0 -1
  509. package/dist/services/openspec/coverage-evidence-reader.js +0 -1
  510. package/dist/services/polyrepo/polyrepo-dispatcher.js +0 -1
  511. package/dist/services/polyrepo/polyrepo-scanner.js +0 -1
  512. package/dist/services/polyrepo/polyrepo-service.js +0 -1
  513. package/dist/services/polyrepo/polyrepo-types.d.ts +0 -1
  514. package/dist/services/prd/best-practice-auto-trigger.d.ts +0 -2
  515. package/dist/services/prd/best-practice-auto-trigger.js +0 -2
  516. package/dist/services/prd/gate-evidence-derivation.d.ts +0 -4
  517. package/dist/services/prd/gate-evidence-derivation.js +0 -5
  518. package/dist/services/prd/handoff-auto-regen.js +0 -5
  519. package/dist/services/prd/handoff-frontmatter-shape.d.ts +0 -2
  520. package/dist/services/prd/handoff-frontmatter-shape.js +0 -2
  521. package/dist/services/prd/handoff-frontmatter.d.ts +0 -1
  522. package/dist/services/prd/handoff-frontmatter.js +0 -2
  523. package/dist/services/prd/handoff-gate-evidence.d.ts +0 -1
  524. package/dist/services/prd/handoff-gate-evidence.js +0 -4
  525. package/dist/services/prd/handoff-path-resolution.d.ts +0 -7
  526. package/dist/services/prd/handoff-path-resolution.js +0 -10
  527. package/dist/services/prd/handoff-service.d.ts +0 -2
  528. package/dist/services/prd/handoff-service.js +0 -2
  529. package/dist/services/prd/handoff-types.d.ts +0 -2
  530. package/dist/services/prd/handoff-types.js +0 -1
  531. package/dist/services/prd/project-scan-bootstrap-service.d.ts +0 -1
  532. package/dist/services/prd/project-scan-bootstrap-service.js +0 -4
  533. package/dist/services/prd/project-scan-types.d.ts +0 -1
  534. package/dist/services/prd/project-scan-types.js +0 -1
  535. package/dist/services/preferences/preferences-service.d.ts +0 -1
  536. package/dist/services/preferences/preferences-service.js +0 -5
  537. package/dist/services/preferences/preferences-types.d.ts +0 -14
  538. package/dist/services/preferences/preferences-types.js +0 -4
  539. package/dist/services/progress/progress-service.js +0 -1
  540. package/dist/services/qa/bdd-test-style-verifier.d.ts +0 -1
  541. package/dist/services/qa/bdd-test-style-verifier.js +0 -1
  542. package/dist/services/qa/browser-event-logger.d.ts +0 -1
  543. package/dist/services/qa/browser-event-logger.js +0 -1
  544. package/dist/services/qa/browser-restart-detector.d.ts +0 -1
  545. package/dist/services/qa/browser-restart-detector.js +0 -1
  546. package/dist/services/qa/browser-reuse-hint.d.ts +0 -1
  547. package/dist/services/qa/browser-reuse-hint.js +0 -1
  548. package/dist/services/qa/qa-business-review-state.js +0 -2
  549. package/dist/services/qa/screenshot-archive-service.d.ts +0 -1
  550. package/dist/services/qa/screenshot-archive-service.js +0 -1
  551. package/dist/services/rd/impl.js +0 -1
  552. package/dist/services/rd/rd-service.d.ts +0 -5
  553. package/dist/services/rd/rd-service.js +0 -5
  554. package/dist/services/rd/reviewer-dispatch-policy.d.ts +0 -4
  555. package/dist/services/rd/reviewer-dispatch-policy.js +0 -4
  556. package/dist/services/rd/standards-diagnostic.js +0 -1
  557. package/dist/services/rd/tactical-stage.js +0 -1
  558. package/dist/services/rd-swarm/rd-swarm-types.d.ts +0 -1
  559. package/dist/services/rd-swarm/rd-swarm-types.js +0 -1
  560. package/dist/services/recommendations/installed-capability-detector.d.ts +0 -1
  561. package/dist/services/recommendations/installed-capability-detector.js +0 -1
  562. package/dist/services/release/version-precheck-service.d.ts +0 -2
  563. package/dist/services/release/version-precheck-service.js +0 -3
  564. package/dist/services/retrospective/retrospective-index.d.ts +0 -1
  565. package/dist/services/retrospective/retrospective-index.js +0 -1
  566. package/dist/services/retrospective/retrospective-show.d.ts +0 -1
  567. package/dist/services/retrospective/retrospective-show.js +0 -1
  568. package/dist/services/reviewer/model-family.js +0 -1
  569. package/dist/services/reviewer/reviewer-config.js +0 -1
  570. package/dist/services/reviewer/reviewer-service.d.ts +0 -1
  571. package/dist/services/reviewer/reviewer-service.js +0 -3
  572. package/dist/services/reviewer/selection-strategies.js +0 -1
  573. package/dist/services/runtime/runtime-detector.js +0 -1
  574. package/dist/services/runtime/runtime-service.d.ts +0 -2
  575. package/dist/services/runtime/vendor-adapter.d.ts +0 -7
  576. package/dist/services/runtime/vendors/claude-code.js +0 -1
  577. package/dist/services/runtime/vendors/codex.js +0 -1
  578. package/dist/services/runtime/vendors/copilot.js +0 -1
  579. package/dist/services/sc/sc-service.js +0 -6
  580. package/dist/services/scan/acceptance-coverage-service.js +0 -2
  581. package/dist/services/scan/api-diff-recorded.d.ts +0 -1
  582. package/dist/services/scan/api-diff-recorded.js +0 -1
  583. package/dist/services/scan/api-diff-service.d.ts +0 -1
  584. package/dist/services/scan/api-diff-service.js +0 -1
  585. package/dist/services/scan/api-diff-types.d.ts +0 -1
  586. package/dist/services/scan/api-diff-types.js +0 -1
  587. package/dist/services/scan/archetype-service.js +0 -1
  588. package/dist/services/scan/file-size-policy.d.ts +0 -1
  589. package/dist/services/scan/file-size-policy.js +0 -5
  590. package/dist/services/scan/file-size-scan.d.ts +0 -1
  591. package/dist/services/security/safe-settings-path.js +0 -1
  592. package/dist/services/session/binding-store.d.ts +0 -4
  593. package/dist/services/session/binding-store.js +0 -7
  594. package/dist/services/session/caller-binding-service.d.ts +0 -6
  595. package/dist/services/session/caller-binding-service.js +0 -4
  596. package/dist/services/session/caller-id-types.d.ts +0 -3
  597. package/dist/services/session/caller-id-types.js +0 -2
  598. package/dist/services/session/getSessionDir.js +0 -1
  599. package/dist/services/session/index.js +0 -1
  600. package/dist/services/session/platform-fallbacks.d.ts +0 -3
  601. package/dist/services/session/platform-fallbacks.js +0 -3
  602. package/dist/services/session/resolve-caller-id.d.ts +0 -2
  603. package/dist/services/session/resolve-caller-id.js +0 -2
  604. package/dist/services/session/session-binding-bridge.d.ts +0 -2
  605. package/dist/services/session/session-binding-bridge.js +0 -15
  606. package/dist/services/session/session-checkpoint-service.d.ts +0 -1
  607. package/dist/services/session/session-checkpoint-service.js +0 -1
  608. package/dist/services/session/session-manager.d.ts +0 -8
  609. package/dist/services/session/session-manager.js +0 -19
  610. package/dist/services/session/session-resume-service.d.ts +0 -1
  611. package/dist/services/session/session-resume-service.js +0 -1
  612. package/dist/services/share/bundle-reader.d.ts +2 -5
  613. package/dist/services/share/bundle-reader.js +6 -8
  614. package/dist/services/share/bundle-writer.d.ts +2 -2
  615. package/dist/services/skill/resume-detector.js +0 -3
  616. package/dist/services/skill/skill-scheduler.d.ts +0 -1
  617. package/dist/services/skill/skill-scheduler.js +0 -1
  618. package/dist/services/skill/skill-search-service.d.ts +0 -2
  619. package/dist/services/skill/skill-search-service.js +0 -2
  620. package/dist/services/skillhub/release-diff.d.ts +2 -2
  621. package/dist/services/skillhub/release-export.d.ts +2 -2
  622. package/dist/services/skillhub/release-gc-blobs.d.ts +2 -2
  623. package/dist/services/skillhub/release-import.d.ts +2 -2
  624. package/dist/services/skillhub/release-import.js +2 -1
  625. package/dist/services/skillhub/release-retain.d.ts +2 -2
  626. package/dist/services/skillhub/release-retain.js +2 -1
  627. package/dist/services/skillhub/sqlite-store.d.ts +3 -3
  628. package/dist/services/skillhub/sqlite-store.js +4 -5
  629. package/dist/services/skills/hooks-codegate-superpowers.d.ts +0 -3
  630. package/dist/services/skills/hooks-codegate-superpowers.js +0 -14
  631. package/dist/services/skills/hooks-settings-service.d.ts +0 -2
  632. package/dist/services/skills/hooks-settings-service.js +0 -6
  633. package/dist/services/skills/presence-lease-service.d.ts +0 -1
  634. package/dist/services/skills/presence-lease-service.js +0 -1
  635. package/dist/services/skills/session-start-hook-constants.d.ts +0 -4
  636. package/dist/services/skills/session-start-hook-constants.js +0 -4
  637. package/dist/services/skills/skill-presence-service.d.ts +0 -8
  638. package/dist/services/skills/skill-presence-service.js +0 -13
  639. package/dist/services/skills/skill-statusline-model.d.ts +0 -6
  640. package/dist/services/skills/skill-statusline-model.js +1 -4
  641. package/dist/services/skills/skill-statusline-renderer.d.ts +0 -1
  642. package/dist/services/skills/skill-statusline-renderer.js +0 -12
  643. package/dist/services/skills/skill-statusline-service.js +0 -6
  644. package/dist/services/skills/skill-statusline-sid-suffix.d.ts +0 -2
  645. package/dist/services/skills/skill-statusline-sid-suffix.js +0 -2
  646. package/dist/services/skills/statusline-palette.d.ts +0 -2
  647. package/dist/services/skills/statusline-palette.js +0 -3
  648. package/dist/services/slice/slice-archive-service.js +0 -1
  649. package/dist/services/slice/slice-benchmark-service.d.ts +0 -1
  650. package/dist/services/slice/slice-benchmark-service.js +0 -1
  651. package/dist/services/slice/slice-check-service.js +0 -6
  652. package/dist/services/slice/slice-check-types.d.ts +0 -1
  653. package/dist/services/slice/slice-pick-service.d.ts +0 -1
  654. package/dist/services/slice/slice-pick-service.js +0 -1
  655. package/dist/services/slice/slice-review-state.js +0 -2
  656. package/dist/services/sqlite/sqlite-driver.d.ts +118 -0
  657. package/dist/services/sqlite/sqlite-driver.js +159 -0
  658. package/dist/services/standards/ide-aware-standards-service.d.ts +0 -2
  659. package/dist/services/standards/ide-aware-standards-service.js +0 -1
  660. package/dist/services/standards/loop-engineering-readiness-lint.d.ts +0 -1
  661. package/dist/services/standards/loop-engineering-readiness-lint.js +0 -1
  662. package/dist/services/standards/migrate-claude-rules-service.js +0 -3
  663. package/dist/services/standards/migrate-service.d.ts +0 -1
  664. package/dist/services/standards/migrate-service.js +0 -1
  665. package/dist/services/standards/missing-standards-detector.d.ts +0 -2
  666. package/dist/services/standards/missing-standards-detector.js +0 -3
  667. package/dist/services/standards/project-standards-service.d.ts +0 -1
  668. package/dist/services/standards/project-standards-service.js +0 -1
  669. package/dist/services/standards/standards-render.d.ts +0 -1
  670. package/dist/services/standards/standards-render.js +0 -1
  671. package/dist/services/standards/ui-library-dispatch-block.d.ts +0 -1
  672. package/dist/services/standards/ui-library-dispatch-block.js +0 -1
  673. package/dist/services/tech/tech-change-id-service.d.ts +0 -7
  674. package/dist/services/tech/tech-change-id-service.js +0 -7
  675. package/dist/services/tech/tech-service.js +0 -5
  676. package/dist/services/verdict/envelope-parsers.d.ts +0 -2
  677. package/dist/services/verdict/envelope-parsers.js +0 -2
  678. package/dist/services/verdict/envelopes.d.ts +0 -1
  679. package/dist/services/vm/vm-lease.js +0 -1
  680. package/dist/services/web/aria-node.d.ts +0 -1
  681. package/dist/services/web/bounded-output.d.ts +0 -1
  682. package/dist/services/web/bounded-output.js +0 -1
  683. package/dist/services/web/browser-acquire.js +0 -1
  684. package/dist/services/web/browser-cache-probe.js +0 -1
  685. package/dist/services/web/browser-session-manager.js +0 -1
  686. package/dist/services/web/daemon-entry.js +0 -1
  687. package/dist/services/web/daemon-registry.js +0 -1
  688. package/dist/services/web/daemon-supervisor.d.ts +4 -3
  689. package/dist/services/web/daemon-supervisor.js +4 -4
  690. package/dist/services/web/playwright-loader.js +0 -1
  691. package/dist/services/web/playwright-types.d.ts +0 -1
  692. package/dist/services/web/snapshot-pruner.js +0 -1
  693. package/dist/services/web/untrusted-envelope.d.ts +0 -1
  694. package/dist/services/web/web-artifact-paths.js +0 -1
  695. package/dist/services/web/web-client.d.ts +0 -1
  696. package/dist/services/web/web-daemon-service.js +0 -1
  697. package/dist/services/web/web-fallback.d.ts +0 -1
  698. package/dist/services/web/web-fallback.js +0 -1
  699. package/dist/services/web/web-install-service.js +0 -1
  700. package/dist/services/web/web-login-profile.js +0 -1
  701. package/dist/services/web/web-protocol.d.ts +0 -1
  702. package/dist/services/web/web-protocol.js +0 -1
  703. package/dist/services/web/web-status-report.js +0 -1
  704. package/dist/services/workflow/artifact-paths.js +0 -3
  705. package/dist/services/workflow/autonomous-resume-writer.js +0 -2
  706. package/dist/services/workflow/pipeline-verify-gate-support.d.ts +0 -5
  707. package/dist/services/workflow/pipeline-verify-gate-support.js +0 -11
  708. package/dist/services/workflow/pipeline-verify-service.d.ts +0 -2
  709. package/dist/services/workflow/pipeline-verify-service.js +0 -15
  710. package/dist/services/workflow/pipeline-verify-types.d.ts +0 -10
  711. package/dist/services/workflow/pipeline-verify-types.js +0 -2
  712. package/dist/services/workflow/plan-reader.d.ts +0 -1
  713. package/dist/services/workflow/plan-reader.js +0 -5
  714. package/dist/services/workflow/plan-refresher.js +0 -2
  715. package/dist/services/workflow/plan-trigger-detector.d.ts +0 -2
  716. package/dist/services/workflow/plan-trigger-detector.js +0 -3
  717. package/dist/services/workflow/workflow-autonomous-resume-helpers.js +0 -5
  718. package/dist/services/workflow/workflow-autonomous-service.js +0 -2
  719. package/dist/services/workflow/workflow-autonomous-types.d.ts +0 -2
  720. package/dist/services/workflow/workflow-autonomous-types.js +0 -2
  721. package/dist/services/workflow/workflow-graph-types.d.ts +0 -1
  722. package/dist/services/workflow/workflow-graph-types.js +0 -1
  723. package/dist/services/workflow/workflow-router-service.js +0 -4
  724. package/dist/services/workflow/workflow-skip-service.d.ts +0 -1
  725. package/dist/services/workflow/workflow-skip-service.js +0 -1
  726. package/dist/services/workflow/workflow-spec-lint.d.ts +0 -2
  727. package/dist/services/workflow/workflow-spec-lint.js +0 -2
  728. package/dist/services/workflow/workflow-spec-types.d.ts +0 -1
  729. package/dist/services/workflow/workflow-spec-types.js +0 -1
  730. package/dist/services/workflow/workflow-spec-yaml.d.ts +0 -2
  731. package/dist/services/workflow/workflow-spec-yaml.js +0 -2
  732. package/dist/services/workflow/workflow-spec.js +0 -1
  733. package/dist/services/workflow/workflow-state-store.js +0 -1
  734. package/dist/services/workspace/claude-settings-template.d.ts +0 -4
  735. package/dist/services/workspace/claude-settings-template.js +0 -4
  736. package/dist/services/workspace/migrate-1-4-1-service.d.ts +0 -1
  737. package/dist/services/workspace/migrate-1-4-1-service.js +0 -1
  738. package/dist/services/workspace/migrate-service.js +0 -8
  739. package/dist/services/workspace/migrate-types.d.ts +0 -4
  740. package/dist/services/workspace/migrate-types.js +0 -1
  741. package/dist/services/workspace/reconcile-migrate.d.ts +0 -3
  742. package/dist/services/workspace/reconcile-migrate.js +0 -5
  743. package/dist/services/workspace/reconcile-service.d.ts +0 -3
  744. package/dist/services/workspace/reconcile-service.js +0 -7
  745. package/dist/services/workspace/reconcile-types.d.ts +0 -5
  746. package/dist/services/workspace/sid-naming-guard.d.ts +0 -1
  747. package/dist/services/workspace/sid-naming-guard.js +0 -1
  748. package/dist/services/workspace/templates/project-scan/index.d.ts +0 -3
  749. package/dist/services/workspace/templates/project-scan/index.js +0 -3
  750. package/dist/services/workspace/workspace-claude-settings-materializer.d.ts +0 -1
  751. package/dist/services/workspace/workspace-claude-settings-materializer.js +0 -4
  752. package/dist/services/workspace/workspace-service.d.ts +0 -7
  753. package/dist/services/workspace/workspace-service.js +0 -16
  754. package/dist/services/worktree/playwright-profile.js +0 -1
  755. package/dist/services/worktree/worktree-lease-types.d.ts +0 -1
  756. package/dist/services/worktree/worktree-lease-types.js +0 -1
  757. package/dist/services/worktree/worktree-lease.d.ts +0 -2
  758. package/dist/services/worktree/worktree-lease.js +0 -2
  759. package/dist/shared/format-md-compact.d.ts +0 -2
  760. package/dist/shared/format-md-compact.js +0 -2
  761. package/dist/shared/incrementing-number.d.ts +0 -1
  762. package/dist/shared/incrementing-number.js +0 -1
  763. package/dist/shared/path-utils.d.ts +0 -1
  764. package/dist/shared/path-utils.js +0 -1
  765. package/dist/shared/runtime-root.d.ts +0 -1
  766. package/dist/shared/runtime-root.js +0 -1
  767. package/dist/shared/stale-policy.d.ts +0 -1
  768. package/dist/shared/stale-policy.js +0 -1
  769. package/package.json +12 -10
  770. package/scripts/canonical-store-link.mjs +296 -0
  771. package/scripts/canonical-store-prune.mjs +131 -0
  772. package/scripts/canonical-store.mjs +298 -0
  773. package/scripts/install-skills.mjs +175 -383
  774. package/skills/peaks-audit/SKILL.md +3 -3
  775. package/dist/services/codegraph/codegraph-include-reconciler.d.ts +0 -10
  776. 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 { createHash, randomUUID } from 'node:crypto';
18
+ import { randomUUID } from 'node:crypto';
21
19
  import { homedir } from 'node:os';
22
- import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path';
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
- const current = getPathStats(targetPath);
788
- if (current) {
789
- const managedTarget = getManagedTarget(targetPath);
790
- const linkTarget = current.isSymbolicLink() ? readlinkSync(targetPath) : null;
791
- const linkTargetExists = typeof linkTarget === 'string' && existsSync(linkTarget);
792
- if (linkTarget === sourcePath && linkTargetExists) {
793
- installed.push(skillName);
794
- continue;
795
- }
796
- // Managed Junctions may point into an ephemeral host worktree. If that
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
- symlinkSync(sourcePath, targetPath, process.platform === 'win32' ? 'junction' : 'dir');
817
- try {
818
- validateSkillsRoot();
819
- markManagedPeaksLink(targetPath, sourcePath);
820
- } catch (error) {
821
- validateSkillsRoot();
822
- const created = getPathStats(targetPath);
823
- if (created?.isSymbolicLink() && readlinkSync(targetPath) === sourcePath) {
824
- unlinkSync(targetPath);
825
- }
826
- throw error;
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
- return { installed, skipped };
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
- const targetPath = join(targetRoot, outputStyleName);
900
-
901
- if (!lstatSync(sourcePath).isFile() || !outputStyleName.endsWith('.md')) {
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
- return { installed, skipped };
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
- * Mirrors `installBundledOutputStyles` but writes to
1115
- * `~/.claude/agents/` (Claude Code's sub-agent loader directory). Each
1116
- * agent file ships under `agents/*.md` in the peaks-loop tarball and is
1117
- * copied on `npm i -g peaks-loop@latest` with content-hash drift detection
1118
- * via a `.peaks-managed` marker (SHA-256 of the source content).
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
- * Drift policy (mirrors output-styles):
1121
- * - file missing, marker missing → install (write file + marker)
1122
- * - file missing, marker present → install (replace stale marker)
1123
- * - file present, marker present,
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
- const targetPath = join(targetRoot, agentFileName);
1219
-
1220
- if (!lstatSync(sourcePath).isFile() || !agentFileName.endsWith('.md')) {
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
- return { installed, skipped };
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
  //