@indigoai-us/hq-cli 5.312.2-beta.0 → 5.314.0

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 (1144) hide show
  1. package/CHANGELOG.md +1 -4293
  2. package/assets/scaffold/core/scripts/checkpoint-stop-gate.sh +43 -281
  3. package/assets/scaffold/core/scripts/hook-lib.sh +50 -345
  4. package/assets/scaffold/core/scripts/hq-session.sh +23 -184
  5. package/assets/scaffold/core/scripts/lib/session-id.sh +2 -3
  6. package/assets/scaffold/core/scripts/lib/session-scope-capability.sh +1 -1
  7. package/assets/scaffold/core/scripts/lib/work-mesh-enqueue.sh +1 -2
  8. package/assets/scaffold/core/scripts/qmd-reindex-after-sync.sh +87 -10
  9. package/assets/scaffold/core/scripts/rebuild-company-knowledge-index.sh +3 -36
  10. package/assets/scaffold/core/scripts/rebuild-projects-index.sh +12 -99
  11. package/assets/scaffold/core/scripts/token-usage-report.sh +20 -81
  12. package/dist/bin/hq-auth-refresh.d.ts +0 -2
  13. package/dist/bin/hq-auth-refresh.js +6 -12
  14. package/dist/commands/__fixtures__/access-vault.d.ts +0 -2
  15. package/dist/commands/__fixtures__/access-vault.js +1 -1
  16. package/dist/commands/_patterns.d.ts +0 -16
  17. package/dist/commands/_patterns.js +3 -20
  18. package/dist/commands/access.d.ts +1 -2
  19. package/dist/commands/access.js +49 -58
  20. package/dist/commands/agents.d.ts +4 -106
  21. package/dist/commands/agents.js +45 -924
  22. package/dist/commands/auth.d.ts +0 -1
  23. package/dist/commands/auth.js +19 -189
  24. package/dist/commands/billing.d.ts +0 -3
  25. package/dist/commands/billing.js +1 -6
  26. package/dist/commands/channels.js +1 -56
  27. package/dist/commands/cloud-demote.js +2 -3
  28. package/dist/commands/cloud-provision.d.ts +0 -14
  29. package/dist/commands/cloud-provision.js +58 -232
  30. package/dist/commands/cloud.d.ts +15 -49
  31. package/dist/commands/cloud.js +122 -358
  32. package/dist/commands/company-transfer.d.ts +28 -4
  33. package/dist/commands/company-transfer.js +49 -5
  34. package/dist/commands/company.js +3 -66
  35. package/dist/commands/core-checkpoint.d.ts +9 -19
  36. package/dist/commands/core-checkpoint.js +37 -301
  37. package/dist/commands/core.d.ts +0 -4
  38. package/dist/commands/core.js +80 -270
  39. package/dist/commands/crm.js +3 -52
  40. package/dist/commands/db-provision.js +4 -4
  41. package/dist/commands/db-sql.js +21 -7
  42. package/dist/commands/dm.d.ts +12 -119
  43. package/dist/commands/dm.js +38 -388
  44. package/dist/commands/doctor.d.ts +0 -12
  45. package/dist/commands/doctor.js +12 -158
  46. package/dist/commands/feedback.d.ts +0 -6
  47. package/dist/commands/feedback.js +37 -86
  48. package/dist/commands/files-browse.d.ts +12 -32
  49. package/dist/commands/files-browse.js +60 -176
  50. package/dist/commands/files.d.ts +0 -17
  51. package/dist/commands/files.js +47 -300
  52. package/dist/commands/group-grants.js +2 -3
  53. package/dist/commands/groups.js +5 -6
  54. package/dist/commands/index-cmd.d.ts +1 -19
  55. package/dist/commands/index-cmd.js +7 -74
  56. package/dist/commands/integrations-api.d.ts +10 -15
  57. package/dist/commands/integrations-api.js +22 -27
  58. package/dist/commands/integrations-connect.d.ts +13 -51
  59. package/dist/commands/integrations-connect.js +71 -86
  60. package/dist/commands/integrations-core.d.ts +6 -6
  61. package/dist/commands/integrations-core.js +11 -25
  62. package/dist/commands/integrations-import.d.ts +1 -1
  63. package/dist/commands/integrations-import.js +24 -43
  64. package/dist/commands/integrations-manage.js +13 -20
  65. package/dist/commands/integrations.d.ts +0 -8
  66. package/dist/commands/integrations.js +7 -94
  67. package/dist/commands/login.js +6 -49
  68. package/dist/commands/mcp-registration.d.ts +25 -32
  69. package/dist/commands/mcp-registration.js +23 -256
  70. package/dist/commands/mcp-status.js +0 -1
  71. package/dist/commands/meetings.js +34 -55
  72. package/dist/commands/members.js +1 -5
  73. package/dist/commands/mesh.d.ts +0 -11
  74. package/dist/commands/mesh.js +76 -1086
  75. package/dist/commands/onboard-identity-guard.d.ts +1 -1
  76. package/dist/commands/onboard.js +5 -24
  77. package/dist/commands/pack-install.js +1 -3
  78. package/dist/commands/packs.js +1 -11
  79. package/dist/commands/people.d.ts +0 -4
  80. package/dist/commands/people.js +3 -37
  81. package/dist/commands/publish.d.ts +1 -8
  82. package/dist/commands/publish.js +4 -17
  83. package/dist/commands/reindex.js +6 -56
  84. package/dist/commands/rescue.d.ts +0 -4
  85. package/dist/commands/rescue.js +17 -27
  86. package/dist/commands/run.js +4 -18
  87. package/dist/commands/safe-extract.d.ts +2 -11
  88. package/dist/commands/safe-extract.js +8 -36
  89. package/dist/commands/scaffold-fast.d.ts +41 -0
  90. package/dist/commands/scaffold-fast.js +57 -0
  91. package/dist/commands/secrets.d.ts +2 -20
  92. package/dist/commands/secrets.js +71 -175
  93. package/dist/commands/skill.d.ts +4 -35
  94. package/dist/commands/skill.js +18 -357
  95. package/dist/commands/sync-mode.d.ts +0 -11
  96. package/dist/commands/sync-mode.js +0 -30
  97. package/dist/commands/sync-narrow.js +5 -36
  98. package/dist/commands/team-sync.js +10 -71
  99. package/dist/commands/update.js +0 -6
  100. package/dist/commands/whoami.d.ts +0 -22
  101. package/dist/commands/whoami.js +4 -137
  102. package/dist/commands/workers.d.ts +14 -2
  103. package/dist/commands/workers.js +10 -7
  104. package/dist/fast-core.d.ts +7 -6
  105. package/dist/fast-core.js +24 -80
  106. package/dist/index.d.ts +4 -3
  107. package/dist/index.js +9 -59
  108. package/dist/lazy-commands.d.ts +44 -20
  109. package/dist/lazy-commands.js +58 -60
  110. package/dist/lib/company-skill-wrapper.d.ts +0 -1
  111. package/dist/lib/company-skill-wrapper.js +29 -121
  112. package/dist/lib/core-utils/codex-skill-bridge.d.ts +1 -2
  113. package/dist/lib/core-utils/qmd-reindex-after-sync.d.ts +1 -14
  114. package/dist/lib/core-utils/qmd-reindex-after-sync.js +17 -101
  115. package/dist/lib/core-utils/soft-timeout.js +1 -1
  116. package/dist/lib/core-utils/timeout-guard.d.ts +3 -3
  117. package/dist/lib/core-utils/timeout-guard.js +13 -28
  118. package/dist/lib/core-utils/token-usage-report.js +3 -17
  119. package/dist/lib/db/control-plane.js +0 -6
  120. package/dist/lib/db/local.d.ts +5 -0
  121. package/dist/lib/db/local.js +1 -1
  122. package/dist/lib/db/migrate.d.ts +12 -0
  123. package/dist/lib/db/migrate.js +5 -5
  124. package/dist/lib/db/remote-sql.d.ts +2 -2
  125. package/dist/lib/db/remote-sql.js +3 -3
  126. package/dist/lib/db/sql.d.ts +10 -0
  127. package/dist/lib/db/sql.js +8 -4
  128. package/dist/lib/doctor/__testing__/fake-hq-tree.d.ts +1 -1
  129. package/dist/lib/doctor/__testing__/fake-hq-tree.js +1 -1
  130. package/dist/lib/doctor/checks/claude-wiring.js +1 -70
  131. package/dist/lib/doctor/checks/codex-wiring.d.ts +4 -0
  132. package/dist/lib/doctor/checks/codex-wiring.js +35 -3
  133. package/dist/lib/doctor/checks/grok-wiring.js +34 -1
  134. package/dist/lib/doctor/checks/integrations.js +0 -11
  135. package/dist/lib/doctor/checks/runtime-health.d.ts +17 -4
  136. package/dist/lib/doctor/checks/runtime-health.js +7 -20
  137. package/dist/lib/doctor/checks/sync-health.d.ts +0 -21
  138. package/dist/lib/doctor/checks/sync-health.js +2 -72
  139. package/dist/lib/doctor/checks/work-context.js +6 -12
  140. package/dist/lib/doctor/compat.d.ts +16 -0
  141. package/dist/lib/doctor/compat.js +3 -4
  142. package/dist/lib/doctor/deep/effects.js +3 -1
  143. package/dist/lib/doctor/deep/executor.d.ts +10 -4
  144. package/dist/lib/doctor/deep/executor.js +1 -1
  145. package/dist/lib/doctor/deep/parity.d.ts +29 -2
  146. package/dist/lib/doctor/deep/parity.js +7 -7
  147. package/dist/lib/doctor/deep/sandbox.d.ts +25 -7
  148. package/dist/lib/doctor/deep/sandbox.js +7 -5
  149. package/dist/lib/doctor/fix/apply.d.ts +8 -79
  150. package/dist/lib/doctor/fix/apply.js +80 -292
  151. package/dist/lib/doctor/fix/remediation.d.ts +6 -14
  152. package/dist/lib/doctor/fix/remediation.js +9 -49
  153. package/dist/lib/doctor/fixtures/schema.js +3 -1
  154. package/dist/lib/doctor/json-output.d.ts +1 -17
  155. package/dist/lib/doctor/json-output.js +2 -7
  156. package/dist/lib/doctor/platform.d.ts +26 -0
  157. package/dist/lib/doctor/platform.js +5 -5
  158. package/dist/lib/doctor/registry.d.ts +0 -14
  159. package/dist/lib/doctor/registry.js +0 -71
  160. package/dist/lib/doctor/report.js +1 -1
  161. package/dist/lib/doctor/types.d.ts +0 -5
  162. package/dist/lib/doctor/types.js +0 -20
  163. package/dist/lib/flag-registry-worker.js +1 -12
  164. package/dist/lib/flag-registry.d.ts +6 -26
  165. package/dist/lib/flag-registry.js +16 -133
  166. package/dist/lib/index-render/companies.d.ts +1 -4
  167. package/dist/lib/index-render/companies.js +3 -66
  168. package/dist/lib/index-render/company-knowledge.js +17 -80
  169. package/dist/lib/index-render/index.d.ts +0 -1
  170. package/dist/lib/index-render/index.js +1 -2
  171. package/dist/lib/index-render/projects.js +5 -82
  172. package/dist/lib/index-render/shared.d.ts +1 -13
  173. package/dist/lib/index-render/shared.js +2 -41
  174. package/dist/lib/mesh/api.d.ts +10 -103
  175. package/dist/lib/mesh/api.js +64 -334
  176. package/dist/lib/mesh/client.d.ts +2 -3
  177. package/dist/lib/mesh/client.js +2 -3
  178. package/dist/lib/mesh/live/backfill-held.d.ts +16 -67
  179. package/dist/lib/mesh/live/backfill-held.js +61 -415
  180. package/dist/lib/mesh/live/backoff.d.ts +2 -2
  181. package/dist/lib/mesh/live/backoff.js +3 -16
  182. package/dist/lib/mesh/live/daemon/board-refresh.d.ts +1 -7
  183. package/dist/lib/mesh/live/daemon/board-refresh.js +30 -78
  184. package/dist/lib/mesh/live/daemon/credentials.d.ts +10 -64
  185. package/dist/lib/mesh/live/daemon/credentials.js +20 -270
  186. package/dist/lib/mesh/live/daemon/doctor.d.ts +0 -51
  187. package/dist/lib/mesh/live/daemon/doctor.js +6 -180
  188. package/dist/lib/mesh/live/daemon/index.d.ts +10 -13
  189. package/dist/lib/mesh/live/daemon/index.js +6 -7
  190. package/dist/lib/mesh/live/daemon/install.d.ts +1 -255
  191. package/dist/lib/mesh/live/daemon/install.js +13 -811
  192. package/dist/lib/mesh/live/daemon/paths.d.ts +0 -2
  193. package/dist/lib/mesh/live/daemon/paths.js +0 -2
  194. package/dist/lib/mesh/live/daemon/presence.d.ts +5 -24
  195. package/dist/lib/mesh/live/daemon/presence.js +10 -79
  196. package/dist/lib/mesh/live/daemon/run.d.ts +2 -48
  197. package/dist/lib/mesh/live/daemon/run.js +33 -485
  198. package/dist/lib/mesh/live/daemon/state.d.ts +2 -19
  199. package/dist/lib/mesh/live/daemon/state.js +2 -34
  200. package/dist/lib/mesh/live/daemon/transcript-watch.d.ts +9 -45
  201. package/dist/lib/mesh/live/daemon/transcript-watch.js +31 -227
  202. package/dist/lib/mesh/live/emit-client.d.ts +0 -8
  203. package/dist/lib/mesh/live/emit-client.js +8 -23
  204. package/dist/lib/mesh/live/emit-evidence.d.ts +0 -19
  205. package/dist/lib/mesh/live/emit-evidence.js +2 -20
  206. package/dist/lib/mesh/live/emit.d.ts +0 -9
  207. package/dist/lib/mesh/live/emit.js +2 -28
  208. package/dist/lib/mesh/live/enqueue.d.ts +0 -5
  209. package/dist/lib/mesh/live/enqueue.js +0 -19
  210. package/dist/lib/mesh/live/flush.d.ts +5 -17
  211. package/dist/lib/mesh/live/flush.js +38 -391
  212. package/dist/lib/mesh/live/format-spool-line.d.ts +2 -5
  213. package/dist/lib/mesh/live/format-spool-line.js +0 -10
  214. package/dist/lib/mesh/live/paths.d.ts +0 -2
  215. package/dist/lib/mesh/live/paths.js +0 -4
  216. package/dist/lib/mesh/live/session-event.schema.json +1 -24
  217. package/dist/lib/mesh/live/session-events-client.d.ts +0 -2
  218. package/dist/lib/mesh/live/session-events-client.js +0 -26
  219. package/dist/lib/mesh/live/spool.d.ts +0 -19
  220. package/dist/lib/mesh/live/spool.js +3 -269
  221. package/dist/lib/mesh/live/validate-session-event.d.ts +1 -1
  222. package/dist/lib/mesh/live/validate-session-event.js +1 -1
  223. package/dist/lib/plan-limit-nag.d.ts +6 -102
  224. package/dist/lib/plan-limit-nag.js +43 -348
  225. package/dist/lib/scan-packages/index.d.ts +0 -2
  226. package/dist/lib/scan-packages/index.js +6 -168
  227. package/dist/lib/search-index/background.d.ts +1 -8
  228. package/dist/lib/search-index/background.js +200 -55
  229. package/dist/lib/search-index/index.d.ts +0 -12
  230. package/dist/lib/search-index/index.js +7 -153
  231. package/dist/lib/work-context/company.d.ts +20 -22
  232. package/dist/lib/work-context/company.js +40 -124
  233. package/dist/lib/work-context/config.d.ts +11 -58
  234. package/dist/lib/work-context/config.js +83 -334
  235. package/dist/lib/work-context/contract.d.ts +0 -10
  236. package/dist/lib/work-context/index.d.ts +25 -0
  237. package/dist/lib/work-context/index.js +21 -0
  238. package/dist/lib/work-context/outbox.d.ts +1 -14
  239. package/dist/lib/work-context/outbox.js +1 -87
  240. package/dist/lib/work-context/reconcile.d.ts +0 -15
  241. package/dist/lib/work-context/reconcile.js +25 -380
  242. package/dist/lib/work-context/state.d.ts +10 -93
  243. package/dist/lib/work-context/state.js +29 -342
  244. package/dist/lib/workers-registry/index.js +8 -62
  245. package/dist/main.d.ts +0 -12
  246. package/dist/main.js +73 -266
  247. package/dist/node-network-compat.d.ts +30 -2
  248. package/dist/node-network-compat.js +51 -4
  249. package/dist/node-preflight.d.ts +1 -7
  250. package/dist/node-preflight.js +5 -5
  251. package/dist/register-all.d.ts +29 -4
  252. package/dist/register-all.js +233 -4
  253. package/dist/run/discover-schemas.d.ts +1 -2
  254. package/dist/run/env-graph-guard.d.ts +2 -2
  255. package/dist/run/env-graph-guard.js +2 -5
  256. package/dist/run/hq-plugin.d.ts +0 -4
  257. package/dist/run/hq-plugin.js +8 -36
  258. package/dist/sentry-before-send.js +0 -80
  259. package/dist/sentry.d.ts +2 -8
  260. package/dist/sentry.js +13 -117
  261. package/dist/startup-registration.d.ts +2 -26
  262. package/dist/startup-registration.js +15 -116
  263. package/dist/utils/cli-telemetry.d.ts +1 -74
  264. package/dist/utils/cli-telemetry.js +7 -434
  265. package/dist/utils/client-health.d.ts +4 -0
  266. package/dist/utils/client-health.js +2 -2
  267. package/dist/utils/cognito-session.d.ts +0 -71
  268. package/dist/utils/cognito-session.js +27 -481
  269. package/dist/utils/contribution-table.d.ts +1 -1
  270. package/dist/utils/environmental-error.d.ts +0 -18
  271. package/dist/utils/environmental-error.js +7 -240
  272. package/dist/utils/expected-cli-error.d.ts +0 -2
  273. package/dist/utils/expected-cli-error.js +0 -4
  274. package/dist/utils/feedback-diagnostics.d.ts +1 -2
  275. package/dist/utils/feedback-log-bundle.d.ts +26 -51
  276. package/dist/utils/feedback-log-bundle.js +31 -211
  277. package/dist/utils/feedback-logs.d.ts +47 -18
  278. package/dist/utils/feedback-logs.js +21 -50
  279. package/dist/utils/feedback-screenshots.d.ts +1 -0
  280. package/dist/utils/feedback-screenshots.js +1 -1
  281. package/dist/utils/hq-roots.d.ts +2 -25
  282. package/dist/utils/hq-roots.js +7 -67
  283. package/dist/utils/incomplete-install-error.d.ts +19 -87
  284. package/dist/utils/incomplete-install-error.js +68 -319
  285. package/dist/utils/install-tree-torn.d.ts +24 -260
  286. package/dist/utils/install-tree-torn.js +51 -998
  287. package/dist/utils/large-file-guard.d.ts +10 -0
  288. package/dist/utils/large-file-guard.js +1 -1
  289. package/dist/utils/local-files-overview.d.ts +8 -4
  290. package/dist/utils/local-files-overview.js +7 -48
  291. package/dist/utils/login-provider.d.ts +0 -7
  292. package/dist/utils/login-provider.js +0 -34
  293. package/dist/utils/pack-contributions.d.ts +9 -2
  294. package/dist/utils/pack-contributions.js +43 -6
  295. package/dist/utils/package-root-diagnostics.d.ts +1 -1
  296. package/dist/utils/people.d.ts +11 -7
  297. package/dist/utils/people.js +20 -5
  298. package/dist/utils/plan-gate-error.d.ts +10 -52
  299. package/dist/utils/plan-gate-error.js +41 -364
  300. package/dist/utils/qmd-model-download-error.d.ts +8 -0
  301. package/dist/utils/qmd-model-download-error.js +1 -1
  302. package/dist/utils/qmd-query-document-error.d.ts +6 -0
  303. package/dist/utils/qmd-query-document-error.js +1 -1
  304. package/dist/utils/redact-error-text.js +1 -2
  305. package/dist/utils/run-bundled-script.d.ts +0 -6
  306. package/dist/utils/run-bundled-script.js +4 -117
  307. package/dist/utils/secrets-cache.d.ts +3 -7
  308. package/dist/utils/secrets-cache.js +14 -162
  309. package/dist/utils/self-update.d.ts +1 -34
  310. package/dist/utils/self-update.js +42 -660
  311. package/dist/utils/sentry-fingerprint.d.ts +1 -23
  312. package/dist/utils/sentry-fingerprint.js +31 -223
  313. package/dist/utils/team-upgrade.d.ts +1 -1
  314. package/dist/utils/team-upgrade.js +3 -4
  315. package/dist/utils/vault-api.d.ts +1 -21
  316. package/dist/utils/vault-api.js +84 -251
  317. package/dist/utils/version-check.d.ts +1 -11
  318. package/dist/utils/version-check.js +3 -32
  319. package/dist/utils/version-gate.d.ts +17 -101
  320. package/dist/utils/version-gate.js +70 -645
  321. package/dist/utils/windows-spawn.d.ts +0 -6
  322. package/dist/utils/windows-spawn.js +0 -37
  323. package/package.json +8 -20
  324. package/README.md +0 -113
  325. package/assets/bot-workers/setup/context/USER-GUIDE.md +0 -404
  326. package/assets/bot-workers/setup/context/quick-reference.md +0 -199
  327. package/assets/bot-workers/setup/skills/agents-and-team.md +0 -167
  328. package/assets/bot-workers/setup/skills/explain-hq.md +0 -35
  329. package/assets/bot-workers/setup/skills/first-company.md +0 -74
  330. package/assets/bot-workers/setup/skills/joining-a-team.md +0 -125
  331. package/assets/bot-workers/setup/skills/pricing.md +0 -92
  332. package/assets/bot-workers/setup/skills/standing-help.md +0 -81
  333. package/assets/bot-workers/setup/skills/your-business.md +0 -281
  334. package/assets/bot-workers/setup/worker.yaml +0 -791
  335. package/assets/lanes-hooks/hq-lanes-drain.json +0 -15
  336. package/assets/lanes-hooks/hq-lanes-drain.mjs +0 -275
  337. package/assets/lanes-hooks/hq-lanes-drain.sh +0 -21
  338. package/assets/lanes-reconcile/hq-lanes-reconcile.service +0 -11
  339. package/assets/lanes-reconcile/hq-lanes-reconcile.timer +0 -12
  340. package/assets/scaffold/.claude/hooks/validate-policy-frontmatter.sh +0 -485
  341. package/assets/scaffold/core/scripts/audit-log.sh +0 -384
  342. package/assets/scaffold/core/scripts/clean-worktree-reconcile-handoff.sh +0 -171
  343. package/assets/scaffold/core/scripts/eval-trigger.sh +0 -193
  344. package/assets/scaffold/core/scripts/git-pack-extension-check.sh +0 -164
  345. package/assets/scaffold/core/scripts/handoff-finalize.sh +0 -688
  346. package/assets/scaffold/core/scripts/handoff-open-steps.sh +0 -81
  347. package/assets/scaffold/core/scripts/handoff-post.sh +0 -252
  348. package/assets/scaffold/core/scripts/hq-delegate-bundle.sh +0 -307
  349. package/assets/scaffold/core/scripts/hq-delegate-grant.sh +0 -252
  350. package/assets/scaffold/core/scripts/hq-delegate-pickup.sh +0 -99
  351. package/assets/scaffold/core/scripts/hq-delegate-publish.sh +0 -91
  352. package/assets/scaffold/core/scripts/hq-delegate-repo.sh +0 -158
  353. package/assets/scaffold/core/scripts/hq-delegate-resolve.sh +0 -145
  354. package/assets/scaffold/core/scripts/hq-delegate-secrets.sh +0 -129
  355. package/assets/scaffold/core/scripts/hq-delegate-send.sh +0 -259
  356. package/assets/scaffold/core/scripts/hq-delegate-transfer.sh +0 -175
  357. package/assets/scaffold/core/scripts/hq-delegate-verify.sh +0 -238
  358. package/assets/scaffold/core/scripts/hq-dm-bind.sh +0 -585
  359. package/assets/scaffold/core/scripts/hq-job-notify.sh +0 -389
  360. package/assets/scaffold/core/scripts/hq-job-probe.sh +0 -835
  361. package/assets/scaffold/core/scripts/hq-job-remediate.sh +0 -359
  362. package/assets/scaffold/core/scripts/hq-job-run.sh +0 -1025
  363. package/assets/scaffold/core/scripts/hq-pin.sh +0 -118
  364. package/assets/scaffold/core/scripts/jobs-schedule-parse.sh +0 -310
  365. package/assets/scaffold/core/scripts/jobs-validate.sh +0 -451
  366. package/assets/scaffold/core/scripts/knowledge-prefs.sh +0 -55
  367. package/assets/scaffold/core/scripts/lib/portable.sh +0 -211
  368. package/assets/scaffold/core/scripts/lib/secret-patterns.sh +0 -58
  369. package/assets/scaffold/core/scripts/ontology-audience-grant.sh +0 -81
  370. package/assets/scaffold/core/scripts/ontology-brief.mjs +0 -93
  371. package/assets/scaffold/core/scripts/ontology-candidate.sh +0 -100
  372. package/assets/scaffold/core/scripts/ontology-garden.mjs +0 -238
  373. package/assets/scaffold/core/scripts/ontology-source-worklist.sh +0 -79
  374. package/assets/scaffold/core/scripts/outpost-jobs-reconcile.sh +0 -834
  375. package/assets/scaffold/core/scripts/policy-age-report.sh +0 -156
  376. package/assets/scaffold/core/scripts/policy-retire.sh +0 -199
  377. package/assets/scaffold/core/scripts/qmd-reindex-bg.sh +0 -40
  378. package/assets/scaffold/core/scripts/read-policy-frontmatter.sh +0 -32
  379. package/assets/scaffold/core/scripts/refresh-vault-access.sh +0 -188
  380. package/assets/scaffold/core/scripts/resolve-company.sh +0 -199
  381. package/assets/scaffold/core/scripts/resume-thread-lock.sh +0 -285
  382. package/assets/scaffold/core/scripts/source-yaml-validate.sh +0 -36
  383. package/assets/scaffold/core/scripts/verify-story-deliverables.sh +0 -148
  384. package/assets/scaffold/core/scripts/work-mesh-live-bind-trusted.sh +0 -152
  385. package/assets/scaffold/core/scripts/worktree-gc.sh +0 -362
  386. package/contracts/preflight/v1/fixtures.json +0 -87
  387. package/contracts/preflight/v1/schema.json +0 -58
  388. package/dist/command-catalog.generated.d.ts +0 -10655
  389. package/dist/command-catalog.generated.js +0 -13737
  390. package/dist/command-registration-plan.d.ts +0 -474
  391. package/dist/command-registration-plan.js +0 -136
  392. package/dist/commands/agent-enroll.d.ts +0 -146
  393. package/dist/commands/agent-enroll.js +0 -401
  394. package/dist/commands/agent-inbox.d.ts +0 -9
  395. package/dist/commands/agent-inbox.js +0 -102
  396. package/dist/commands/agent-kit.d.ts +0 -87
  397. package/dist/commands/agent-kit.js +0 -480
  398. package/dist/commands/agent-mcp.d.ts +0 -24
  399. package/dist/commands/agent-mcp.js +0 -127
  400. package/dist/commands/agent-probe.d.ts +0 -77
  401. package/dist/commands/agent-probe.js +0 -335
  402. package/dist/commands/agent.d.ts +0 -13
  403. package/dist/commands/agent.js +0 -40
  404. package/dist/commands/billing-sponsor.d.ts +0 -83
  405. package/dist/commands/billing-sponsor.js +0 -344
  406. package/dist/commands/bot-companies.d.ts +0 -40
  407. package/dist/commands/bot-companies.js +0 -64
  408. package/dist/commands/bot-continuity.d.ts +0 -28
  409. package/dist/commands/bot-continuity.js +0 -68
  410. package/dist/commands/bot-jobs.d.ts +0 -127
  411. package/dist/commands/bot-jobs.js +0 -454
  412. package/dist/commands/bot.d.ts +0 -278
  413. package/dist/commands/bot.js +0 -1982
  414. package/dist/commands/cloud-retire.d.ts +0 -51
  415. package/dist/commands/cloud-retire.js +0 -154
  416. package/dist/commands/core-audit-log-native.d.ts +0 -9
  417. package/dist/commands/core-audit-log-native.js +0 -257
  418. package/dist/commands/core-checkpoint-gate-setting.d.ts +0 -59
  419. package/dist/commands/core-checkpoint-gate-setting.js +0 -163
  420. package/dist/commands/core-checkpoint-stop-gate-native.d.ts +0 -34
  421. package/dist/commands/core-checkpoint-stop-gate-native.js +0 -725
  422. package/dist/commands/core-command-catalog.d.ts +0 -34
  423. package/dist/commands/core-command-catalog.js +0 -62
  424. package/dist/commands/core-company-index-scope-flag.d.ts +0 -3
  425. package/dist/commands/core-company-index-scope-flag.js +0 -6
  426. package/dist/commands/core-delegate-w1b.d.ts +0 -10
  427. package/dist/commands/core-delegate-w1b.js +0 -1219
  428. package/dist/commands/core-delegate.d.ts +0 -46
  429. package/dist/commands/core-delegate.js +0 -1040
  430. package/dist/commands/core-dm-bind-native.d.ts +0 -32
  431. package/dist/commands/core-dm-bind-native.js +0 -668
  432. package/dist/commands/core-git-pack-extension-check-native.d.ts +0 -22
  433. package/dist/commands/core-git-pack-extension-check-native.js +0 -190
  434. package/dist/commands/core-handoff-fast.d.ts +0 -18
  435. package/dist/commands/core-handoff-fast.js +0 -104
  436. package/dist/commands/core-handoff-open-steps.d.ts +0 -21
  437. package/dist/commands/core-handoff-open-steps.js +0 -264
  438. package/dist/commands/core-handoff.d.ts +0 -24
  439. package/dist/commands/core-handoff.js +0 -1144
  440. package/dist/commands/core-hq-session-native.d.ts +0 -39
  441. package/dist/commands/core-hq-session-native.js +0 -579
  442. package/dist/commands/core-job-native-utils.d.ts +0 -6
  443. package/dist/commands/core-job-native-utils.js +0 -80
  444. package/dist/commands/core-job-native.d.ts +0 -5
  445. package/dist/commands/core-job-native.js +0 -16
  446. package/dist/commands/core-job-notify-native.d.ts +0 -36
  447. package/dist/commands/core-job-notify-native.js +0 -359
  448. package/dist/commands/core-job-probe-native.d.ts +0 -45
  449. package/dist/commands/core-job-probe-native.js +0 -564
  450. package/dist/commands/core-job-remediate-native.d.ts +0 -26
  451. package/dist/commands/core-job-remediate-native.js +0 -374
  452. package/dist/commands/core-job-remote-launcher.d.ts +0 -7
  453. package/dist/commands/core-job-remote-launcher.js +0 -51
  454. package/dist/commands/core-job-run-native.d.ts +0 -47
  455. package/dist/commands/core-job-run-native.js +0 -1215
  456. package/dist/commands/core-jobs-native.d.ts +0 -25
  457. package/dist/commands/core-jobs-native.js +0 -1339
  458. package/dist/commands/core-knowledge-prefs.d.ts +0 -12
  459. package/dist/commands/core-knowledge-prefs.js +0 -137
  460. package/dist/commands/core-native-handoff-flag.d.ts +0 -4
  461. package/dist/commands/core-native-handoff-flag.js +0 -7
  462. package/dist/commands/core-native-jobs-flag.d.ts +0 -4
  463. package/dist/commands/core-native-jobs-flag.js +0 -7
  464. package/dist/commands/core-native-policy-flag.d.ts +0 -9
  465. package/dist/commands/core-native-policy-flag.js +0 -12
  466. package/dist/commands/core-native-session-flag.d.ts +0 -4
  467. package/dist/commands/core-native-session-flag.js +0 -7
  468. package/dist/commands/core-native-utilities-flag.d.ts +0 -4
  469. package/dist/commands/core-native-utilities-flag.js +0 -7
  470. package/dist/commands/core-native-utilities.d.ts +0 -29
  471. package/dist/commands/core-native-utilities.js +0 -54
  472. package/dist/commands/core-native-worker-skills-flag.d.ts +0 -4
  473. package/dist/commands/core-native-worker-skills-flag.js +0 -7
  474. package/dist/commands/core-ontology-native.d.ts +0 -17
  475. package/dist/commands/core-ontology-native.js +0 -916
  476. package/dist/commands/core-ontology.d.ts +0 -66
  477. package/dist/commands/core-ontology.js +0 -430
  478. package/dist/commands/core-pin-native.d.ts +0 -14
  479. package/dist/commands/core-pin-native.js +0 -236
  480. package/dist/commands/core-policy-frontmatter.d.ts +0 -8
  481. package/dist/commands/core-policy-frontmatter.js +0 -52
  482. package/dist/commands/core-policy.d.ts +0 -14
  483. package/dist/commands/core-policy.js +0 -1018
  484. package/dist/commands/core-refresh-vault-access-native.d.ts +0 -20
  485. package/dist/commands/core-refresh-vault-access-native.js +0 -229
  486. package/dist/commands/core-resolve-company-command.d.ts +0 -4
  487. package/dist/commands/core-resolve-company-command.js +0 -42
  488. package/dist/commands/core-resolve-company-native.d.ts +0 -28
  489. package/dist/commands/core-resolve-company-native.js +0 -408
  490. package/dist/commands/core-work-mesh-bind-trusted-native.d.ts +0 -32
  491. package/dist/commands/core-work-mesh-bind-trusted-native.js +0 -190
  492. package/dist/commands/core-worker-lint-native.d.ts +0 -4
  493. package/dist/commands/core-worker-lint-native.js +0 -160
  494. package/dist/commands/core-worker-share-native.d.ts +0 -5
  495. package/dist/commands/core-worker-share-native.js +0 -260
  496. package/dist/commands/core-worker-skills-command.d.ts +0 -8
  497. package/dist/commands/core-worker-skills-command.js +0 -33
  498. package/dist/commands/core-worker-skills-runtime.d.ts +0 -33
  499. package/dist/commands/core-worker-skills-runtime.js +0 -86
  500. package/dist/commands/daemon.d.ts +0 -63
  501. package/dist/commands/daemon.js +0 -877
  502. package/dist/commands/deploy-comments.d.ts +0 -3
  503. package/dist/commands/deploy-comments.js +0 -162
  504. package/dist/commands/lanes-accounts.d.ts +0 -28
  505. package/dist/commands/lanes-accounts.js +0 -595
  506. package/dist/commands/lanes-autopilot.d.ts +0 -11
  507. package/dist/commands/lanes-autopilot.js +0 -336
  508. package/dist/commands/lanes-checks.d.ts +0 -51
  509. package/dist/commands/lanes-checks.js +0 -941
  510. package/dist/commands/lanes-hold.d.ts +0 -43
  511. package/dist/commands/lanes-hold.js +0 -655
  512. package/dist/commands/lanes-kpis.d.ts +0 -11
  513. package/dist/commands/lanes-kpis.js +0 -34
  514. package/dist/commands/lanes-message.d.ts +0 -9
  515. package/dist/commands/lanes-message.js +0 -934
  516. package/dist/commands/lanes-move.d.ts +0 -12
  517. package/dist/commands/lanes-move.js +0 -397
  518. package/dist/commands/lanes-questions.d.ts +0 -36
  519. package/dist/commands/lanes-questions.js +0 -1004
  520. package/dist/commands/lanes-report.d.ts +0 -11
  521. package/dist/commands/lanes-report.js +0 -333
  522. package/dist/commands/lanes-resume.d.ts +0 -6
  523. package/dist/commands/lanes-resume.js +0 -561
  524. package/dist/commands/lanes-review.d.ts +0 -10
  525. package/dist/commands/lanes-review.js +0 -56
  526. package/dist/commands/lanes-shared.d.ts +0 -448
  527. package/dist/commands/lanes-shared.js +0 -170
  528. package/dist/commands/lanes-stories.d.ts +0 -15
  529. package/dist/commands/lanes-stories.js +0 -347
  530. package/dist/commands/lanes-watch.d.ts +0 -7
  531. package/dist/commands/lanes-watch.js +0 -216
  532. package/dist/commands/lanes.d.ts +0 -149
  533. package/dist/commands/lanes.js +0 -8843
  534. package/dist/commands/monitor.d.ts +0 -58
  535. package/dist/commands/monitor.js +0 -980
  536. package/dist/commands/onboard-bot-membership.d.ts +0 -32
  537. package/dist/commands/onboard-bot-membership.js +0 -40
  538. package/dist/commands/onboard-create-identity.d.ts +0 -26
  539. package/dist/commands/onboard-create-identity.js +0 -23
  540. package/dist/commands/outpost-pruner.d.ts +0 -3
  541. package/dist/commands/outpost-pruner.js +0 -125
  542. package/dist/commands/personal-connector-settings-flag.d.ts +0 -4
  543. package/dist/commands/personal-connector-settings-flag.js +0 -7
  544. package/dist/commands/personal-targeted-push-flag.d.ts +0 -4
  545. package/dist/commands/personal-targeted-push-flag.js +0 -7
  546. package/dist/commands/personal-targeted-push-paths.d.ts +0 -3
  547. package/dist/commands/personal-targeted-push-paths.js +0 -67
  548. package/dist/commands/report.d.ts +0 -19
  549. package/dist/commands/report.js +0 -537
  550. package/dist/commands/run-feature-telemetry.d.ts +0 -3
  551. package/dist/commands/run-feature-telemetry.js +0 -6
  552. package/dist/commands/staff/reset-test-account.d.ts +0 -110
  553. package/dist/commands/staff/reset-test-account.js +0 -268
  554. package/dist/commands/staff/test-account.d.ts +0 -51
  555. package/dist/commands/staff/test-account.js +0 -196
  556. package/dist/commands/vault-retention-flag.d.ts +0 -3
  557. package/dist/commands/vault-retention-flag.js +0 -9
  558. package/dist/commands/vault-retention.d.ts +0 -11
  559. package/dist/commands/vault-retention.js +0 -69
  560. package/dist/commands/version.d.ts +0 -10
  561. package/dist/commands/version.js +0 -11
  562. package/dist/fast-scaffold.d.ts +0 -84
  563. package/dist/fast-scaffold.js +0 -353
  564. package/dist/lanes-drain-hook.d.ts +0 -14
  565. package/dist/lanes-drain-hook.js +0 -203
  566. package/dist/lib/agent-kit/adopt-identity.d.ts +0 -27
  567. package/dist/lib/agent-kit/adopt-identity.js +0 -60
  568. package/dist/lib/agent-kit/attachment-download.d.ts +0 -24
  569. package/dist/lib/agent-kit/attachment-download.js +0 -47
  570. package/dist/lib/agent-kit/creds.d.ts +0 -106
  571. package/dist/lib/agent-kit/creds.js +0 -163
  572. package/dist/lib/agent-kit/fallback.d.ts +0 -78
  573. package/dist/lib/agent-kit/fallback.js +0 -210
  574. package/dist/lib/agent-kit/inbox-state.d.ts +0 -83
  575. package/dist/lib/agent-kit/inbox-state.js +0 -159
  576. package/dist/lib/agent-kit/kit-config.d.ts +0 -56
  577. package/dist/lib/agent-kit/kit-config.js +0 -65
  578. package/dist/lib/agent-kit/log.d.ts +0 -16
  579. package/dist/lib/agent-kit/log.js +0 -46
  580. package/dist/lib/agent-kit/mcp/attachments.d.ts +0 -126
  581. package/dist/lib/agent-kit/mcp/attachments.js +0 -222
  582. package/dist/lib/agent-kit/mcp/jsonrpc.d.ts +0 -75
  583. package/dist/lib/agent-kit/mcp/jsonrpc.js +0 -164
  584. package/dist/lib/agent-kit/mcp/tools.d.ts +0 -64
  585. package/dist/lib/agent-kit/mcp/tools.js +0 -397
  586. package/dist/lib/agent-kit/paths.d.ts +0 -65
  587. package/dist/lib/agent-kit/paths.js +0 -118
  588. package/dist/lib/agent-kit/private-file.d.ts +0 -29
  589. package/dist/lib/agent-kit/private-file.js +0 -91
  590. package/dist/lib/agent-kit/run/heartbeat.d.ts +0 -72
  591. package/dist/lib/agent-kit/run/heartbeat.js +0 -128
  592. package/dist/lib/agent-kit/run/inbox.d.ts +0 -76
  593. package/dist/lib/agent-kit/run/inbox.js +0 -205
  594. package/dist/lib/agent-kit/run/supervisor.d.ts +0 -35
  595. package/dist/lib/agent-kit/run/supervisor.js +0 -85
  596. package/dist/lib/agent-kit/run/sync.d.ts +0 -33
  597. package/dist/lib/agent-kit/run/sync.js +0 -58
  598. package/dist/lib/agent-kit/services.d.ts +0 -31
  599. package/dist/lib/agent-kit/services.js +0 -55
  600. package/dist/lib/agent-kit/skills.d.ts +0 -18
  601. package/dist/lib/agent-kit/skills.js +0 -151
  602. package/dist/lib/agent-kit/wake.d.ts +0 -83
  603. package/dist/lib/agent-kit/wake.js +0 -243
  604. package/dist/lib/agents/model-catalog.d.ts +0 -62
  605. package/dist/lib/agents/model-catalog.js +0 -275
  606. package/dist/lib/auth-login-provider-state.d.ts +0 -8
  607. package/dist/lib/auth-login-provider-state.js +0 -63
  608. package/dist/lib/aws-sdk-node-warning-output.d.ts +0 -12
  609. package/dist/lib/aws-sdk-node-warning-output.js +0 -22
  610. package/dist/lib/billing/free-month.d.ts +0 -18
  611. package/dist/lib/billing/free-month.js +0 -31
  612. package/dist/lib/billing/plan-limit-refusals.d.ts +0 -69
  613. package/dist/lib/billing/plan-limit-refusals.js +0 -187
  614. package/dist/lib/billing/plan-limit-upgrade-url.d.ts +0 -11
  615. package/dist/lib/billing/plan-limit-upgrade-url.js +0 -66
  616. package/dist/lib/billing/plan-lock.d.ts +0 -143
  617. package/dist/lib/billing/plan-lock.js +0 -439
  618. package/dist/lib/bot/api.d.ts +0 -349
  619. package/dist/lib/bot/api.js +0 -316
  620. package/dist/lib/bot/attachments.d.ts +0 -45
  621. package/dist/lib/bot/attachments.js +0 -89
  622. package/dist/lib/bot/cli-update.d.ts +0 -138
  623. package/dist/lib/bot/cli-update.js +0 -278
  624. package/dist/lib/bot/company-bind.d.ts +0 -27
  625. package/dist/lib/bot/company-bind.js +0 -62
  626. package/dist/lib/bot/config.d.ts +0 -153
  627. package/dist/lib/bot/config.js +0 -233
  628. package/dist/lib/bot/continuity-download.d.ts +0 -28
  629. package/dist/lib/bot/continuity-download.js +0 -75
  630. package/dist/lib/bot/continuity-install.d.ts +0 -14
  631. package/dist/lib/bot/continuity-install.js +0 -101
  632. package/dist/lib/bot/continuity.d.ts +0 -67
  633. package/dist/lib/bot/continuity.js +0 -301
  634. package/dist/lib/bot/creds.d.ts +0 -24
  635. package/dist/lib/bot/creds.js +0 -51
  636. package/dist/lib/bot/daemon.d.ts +0 -173
  637. package/dist/lib/bot/daemon.js +0 -552
  638. package/dist/lib/bot/inbox-poll-backoff-flag.d.ts +0 -24
  639. package/dist/lib/bot/inbox-poll-backoff-flag.js +0 -135
  640. package/dist/lib/bot/inbox-state.d.ts +0 -18
  641. package/dist/lib/bot/inbox-state.js +0 -51
  642. package/dist/lib/bot/index.d.ts +0 -23
  643. package/dist/lib/bot/index.js +0 -23
  644. package/dist/lib/bot/inflight.d.ts +0 -119
  645. package/dist/lib/bot/inflight.js +0 -83
  646. package/dist/lib/bot/job-completions.d.ts +0 -89
  647. package/dist/lib/bot/job-completions.js +0 -132
  648. package/dist/lib/bot/job-run.d.ts +0 -109
  649. package/dist/lib/bot/job-run.js +0 -246
  650. package/dist/lib/bot/local-config.d.ts +0 -61
  651. package/dist/lib/bot/local-config.js +0 -145
  652. package/dist/lib/bot/local-jobs.d.ts +0 -89
  653. package/dist/lib/bot/local-jobs.js +0 -459
  654. package/dist/lib/bot/local-name.d.ts +0 -54
  655. package/dist/lib/bot/local-name.js +0 -114
  656. package/dist/lib/bot/log.d.ts +0 -13
  657. package/dist/lib/bot/log.js +0 -59
  658. package/dist/lib/bot/owner-context.d.ts +0 -79
  659. package/dist/lib/bot/owner-context.js +0 -175
  660. package/dist/lib/bot/paths.d.ts +0 -76
  661. package/dist/lib/bot/paths.js +0 -131
  662. package/dist/lib/bot/progress.d.ts +0 -132
  663. package/dist/lib/bot/progress.js +0 -289
  664. package/dist/lib/bot/promote.d.ts +0 -16
  665. package/dist/lib/bot/promote.js +0 -106
  666. package/dist/lib/bot/promotion-hold.d.ts +0 -24
  667. package/dist/lib/bot/promotion-hold.js +0 -103
  668. package/dist/lib/bot/promotion-receipt.d.ts +0 -9
  669. package/dist/lib/bot/promotion-receipt.js +0 -56
  670. package/dist/lib/bot/promotion-upload.d.ts +0 -16
  671. package/dist/lib/bot/promotion-upload.js +0 -80
  672. package/dist/lib/bot/prompt.d.ts +0 -136
  673. package/dist/lib/bot/prompt.js +0 -433
  674. package/dist/lib/bot/room-policy.d.ts +0 -63
  675. package/dist/lib/bot/room-policy.js +0 -91
  676. package/dist/lib/bot/run.d.ts +0 -217
  677. package/dist/lib/bot/run.js +0 -1869
  678. package/dist/lib/bot/runnable.d.ts +0 -51
  679. package/dist/lib/bot/runnable.js +0 -65
  680. package/dist/lib/bot/runtime/claude.d.ts +0 -50
  681. package/dist/lib/bot/runtime/claude.js +0 -170
  682. package/dist/lib/bot/runtime/codex.d.ts +0 -28
  683. package/dist/lib/bot/runtime/codex.js +0 -153
  684. package/dist/lib/bot/runtime/grok-acp.d.ts +0 -40
  685. package/dist/lib/bot/runtime/grok-acp.js +0 -265
  686. package/dist/lib/bot/runtime/grok.d.ts +0 -41
  687. package/dist/lib/bot/runtime/grok.js +0 -169
  688. package/dist/lib/bot/runtime/index.d.ts +0 -36
  689. package/dist/lib/bot/runtime/index.js +0 -417
  690. package/dist/lib/bot/runtime/messages-stream.d.ts +0 -56
  691. package/dist/lib/bot/runtime/messages-stream.js +0 -194
  692. package/dist/lib/bot/runtime/sanitize.d.ts +0 -18
  693. package/dist/lib/bot/runtime/sanitize.js +0 -28
  694. package/dist/lib/bot/runtime/types.d.ts +0 -159
  695. package/dist/lib/bot/runtime/types.js +0 -51
  696. package/dist/lib/bot/runtime/windows.d.ts +0 -10
  697. package/dist/lib/bot/runtime/windows.js +0 -53
  698. package/dist/lib/bot/runtime-sign-in.d.ts +0 -24
  699. package/dist/lib/bot/runtime-sign-in.js +0 -31
  700. package/dist/lib/bot/scaffold.d.ts +0 -38
  701. package/dist/lib/bot/scaffold.js +0 -94
  702. package/dist/lib/bot/self-heal.d.ts +0 -52
  703. package/dist/lib/bot/self-heal.js +0 -79
  704. package/dist/lib/bot/self-process.d.ts +0 -19
  705. package/dist/lib/bot/self-process.js +0 -35
  706. package/dist/lib/bot/session.d.ts +0 -19
  707. package/dist/lib/bot/session.js +0 -39
  708. package/dist/lib/bot/setup-explain.d.ts +0 -64
  709. package/dist/lib/bot/setup-explain.js +0 -141
  710. package/dist/lib/bot/split.d.ts +0 -32
  711. package/dist/lib/bot/split.js +0 -241
  712. package/dist/lib/bot/status.d.ts +0 -57
  713. package/dist/lib/bot/status.js +0 -66
  714. package/dist/lib/bot/worker-source.d.ts +0 -66
  715. package/dist/lib/bot/worker-source.js +0 -283
  716. package/dist/lib/checkpoint-ontology/aliases.d.ts +0 -17
  717. package/dist/lib/checkpoint-ontology/aliases.js +0 -44
  718. package/dist/lib/checkpoint-ontology/apply.d.ts +0 -110
  719. package/dist/lib/checkpoint-ontology/apply.js +0 -777
  720. package/dist/lib/checkpoint-ontology/company-brief.d.ts +0 -18
  721. package/dist/lib/checkpoint-ontology/company-brief.js +0 -337
  722. package/dist/lib/checkpoint-ontology/company.d.ts +0 -44
  723. package/dist/lib/checkpoint-ontology/company.js +0 -118
  724. package/dist/lib/checkpoint-ontology/drop-aliases.d.ts +0 -41
  725. package/dist/lib/checkpoint-ontology/drop-aliases.js +0 -76
  726. package/dist/lib/checkpoint-ontology/entity-file.d.ts +0 -109
  727. package/dist/lib/checkpoint-ontology/entity-file.js +0 -371
  728. package/dist/lib/checkpoint-ontology/identity.d.ts +0 -38
  729. package/dist/lib/checkpoint-ontology/identity.js +0 -95
  730. package/dist/lib/checkpoint-ontology/merge-copies.d.ts +0 -199
  731. package/dist/lib/checkpoint-ontology/merge-copies.js +0 -1086
  732. package/dist/lib/checkpoint-ontology/multi-writer.d.ts +0 -101
  733. package/dist/lib/checkpoint-ontology/multi-writer.js +0 -394
  734. package/dist/lib/checkpoint-ontology/plan.d.ts +0 -193
  735. package/dist/lib/checkpoint-ontology/plan.js +0 -504
  736. package/dist/lib/checkpoint-ontology/queued-touches.d.ts +0 -29
  737. package/dist/lib/checkpoint-ontology/queued-touches.js +0 -193
  738. package/dist/lib/checkpoint-ontology/sync-client.d.ts +0 -38
  739. package/dist/lib/checkpoint-ontology/sync-client.js +0 -84
  740. package/dist/lib/checkpoint-ontology/tree.d.ts +0 -55
  741. package/dist/lib/checkpoint-ontology/tree.js +0 -198
  742. package/dist/lib/company-errors-sdk-warning-flag.d.ts +0 -5
  743. package/dist/lib/company-errors-sdk-warning-flag.js +0 -8
  744. package/dist/lib/core-utils/hook-timeout-debug-context-flag.d.ts +0 -20
  745. package/dist/lib/core-utils/hook-timeout-debug-context-flag.js +0 -81
  746. package/dist/lib/core-utils/jq-json-serializer.d.ts +0 -5
  747. package/dist/lib/core-utils/jq-json-serializer.js +0 -10
  748. package/dist/lib/core-utils/secret-patterns.d.ts +0 -43
  749. package/dist/lib/core-utils/secret-patterns.js +0 -34
  750. package/dist/lib/core-utils/sentry-report.d.ts +0 -114
  751. package/dist/lib/core-utils/sentry-report.js +0 -1034
  752. package/dist/lib/core-utils/timeout-guard-native.d.ts +0 -7
  753. package/dist/lib/core-utils/timeout-guard-native.js +0 -40
  754. package/dist/lib/core-utils/worktree-resume.d.ts +0 -20
  755. package/dist/lib/core-utils/worktree-resume.js +0 -1198
  756. package/dist/lib/daemon/catalog.d.ts +0 -134
  757. package/dist/lib/daemon/catalog.js +0 -358
  758. package/dist/lib/daemon/config.d.ts +0 -35
  759. package/dist/lib/daemon/config.js +0 -108
  760. package/dist/lib/daemon/flag.d.ts +0 -25
  761. package/dist/lib/daemon/flag.js +0 -59
  762. package/dist/lib/daemon/handoff.d.ts +0 -56
  763. package/dist/lib/daemon/handoff.js +0 -161
  764. package/dist/lib/daemon/hq-cloud.d.ts +0 -79
  765. package/dist/lib/daemon/hq-cloud.js +0 -183
  766. package/dist/lib/daemon/install.d.ts +0 -85
  767. package/dist/lib/daemon/install.js +0 -320
  768. package/dist/lib/daemon/legacy-sync-env.d.ts +0 -10
  769. package/dist/lib/daemon/legacy-sync-env.js +0 -58
  770. package/dist/lib/daemon/legacy.d.ts +0 -45
  771. package/dist/lib/daemon/legacy.js +0 -133
  772. package/dist/lib/daemon/lock.d.ts +0 -47
  773. package/dist/lib/daemon/lock.js +0 -138
  774. package/dist/lib/daemon/machine-type.d.ts +0 -50
  775. package/dist/lib/daemon/machine-type.js +0 -159
  776. package/dist/lib/daemon/migrate.d.ts +0 -77
  777. package/dist/lib/daemon/migrate.js +0 -265
  778. package/dist/lib/daemon/paths.d.ts +0 -24
  779. package/dist/lib/daemon/paths.js +0 -43
  780. package/dist/lib/daemon/protocol-tail.d.ts +0 -33
  781. package/dist/lib/daemon/protocol-tail.js +0 -131
  782. package/dist/lib/daemon/remote-control.d.ts +0 -74
  783. package/dist/lib/daemon/remote-control.js +0 -153
  784. package/dist/lib/daemon/requests.d.ts +0 -28
  785. package/dist/lib/daemon/requests.js +0 -65
  786. package/dist/lib/daemon/run.d.ts +0 -79
  787. package/dist/lib/daemon/run.js +0 -755
  788. package/dist/lib/daemon/succession.d.ts +0 -118
  789. package/dist/lib/daemon/succession.js +0 -263
  790. package/dist/lib/daemon/supervisor.d.ts +0 -132
  791. package/dist/lib/daemon/supervisor.js +0 -836
  792. package/dist/lib/daemon/sync-runner.d.ts +0 -58
  793. package/dist/lib/daemon/sync-runner.js +0 -277
  794. package/dist/lib/daemon/tools.d.ts +0 -52
  795. package/dist/lib/daemon/tools.js +0 -95
  796. package/dist/lib/daemon/updater.d.ts +0 -57
  797. package/dist/lib/daemon/updater.js +0 -163
  798. package/dist/lib/deploy-api.d.ts +0 -5
  799. package/dist/lib/deploy-api.js +0 -21
  800. package/dist/lib/deploy-apps.d.ts +0 -13
  801. package/dist/lib/deploy-apps.js +0 -29
  802. package/dist/lib/doctor/__testing__/run-doctor.d.ts +0 -8
  803. package/dist/lib/doctor/__testing__/run-doctor.js +0 -52
  804. package/dist/lib/doctor/checks/bots.d.ts +0 -13
  805. package/dist/lib/doctor/checks/bots.js +0 -189
  806. package/dist/lib/doctor/checks/scaffold-cli-floor.d.ts +0 -6
  807. package/dist/lib/doctor/checks/scaffold-cli-floor.js +0 -73
  808. package/dist/lib/doctor/checks/sync-runtime.d.ts +0 -11
  809. package/dist/lib/doctor/checks/sync-runtime.js +0 -216
  810. package/dist/lib/doctor/client-health-flag-token.d.ts +0 -15
  811. package/dist/lib/doctor/client-health-flag-token.js +0 -66
  812. package/dist/lib/doctor/client-health-reason-codes-flag.d.ts +0 -27
  813. package/dist/lib/doctor/client-health-reason-codes-flag.js +0 -106
  814. package/dist/lib/doctor/fix/json-output.d.ts +0 -28
  815. package/dist/lib/doctor/fix/json-output.js +0 -33
  816. package/dist/lib/doctor/fix/refresh-sync-outcome.d.ts +0 -12
  817. package/dist/lib/doctor/fix/refresh-sync-outcome.js +0 -25
  818. package/dist/lib/doctor/shared.d.ts +0 -8
  819. package/dist/lib/doctor/shared.js +0 -38
  820. package/dist/lib/doctor/stray-gate-entries.d.ts +0 -35
  821. package/dist/lib/doctor/stray-gate-entries.js +0 -83
  822. package/dist/lib/first-sync-next-step.d.ts +0 -37
  823. package/dist/lib/first-sync-next-step.js +0 -189
  824. package/dist/lib/flag-registry-endpoint.d.ts +0 -5
  825. package/dist/lib/flag-registry-endpoint.js +0 -9
  826. package/dist/lib/flag-registry-worker-source.generated.d.ts +0 -2
  827. package/dist/lib/flag-registry-worker-source.generated.js +0 -3
  828. package/dist/lib/flag-snapshot-file.d.ts +0 -20
  829. package/dist/lib/flag-snapshot-file.js +0 -91
  830. package/dist/lib/heartbeat-identity.d.ts +0 -30
  831. package/dist/lib/heartbeat-identity.js +0 -76
  832. package/dist/lib/lanes/account-home.d.ts +0 -8
  833. package/dist/lib/lanes/account-home.js +0 -10
  834. package/dist/lib/lanes/accounts.d.ts +0 -117
  835. package/dist/lib/lanes/accounts.js +0 -366
  836. package/dist/lib/lanes/admission-host.d.ts +0 -22
  837. package/dist/lib/lanes/admission-host.js +0 -37
  838. package/dist/lib/lanes/admission.d.ts +0 -26
  839. package/dist/lib/lanes/admission.js +0 -210
  840. package/dist/lib/lanes/approval-gate.d.ts +0 -8
  841. package/dist/lib/lanes/approval-gate.js +0 -90
  842. package/dist/lib/lanes/autopilot-metrics.d.ts +0 -99
  843. package/dist/lib/lanes/autopilot-metrics.js +0 -301
  844. package/dist/lib/lanes/autopilot-registry.d.ts +0 -62
  845. package/dist/lib/lanes/autopilot-registry.js +0 -192
  846. package/dist/lib/lanes/autopilot.d.ts +0 -120
  847. package/dist/lib/lanes/autopilot.js +0 -1061
  848. package/dist/lib/lanes/blocker-freshness.d.ts +0 -31
  849. package/dist/lib/lanes/blocker-freshness.js +0 -168
  850. package/dist/lib/lanes/checked-company-path.d.ts +0 -3
  851. package/dist/lib/lanes/checked-company-path.js +0 -39
  852. package/dist/lib/lanes/claude-balance.d.ts +0 -97
  853. package/dist/lib/lanes/claude-balance.js +0 -319
  854. package/dist/lib/lanes/compaction.d.ts +0 -110
  855. package/dist/lib/lanes/compaction.js +0 -293
  856. package/dist/lib/lanes/config.d.ts +0 -91
  857. package/dist/lib/lanes/config.js +0 -592
  858. package/dist/lib/lanes/constants.d.ts +0 -3
  859. package/dist/lib/lanes/constants.js +0 -3
  860. package/dist/lib/lanes/delivery-core.d.ts +0 -15
  861. package/dist/lib/lanes/delivery-core.js +0 -21
  862. package/dist/lib/lanes/delivery.d.ts +0 -180
  863. package/dist/lib/lanes/delivery.js +0 -443
  864. package/dist/lib/lanes/dropbox.d.ts +0 -129
  865. package/dist/lib/lanes/dropbox.js +0 -601
  866. package/dist/lib/lanes/effort.d.ts +0 -51
  867. package/dist/lib/lanes/effort.js +0 -113
  868. package/dist/lib/lanes/envelope-repair-dispatch.d.ts +0 -26
  869. package/dist/lib/lanes/envelope-repair-dispatch.js +0 -74
  870. package/dist/lib/lanes/errors.d.ts +0 -39
  871. package/dist/lib/lanes/errors.js +0 -72
  872. package/dist/lib/lanes/flag-keys.d.ts +0 -13
  873. package/dist/lib/lanes/flag-keys.js +0 -13
  874. package/dist/lib/lanes/grants.d.ts +0 -29
  875. package/dist/lib/lanes/grants.js +0 -166
  876. package/dist/lib/lanes/hire-grant-dispatch.d.ts +0 -29
  877. package/dist/lib/lanes/hire-grant-dispatch.js +0 -316
  878. package/dist/lib/lanes/hooks-install.d.ts +0 -82
  879. package/dist/lib/lanes/hooks-install.js +0 -479
  880. package/dist/lib/lanes/host-capacity.d.ts +0 -69
  881. package/dist/lib/lanes/host-capacity.js +0 -254
  882. package/dist/lib/lanes/hq-root.d.ts +0 -19
  883. package/dist/lib/lanes/hq-root.js +0 -28
  884. package/dist/lib/lanes/index.d.ts +0 -76
  885. package/dist/lib/lanes/index.js +0 -42
  886. package/dist/lib/lanes/keep-alive.d.ts +0 -68
  887. package/dist/lib/lanes/keep-alive.js +0 -343
  888. package/dist/lib/lanes/kr-freshness.d.ts +0 -76
  889. package/dist/lib/lanes/kr-freshness.js +0 -413
  890. package/dist/lib/lanes/lane-company.d.ts +0 -10
  891. package/dist/lib/lanes/lane-company.js +0 -41
  892. package/dist/lib/lanes/liveness.d.ts +0 -108
  893. package/dist/lib/lanes/liveness.js +0 -396
  894. package/dist/lib/lanes/machine-identity.d.ts +0 -34
  895. package/dist/lib/lanes/machine-identity.js +0 -92
  896. package/dist/lib/lanes/manager-status-gate.d.ts +0 -17
  897. package/dist/lib/lanes/manager-status-gate.js +0 -133
  898. package/dist/lib/lanes/merge-command.d.ts +0 -15
  899. package/dist/lib/lanes/merge-command.js +0 -629
  900. package/dist/lib/lanes/mesh-events.d.ts +0 -127
  901. package/dist/lib/lanes/mesh-events.js +0 -564
  902. package/dist/lib/lanes/message-replay.d.ts +0 -21
  903. package/dist/lib/lanes/message-replay.js +0 -122
  904. package/dist/lib/lanes/models.d.ts +0 -86
  905. package/dist/lib/lanes/models.js +0 -234
  906. package/dist/lib/lanes/monitor.d.ts +0 -48
  907. package/dist/lib/lanes/monitor.js +0 -428
  908. package/dist/lib/lanes/move-account.d.ts +0 -56
  909. package/dist/lib/lanes/move-account.js +0 -193
  910. package/dist/lib/lanes/orphans.d.ts +0 -25
  911. package/dist/lib/lanes/orphans.js +0 -102
  912. package/dist/lib/lanes/outpost-dispatch.d.ts +0 -147
  913. package/dist/lib/lanes/outpost-dispatch.js +0 -271
  914. package/dist/lib/lanes/outpost-hire-cache.d.ts +0 -22
  915. package/dist/lib/lanes/outpost-hire-cache.js +0 -153
  916. package/dist/lib/lanes/outpost-identity.d.ts +0 -33
  917. package/dist/lib/lanes/outpost-identity.js +0 -59
  918. package/dist/lib/lanes/outpost-profile-repin.d.ts +0 -17
  919. package/dist/lib/lanes/outpost-profile-repin.js +0 -84
  920. package/dist/lib/lanes/outpost-pruner-install.d.ts +0 -37
  921. package/dist/lib/lanes/outpost-pruner-install.js +0 -238
  922. package/dist/lib/lanes/outpost-registry-worker-approval.d.ts +0 -18
  923. package/dist/lib/lanes/outpost-registry-worker-approval.js +0 -109
  924. package/dist/lib/lanes/outpost-snapshot-memo.d.ts +0 -6
  925. package/dist/lib/lanes/outpost-snapshot-memo.js +0 -14
  926. package/dist/lib/lanes/outpost-worktree-pruner-flag.d.ts +0 -19
  927. package/dist/lib/lanes/outpost-worktree-pruner-flag.js +0 -86
  928. package/dist/lib/lanes/outpost-worktree-pruner.d.ts +0 -62
  929. package/dist/lib/lanes/outpost-worktree-pruner.js +0 -1201
  930. package/dist/lib/lanes/profile.d.ts +0 -69
  931. package/dist/lib/lanes/profile.js +0 -552
  932. package/dist/lib/lanes/provider-rejection.d.ts +0 -86
  933. package/dist/lib/lanes/provider-rejection.js +0 -286
  934. package/dist/lib/lanes/questions.d.ts +0 -90
  935. package/dist/lib/lanes/questions.js +0 -384
  936. package/dist/lib/lanes/quota.d.ts +0 -134
  937. package/dist/lib/lanes/quota.js +0 -471
  938. package/dist/lib/lanes/reconcile-install.d.ts +0 -90
  939. package/dist/lib/lanes/reconcile-install.js +0 -257
  940. package/dist/lib/lanes/reconcile.d.ts +0 -155
  941. package/dist/lib/lanes/reconcile.js +0 -3193
  942. package/dist/lib/lanes/registry-flag.d.ts +0 -29
  943. package/dist/lib/lanes/registry-flag.js +0 -139
  944. package/dist/lib/lanes/registry-persona.d.ts +0 -20
  945. package/dist/lib/lanes/registry-persona.js +0 -329
  946. package/dist/lib/lanes/registry.d.ts +0 -122
  947. package/dist/lib/lanes/registry.js +0 -570
  948. package/dist/lib/lanes/reviews.d.ts +0 -38
  949. package/dist/lib/lanes/reviews.js +0 -395
  950. package/dist/lib/lanes/runaway-tool-guard.d.ts +0 -38
  951. package/dist/lib/lanes/runaway-tool-guard.js +0 -284
  952. package/dist/lib/lanes/session-relink.d.ts +0 -25
  953. package/dist/lib/lanes/session-relink.js +0 -216
  954. package/dist/lib/lanes/spawn.d.ts +0 -350
  955. package/dist/lib/lanes/spawn.js +0 -2643
  956. package/dist/lib/lanes/ssm-command-context.d.ts +0 -12
  957. package/dist/lib/lanes/ssm-command-context.js +0 -52
  958. package/dist/lib/lanes/store.d.ts +0 -91
  959. package/dist/lib/lanes/store.js +0 -1811
  960. package/dist/lib/lanes/stories.d.ts +0 -23
  961. package/dist/lib/lanes/stories.js +0 -92
  962. package/dist/lib/lanes/story-ledger.d.ts +0 -80
  963. package/dist/lib/lanes/story-ledger.js +0 -815
  964. package/dist/lib/lanes/story-switch.d.ts +0 -21
  965. package/dist/lib/lanes/story-switch.js +0 -75
  966. package/dist/lib/lanes/text-scan.d.ts +0 -11
  967. package/dist/lib/lanes/text-scan.js +0 -103
  968. package/dist/lib/lanes/throttle.d.ts +0 -116
  969. package/dist/lib/lanes/throttle.js +0 -437
  970. package/dist/lib/lanes/timestamp.d.ts +0 -3
  971. package/dist/lib/lanes/timestamp.js +0 -26
  972. package/dist/lib/lanes/tracker-checks.d.ts +0 -77
  973. package/dist/lib/lanes/tracker-checks.js +0 -134
  974. package/dist/lib/lanes/tracker-report-state.d.ts +0 -10
  975. package/dist/lib/lanes/tracker-report-state.js +0 -124
  976. package/dist/lib/lanes/tracker-report.d.ts +0 -203
  977. package/dist/lib/lanes/tracker-report.js +0 -522
  978. package/dist/lib/lanes/tracker-store.d.ts +0 -18
  979. package/dist/lib/lanes/tracker-store.js +0 -106
  980. package/dist/lib/lanes/types.d.ts +0 -1020
  981. package/dist/lib/lanes/types.js +0 -417
  982. package/dist/lib/lanes/wait.d.ts +0 -39
  983. package/dist/lib/lanes/wait.js +0 -159
  984. package/dist/lib/lanes/watch.d.ts +0 -39
  985. package/dist/lib/lanes/watch.js +0 -249
  986. package/dist/lib/lanes/watcher-main.d.ts +0 -11
  987. package/dist/lib/lanes/watcher-main.js +0 -108
  988. package/dist/lib/lanes/watcher.d.ts +0 -287
  989. package/dist/lib/lanes/watcher.js +0 -1972
  990. package/dist/lib/mesh/live/daemon/config.d.ts +0 -36
  991. package/dist/lib/mesh/live/daemon/config.js +0 -120
  992. package/dist/lib/mesh/live/daemon/legacy-listen.d.ts +0 -43
  993. package/dist/lib/mesh/live/daemon/legacy-listen.js +0 -89
  994. package/dist/lib/mesh/live/daemon/live-cache.d.ts +0 -26
  995. package/dist/lib/mesh/live/daemon/live-cache.js +0 -116
  996. package/dist/lib/mesh/live/daemon/mqtt-events.d.ts +0 -7
  997. package/dist/lib/mesh/live/daemon/mqtt-events.js +0 -2
  998. package/dist/lib/mesh/live/daemon/mqtt-events.test-d.d.ts +0 -2
  999. package/dist/lib/mesh/live/daemon/mqtt-events.test-d.js +0 -10
  1000. package/dist/lib/mesh/live/daemon/version-drift.d.ts +0 -5
  1001. package/dist/lib/mesh/live/daemon/version-drift.js +0 -47
  1002. package/dist/lib/mesh/live/daemon/work-subscribe.d.ts +0 -32
  1003. package/dist/lib/mesh/live/daemon/work-subscribe.js +0 -262
  1004. package/dist/lib/mesh/live/report-summary.d.ts +0 -45
  1005. package/dist/lib/mesh/live/report-summary.js +0 -234
  1006. package/dist/lib/mesh/live/session-seq.d.ts +0 -4
  1007. package/dist/lib/mesh/live/session-seq.js +0 -33
  1008. package/dist/lib/mesh/project-board.d.ts +0 -65
  1009. package/dist/lib/mesh/project-board.js +0 -181
  1010. package/dist/lib/mesh/story-status.d.ts +0 -22
  1011. package/dist/lib/mesh/story-status.js +0 -49
  1012. package/dist/lib/monitor.d.ts +0 -149
  1013. package/dist/lib/monitor.js +0 -519
  1014. package/dist/lib/node-binary.d.ts +0 -50
  1015. package/dist/lib/node-binary.js +0 -133
  1016. package/dist/lib/notify-recipient.d.ts +0 -7
  1017. package/dist/lib/notify-recipient.js +0 -11
  1018. package/dist/lib/onboarding/checkpoint.d.ts +0 -13
  1019. package/dist/lib/onboarding/checkpoint.js +0 -44
  1020. package/dist/lib/onboarding/cli/onboard.d.ts +0 -53
  1021. package/dist/lib/onboarding/cli/onboard.js +0 -135
  1022. package/dist/lib/onboarding/cli/prompts.d.ts +0 -28
  1023. package/dist/lib/onboarding/cli/prompts.js +0 -83
  1024. package/dist/lib/onboarding/errors.d.ts +0 -34
  1025. package/dist/lib/onboarding/errors.js +0 -59
  1026. package/dist/lib/onboarding/index.d.ts +0 -13
  1027. package/dist/lib/onboarding/index.js +0 -13
  1028. package/dist/lib/onboarding/orchestrator.d.ts +0 -47
  1029. package/dist/lib/onboarding/orchestrator.js +0 -569
  1030. package/dist/lib/onboarding/types.d.ts +0 -79
  1031. package/dist/lib/onboarding/types.js +0 -8
  1032. package/dist/lib/policy-validator.d.ts +0 -7
  1033. package/dist/lib/policy-validator.js +0 -187
  1034. package/dist/lib/process-flag-company-context.d.ts +0 -8
  1035. package/dist/lib/process-flag-company-context.js +0 -67
  1036. package/dist/lib/report-publish.d.ts +0 -175
  1037. package/dist/lib/report-publish.js +0 -421
  1038. package/dist/lib/report-run.d.ts +0 -62
  1039. package/dist/lib/report-run.js +0 -123
  1040. package/dist/lib/report-snapshot.d.ts +0 -12
  1041. package/dist/lib/report-snapshot.js +0 -135
  1042. package/dist/lib/report-templates.d.ts +0 -9
  1043. package/dist/lib/report-templates.js +0 -21
  1044. package/dist/lib/scaffold-cli-floor.d.ts +0 -8
  1045. package/dist/lib/scaffold-cli-floor.js +0 -50
  1046. package/dist/lib/search-index/collection-path-repair-flag.d.ts +0 -4
  1047. package/dist/lib/search-index/collection-path-repair-flag.js +0 -7
  1048. package/dist/lib/search-index/embed-lock.d.ts +0 -32
  1049. package/dist/lib/search-index/embed-lock.js +0 -286
  1050. package/dist/lib/search-index/load-gate.d.ts +0 -57
  1051. package/dist/lib/search-index/load-gate.js +0 -270
  1052. package/dist/lib/search-index/max-doc-bytes.d.ts +0 -219
  1053. package/dist/lib/search-index/max-doc-bytes.js +0 -463
  1054. package/dist/lib/search-index/qmd-exit-diagnostics.d.ts +0 -5
  1055. package/dist/lib/search-index/qmd-exit-diagnostics.js +0 -40
  1056. package/dist/lib/search-index/reindex-single-flight-flag.d.ts +0 -5
  1057. package/dist/lib/search-index/reindex-single-flight-flag.js +0 -8
  1058. package/dist/lib/service-manager/index.d.ts +0 -42
  1059. package/dist/lib/service-manager/index.js +0 -105
  1060. package/dist/lib/service-manager/launchd.d.ts +0 -81
  1061. package/dist/lib/service-manager/launchd.js +0 -212
  1062. package/dist/lib/service-manager/systemd.d.ts +0 -19
  1063. package/dist/lib/service-manager/systemd.js +0 -72
  1064. package/dist/lib/service-manager/types.d.ts +0 -34
  1065. package/dist/lib/service-manager/types.js +0 -26
  1066. package/dist/lib/test-utils/isolated-flag-company-context.d.ts +0 -3
  1067. package/dist/lib/test-utils/isolated-flag-company-context.js +0 -18
  1068. package/dist/lib/work-context/bind-best.d.ts +0 -66
  1069. package/dist/lib/work-context/bind-best.js +0 -344
  1070. package/dist/lib/work-context/bind-calling-session.d.ts +0 -26
  1071. package/dist/lib/work-context/bind-calling-session.js +0 -63
  1072. package/dist/lib/work-context/company-rebind.d.ts +0 -23
  1073. package/dist/lib/work-context/company-rebind.js +0 -59
  1074. package/dist/lib/work-context/default-company.d.ts +0 -43
  1075. package/dist/lib/work-context/default-company.js +0 -83
  1076. package/dist/lib/work-context/outbox-quarantine-status-flag.d.ts +0 -4
  1077. package/dist/lib/work-context/outbox-quarantine-status-flag.js +0 -7
  1078. package/dist/lib/work-context/prd-sync.d.ts +0 -56
  1079. package/dist/lib/work-context/prd-sync.js +0 -197
  1080. package/dist/lib/work-context/preflight-contract.d.ts +0 -28
  1081. package/dist/lib/work-context/preflight-contract.js +0 -85
  1082. package/dist/lib/work-context/prompt-rebind.d.ts +0 -25
  1083. package/dist/lib/work-context/prompt-rebind.js +0 -85
  1084. package/dist/lib/work-context/windows-acl.d.ts +0 -123
  1085. package/dist/lib/work-context/windows-acl.js +0 -425
  1086. package/dist/lib/workers-registry/read.d.ts +0 -15
  1087. package/dist/lib/workers-registry/read.js +0 -17
  1088. package/dist/native-fast-route.d.ts +0 -7
  1089. package/dist/native-fast-route.js +0 -45
  1090. package/dist/node-network-compat-core.d.ts +0 -12
  1091. package/dist/node-network-compat-core.js +0 -41
  1092. package/dist/node-network-compat-fast.d.ts +0 -7
  1093. package/dist/node-network-compat-fast.js +0 -23
  1094. package/dist/secrets-env-fast-path.d.ts +0 -5
  1095. package/dist/secrets-env-fast-path.js +0 -16
  1096. package/dist/secrets-env-fast-route.d.ts +0 -18
  1097. package/dist/secrets-env-fast-route.js +0 -54
  1098. package/dist/utils/checkpoint-stamp-write-error.d.ts +0 -28
  1099. package/dist/utils/checkpoint-stamp-write-error.js +0 -99
  1100. package/dist/utils/cli-network-lifecycle.d.ts +0 -4
  1101. package/dist/utils/cli-network-lifecycle.js +0 -11
  1102. package/dist/utils/cognito-refresh-sentry.d.ts +0 -3
  1103. package/dist/utils/cognito-refresh-sentry.js +0 -49
  1104. package/dist/utils/console-origin.d.ts +0 -9
  1105. package/dist/utils/console-origin.js +0 -28
  1106. package/dist/utils/exclusive-lock.d.ts +0 -32
  1107. package/dist/utils/exclusive-lock.js +0 -75
  1108. package/dist/utils/fast-stream-errors.d.ts +0 -12
  1109. package/dist/utils/fast-stream-errors.js +0 -18
  1110. package/dist/utils/files-browse-acl.d.ts +0 -5
  1111. package/dist/utils/files-browse-acl.js +0 -11
  1112. package/dist/utils/hq-core-yaml.d.ts +0 -10
  1113. package/dist/utils/hq-core-yaml.js +0 -40
  1114. package/dist/utils/hq-root-resolver.d.ts +0 -13
  1115. package/dist/utils/hq-root-resolver.js +0 -103
  1116. package/dist/utils/redact-url.d.ts +0 -14
  1117. package/dist/utils/redact-url.js +0 -218
  1118. package/dist/utils/scaffold-fast-import-guard.d.ts +0 -2
  1119. package/dist/utils/scaffold-fast-import-guard.js +0 -40
  1120. package/dist/utils/scaffold-packlist-guard.d.ts +0 -7
  1121. package/dist/utils/scaffold-packlist-guard.js +0 -23
  1122. package/dist/utils/scaffold-sibling-references.d.ts +0 -22
  1123. package/dist/utils/scaffold-sibling-references.js +0 -156
  1124. package/dist/utils/secret-load-availability.d.ts +0 -8
  1125. package/dist/utils/secret-load-availability.js +0 -54
  1126. package/dist/utils/staged-install.d.ts +0 -34
  1127. package/dist/utils/staged-install.js +0 -346
  1128. package/dist/utils/staged-npm-install.d.ts +0 -16
  1129. package/dist/utils/staged-npm-install.js +0 -264
  1130. package/dist/utils/sync-log-sources.d.ts +0 -15
  1131. package/dist/utils/sync-log-sources.js +0 -36
  1132. package/dist/utils/table-width.d.ts +0 -7
  1133. package/dist/utils/table-width.js +0 -15
  1134. package/dist/utils/update-command-supervisor.cjs +0 -247
  1135. package/dist/utils/upload-author.d.ts +0 -15
  1136. package/dist/utils/upload-author.js +0 -39
  1137. package/dist/utils/version-report.d.ts +0 -27
  1138. package/dist/utils/version-report.js +0 -105
  1139. package/dist/version-request.d.ts +0 -14
  1140. package/dist/version-request.js +0 -36
  1141. package/scripts/mesh-daemon-if-stale.mjs +0 -20
  1142. package/templates/reports/blank.md +0 -3
  1143. package/templates/reports/daily-digest.md +0 -11
  1144. package/templates/runbooks/update-report.md +0 -21
