@indigoai-us/hq-cli 5.313.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 (1174) hide show
  1. package/CHANGELOG.md +1 -4300
  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 -357
  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 -68
  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 -277
  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 -87
  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 -20
  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 +7 -26
  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 -53
  187. package/dist/lib/mesh/live/daemon/doctor.js +6 -190
  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 -13
  236. package/dist/lib/work-context/contract.schema.json +1 -3
  237. package/dist/lib/work-context/index.d.ts +25 -0
  238. package/dist/lib/work-context/index.js +21 -0
  239. package/dist/lib/work-context/outbox.d.ts +5 -27
  240. package/dist/lib/work-context/outbox.js +6 -135
  241. package/dist/lib/work-context/reconcile.d.ts +0 -15
  242. package/dist/lib/work-context/reconcile.js +29 -405
  243. package/dist/lib/work-context/state.d.ts +10 -93
  244. package/dist/lib/work-context/state.js +29 -342
  245. package/dist/lib/workers-registry/index.js +8 -62
  246. package/dist/main.d.ts +0 -32
  247. package/dist/main.js +73 -273
  248. package/dist/node-network-compat.d.ts +30 -2
  249. package/dist/node-network-compat.js +51 -4
  250. package/dist/node-preflight.d.ts +1 -7
  251. package/dist/node-preflight.js +5 -5
  252. package/dist/register-all.d.ts +29 -4
  253. package/dist/register-all.js +233 -4
  254. package/dist/run/discover-schemas.d.ts +1 -2
  255. package/dist/run/env-graph-guard.d.ts +2 -2
  256. package/dist/run/env-graph-guard.js +2 -5
  257. package/dist/run/hq-plugin.d.ts +0 -4
  258. package/dist/run/hq-plugin.js +8 -36
  259. package/dist/sentry-before-send.js +0 -80
  260. package/dist/sentry.d.ts +2 -8
  261. package/dist/sentry.js +13 -117
  262. package/dist/startup-registration.d.ts +2 -26
  263. package/dist/startup-registration.js +15 -116
  264. package/dist/utils/cli-telemetry.d.ts +1 -74
  265. package/dist/utils/cli-telemetry.js +7 -434
  266. package/dist/utils/client-health.d.ts +4 -0
  267. package/dist/utils/client-health.js +2 -2
  268. package/dist/utils/cognito-session.d.ts +0 -71
  269. package/dist/utils/cognito-session.js +27 -481
  270. package/dist/utils/contribution-table.d.ts +1 -1
  271. package/dist/utils/environmental-error.d.ts +0 -18
  272. package/dist/utils/environmental-error.js +7 -240
  273. package/dist/utils/expected-cli-error.d.ts +0 -2
  274. package/dist/utils/expected-cli-error.js +0 -4
  275. package/dist/utils/feedback-diagnostics.d.ts +1 -2
  276. package/dist/utils/feedback-log-bundle.d.ts +26 -51
  277. package/dist/utils/feedback-log-bundle.js +31 -211
  278. package/dist/utils/feedback-logs.d.ts +47 -18
  279. package/dist/utils/feedback-logs.js +21 -50
  280. package/dist/utils/feedback-screenshots.d.ts +1 -0
  281. package/dist/utils/feedback-screenshots.js +1 -1
  282. package/dist/utils/hq-roots.d.ts +2 -25
  283. package/dist/utils/hq-roots.js +7 -67
  284. package/dist/utils/incomplete-install-error.d.ts +19 -87
  285. package/dist/utils/incomplete-install-error.js +68 -319
  286. package/dist/utils/install-tree-torn.d.ts +24 -260
  287. package/dist/utils/install-tree-torn.js +51 -998
  288. package/dist/utils/large-file-guard.d.ts +10 -0
  289. package/dist/utils/large-file-guard.js +1 -1
  290. package/dist/utils/local-files-overview.d.ts +8 -4
  291. package/dist/utils/local-files-overview.js +7 -48
  292. package/dist/utils/login-provider.d.ts +0 -7
  293. package/dist/utils/login-provider.js +0 -34
  294. package/dist/utils/pack-contributions.d.ts +14 -2
  295. package/dist/utils/pack-contributions.js +44 -7
  296. package/dist/utils/package-root-diagnostics.d.ts +1 -1
  297. package/dist/utils/people.d.ts +11 -7
  298. package/dist/utils/people.js +20 -5
  299. package/dist/utils/plan-gate-error.d.ts +10 -52
  300. package/dist/utils/plan-gate-error.js +41 -364
  301. package/dist/utils/qmd-model-download-error.d.ts +8 -0
  302. package/dist/utils/qmd-model-download-error.js +1 -1
  303. package/dist/utils/qmd-query-document-error.d.ts +6 -0
  304. package/dist/utils/qmd-query-document-error.js +1 -1
  305. package/dist/utils/redact-error-text.d.ts +2 -0
  306. package/dist/utils/redact-error-text.js +2 -3
  307. package/dist/utils/run-bundled-script.d.ts +0 -6
  308. package/dist/utils/run-bundled-script.js +4 -117
  309. package/dist/utils/sandbox-runner-client.d.ts +1 -2
  310. package/dist/utils/secrets-cache.d.ts +3 -7
  311. package/dist/utils/secrets-cache.js +14 -162
  312. package/dist/utils/self-update.d.ts +1 -34
  313. package/dist/utils/self-update.js +42 -660
  314. package/dist/utils/sentry-fingerprint.d.ts +1 -23
  315. package/dist/utils/sentry-fingerprint.js +31 -223
  316. package/dist/utils/team-upgrade.d.ts +1 -1
  317. package/dist/utils/team-upgrade.js +3 -4
  318. package/dist/utils/vault-api.d.ts +1 -21
  319. package/dist/utils/vault-api.js +84 -251
  320. package/dist/utils/version-check.d.ts +1 -11
  321. package/dist/utils/version-check.js +3 -32
  322. package/dist/utils/version-gate.d.ts +17 -101
  323. package/dist/utils/version-gate.js +70 -645
  324. package/dist/utils/windows-spawn.d.ts +0 -6
  325. package/dist/utils/windows-spawn.js +0 -37
  326. package/package.json +8 -20
  327. package/README.md +0 -113
  328. package/assets/bot-workers/setup/context/USER-GUIDE.md +0 -404
  329. package/assets/bot-workers/setup/context/quick-reference.md +0 -199
  330. package/assets/bot-workers/setup/skills/agents-and-team.md +0 -167
  331. package/assets/bot-workers/setup/skills/explain-hq.md +0 -35
  332. package/assets/bot-workers/setup/skills/first-company.md +0 -74
  333. package/assets/bot-workers/setup/skills/joining-a-team.md +0 -125
  334. package/assets/bot-workers/setup/skills/pricing.md +0 -92
  335. package/assets/bot-workers/setup/skills/standing-help.md +0 -81
  336. package/assets/bot-workers/setup/skills/your-business.md +0 -281
  337. package/assets/bot-workers/setup/worker.yaml +0 -791
  338. package/assets/lanes-hooks/hq-lanes-drain.json +0 -15
  339. package/assets/lanes-hooks/hq-lanes-drain.mjs +0 -275
  340. package/assets/lanes-hooks/hq-lanes-drain.sh +0 -21
  341. package/assets/lanes-reconcile/hq-lanes-reconcile.service +0 -11
  342. package/assets/lanes-reconcile/hq-lanes-reconcile.timer +0 -12
  343. package/assets/scaffold/.claude/hooks/validate-policy-frontmatter.sh +0 -485
  344. package/assets/scaffold/core/scripts/audit-log.sh +0 -384
  345. package/assets/scaffold/core/scripts/clean-worktree-reconcile-handoff.sh +0 -171
  346. package/assets/scaffold/core/scripts/eval-trigger.sh +0 -193
  347. package/assets/scaffold/core/scripts/git-pack-extension-check.sh +0 -164
  348. package/assets/scaffold/core/scripts/handoff-finalize.sh +0 -688
  349. package/assets/scaffold/core/scripts/handoff-open-steps.sh +0 -81
  350. package/assets/scaffold/core/scripts/handoff-post.sh +0 -252
  351. package/assets/scaffold/core/scripts/hq-delegate-bundle.sh +0 -307
  352. package/assets/scaffold/core/scripts/hq-delegate-grant.sh +0 -252
  353. package/assets/scaffold/core/scripts/hq-delegate-pickup.sh +0 -99
  354. package/assets/scaffold/core/scripts/hq-delegate-publish.sh +0 -91
  355. package/assets/scaffold/core/scripts/hq-delegate-repo.sh +0 -158
  356. package/assets/scaffold/core/scripts/hq-delegate-resolve.sh +0 -145
  357. package/assets/scaffold/core/scripts/hq-delegate-secrets.sh +0 -129
  358. package/assets/scaffold/core/scripts/hq-delegate-send.sh +0 -259
  359. package/assets/scaffold/core/scripts/hq-delegate-transfer.sh +0 -175
  360. package/assets/scaffold/core/scripts/hq-delegate-verify.sh +0 -238
  361. package/assets/scaffold/core/scripts/hq-dm-bind.sh +0 -585
  362. package/assets/scaffold/core/scripts/hq-job-notify.sh +0 -389
  363. package/assets/scaffold/core/scripts/hq-job-probe.sh +0 -835
  364. package/assets/scaffold/core/scripts/hq-job-remediate.sh +0 -359
  365. package/assets/scaffold/core/scripts/hq-job-run.sh +0 -1025
  366. package/assets/scaffold/core/scripts/hq-pin.sh +0 -118
  367. package/assets/scaffold/core/scripts/jobs-schedule-parse.sh +0 -310
  368. package/assets/scaffold/core/scripts/jobs-validate.sh +0 -451
  369. package/assets/scaffold/core/scripts/knowledge-prefs.sh +0 -55
  370. package/assets/scaffold/core/scripts/lib/portable.sh +0 -211
  371. package/assets/scaffold/core/scripts/lib/secret-patterns.sh +0 -58
  372. package/assets/scaffold/core/scripts/lib/work-mesh-live-hook.sh +0 -378
  373. package/assets/scaffold/core/scripts/lib/work-mesh-live-rebind.sh +0 -141
  374. package/assets/scaffold/core/scripts/migrate-policy-triggers.sh +0 -373
  375. package/assets/scaffold/core/scripts/ontology-audience-grant.sh +0 -81
  376. package/assets/scaffold/core/scripts/ontology-brief.mjs +0 -93
  377. package/assets/scaffold/core/scripts/ontology-candidate.sh +0 -100
  378. package/assets/scaffold/core/scripts/ontology-garden.mjs +0 -238
  379. package/assets/scaffold/core/scripts/ontology-source-worklist.sh +0 -79
  380. package/assets/scaffold/core/scripts/outpost-jobs-reconcile.sh +0 -834
  381. package/assets/scaffold/core/scripts/policy-age-report.sh +0 -156
  382. package/assets/scaffold/core/scripts/policy-retire.sh +0 -199
  383. package/assets/scaffold/core/scripts/qmd-reindex-bg.sh +0 -40
  384. package/assets/scaffold/core/scripts/read-policy-frontmatter.sh +0 -32
  385. package/assets/scaffold/core/scripts/refresh-vault-access.sh +0 -188
  386. package/assets/scaffold/core/scripts/register-project.sh +0 -262
  387. package/assets/scaffold/core/scripts/resolve-company.sh +0 -199
  388. package/assets/scaffold/core/scripts/resume-thread-lock.sh +0 -285
  389. package/assets/scaffold/core/scripts/source-yaml-validate.sh +0 -36
  390. package/assets/scaffold/core/scripts/verify-story-deliverables.sh +0 -148
  391. package/assets/scaffold/core/scripts/work-mesh-live-bind-trusted.sh +0 -152
  392. package/assets/scaffold/core/scripts/work-mesh-live-rebind.sh +0 -59
  393. package/assets/scaffold/core/scripts/worktree-gc.sh +0 -362
  394. package/contracts/preflight/v1/fixtures.json +0 -87
  395. package/contracts/preflight/v1/schema.json +0 -58
  396. package/dist/command-catalog.generated.d.ts +0 -10735
  397. package/dist/command-catalog.generated.js +0 -13836
  398. package/dist/command-registration-plan.d.ts +0 -474
  399. package/dist/command-registration-plan.js +0 -136
  400. package/dist/commands/agent-enroll.d.ts +0 -146
  401. package/dist/commands/agent-enroll.js +0 -401
  402. package/dist/commands/agent-inbox.d.ts +0 -9
  403. package/dist/commands/agent-inbox.js +0 -102
  404. package/dist/commands/agent-kit.d.ts +0 -87
  405. package/dist/commands/agent-kit.js +0 -480
  406. package/dist/commands/agent-mcp.d.ts +0 -24
  407. package/dist/commands/agent-mcp.js +0 -127
  408. package/dist/commands/agent-probe.d.ts +0 -77
  409. package/dist/commands/agent-probe.js +0 -335
  410. package/dist/commands/agent.d.ts +0 -13
  411. package/dist/commands/agent.js +0 -40
  412. package/dist/commands/billing-sponsor.d.ts +0 -83
  413. package/dist/commands/billing-sponsor.js +0 -344
  414. package/dist/commands/bot-companies.d.ts +0 -40
  415. package/dist/commands/bot-companies.js +0 -64
  416. package/dist/commands/bot-continuity.d.ts +0 -28
  417. package/dist/commands/bot-continuity.js +0 -68
  418. package/dist/commands/bot-jobs.d.ts +0 -127
  419. package/dist/commands/bot-jobs.js +0 -454
  420. package/dist/commands/bot.d.ts +0 -278
  421. package/dist/commands/bot.js +0 -1982
  422. package/dist/commands/cloud-retire.d.ts +0 -51
  423. package/dist/commands/cloud-retire.js +0 -154
  424. package/dist/commands/company-rename-flag.d.ts +0 -4
  425. package/dist/commands/company-rename-flag.js +0 -7
  426. package/dist/commands/company-rename.d.ts +0 -4
  427. package/dist/commands/company-rename.js +0 -90
  428. package/dist/commands/core-audit-log-native.d.ts +0 -9
  429. package/dist/commands/core-audit-log-native.js +0 -257
  430. package/dist/commands/core-checkpoint-gate-setting.d.ts +0 -59
  431. package/dist/commands/core-checkpoint-gate-setting.js +0 -163
  432. package/dist/commands/core-checkpoint-stop-gate-native.d.ts +0 -34
  433. package/dist/commands/core-checkpoint-stop-gate-native.js +0 -725
  434. package/dist/commands/core-command-catalog.d.ts +0 -34
  435. package/dist/commands/core-command-catalog.js +0 -62
  436. package/dist/commands/core-company-index-scope-flag.d.ts +0 -3
  437. package/dist/commands/core-company-index-scope-flag.js +0 -6
  438. package/dist/commands/core-delegate-w1b.d.ts +0 -10
  439. package/dist/commands/core-delegate-w1b.js +0 -1219
  440. package/dist/commands/core-delegate.d.ts +0 -46
  441. package/dist/commands/core-delegate.js +0 -1040
  442. package/dist/commands/core-dm-bind-native.d.ts +0 -32
  443. package/dist/commands/core-dm-bind-native.js +0 -668
  444. package/dist/commands/core-eval-trigger-native.d.ts +0 -4
  445. package/dist/commands/core-eval-trigger-native.js +0 -12
  446. package/dist/commands/core-git-pack-extension-check-native.d.ts +0 -22
  447. package/dist/commands/core-git-pack-extension-check-native.js +0 -190
  448. package/dist/commands/core-handoff-fast.d.ts +0 -18
  449. package/dist/commands/core-handoff-fast.js +0 -104
  450. package/dist/commands/core-handoff-open-steps.d.ts +0 -21
  451. package/dist/commands/core-handoff-open-steps.js +0 -264
  452. package/dist/commands/core-handoff.d.ts +0 -24
  453. package/dist/commands/core-handoff.js +0 -1144
  454. package/dist/commands/core-hq-session-native.d.ts +0 -39
  455. package/dist/commands/core-hq-session-native.js +0 -579
  456. package/dist/commands/core-job-native-utils.d.ts +0 -6
  457. package/dist/commands/core-job-native-utils.js +0 -80
  458. package/dist/commands/core-job-native.d.ts +0 -5
  459. package/dist/commands/core-job-native.js +0 -16
  460. package/dist/commands/core-job-notify-native.d.ts +0 -36
  461. package/dist/commands/core-job-notify-native.js +0 -359
  462. package/dist/commands/core-job-probe-native.d.ts +0 -45
  463. package/dist/commands/core-job-probe-native.js +0 -564
  464. package/dist/commands/core-job-remediate-native.d.ts +0 -26
  465. package/dist/commands/core-job-remediate-native.js +0 -374
  466. package/dist/commands/core-job-remote-launcher.d.ts +0 -7
  467. package/dist/commands/core-job-remote-launcher.js +0 -51
  468. package/dist/commands/core-job-run-native.d.ts +0 -47
  469. package/dist/commands/core-job-run-native.js +0 -1215
  470. package/dist/commands/core-jobs-native.d.ts +0 -25
  471. package/dist/commands/core-jobs-native.js +0 -1339
  472. package/dist/commands/core-knowledge-prefs.d.ts +0 -11
  473. package/dist/commands/core-knowledge-prefs.js +0 -137
  474. package/dist/commands/core-migrate-policy-triggers-native.d.ts +0 -21
  475. package/dist/commands/core-migrate-policy-triggers-native.js +0 -378
  476. package/dist/commands/core-native-handoff-flag.d.ts +0 -4
  477. package/dist/commands/core-native-handoff-flag.js +0 -7
  478. package/dist/commands/core-native-hook-helper-commands.d.ts +0 -4
  479. package/dist/commands/core-native-hook-helper-commands.js +0 -56
  480. package/dist/commands/core-native-hook-helpers-flag.d.ts +0 -4
  481. package/dist/commands/core-native-hook-helpers-flag.js +0 -7
  482. package/dist/commands/core-native-jobs-flag.d.ts +0 -4
  483. package/dist/commands/core-native-jobs-flag.js +0 -7
  484. package/dist/commands/core-native-policy-flag.d.ts +0 -9
  485. package/dist/commands/core-native-policy-flag.js +0 -12
  486. package/dist/commands/core-native-session-flag.d.ts +0 -4
  487. package/dist/commands/core-native-session-flag.js +0 -7
  488. package/dist/commands/core-native-utilities-flag.d.ts +0 -4
  489. package/dist/commands/core-native-utilities-flag.js +0 -7
  490. package/dist/commands/core-native-utilities.d.ts +0 -29
  491. package/dist/commands/core-native-utilities.js +0 -54
  492. package/dist/commands/core-native-worker-skills-flag.d.ts +0 -4
  493. package/dist/commands/core-native-worker-skills-flag.js +0 -7
  494. package/dist/commands/core-ontology-native.d.ts +0 -17
  495. package/dist/commands/core-ontology-native.js +0 -916
  496. package/dist/commands/core-ontology.d.ts +0 -66
  497. package/dist/commands/core-ontology.js +0 -430
  498. package/dist/commands/core-pin-native.d.ts +0 -14
  499. package/dist/commands/core-pin-native.js +0 -236
  500. package/dist/commands/core-policy-frontmatter.d.ts +0 -8
  501. package/dist/commands/core-policy-frontmatter.js +0 -52
  502. package/dist/commands/core-policy.d.ts +0 -14
  503. package/dist/commands/core-policy.js +0 -1018
  504. package/dist/commands/core-refresh-vault-access-native.d.ts +0 -20
  505. package/dist/commands/core-refresh-vault-access-native.js +0 -229
  506. package/dist/commands/core-register-project-native.d.ts +0 -30
  507. package/dist/commands/core-register-project-native.js +0 -347
  508. package/dist/commands/core-resolve-company-command.d.ts +0 -4
  509. package/dist/commands/core-resolve-company-command.js +0 -42
  510. package/dist/commands/core-resolve-company-native.d.ts +0 -28
  511. package/dist/commands/core-resolve-company-native.js +0 -408
  512. package/dist/commands/core-work-mesh-bind-trusted-native.d.ts +0 -32
  513. package/dist/commands/core-work-mesh-bind-trusted-native.js +0 -190
  514. package/dist/commands/core-work-mesh-live-rebind-native.d.ts +0 -18
  515. package/dist/commands/core-work-mesh-live-rebind-native.js +0 -262
  516. package/dist/commands/core-worker-lint-native.d.ts +0 -4
  517. package/dist/commands/core-worker-lint-native.js +0 -160
  518. package/dist/commands/core-worker-share-native.d.ts +0 -4
  519. package/dist/commands/core-worker-share-native.js +0 -260
  520. package/dist/commands/core-worker-skills-command.d.ts +0 -8
  521. package/dist/commands/core-worker-skills-command.js +0 -33
  522. package/dist/commands/core-worker-skills-runtime.d.ts +0 -33
  523. package/dist/commands/core-worker-skills-runtime.js +0 -86
  524. package/dist/commands/daemon.d.ts +0 -63
  525. package/dist/commands/daemon.js +0 -877
  526. package/dist/commands/deploy-comments.d.ts +0 -3
  527. package/dist/commands/deploy-comments.js +0 -162
  528. package/dist/commands/lanes-accounts.d.ts +0 -28
  529. package/dist/commands/lanes-accounts.js +0 -595
  530. package/dist/commands/lanes-autopilot.d.ts +0 -11
  531. package/dist/commands/lanes-autopilot.js +0 -336
  532. package/dist/commands/lanes-checks.d.ts +0 -51
  533. package/dist/commands/lanes-checks.js +0 -941
  534. package/dist/commands/lanes-hold.d.ts +0 -43
  535. package/dist/commands/lanes-hold.js +0 -655
  536. package/dist/commands/lanes-kpis.d.ts +0 -11
  537. package/dist/commands/lanes-kpis.js +0 -34
  538. package/dist/commands/lanes-message.d.ts +0 -9
  539. package/dist/commands/lanes-message.js +0 -937
  540. package/dist/commands/lanes-move.d.ts +0 -12
  541. package/dist/commands/lanes-move.js +0 -397
  542. package/dist/commands/lanes-questions.d.ts +0 -36
  543. package/dist/commands/lanes-questions.js +0 -1005
  544. package/dist/commands/lanes-report.d.ts +0 -11
  545. package/dist/commands/lanes-report.js +0 -333
  546. package/dist/commands/lanes-resume.d.ts +0 -6
  547. package/dist/commands/lanes-resume.js +0 -564
  548. package/dist/commands/lanes-review.d.ts +0 -10
  549. package/dist/commands/lanes-review.js +0 -56
  550. package/dist/commands/lanes-shared.d.ts +0 -448
  551. package/dist/commands/lanes-shared.js +0 -170
  552. package/dist/commands/lanes-stories.d.ts +0 -15
  553. package/dist/commands/lanes-stories.js +0 -347
  554. package/dist/commands/lanes-watch.d.ts +0 -7
  555. package/dist/commands/lanes-watch.js +0 -216
  556. package/dist/commands/lanes.d.ts +0 -149
  557. package/dist/commands/lanes.js +0 -8973
  558. package/dist/commands/monitor.d.ts +0 -58
  559. package/dist/commands/monitor.js +0 -980
  560. package/dist/commands/onboard-bot-membership.d.ts +0 -32
  561. package/dist/commands/onboard-bot-membership.js +0 -40
  562. package/dist/commands/onboard-create-identity.d.ts +0 -26
  563. package/dist/commands/onboard-create-identity.js +0 -23
  564. package/dist/commands/outpost-pruner.d.ts +0 -3
  565. package/dist/commands/outpost-pruner.js +0 -125
  566. package/dist/commands/personal-connector-settings-flag.d.ts +0 -4
  567. package/dist/commands/personal-connector-settings-flag.js +0 -7
  568. package/dist/commands/personal-targeted-push-flag.d.ts +0 -4
  569. package/dist/commands/personal-targeted-push-flag.js +0 -7
  570. package/dist/commands/personal-targeted-push-paths.d.ts +0 -3
  571. package/dist/commands/personal-targeted-push-paths.js +0 -67
  572. package/dist/commands/report.d.ts +0 -19
  573. package/dist/commands/report.js +0 -537
  574. package/dist/commands/run-feature-telemetry.d.ts +0 -3
  575. package/dist/commands/run-feature-telemetry.js +0 -6
  576. package/dist/commands/staff/reset-test-account.d.ts +0 -110
  577. package/dist/commands/staff/reset-test-account.js +0 -268
  578. package/dist/commands/staff/test-account.d.ts +0 -51
  579. package/dist/commands/staff/test-account.js +0 -196
  580. package/dist/commands/vault-retention-flag.d.ts +0 -3
  581. package/dist/commands/vault-retention-flag.js +0 -9
  582. package/dist/commands/vault-retention.d.ts +0 -11
  583. package/dist/commands/vault-retention.js +0 -69
  584. package/dist/commands/version.d.ts +0 -10
  585. package/dist/commands/version.js +0 -11
  586. package/dist/fast-scaffold.d.ts +0 -86
  587. package/dist/fast-scaffold.js +0 -364
  588. package/dist/lanes-drain-hook.d.ts +0 -14
  589. package/dist/lanes-drain-hook.js +0 -203
  590. package/dist/lib/agent-kit/adopt-identity.d.ts +0 -27
  591. package/dist/lib/agent-kit/adopt-identity.js +0 -60
  592. package/dist/lib/agent-kit/attachment-download.d.ts +0 -24
  593. package/dist/lib/agent-kit/attachment-download.js +0 -47
  594. package/dist/lib/agent-kit/creds.d.ts +0 -106
  595. package/dist/lib/agent-kit/creds.js +0 -163
  596. package/dist/lib/agent-kit/fallback.d.ts +0 -78
  597. package/dist/lib/agent-kit/fallback.js +0 -210
  598. package/dist/lib/agent-kit/inbox-state.d.ts +0 -83
  599. package/dist/lib/agent-kit/inbox-state.js +0 -159
  600. package/dist/lib/agent-kit/kit-config.d.ts +0 -56
  601. package/dist/lib/agent-kit/kit-config.js +0 -65
  602. package/dist/lib/agent-kit/log.d.ts +0 -16
  603. package/dist/lib/agent-kit/log.js +0 -46
  604. package/dist/lib/agent-kit/mcp/attachments.d.ts +0 -126
  605. package/dist/lib/agent-kit/mcp/attachments.js +0 -222
  606. package/dist/lib/agent-kit/mcp/jsonrpc.d.ts +0 -75
  607. package/dist/lib/agent-kit/mcp/jsonrpc.js +0 -164
  608. package/dist/lib/agent-kit/mcp/tools.d.ts +0 -64
  609. package/dist/lib/agent-kit/mcp/tools.js +0 -397
  610. package/dist/lib/agent-kit/paths.d.ts +0 -65
  611. package/dist/lib/agent-kit/paths.js +0 -118
  612. package/dist/lib/agent-kit/private-file.d.ts +0 -29
  613. package/dist/lib/agent-kit/private-file.js +0 -91
  614. package/dist/lib/agent-kit/run/heartbeat.d.ts +0 -72
  615. package/dist/lib/agent-kit/run/heartbeat.js +0 -128
  616. package/dist/lib/agent-kit/run/inbox.d.ts +0 -76
  617. package/dist/lib/agent-kit/run/inbox.js +0 -205
  618. package/dist/lib/agent-kit/run/supervisor.d.ts +0 -35
  619. package/dist/lib/agent-kit/run/supervisor.js +0 -85
  620. package/dist/lib/agent-kit/run/sync.d.ts +0 -33
  621. package/dist/lib/agent-kit/run/sync.js +0 -58
  622. package/dist/lib/agent-kit/services.d.ts +0 -31
  623. package/dist/lib/agent-kit/services.js +0 -55
  624. package/dist/lib/agent-kit/skills.d.ts +0 -18
  625. package/dist/lib/agent-kit/skills.js +0 -151
  626. package/dist/lib/agent-kit/wake.d.ts +0 -83
  627. package/dist/lib/agent-kit/wake.js +0 -243
  628. package/dist/lib/agents/model-catalog.d.ts +0 -62
  629. package/dist/lib/agents/model-catalog.js +0 -275
  630. package/dist/lib/auth-login-provider-state.d.ts +0 -8
  631. package/dist/lib/auth-login-provider-state.js +0 -63
  632. package/dist/lib/aws-sdk-node-warning-output.d.ts +0 -12
  633. package/dist/lib/aws-sdk-node-warning-output.js +0 -22
  634. package/dist/lib/billing/free-month.d.ts +0 -18
  635. package/dist/lib/billing/free-month.js +0 -31
  636. package/dist/lib/billing/plan-limit-refusals.d.ts +0 -69
  637. package/dist/lib/billing/plan-limit-refusals.js +0 -187
  638. package/dist/lib/billing/plan-limit-upgrade-url.d.ts +0 -11
  639. package/dist/lib/billing/plan-limit-upgrade-url.js +0 -66
  640. package/dist/lib/billing/plan-lock.d.ts +0 -143
  641. package/dist/lib/billing/plan-lock.js +0 -439
  642. package/dist/lib/bot/api.d.ts +0 -349
  643. package/dist/lib/bot/api.js +0 -316
  644. package/dist/lib/bot/attachments.d.ts +0 -45
  645. package/dist/lib/bot/attachments.js +0 -89
  646. package/dist/lib/bot/cli-update.d.ts +0 -138
  647. package/dist/lib/bot/cli-update.js +0 -278
  648. package/dist/lib/bot/company-bind.d.ts +0 -27
  649. package/dist/lib/bot/company-bind.js +0 -62
  650. package/dist/lib/bot/config.d.ts +0 -153
  651. package/dist/lib/bot/config.js +0 -233
  652. package/dist/lib/bot/continuity-download.d.ts +0 -28
  653. package/dist/lib/bot/continuity-download.js +0 -75
  654. package/dist/lib/bot/continuity-install.d.ts +0 -14
  655. package/dist/lib/bot/continuity-install.js +0 -101
  656. package/dist/lib/bot/continuity.d.ts +0 -67
  657. package/dist/lib/bot/continuity.js +0 -301
  658. package/dist/lib/bot/creds.d.ts +0 -24
  659. package/dist/lib/bot/creds.js +0 -51
  660. package/dist/lib/bot/daemon.d.ts +0 -173
  661. package/dist/lib/bot/daemon.js +0 -552
  662. package/dist/lib/bot/inbox-poll-backoff-flag.d.ts +0 -24
  663. package/dist/lib/bot/inbox-poll-backoff-flag.js +0 -135
  664. package/dist/lib/bot/inbox-state.d.ts +0 -18
  665. package/dist/lib/bot/inbox-state.js +0 -51
  666. package/dist/lib/bot/index.d.ts +0 -23
  667. package/dist/lib/bot/index.js +0 -23
  668. package/dist/lib/bot/inflight.d.ts +0 -119
  669. package/dist/lib/bot/inflight.js +0 -83
  670. package/dist/lib/bot/job-completions.d.ts +0 -89
  671. package/dist/lib/bot/job-completions.js +0 -132
  672. package/dist/lib/bot/job-run.d.ts +0 -109
  673. package/dist/lib/bot/job-run.js +0 -246
  674. package/dist/lib/bot/local-config.d.ts +0 -61
  675. package/dist/lib/bot/local-config.js +0 -145
  676. package/dist/lib/bot/local-jobs.d.ts +0 -89
  677. package/dist/lib/bot/local-jobs.js +0 -459
  678. package/dist/lib/bot/local-name.d.ts +0 -54
  679. package/dist/lib/bot/local-name.js +0 -114
  680. package/dist/lib/bot/log.d.ts +0 -13
  681. package/dist/lib/bot/log.js +0 -59
  682. package/dist/lib/bot/owner-context.d.ts +0 -79
  683. package/dist/lib/bot/owner-context.js +0 -175
  684. package/dist/lib/bot/paths.d.ts +0 -76
  685. package/dist/lib/bot/paths.js +0 -131
  686. package/dist/lib/bot/progress.d.ts +0 -132
  687. package/dist/lib/bot/progress.js +0 -289
  688. package/dist/lib/bot/promote.d.ts +0 -16
  689. package/dist/lib/bot/promote.js +0 -106
  690. package/dist/lib/bot/promotion-hold.d.ts +0 -24
  691. package/dist/lib/bot/promotion-hold.js +0 -103
  692. package/dist/lib/bot/promotion-receipt.d.ts +0 -9
  693. package/dist/lib/bot/promotion-receipt.js +0 -56
  694. package/dist/lib/bot/promotion-upload.d.ts +0 -16
  695. package/dist/lib/bot/promotion-upload.js +0 -80
  696. package/dist/lib/bot/prompt.d.ts +0 -136
  697. package/dist/lib/bot/prompt.js +0 -433
  698. package/dist/lib/bot/room-policy.d.ts +0 -63
  699. package/dist/lib/bot/room-policy.js +0 -91
  700. package/dist/lib/bot/run.d.ts +0 -217
  701. package/dist/lib/bot/run.js +0 -1869
  702. package/dist/lib/bot/runnable.d.ts +0 -51
  703. package/dist/lib/bot/runnable.js +0 -65
  704. package/dist/lib/bot/runtime/claude.d.ts +0 -50
  705. package/dist/lib/bot/runtime/claude.js +0 -170
  706. package/dist/lib/bot/runtime/codex.d.ts +0 -28
  707. package/dist/lib/bot/runtime/codex.js +0 -153
  708. package/dist/lib/bot/runtime/grok-acp.d.ts +0 -40
  709. package/dist/lib/bot/runtime/grok-acp.js +0 -265
  710. package/dist/lib/bot/runtime/grok.d.ts +0 -41
  711. package/dist/lib/bot/runtime/grok.js +0 -169
  712. package/dist/lib/bot/runtime/index.d.ts +0 -36
  713. package/dist/lib/bot/runtime/index.js +0 -417
  714. package/dist/lib/bot/runtime/messages-stream.d.ts +0 -56
  715. package/dist/lib/bot/runtime/messages-stream.js +0 -194
  716. package/dist/lib/bot/runtime/sanitize.d.ts +0 -18
  717. package/dist/lib/bot/runtime/sanitize.js +0 -28
  718. package/dist/lib/bot/runtime/types.d.ts +0 -159
  719. package/dist/lib/bot/runtime/types.js +0 -51
  720. package/dist/lib/bot/runtime/windows.d.ts +0 -10
  721. package/dist/lib/bot/runtime/windows.js +0 -53
  722. package/dist/lib/bot/runtime-sign-in.d.ts +0 -24
  723. package/dist/lib/bot/runtime-sign-in.js +0 -31
  724. package/dist/lib/bot/scaffold.d.ts +0 -38
  725. package/dist/lib/bot/scaffold.js +0 -94
  726. package/dist/lib/bot/self-heal.d.ts +0 -52
  727. package/dist/lib/bot/self-heal.js +0 -79
  728. package/dist/lib/bot/self-process.d.ts +0 -19
  729. package/dist/lib/bot/self-process.js +0 -35
  730. package/dist/lib/bot/session.d.ts +0 -19
  731. package/dist/lib/bot/session.js +0 -39
  732. package/dist/lib/bot/setup-explain.d.ts +0 -64
  733. package/dist/lib/bot/setup-explain.js +0 -141
  734. package/dist/lib/bot/split.d.ts +0 -32
  735. package/dist/lib/bot/split.js +0 -241
  736. package/dist/lib/bot/status.d.ts +0 -57
  737. package/dist/lib/bot/status.js +0 -66
  738. package/dist/lib/bot/worker-source.d.ts +0 -66
  739. package/dist/lib/bot/worker-source.js +0 -283
  740. package/dist/lib/checkpoint-ontology/aliases.d.ts +0 -17
  741. package/dist/lib/checkpoint-ontology/aliases.js +0 -44
  742. package/dist/lib/checkpoint-ontology/apply.d.ts +0 -110
  743. package/dist/lib/checkpoint-ontology/apply.js +0 -777
  744. package/dist/lib/checkpoint-ontology/company-brief.d.ts +0 -18
  745. package/dist/lib/checkpoint-ontology/company-brief.js +0 -337
  746. package/dist/lib/checkpoint-ontology/company.d.ts +0 -44
  747. package/dist/lib/checkpoint-ontology/company.js +0 -118
  748. package/dist/lib/checkpoint-ontology/drop-aliases.d.ts +0 -41
  749. package/dist/lib/checkpoint-ontology/drop-aliases.js +0 -76
  750. package/dist/lib/checkpoint-ontology/entity-file.d.ts +0 -109
  751. package/dist/lib/checkpoint-ontology/entity-file.js +0 -371
  752. package/dist/lib/checkpoint-ontology/identity.d.ts +0 -38
  753. package/dist/lib/checkpoint-ontology/identity.js +0 -95
  754. package/dist/lib/checkpoint-ontology/merge-copies.d.ts +0 -199
  755. package/dist/lib/checkpoint-ontology/merge-copies.js +0 -1086
  756. package/dist/lib/checkpoint-ontology/multi-writer.d.ts +0 -101
  757. package/dist/lib/checkpoint-ontology/multi-writer.js +0 -394
  758. package/dist/lib/checkpoint-ontology/plan.d.ts +0 -193
  759. package/dist/lib/checkpoint-ontology/plan.js +0 -504
  760. package/dist/lib/checkpoint-ontology/queued-touches.d.ts +0 -29
  761. package/dist/lib/checkpoint-ontology/queued-touches.js +0 -193
  762. package/dist/lib/checkpoint-ontology/sync-client.d.ts +0 -38
  763. package/dist/lib/checkpoint-ontology/sync-client.js +0 -84
  764. package/dist/lib/checkpoint-ontology/tree.d.ts +0 -55
  765. package/dist/lib/checkpoint-ontology/tree.js +0 -198
  766. package/dist/lib/company-errors-sdk-warning-flag.d.ts +0 -5
  767. package/dist/lib/company-errors-sdk-warning-flag.js +0 -8
  768. package/dist/lib/core-utils/hook-timeout-debug-context-flag.d.ts +0 -20
  769. package/dist/lib/core-utils/hook-timeout-debug-context-flag.js +0 -81
  770. package/dist/lib/core-utils/jq-json-serializer.d.ts +0 -5
  771. package/dist/lib/core-utils/jq-json-serializer.js +0 -10
  772. package/dist/lib/core-utils/secret-patterns.d.ts +0 -43
  773. package/dist/lib/core-utils/secret-patterns.js +0 -34
  774. package/dist/lib/core-utils/sentry-report.d.ts +0 -114
  775. package/dist/lib/core-utils/sentry-report.js +0 -1034
  776. package/dist/lib/core-utils/timeout-guard-native.d.ts +0 -7
  777. package/dist/lib/core-utils/timeout-guard-native.js +0 -40
  778. package/dist/lib/core-utils/worktree-resume.d.ts +0 -20
  779. package/dist/lib/core-utils/worktree-resume.js +0 -1198
  780. package/dist/lib/daemon/catalog.d.ts +0 -134
  781. package/dist/lib/daemon/catalog.js +0 -358
  782. package/dist/lib/daemon/config.d.ts +0 -35
  783. package/dist/lib/daemon/config.js +0 -108
  784. package/dist/lib/daemon/flag.d.ts +0 -25
  785. package/dist/lib/daemon/flag.js +0 -59
  786. package/dist/lib/daemon/handoff.d.ts +0 -56
  787. package/dist/lib/daemon/handoff.js +0 -161
  788. package/dist/lib/daemon/hq-cloud.d.ts +0 -79
  789. package/dist/lib/daemon/hq-cloud.js +0 -183
  790. package/dist/lib/daemon/install.d.ts +0 -85
  791. package/dist/lib/daemon/install.js +0 -320
  792. package/dist/lib/daemon/legacy-sync-env.d.ts +0 -10
  793. package/dist/lib/daemon/legacy-sync-env.js +0 -58
  794. package/dist/lib/daemon/legacy.d.ts +0 -45
  795. package/dist/lib/daemon/legacy.js +0 -133
  796. package/dist/lib/daemon/lock.d.ts +0 -47
  797. package/dist/lib/daemon/lock.js +0 -138
  798. package/dist/lib/daemon/machine-type.d.ts +0 -50
  799. package/dist/lib/daemon/machine-type.js +0 -159
  800. package/dist/lib/daemon/migrate.d.ts +0 -77
  801. package/dist/lib/daemon/migrate.js +0 -265
  802. package/dist/lib/daemon/paths.d.ts +0 -24
  803. package/dist/lib/daemon/paths.js +0 -43
  804. package/dist/lib/daemon/protocol-tail.d.ts +0 -33
  805. package/dist/lib/daemon/protocol-tail.js +0 -131
  806. package/dist/lib/daemon/remote-control.d.ts +0 -74
  807. package/dist/lib/daemon/remote-control.js +0 -153
  808. package/dist/lib/daemon/requests.d.ts +0 -28
  809. package/dist/lib/daemon/requests.js +0 -65
  810. package/dist/lib/daemon/run.d.ts +0 -79
  811. package/dist/lib/daemon/run.js +0 -755
  812. package/dist/lib/daemon/succession.d.ts +0 -118
  813. package/dist/lib/daemon/succession.js +0 -263
  814. package/dist/lib/daemon/supervisor.d.ts +0 -132
  815. package/dist/lib/daemon/supervisor.js +0 -836
  816. package/dist/lib/daemon/sync-runner.d.ts +0 -58
  817. package/dist/lib/daemon/sync-runner.js +0 -277
  818. package/dist/lib/daemon/tools.d.ts +0 -52
  819. package/dist/lib/daemon/tools.js +0 -95
  820. package/dist/lib/daemon/updater.d.ts +0 -57
  821. package/dist/lib/daemon/updater.js +0 -163
  822. package/dist/lib/deploy-api.d.ts +0 -5
  823. package/dist/lib/deploy-api.js +0 -21
  824. package/dist/lib/deploy-apps.d.ts +0 -13
  825. package/dist/lib/deploy-apps.js +0 -29
  826. package/dist/lib/doctor/__testing__/run-doctor.d.ts +0 -8
  827. package/dist/lib/doctor/__testing__/run-doctor.js +0 -52
  828. package/dist/lib/doctor/checks/bots.d.ts +0 -13
  829. package/dist/lib/doctor/checks/bots.js +0 -189
  830. package/dist/lib/doctor/checks/scaffold-cli-floor.d.ts +0 -6
  831. package/dist/lib/doctor/checks/scaffold-cli-floor.js +0 -73
  832. package/dist/lib/doctor/checks/sync-runtime.d.ts +0 -11
  833. package/dist/lib/doctor/checks/sync-runtime.js +0 -216
  834. package/dist/lib/doctor/client-health-flag-token.d.ts +0 -15
  835. package/dist/lib/doctor/client-health-flag-token.js +0 -66
  836. package/dist/lib/doctor/client-health-reason-codes-flag.d.ts +0 -27
  837. package/dist/lib/doctor/client-health-reason-codes-flag.js +0 -106
  838. package/dist/lib/doctor/fix/json-output.d.ts +0 -28
  839. package/dist/lib/doctor/fix/json-output.js +0 -33
  840. package/dist/lib/doctor/fix/refresh-sync-outcome.d.ts +0 -12
  841. package/dist/lib/doctor/fix/refresh-sync-outcome.js +0 -25
  842. package/dist/lib/doctor/shared.d.ts +0 -8
  843. package/dist/lib/doctor/shared.js +0 -38
  844. package/dist/lib/doctor/stray-gate-entries.d.ts +0 -35
  845. package/dist/lib/doctor/stray-gate-entries.js +0 -83
  846. package/dist/lib/first-sync-next-step.d.ts +0 -37
  847. package/dist/lib/first-sync-next-step.js +0 -189
  848. package/dist/lib/flag-registry-endpoint.d.ts +0 -5
  849. package/dist/lib/flag-registry-endpoint.js +0 -9
  850. package/dist/lib/flag-registry-worker-source.generated.d.ts +0 -2
  851. package/dist/lib/flag-registry-worker-source.generated.js +0 -3
  852. package/dist/lib/flag-snapshot-file.d.ts +0 -20
  853. package/dist/lib/flag-snapshot-file.js +0 -91
  854. package/dist/lib/heartbeat-identity.d.ts +0 -30
  855. package/dist/lib/heartbeat-identity.js +0 -76
  856. package/dist/lib/lanes/account-home.d.ts +0 -8
  857. package/dist/lib/lanes/account-home.js +0 -10
  858. package/dist/lib/lanes/accounts.d.ts +0 -117
  859. package/dist/lib/lanes/accounts.js +0 -366
  860. package/dist/lib/lanes/admission-host.d.ts +0 -22
  861. package/dist/lib/lanes/admission-host.js +0 -37
  862. package/dist/lib/lanes/admission.d.ts +0 -26
  863. package/dist/lib/lanes/admission.js +0 -210
  864. package/dist/lib/lanes/approval-gate.d.ts +0 -8
  865. package/dist/lib/lanes/approval-gate.js +0 -90
  866. package/dist/lib/lanes/autopilot-metrics.d.ts +0 -99
  867. package/dist/lib/lanes/autopilot-metrics.js +0 -301
  868. package/dist/lib/lanes/autopilot-registry.d.ts +0 -62
  869. package/dist/lib/lanes/autopilot-registry.js +0 -192
  870. package/dist/lib/lanes/autopilot.d.ts +0 -120
  871. package/dist/lib/lanes/autopilot.js +0 -1061
  872. package/dist/lib/lanes/blocker-freshness.d.ts +0 -31
  873. package/dist/lib/lanes/blocker-freshness.js +0 -168
  874. package/dist/lib/lanes/checked-company-path.d.ts +0 -3
  875. package/dist/lib/lanes/checked-company-path.js +0 -39
  876. package/dist/lib/lanes/claude-balance.d.ts +0 -97
  877. package/dist/lib/lanes/claude-balance.js +0 -319
  878. package/dist/lib/lanes/compaction.d.ts +0 -110
  879. package/dist/lib/lanes/compaction.js +0 -293
  880. package/dist/lib/lanes/config.d.ts +0 -94
  881. package/dist/lib/lanes/config.js +0 -606
  882. package/dist/lib/lanes/constants.d.ts +0 -3
  883. package/dist/lib/lanes/constants.js +0 -3
  884. package/dist/lib/lanes/delivery-core.d.ts +0 -15
  885. package/dist/lib/lanes/delivery-core.js +0 -21
  886. package/dist/lib/lanes/delivery.d.ts +0 -180
  887. package/dist/lib/lanes/delivery.js +0 -443
  888. package/dist/lib/lanes/disk-guard.d.ts +0 -66
  889. package/dist/lib/lanes/disk-guard.js +0 -172
  890. package/dist/lib/lanes/dropbox.d.ts +0 -129
  891. package/dist/lib/lanes/dropbox.js +0 -601
  892. package/dist/lib/lanes/effort.d.ts +0 -51
  893. package/dist/lib/lanes/effort.js +0 -113
  894. package/dist/lib/lanes/envelope-repair-dispatch.d.ts +0 -26
  895. package/dist/lib/lanes/envelope-repair-dispatch.js +0 -74
  896. package/dist/lib/lanes/errors.d.ts +0 -39
  897. package/dist/lib/lanes/errors.js +0 -72
  898. package/dist/lib/lanes/flag-keys.d.ts +0 -15
  899. package/dist/lib/lanes/flag-keys.js +0 -15
  900. package/dist/lib/lanes/grants.d.ts +0 -30
  901. package/dist/lib/lanes/grants.js +0 -171
  902. package/dist/lib/lanes/hire-grant-dispatch.d.ts +0 -29
  903. package/dist/lib/lanes/hire-grant-dispatch.js +0 -315
  904. package/dist/lib/lanes/hooks-install.d.ts +0 -82
  905. package/dist/lib/lanes/hooks-install.js +0 -479
  906. package/dist/lib/lanes/host-capacity.d.ts +0 -69
  907. package/dist/lib/lanes/host-capacity.js +0 -254
  908. package/dist/lib/lanes/hq-root.d.ts +0 -19
  909. package/dist/lib/lanes/hq-root.js +0 -28
  910. package/dist/lib/lanes/index.d.ts +0 -76
  911. package/dist/lib/lanes/index.js +0 -42
  912. package/dist/lib/lanes/keep-alive.d.ts +0 -68
  913. package/dist/lib/lanes/keep-alive.js +0 -343
  914. package/dist/lib/lanes/kr-freshness.d.ts +0 -76
  915. package/dist/lib/lanes/kr-freshness.js +0 -413
  916. package/dist/lib/lanes/lane-company.d.ts +0 -10
  917. package/dist/lib/lanes/lane-company.js +0 -41
  918. package/dist/lib/lanes/liveness.d.ts +0 -108
  919. package/dist/lib/lanes/liveness.js +0 -396
  920. package/dist/lib/lanes/machine-identity.d.ts +0 -34
  921. package/dist/lib/lanes/machine-identity.js +0 -92
  922. package/dist/lib/lanes/manager-status-gate.d.ts +0 -17
  923. package/dist/lib/lanes/manager-status-gate.js +0 -133
  924. package/dist/lib/lanes/merge-command.d.ts +0 -15
  925. package/dist/lib/lanes/merge-command.js +0 -629
  926. package/dist/lib/lanes/mesh-events.d.ts +0 -127
  927. package/dist/lib/lanes/mesh-events.js +0 -564
  928. package/dist/lib/lanes/message-replay.d.ts +0 -21
  929. package/dist/lib/lanes/message-replay.js +0 -122
  930. package/dist/lib/lanes/models.d.ts +0 -86
  931. package/dist/lib/lanes/models.js +0 -234
  932. package/dist/lib/lanes/monitor.d.ts +0 -48
  933. package/dist/lib/lanes/monitor.js +0 -428
  934. package/dist/lib/lanes/move-account.d.ts +0 -56
  935. package/dist/lib/lanes/move-account.js +0 -193
  936. package/dist/lib/lanes/orphans.d.ts +0 -25
  937. package/dist/lib/lanes/orphans.js +0 -102
  938. package/dist/lib/lanes/outpost-dispatch.d.ts +0 -147
  939. package/dist/lib/lanes/outpost-dispatch.js +0 -271
  940. package/dist/lib/lanes/outpost-hire-cache.d.ts +0 -22
  941. package/dist/lib/lanes/outpost-hire-cache.js +0 -153
  942. package/dist/lib/lanes/outpost-identity.d.ts +0 -33
  943. package/dist/lib/lanes/outpost-identity.js +0 -59
  944. package/dist/lib/lanes/outpost-profile-repin.d.ts +0 -17
  945. package/dist/lib/lanes/outpost-profile-repin.js +0 -84
  946. package/dist/lib/lanes/outpost-pruner-install.d.ts +0 -37
  947. package/dist/lib/lanes/outpost-pruner-install.js +0 -238
  948. package/dist/lib/lanes/outpost-registry-worker-approval.d.ts +0 -18
  949. package/dist/lib/lanes/outpost-registry-worker-approval.js +0 -109
  950. package/dist/lib/lanes/outpost-snapshot-memo.d.ts +0 -6
  951. package/dist/lib/lanes/outpost-snapshot-memo.js +0 -14
  952. package/dist/lib/lanes/outpost-worktree-pruner-flag.d.ts +0 -19
  953. package/dist/lib/lanes/outpost-worktree-pruner-flag.js +0 -86
  954. package/dist/lib/lanes/outpost-worktree-pruner.d.ts +0 -62
  955. package/dist/lib/lanes/outpost-worktree-pruner.js +0 -1201
  956. package/dist/lib/lanes/profile.d.ts +0 -69
  957. package/dist/lib/lanes/profile.js +0 -552
  958. package/dist/lib/lanes/provider-rejection.d.ts +0 -86
  959. package/dist/lib/lanes/provider-rejection.js +0 -286
  960. package/dist/lib/lanes/questions.d.ts +0 -90
  961. package/dist/lib/lanes/questions.js +0 -384
  962. package/dist/lib/lanes/quota.d.ts +0 -134
  963. package/dist/lib/lanes/quota.js +0 -471
  964. package/dist/lib/lanes/reconcile-install.d.ts +0 -90
  965. package/dist/lib/lanes/reconcile-install.js +0 -257
  966. package/dist/lib/lanes/reconcile.d.ts +0 -161
  967. package/dist/lib/lanes/reconcile.js +0 -3324
  968. package/dist/lib/lanes/registry-flag.d.ts +0 -35
  969. package/dist/lib/lanes/registry-flag.js +0 -164
  970. package/dist/lib/lanes/registry-persona.d.ts +0 -20
  971. package/dist/lib/lanes/registry-persona.js +0 -329
  972. package/dist/lib/lanes/registry.d.ts +0 -122
  973. package/dist/lib/lanes/registry.js +0 -570
  974. package/dist/lib/lanes/reviews.d.ts +0 -38
  975. package/dist/lib/lanes/reviews.js +0 -395
  976. package/dist/lib/lanes/runaway-tool-guard.d.ts +0 -38
  977. package/dist/lib/lanes/runaway-tool-guard.js +0 -284
  978. package/dist/lib/lanes/session-relink.d.ts +0 -25
  979. package/dist/lib/lanes/session-relink.js +0 -216
  980. package/dist/lib/lanes/spawn.d.ts +0 -355
  981. package/dist/lib/lanes/spawn.js +0 -2668
  982. package/dist/lib/lanes/ssm-command-context.d.ts +0 -12
  983. package/dist/lib/lanes/ssm-command-context.js +0 -52
  984. package/dist/lib/lanes/store.d.ts +0 -91
  985. package/dist/lib/lanes/store.js +0 -1822
  986. package/dist/lib/lanes/stories.d.ts +0 -23
  987. package/dist/lib/lanes/stories.js +0 -92
  988. package/dist/lib/lanes/story-ledger.d.ts +0 -80
  989. package/dist/lib/lanes/story-ledger.js +0 -815
  990. package/dist/lib/lanes/story-switch.d.ts +0 -21
  991. package/dist/lib/lanes/story-switch.js +0 -75
  992. package/dist/lib/lanes/text-scan.d.ts +0 -11
  993. package/dist/lib/lanes/text-scan.js +0 -103
  994. package/dist/lib/lanes/throttle.d.ts +0 -116
  995. package/dist/lib/lanes/throttle.js +0 -437
  996. package/dist/lib/lanes/timestamp.d.ts +0 -3
  997. package/dist/lib/lanes/timestamp.js +0 -26
  998. package/dist/lib/lanes/tracker-checks.d.ts +0 -77
  999. package/dist/lib/lanes/tracker-checks.js +0 -134
  1000. package/dist/lib/lanes/tracker-report-state.d.ts +0 -10
  1001. package/dist/lib/lanes/tracker-report-state.js +0 -124
  1002. package/dist/lib/lanes/tracker-report.d.ts +0 -203
  1003. package/dist/lib/lanes/tracker-report.js +0 -522
  1004. package/dist/lib/lanes/tracker-store.d.ts +0 -18
  1005. package/dist/lib/lanes/tracker-store.js +0 -106
  1006. package/dist/lib/lanes/types.d.ts +0 -1030
  1007. package/dist/lib/lanes/types.js +0 -418
  1008. package/dist/lib/lanes/wait.d.ts +0 -39
  1009. package/dist/lib/lanes/wait.js +0 -159
  1010. package/dist/lib/lanes/watch.d.ts +0 -39
  1011. package/dist/lib/lanes/watch.js +0 -249
  1012. package/dist/lib/lanes/watcher-main.d.ts +0 -11
  1013. package/dist/lib/lanes/watcher-main.js +0 -108
  1014. package/dist/lib/lanes/watcher.d.ts +0 -287
  1015. package/dist/lib/lanes/watcher.js +0 -1972
  1016. package/dist/lib/mesh/denial-codes.d.ts +0 -5
  1017. package/dist/lib/mesh/denial-codes.js +0 -14
  1018. package/dist/lib/mesh/live/daemon/config.d.ts +0 -36
  1019. package/dist/lib/mesh/live/daemon/config.js +0 -120
  1020. package/dist/lib/mesh/live/daemon/legacy-listen.d.ts +0 -43
  1021. package/dist/lib/mesh/live/daemon/legacy-listen.js +0 -89
  1022. package/dist/lib/mesh/live/daemon/live-cache.d.ts +0 -26
  1023. package/dist/lib/mesh/live/daemon/live-cache.js +0 -116
  1024. package/dist/lib/mesh/live/daemon/mqtt-events.d.ts +0 -7
  1025. package/dist/lib/mesh/live/daemon/mqtt-events.js +0 -2
  1026. package/dist/lib/mesh/live/daemon/mqtt-events.test-d.d.ts +0 -2
  1027. package/dist/lib/mesh/live/daemon/mqtt-events.test-d.js +0 -10
  1028. package/dist/lib/mesh/live/daemon/version-drift.d.ts +0 -5
  1029. package/dist/lib/mesh/live/daemon/version-drift.js +0 -47
  1030. package/dist/lib/mesh/live/daemon/work-subscribe.d.ts +0 -32
  1031. package/dist/lib/mesh/live/daemon/work-subscribe.js +0 -262
  1032. package/dist/lib/mesh/live/report-summary.d.ts +0 -45
  1033. package/dist/lib/mesh/live/report-summary.js +0 -234
  1034. package/dist/lib/mesh/live/session-seq.d.ts +0 -4
  1035. package/dist/lib/mesh/live/session-seq.js +0 -33
  1036. package/dist/lib/mesh/project-board.d.ts +0 -65
  1037. package/dist/lib/mesh/project-board.js +0 -181
  1038. package/dist/lib/mesh/story-status.d.ts +0 -22
  1039. package/dist/lib/mesh/story-status.js +0 -49
  1040. package/dist/lib/monitor.d.ts +0 -149
  1041. package/dist/lib/monitor.js +0 -519
  1042. package/dist/lib/node-binary.d.ts +0 -50
  1043. package/dist/lib/node-binary.js +0 -133
  1044. package/dist/lib/notify-recipient.d.ts +0 -7
  1045. package/dist/lib/notify-recipient.js +0 -11
  1046. package/dist/lib/onboarding/checkpoint.d.ts +0 -13
  1047. package/dist/lib/onboarding/checkpoint.js +0 -44
  1048. package/dist/lib/onboarding/cli/onboard.d.ts +0 -53
  1049. package/dist/lib/onboarding/cli/onboard.js +0 -135
  1050. package/dist/lib/onboarding/cli/prompts.d.ts +0 -28
  1051. package/dist/lib/onboarding/cli/prompts.js +0 -83
  1052. package/dist/lib/onboarding/errors.d.ts +0 -34
  1053. package/dist/lib/onboarding/errors.js +0 -59
  1054. package/dist/lib/onboarding/index.d.ts +0 -13
  1055. package/dist/lib/onboarding/index.js +0 -13
  1056. package/dist/lib/onboarding/orchestrator.d.ts +0 -47
  1057. package/dist/lib/onboarding/orchestrator.js +0 -569
  1058. package/dist/lib/onboarding/types.d.ts +0 -79
  1059. package/dist/lib/onboarding/types.js +0 -8
  1060. package/dist/lib/policy-validator.d.ts +0 -7
  1061. package/dist/lib/policy-validator.js +0 -187
  1062. package/dist/lib/process-flag-company-context.d.ts +0 -8
  1063. package/dist/lib/process-flag-company-context.js +0 -67
  1064. package/dist/lib/report-publish.d.ts +0 -175
  1065. package/dist/lib/report-publish.js +0 -421
  1066. package/dist/lib/report-run.d.ts +0 -62
  1067. package/dist/lib/report-run.js +0 -123
  1068. package/dist/lib/report-snapshot.d.ts +0 -12
  1069. package/dist/lib/report-snapshot.js +0 -135
  1070. package/dist/lib/report-templates.d.ts +0 -9
  1071. package/dist/lib/report-templates.js +0 -21
  1072. package/dist/lib/scaffold-cli-floor.d.ts +0 -8
  1073. package/dist/lib/scaffold-cli-floor.js +0 -50
  1074. package/dist/lib/search-index/collection-path-repair-flag.d.ts +0 -4
  1075. package/dist/lib/search-index/collection-path-repair-flag.js +0 -7
  1076. package/dist/lib/search-index/embed-lock.d.ts +0 -34
  1077. package/dist/lib/search-index/embed-lock.js +0 -295
  1078. package/dist/lib/search-index/load-gate.d.ts +0 -57
  1079. package/dist/lib/search-index/load-gate.js +0 -270
  1080. package/dist/lib/search-index/max-doc-bytes.d.ts +0 -219
  1081. package/dist/lib/search-index/max-doc-bytes.js +0 -463
  1082. package/dist/lib/search-index/qmd-exit-diagnostics.d.ts +0 -5
  1083. package/dist/lib/search-index/qmd-exit-diagnostics.js +0 -40
  1084. package/dist/lib/search-index/reindex-single-flight-flag.d.ts +0 -5
  1085. package/dist/lib/search-index/reindex-single-flight-flag.js +0 -8
  1086. package/dist/lib/service-manager/index.d.ts +0 -42
  1087. package/dist/lib/service-manager/index.js +0 -105
  1088. package/dist/lib/service-manager/launchd.d.ts +0 -81
  1089. package/dist/lib/service-manager/launchd.js +0 -212
  1090. package/dist/lib/service-manager/systemd.d.ts +0 -19
  1091. package/dist/lib/service-manager/systemd.js +0 -72
  1092. package/dist/lib/service-manager/types.d.ts +0 -34
  1093. package/dist/lib/service-manager/types.js +0 -26
  1094. package/dist/lib/test-utils/isolated-flag-company-context.d.ts +0 -3
  1095. package/dist/lib/test-utils/isolated-flag-company-context.js +0 -18
  1096. package/dist/lib/work-context/bind-best.d.ts +0 -66
  1097. package/dist/lib/work-context/bind-best.js +0 -344
  1098. package/dist/lib/work-context/bind-calling-session.d.ts +0 -26
  1099. package/dist/lib/work-context/bind-calling-session.js +0 -63
  1100. package/dist/lib/work-context/company-rebind.d.ts +0 -23
  1101. package/dist/lib/work-context/company-rebind.js +0 -59
  1102. package/dist/lib/work-context/default-company.d.ts +0 -43
  1103. package/dist/lib/work-context/default-company.js +0 -83
  1104. package/dist/lib/work-context/outbox-quarantine-status-flag.d.ts +0 -4
  1105. package/dist/lib/work-context/outbox-quarantine-status-flag.js +0 -7
  1106. package/dist/lib/work-context/prd-sync.d.ts +0 -56
  1107. package/dist/lib/work-context/prd-sync.js +0 -197
  1108. package/dist/lib/work-context/preflight-contract.d.ts +0 -28
  1109. package/dist/lib/work-context/preflight-contract.js +0 -85
  1110. package/dist/lib/work-context/prompt-rebind.d.ts +0 -25
  1111. package/dist/lib/work-context/prompt-rebind.js +0 -85
  1112. package/dist/lib/work-context/windows-acl.d.ts +0 -123
  1113. package/dist/lib/work-context/windows-acl.js +0 -425
  1114. package/dist/lib/workers-registry/read.d.ts +0 -15
  1115. package/dist/lib/workers-registry/read.js +0 -17
  1116. package/dist/native-fast-route.d.ts +0 -7
  1117. package/dist/native-fast-route.js +0 -45
  1118. package/dist/node-network-compat-core.d.ts +0 -12
  1119. package/dist/node-network-compat-core.js +0 -41
  1120. package/dist/node-network-compat-fast.d.ts +0 -7
  1121. package/dist/node-network-compat-fast.js +0 -23
  1122. package/dist/secrets-env-fast-path.d.ts +0 -5
  1123. package/dist/secrets-env-fast-path.js +0 -16
  1124. package/dist/secrets-env-fast-route.d.ts +0 -18
  1125. package/dist/secrets-env-fast-route.js +0 -54
  1126. package/dist/utils/checkpoint-stamp-write-error.d.ts +0 -28
  1127. package/dist/utils/checkpoint-stamp-write-error.js +0 -99
  1128. package/dist/utils/cli-network-lifecycle.d.ts +0 -4
  1129. package/dist/utils/cli-network-lifecycle.js +0 -11
  1130. package/dist/utils/cognito-refresh-sentry.d.ts +0 -3
  1131. package/dist/utils/cognito-refresh-sentry.js +0 -49
  1132. package/dist/utils/console-origin.d.ts +0 -9
  1133. package/dist/utils/console-origin.js +0 -28
  1134. package/dist/utils/core-eval-trigger.d.ts +0 -4
  1135. package/dist/utils/core-eval-trigger.js +0 -88
  1136. package/dist/utils/exclusive-lock.d.ts +0 -32
  1137. package/dist/utils/exclusive-lock.js +0 -75
  1138. package/dist/utils/fast-stream-errors.d.ts +0 -12
  1139. package/dist/utils/fast-stream-errors.js +0 -18
  1140. package/dist/utils/files-browse-acl.d.ts +0 -5
  1141. package/dist/utils/files-browse-acl.js +0 -11
  1142. package/dist/utils/hq-core-yaml.d.ts +0 -10
  1143. package/dist/utils/hq-core-yaml.js +0 -40
  1144. package/dist/utils/hq-root-resolver.d.ts +0 -13
  1145. package/dist/utils/hq-root-resolver.js +0 -103
  1146. package/dist/utils/redact-url.d.ts +0 -14
  1147. package/dist/utils/redact-url.js +0 -218
  1148. package/dist/utils/scaffold-fast-import-guard.d.ts +0 -2
  1149. package/dist/utils/scaffold-fast-import-guard.js +0 -40
  1150. package/dist/utils/scaffold-packlist-guard.d.ts +0 -7
  1151. package/dist/utils/scaffold-packlist-guard.js +0 -23
  1152. package/dist/utils/scaffold-sibling-references.d.ts +0 -22
  1153. package/dist/utils/scaffold-sibling-references.js +0 -156
  1154. package/dist/utils/secret-load-availability.d.ts +0 -8
  1155. package/dist/utils/secret-load-availability.js +0 -54
  1156. package/dist/utils/staged-install.d.ts +0 -34
  1157. package/dist/utils/staged-install.js +0 -346
  1158. package/dist/utils/staged-npm-install.d.ts +0 -16
  1159. package/dist/utils/staged-npm-install.js +0 -264
  1160. package/dist/utils/sync-log-sources.d.ts +0 -15
  1161. package/dist/utils/sync-log-sources.js +0 -36
  1162. package/dist/utils/table-width.d.ts +0 -7
  1163. package/dist/utils/table-width.js +0 -15
  1164. package/dist/utils/update-command-supervisor.cjs +0 -247
  1165. package/dist/utils/upload-author.d.ts +0 -15
  1166. package/dist/utils/upload-author.js +0 -39
  1167. package/dist/utils/version-report.d.ts +0 -27
  1168. package/dist/utils/version-report.js +0 -105
  1169. package/dist/version-request.d.ts +0 -14
  1170. package/dist/version-request.js +0 -36
  1171. package/scripts/mesh-daemon-if-stale.mjs +0 -20
  1172. package/templates/reports/blank.md +0 -3
  1173. package/templates/reports/daily-digest.md +0 -11
  1174. 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;