@@ -5,57 +5,37 @@
5
5
  * require hq-pack-work-mesh on disk and does not start MQTT listen.
6
6
  * Distinct from `hq doctor` (hook guardrails).
7
7
  */
8
- import { resolve as resolvePath } from "node:path";
9
8
  import * as os from "node:os";
10
- import { readFileSync } from "node:fs";
11
- import { findHqRoot } from "../utils/manifest.js";
12
- import { CLI_VERSION } from "../cli-version.js";
13
9
  import chalk from "chalk";
14
- import { ensureCognitoToken, isExpiring, isMachineIdentity, loadCachedTokens, } from "../utils/cognito-session.js";
10
+ import { loadCachedTokens, isMachineIdentity } from "../utils/cognito-session.js";
15
11
  import * as readline from "node:readline/promises";
16
- import { STORY_STATUSES, appendThreadEvent, ensureProjectThread, eventPayload, getProjectView, listActiveMembershipCompanies, listActiveThreads, patchStory, putProjectView, registerMeshProject, resolveActiveMembershipCompany, resolveMeshPrincipalUid, warmMeshConversationCache, } from "../lib/mesh/api.js";
17
- import { closeSupersededProjectThread, ensureMissingBoardStories, ensureProjectBoard, boardStoryStatus, formatStoryStatusChanges, mergeProjectStories, prdSyncEventsThatChangeBoard, } from "../lib/mesh/project-board.js";
18
- import { mapSourceStoryStatus } from "../lib/mesh/story-status.js";
19
- import { buildPreflightFixtures } from "../lib/work-context/preflight-contract.js";
12
+ import { STORY_STATUSES, appendThreadEvent, callerLabelFromToken, ensureProjectThread, eventPayload, listActiveMembershipCompanies, listActiveThreads, patchStoryStatus, resolveActiveMembershipCompany, resolveMeshPrincipalUid, warmMeshConversationCache, } from "../lib/mesh/api.js";
20
13
  import { createCandidatesFetcher, createMigratePoster, createOrganizePoster, createWorkSessionDeliverer, fetchCompanyLive, formatCompanyLiveTable, openMeshTransport, probeMigrationCapabilityForMemberships, requireToken, } from "../lib/mesh/client.js";
21
- import { clearDefaultCompany, isDefaultCompanyDisabled, readDeviceConfig, recordMigrationCapabilitySnapshot, setRepairHeldWithDefault, setDefaultCompany, } from "../lib/work-context/config.js";
22
- import { ensureDefaultCompany } from "../lib/work-context/default-company.js";
23
- import { DefaultCompanyUnavailableError, } from "../lib/work-context/errors.js";
14
+ import { clearDefaultCompany, getDefaultCompany, readDeviceConfig, recordMigrationCapabilitySnapshot, setDefaultCompany, } from "../lib/work-context/config.js";
15
+ import { DefaultCompanyLockedError, DefaultCompanyUnavailableError, } from "../lib/work-context/errors.js";
24
16
  import { isValidSessionId } from "../lib/mesh/live/session-identity.js";
25
17
  import { CLI_KIND_TO_SCHEMA, resolveEnqueueSessionId, } from "../lib/mesh/live/index.js";
26
18
  import { flushSessionEvents } from "../lib/mesh/live/flush.js";
27
19
  import { backfillHeldSessions } from "../lib/mesh/live/backfill-held.js";
28
20
  import { createSessionEventsPoster, resolveVaultApiBase, } from "../lib/mesh/live/session-events-client.js";
29
- const ONLINE_MEMBERSHIP_VALIDATION_TIMEOUT_MS = 5_000;
30
- // Leave 500 ms of headroom inside SessionStart's 2 s process-group limit.
31
- const OFFLINE_MEMBERSHIP_VALIDATION_TIMEOUT_MS = 1_500;
32
- import { buildEmitEvidence, machineEmitDisposition } from "../lib/mesh/live/emit-evidence.js";
33
- import { appendHeldLine } from "../lib/mesh/live/spool.js";
21
+ import { buildEmitEvidence } from "../lib/mesh/live/emit-evidence.js";
34
22
  import { createEmitPoster, buildMeshEmitEvent } from "../lib/mesh/live/emit-client.js";
35
- import { enrichSessionEndEvent } from "../lib/mesh/live/report-summary.js";
36
- import { emitEvents, formatEmitRejectionLines } from "../lib/mesh/live/emit.js";
23
+ import { emitEvents } from "../lib/mesh/live/emit.js";
37
24
  import { readEmitRetry, writeEmitRetry } from "../lib/mesh/live/emit-retry.js";
38
25
  import { generateUlid } from "../lib/mesh/live/ulid.js";
39
26
  import { readLegacyBacklog } from "../lib/mesh/live/emit-replay.js";
40
27
  import { resolveMeshEmitMode, writeMeshConfigMode, } from "../lib/mesh/live/daemon/mode.js";
41
28
  import { workMeshRoot } from "../lib/mesh/live/paths.js";
42
- import { buildInstallPaths, collectDaemonDoctor, daemonServiceIsLoaded, daemonServiceStatus, findAncestorHqRoot, resolveInstallHqRoot, detectPlatform, formatCliIdentityLines, formatDaemonDoctor, installDaemonIfStale, installDaemonService, readDaemonState, resolveAbsoluteNodeBinary, resolveRunningCliEntry, runMeshDaemon, uninstallDaemonService, } from "../lib/mesh/live/daemon/index.js";
43
- import { defaultRunCommand } from "../lib/service-manager/launchd.js";
29
+ import { buildInstallPaths, collectDaemonDoctor, daemonServiceStatus, detectPlatform, formatDaemonDoctor, installDaemonService, readDaemonState, runMeshDaemon, uninstallDaemonService, daemonDir, } from "../lib/mesh/live/daemon/index.js";
44
30
  import { workContextRoot } from "../lib/work-context/paths.js";
45
31
  import { formatMigrateConfirmation, submitSessionMigration, } from "../lib/work-context/migrate.js";
46
32
  import { formatOrganizeList, prepareOrganizeDecision, settleOrganizeAskWithoutBind, submitOrganizeDecision, } from "../lib/work-context/organize.js";
47
- import { applyOperatorProjectBinding, readSessionState, updateSessionState, } from "../lib/work-context/state.js";
48
- import { findLocalPrd, listNeedsProjectSessions } from "../lib/work-context/bind-best.js";
49
- import { bindCallingSession, formatSessionBoundLine } from "../lib/work-context/bind-calling-session.js";
50
- import { rebindNeedsProjectOnPrompt } from "../lib/work-context/prompt-rebind.js";
51
- import { planPrdSync, rebindSessionToProject } from "../lib/work-context/prd-sync.js";
52
- import { reserveSessionSeq } from "../lib/mesh/live/session-seq.js";
33
+ import { readSessionState } from "../lib/work-context/state.js";
53
34
  import { loadObservationFromFile, markUntracked, parseObservationJson, reconcileObservation, } from "../lib/work-context/reconcile.js";
54
35
  import { resolveCompany } from "../lib/work-context/company.js";
55
36
  import { deriveRemoteOwnerSlug, deriveRepoIdentityKey, } from "../lib/work-context/repo-remote.js";
56
37
  import { promptRepoCompany, } from "../lib/work-context/repo-prompt.js";
57
38
  import { requeueQuarantinedOutbox } from "../lib/work-context/outbox.js";
58
- import { handOffInstallHere } from "../lib/daemon/handoff.js";
59
39
  export function formatCheckLines(threads, company, projectId) {
60
40
  if (threads.length === 0) {
61
41
  return ["Work mesh: no active project threads found."];
@@ -63,22 +43,14 @@ export function formatCheckLines(threads, company, projectId) {
63
43
  const scope = projectId
64
44
  ? `${company.companySlug || company.companyUid}/${projectId}`
65
45
  : company.companySlug || company.companyUid;
66
- const lines = [`Work mesh: ${threads.length} thread(s) for ${scope}`];
46
+ const lines = [`Work mesh: ${threads.length} active thread(s) for ${scope}`];
67
47
  for (const thread of threads.slice(0, 8)) {
68
48
  const owner = thread.ownerUid ? ` owner=${thread.ownerUid}` : "";
69
49
  const summary = thread.progressSummary ||
70
50
  thread.sourceSignalSummary ||
71
51
  thread.blockedReason ||
72
52
  "";
73
- const lane = thread.kind === "lane" ? thread.lane : undefined;
74
- const laneDetails = lane
75
- ? ` lane=${lane.laneId} laneStatus=${thread.laneStatus ?? "unknown"}` +
76
- ` story=${lane.storyId ?? "unknown"} profile=${lane.workerProfile ?? "unknown"}` +
77
- ` model=${lane.model ?? "unknown"} account=${lane.account ?? "unknown"}` +
78
- `${lane.parentLaneId ? ` parent=${lane.parentLaneId}` : ""}`
79
- : "";
80
- const machine = thread.senderMachineUid ? ` machine=${thread.senderMachineUid}` : "";
81
- lines.push(`- ${thread.threadStatus ?? "unknown"} ${thread.threadId ?? "?"}${owner}${machine}${laneDetails}${summary ? `: ${summary}` : ""}`);
53
+ lines.push(`- ${thread.threadStatus ?? "unknown"} ${thread.threadId ?? "?"}${owner}${summary ? `: ${summary}` : ""}`);
82
54
  }
83
55
  return lines;
84
56
  }
@@ -113,20 +85,12 @@ async function runCheck(opts) {
113
85
  async function runEvent(verb, opts) {
114
86
  const { token, company } = await withCompany(opts);
115
87
  const projectId = requireProject(opts);
116
- const eventKind = verb === "start" ? "claim" : verb;
117
- let claimant = "";
118
- if (eventKind === "claim") {
119
- const resolvedClaimant = await resolveMeshPrincipalUid(token, loadCachedTokens());
120
- if (!resolvedClaimant) {
121
- fail("Could not resolve the authenticated claimant. Sign in again and retry `hq mesh start`.");
122
- }
123
- claimant = resolvedClaimant;
124
- }
125
88
  const ensured = await ensureProjectThread(token, company, projectId, {
126
89
  threadId: opts.threadId,
127
90
  summary: opts.summary,
128
91
  });
129
- const event = await appendThreadEvent(token, company.companyUid, ensured.threadId, eventKind, eventPayload(eventKind, opts, claimant));
92
+ const eventKind = verb === "start" ? "claim" : verb;
93
+ const event = await appendThreadEvent(token, company.companyUid, ensured.threadId, eventKind, eventPayload(eventKind, opts, callerLabelFromToken(token)));
130
94
  if (opts.json) {
131
95
  console.log(JSON.stringify({
132
96
  ok: true,
@@ -145,705 +109,33 @@ async function runEvent(verb, opts) {
145
109
  async function runStory(opts) {
146
110
  const storyId = opts.story?.trim();
147
111
  const status = opts.status?.trim();
148
- const assignee = opts.assignee?.trim();
149
- if (!storyId) {
150
- fail("story requires --story <id>");
151
- }
152
- if (!status && !assignee) {
153
- fail("story requires --status queued|in_progress|review|done or --assignee <uid|me|none>");
154
- }
155
- if (status && !STORY_STATUSES.has(status)) {
156
- fail("story --status must be queued|in_progress|review|done");
112
+ if (!storyId || !status || !STORY_STATUSES.has(status)) {
113
+ fail("story requires --story <id> and --status queued|in_progress|review|done");
157
114
  }
158
115
  const { token, company } = await withCompany(opts);
159
116
  const projectId = requireProject(opts);
160
- let assigneeUid;
161
- let clearAssignee = false;
162
- if (assignee === "none") {
163
- clearAssignee = true;
164
- }
165
- else if (assignee === "me") {
166
- const resolved = await resolveMeshPrincipalUid(token, loadCachedTokens());
167
- if (!resolved || resolved === "session") {
168
- fail("`--assignee me` needs the signed-in person or agent. The synthetic session identity cannot be assigned. Sign in again and retry `hq mesh story`.");
169
- }
170
- assigneeUid = resolved;
171
- }
172
- else if (assignee) {
173
- if (!/^(prs|agt)_/.test(assignee)) {
174
- fail("`--assignee` must be a person or agent uid, `me`, or `none`.");
175
- }
176
- assigneeUid = assignee;
177
- }
178
- const patched = await patchStory(token, company.companyUid, projectId, storyId, {
179
- ...(status ? { status } : {}),
180
- ...(assigneeUid ? { assigneeUid } : {}),
181
- ...(clearAssignee ? { clearAssignee: true } : {}),
182
- });
117
+ const patched = await patchStoryStatus(token, company.companyUid, projectId, storyId, status);
183
118
  if (opts.json) {
184
119
  console.log(JSON.stringify({ ok: true, action: "story", company, ...patched, storyId }, null, 2));
185
120
  return;
186
121
  }
187
- const assignment = assignee === "none"
188
- ? "assignee cleared"
189
- : assignee
190
- ? `assignee ${patched.assigneeUid ?? assigneeUid}`
191
- : "";
192
- const statusPart = status ? `${storyId} → ${patched.status}` : storyId;
193
- console.log(`Work mesh: story ${statusPart}${assignment ? ` ${assignment}` : ""} (v${patched.version ?? "?"})`);
194
- }
195
- function record(value) {
196
- return value && typeof value === "object" && !Array.isArray(value)
197
- ? value
198
- : null;
199
- }
200
- function parseProjectRepoSpec(value, source) {
201
- const raw = value.trim();
202
- const separator = raw.lastIndexOf("@");
203
- const path = (separator > 0 ? raw.slice(0, separator) : raw).trim();
204
- const branch = (separator > 0 ? raw.slice(separator + 1) : "").trim();
205
- if (!path)
206
- fail(`${source} requires a non-empty repository path.`);
207
- if (separator > 0 && !branch)
208
- fail(`${source} has an empty branch after @.`);
209
- return { path, branch };
210
- }
211
- function parseProjectRepos(value, source) {
212
- if (!Array.isArray(value))
213
- fail(`${source} must be a JSON repository array.`);
214
- return value.map((raw, index) => {
215
- if (typeof raw === "string")
216
- return parseProjectRepoSpec(raw, `${source}[${index}]`);
217
- const repo = record(raw);
218
- const path = typeof repo?.path === "string"
219
- ? repo.path.trim()
220
- : typeof repo?.repoPath === "string"
221
- ? repo.repoPath.trim()
222
- : typeof repo?.repo === "string"
223
- ? repo.repo.trim()
224
- : "";
225
- const branchValue = repo?.branch ?? repo?.branchName;
226
- const branch = branchValue === undefined ? "" : typeof branchValue === "string" ? branchValue.trim() : null;
227
- if (!repo || !path)
228
- fail(`${source}[${index}].path requires a string.`);
229
- if (branch === null)
230
- fail(`${source}[${index}].branch requires a string.`);
231
- return { path, branch };
232
- });
233
- }
234
- function parseProjectReposJson(raw, source) {
235
- try {
236
- return parseProjectRepos(JSON.parse(raw), source);
237
- }
238
- catch (err) {
239
- if (err instanceof SyntaxError)
240
- fail(`${source} must contain valid JSON.`);
241
- throw err;
242
- }
243
- }
244
- function projectStoriesFromJson(value, source) {
245
- const plan = Array.isArray(value) ? null : record(value);
246
- const rawStories = Array.isArray(value)
247
- ? value
248
- : Array.isArray(plan?.userStories)
249
- ? plan.userStories
250
- : Array.isArray(plan?.stories)
251
- ? plan.stories
252
- : null;
253
- if (!rawStories) {
254
- fail(`${source} must be a JSON story array or an object with userStories.`);
255
- }
256
- const stories = rawStories.map((raw, index) => {
257
- const story = record(raw);
258
- const id = typeof story?.id === "string" ? story.id.trim() : "";
259
- const title = typeof story?.title === "string" ? story.title.trim() : "";
260
- if (!story || !id || !title) {
261
- fail(`${source} userStories[${index}] requires string id and title.`);
262
- }
263
- const status = mapSourceStoryStatus(story, `${source} userStories[${index}]`);
264
- const resolvedStatus = status || (story.passes === true ? "done" : undefined);
265
- return {
266
- id,
267
- title,
268
- ...(typeof story.description === "string" ? { description: story.description } : {}),
269
- ...(Array.isArray(story.acceptanceCriteria)
270
- ? {
271
- acceptanceCriteria: story.acceptanceCriteria.filter((item) => typeof item === "string"),
272
- }
273
- : {}),
274
- ...(resolvedStatus ? { status: resolvedStatus } : {}),
275
- // hq-pro makes passes mirror the Board status. A completed PRD story
276
- // without an explicit status must therefore become done.
277
- passes: resolvedStatus === "done",
278
- ...(typeof story.priority === "number" && Number.isFinite(story.priority)
279
- ? { priority: story.priority }
280
- : {}),
281
- };
282
- });
283
- const metadata = record(plan?.metadata);
284
- const repos = metadata && Object.hasOwn(metadata, "repos")
285
- ? parseProjectRepos(metadata.repos, `${source} metadata.repos`)
286
- : undefined;
287
- return {
288
- ...(typeof plan?.name === "string" ? { name: plan.name } : {}),
289
- ...(typeof plan?.description === "string" ? { description: plan.description } : {}),
290
- stories,
291
- ...(repos ? { repos } : {}),
292
- };
293
- }
294
- function parseProjectPlan(raw, source) {
295
- try {
296
- return projectStoriesFromJson(JSON.parse(raw), source);
297
- }
298
- catch (err) {
299
- if (err instanceof SyntaxError)
300
- fail(`${source} must contain valid JSON.`);
301
- throw err;
302
- }
303
- }
304
- function httpStatus(err) {
305
- if (err && typeof err === "object" && "status" in err && typeof err.status === "number") {
306
- return err.status;
307
- }
308
- return undefined;
309
- }
310
- function mergeProjectRepos(current, planned) {
311
- const plannedPaths = new Set(planned.map((repo) => repo.path));
312
- return [...planned, ...current.filter((repo) => !plannedPaths.has(repo.path))];
313
- }
314
- async function runProjectSet(projectId, opts) {
315
- if (opts.channel !== undefined && !opts.channel.trim()) {
316
- fail("PROJECT_CHANNEL_INVALID: --channel must be a non-empty channel id.");
317
- }
318
- if (opts.storiesFile && opts.storiesJson) {
319
- fail("Pass only one of --stories-file or --stories-json.");
320
- }
321
- if (opts.reposJson && opts.repo?.length) {
322
- fail("Pass only one of --repos-json or --repo.");
323
- }
324
- const source = opts.storiesFile
325
- ? parseProjectPlan(readFileSync(opts.storiesFile, "utf8"), opts.storiesFile)
326
- : opts.storiesJson
327
- ? parseProjectPlan(opts.storiesJson, "--stories-json")
328
- : undefined;
329
- const explicitRepos = opts.reposJson
330
- ? parseProjectReposJson(opts.reposJson, "--repos-json")
331
- : opts.repo?.length
332
- ? opts.repo.map((repo, index) => parseProjectRepoSpec(repo, `--repo[${index}]`))
333
- : undefined;
334
- const { token, company } = await withCompany(opts);
335
- let current;
336
- try {
337
- current = await getProjectView(token, company.companyUid, projectId);
338
- }
339
- catch (err) {
340
- if (httpStatus(err) === 404 && opts.create) {
341
- if (!source && !opts.name?.trim()) {
342
- fail("`--create` needs --name or a stories file when the Board view does not exist.");
343
- }
344
- current = undefined;
345
- }
346
- else {
347
- throw err;
348
- }
349
- }
350
- if (!current && !opts.create) {
351
- fail(`Work mesh project ${projectId} has no Board view. Re-run with --create to add one.`);
352
- }
353
- const principalUid = await resolveMeshPrincipalUid(token, loadCachedTokens());
354
- const PROJECT_CHANGED = "The Board changed while you were editing. Re-run to pick up the latest.";
355
- let view;
356
- let registration;
357
- if (!current) {
358
- const ensured = await ensureProjectBoard({
359
- token,
360
- company,
361
- projectId,
362
- name: opts.name?.trim() || source?.name || projectId,
363
- description: opts.description !== undefined ? opts.description : source?.description ?? "",
364
- stories: source?.stories ?? [],
365
- repos: explicitRepos ?? source?.repos ?? [],
366
- channelId: opts.channel,
367
- });
368
- view = ensured.view;
369
- registration = ensured.registration;
370
- }
371
- else if (opts.name !== undefined || opts.description !== undefined || source !== undefined || explicitRepos !== undefined) {
372
- const stories = source
373
- ? mergeProjectStories(current.stories, source.stories, { resetStatus: Boolean(opts.resetStatus) })
374
- : current.stories;
375
- const statusChangeLine = source ? formatStoryStatusChanges(current.stories, stories) : undefined;
376
- try {
377
- view = await putProjectView(token, company.companyUid, projectId, {
378
- name: opts.name?.trim() || source?.name || current.name,
379
- ...(opts.description !== undefined
380
- ? { description: opts.description }
381
- : source?.description !== undefined
382
- ? { description: source.description }
383
- : { description: current.description }),
384
- stories,
385
- repos: explicitRepos ?? source?.repos ?? current.repos,
386
- ...(current.version !== undefined ? { expectedVersion: current.version } : {}),
387
- });
388
- }
389
- catch (err) {
390
- const conflict = err;
391
- if (conflict.status === 409 && conflict.code === "VERSION_CONFLICT") {
392
- if (opts.json) {
393
- console.log(JSON.stringify({ ok: false, code: "VERSION_CONFLICT", error: PROJECT_CHANGED }));
394
- }
395
- fail(PROJECT_CHANGED);
396
- }
397
- throw err;
398
- }
399
- if (statusChangeLine) {
400
- if (opts.json)
401
- console.error(statusChangeLine);
402
- else
403
- console.log(statusChangeLine);
404
- }
405
- }
406
- else {
407
- view = current;
408
- }
409
- if (current && opts.channel !== undefined) {
410
- registration = await registerMeshProject(token, company.companyUid, projectId, opts.channel);
411
- }
412
- if (!current && opts.create) {
413
- noteCallingSessionBound(view.projectId, company);
414
- }
415
- if (opts.json) {
416
- console.log(JSON.stringify({
417
- ok: true,
418
- action: "project.set",
419
- principalUid,
420
- ...view,
421
- ...(registration ? { registration } : {}),
422
- }, null, 2));
423
- return;
424
- }
425
- console.log(`Work mesh: project ${view.projectId} set (${view.name}; ${view.stories.length} stories)`);
426
- }
427
- async function runProjectRegister(projectId, opts) {
428
- if (opts.channel !== undefined && !opts.channel.trim()) {
429
- fail("PROJECT_CHANNEL_INVALID: --channel must be a non-empty channel id.");
430
- }
431
- const { token, company } = await withCompany(opts);
432
- const principalUid = await resolveMeshPrincipalUid(token, loadCachedTokens());
433
- const companyRef = company.companySlug || company.companyUid;
434
- try {
435
- const board = await getProjectView(token, company.companyUid, projectId);
436
- if (board.companyUid !== company.companyUid || board.projectId !== projectId) {
437
- fail(`Work mesh project ${projectId} has no Board view in company ${companyRef}. Create the Board before registering it.`);
438
- }
439
- }
440
- catch (err) {
441
- if (httpStatus(err) === 404) {
442
- fail(`Work mesh project ${projectId} has no Board view in company ${companyRef}. Create the Board before registering it.`);
443
- }
444
- throw err;
445
- }
446
- let registration;
447
- try {
448
- registration = await registerMeshProject(token, company.companyUid, projectId, opts.channel);
449
- }
450
- catch (err) {
451
- const failure = err;
452
- if (failure.status === 403 && failure.code === "PROJECT_NOT_IN_COMPANY") {
453
- fail(`Work mesh project ${projectId} could not be registered in company ${companyRef}: the Board or its genesis thread is missing. Run "hq mesh project ensure ${projectId} --company ${companyRef} --stories-file <prd.json>" to create or restore them.`);
454
- }
455
- throw err;
456
- }
457
- const boardState = "registered";
458
- if (opts.json) {
459
- console.log(JSON.stringify({ ok: true, action: "project.register", principalUid, boardState, ...registration }, null, 2));
460
- return;
461
- }
462
- console.log(`Work mesh: project ${registration.projectId} registered (${boardState}; channel ${registration.channelId} ${registration.channelCreated ? "created" : "bound"})`);
463
- }
464
- async function runProjectEnsure(projectId, opts) {
465
- if (!opts.storiesFile?.trim())
466
- fail("`--stories-file <prd.json>` is required.");
467
- const source = parseProjectPlan(readFileSync(opts.storiesFile, "utf8"), opts.storiesFile);
468
- const { token, company } = await withCompany(opts);
469
- let current;
470
- try {
471
- current = await getProjectView(token, company.companyUid, projectId);
472
- }
473
- catch (err) {
474
- if (httpStatus(err) !== 404)
475
- throw err;
476
- }
477
- if (opts.dryRun) {
478
- if (current && (current.companyUid !== company.companyUid || current.projectId !== projectId)) {
479
- fail("Work mesh project ensure dry-run: Board company or project id did not match the request.");
480
- }
481
- const stories = current ? mergeProjectStories(current.stories, source.stories) : source.stories;
482
- const sourceStatuses = source.stories.map((story) => ({
483
- id: story.id,
484
- title: story.title,
485
- status: boardStoryStatus(story),
486
- }));
487
- const boardStatuses = stories.map((story) => ({
488
- id: story.id,
489
- title: story.title,
490
- status: boardStoryStatus(story),
491
- }));
492
- if (opts.json) {
493
- console.log(JSON.stringify({
494
- ok: true,
495
- action: "project.ensure.dry-run",
496
- projectId,
497
- companyUid: company.companyUid,
498
- sourceStatuses,
499
- stories: boardStatuses,
500
- }, null, 2));
501
- }
502
- else {
503
- console.log(`Work mesh: project ${projectId} dry run (${sourceStatuses.length} source stories)`);
504
- console.log("Source statuses:");
505
- for (const story of sourceStatuses)
506
- console.log(`${story.id}\t${story.status}`);
507
- console.log("Merged Board statuses:");
508
- for (const story of boardStatuses)
509
- console.log(`${story.id}\t${story.status}`);
510
- }
511
- return;
512
- }
513
- // Genesis thread, then the view, then register. Register returns 403
514
- // PROJECT_NOT_IN_COMPANY until both exist. A missing view uses that chain
515
- // from ensureProjectBoard; an existing view is merged, then registered.
516
- let registration;
517
- let verified;
518
- if (!current) {
519
- const ensured = await ensureProjectBoard({
520
- token,
521
- company,
522
- projectId,
523
- name: source.name || projectId,
524
- description: source.description ?? "",
525
- stories: source.stories,
526
- repos: source.repos ?? [],
527
- });
528
- registration = ensured.registration;
529
- verified = ensured.view;
530
- }
531
- else {
532
- const genesis = await ensureProjectThread(token, company, projectId, {
533
- summary: source.name || projectId,
534
- });
535
- if (!genesis.threadId)
536
- fail("Work mesh did not return a threadId.");
537
- {
538
- const stories = mergeProjectStories(current.stories, source.stories);
539
- const repos = mergeProjectRepos(current.repos, source.repos ?? []);
540
- const name = source.name || current.name;
541
- const description = source.description !== undefined ? source.description : current.description;
542
- const changed = name !== current.name ||
543
- description !== current.description ||
544
- JSON.stringify(stories) !== JSON.stringify(current.stories) ||
545
- JSON.stringify(repos) !== JSON.stringify(current.repos);
546
- if (changed) {
547
- await putProjectView(token, company.companyUid, projectId, {
548
- name,
549
- description,
550
- stories,
551
- repos,
552
- ...(current.version !== undefined ? { expectedVersion: current.version } : {}),
553
- });
554
- }
555
- }
556
- registration = await registerMeshProject(token, company.companyUid, projectId);
557
- await closeSupersededProjectThread({
558
- token,
559
- companyUid: company.companyUid,
560
- openedThreadId: genesis.threadId,
561
- canonicalThreadId: registration.threadId,
562
- created: genesis.created,
563
- });
564
- if (!registration.threadId || !registration.channelId) {
565
- fail("Work mesh registration did not return a threadId and channelId.");
566
- }
567
- verified = await getProjectView(token, company.companyUid, projectId);
568
- }
569
- if (verified.companyUid !== company.companyUid) {
570
- fail(`Work mesh project ensure: company mismatch (expected ${company.companyUid}, got ${verified.companyUid}).`);
571
- }
572
- if (verified.projectId !== projectId) {
573
- fail(`Work mesh project ensure: project id mismatch (expected ${projectId}, got ${verified.projectId}).`);
574
- }
575
- for (const story of source.stories) {
576
- if (!verified.stories.some((row) => row.id === story.id)) {
577
- fail(`Work mesh project ensure: missing story ${story.id}.`);
578
- }
579
- }
580
- for (const repo of source.repos ?? []) {
581
- if (!verified.repos.some((row) => row.path === repo.path)) {
582
- fail(`Work mesh project ensure: missing repo ${repo.path}.`);
583
- }
584
- }
585
- if (verified.version === undefined) {
586
- fail("Work mesh project ensure: verified view has no version.");
587
- }
588
- const payload = {
589
- projectId: verified.projectId,
590
- threadId: registration.threadId,
591
- channelId: registration.channelId,
592
- version: verified.version,
593
- stories: verified.stories,
594
- };
595
- noteCallingSessionBound(payload.projectId, company);
596
- if (opts.json) {
597
- console.log(JSON.stringify(payload));
598
- return;
599
- }
600
- console.log(`Work mesh: project ${payload.projectId} ensured (thread ${payload.threadId}, channel ${payload.channelId}, ${payload.stories.length} stories)`);
601
- }
602
- async function runPrdSync(opts) {
603
- const sessionId = opts.session.trim();
604
- const file = opts.file.trim();
605
- if (!sessionId || !file)
606
- fail("Usage: hq mesh context prd-sync --session <sid> --file <prd.json>");
607
- const root = workContextHomeRoot();
608
- const plan = planPrdSync({ sessionId, file, root });
609
- if (plan.rebindTo) {
610
- rebindSessionToProject({ sessionId, root, projectId: plan.rebindTo });
611
- }
612
- if (!plan.changed) {
613
- const payload = { ok: true, action: "context.prd-sync", changed: 0, ...(plan.skip ? { skip: plan.skip } : {}) };
614
- if (opts.json)
615
- console.log(JSON.stringify(payload));
616
- else
617
- console.log(plan.skip ? `Work mesh: prd-sync skipped (${plan.skip})` : "Work mesh: prd-sync unchanged");
618
- return;
619
- }
620
- let token;
621
- try {
622
- token = await requireToken();
623
- }
624
- catch {
625
- token = null;
626
- }
627
- if (!token) {
628
- console.error("work-mesh: prd-sync has changes but no token; snapshot not advanced");
629
- return;
630
- }
631
- // Attribution evidence: without company and project the server files these
632
- // as unassigned and the Board never moves. After a same-company switch,
633
- // this is the new project's id so ingest writes SESSION_STATE.projectId
634
- // and bound-forward posts the channel line there.
635
- const bound = readSessionState(sessionId, root);
636
- const evidenceBase = {
637
- ...(bound?.companySlug ? { companySlug: bound.companySlug } : {}),
638
- ...(bound?.projectId ? { project: bound.projectId } : {}),
639
- touchedPaths: [resolvePath(file)],
640
- };
641
- let toEmit = plan.events;
642
- if (bound?.companyUid && bound.projectId) {
643
- try {
644
- const live = await getProjectView(token, bound.companyUid, bound.projectId);
645
- toEmit = prdSyncEventsThatChangeBoard(plan.events, live.stories);
646
- }
647
- catch {
648
- // Board unread — emit the snapshot diff; the server drops same-status.
649
- }
650
- if (toEmit.length === 0) {
651
- plan.commit();
652
- if (opts.json) {
653
- console.log(JSON.stringify({ ok: true, action: "context.prd-sync", changed: 0 }));
654
- }
655
- else {
656
- console.log("Work mesh: prd-sync unchanged");
657
- }
658
- return;
659
- }
660
- try {
661
- const source = parseProjectPlan(readFileSync(file, "utf8"), file);
662
- await ensureMissingBoardStories({
663
- token,
664
- company: {
665
- companyUid: bound.companyUid,
666
- companySlug: bound.companySlug || bound.companyUid,
667
- },
668
- projectId: bound.projectId,
669
- name: source.name || bound.projectId,
670
- description: source.description ?? "",
671
- stories: source.stories,
672
- repos: source.repos ?? [],
673
- requiredIds: toEmit.map((event) => event.taskId),
674
- });
675
- }
676
- catch (err) {
677
- const reason = err instanceof Error ? err.message : String(err);
678
- console.error(`work-mesh: prd-sync ensure failed; emitting anyway (${reason.slice(0, 160)})`);
679
- }
680
- }
681
- const alreadyOnBoard = plan.events
682
- .filter((event) => !toEmit.some((row) => row.taskId === event.taskId))
683
- .map((event) => event.taskId);
684
- const meshRoot = workMeshHomeRoot();
685
- const seqFirst = reserveSessionSeq(sessionId, toEmit.length);
686
- const events = toEmit.map((event, index) => buildMeshEmitEvent({
687
- eventId: generateUlid(Date.now() + index),
688
- kind: "task_status",
689
- sessionId,
690
- harness: "hq-sessions",
691
- adapterVersion: "1.0.0",
692
- at: new Date().toISOString(),
693
- seq: seqFirst + index,
694
- source: "hooks",
695
- taskId: event.taskId,
696
- status: event.status,
697
- summary: event.status === "done"
698
- ? `${event.taskId} passes`
699
- : event.status === "in_progress"
700
- ? `${event.taskId} in progress`
701
- : `${event.taskId} in review`,
702
- evidence: { ...evidenceBase, task: event.taskId },
703
- }));
704
- const poster = createEmitPoster({ token, baseUrl: resolveVaultApiBase(process.env) });
705
- const emitted = await emitEvents({
706
- workMeshRoot: meshRoot,
707
- poster,
708
- newEvents: events,
709
- });
710
- if (emitted.unassigned > 0 || emitted.rejected > 0) {
711
- console.error(`work-mesh: prd-sync sent ${events.length}; unassigned=${emitted.unassigned} rejected=${emitted.rejected}`);
712
- for (const line of formatEmitRejectionLines(emitted.rejections))
713
- console.error(line);
714
- }
715
- const blocked = new Set(emitted.rejections.map((row) => row.eventId));
716
- for (const pending of readEmitRetry(meshRoot)) {
717
- const id = typeof pending.eventId === "string" ? pending.eventId : "";
718
- if (id)
719
- blocked.add(id);
720
- }
721
- const advanced = events.flatMap((event) => (event.eventId && event.taskId && !blocked.has(event.eventId) ? [event.taskId] : []));
722
- plan.commit([...alreadyOnBoard, ...advanced]);
723
- if (plan.taskId && advanced.includes(plan.taskId)) {
724
- updateSessionState(sessionId, root, (current) => {
725
- if (!current)
726
- return null;
727
- return {
728
- ...current,
729
- taskId: plan.taskId,
730
- contextStatus: current.projectId ? "bound" : current.contextStatus,
731
- updatedAt: new Date().toISOString(),
732
- };
733
- });
734
- }
735
- if (opts.json) {
736
- console.log(JSON.stringify({ ok: true, action: "context.prd-sync", changed: toEmit.length, taskId: plan.taskId }));
737
- return;
738
- }
739
- console.log(`Work mesh: prd-sync emitted ${toEmit.length} task_status`);
740
- }
741
- function noteCallingSessionBound(projectId, company) {
742
- try {
743
- const bound = bindCallingSession({
744
- root: workContextHomeRoot(),
745
- projectId,
746
- company,
747
- });
748
- if (bound.bound)
749
- console.error(formatSessionBoundLine(bound.sessionId, bound.projectId));
750
- }
751
- catch {
752
- /* session bind is local and must not fail project ensure */
753
- }
122
+ console.log(`Work mesh: story ${storyId} → ${patched.status} (v${patched.version ?? "?"})`);
754
123
  }
755
124
  async function runDoctor(opts) {
756
125
  if (opts.apply) {
757
126
  fail("`hq mesh doctor --apply` (paced Board PUTs from local prd.json) is not in the CLI yet.\n" +
758
127
  "Omit --apply to warm the conversation cache (directory, inbox, pair DMs).");
759
128
  }
760
- const identity = collectDaemonDoctor();
761
- const identityLines = formatCliIdentityLines(identity);
762
- if (!opts.json) {
763
- for (const line of identityLines)
764
- console.log(line);
765
- }
766
129
  const token = await requireToken();
767
130
  const principalUid = await resolveMeshPrincipalUid(token, loadCachedTokens());
768
- if (!principalUid) {
769
- fail("Could not resolve the authenticated principal. Sign in again and retry `hq mesh doctor`.");
770
- }
771
131
  const warmed = await warmMeshConversationCache(token, principalUid);
772
- const needsProject = listNeedsProjectSessions(workContextHomeRoot());
773
132
  if (opts.json) {
774
- console.log(JSON.stringify({
775
- ok: true,
776
- action: "doctor",
777
- ...warmed,
778
- needsProject,
779
- cliMismatchLine: identity.cliMismatchLine ?? null,
780
- hqOnPath: identity.hqOnPath,
781
- multipleHqOnPath: identity.multipleHqOnPath,
782
- }, null, 2));
133
+ console.log(JSON.stringify({ ok: true, action: "doctor", ...warmed }, null, 2));
783
134
  return;
784
135
  }
785
136
  console.log(`Work mesh cache warmed at ${warmed.cacheRoot}` +
786
137
  ` (directory=${warmed.directory} inbox=${warmed.inbox}` +
787
138
  ` contacts=${warmed.contacts} pair-threads=${warmed.threads})`);
788
- if (needsProject.length === 0) {
789
- console.log("needs_project sessions: none");
790
- return;
791
- }
792
- console.log(`needs_project sessions: ${needsProject.length}`);
793
- for (const row of needsProject) {
794
- const choices = row.candidates.map((candidate) => candidate.projectId).join(", ") || "(none)";
795
- console.log(`- ${row.sessionId}: ${row.reason ?? "no reason recorded"}; candidates: ${choices}`);
796
- }
797
- }
798
- async function runBindProject(target, opts) {
799
- const sessionId = opts.session.trim();
800
- const root = workContextHomeRoot();
801
- const current = readSessionState(sessionId, root);
802
- if (!current)
803
- fail(`No work-context state for session ${sessionId}.`);
804
- let projectId = target.trim();
805
- if (projectId === "new") {
806
- const slug = opts.slug?.trim();
807
- if (!slug)
808
- fail("Usage: hq mesh context bind-project new <slug> --session <sid>");
809
- const hqRoot = process.env.HQ_ROOT?.trim() || findHqRoot();
810
- const prdPath = findLocalPrd(hqRoot, current.companySlug, slug);
811
- if (!prdPath) {
812
- fail(`No PRD for ${slug}. Run /prd before binding a new project.`);
813
- }
814
- if (!current.companyUid)
815
- fail(`Session ${sessionId} has no company. Bind a company first.`);
816
- const { token, company } = await withCompany({ company: opts.company ?? current.companySlug });
817
- const plan = parseProjectPlan(readFileSync(prdPath, "utf8"), prdPath);
818
- await ensureProjectBoard({
819
- token,
820
- company: {
821
- companyUid: current.companyUid,
822
- companySlug: current.companySlug || company.companySlug,
823
- },
824
- projectId: slug,
825
- name: plan.name || slug,
826
- description: plan.description ?? "",
827
- stories: plan.stories,
828
- repos: plan.repos ?? [],
829
- });
830
- projectId = slug;
831
- }
832
- else if (/^[1-9][0-9]*$/.test(projectId)) {
833
- const index = Number(projectId) - 1;
834
- const chosen = current.projectCandidates?.[index];
835
- if (!chosen)
836
- fail(`No candidate ${projectId} on session ${sessionId}.`);
837
- projectId = chosen.projectId;
838
- }
839
- const updated = updateSessionState(sessionId, root, (state) => state ? applyOperatorProjectBinding(state, projectId) : null);
840
- if (!updated)
841
- fail(`No work-context state for session ${sessionId}.`);
842
- if (opts.json) {
843
- console.log(JSON.stringify({ ok: true, action: "context.bind-project", sessionId, projectId, contextStatus: updated.contextStatus }));
844
- return;
845
- }
846
- console.log(`Work mesh: session ${sessionId} bound to project ${projectId}`);
847
139
  }
848
140
  async function runContextReconcile(opts) {
849
141
  if (!opts.observationFile && !opts.observationJson) {
@@ -860,92 +152,25 @@ async function runContextReconcile(opts) {
860
152
  let fetchCandidates;
861
153
  let validateMembership;
862
154
  let offline = Boolean(opts.offline);
863
- let token;
864
- try {
865
- if (offline) {
866
- if (isMachineIdentity()) {
867
- token = await ensureCognitoToken({ tokenSource: "machine", interactive: false });
868
- }
869
- else {
870
- const cached = loadCachedTokens();
871
- if (cached && !isExpiring(cached, 120)) {
872
- token = cached.accessToken;
873
- }
874
- }
875
- }
876
- else {
877
- token = await requireToken();
878
- }
879
- if (token) {
880
- const sessionToken = token;
881
- const membershipValidationTimeoutMs = offline
882
- ? OFFLINE_MEMBERSHIP_VALIDATION_TIMEOUT_MS
883
- : ONLINE_MEMBERSHIP_VALIDATION_TIMEOUT_MS;
155
+ if (!offline) {
156
+ try {
157
+ const token = await requireToken();
158
+ deliver = createWorkSessionDeliverer({ token });
159
+ fetchCandidates = createCandidatesFetcher({ token });
884
160
  validateMembership = async (candidate) => {
885
- const membership = await new Promise((resolve, reject) => {
886
- const timer = setTimeout(() => reject(new Error("membership validation timed out")), membershipValidationTimeoutMs);
887
- void resolveActiveMembershipCompany(sessionToken, candidate).then((value) => {
888
- clearTimeout(timer);
889
- resolve(value);
890
- }, (error) => {
891
- clearTimeout(timer);
892
- reject(error);
893
- });
894
- });
895
- if (!membership || typeof membership.companyUid !== "string" || !membership.companyUid) {
161
+ const membership = await resolveActiveMembershipCompany(token, candidate);
162
+ if (!membership)
896
163
  return false;
897
- }
898
164
  return { uid: membership.companyUid };
899
165
  };
900
- if (!offline) {
901
- deliver = createWorkSessionDeliverer({ token: sessionToken });
902
- fetchCandidates = createCandidatesFetcher({ token: sessionToken });
903
- }
904
166
  }
905
- }
906
- catch {
907
- if (!offline) {
167
+ catch {
908
168
  offline = true;
909
169
  if (!opts.machine) {
910
170
  console.error(chalk.yellow("No Cognito session; reconciling offline (outbox only)."));
911
171
  }
912
172
  }
913
173
  }
914
- if (token) {
915
- const activation = await ensureDefaultCompany({
916
- root,
917
- listMemberships: () => listActiveMembershipCompanies(token),
918
- log: (message) => console.error(chalk.dim(message)),
919
- });
920
- if (activation.status === "needs_choice") {
921
- const interactive = !offline &&
922
- !opts.machine &&
923
- Boolean(process.stdin.isTTY && process.stdout.isTTY) &&
924
- !isMachineIdentity();
925
- if (interactive) {
926
- const choices = activation.memberships
927
- .map((membership, index) => `${index + 1}. ${membership.slug}`)
928
- .join("\n");
929
- const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
930
- try {
931
- const answer = await rl.question(`Choose this device's default company:\n${choices}\nSelection: `);
932
- const selected = activation.memberships[Number.parseInt(answer, 10) - 1];
933
- if (selected) {
934
- await setDefaultCompany(selected.slug, {
935
- root,
936
- validateMembership: (candidate) => candidate === selected.slug ? { uid: selected.uid } : false,
937
- });
938
- }
939
- }
940
- finally {
941
- rl.close();
942
- }
943
- }
944
- else if (!offline && !opts.machine) {
945
- console.error(chalk.yellow("Multiple active memberships. Run `hq mesh context default set <slug>` to choose this device's default company."));
946
- }
947
- }
948
- }
949
174
  const outcome = await reconcileObservation(obs, {
950
175
  root,
951
176
  env: process.env,
@@ -953,20 +178,6 @@ async function runContextReconcile(opts) {
953
178
  fetchCandidates,
954
179
  offline,
955
180
  validateMembership,
956
- ensureProjectBoard: token
957
- ? async ({ companyUid, projectId, prdPath }) => {
958
- const plan = parseProjectPlan(readFileSync(prdPath, "utf8"), prdPath);
959
- await ensureProjectBoard({
960
- token,
961
- company: { companyUid, companySlug: companyUid },
962
- projectId,
963
- name: plan.name || projectId,
964
- description: plan.description ?? "",
965
- stories: plan.stories,
966
- repos: plan.repos ?? [],
967
- });
968
- }
969
- : undefined,
970
181
  });
971
182
  for (const line of outcome.diagnostics) {
972
183
  console.error(line);
@@ -1083,21 +294,19 @@ async function runContextBackfillHeld(opts) {
1083
294
  const parsedLimit = opts.limit ? Number.parseInt(opts.limit, 10) : 0;
1084
295
  const limit = Number.isFinite(parsedLimit) && parsedLimit > 0 ? parsedLimit : 0;
1085
296
  const companyHint = opts.company?.trim() || undefined;
1086
- const useDeviceDefault = opts.useDeviceDefault === true || readDeviceConfig({ root }).repairHeldWithDefault === true;
1087
- // Build the membership seam for both modes; dry-run is read-only but must
1088
- // validate a locally resolved slug just as live reconciliation does.
1089
- // The remaining seams are captured in the reconcile closure below.
297
+ // Build the reconcile network seam exactly like `hq mesh context reconcile`.
298
+ // Not needed in --dry-run (reconcile is never invoked then). Explicit types
299
+ // because these are captured in the reconcile closure below (no control-flow
300
+ // narrowing, unlike the inline reconcile handler).
1090
301
  let deliver;
1091
302
  let fetchCandidates;
1092
303
  let validateMembership;
1093
304
  let offline = Boolean(opts.offline);
1094
- if (!offline) {
305
+ if (!dryRun && !offline) {
1095
306
  try {
1096
307
  const token = await requireToken();
1097
- if (!dryRun) {
1098
- deliver = createWorkSessionDeliverer({ token });
1099
- fetchCandidates = createCandidatesFetcher({ token });
1100
- }
308
+ deliver = createWorkSessionDeliverer({ token });
309
+ fetchCandidates = createCandidatesFetcher({ token });
1101
310
  validateMembership = async (candidate) => {
1102
311
  const membership = await resolveActiveMembershipCompany(token, candidate);
1103
312
  if (!membership)
@@ -1115,14 +324,11 @@ async function runContextBackfillHeld(opts) {
1115
324
  const result = await backfillHeldSessions({
1116
325
  workMeshRoot: meshRoot,
1117
326
  workContextRoot: root,
1118
- hqRoot: process.env.HQ_ROOT?.trim() || findHqRoot(),
1119
327
  dryRun,
1120
328
  limit,
1121
329
  // Mirror the reconcile closure's non-forcing hint in the dry-run predictor
1122
330
  // so `--dry-run` and the real run report the same counts.
1123
331
  remoteOwnerHint: companyHint || undefined,
1124
- useDeviceDefault,
1125
- validateMembership,
1126
332
  reconcile: (obs) => reconcileObservation(
1127
333
  // Pass --company as a non-forcing hint (remoteOwnerSlug feeds
1128
334
  // deterministic resolution BELOW the identity-file / device default,
@@ -1134,8 +340,6 @@ async function runContextBackfillHeld(opts) {
1134
340
  fetchCandidates,
1135
341
  offline,
1136
342
  validateMembership,
1137
- allowDeviceDefault: useDeviceDefault,
1138
- deviceDefaultConfidence: useDeviceDefault,
1139
343
  }),
1140
344
  });
1141
345
  if (opts.json) {
@@ -1150,9 +354,6 @@ async function runContextBackfillHeld(opts) {
1150
354
  `${result.unresolved} unresolved, ` +
1151
355
  `${result.errors} error(s).` +
1152
356
  (dryRun ? " (dry-run: nothing written)" : ""));
1153
- for (const { sessionId, reason } of result.unresolvedReasons) {
1154
- console.log(`Unresolved ${sessionId}: ${reason}`);
1155
- }
1156
357
  if (!dryRun && result.reconciled > 0) {
1157
358
  console.log("Reconciled session state files were rewritten with a resolved company; " +
1158
359
  "the mesh daemon's held retry will re-attribute and post those events.");
@@ -1161,38 +362,20 @@ async function runContextBackfillHeld(opts) {
1161
362
  async function runContextDefaultGet(opts) {
1162
363
  const root = workContextHomeRoot();
1163
364
  const cfg = readDeviceConfig({ root });
1164
- const current = cfg.defaultCompany?.enabled && cfg.defaultCompany.slug
1165
- ? cfg.defaultCompany
1166
- : null;
1167
- const memberships = cfg.defaultCompanyMemberships?.memberships ?? [];
1168
- const disabled = isDefaultCompanyDisabled({ root });
1169
- const source = disabled ? "disabled" : current?.source ?? (current ? "chosen" : "unset");
365
+ const current = getDefaultCompany({ root });
1170
366
  if (opts.json) {
1171
- console.log(JSON.stringify({
1172
- ok: true,
1173
- slug: current?.slug ?? null,
1174
- uid: current?.uid ?? null,
1175
- enabled: current?.enabled ?? false,
1176
- source,
1177
- needsChoice: !current && !disabled && memberships.length > 1,
1178
- memberships,
1179
- repairHeldWithDefault: cfg.repairHeldWithDefault === true,
1180
- }, null, 2));
1181
- return;
1182
- }
1183
- if (disabled) {
1184
- console.log("Default company disabled on this device.");
367
+ console.log(JSON.stringify({ ok: true, config: cfg, defaultCompany: current }, null, 2));
1185
368
  return;
1186
369
  }
1187
370
  if (!current) {
1188
371
  console.log("No device default company (default-company mode may be dark).");
1189
372
  return;
1190
373
  }
1191
- console.log(`Default company: ${current.slug}${current.uid ? ` (${current.uid})` : ""} enabled=${current.enabled} source=${source}`);
374
+ console.log(`Default company: ${current.slug}${current.uid ? ` (${current.uid})` : ""} enabled=${current.enabled}`);
1192
375
  }
1193
376
  async function runContextDefaultSet(slug, opts) {
1194
377
  const root = workContextHomeRoot();
1195
- void opts.company; // retained for CLI compatibility
378
+ void opts.company; // retained for CLI compatibility; unlock is memberships-wide
1196
379
  let token;
1197
380
  try {
1198
381
  token = await requireToken();
@@ -1200,38 +383,42 @@ async function runContextDefaultSet(slug, opts) {
1200
383
  catch {
1201
384
  token = undefined;
1202
385
  }
1203
- // Migration remains useful diagnostic context, but it must never prevent a
1204
- // verified member from choosing their own device-local preference.
386
+ // US-017B: unlock only when EVERY active membership advertises migration.
1205
387
  let migrationCapability = false;
1206
- let migrationWarning;
1207
388
  if (token) {
1208
389
  const probe = await probeMigrationCapabilityForMemberships(token);
1209
390
  recordMigrationCapabilitySnapshot(probe, { root });
1210
391
  migrationCapability = probe.unlocked;
1211
- if (probe.offline) {
1212
- migrationWarning =
1213
- "Warning: migration capability could not be checked; membership for the selected company will still be verified.";
392
+ if (probe.offline && !opts.allowWithoutMigration) {
393
+ console.error(chalk.red("DEFAULT_COMPANY_LOCKED: cannot probe migration capability (offline or not logged in)"));
394
+ process.exitCode = 1;
395
+ return;
1214
396
  }
1215
- else if (!probe.unlocked) {
397
+ if (!probe.unlocked && !opts.allowWithoutMigration) {
1216
398
  const detail = probe.companies.length === 0
1217
399
  ? "no active memberships"
1218
400
  : probe.companies
1219
401
  .filter((c) => !c.migration)
1220
402
  .map((c) => c.companySlug || c.companyUid)
1221
403
  .join(", ");
1222
- migrationWarning =
1223
- `Warning: migration capability is mixed or unavailable for ${detail || "some memberships"}; ` +
1224
- "the selected company can still be set because membership is verified directly.";
404
+ console.error(chalk.red(`DEFAULT_COMPANY_LOCKED: migration capability is not true for every company you belong to (${detail || "locked"})`));
405
+ process.exitCode = 1;
406
+ return;
1225
407
  }
1226
408
  }
1227
- else {
1228
- migrationWarning =
1229
- "Warning: migration capability could not be checked without a Cognito session; membership for the selected company must still be verified.";
409
+ else if (!opts.allowWithoutMigration) {
410
+ console.error(chalk.red("DEFAULT_COMPANY_LOCKED: cannot probe migration capability (no Cognito session)"));
411
+ process.exitCode = 1;
412
+ return;
413
+ }
414
+ if (!migrationCapability && opts.allowWithoutMigration) {
415
+ console.error(chalk.yellow("Warning: --allow-without-migration bypasses DEFAULT_COMPANY_LOCKED; a wrong default is hard to correct until migration is available for every company you belong to."));
1230
416
  }
1231
417
  try {
1232
418
  const cfg = await setDefaultCompany(slug, {
1233
419
  root,
1234
420
  migrationCapability,
421
+ allowWithoutMigration: opts.allowWithoutMigration,
1235
422
  validateMembership: async (candidate) => {
1236
423
  if (!token) {
1237
424
  throw new DefaultCompanyUnavailableError(`Cannot verify membership for company "${candidate}" (no Cognito session; offline or not logged in)`);
@@ -1249,20 +436,16 @@ async function runContextDefaultSet(slug, opts) {
1249
436
  return { uid: membership.companyUid };
1250
437
  },
1251
438
  });
1252
- const configured = opts.repairHeldWithDefault
1253
- ? setRepairHeldWithDefault(true, { root })
1254
- : cfg;
1255
439
  if (opts.json) {
1256
- console.log(JSON.stringify({ ok: true, config: configured, migrationWarning }, null, 2));
440
+ console.log(JSON.stringify({ ok: true, config: cfg }, null, 2));
1257
441
  return;
1258
442
  }
1259
- const stored = configured.defaultCompany;
443
+ const stored = cfg.defaultCompany;
1260
444
  console.log(`Default company set to ${stored?.slug ?? slug}${stored?.uid ? ` (${stored.uid})` : ""}`);
1261
- if (migrationWarning)
1262
- console.error(chalk.yellow(migrationWarning));
1263
445
  }
1264
446
  catch (err) {
1265
- if (err instanceof DefaultCompanyUnavailableError) {
447
+ if (err instanceof DefaultCompanyLockedError ||
448
+ err instanceof DefaultCompanyUnavailableError) {
1266
449
  console.error(chalk.red(`${err.code}: ${err.message}`));
1267
450
  process.exitCode = 1;
1268
451
  return;
@@ -1532,16 +715,13 @@ async function runSessionStatus(opts) {
1532
715
  }
1533
716
  const { token, company } = await withCompany({ company: opts.company });
1534
717
  const live = await fetchCompanyLive(token, company.companyUid);
1535
- const unattributedEvents = collectDaemonDoctor().unattributedEvents;
1536
718
  if (opts.json) {
1537
- console.log(JSON.stringify({ ok: true, action: "session-status", company, live, unattributedEvents }, null, 2));
719
+ console.log(JSON.stringify({ ok: true, action: "session-status", company, live }, null, 2));
1538
720
  return;
1539
721
  }
1540
722
  for (const line of formatCompanyLiveTable(live, company.companySlug || company.companyUid)) {
1541
723
  console.log(line);
1542
724
  }
1543
- console.log(`unattributed events: ${unattributedEvents.total} ` +
1544
- `(spool=${unattributedEvents.spool} held=${unattributedEvents.held} dead-letter=${unattributedEvents.deadLetter})`);
1545
725
  }
1546
726
  const HARNESSES = new Set([
1547
727
  "claude-code",
@@ -1574,21 +754,6 @@ async function runSessionEnqueue(cliKind, opts) {
1574
754
  const sessionId = resolveEnqueueSessionId(opts.sessionId, process.env);
1575
755
  if (!sessionId)
1576
756
  fail("sessionId required (--session-id or HQ_SESSION_ID)");
1577
- if (kind === "turn_start") {
1578
- try {
1579
- rebindNeedsProjectOnPrompt({
1580
- sessionId,
1581
- root: workContextHomeRoot(),
1582
- hqRoot: opts.hqRoot?.trim() || process.env.HQ_ROOT,
1583
- cwd: opts.cwd,
1584
- companySlug: opts.companySlug,
1585
- env: process.env,
1586
- });
1587
- }
1588
- catch {
1589
- /* prompt rebind is fail-soft */
1590
- }
1591
- }
1592
757
  const evidence = buildEmitEvidence({
1593
758
  sessionId: sessionId,
1594
759
  hqRoot: opts.hqRoot,
@@ -1598,16 +763,7 @@ async function runSessionEnqueue(cliKind, opts) {
1598
763
  companySlug: opts.companySlug,
1599
764
  project: opts.project,
1600
765
  task: opts.task,
1601
- env: process.env,
1602
766
  });
1603
- const reportFields = kind === "session_end"
1604
- ? enrichSessionEndEvent({
1605
- kind,
1606
- sessionId: sessionId,
1607
- cwd: opts.cwd,
1608
- summary: opts.summary,
1609
- })
1610
- : {};
1611
767
  const event = buildMeshEmitEvent({
1612
768
  eventId: opts.eventId?.trim() || generateUlid(Date.now()),
1613
769
  kind: kind,
@@ -1621,35 +777,10 @@ async function runSessionEnqueue(cliKind, opts) {
1621
777
  taskId: opts.taskId,
1622
778
  status: opts.status,
1623
779
  reason: opts.reason,
1624
- summary: opts.summary ||
1625
- (typeof reportFields.summary === "string" ? reportFields.summary : undefined),
1626
- repo: typeof reportFields.repo === "string" ? reportFields.repo : undefined,
1627
- gitBranch: typeof reportFields.gitBranch === "string"
1628
- ? reportFields.gitBranch
1629
- : undefined,
1630
- prUrls: Array.isArray(reportFields.prUrls)
1631
- ? reportFields.prUrls
1632
- : undefined,
780
+ summary: opts.summary,
1633
781
  evidence,
1634
782
  });
1635
783
  const meshRoot = workMeshHomeRoot();
1636
- // A machine credential with no company must not be posted. The server files
1637
- // that as company NONE. Hold it and say why.
1638
- if (machineEmitDisposition({ machine: isMachineIdentity(), companySlug: evidence.companySlug }) === "hold") {
1639
- appendHeldLine(JSON.stringify({
1640
- event,
1641
- heldReason: "NEEDS_COMPANY",
1642
- heldAt: new Date().toISOString(),
1643
- reason: "machine session has no company; event was not sent",
1644
- }), meshRoot);
1645
- const heldMessage = `work-mesh: held ${kind}; needs_company (machine session has no company; not sent)`;
1646
- if (opts.json) {
1647
- console.log(JSON.stringify({ ok: true, action: "emit", kind, held: true, reason: "needs_company" }, null, 2));
1648
- return;
1649
- }
1650
- console.error(heldMessage);
1651
- return;
1652
- }
1653
784
  // Resolve a token non-interactively (same path as every CLI call). If the box
1654
785
  // is not logged in, retain the event locally for the next invocation to drain.
1655
786
  let token;
@@ -1685,9 +816,6 @@ async function runSessionEnqueue(cliKind, opts) {
1685
816
  console.error(`work-mesh: emit ${kind} accepted=${summary.accepted}` +
1686
817
  ` unassigned=${summary.unassigned} rejected=${summary.rejected}` +
1687
818
  ` retryDepth=${summary.retryDepth}`);
1688
- for (const line of formatEmitRejectionLines(summary.rejections)) {
1689
- console.error(line);
1690
- }
1691
819
  }
1692
820
  async function runMeshMode(action, opts) {
1693
821
  const meshRoot = workMeshHomeRoot();
@@ -1772,9 +900,6 @@ async function runMeshEmit(opts) {
1772
900
  ` unassigned=${summary.unassigned} rejected=${summary.rejected}` +
1773
901
  ` retryDepth=${summary.retryDepth}` +
1774
902
  (opts.replayLegacy ? ` (legacy scanned=${scanned} skipped=${skipped})` : ""));
1775
- for (const line of formatEmitRejectionLines(summary.rejections)) {
1776
- console.log(line);
1777
- }
1778
903
  }
1779
904
  async function runSessionFlush(opts) {
1780
905
  const token = await requireToken();
@@ -1873,43 +998,9 @@ export function registerMeshCommand(program) {
1873
998
  .option("--summary <text>", "Note text")).action((opts) => wrap(() => runEvent("note", opts))());
1874
999
  addSharedFlags(mesh
1875
1000
  .command("story")
1876
- .description("PATCH one Board story status and/or assignee")
1001
+ .description("PATCH one Board story status")
1877
1002
  .requiredOption("--story <id>", "Story id, e.g. US-001")
1878
- .option("--status <status>", "queued|in_progress|review|done")
1879
- .option("--assignee <uid|me|none>", "Assign a person or agent uid, yourself, or clear")).action((opts) => wrap(() => runStory(opts))());
1880
- const project = mesh
1881
- .command("project")
1882
- .description("Set a project Board view or register its project channel");
1883
- project
1884
- .command("set <projectId>")
1885
- .description("PUT the project Board view from flags or a PRD JSON file")
1886
- .requiredOption("--company <slug|uid>", "Company slug or cloud uid")
1887
- .option("--name <name>", "Project name")
1888
- .option("--description <text>", "Project description")
1889
- .option("--stories-file <path>", "PRD JSON file with userStories")
1890
- .option("--stories-json <json>", "Story array or JSON object with userStories")
1891
- .option("--repos-json <json>", "Repository array, such as [{path,branch}]")
1892
- .option("--repo <path[@branch]>", "Repository binding (repeatable)", collectRepeatable)
1893
- .option("--channel <channelId>", "Bind the project to an existing company or project channel")
1894
- .option("--create", "Create the Board view when the GET is a 404")
1895
- .option("--reset-status", "Overwrite live story status from the PRD (prints a one-line summary of changes)")
1896
- .option("--json", "Print machine-readable JSON")
1897
- .action((projectId, opts) => wrap(() => runProjectSet(projectId, opts))());
1898
- project
1899
- .command("ensure <projectId>")
1900
- .description("Idempotently register a PRD on the Board and verify the view")
1901
- .requiredOption("--company <slug|uid>", "Company slug or cloud uid")
1902
- .requiredOption("--stories-file <path>", "PRD JSON file with userStories and metadata.repos")
1903
- .option("--dry-run", "Read the current Board and print computed story statuses without writing")
1904
- .option("--json", "Print {projectId, threadId, channelId, version, stories}")
1905
- .action((projectId, opts) => wrap(() => runProjectEnsure(projectId, opts))());
1906
- project
1907
- .command("register <projectId>")
1908
- .description("Register an existing Board and bind its project channel; use project ensure to create or repair a Board")
1909
- .requiredOption("--company <slug|uid>", "Company slug or cloud uid")
1910
- .option("--channel <channelId>", "Bind the project to an existing company or project channel")
1911
- .option("--json", "Print machine-readable JSON")
1912
- .action((projectId, opts) => wrap(() => runProjectRegister(projectId, opts))());
1003
+ .requiredOption("--status <status>", "queued|in_progress|review|done")).action((opts) => wrap(() => runStory(opts))());
1913
1004
  mesh
1914
1005
  .command("doctor")
1915
1006
  .description("Warm ~/.hq/work-mesh/cache from hq-pro (directory, inbox, pair DMs). Not `hq doctor`.")
@@ -1939,29 +1030,12 @@ export function registerMeshCommand(program) {
1939
1030
  context
1940
1031
  .command("backfill-held")
1941
1032
  .description("Reconcile ENDED sessions whose held events lack a company so the daemon re-attributes the backlog (explicit, opt-in; no fleet fan-out)")
1942
- .option("--dry-run", "Report what would be reconciled; write nothing or deliver events")
1033
+ .option("--dry-run", "Report what would be reconciled; write nothing, no network")
1943
1034
  .option("--offline", "Reconcile outbox-only (no candidates/register network)")
1944
1035
  .option("--limit <n>", "Cap sessions processed (default 0 = no cap)")
1945
- .option("--company <slug>", "Optional non-forcing company hint")
1946
- .option("--use-device-default", "Opt in to historical repair using the device default (lower-confidence attribution)")
1036
+ .option("--company <slug>", "Optional non-forcing company hint (resolver default still wins)")
1947
1037
  .option("--json", "Print machine-readable JSON")
1948
1038
  .action((opts) => wrap(() => runContextBackfillHeld(opts))());
1949
- context
1950
- .command("bind-project")
1951
- .description("Bind this session to a project id, a numbered candidate, or new <slug>")
1952
- .argument("<target>", "Project id, candidate number, or new")
1953
- .argument("[slug]", "Project slug when target is new")
1954
- .requiredOption("--session <sid>", "Canonical session id")
1955
- .option("--company <slug|uid>", "Company override when creating a Board")
1956
- .option("--json", "Print machine-readable JSON")
1957
- .action((target, slug, opts) => wrap(() => runBindProject(target, { ...opts, slug }))());
1958
- context
1959
- .command("prd-sync")
1960
- .description("Emit task_status for PRD story passes/status changes on a bound session")
1961
- .requiredOption("--session <sid>", "Canonical session id")
1962
- .requiredOption("--file <path>", "prd.json written by the bound session")
1963
- .option("--json", "Print machine-readable JSON")
1964
- .action((opts) => wrap(() => runPrdSync(opts))());
1965
1039
  context
1966
1040
  .command("organize")
1967
1041
  .description("List or submit one-time project/task decisions (US-007B / US-005B)")
@@ -2011,11 +1085,10 @@ export function registerMeshCommand(program) {
2011
1085
  .action((opts) => wrap(() => runContextDefaultGet(opts))());
2012
1086
  def
2013
1087
  .command("set")
2014
- .description("Set the device default company slug after verifying membership")
1088
+ .description("Set the device default company slug (unlocked when migration is true for every membership)")
2015
1089
  .argument("<slug>", "Company slug")
2016
- .option("--allow-without-migration", "Deprecated compatibility no-op; selected-company membership is always verified")
2017
- .option("--repair-held-with-default", "Persist opt-in for lower-confidence historical held-session repair")
2018
- .option("--company <slug|uid>", "Deprecated no-op; the selected company is verified directly")
1090
+ .option("--allow-without-migration", "Bypass DEFAULT_COMPANY_LOCKED with a warning")
1091
+ .option("--company <slug|uid>", "Deprecated no-op; unlock probes every active membership")
2019
1092
  .option("--json", "Print machine-readable JSON")
2020
1093
  .action((slug, opts) => wrap(() => runContextDefaultSet(slug, opts))());
2021
1094
  def
@@ -2029,19 +1102,6 @@ export function registerMeshCommand(program) {
2029
1102
  .argument("<sessionId>", "Canonical session id")
2030
1103
  .option("--machine", "Write exactly one ContextResult JSON line to stdout")
2031
1104
  .action((sessionId, opts) => wrap(() => runContextUntracked(sessionId, opts))());
2032
- const contract = mesh
2033
- .command("contract")
2034
- .description("Print versioned work-mesh contracts for other repositories");
2035
- contract
2036
- .command("preflight")
2037
- .description("Offline preflight ContextResult contract (contracts/preflight/v1)")
2038
- .option("--print-fixtures", "Write the fixture file JSON to stdout")
2039
- .action((opts) => wrap(async () => {
2040
- if (!opts.printFixtures) {
2041
- throw new Error("Pass --print-fixtures. The stable package path is contracts/preflight/v1/fixtures.json.");
2042
- }
2043
- process.stdout.write(`${JSON.stringify(buildPreflightFixtures(), null, 2)}\n`);
2044
- })());
2045
1105
  const session = mesh
2046
1106
  .command("session")
2047
1107
  .description("Local session-event spool: enqueue (printf-compatible), flush, and live status");
@@ -2088,14 +1148,11 @@ export function registerMeshCommand(program) {
2088
1148
  daemon
2089
1149
  .command("run")
2090
1150
  .description("Start the single-instance daemon (pid lock, spool watch, presence)")
2091
- .option("--hq-root <path>", "HQ tree root (else HQ_ROOT / persisted trusted roots); the Windows task passes this explicitly")
2092
- .action((opts) => wrap(() => runDaemonRun(opts))());
1151
+ .action(() => wrap(() => runDaemonRun())());
2093
1152
  daemon
2094
1153
  .command("install")
2095
- .description("Install LaunchAgent (macOS), systemd user unit (Linux), or Scheduled Task (Windows)")
1154
+ .description("Install LaunchAgent (macOS) or systemd user unit (Linux)")
2096
1155
  .option("--system-user <user>", "Write a root-owned unit template for agent boxes (e.g. ec2-user)")
2097
- .option("--hq-root <path>", "HQ root to record for the service (else HQ_ROOT, else the nearest HQ root above cwd)")
2098
- .option("--if-stale", "Reinstall and restart only when this CLI is newer than the daemon's recorded version")
2099
1156
  .option("--json", "Print machine-readable JSON")
2100
1157
  .action((opts) => wrap(() => runDaemonInstall(opts))());
2101
1158
  daemon
@@ -2114,65 +1171,18 @@ export function registerMeshCommand(program) {
2114
1171
  .option("--json", "Print machine-readable JSON")
2115
1172
  .action((opts) => wrap(() => runDaemonDoctorCmd(opts))());
2116
1173
  }
2117
- async function runDaemonRun(opts = {}) {
2118
- const hqRoot = opts.hqRoot?.trim() || undefined;
2119
- const handle = await runMeshDaemon({
2120
- ...(hqRoot ? { hqRoot } : {}),
2121
- enableWorkCache: true,
2122
- });
1174
+ async function runDaemonRun() {
1175
+ const handle = await runMeshDaemon();
2123
1176
  // Stay alive until signal handlers call stop + exit.
2124
1177
  await new Promise(() => {
2125
1178
  void handle;
2126
1179
  });
2127
1180
  }
2128
1181
  async function runDaemonInstall(opts) {
2129
- // `hq daemon` runs mesh on this machine: installing a second unit would run it twice.
2130
- // An explicit --hq-root is verified the same way as below and saved for the daemon.
2131
- const explicitRoot = opts.hqRoot ? resolveInstallHqRoot({ explicit: opts.hqRoot }).root : undefined;
2132
- const handedOff = opts.systemUser
2133
- ? null
2134
- : handOffInstallHere(["mesh"], process.env, { hqRoot: explicitRoot, ifStale: opts.ifStale });
2135
- if (handedOff) {
2136
- console.log(opts.json ? JSON.stringify({ ok: true, action: "hq-daemon", reinstalled: false, message: handedOff }) : handedOff);
2137
- return;
2138
- }
2139
- // Verified root only: a repo's own .claude/ must never become the daemon's
2140
- // HQ root (that path is persisted as trusted and used for attribution).
2141
- const hqRoot = resolveInstallHqRoot({ explicit: opts.hqRoot });
2142
- const paths = buildInstallPaths({
2143
- systemUser: opts.systemUser,
2144
- hqRoot: hqRoot.root,
2145
- hqRootSource: hqRoot.source,
2146
- hqBinary: resolveRunningCliEntry(),
2147
- nodeBinary: resolveAbsoluteNodeBinary(),
2148
- });
2149
- if (opts.ifStale) {
2150
- const stale = installDaemonIfStale({
2151
- currentVersion: CLI_VERSION,
2152
- platform: detectPlatform(),
2153
- paths,
2154
- systemUser: opts.systemUser,
2155
- });
2156
- if (opts.json) {
2157
- console.log(JSON.stringify({
2158
- ok: true,
2159
- action: stale.reinstalled ? "install" : "unchanged",
2160
- reinstalled: stale.reinstalled,
2161
- message: stale.message,
2162
- hqBinary: paths.hqBinary,
2163
- nodeBinary: paths.nodeBinary,
2164
- hqRoot: hqRoot.root,
2165
- }, null, 2));
2166
- return;
2167
- }
2168
- console.log(stale.message);
2169
- return;
2170
- }
2171
1182
  const result = installDaemonService({
2172
1183
  platform: detectPlatform(),
2173
- paths,
1184
+ paths: buildInstallPaths({ systemUser: opts.systemUser }),
2174
1185
  systemUser: opts.systemUser,
2175
- run: defaultRunCommand,
2176
1186
  });
2177
1187
  if (opts.json) {
2178
1188
  console.log(JSON.stringify({
@@ -2181,15 +1191,10 @@ async function runDaemonInstall(opts) {
2181
1191
  platform: result.platform,
2182
1192
  dest: result.dest,
2183
1193
  message: result.message,
2184
- hqRoot: hqRoot.root,
2185
- hqRootSource: hqRoot.source,
2186
- ...(result.notice ? { notice: result.notice } : {}),
2187
1194
  }, null, 2));
2188
1195
  return;
2189
1196
  }
2190
1197
  console.log(result.message);
2191
- if (result.notice)
2192
- console.log(result.notice);
2193
1198
  }
2194
1199
  async function runDaemonUninstall(opts) {
2195
1200
  const result = uninstallDaemonService({
@@ -2208,14 +1213,12 @@ async function runDaemonUninstall(opts) {
2208
1213
  }
2209
1214
  console.log(result.message);
2210
1215
  }
2211
- export async function runDaemonStatus(opts, deps = {}) {
2212
- const paths = deps.paths ?? buildInstallPaths({});
1216
+ async function runDaemonStatus(opts) {
2213
1217
  const result = daemonServiceStatus({
2214
- platform: deps.platform ?? detectPlatform(),
2215
- paths,
2216
- isLoaded: daemonServiceIsLoaded(deps.run ?? defaultRunCommand, deps.uid),
1218
+ platform: detectPlatform(),
1219
+ paths: buildInstallPaths({}),
2217
1220
  });
2218
- const state = readDaemonState(paths.daemonDir);
1221
+ const state = readDaemonState(daemonDir());
2219
1222
  const presenceRefusal = state?.presenceRefusal ?? null;
2220
1223
  if (opts.json) {
2221
1224
  console.log(JSON.stringify({
@@ -2225,21 +1228,12 @@ export async function runDaemonStatus(opts, deps = {}) {
2225
1228
  running: result.running ?? false,
2226
1229
  dest: result.dest,
2227
1230
  message: result.message,
2228
- ...(result.lastResult !== undefined ? { lastResult: result.lastResult } : {}),
2229
- ...(result.lastRunFailed !== undefined ? { lastRunFailed: result.lastRunFailed } : {}),
2230
- ...(result.recordedHqRoot !== undefined ? { hqRoot: result.recordedHqRoot } : {}),
2231
- ...(result.rootValid !== undefined ? { rootValid: result.rootValid } : {}),
2232
- ...(result.notice ? { notice: result.notice } : {}),
2233
1231
  mqttState: state?.mqttState,
2234
1232
  presenceRefusal,
2235
1233
  }, null, 2));
2236
1234
  return;
2237
1235
  }
2238
1236
  console.log(result.message);
2239
- if (result.recordedHqRoot)
2240
- console.log(`hq root: ${result.recordedHqRoot}`);
2241
- if (result.notice)
2242
- console.log(result.notice);
2243
1237
  if (presenceRefusal) {
2244
1238
  console.log(`presence refusal: ${presenceRefusal.code} (HTTP ${presenceRefusal.status}); next retry at ${presenceRefusal.nextRetryAt}`);
2245
1239
  }
@@ -2248,11 +1242,7 @@ export async function runDaemonStatus(opts, deps = {}) {
2248
1242
  }
2249
1243
  }
2250
1244
  async function runDaemonDoctorCmd(opts) {
2251
- // Same predicate as install: a repo's .claude/ is not an HQ root. Doctor
2252
- // only reads, so an unresolvable root is reported as absent, not fatal.
2253
- const report = collectDaemonDoctor({
2254
- hqRoot: process.env.HQ_ROOT?.trim() || findAncestorHqRoot(process.cwd()) || undefined,
2255
- });
1245
+ const report = collectDaemonDoctor();
2256
1246
  if (opts.json) {
2257
1247
  console.log(JSON.stringify({ ok: !report.unhealthy, ...report }, null, 2));
2258
1248
  return;