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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1144) hide show
  1. package/CHANGELOG.md +1 -4293
  2. package/assets/scaffold/core/scripts/checkpoint-stop-gate.sh +43 -281
  3. package/assets/scaffold/core/scripts/hook-lib.sh +50 -345
  4. package/assets/scaffold/core/scripts/hq-session.sh +23 -184
  5. package/assets/scaffold/core/scripts/lib/session-id.sh +2 -3
  6. package/assets/scaffold/core/scripts/lib/session-scope-capability.sh +1 -1
  7. package/assets/scaffold/core/scripts/lib/work-mesh-enqueue.sh +1 -2
  8. package/assets/scaffold/core/scripts/qmd-reindex-after-sync.sh +87 -10
  9. package/assets/scaffold/core/scripts/rebuild-company-knowledge-index.sh +3 -36
  10. package/assets/scaffold/core/scripts/rebuild-projects-index.sh +12 -99
  11. package/assets/scaffold/core/scripts/token-usage-report.sh +20 -81
  12. package/dist/bin/hq-auth-refresh.d.ts +0 -2
  13. package/dist/bin/hq-auth-refresh.js +6 -12
  14. package/dist/commands/__fixtures__/access-vault.d.ts +0 -2
  15. package/dist/commands/__fixtures__/access-vault.js +1 -1
  16. package/dist/commands/_patterns.d.ts +0 -16
  17. package/dist/commands/_patterns.js +3 -20
  18. package/dist/commands/access.d.ts +1 -2
  19. package/dist/commands/access.js +49 -58
  20. package/dist/commands/agents.d.ts +4 -106
  21. package/dist/commands/agents.js +45 -924
  22. package/dist/commands/auth.d.ts +0 -1
  23. package/dist/commands/auth.js +19 -189
  24. package/dist/commands/billing.d.ts +0 -3
  25. package/dist/commands/billing.js +1 -6
  26. package/dist/commands/channels.js +1 -56
  27. package/dist/commands/cloud-demote.js +2 -3
  28. package/dist/commands/cloud-provision.d.ts +0 -14
  29. package/dist/commands/cloud-provision.js +58 -232
  30. package/dist/commands/cloud.d.ts +15 -49
  31. package/dist/commands/cloud.js +122 -358
  32. package/dist/commands/company-transfer.d.ts +28 -4
  33. package/dist/commands/company-transfer.js +49 -5
  34. package/dist/commands/company.js +3 -66
  35. package/dist/commands/core-checkpoint.d.ts +9 -19
  36. package/dist/commands/core-checkpoint.js +37 -301
  37. package/dist/commands/core.d.ts +0 -4
  38. package/dist/commands/core.js +80 -270
  39. package/dist/commands/crm.js +3 -52
  40. package/dist/commands/db-provision.js +4 -4
  41. package/dist/commands/db-sql.js +21 -7
  42. package/dist/commands/dm.d.ts +12 -119
  43. package/dist/commands/dm.js +38 -388
  44. package/dist/commands/doctor.d.ts +0 -12
  45. package/dist/commands/doctor.js +12 -158
  46. package/dist/commands/feedback.d.ts +0 -6
  47. package/dist/commands/feedback.js +37 -86
  48. package/dist/commands/files-browse.d.ts +12 -32
  49. package/dist/commands/files-browse.js +60 -176
  50. package/dist/commands/files.d.ts +0 -17
  51. package/dist/commands/files.js +47 -300
  52. package/dist/commands/group-grants.js +2 -3
  53. package/dist/commands/groups.js +5 -6
  54. package/dist/commands/index-cmd.d.ts +1 -19
  55. package/dist/commands/index-cmd.js +7 -74
  56. package/dist/commands/integrations-api.d.ts +10 -15
  57. package/dist/commands/integrations-api.js +22 -27
  58. package/dist/commands/integrations-connect.d.ts +13 -51
  59. package/dist/commands/integrations-connect.js +71 -86
  60. package/dist/commands/integrations-core.d.ts +6 -6
  61. package/dist/commands/integrations-core.js +11 -25
  62. package/dist/commands/integrations-import.d.ts +1 -1
  63. package/dist/commands/integrations-import.js +24 -43
  64. package/dist/commands/integrations-manage.js +13 -20
  65. package/dist/commands/integrations.d.ts +0 -8
  66. package/dist/commands/integrations.js +7 -94
  67. package/dist/commands/login.js +6 -49
  68. package/dist/commands/mcp-registration.d.ts +25 -32
  69. package/dist/commands/mcp-registration.js +23 -256
  70. package/dist/commands/mcp-status.js +0 -1
  71. package/dist/commands/meetings.js +34 -55
  72. package/dist/commands/members.js +1 -5
  73. package/dist/commands/mesh.d.ts +0 -11
  74. package/dist/commands/mesh.js +76 -1086
  75. package/dist/commands/onboard-identity-guard.d.ts +1 -1
  76. package/dist/commands/onboard.js +5 -24
  77. package/dist/commands/pack-install.js +1 -3
  78. package/dist/commands/packs.js +1 -11
  79. package/dist/commands/people.d.ts +0 -4
  80. package/dist/commands/people.js +3 -37
  81. package/dist/commands/publish.d.ts +1 -8
  82. package/dist/commands/publish.js +4 -17
  83. package/dist/commands/reindex.js +6 -56
  84. package/dist/commands/rescue.d.ts +0 -4
  85. package/dist/commands/rescue.js +17 -27
  86. package/dist/commands/run.js +4 -18
  87. package/dist/commands/safe-extract.d.ts +2 -11
  88. package/dist/commands/safe-extract.js +8 -36
  89. package/dist/commands/scaffold-fast.d.ts +41 -0
  90. package/dist/commands/scaffold-fast.js +57 -0
  91. package/dist/commands/secrets.d.ts +2 -20
  92. package/dist/commands/secrets.js +71 -175
  93. package/dist/commands/skill.d.ts +4 -35
  94. package/dist/commands/skill.js +18 -357
  95. package/dist/commands/sync-mode.d.ts +0 -11
  96. package/dist/commands/sync-mode.js +0 -30
  97. package/dist/commands/sync-narrow.js +5 -36
  98. package/dist/commands/team-sync.js +10 -71
  99. package/dist/commands/update.js +0 -6
  100. package/dist/commands/whoami.d.ts +0 -22
  101. package/dist/commands/whoami.js +4 -137
  102. package/dist/commands/workers.d.ts +14 -2
  103. package/dist/commands/workers.js +10 -7
  104. package/dist/fast-core.d.ts +7 -6
  105. package/dist/fast-core.js +24 -80
  106. package/dist/index.d.ts +4 -3
  107. package/dist/index.js +9 -59
  108. package/dist/lazy-commands.d.ts +44 -20
  109. package/dist/lazy-commands.js +58 -60
  110. package/dist/lib/company-skill-wrapper.d.ts +0 -1
  111. package/dist/lib/company-skill-wrapper.js +29 -121
  112. package/dist/lib/core-utils/codex-skill-bridge.d.ts +1 -2
  113. package/dist/lib/core-utils/qmd-reindex-after-sync.d.ts +1 -14
  114. package/dist/lib/core-utils/qmd-reindex-after-sync.js +17 -101
  115. package/dist/lib/core-utils/soft-timeout.js +1 -1
  116. package/dist/lib/core-utils/timeout-guard.d.ts +3 -3
  117. package/dist/lib/core-utils/timeout-guard.js +13 -28
  118. package/dist/lib/core-utils/token-usage-report.js +3 -17
  119. package/dist/lib/db/control-plane.js +0 -6
  120. package/dist/lib/db/local.d.ts +5 -0
  121. package/dist/lib/db/local.js +1 -1
  122. package/dist/lib/db/migrate.d.ts +12 -0
  123. package/dist/lib/db/migrate.js +5 -5
  124. package/dist/lib/db/remote-sql.d.ts +2 -2
  125. package/dist/lib/db/remote-sql.js +3 -3
  126. package/dist/lib/db/sql.d.ts +10 -0
  127. package/dist/lib/db/sql.js +8 -4
  128. package/dist/lib/doctor/__testing__/fake-hq-tree.d.ts +1 -1
  129. package/dist/lib/doctor/__testing__/fake-hq-tree.js +1 -1
  130. package/dist/lib/doctor/checks/claude-wiring.js +1 -70
  131. package/dist/lib/doctor/checks/codex-wiring.d.ts +4 -0
  132. package/dist/lib/doctor/checks/codex-wiring.js +35 -3
  133. package/dist/lib/doctor/checks/grok-wiring.js +34 -1
  134. package/dist/lib/doctor/checks/integrations.js +0 -11
  135. package/dist/lib/doctor/checks/runtime-health.d.ts +17 -4
  136. package/dist/lib/doctor/checks/runtime-health.js +7 -20
  137. package/dist/lib/doctor/checks/sync-health.d.ts +0 -21
  138. package/dist/lib/doctor/checks/sync-health.js +2 -72
  139. package/dist/lib/doctor/checks/work-context.js +6 -12
  140. package/dist/lib/doctor/compat.d.ts +16 -0
  141. package/dist/lib/doctor/compat.js +3 -4
  142. package/dist/lib/doctor/deep/effects.js +3 -1
  143. package/dist/lib/doctor/deep/executor.d.ts +10 -4
  144. package/dist/lib/doctor/deep/executor.js +1 -1
  145. package/dist/lib/doctor/deep/parity.d.ts +29 -2
  146. package/dist/lib/doctor/deep/parity.js +7 -7
  147. package/dist/lib/doctor/deep/sandbox.d.ts +25 -7
  148. package/dist/lib/doctor/deep/sandbox.js +7 -5
  149. package/dist/lib/doctor/fix/apply.d.ts +8 -79
  150. package/dist/lib/doctor/fix/apply.js +80 -292
  151. package/dist/lib/doctor/fix/remediation.d.ts +6 -14
  152. package/dist/lib/doctor/fix/remediation.js +9 -49
  153. package/dist/lib/doctor/fixtures/schema.js +3 -1
  154. package/dist/lib/doctor/json-output.d.ts +1 -17
  155. package/dist/lib/doctor/json-output.js +2 -7
  156. package/dist/lib/doctor/platform.d.ts +26 -0
  157. package/dist/lib/doctor/platform.js +5 -5
  158. package/dist/lib/doctor/registry.d.ts +0 -14
  159. package/dist/lib/doctor/registry.js +0 -71
  160. package/dist/lib/doctor/report.js +1 -1
  161. package/dist/lib/doctor/types.d.ts +0 -5
  162. package/dist/lib/doctor/types.js +0 -20
  163. package/dist/lib/flag-registry-worker.js +1 -12
  164. package/dist/lib/flag-registry.d.ts +6 -26
  165. package/dist/lib/flag-registry.js +16 -133
  166. package/dist/lib/index-render/companies.d.ts +1 -4
  167. package/dist/lib/index-render/companies.js +3 -66
  168. package/dist/lib/index-render/company-knowledge.js +17 -80
  169. package/dist/lib/index-render/index.d.ts +0 -1
  170. package/dist/lib/index-render/index.js +1 -2
  171. package/dist/lib/index-render/projects.js +5 -82
  172. package/dist/lib/index-render/shared.d.ts +1 -13
  173. package/dist/lib/index-render/shared.js +2 -41
  174. package/dist/lib/mesh/api.d.ts +10 -103
  175. package/dist/lib/mesh/api.js +64 -334
  176. package/dist/lib/mesh/client.d.ts +2 -3
  177. package/dist/lib/mesh/client.js +2 -3
  178. package/dist/lib/mesh/live/backfill-held.d.ts +16 -67
  179. package/dist/lib/mesh/live/backfill-held.js +61 -415
  180. package/dist/lib/mesh/live/backoff.d.ts +2 -2
  181. package/dist/lib/mesh/live/backoff.js +3 -16
  182. package/dist/lib/mesh/live/daemon/board-refresh.d.ts +1 -7
  183. package/dist/lib/mesh/live/daemon/board-refresh.js +30 -78
  184. package/dist/lib/mesh/live/daemon/credentials.d.ts +10 -64
  185. package/dist/lib/mesh/live/daemon/credentials.js +20 -270
  186. package/dist/lib/mesh/live/daemon/doctor.d.ts +0 -51
  187. package/dist/lib/mesh/live/daemon/doctor.js +6 -180
  188. package/dist/lib/mesh/live/daemon/index.d.ts +10 -13
  189. package/dist/lib/mesh/live/daemon/index.js +6 -7
  190. package/dist/lib/mesh/live/daemon/install.d.ts +1 -255
  191. package/dist/lib/mesh/live/daemon/install.js +13 -811
  192. package/dist/lib/mesh/live/daemon/paths.d.ts +0 -2
  193. package/dist/lib/mesh/live/daemon/paths.js +0 -2
  194. package/dist/lib/mesh/live/daemon/presence.d.ts +5 -24
  195. package/dist/lib/mesh/live/daemon/presence.js +10 -79
  196. package/dist/lib/mesh/live/daemon/run.d.ts +2 -48
  197. package/dist/lib/mesh/live/daemon/run.js +33 -485
  198. package/dist/lib/mesh/live/daemon/state.d.ts +2 -19
  199. package/dist/lib/mesh/live/daemon/state.js +2 -34
  200. package/dist/lib/mesh/live/daemon/transcript-watch.d.ts +9 -45
  201. package/dist/lib/mesh/live/daemon/transcript-watch.js +31 -227
  202. package/dist/lib/mesh/live/emit-client.d.ts +0 -8
  203. package/dist/lib/mesh/live/emit-client.js +8 -23
  204. package/dist/lib/mesh/live/emit-evidence.d.ts +0 -19
  205. package/dist/lib/mesh/live/emit-evidence.js +2 -20
  206. package/dist/lib/mesh/live/emit.d.ts +0 -9
  207. package/dist/lib/mesh/live/emit.js +2 -28
  208. package/dist/lib/mesh/live/enqueue.d.ts +0 -5
  209. package/dist/lib/mesh/live/enqueue.js +0 -19
  210. package/dist/lib/mesh/live/flush.d.ts +5 -17
  211. package/dist/lib/mesh/live/flush.js +38 -391
  212. package/dist/lib/mesh/live/format-spool-line.d.ts +2 -5
  213. package/dist/lib/mesh/live/format-spool-line.js +0 -10
  214. package/dist/lib/mesh/live/paths.d.ts +0 -2
  215. package/dist/lib/mesh/live/paths.js +0 -4
  216. package/dist/lib/mesh/live/session-event.schema.json +1 -24
  217. package/dist/lib/mesh/live/session-events-client.d.ts +0 -2
  218. package/dist/lib/mesh/live/session-events-client.js +0 -26
  219. package/dist/lib/mesh/live/spool.d.ts +0 -19
  220. package/dist/lib/mesh/live/spool.js +3 -269
  221. package/dist/lib/mesh/live/validate-session-event.d.ts +1 -1
  222. package/dist/lib/mesh/live/validate-session-event.js +1 -1
  223. package/dist/lib/plan-limit-nag.d.ts +6 -102
  224. package/dist/lib/plan-limit-nag.js +43 -348
  225. package/dist/lib/scan-packages/index.d.ts +0 -2
  226. package/dist/lib/scan-packages/index.js +6 -168
  227. package/dist/lib/search-index/background.d.ts +1 -8
  228. package/dist/lib/search-index/background.js +200 -55
  229. package/dist/lib/search-index/index.d.ts +0 -12
  230. package/dist/lib/search-index/index.js +7 -153
  231. package/dist/lib/work-context/company.d.ts +20 -22
  232. package/dist/lib/work-context/company.js +40 -124
  233. package/dist/lib/work-context/config.d.ts +11 -58
  234. package/dist/lib/work-context/config.js +83 -334
  235. package/dist/lib/work-context/contract.d.ts +0 -10
  236. package/dist/lib/work-context/index.d.ts +25 -0
  237. package/dist/lib/work-context/index.js +21 -0
  238. package/dist/lib/work-context/outbox.d.ts +1 -14
  239. package/dist/lib/work-context/outbox.js +1 -87
  240. package/dist/lib/work-context/reconcile.d.ts +0 -15
  241. package/dist/lib/work-context/reconcile.js +25 -380
  242. package/dist/lib/work-context/state.d.ts +10 -93
  243. package/dist/lib/work-context/state.js +29 -342
  244. package/dist/lib/workers-registry/index.js +8 -62
  245. package/dist/main.d.ts +0 -12
  246. package/dist/main.js +73 -266
  247. package/dist/node-network-compat.d.ts +30 -2
  248. package/dist/node-network-compat.js +51 -4
  249. package/dist/node-preflight.d.ts +1 -7
  250. package/dist/node-preflight.js +5 -5
  251. package/dist/register-all.d.ts +29 -4
  252. package/dist/register-all.js +233 -4
  253. package/dist/run/discover-schemas.d.ts +1 -2
  254. package/dist/run/env-graph-guard.d.ts +2 -2
  255. package/dist/run/env-graph-guard.js +2 -5
  256. package/dist/run/hq-plugin.d.ts +0 -4
  257. package/dist/run/hq-plugin.js +8 -36
  258. package/dist/sentry-before-send.js +0 -80
  259. package/dist/sentry.d.ts +2 -8
  260. package/dist/sentry.js +13 -117
  261. package/dist/startup-registration.d.ts +2 -26
  262. package/dist/startup-registration.js +15 -116
  263. package/dist/utils/cli-telemetry.d.ts +1 -74
  264. package/dist/utils/cli-telemetry.js +7 -434
  265. package/dist/utils/client-health.d.ts +4 -0
  266. package/dist/utils/client-health.js +2 -2
  267. package/dist/utils/cognito-session.d.ts +0 -71
  268. package/dist/utils/cognito-session.js +27 -481
  269. package/dist/utils/contribution-table.d.ts +1 -1
  270. package/dist/utils/environmental-error.d.ts +0 -18
  271. package/dist/utils/environmental-error.js +7 -240
  272. package/dist/utils/expected-cli-error.d.ts +0 -2
  273. package/dist/utils/expected-cli-error.js +0 -4
  274. package/dist/utils/feedback-diagnostics.d.ts +1 -2
  275. package/dist/utils/feedback-log-bundle.d.ts +26 -51
  276. package/dist/utils/feedback-log-bundle.js +31 -211
  277. package/dist/utils/feedback-logs.d.ts +47 -18
  278. package/dist/utils/feedback-logs.js +21 -50
  279. package/dist/utils/feedback-screenshots.d.ts +1 -0
  280. package/dist/utils/feedback-screenshots.js +1 -1
  281. package/dist/utils/hq-roots.d.ts +2 -25
  282. package/dist/utils/hq-roots.js +7 -67
  283. package/dist/utils/incomplete-install-error.d.ts +19 -87
  284. package/dist/utils/incomplete-install-error.js +68 -319
  285. package/dist/utils/install-tree-torn.d.ts +24 -260
  286. package/dist/utils/install-tree-torn.js +51 -998
  287. package/dist/utils/large-file-guard.d.ts +10 -0
  288. package/dist/utils/large-file-guard.js +1 -1
  289. package/dist/utils/local-files-overview.d.ts +8 -4
  290. package/dist/utils/local-files-overview.js +7 -48
  291. package/dist/utils/login-provider.d.ts +0 -7
  292. package/dist/utils/login-provider.js +0 -34
  293. package/dist/utils/pack-contributions.d.ts +9 -2
  294. package/dist/utils/pack-contributions.js +43 -6
  295. package/dist/utils/package-root-diagnostics.d.ts +1 -1
  296. package/dist/utils/people.d.ts +11 -7
  297. package/dist/utils/people.js +20 -5
  298. package/dist/utils/plan-gate-error.d.ts +10 -52
  299. package/dist/utils/plan-gate-error.js +41 -364
  300. package/dist/utils/qmd-model-download-error.d.ts +8 -0
  301. package/dist/utils/qmd-model-download-error.js +1 -1
  302. package/dist/utils/qmd-query-document-error.d.ts +6 -0
  303. package/dist/utils/qmd-query-document-error.js +1 -1
  304. package/dist/utils/redact-error-text.js +1 -2
  305. package/dist/utils/run-bundled-script.d.ts +0 -6
  306. package/dist/utils/run-bundled-script.js +4 -117
  307. package/dist/utils/secrets-cache.d.ts +3 -7
  308. package/dist/utils/secrets-cache.js +14 -162
  309. package/dist/utils/self-update.d.ts +1 -34
  310. package/dist/utils/self-update.js +42 -660
  311. package/dist/utils/sentry-fingerprint.d.ts +1 -23
  312. package/dist/utils/sentry-fingerprint.js +31 -223
  313. package/dist/utils/team-upgrade.d.ts +1 -1
  314. package/dist/utils/team-upgrade.js +3 -4
  315. package/dist/utils/vault-api.d.ts +1 -21
  316. package/dist/utils/vault-api.js +84 -251
  317. package/dist/utils/version-check.d.ts +1 -11
  318. package/dist/utils/version-check.js +3 -32
  319. package/dist/utils/version-gate.d.ts +17 -101
  320. package/dist/utils/version-gate.js +70 -645
  321. package/dist/utils/windows-spawn.d.ts +0 -6
  322. package/dist/utils/windows-spawn.js +0 -37
  323. package/package.json +8 -20
  324. package/README.md +0 -113
  325. package/assets/bot-workers/setup/context/USER-GUIDE.md +0 -404
  326. package/assets/bot-workers/setup/context/quick-reference.md +0 -199
  327. package/assets/bot-workers/setup/skills/agents-and-team.md +0 -167
  328. package/assets/bot-workers/setup/skills/explain-hq.md +0 -35
  329. package/assets/bot-workers/setup/skills/first-company.md +0 -74
  330. package/assets/bot-workers/setup/skills/joining-a-team.md +0 -125
  331. package/assets/bot-workers/setup/skills/pricing.md +0 -92
  332. package/assets/bot-workers/setup/skills/standing-help.md +0 -81
  333. package/assets/bot-workers/setup/skills/your-business.md +0 -281
  334. package/assets/bot-workers/setup/worker.yaml +0 -791
  335. package/assets/lanes-hooks/hq-lanes-drain.json +0 -15
  336. package/assets/lanes-hooks/hq-lanes-drain.mjs +0 -275
  337. package/assets/lanes-hooks/hq-lanes-drain.sh +0 -21
  338. package/assets/lanes-reconcile/hq-lanes-reconcile.service +0 -11
  339. package/assets/lanes-reconcile/hq-lanes-reconcile.timer +0 -12
  340. package/assets/scaffold/.claude/hooks/validate-policy-frontmatter.sh +0 -485
  341. package/assets/scaffold/core/scripts/audit-log.sh +0 -384
  342. package/assets/scaffold/core/scripts/clean-worktree-reconcile-handoff.sh +0 -171
  343. package/assets/scaffold/core/scripts/eval-trigger.sh +0 -193
  344. package/assets/scaffold/core/scripts/git-pack-extension-check.sh +0 -164
  345. package/assets/scaffold/core/scripts/handoff-finalize.sh +0 -688
  346. package/assets/scaffold/core/scripts/handoff-open-steps.sh +0 -81
  347. package/assets/scaffold/core/scripts/handoff-post.sh +0 -252
  348. package/assets/scaffold/core/scripts/hq-delegate-bundle.sh +0 -307
  349. package/assets/scaffold/core/scripts/hq-delegate-grant.sh +0 -252
  350. package/assets/scaffold/core/scripts/hq-delegate-pickup.sh +0 -99
  351. package/assets/scaffold/core/scripts/hq-delegate-publish.sh +0 -91
  352. package/assets/scaffold/core/scripts/hq-delegate-repo.sh +0 -158
  353. package/assets/scaffold/core/scripts/hq-delegate-resolve.sh +0 -145
  354. package/assets/scaffold/core/scripts/hq-delegate-secrets.sh +0 -129
  355. package/assets/scaffold/core/scripts/hq-delegate-send.sh +0 -259
  356. package/assets/scaffold/core/scripts/hq-delegate-transfer.sh +0 -175
  357. package/assets/scaffold/core/scripts/hq-delegate-verify.sh +0 -238
  358. package/assets/scaffold/core/scripts/hq-dm-bind.sh +0 -585
  359. package/assets/scaffold/core/scripts/hq-job-notify.sh +0 -389
  360. package/assets/scaffold/core/scripts/hq-job-probe.sh +0 -835
  361. package/assets/scaffold/core/scripts/hq-job-remediate.sh +0 -359
  362. package/assets/scaffold/core/scripts/hq-job-run.sh +0 -1025
  363. package/assets/scaffold/core/scripts/hq-pin.sh +0 -118
  364. package/assets/scaffold/core/scripts/jobs-schedule-parse.sh +0 -310
  365. package/assets/scaffold/core/scripts/jobs-validate.sh +0 -451
  366. package/assets/scaffold/core/scripts/knowledge-prefs.sh +0 -55
  367. package/assets/scaffold/core/scripts/lib/portable.sh +0 -211
  368. package/assets/scaffold/core/scripts/lib/secret-patterns.sh +0 -58
  369. package/assets/scaffold/core/scripts/ontology-audience-grant.sh +0 -81
  370. package/assets/scaffold/core/scripts/ontology-brief.mjs +0 -93
  371. package/assets/scaffold/core/scripts/ontology-candidate.sh +0 -100
  372. package/assets/scaffold/core/scripts/ontology-garden.mjs +0 -238
  373. package/assets/scaffold/core/scripts/ontology-source-worklist.sh +0 -79
  374. package/assets/scaffold/core/scripts/outpost-jobs-reconcile.sh +0 -834
  375. package/assets/scaffold/core/scripts/policy-age-report.sh +0 -156
  376. package/assets/scaffold/core/scripts/policy-retire.sh +0 -199
  377. package/assets/scaffold/core/scripts/qmd-reindex-bg.sh +0 -40
  378. package/assets/scaffold/core/scripts/read-policy-frontmatter.sh +0 -32
  379. package/assets/scaffold/core/scripts/refresh-vault-access.sh +0 -188
  380. package/assets/scaffold/core/scripts/resolve-company.sh +0 -199
  381. package/assets/scaffold/core/scripts/resume-thread-lock.sh +0 -285
  382. package/assets/scaffold/core/scripts/source-yaml-validate.sh +0 -36
  383. package/assets/scaffold/core/scripts/verify-story-deliverables.sh +0 -148
  384. package/assets/scaffold/core/scripts/work-mesh-live-bind-trusted.sh +0 -152
  385. package/assets/scaffold/core/scripts/worktree-gc.sh +0 -362
  386. package/contracts/preflight/v1/fixtures.json +0 -87
  387. package/contracts/preflight/v1/schema.json +0 -58
  388. package/dist/command-catalog.generated.d.ts +0 -10655
  389. package/dist/command-catalog.generated.js +0 -13737
  390. package/dist/command-registration-plan.d.ts +0 -474
  391. package/dist/command-registration-plan.js +0 -136
  392. package/dist/commands/agent-enroll.d.ts +0 -146
  393. package/dist/commands/agent-enroll.js +0 -401
  394. package/dist/commands/agent-inbox.d.ts +0 -9
  395. package/dist/commands/agent-inbox.js +0 -102
  396. package/dist/commands/agent-kit.d.ts +0 -87
  397. package/dist/commands/agent-kit.js +0 -480
  398. package/dist/commands/agent-mcp.d.ts +0 -24
  399. package/dist/commands/agent-mcp.js +0 -127
  400. package/dist/commands/agent-probe.d.ts +0 -77
  401. package/dist/commands/agent-probe.js +0 -335
  402. package/dist/commands/agent.d.ts +0 -13
  403. package/dist/commands/agent.js +0 -40
  404. package/dist/commands/billing-sponsor.d.ts +0 -83
  405. package/dist/commands/billing-sponsor.js +0 -344
  406. package/dist/commands/bot-companies.d.ts +0 -40
  407. package/dist/commands/bot-companies.js +0 -64
  408. package/dist/commands/bot-continuity.d.ts +0 -28
  409. package/dist/commands/bot-continuity.js +0 -68
  410. package/dist/commands/bot-jobs.d.ts +0 -127
  411. package/dist/commands/bot-jobs.js +0 -454
  412. package/dist/commands/bot.d.ts +0 -278
  413. package/dist/commands/bot.js +0 -1982
  414. package/dist/commands/cloud-retire.d.ts +0 -51
  415. package/dist/commands/cloud-retire.js +0 -154
  416. package/dist/commands/core-audit-log-native.d.ts +0 -9
  417. package/dist/commands/core-audit-log-native.js +0 -257
  418. package/dist/commands/core-checkpoint-gate-setting.d.ts +0 -59
  419. package/dist/commands/core-checkpoint-gate-setting.js +0 -163
  420. package/dist/commands/core-checkpoint-stop-gate-native.d.ts +0 -34
  421. package/dist/commands/core-checkpoint-stop-gate-native.js +0 -725
  422. package/dist/commands/core-command-catalog.d.ts +0 -34
  423. package/dist/commands/core-command-catalog.js +0 -62
  424. package/dist/commands/core-company-index-scope-flag.d.ts +0 -3
  425. package/dist/commands/core-company-index-scope-flag.js +0 -6
  426. package/dist/commands/core-delegate-w1b.d.ts +0 -10
  427. package/dist/commands/core-delegate-w1b.js +0 -1219
  428. package/dist/commands/core-delegate.d.ts +0 -46
  429. package/dist/commands/core-delegate.js +0 -1040
  430. package/dist/commands/core-dm-bind-native.d.ts +0 -32
  431. package/dist/commands/core-dm-bind-native.js +0 -668
  432. package/dist/commands/core-git-pack-extension-check-native.d.ts +0 -22
  433. package/dist/commands/core-git-pack-extension-check-native.js +0 -190
  434. package/dist/commands/core-handoff-fast.d.ts +0 -18
  435. package/dist/commands/core-handoff-fast.js +0 -104
  436. package/dist/commands/core-handoff-open-steps.d.ts +0 -21
  437. package/dist/commands/core-handoff-open-steps.js +0 -264
  438. package/dist/commands/core-handoff.d.ts +0 -24
  439. package/dist/commands/core-handoff.js +0 -1144
  440. package/dist/commands/core-hq-session-native.d.ts +0 -39
  441. package/dist/commands/core-hq-session-native.js +0 -579
  442. package/dist/commands/core-job-native-utils.d.ts +0 -6
  443. package/dist/commands/core-job-native-utils.js +0 -80
  444. package/dist/commands/core-job-native.d.ts +0 -5
  445. package/dist/commands/core-job-native.js +0 -16
  446. package/dist/commands/core-job-notify-native.d.ts +0 -36
  447. package/dist/commands/core-job-notify-native.js +0 -359
  448. package/dist/commands/core-job-probe-native.d.ts +0 -45
  449. package/dist/commands/core-job-probe-native.js +0 -564
  450. package/dist/commands/core-job-remediate-native.d.ts +0 -26
  451. package/dist/commands/core-job-remediate-native.js +0 -374
  452. package/dist/commands/core-job-remote-launcher.d.ts +0 -7
  453. package/dist/commands/core-job-remote-launcher.js +0 -51
  454. package/dist/commands/core-job-run-native.d.ts +0 -47
  455. package/dist/commands/core-job-run-native.js +0 -1215
  456. package/dist/commands/core-jobs-native.d.ts +0 -25
  457. package/dist/commands/core-jobs-native.js +0 -1339
  458. package/dist/commands/core-knowledge-prefs.d.ts +0 -12
  459. package/dist/commands/core-knowledge-prefs.js +0 -137
  460. package/dist/commands/core-native-handoff-flag.d.ts +0 -4
  461. package/dist/commands/core-native-handoff-flag.js +0 -7
  462. package/dist/commands/core-native-jobs-flag.d.ts +0 -4
  463. package/dist/commands/core-native-jobs-flag.js +0 -7
  464. package/dist/commands/core-native-policy-flag.d.ts +0 -9
  465. package/dist/commands/core-native-policy-flag.js +0 -12
  466. package/dist/commands/core-native-session-flag.d.ts +0 -4
  467. package/dist/commands/core-native-session-flag.js +0 -7
  468. package/dist/commands/core-native-utilities-flag.d.ts +0 -4
  469. package/dist/commands/core-native-utilities-flag.js +0 -7
  470. package/dist/commands/core-native-utilities.d.ts +0 -29
  471. package/dist/commands/core-native-utilities.js +0 -54
  472. package/dist/commands/core-native-worker-skills-flag.d.ts +0 -4
  473. package/dist/commands/core-native-worker-skills-flag.js +0 -7
  474. package/dist/commands/core-ontology-native.d.ts +0 -17
  475. package/dist/commands/core-ontology-native.js +0 -916
  476. package/dist/commands/core-ontology.d.ts +0 -66
  477. package/dist/commands/core-ontology.js +0 -430
  478. package/dist/commands/core-pin-native.d.ts +0 -14
  479. package/dist/commands/core-pin-native.js +0 -236
  480. package/dist/commands/core-policy-frontmatter.d.ts +0 -8
  481. package/dist/commands/core-policy-frontmatter.js +0 -52
  482. package/dist/commands/core-policy.d.ts +0 -14
  483. package/dist/commands/core-policy.js +0 -1018
  484. package/dist/commands/core-refresh-vault-access-native.d.ts +0 -20
  485. package/dist/commands/core-refresh-vault-access-native.js +0 -229
  486. package/dist/commands/core-resolve-company-command.d.ts +0 -4
  487. package/dist/commands/core-resolve-company-command.js +0 -42
  488. package/dist/commands/core-resolve-company-native.d.ts +0 -28
  489. package/dist/commands/core-resolve-company-native.js +0 -408
  490. package/dist/commands/core-work-mesh-bind-trusted-native.d.ts +0 -32
  491. package/dist/commands/core-work-mesh-bind-trusted-native.js +0 -190
  492. package/dist/commands/core-worker-lint-native.d.ts +0 -4
  493. package/dist/commands/core-worker-lint-native.js +0 -160
  494. package/dist/commands/core-worker-share-native.d.ts +0 -5
  495. package/dist/commands/core-worker-share-native.js +0 -260
  496. package/dist/commands/core-worker-skills-command.d.ts +0 -8
  497. package/dist/commands/core-worker-skills-command.js +0 -33
  498. package/dist/commands/core-worker-skills-runtime.d.ts +0 -33
  499. package/dist/commands/core-worker-skills-runtime.js +0 -86
  500. package/dist/commands/daemon.d.ts +0 -63
  501. package/dist/commands/daemon.js +0 -877
  502. package/dist/commands/deploy-comments.d.ts +0 -3
  503. package/dist/commands/deploy-comments.js +0 -162
  504. package/dist/commands/lanes-accounts.d.ts +0 -28
  505. package/dist/commands/lanes-accounts.js +0 -595
  506. package/dist/commands/lanes-autopilot.d.ts +0 -11
  507. package/dist/commands/lanes-autopilot.js +0 -336
  508. package/dist/commands/lanes-checks.d.ts +0 -51
  509. package/dist/commands/lanes-checks.js +0 -941
  510. package/dist/commands/lanes-hold.d.ts +0 -43
  511. package/dist/commands/lanes-hold.js +0 -655
  512. package/dist/commands/lanes-kpis.d.ts +0 -11
  513. package/dist/commands/lanes-kpis.js +0 -34
  514. package/dist/commands/lanes-message.d.ts +0 -9
  515. package/dist/commands/lanes-message.js +0 -934
  516. package/dist/commands/lanes-move.d.ts +0 -12
  517. package/dist/commands/lanes-move.js +0 -397
  518. package/dist/commands/lanes-questions.d.ts +0 -36
  519. package/dist/commands/lanes-questions.js +0 -1004
  520. package/dist/commands/lanes-report.d.ts +0 -11
  521. package/dist/commands/lanes-report.js +0 -333
  522. package/dist/commands/lanes-resume.d.ts +0 -6
  523. package/dist/commands/lanes-resume.js +0 -561
  524. package/dist/commands/lanes-review.d.ts +0 -10
  525. package/dist/commands/lanes-review.js +0 -56
  526. package/dist/commands/lanes-shared.d.ts +0 -448
  527. package/dist/commands/lanes-shared.js +0 -170
  528. package/dist/commands/lanes-stories.d.ts +0 -15
  529. package/dist/commands/lanes-stories.js +0 -347
  530. package/dist/commands/lanes-watch.d.ts +0 -7
  531. package/dist/commands/lanes-watch.js +0 -216
  532. package/dist/commands/lanes.d.ts +0 -149
  533. package/dist/commands/lanes.js +0 -8843
  534. package/dist/commands/monitor.d.ts +0 -58
  535. package/dist/commands/monitor.js +0 -980
  536. package/dist/commands/onboard-bot-membership.d.ts +0 -32
  537. package/dist/commands/onboard-bot-membership.js +0 -40
  538. package/dist/commands/onboard-create-identity.d.ts +0 -26
  539. package/dist/commands/onboard-create-identity.js +0 -23
  540. package/dist/commands/outpost-pruner.d.ts +0 -3
  541. package/dist/commands/outpost-pruner.js +0 -125
  542. package/dist/commands/personal-connector-settings-flag.d.ts +0 -4
  543. package/dist/commands/personal-connector-settings-flag.js +0 -7
  544. package/dist/commands/personal-targeted-push-flag.d.ts +0 -4
  545. package/dist/commands/personal-targeted-push-flag.js +0 -7
  546. package/dist/commands/personal-targeted-push-paths.d.ts +0 -3
  547. package/dist/commands/personal-targeted-push-paths.js +0 -67
  548. package/dist/commands/report.d.ts +0 -19
  549. package/dist/commands/report.js +0 -537
  550. package/dist/commands/run-feature-telemetry.d.ts +0 -3
  551. package/dist/commands/run-feature-telemetry.js +0 -6
  552. package/dist/commands/staff/reset-test-account.d.ts +0 -110
  553. package/dist/commands/staff/reset-test-account.js +0 -268
  554. package/dist/commands/staff/test-account.d.ts +0 -51
  555. package/dist/commands/staff/test-account.js +0 -196
  556. package/dist/commands/vault-retention-flag.d.ts +0 -3
  557. package/dist/commands/vault-retention-flag.js +0 -9
  558. package/dist/commands/vault-retention.d.ts +0 -11
  559. package/dist/commands/vault-retention.js +0 -69
  560. package/dist/commands/version.d.ts +0 -10
  561. package/dist/commands/version.js +0 -11
  562. package/dist/fast-scaffold.d.ts +0 -84
  563. package/dist/fast-scaffold.js +0 -353
  564. package/dist/lanes-drain-hook.d.ts +0 -14
  565. package/dist/lanes-drain-hook.js +0 -203
  566. package/dist/lib/agent-kit/adopt-identity.d.ts +0 -27
  567. package/dist/lib/agent-kit/adopt-identity.js +0 -60
  568. package/dist/lib/agent-kit/attachment-download.d.ts +0 -24
  569. package/dist/lib/agent-kit/attachment-download.js +0 -47
  570. package/dist/lib/agent-kit/creds.d.ts +0 -106
  571. package/dist/lib/agent-kit/creds.js +0 -163
  572. package/dist/lib/agent-kit/fallback.d.ts +0 -78
  573. package/dist/lib/agent-kit/fallback.js +0 -210
  574. package/dist/lib/agent-kit/inbox-state.d.ts +0 -83
  575. package/dist/lib/agent-kit/inbox-state.js +0 -159
  576. package/dist/lib/agent-kit/kit-config.d.ts +0 -56
  577. package/dist/lib/agent-kit/kit-config.js +0 -65
  578. package/dist/lib/agent-kit/log.d.ts +0 -16
  579. package/dist/lib/agent-kit/log.js +0 -46
  580. package/dist/lib/agent-kit/mcp/attachments.d.ts +0 -126
  581. package/dist/lib/agent-kit/mcp/attachments.js +0 -222
  582. package/dist/lib/agent-kit/mcp/jsonrpc.d.ts +0 -75
  583. package/dist/lib/agent-kit/mcp/jsonrpc.js +0 -164
  584. package/dist/lib/agent-kit/mcp/tools.d.ts +0 -64
  585. package/dist/lib/agent-kit/mcp/tools.js +0 -397
  586. package/dist/lib/agent-kit/paths.d.ts +0 -65
  587. package/dist/lib/agent-kit/paths.js +0 -118
  588. package/dist/lib/agent-kit/private-file.d.ts +0 -29
  589. package/dist/lib/agent-kit/private-file.js +0 -91
  590. package/dist/lib/agent-kit/run/heartbeat.d.ts +0 -72
  591. package/dist/lib/agent-kit/run/heartbeat.js +0 -128
  592. package/dist/lib/agent-kit/run/inbox.d.ts +0 -76
  593. package/dist/lib/agent-kit/run/inbox.js +0 -205
  594. package/dist/lib/agent-kit/run/supervisor.d.ts +0 -35
  595. package/dist/lib/agent-kit/run/supervisor.js +0 -85
  596. package/dist/lib/agent-kit/run/sync.d.ts +0 -33
  597. package/dist/lib/agent-kit/run/sync.js +0 -58
  598. package/dist/lib/agent-kit/services.d.ts +0 -31
  599. package/dist/lib/agent-kit/services.js +0 -55
  600. package/dist/lib/agent-kit/skills.d.ts +0 -18
  601. package/dist/lib/agent-kit/skills.js +0 -151
  602. package/dist/lib/agent-kit/wake.d.ts +0 -83
  603. package/dist/lib/agent-kit/wake.js +0 -243
  604. package/dist/lib/agents/model-catalog.d.ts +0 -62
  605. package/dist/lib/agents/model-catalog.js +0 -275
  606. package/dist/lib/auth-login-provider-state.d.ts +0 -8
  607. package/dist/lib/auth-login-provider-state.js +0 -63
  608. package/dist/lib/aws-sdk-node-warning-output.d.ts +0 -12
  609. package/dist/lib/aws-sdk-node-warning-output.js +0 -22
  610. package/dist/lib/billing/free-month.d.ts +0 -18
  611. package/dist/lib/billing/free-month.js +0 -31
  612. package/dist/lib/billing/plan-limit-refusals.d.ts +0 -69
  613. package/dist/lib/billing/plan-limit-refusals.js +0 -187
  614. package/dist/lib/billing/plan-limit-upgrade-url.d.ts +0 -11
  615. package/dist/lib/billing/plan-limit-upgrade-url.js +0 -66
  616. package/dist/lib/billing/plan-lock.d.ts +0 -143
  617. package/dist/lib/billing/plan-lock.js +0 -439
  618. package/dist/lib/bot/api.d.ts +0 -349
  619. package/dist/lib/bot/api.js +0 -316
  620. package/dist/lib/bot/attachments.d.ts +0 -45
  621. package/dist/lib/bot/attachments.js +0 -89
  622. package/dist/lib/bot/cli-update.d.ts +0 -138
  623. package/dist/lib/bot/cli-update.js +0 -278
  624. package/dist/lib/bot/company-bind.d.ts +0 -27
  625. package/dist/lib/bot/company-bind.js +0 -62
  626. package/dist/lib/bot/config.d.ts +0 -153
  627. package/dist/lib/bot/config.js +0 -233
  628. package/dist/lib/bot/continuity-download.d.ts +0 -28
  629. package/dist/lib/bot/continuity-download.js +0 -75
  630. package/dist/lib/bot/continuity-install.d.ts +0 -14
  631. package/dist/lib/bot/continuity-install.js +0 -101
  632. package/dist/lib/bot/continuity.d.ts +0 -67
  633. package/dist/lib/bot/continuity.js +0 -301
  634. package/dist/lib/bot/creds.d.ts +0 -24
  635. package/dist/lib/bot/creds.js +0 -51
  636. package/dist/lib/bot/daemon.d.ts +0 -173
  637. package/dist/lib/bot/daemon.js +0 -552
  638. package/dist/lib/bot/inbox-poll-backoff-flag.d.ts +0 -24
  639. package/dist/lib/bot/inbox-poll-backoff-flag.js +0 -135
  640. package/dist/lib/bot/inbox-state.d.ts +0 -18
  641. package/dist/lib/bot/inbox-state.js +0 -51
  642. package/dist/lib/bot/index.d.ts +0 -23
  643. package/dist/lib/bot/index.js +0 -23
  644. package/dist/lib/bot/inflight.d.ts +0 -119
  645. package/dist/lib/bot/inflight.js +0 -83
  646. package/dist/lib/bot/job-completions.d.ts +0 -89
  647. package/dist/lib/bot/job-completions.js +0 -132
  648. package/dist/lib/bot/job-run.d.ts +0 -109
  649. package/dist/lib/bot/job-run.js +0 -246
  650. package/dist/lib/bot/local-config.d.ts +0 -61
  651. package/dist/lib/bot/local-config.js +0 -145
  652. package/dist/lib/bot/local-jobs.d.ts +0 -89
  653. package/dist/lib/bot/local-jobs.js +0 -459
  654. package/dist/lib/bot/local-name.d.ts +0 -54
  655. package/dist/lib/bot/local-name.js +0 -114
  656. package/dist/lib/bot/log.d.ts +0 -13
  657. package/dist/lib/bot/log.js +0 -59
  658. package/dist/lib/bot/owner-context.d.ts +0 -79
  659. package/dist/lib/bot/owner-context.js +0 -175
  660. package/dist/lib/bot/paths.d.ts +0 -76
  661. package/dist/lib/bot/paths.js +0 -131
  662. package/dist/lib/bot/progress.d.ts +0 -132
  663. package/dist/lib/bot/progress.js +0 -289
  664. package/dist/lib/bot/promote.d.ts +0 -16
  665. package/dist/lib/bot/promote.js +0 -106
  666. package/dist/lib/bot/promotion-hold.d.ts +0 -24
  667. package/dist/lib/bot/promotion-hold.js +0 -103
  668. package/dist/lib/bot/promotion-receipt.d.ts +0 -9
  669. package/dist/lib/bot/promotion-receipt.js +0 -56
  670. package/dist/lib/bot/promotion-upload.d.ts +0 -16
  671. package/dist/lib/bot/promotion-upload.js +0 -80
  672. package/dist/lib/bot/prompt.d.ts +0 -136
  673. package/dist/lib/bot/prompt.js +0 -433
  674. package/dist/lib/bot/room-policy.d.ts +0 -63
  675. package/dist/lib/bot/room-policy.js +0 -91
  676. package/dist/lib/bot/run.d.ts +0 -217
  677. package/dist/lib/bot/run.js +0 -1869
  678. package/dist/lib/bot/runnable.d.ts +0 -51
  679. package/dist/lib/bot/runnable.js +0 -65
  680. package/dist/lib/bot/runtime/claude.d.ts +0 -50
  681. package/dist/lib/bot/runtime/claude.js +0 -170
  682. package/dist/lib/bot/runtime/codex.d.ts +0 -28
  683. package/dist/lib/bot/runtime/codex.js +0 -153
  684. package/dist/lib/bot/runtime/grok-acp.d.ts +0 -40
  685. package/dist/lib/bot/runtime/grok-acp.js +0 -265
  686. package/dist/lib/bot/runtime/grok.d.ts +0 -41
  687. package/dist/lib/bot/runtime/grok.js +0 -169
  688. package/dist/lib/bot/runtime/index.d.ts +0 -36
  689. package/dist/lib/bot/runtime/index.js +0 -417
  690. package/dist/lib/bot/runtime/messages-stream.d.ts +0 -56
  691. package/dist/lib/bot/runtime/messages-stream.js +0 -194
  692. package/dist/lib/bot/runtime/sanitize.d.ts +0 -18
  693. package/dist/lib/bot/runtime/sanitize.js +0 -28
  694. package/dist/lib/bot/runtime/types.d.ts +0 -159
  695. package/dist/lib/bot/runtime/types.js +0 -51
  696. package/dist/lib/bot/runtime/windows.d.ts +0 -10
  697. package/dist/lib/bot/runtime/windows.js +0 -53
  698. package/dist/lib/bot/runtime-sign-in.d.ts +0 -24
  699. package/dist/lib/bot/runtime-sign-in.js +0 -31
  700. package/dist/lib/bot/scaffold.d.ts +0 -38
  701. package/dist/lib/bot/scaffold.js +0 -94
  702. package/dist/lib/bot/self-heal.d.ts +0 -52
  703. package/dist/lib/bot/self-heal.js +0 -79
  704. package/dist/lib/bot/self-process.d.ts +0 -19
  705. package/dist/lib/bot/self-process.js +0 -35
  706. package/dist/lib/bot/session.d.ts +0 -19
  707. package/dist/lib/bot/session.js +0 -39
  708. package/dist/lib/bot/setup-explain.d.ts +0 -64
  709. package/dist/lib/bot/setup-explain.js +0 -141
  710. package/dist/lib/bot/split.d.ts +0 -32
  711. package/dist/lib/bot/split.js +0 -241
  712. package/dist/lib/bot/status.d.ts +0 -57
  713. package/dist/lib/bot/status.js +0 -66
  714. package/dist/lib/bot/worker-source.d.ts +0 -66
  715. package/dist/lib/bot/worker-source.js +0 -283
  716. package/dist/lib/checkpoint-ontology/aliases.d.ts +0 -17
  717. package/dist/lib/checkpoint-ontology/aliases.js +0 -44
  718. package/dist/lib/checkpoint-ontology/apply.d.ts +0 -110
  719. package/dist/lib/checkpoint-ontology/apply.js +0 -777
  720. package/dist/lib/checkpoint-ontology/company-brief.d.ts +0 -18
  721. package/dist/lib/checkpoint-ontology/company-brief.js +0 -337
  722. package/dist/lib/checkpoint-ontology/company.d.ts +0 -44
  723. package/dist/lib/checkpoint-ontology/company.js +0 -118
  724. package/dist/lib/checkpoint-ontology/drop-aliases.d.ts +0 -41
  725. package/dist/lib/checkpoint-ontology/drop-aliases.js +0 -76
  726. package/dist/lib/checkpoint-ontology/entity-file.d.ts +0 -109
  727. package/dist/lib/checkpoint-ontology/entity-file.js +0 -371
  728. package/dist/lib/checkpoint-ontology/identity.d.ts +0 -38
  729. package/dist/lib/checkpoint-ontology/identity.js +0 -95
  730. package/dist/lib/checkpoint-ontology/merge-copies.d.ts +0 -199
  731. package/dist/lib/checkpoint-ontology/merge-copies.js +0 -1086
  732. package/dist/lib/checkpoint-ontology/multi-writer.d.ts +0 -101
  733. package/dist/lib/checkpoint-ontology/multi-writer.js +0 -394
  734. package/dist/lib/checkpoint-ontology/plan.d.ts +0 -193
  735. package/dist/lib/checkpoint-ontology/plan.js +0 -504
  736. package/dist/lib/checkpoint-ontology/queued-touches.d.ts +0 -29
  737. package/dist/lib/checkpoint-ontology/queued-touches.js +0 -193
  738. package/dist/lib/checkpoint-ontology/sync-client.d.ts +0 -38
  739. package/dist/lib/checkpoint-ontology/sync-client.js +0 -84
  740. package/dist/lib/checkpoint-ontology/tree.d.ts +0 -55
  741. package/dist/lib/checkpoint-ontology/tree.js +0 -198
  742. package/dist/lib/company-errors-sdk-warning-flag.d.ts +0 -5
  743. package/dist/lib/company-errors-sdk-warning-flag.js +0 -8
  744. package/dist/lib/core-utils/hook-timeout-debug-context-flag.d.ts +0 -20
  745. package/dist/lib/core-utils/hook-timeout-debug-context-flag.js +0 -81
  746. package/dist/lib/core-utils/jq-json-serializer.d.ts +0 -5
  747. package/dist/lib/core-utils/jq-json-serializer.js +0 -10
  748. package/dist/lib/core-utils/secret-patterns.d.ts +0 -43
  749. package/dist/lib/core-utils/secret-patterns.js +0 -34
  750. package/dist/lib/core-utils/sentry-report.d.ts +0 -114
  751. package/dist/lib/core-utils/sentry-report.js +0 -1034
  752. package/dist/lib/core-utils/timeout-guard-native.d.ts +0 -7
  753. package/dist/lib/core-utils/timeout-guard-native.js +0 -40
  754. package/dist/lib/core-utils/worktree-resume.d.ts +0 -20
  755. package/dist/lib/core-utils/worktree-resume.js +0 -1198
  756. package/dist/lib/daemon/catalog.d.ts +0 -134
  757. package/dist/lib/daemon/catalog.js +0 -358
  758. package/dist/lib/daemon/config.d.ts +0 -35
  759. package/dist/lib/daemon/config.js +0 -108
  760. package/dist/lib/daemon/flag.d.ts +0 -25
  761. package/dist/lib/daemon/flag.js +0 -59
  762. package/dist/lib/daemon/handoff.d.ts +0 -56
  763. package/dist/lib/daemon/handoff.js +0 -161
  764. package/dist/lib/daemon/hq-cloud.d.ts +0 -79
  765. package/dist/lib/daemon/hq-cloud.js +0 -183
  766. package/dist/lib/daemon/install.d.ts +0 -85
  767. package/dist/lib/daemon/install.js +0 -320
  768. package/dist/lib/daemon/legacy-sync-env.d.ts +0 -10
  769. package/dist/lib/daemon/legacy-sync-env.js +0 -58
  770. package/dist/lib/daemon/legacy.d.ts +0 -45
  771. package/dist/lib/daemon/legacy.js +0 -133
  772. package/dist/lib/daemon/lock.d.ts +0 -47
  773. package/dist/lib/daemon/lock.js +0 -138
  774. package/dist/lib/daemon/machine-type.d.ts +0 -50
  775. package/dist/lib/daemon/machine-type.js +0 -159
  776. package/dist/lib/daemon/migrate.d.ts +0 -77
  777. package/dist/lib/daemon/migrate.js +0 -265
  778. package/dist/lib/daemon/paths.d.ts +0 -24
  779. package/dist/lib/daemon/paths.js +0 -43
  780. package/dist/lib/daemon/protocol-tail.d.ts +0 -33
  781. package/dist/lib/daemon/protocol-tail.js +0 -131
  782. package/dist/lib/daemon/remote-control.d.ts +0 -74
  783. package/dist/lib/daemon/remote-control.js +0 -153
  784. package/dist/lib/daemon/requests.d.ts +0 -28
  785. package/dist/lib/daemon/requests.js +0 -65
  786. package/dist/lib/daemon/run.d.ts +0 -79
  787. package/dist/lib/daemon/run.js +0 -755
  788. package/dist/lib/daemon/succession.d.ts +0 -118
  789. package/dist/lib/daemon/succession.js +0 -263
  790. package/dist/lib/daemon/supervisor.d.ts +0 -132
  791. package/dist/lib/daemon/supervisor.js +0 -836
  792. package/dist/lib/daemon/sync-runner.d.ts +0 -58
  793. package/dist/lib/daemon/sync-runner.js +0 -277
  794. package/dist/lib/daemon/tools.d.ts +0 -52
  795. package/dist/lib/daemon/tools.js +0 -95
  796. package/dist/lib/daemon/updater.d.ts +0 -57
  797. package/dist/lib/daemon/updater.js +0 -163
  798. package/dist/lib/deploy-api.d.ts +0 -5
  799. package/dist/lib/deploy-api.js +0 -21
  800. package/dist/lib/deploy-apps.d.ts +0 -13
  801. package/dist/lib/deploy-apps.js +0 -29
  802. package/dist/lib/doctor/__testing__/run-doctor.d.ts +0 -8
  803. package/dist/lib/doctor/__testing__/run-doctor.js +0 -52
  804. package/dist/lib/doctor/checks/bots.d.ts +0 -13
  805. package/dist/lib/doctor/checks/bots.js +0 -189
  806. package/dist/lib/doctor/checks/scaffold-cli-floor.d.ts +0 -6
  807. package/dist/lib/doctor/checks/scaffold-cli-floor.js +0 -73
  808. package/dist/lib/doctor/checks/sync-runtime.d.ts +0 -11
  809. package/dist/lib/doctor/checks/sync-runtime.js +0 -216
  810. package/dist/lib/doctor/client-health-flag-token.d.ts +0 -15
  811. package/dist/lib/doctor/client-health-flag-token.js +0 -66
  812. package/dist/lib/doctor/client-health-reason-codes-flag.d.ts +0 -27
  813. package/dist/lib/doctor/client-health-reason-codes-flag.js +0 -106
  814. package/dist/lib/doctor/fix/json-output.d.ts +0 -28
  815. package/dist/lib/doctor/fix/json-output.js +0 -33
  816. package/dist/lib/doctor/fix/refresh-sync-outcome.d.ts +0 -12
  817. package/dist/lib/doctor/fix/refresh-sync-outcome.js +0 -25
  818. package/dist/lib/doctor/shared.d.ts +0 -8
  819. package/dist/lib/doctor/shared.js +0 -38
  820. package/dist/lib/doctor/stray-gate-entries.d.ts +0 -35
  821. package/dist/lib/doctor/stray-gate-entries.js +0 -83
  822. package/dist/lib/first-sync-next-step.d.ts +0 -37
  823. package/dist/lib/first-sync-next-step.js +0 -189
  824. package/dist/lib/flag-registry-endpoint.d.ts +0 -5
  825. package/dist/lib/flag-registry-endpoint.js +0 -9
  826. package/dist/lib/flag-registry-worker-source.generated.d.ts +0 -2
  827. package/dist/lib/flag-registry-worker-source.generated.js +0 -3
  828. package/dist/lib/flag-snapshot-file.d.ts +0 -20
  829. package/dist/lib/flag-snapshot-file.js +0 -91
  830. package/dist/lib/heartbeat-identity.d.ts +0 -30
  831. package/dist/lib/heartbeat-identity.js +0 -76
  832. package/dist/lib/lanes/account-home.d.ts +0 -8
  833. package/dist/lib/lanes/account-home.js +0 -10
  834. package/dist/lib/lanes/accounts.d.ts +0 -117
  835. package/dist/lib/lanes/accounts.js +0 -366
  836. package/dist/lib/lanes/admission-host.d.ts +0 -22
  837. package/dist/lib/lanes/admission-host.js +0 -37
  838. package/dist/lib/lanes/admission.d.ts +0 -26
  839. package/dist/lib/lanes/admission.js +0 -210
  840. package/dist/lib/lanes/approval-gate.d.ts +0 -8
  841. package/dist/lib/lanes/approval-gate.js +0 -90
  842. package/dist/lib/lanes/autopilot-metrics.d.ts +0 -99
  843. package/dist/lib/lanes/autopilot-metrics.js +0 -301
  844. package/dist/lib/lanes/autopilot-registry.d.ts +0 -62
  845. package/dist/lib/lanes/autopilot-registry.js +0 -192
  846. package/dist/lib/lanes/autopilot.d.ts +0 -120
  847. package/dist/lib/lanes/autopilot.js +0 -1061
  848. package/dist/lib/lanes/blocker-freshness.d.ts +0 -31
  849. package/dist/lib/lanes/blocker-freshness.js +0 -168
  850. package/dist/lib/lanes/checked-company-path.d.ts +0 -3
  851. package/dist/lib/lanes/checked-company-path.js +0 -39
  852. package/dist/lib/lanes/claude-balance.d.ts +0 -97
  853. package/dist/lib/lanes/claude-balance.js +0 -319
  854. package/dist/lib/lanes/compaction.d.ts +0 -110
  855. package/dist/lib/lanes/compaction.js +0 -293
  856. package/dist/lib/lanes/config.d.ts +0 -91
  857. package/dist/lib/lanes/config.js +0 -592
  858. package/dist/lib/lanes/constants.d.ts +0 -3
  859. package/dist/lib/lanes/constants.js +0 -3
  860. package/dist/lib/lanes/delivery-core.d.ts +0 -15
  861. package/dist/lib/lanes/delivery-core.js +0 -21
  862. package/dist/lib/lanes/delivery.d.ts +0 -180
  863. package/dist/lib/lanes/delivery.js +0 -443
  864. package/dist/lib/lanes/dropbox.d.ts +0 -129
  865. package/dist/lib/lanes/dropbox.js +0 -601
  866. package/dist/lib/lanes/effort.d.ts +0 -51
  867. package/dist/lib/lanes/effort.js +0 -113
  868. package/dist/lib/lanes/envelope-repair-dispatch.d.ts +0 -26
  869. package/dist/lib/lanes/envelope-repair-dispatch.js +0 -74
  870. package/dist/lib/lanes/errors.d.ts +0 -39
  871. package/dist/lib/lanes/errors.js +0 -72
  872. package/dist/lib/lanes/flag-keys.d.ts +0 -13
  873. package/dist/lib/lanes/flag-keys.js +0 -13
  874. package/dist/lib/lanes/grants.d.ts +0 -29
  875. package/dist/lib/lanes/grants.js +0 -166
  876. package/dist/lib/lanes/hire-grant-dispatch.d.ts +0 -29
  877. package/dist/lib/lanes/hire-grant-dispatch.js +0 -316
  878. package/dist/lib/lanes/hooks-install.d.ts +0 -82
  879. package/dist/lib/lanes/hooks-install.js +0 -479
  880. package/dist/lib/lanes/host-capacity.d.ts +0 -69
  881. package/dist/lib/lanes/host-capacity.js +0 -254
  882. package/dist/lib/lanes/hq-root.d.ts +0 -19
  883. package/dist/lib/lanes/hq-root.js +0 -28
  884. package/dist/lib/lanes/index.d.ts +0 -76
  885. package/dist/lib/lanes/index.js +0 -42
  886. package/dist/lib/lanes/keep-alive.d.ts +0 -68
  887. package/dist/lib/lanes/keep-alive.js +0 -343
  888. package/dist/lib/lanes/kr-freshness.d.ts +0 -76
  889. package/dist/lib/lanes/kr-freshness.js +0 -413
  890. package/dist/lib/lanes/lane-company.d.ts +0 -10
  891. package/dist/lib/lanes/lane-company.js +0 -41
  892. package/dist/lib/lanes/liveness.d.ts +0 -108
  893. package/dist/lib/lanes/liveness.js +0 -396
  894. package/dist/lib/lanes/machine-identity.d.ts +0 -34
  895. package/dist/lib/lanes/machine-identity.js +0 -92
  896. package/dist/lib/lanes/manager-status-gate.d.ts +0 -17
  897. package/dist/lib/lanes/manager-status-gate.js +0 -133
  898. package/dist/lib/lanes/merge-command.d.ts +0 -15
  899. package/dist/lib/lanes/merge-command.js +0 -629
  900. package/dist/lib/lanes/mesh-events.d.ts +0 -127
  901. package/dist/lib/lanes/mesh-events.js +0 -564
  902. package/dist/lib/lanes/message-replay.d.ts +0 -21
  903. package/dist/lib/lanes/message-replay.js +0 -122
  904. package/dist/lib/lanes/models.d.ts +0 -86
  905. package/dist/lib/lanes/models.js +0 -234
  906. package/dist/lib/lanes/monitor.d.ts +0 -48
  907. package/dist/lib/lanes/monitor.js +0 -428
  908. package/dist/lib/lanes/move-account.d.ts +0 -56
  909. package/dist/lib/lanes/move-account.js +0 -193
  910. package/dist/lib/lanes/orphans.d.ts +0 -25
  911. package/dist/lib/lanes/orphans.js +0 -102
  912. package/dist/lib/lanes/outpost-dispatch.d.ts +0 -147
  913. package/dist/lib/lanes/outpost-dispatch.js +0 -271
  914. package/dist/lib/lanes/outpost-hire-cache.d.ts +0 -22
  915. package/dist/lib/lanes/outpost-hire-cache.js +0 -153
  916. package/dist/lib/lanes/outpost-identity.d.ts +0 -33
  917. package/dist/lib/lanes/outpost-identity.js +0 -59
  918. package/dist/lib/lanes/outpost-profile-repin.d.ts +0 -17
  919. package/dist/lib/lanes/outpost-profile-repin.js +0 -84
  920. package/dist/lib/lanes/outpost-pruner-install.d.ts +0 -37
  921. package/dist/lib/lanes/outpost-pruner-install.js +0 -238
  922. package/dist/lib/lanes/outpost-registry-worker-approval.d.ts +0 -18
  923. package/dist/lib/lanes/outpost-registry-worker-approval.js +0 -109
  924. package/dist/lib/lanes/outpost-snapshot-memo.d.ts +0 -6
  925. package/dist/lib/lanes/outpost-snapshot-memo.js +0 -14
  926. package/dist/lib/lanes/outpost-worktree-pruner-flag.d.ts +0 -19
  927. package/dist/lib/lanes/outpost-worktree-pruner-flag.js +0 -86
  928. package/dist/lib/lanes/outpost-worktree-pruner.d.ts +0 -62
  929. package/dist/lib/lanes/outpost-worktree-pruner.js +0 -1201
  930. package/dist/lib/lanes/profile.d.ts +0 -69
  931. package/dist/lib/lanes/profile.js +0 -552
  932. package/dist/lib/lanes/provider-rejection.d.ts +0 -86
  933. package/dist/lib/lanes/provider-rejection.js +0 -286
  934. package/dist/lib/lanes/questions.d.ts +0 -90
  935. package/dist/lib/lanes/questions.js +0 -384
  936. package/dist/lib/lanes/quota.d.ts +0 -134
  937. package/dist/lib/lanes/quota.js +0 -471
  938. package/dist/lib/lanes/reconcile-install.d.ts +0 -90
  939. package/dist/lib/lanes/reconcile-install.js +0 -257
  940. package/dist/lib/lanes/reconcile.d.ts +0 -155
  941. package/dist/lib/lanes/reconcile.js +0 -3193
  942. package/dist/lib/lanes/registry-flag.d.ts +0 -29
  943. package/dist/lib/lanes/registry-flag.js +0 -139
  944. package/dist/lib/lanes/registry-persona.d.ts +0 -20
  945. package/dist/lib/lanes/registry-persona.js +0 -329
  946. package/dist/lib/lanes/registry.d.ts +0 -122
  947. package/dist/lib/lanes/registry.js +0 -570
  948. package/dist/lib/lanes/reviews.d.ts +0 -38
  949. package/dist/lib/lanes/reviews.js +0 -395
  950. package/dist/lib/lanes/runaway-tool-guard.d.ts +0 -38
  951. package/dist/lib/lanes/runaway-tool-guard.js +0 -284
  952. package/dist/lib/lanes/session-relink.d.ts +0 -25
  953. package/dist/lib/lanes/session-relink.js +0 -216
  954. package/dist/lib/lanes/spawn.d.ts +0 -350
  955. package/dist/lib/lanes/spawn.js +0 -2643
  956. package/dist/lib/lanes/ssm-command-context.d.ts +0 -12
  957. package/dist/lib/lanes/ssm-command-context.js +0 -52
  958. package/dist/lib/lanes/store.d.ts +0 -91
  959. package/dist/lib/lanes/store.js +0 -1811
  960. package/dist/lib/lanes/stories.d.ts +0 -23
  961. package/dist/lib/lanes/stories.js +0 -92
  962. package/dist/lib/lanes/story-ledger.d.ts +0 -80
  963. package/dist/lib/lanes/story-ledger.js +0 -815
  964. package/dist/lib/lanes/story-switch.d.ts +0 -21
  965. package/dist/lib/lanes/story-switch.js +0 -75
  966. package/dist/lib/lanes/text-scan.d.ts +0 -11
  967. package/dist/lib/lanes/text-scan.js +0 -103
  968. package/dist/lib/lanes/throttle.d.ts +0 -116
  969. package/dist/lib/lanes/throttle.js +0 -437
  970. package/dist/lib/lanes/timestamp.d.ts +0 -3
  971. package/dist/lib/lanes/timestamp.js +0 -26
  972. package/dist/lib/lanes/tracker-checks.d.ts +0 -77
  973. package/dist/lib/lanes/tracker-checks.js +0 -134
  974. package/dist/lib/lanes/tracker-report-state.d.ts +0 -10
  975. package/dist/lib/lanes/tracker-report-state.js +0 -124
  976. package/dist/lib/lanes/tracker-report.d.ts +0 -203
  977. package/dist/lib/lanes/tracker-report.js +0 -522
  978. package/dist/lib/lanes/tracker-store.d.ts +0 -18
  979. package/dist/lib/lanes/tracker-store.js +0 -106
  980. package/dist/lib/lanes/types.d.ts +0 -1020
  981. package/dist/lib/lanes/types.js +0 -417
  982. package/dist/lib/lanes/wait.d.ts +0 -39
  983. package/dist/lib/lanes/wait.js +0 -159
  984. package/dist/lib/lanes/watch.d.ts +0 -39
  985. package/dist/lib/lanes/watch.js +0 -249
  986. package/dist/lib/lanes/watcher-main.d.ts +0 -11
  987. package/dist/lib/lanes/watcher-main.js +0 -108
  988. package/dist/lib/lanes/watcher.d.ts +0 -287
  989. package/dist/lib/lanes/watcher.js +0 -1972
  990. package/dist/lib/mesh/live/daemon/config.d.ts +0 -36
  991. package/dist/lib/mesh/live/daemon/config.js +0 -120
  992. package/dist/lib/mesh/live/daemon/legacy-listen.d.ts +0 -43
  993. package/dist/lib/mesh/live/daemon/legacy-listen.js +0 -89
  994. package/dist/lib/mesh/live/daemon/live-cache.d.ts +0 -26
  995. package/dist/lib/mesh/live/daemon/live-cache.js +0 -116
  996. package/dist/lib/mesh/live/daemon/mqtt-events.d.ts +0 -7
  997. package/dist/lib/mesh/live/daemon/mqtt-events.js +0 -2
  998. package/dist/lib/mesh/live/daemon/mqtt-events.test-d.d.ts +0 -2
  999. package/dist/lib/mesh/live/daemon/mqtt-events.test-d.js +0 -10
  1000. package/dist/lib/mesh/live/daemon/version-drift.d.ts +0 -5
  1001. package/dist/lib/mesh/live/daemon/version-drift.js +0 -47
  1002. package/dist/lib/mesh/live/daemon/work-subscribe.d.ts +0 -32
  1003. package/dist/lib/mesh/live/daemon/work-subscribe.js +0 -262
  1004. package/dist/lib/mesh/live/report-summary.d.ts +0 -45
  1005. package/dist/lib/mesh/live/report-summary.js +0 -234
  1006. package/dist/lib/mesh/live/session-seq.d.ts +0 -4
  1007. package/dist/lib/mesh/live/session-seq.js +0 -33
  1008. package/dist/lib/mesh/project-board.d.ts +0 -65
  1009. package/dist/lib/mesh/project-board.js +0 -181
  1010. package/dist/lib/mesh/story-status.d.ts +0 -22
  1011. package/dist/lib/mesh/story-status.js +0 -49
  1012. package/dist/lib/monitor.d.ts +0 -149
  1013. package/dist/lib/monitor.js +0 -519
  1014. package/dist/lib/node-binary.d.ts +0 -50
  1015. package/dist/lib/node-binary.js +0 -133
  1016. package/dist/lib/notify-recipient.d.ts +0 -7
  1017. package/dist/lib/notify-recipient.js +0 -11
  1018. package/dist/lib/onboarding/checkpoint.d.ts +0 -13
  1019. package/dist/lib/onboarding/checkpoint.js +0 -44
  1020. package/dist/lib/onboarding/cli/onboard.d.ts +0 -53
  1021. package/dist/lib/onboarding/cli/onboard.js +0 -135
  1022. package/dist/lib/onboarding/cli/prompts.d.ts +0 -28
  1023. package/dist/lib/onboarding/cli/prompts.js +0 -83
  1024. package/dist/lib/onboarding/errors.d.ts +0 -34
  1025. package/dist/lib/onboarding/errors.js +0 -59
  1026. package/dist/lib/onboarding/index.d.ts +0 -13
  1027. package/dist/lib/onboarding/index.js +0 -13
  1028. package/dist/lib/onboarding/orchestrator.d.ts +0 -47
  1029. package/dist/lib/onboarding/orchestrator.js +0 -569
  1030. package/dist/lib/onboarding/types.d.ts +0 -79
  1031. package/dist/lib/onboarding/types.js +0 -8
  1032. package/dist/lib/policy-validator.d.ts +0 -7
  1033. package/dist/lib/policy-validator.js +0 -187
  1034. package/dist/lib/process-flag-company-context.d.ts +0 -8
  1035. package/dist/lib/process-flag-company-context.js +0 -67
  1036. package/dist/lib/report-publish.d.ts +0 -175
  1037. package/dist/lib/report-publish.js +0 -421
  1038. package/dist/lib/report-run.d.ts +0 -62
  1039. package/dist/lib/report-run.js +0 -123
  1040. package/dist/lib/report-snapshot.d.ts +0 -12
  1041. package/dist/lib/report-snapshot.js +0 -135
  1042. package/dist/lib/report-templates.d.ts +0 -9
  1043. package/dist/lib/report-templates.js +0 -21
  1044. package/dist/lib/scaffold-cli-floor.d.ts +0 -8
  1045. package/dist/lib/scaffold-cli-floor.js +0 -50
  1046. package/dist/lib/search-index/collection-path-repair-flag.d.ts +0 -4
  1047. package/dist/lib/search-index/collection-path-repair-flag.js +0 -7
  1048. package/dist/lib/search-index/embed-lock.d.ts +0 -32
  1049. package/dist/lib/search-index/embed-lock.js +0 -286
  1050. package/dist/lib/search-index/load-gate.d.ts +0 -57
  1051. package/dist/lib/search-index/load-gate.js +0 -270
  1052. package/dist/lib/search-index/max-doc-bytes.d.ts +0 -219
  1053. package/dist/lib/search-index/max-doc-bytes.js +0 -463
  1054. package/dist/lib/search-index/qmd-exit-diagnostics.d.ts +0 -5
  1055. package/dist/lib/search-index/qmd-exit-diagnostics.js +0 -40
  1056. package/dist/lib/search-index/reindex-single-flight-flag.d.ts +0 -5
  1057. package/dist/lib/search-index/reindex-single-flight-flag.js +0 -8
  1058. package/dist/lib/service-manager/index.d.ts +0 -42
  1059. package/dist/lib/service-manager/index.js +0 -105
  1060. package/dist/lib/service-manager/launchd.d.ts +0 -81
  1061. package/dist/lib/service-manager/launchd.js +0 -212
  1062. package/dist/lib/service-manager/systemd.d.ts +0 -19
  1063. package/dist/lib/service-manager/systemd.js +0 -72
  1064. package/dist/lib/service-manager/types.d.ts +0 -34
  1065. package/dist/lib/service-manager/types.js +0 -26
  1066. package/dist/lib/test-utils/isolated-flag-company-context.d.ts +0 -3
  1067. package/dist/lib/test-utils/isolated-flag-company-context.js +0 -18
  1068. package/dist/lib/work-context/bind-best.d.ts +0 -66
  1069. package/dist/lib/work-context/bind-best.js +0 -344
  1070. package/dist/lib/work-context/bind-calling-session.d.ts +0 -26
  1071. package/dist/lib/work-context/bind-calling-session.js +0 -63
  1072. package/dist/lib/work-context/company-rebind.d.ts +0 -23
  1073. package/dist/lib/work-context/company-rebind.js +0 -59
  1074. package/dist/lib/work-context/default-company.d.ts +0 -43
  1075. package/dist/lib/work-context/default-company.js +0 -83
  1076. package/dist/lib/work-context/outbox-quarantine-status-flag.d.ts +0 -4
  1077. package/dist/lib/work-context/outbox-quarantine-status-flag.js +0 -7
  1078. package/dist/lib/work-context/prd-sync.d.ts +0 -56
  1079. package/dist/lib/work-context/prd-sync.js +0 -197
  1080. package/dist/lib/work-context/preflight-contract.d.ts +0 -28
  1081. package/dist/lib/work-context/preflight-contract.js +0 -85
  1082. package/dist/lib/work-context/prompt-rebind.d.ts +0 -25
  1083. package/dist/lib/work-context/prompt-rebind.js +0 -85
  1084. package/dist/lib/work-context/windows-acl.d.ts +0 -123
  1085. package/dist/lib/work-context/windows-acl.js +0 -425
  1086. package/dist/lib/workers-registry/read.d.ts +0 -15
  1087. package/dist/lib/workers-registry/read.js +0 -17
  1088. package/dist/native-fast-route.d.ts +0 -7
  1089. package/dist/native-fast-route.js +0 -45
  1090. package/dist/node-network-compat-core.d.ts +0 -12
  1091. package/dist/node-network-compat-core.js +0 -41
  1092. package/dist/node-network-compat-fast.d.ts +0 -7
  1093. package/dist/node-network-compat-fast.js +0 -23
  1094. package/dist/secrets-env-fast-path.d.ts +0 -5
  1095. package/dist/secrets-env-fast-path.js +0 -16
  1096. package/dist/secrets-env-fast-route.d.ts +0 -18
  1097. package/dist/secrets-env-fast-route.js +0 -54
  1098. package/dist/utils/checkpoint-stamp-write-error.d.ts +0 -28
  1099. package/dist/utils/checkpoint-stamp-write-error.js +0 -99
  1100. package/dist/utils/cli-network-lifecycle.d.ts +0 -4
  1101. package/dist/utils/cli-network-lifecycle.js +0 -11
  1102. package/dist/utils/cognito-refresh-sentry.d.ts +0 -3
  1103. package/dist/utils/cognito-refresh-sentry.js +0 -49
  1104. package/dist/utils/console-origin.d.ts +0 -9
  1105. package/dist/utils/console-origin.js +0 -28
  1106. package/dist/utils/exclusive-lock.d.ts +0 -32
  1107. package/dist/utils/exclusive-lock.js +0 -75
  1108. package/dist/utils/fast-stream-errors.d.ts +0 -12
  1109. package/dist/utils/fast-stream-errors.js +0 -18
  1110. package/dist/utils/files-browse-acl.d.ts +0 -5
  1111. package/dist/utils/files-browse-acl.js +0 -11
  1112. package/dist/utils/hq-core-yaml.d.ts +0 -10
  1113. package/dist/utils/hq-core-yaml.js +0 -40
  1114. package/dist/utils/hq-root-resolver.d.ts +0 -13
  1115. package/dist/utils/hq-root-resolver.js +0 -103
  1116. package/dist/utils/redact-url.d.ts +0 -14
  1117. package/dist/utils/redact-url.js +0 -218
  1118. package/dist/utils/scaffold-fast-import-guard.d.ts +0 -2
  1119. package/dist/utils/scaffold-fast-import-guard.js +0 -40
  1120. package/dist/utils/scaffold-packlist-guard.d.ts +0 -7
  1121. package/dist/utils/scaffold-packlist-guard.js +0 -23
  1122. package/dist/utils/scaffold-sibling-references.d.ts +0 -22
  1123. package/dist/utils/scaffold-sibling-references.js +0 -156
  1124. package/dist/utils/secret-load-availability.d.ts +0 -8
  1125. package/dist/utils/secret-load-availability.js +0 -54
  1126. package/dist/utils/staged-install.d.ts +0 -34
  1127. package/dist/utils/staged-install.js +0 -346
  1128. package/dist/utils/staged-npm-install.d.ts +0 -16
  1129. package/dist/utils/staged-npm-install.js +0 -264
  1130. package/dist/utils/sync-log-sources.d.ts +0 -15
  1131. package/dist/utils/sync-log-sources.js +0 -36
  1132. package/dist/utils/table-width.d.ts +0 -7
  1133. package/dist/utils/table-width.js +0 -15
  1134. package/dist/utils/update-command-supervisor.cjs +0 -247
  1135. package/dist/utils/upload-author.d.ts +0 -15
  1136. package/dist/utils/upload-author.js +0 -39
  1137. package/dist/utils/version-report.d.ts +0 -27
  1138. package/dist/utils/version-report.js +0 -105
  1139. package/dist/version-request.d.ts +0 -14
  1140. package/dist/version-request.js +0 -36
  1141. package/scripts/mesh-daemon-if-stale.mjs +0 -20
  1142. package/templates/reports/blank.md +0 -3
  1143. package/templates/reports/daily-digest.md +0 -11
  1144. package/templates/runbooks/update-report.md +0 -21
@@ -1,1339 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import { spawnSync } from "node:child_process";
4
- import { JSON_SCHEMA, load, loadAll } from "js-yaml";
5
- import { matchingSecretPatterns } from "../lib/core-utils/secret-patterns.js";
6
- import { serializeJqJson } from "../lib/core-utils/jq-json-serializer.js";
7
- import { resolveLiveRoot } from "../utils/hq-roots.js";
8
- import { runBundledScript } from "../utils/run-bundled-script.js";
9
- import { describeCoreCommand } from "./core-command-catalog.js";
10
- const SCHEDULE_PARSE_ASSET = "core/scripts/jobs-schedule-parse.sh";
11
- const VALIDATE_ASSET = "core/scripts/jobs-validate.sh";
12
- const RECONCILE_ASSET = "core/scripts/outpost-jobs-reconcile.sh";
13
- const SCHEDULE_PARSE_USAGE = 'usage: jobs-schedule-parse.sh [--tz IANA] "<nl or cron schedule>"\n';
14
- const VALIDATE_USAGE = "usage: jobs-validate.sh <file-or-dir> [file-or-dir...]\n";
15
- const CRON_RE = /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/;
16
- const DAY_NAMES = {
17
- sun: 0, sunday: 0, mon: 1, monday: 1, tue: 2, tues: 2, tuesday: 2,
18
- wed: 3, wednesday: 3, thu: 4, thur: 4, thurs: 4, thursday: 4,
19
- fri: 5, friday: 5, sat: 6, saturday: 6,
20
- };
21
- const DAY_LABELS = {
22
- "0": "Sunday", "1": "Monday", "2": "Tuesday", "3": "Wednesday",
23
- "4": "Thursday", "5": "Friday", "6": "Saturday", "1-5": "weekday",
24
- "*": "day",
25
- };
26
- function parseClock(text) {
27
- const match = /^(\d{1,2})(?::(\d{2}))?\s*(am|pm)?$/i.exec(text.trim().toLowerCase().replace(/ /g, ""));
28
- if (!match)
29
- return undefined;
30
- let hour = Number.parseInt(match[1], 10);
31
- const minute = Number.parseInt(match[2] || "0", 10);
32
- const meridiem = match[3];
33
- if (minute > 59)
34
- return undefined;
35
- if (meridiem) {
36
- if (hour < 1 || hour > 12)
37
- return undefined;
38
- hour = meridiem === "am"
39
- ? (hour === 12 ? 0 : hour)
40
- : (hour === 12 ? 12 : hour + 12);
41
- }
42
- else if (hour > 23) {
43
- return undefined;
44
- }
45
- return [hour, minute];
46
- }
47
- function formatClock(hour, minute) {
48
- const hour12 = hour % 12 || 12;
49
- return `${hour12}:${String(minute).padStart(2, "0")} ${hour < 12 ? "AM" : "PM"}`;
50
- }
51
- function humanizeCron(cron, timezone) {
52
- const fields = cron.split(/\s+/);
53
- if (fields.length !== 5)
54
- return `Cron \`${cron}\` (${timezone})`;
55
- const [minute, hour, dayOfMonth, month, dayOfWeek] = fields;
56
- if (/^\d+$/.test(minute) && /^\d+$/.test(hour) && dayOfMonth === "*"
57
- && month === "*" && (dayOfWeek === "*" || dayOfWeek === "1-5")) {
58
- const day = dayOfWeek === "1-5" ? "Every weekday" : "Every day";
59
- return `${day} at ${formatClock(+hour, +minute)} (${timezone})`;
60
- }
61
- if (/^\d+$/.test(minute) && /^\d+$/.test(hour) && dayOfMonth === "*"
62
- && month === "*" && /^\d+$/.test(dayOfWeek)) {
63
- const day = DAY_LABELS[dayOfWeek] || `day ${dayOfWeek}`;
64
- return `Every ${day} at ${formatClock(+hour, +minute)} (${timezone})`;
65
- }
66
- if (minute.startsWith("*/") && hour === "*" && dayOfMonth === "*"
67
- && month === "*" && dayOfWeek === "*") {
68
- return `Every ${minute.slice(2)} minutes (${timezone})`;
69
- }
70
- if (minute === "0" && hour.startsWith("*/") && dayOfMonth === "*"
71
- && month === "*" && dayOfWeek === "*") {
72
- return `Every ${hour.slice(2)} hours (${timezone})`;
73
- }
74
- if (minute === "0" && hour === "*" && dayOfMonth === "*"
75
- && month === "*" && dayOfWeek === "*") {
76
- return `Every hour on the hour (${timezone})`;
77
- }
78
- return `Cron \`${cron}\` (${timezone})`;
79
- }
80
- function parseNaturalLanguage(text) {
81
- const normalized = text.trim().toLowerCase();
82
- let match = /^every\s+(\d+)\s+minutes?$/.exec(normalized);
83
- if (match) {
84
- const minutes = Number(match[1]);
85
- if (minutes < 1 || minutes > 59)
86
- return [null, "minute interval must be 1..59"];
87
- return [`*/${minutes} * * * *`, `Every ${minutes} minutes`];
88
- }
89
- if (normalized === "every hour" || normalized === "hourly") {
90
- return ["0 * * * *", "Every hour on the hour"];
91
- }
92
- match = /^every\s+(\d+)\s+hours?$/.exec(normalized);
93
- if (match) {
94
- const hours = Number(match[1]);
95
- if (hours < 1 || hours > 23)
96
- return [null, "hour interval must be 1..23"];
97
- return [`0 */${hours} * * *`, `Every ${hours} hours`];
98
- }
99
- match = /^(?:every\s+)?(weekday|weekdays|day|daily)\s+(?:at\s+)?(.+)$/.exec(normalized);
100
- if (match) {
101
- const clock = parseClock(match[2]);
102
- if (!clock)
103
- return [null, `could not parse time: ${match[2]}`];
104
- const [hour, minute] = clock;
105
- const weekdays = match[1] === "weekday" || match[1] === "weekdays";
106
- return [
107
- `${minute} ${hour} * * ${weekdays ? "1-5" : "*"}`,
108
- `${weekdays ? "Every weekday" : "Every day"} at ${formatClock(hour, minute)}`,
109
- ];
110
- }
111
- match = /^(?:every\s+)?(sun(?:day)?|mon(?:day)?|tue(?:s|sday)?|wed(?:nesday)?|thu(?:r|rs|rsday)?|fri(?:day)?|sat(?:urday)?)s?\s+(?:at\s+)?(.+)$/.exec(normalized);
112
- if (match) {
113
- const day = DAY_NAMES[match[1]];
114
- const clock = parseClock(match[2]);
115
- if (!clock)
116
- return [null, `could not parse time: ${match[2]}`];
117
- return [
118
- `${clock[1]} ${clock[0]} * * ${day}`,
119
- `Every ${DAY_LABELS[String(day)]} at ${formatClock(...clock)}`,
120
- ];
121
- }
122
- match = /^at\s+(.+?)\s+every\s+(weekday|weekdays|day|daily)$/.exec(normalized);
123
- if (match) {
124
- const clock = parseClock(match[1]);
125
- if (!clock)
126
- return [null, `could not parse time: ${match[1]}`];
127
- const weekdays = match[2] === "weekday" || match[2] === "weekdays";
128
- return [
129
- `${clock[1]} ${clock[0]} * * ${weekdays ? "1-5" : "*"}`,
130
- `${weekdays ? "Every weekday" : "Every day"} at ${formatClock(...clock)}`,
131
- ];
132
- }
133
- return [
134
- null,
135
- "unrecognized schedule — try 'every weekday at 9am', 'every day at 14:30', "
136
- + "'every monday at 9am', a 5-field cron, or 'every 15 minutes'",
137
- ];
138
- }
139
- function isValidTimezone(timezone) {
140
- const wellFormed = /^(UTC|[A-Za-z0-9_+-]+(\/[A-Za-z0-9_+-]+)+)$/;
141
- if (!wellFormed.test(timezone))
142
- return false;
143
- try {
144
- new Intl.DateTimeFormat(undefined, { timeZone: timezone });
145
- return true;
146
- }
147
- catch {
148
- // Hosts without tzdata accept the same well-formed names as the shell.
149
- return wellFormed.test(timezone);
150
- }
151
- }
152
- export function detectHostTimezone(override, resolveLocaltime = fs.realpathSync, readTimedatectl = () => {
153
- const result = spawnSync("timedatectl", ["show", "-p", "Timezone", "--value"], { encoding: "utf8", timeout: 2000, stdio: ["ignore", "pipe", "ignore"] });
154
- if (result.error || result.status !== 0)
155
- return "";
156
- return result.stdout || "";
157
- }) {
158
- if (override)
159
- return override;
160
- const environmentTimezone = (process.env.TZ || "").trim();
161
- if (environmentTimezone && environmentTimezone.includes("/"))
162
- return environmentTimezone;
163
- try {
164
- const realpath = resolveLocaltime("/etc/localtime");
165
- const parts = realpath.split(path.sep).filter(Boolean);
166
- const zoneinfo = parts.indexOf("zoneinfo");
167
- if (zoneinfo >= 0 && parts.slice(zoneinfo + 1).length) {
168
- return parts.slice(zoneinfo + 1).join("/");
169
- }
170
- }
171
- catch {
172
- // Ignore an unavailable local timezone link.
173
- }
174
- try {
175
- const timezone = readTimedatectl().trim();
176
- if (timezone && timezone.includes("/"))
177
- return timezone;
178
- }
179
- catch {
180
- // Ignore unavailable timedatectl.
181
- }
182
- return "UTC";
183
- }
184
- export function runScheduleParse(argv) {
185
- let timezoneOverride = "";
186
- const args = [...argv];
187
- while (args.length) {
188
- const argument = args[0];
189
- if (argument === "--tz") {
190
- if (args.length < 2) {
191
- process.stderr.write(SCHEDULE_PARSE_USAGE);
192
- return 2;
193
- }
194
- timezoneOverride = args[1];
195
- args.splice(0, 2);
196
- }
197
- else if (argument === "--json") {
198
- args.shift();
199
- }
200
- else if (argument === "-h" || argument === "--help") {
201
- process.stderr.write(SCHEDULE_PARSE_USAGE);
202
- return 2;
203
- }
204
- else if (argument === "--") {
205
- args.shift();
206
- break;
207
- }
208
- else if (argument.startsWith("-")) {
209
- process.stderr.write(`jobs-schedule-parse: unknown flag: ${argument}\n${SCHEDULE_PARSE_USAGE}`);
210
- return 2;
211
- }
212
- else {
213
- break;
214
- }
215
- }
216
- if (!args.length) {
217
- process.stderr.write(SCHEDULE_PARSE_USAGE);
218
- return 2;
219
- }
220
- const input = args.join(" ").trim();
221
- if (!input) {
222
- process.stdout.write('{"ok":false,"error":"empty schedule"}\n');
223
- return 1;
224
- }
225
- const timezone = detectHostTimezone(timezoneOverride);
226
- if (!isValidTimezone(timezone)) {
227
- process.stdout.write(`${JSON.stringify({ ok: false, error: `invalid IANA timezone: ${timezone}` })}\n`);
228
- return 1;
229
- }
230
- if (CRON_RE.test(input) && !/[A-Za-z]/.test(input)) {
231
- process.stdout.write(`${JSON.stringify({ ok: true, cron: input, timezone, human: humanizeCron(input, timezone), source: "cron" })}\n`);
232
- return 0;
233
- }
234
- const namedCron = /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(mon-fri|monday-friday)$/i.exec(input);
235
- if (namedCron) {
236
- const cron = `${namedCron[1]} ${namedCron[2]} ${namedCron[3]} ${namedCron[4]} 1-5`;
237
- process.stdout.write(`${JSON.stringify({ ok: true, cron, timezone, human: humanizeCron(cron, timezone), source: "cron" })}\n`);
238
- return 0;
239
- }
240
- const [cron, message] = parseNaturalLanguage(input);
241
- if (cron === null) {
242
- process.stdout.write(`${JSON.stringify({ ok: false, error: message })}\n`);
243
- return 1;
244
- }
245
- process.stdout.write(`${JSON.stringify({ ok: true, cron, timezone, human: `${message} (${timezone})`, source: "nl" })}\n`);
246
- return 0;
247
- }
248
- function isValidCronField(value, minimum, maximum) {
249
- return value.split(",").every((part) => {
250
- if (part === "*")
251
- return true;
252
- if (/^\*\/[1-9]\d*$/.test(part))
253
- return true;
254
- if (/^(sun|mon|tue|wed|thu|fri|sat)$/i.test(part))
255
- return maximum === 7;
256
- if (/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)$/i.test(part))
257
- return maximum === 12;
258
- const range = /^(\d+)-(\d+)(?:\/([1-9]\d*))?$/.exec(part);
259
- if (range) {
260
- return Number(range[1]) >= minimum && Number(range[2]) <= maximum
261
- && Number(range[1]) <= Number(range[2]);
262
- }
263
- const number = /^(\d+)(?:\/([1-9]\d*))?$/.exec(part);
264
- if (!number)
265
- return false;
266
- return Number(number[1]) >= minimum && Number(number[1]) <= maximum;
267
- });
268
- }
269
- function validateCron(file, cron, emit) {
270
- const fields = cron.trim().split(/\s+/);
271
- if (fields.length !== 5) {
272
- emit(file, "schedule", `invalid cron — expected 5 fields (minute hour dom month dow), got ${fields.length}`);
273
- return;
274
- }
275
- const names = ["minute", "hour", "day-of-month", "month", "day-of-week"];
276
- const ranges = [[0, 59], [0, 23], [1, 31], [1, 12], [0, 7]];
277
- fields.forEach((field, index) => {
278
- const [minimum, maximum] = ranges[index];
279
- if (!isValidCronField(field, minimum, maximum)) {
280
- emit(file, "schedule", `invalid cron ${names[index]} field '${field}'`);
281
- }
282
- });
283
- }
284
- function asText(value) {
285
- if (value === null || value === undefined || value === false)
286
- return "";
287
- if (typeof value === "string")
288
- return value;
289
- if (typeof value === "object")
290
- return JSON.stringify(value, null, 2);
291
- return String(value);
292
- }
293
- function matchingJobSecretPatterns(value) {
294
- return matchingSecretPatterns(value, { requireBoundary: false });
295
- }
296
- function validateCwd(file, field, cwd, emit) {
297
- if (cwd.startsWith("/")) {
298
- emit(file, field, "absolute cwd not allowed — use an HQ-root-relative path");
299
- return;
300
- }
301
- if (cwd.split("/").includes("..")) {
302
- emit(file, field, "cwd must not contain '..' path components");
303
- }
304
- }
305
- function validateJobId(file, value, seenIds, emit) {
306
- if (!value)
307
- return;
308
- if (!/^[a-z][a-z0-9-]{1,62}$/.test(value)) {
309
- emit(file, "id", `must match [a-z][a-z0-9-]{1,62}, got '${value}'`);
310
- }
311
- if (seenIds.includes(value))
312
- emit(file, "id", `duplicate id '${value}'`);
313
- seenIds.push(value);
314
- }
315
- function validateExec(file, exec, emit) {
316
- if (exec === undefined || exec === null) {
317
- emit(file, "exec", "missing required field");
318
- return;
319
- }
320
- if (typeof exec !== "object" || Array.isArray(exec)) {
321
- emit(file, "exec", "must be an object with prompt or skill");
322
- return;
323
- }
324
- const definition = exec;
325
- const prompt = asText(definition.prompt);
326
- const skill = asText(definition.skill);
327
- if (!prompt && !skill)
328
- emit(file, "exec", "must set prompt or skill");
329
- else if (prompt && skill)
330
- emit(file, "exec", "set exactly one of prompt or skill, not both");
331
- for (const [field, value] of [["exec.prompt", prompt], ["exec.skill", skill]]) {
332
- for (const name of matchingJobSecretPatterns(value)) {
333
- emit(file, field, `inline credential-shaped value matched pattern '${name}' (names only; never values)`);
334
- }
335
- }
336
- if (definition.args !== undefined) {
337
- if (!definition.args || typeof definition.args !== "object" || Array.isArray(definition.args)) {
338
- emit(file, "exec.args", "must be a mapping when present");
339
- }
340
- else {
341
- const collectStrings = (value) => {
342
- if (typeof value === "string")
343
- return [value];
344
- if (Array.isArray(value))
345
- return value.flatMap(collectStrings);
346
- if (value && typeof value === "object")
347
- return Object.values(value).flatMap(collectStrings);
348
- return [];
349
- };
350
- for (const value of collectStrings(definition.args)) {
351
- for (const name of matchingJobSecretPatterns(value)) {
352
- emit(file, "exec.args", `inline credential-shaped value matched pattern '${name}' (names only; never values)`);
353
- }
354
- }
355
- }
356
- }
357
- const surface = asText(definition.surface);
358
- if (surface && !["headless", "remote"].includes(surface)) {
359
- emit(file, "exec.surface", `unknown surface '${surface}' (allowed: headless|remote)`);
360
- }
361
- for (const key of Object.keys(definition)) {
362
- if (!["prompt", "skill", "args", "surface"].includes(key)) {
363
- emit(file, `exec.${key}`, "unknown exec key (allowed: prompt, skill, args, surface)");
364
- }
365
- }
366
- }
367
- function validateRequirements(file, requirements, runtime, emit) {
368
- if (requirements === undefined || requirements === null)
369
- return;
370
- if (!requirements || typeof requirements !== "object" || Array.isArray(requirements)) {
371
- emit(file, "requirements", "must be a mapping");
372
- return;
373
- }
374
- const value = requirements;
375
- for (const key of Object.keys(value)) {
376
- if (["runtime", "secrets", "company", "cwd", "tools"].includes(key))
377
- continue;
378
- const message = ["readiness", "last_probe", "last_run", "failure_class", "pending_probe"].includes(key)
379
- ? "unknown requirements key (status belongs in hq-pro, not requirements)"
380
- : "unknown requirements key (allowed: runtime, secrets, company, cwd, tools)";
381
- emit(file, `requirements.${key}`, message);
382
- }
383
- const requiredRuntime = asText(value.runtime);
384
- if (requiredRuntime && !["claude", "codex"].includes(requiredRuntime)) {
385
- emit(file, "requirements.runtime", `unknown runtime '${requiredRuntime}' (allowed: claude|codex)`);
386
- }
387
- if (requiredRuntime && runtime && value.runtime !== runtime) {
388
- emit(file, "requirements.runtime", `mismatches top-level runtime ('${requiredRuntime}' vs '${runtime}')`);
389
- }
390
- if (value.secrets !== undefined) {
391
- if (!Array.isArray(value.secrets)) {
392
- emit(file, "requirements.secrets", "must be an array of vault key names");
393
- }
394
- else {
395
- for (const secret of value.secrets) {
396
- const name = asText(secret);
397
- for (const pattern of matchingJobSecretPatterns(name)) {
398
- emit(file, "requirements.secrets", `inline credential-shaped value matched pattern '${pattern}' (names only; never values)`);
399
- }
400
- if (name && !/^[A-Za-z][A-Za-z0-9._:/-]{0,127}$/.test(name)) {
401
- emit(file, "requirements.secrets", `invalid vault key name '${name}' (use names only)`);
402
- }
403
- if (name.includes("=")) {
404
- emit(file, "requirements.secrets", "looks like KEY=value inline credential — names only");
405
- }
406
- }
407
- }
408
- }
409
- if (value.tools !== undefined && !Array.isArray(value.tools)) {
410
- emit(file, "requirements.tools", "must be an array of strings");
411
- }
412
- if (value.cwd)
413
- validateCwd(file, "requirements.cwd", asText(value.cwd), emit);
414
- const company = asText(value.company);
415
- if (company && !/^[a-z0-9]([a-z0-9_-]*[a-z0-9])?$/.test(company)) {
416
- emit(file, "requirements.company", `invalid company slug '${company}' (lowercase kebab/underscore)`);
417
- }
418
- }
419
- function validateJob(file, document, seenIds, emit) {
420
- if (!document || typeof document !== "object" || Array.isArray(document)) {
421
- emit(file, "yaml", "job root must be a mapping");
422
- return;
423
- }
424
- const job = document;
425
- for (const field of ["id", "name", "schedule", "runtime", "timeout_seconds", "notify", "enabled", "owner", "created_at"]) {
426
- const missing = field === "enabled" ? !Object.hasOwn(job, field) : asText(job[field]) === "";
427
- if (missing)
428
- emit(file, field, "missing required field");
429
- }
430
- const id = asText(job.id);
431
- const schedule = asText(job.schedule);
432
- const timezone = asText(job.timezone);
433
- const runtime = asText(job.runtime);
434
- const timeout = asText(job.timeout_seconds);
435
- const notify = asText(job.notify);
436
- if (job.timezone !== undefined && (typeof job.timezone !== "string" || !job.timezone)) {
437
- emit(file, "timezone", "must be a non-empty string when present");
438
- }
439
- validateJobId(file, id, seenIds, emit);
440
- if (schedule) {
441
- const fields = schedule.trim().split(/\s+/);
442
- if (fields.length !== 5) {
443
- const message = /[a-z]/i.test(schedule)
444
- ? "natural-language schedule is not allowed — store canonical cron only"
445
- : `invalid cron — expected 5 fields (minute hour dom month dow), got ${fields.length}`;
446
- emit(file, "schedule", message);
447
- }
448
- else {
449
- validateCron(file, schedule, emit);
450
- }
451
- }
452
- if (timezone && !(/^[A-Za-z_]+(\/[A-Za-z0-9_+-]+)+$/.test(timezone) || timezone === "UTC")) {
453
- emit(file, "timezone", `not an IANA-looking timezone '${timezone}'`);
454
- }
455
- if (runtime && !["claude", "codex"].includes(runtime)) {
456
- emit(file, "runtime", `unknown runtime '${runtime}' (allowed: claude|codex)`);
457
- }
458
- validateExec(file, job.exec, emit);
459
- if (timeout) {
460
- if (!/^\d+$/.test(timeout))
461
- emit(file, "timeout_seconds", `must be an integer, got '${timeout}'`);
462
- else if (+timeout < 60 || +timeout > 14400) {
463
- emit(file, "timeout_seconds", `must be between 60 and 14400, got ${timeout}`);
464
- }
465
- }
466
- if (notify && !["dm", "none", "profile"].includes(notify)) {
467
- emit(file, "notify", `unknown notify '${notify}' (allowed: dm|none|profile)`);
468
- }
469
- if (job.enabled !== undefined && typeof job.enabled !== "boolean") {
470
- emit(file, "enabled", `must be boolean true|false, got '${String(job.enabled)}'`);
471
- }
472
- const createdAt = asText(job.created_at);
473
- if (createdAt && !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(Z|[+-]\d{2}:\d{2})$/.test(createdAt)) {
474
- emit(file, "created_at", `must be ISO-8601 datetime, got '${createdAt}'`);
475
- }
476
- validateRequirements(file, job.requirements, runtime, emit);
477
- if (job.cwd)
478
- validateCwd(file, "cwd", asText(job.cwd), emit);
479
- }
480
- function parseJobFile(contents) {
481
- const documents = [];
482
- loadAll(contents, (document) => documents.push(document), { schema: JSON_SCHEMA, json: true });
483
- if (documents.length > 1)
484
- return [];
485
- const parsed = documents.length === 0
486
- ? load(contents, { schema: JSON_SCHEMA, json: true })
487
- : documents[0];
488
- return expandYamlMergeKeys(parsed);
489
- }
490
- function expandYamlMergeKeys(value) {
491
- if (Array.isArray(value))
492
- return value.map(expandYamlMergeKeys);
493
- if (!value || typeof value !== "object")
494
- return value;
495
- const mapping = value;
496
- const merged = mapping["<<"];
497
- const sources = Array.isArray(merged) ? merged : merged === undefined ? [] : [merged];
498
- const result = {};
499
- for (const source of [...sources].reverse()) {
500
- if (source && typeof source === "object" && !Array.isArray(source)) {
501
- Object.assign(result, expandYamlMergeKeys(source));
502
- }
503
- }
504
- for (const [key, entry] of Object.entries(mapping)) {
505
- if (key !== "<<")
506
- result[key] = expandYamlMergeKeys(entry);
507
- }
508
- return result;
509
- }
510
- function collectJobFiles(args, emit) {
511
- const files = [];
512
- const collect = (argument) => {
513
- try {
514
- const stat = fs.statSync(argument);
515
- if (stat.isFile()) {
516
- if (/\.(yaml|yml)$/.test(argument))
517
- files.push({ diskPath: argument, displayPath: argument });
518
- else
519
- emit(argument, "path", "not a .yaml/.yml job file");
520
- return;
521
- }
522
- if (stat.isDirectory()) {
523
- const strippedArgument = argument.replace(/\/+$/, "") || path.parse(argument).root;
524
- const walk = (directory, displayDirectory) => {
525
- const entries = fs.readdirSync(directory, { withFileTypes: true });
526
- for (const entry of entries) {
527
- const file = path.join(directory, entry.name);
528
- const displayFile = `${displayDirectory.replace(/\/$/, "")}/${entry.name}`;
529
- if (entry.isDirectory())
530
- walk(file, displayFile);
531
- else if (entry.isFile() && /\.(yaml|yml)$/.test(entry.name)) {
532
- files.push({ diskPath: file, displayPath: displayFile });
533
- }
534
- }
535
- };
536
- walk(argument, strippedArgument);
537
- return;
538
- }
539
- emit(argument, "path", "file or directory not found");
540
- }
541
- catch {
542
- emit(argument, "path", "file or directory not found");
543
- }
544
- };
545
- args.forEach(collect);
546
- return files;
547
- }
548
- function comparePathsLikeSort(left, right) {
549
- return Buffer.compare(Buffer.from(left), Buffer.from(right));
550
- }
551
- export function validateJobs(args) {
552
- if (!args.length) {
553
- process.stderr.write(VALIDATE_USAGE);
554
- return 2;
555
- }
556
- const errors = [];
557
- const emit = (file, field, message) => {
558
- errors.push(`jobs-validate: ${file}: ${field}: ${message}`);
559
- };
560
- const seenIds = [];
561
- const files = collectJobFiles(args, emit).sort((left, right) => comparePathsLikeSort(left.diskPath, right.diskPath));
562
- if (!files.length) {
563
- for (const error of errors)
564
- process.stderr.write(`${error}\n`);
565
- process.stderr.write("jobs-validate: no job YAML files found\n");
566
- return 1;
567
- }
568
- for (const { diskPath, displayPath } of files) {
569
- try {
570
- validateJob(displayPath, parseJobFile(fs.readFileSync(diskPath, "utf8")), seenIds, emit);
571
- }
572
- catch {
573
- emit(displayPath, "yaml", "failed to parse YAML");
574
- }
575
- }
576
- for (const error of errors)
577
- process.stderr.write(`${error}\n`);
578
- if (errors.length) {
579
- process.stderr.write(`jobs-validate: ${errors.length} error(s)\n`);
580
- return 1;
581
- }
582
- return 0;
583
- }
584
- const RECONCILE_USAGE = `outpost-jobs-reconcile.sh — registry YAML → systemd user timers (US-004).
585
-
586
- Reads personal/jobs/*.yaml and companies/*/jobs/*.yaml from the box HQ tree,
587
- validates each with jobs-validate.sh, and materializes disposable units:
588
- ~/.config/systemd/user/hq-job-{id}.service
589
- ~/.config/systemd/user/hq-job-{id}.timer
590
- with Persistent=true and RandomizedDelaySec. Timers are armed only when
591
- hq-pro jobs status readiness=ready (box cache from probe ingest, or live
592
- GET when available). Disabled/deleted jobs have units removed.
593
-
594
- Company-scoped jobs materialize only when job.owner matches this Outpost's
595
- owner identity (creator's box only in v1).
596
-
597
- Usage:
598
- core/scripts/outpost-jobs-reconcile.sh [options]
599
- core/scripts/outpost-jobs-reconcile.sh --after-sync # post-sync entrypoint
600
-
601
- Options:
602
- --hq-root DIR HQ tree root (default: HQ_ROOT or repo root above core/)
603
- --dry-run Write units to unit dir / print plan; skip systemctl
604
- --no-probe Do not probe non-ready jobs
605
- --probe-only Probe non-ready jobs then exit (no unit changes)
606
- --ensure-hook Install personal/hooks/Stop/90-outpost-jobs-reconcile.sh
607
- --after-sync Alias for default reconcile + probe path (sync Stop hook)
608
- -h, --help
609
-
610
- Env / overrides (tests):
611
- HQ_ROOT, HOME, HQ_JOB_UNIT_DIR, HQ_JOB_SYSTEMCTL, HQ_JOB_STATUS_CACHE_DIR
612
- HQ_JOB_OWNER_EMAIL, HQ_JOB_OWNER_UID, OUTPOST_USER_ID, OUTPOST_ID
613
- HQ_JOB_RANDOMIZE_SEC (default 60), HQ_JOB_RECONCILE_STATE
614
- HQ_PRO_API_URL / HQ_API_URL / HQ_VAULT_API_URL, HQ_ACCESS_TOKEN (optional GET)
615
-
616
- Exit: 0 success; 1 partial failures; 2 usage/config.
617
- `;
618
- function commandResult(command, args) {
619
- const result = spawnSync(command, args, {
620
- encoding: "utf8",
621
- stdio: ["ignore", "pipe", "pipe"],
622
- });
623
- return {
624
- status: result.status ?? (result.error ? 127 : 1),
625
- stdout: result.stdout ?? "",
626
- stderr: result.stderr ?? "",
627
- };
628
- }
629
- function isExecutable(file) {
630
- try {
631
- fs.accessSync(file, fs.constants.X_OK);
632
- return fs.statSync(file).isFile();
633
- }
634
- catch {
635
- return false;
636
- }
637
- }
638
- function findExecutable(command, searchPath) {
639
- if (path.isAbsolute(command) || command.includes(path.sep)) {
640
- return isExecutable(command) ? command : undefined;
641
- }
642
- for (const directory of searchPath.split(path.delimiter)) {
643
- if (!directory)
644
- continue;
645
- const candidate = path.join(directory, command);
646
- if (isExecutable(candidate))
647
- return candidate;
648
- }
649
- return undefined;
650
- }
651
- function shellText(value) {
652
- if (value === undefined || value === null)
653
- return "";
654
- if (typeof value === "string")
655
- return value;
656
- if (typeof value === "object")
657
- return JSON.stringify(value);
658
- return String(value);
659
- }
660
- function parseIdentityAssignments(contents) {
661
- const values = [];
662
- for (const line of contents.split(/\r?\n/)) {
663
- const assignment = /^\s*(?:export\s+)?(OUTPOST_USER_ID|OUTPOST_OWNER_EMAIL|OWNER_EMAIL)\s*=\s*(.*?)\s*$/.exec(line);
664
- if (!assignment)
665
- continue;
666
- let value = assignment[2] ?? "";
667
- if ((value.startsWith("'") && value.endsWith("'")) || (value.startsWith('"') && value.endsWith('"'))) {
668
- value = value.slice(1, -1);
669
- }
670
- else {
671
- value = value.replace(/\s+#.*$/, "");
672
- }
673
- values.push(value);
674
- }
675
- return values;
676
- }
677
- function identityFileTokens(options) {
678
- if (process.env.HQ_JOB_SKIP_SYSTEM_IDENTITY === "1")
679
- return [];
680
- const filename = "/etc/outpost/codex-identity.env";
681
- try {
682
- const contents = options.identityFileReader
683
- ? options.identityFileReader(filename)
684
- : fs.readFileSync(filename, "utf8");
685
- return contents ? parseIdentityAssignments(contents) : [];
686
- }
687
- catch {
688
- return [];
689
- }
690
- }
691
- function resolveBoxOwners(options) {
692
- const owners = [];
693
- const add = (value) => {
694
- if (!value || value === "null" || owners.includes(value))
695
- return;
696
- owners.push(value);
697
- };
698
- add(process.env.HQ_JOB_OWNER_EMAIL);
699
- add(process.env.HQ_JOB_OWNER_UID);
700
- add(process.env.OUTPOST_USER_ID);
701
- const searchPath = process.env.PATH ?? "";
702
- if (findExecutable("hq", searchPath)) {
703
- const run = options.commandRunner ?? commandResult;
704
- let result = run("hq", ["whoami", "--json"]);
705
- if (result.status !== 0)
706
- result = run("hq", ["whoami"]);
707
- const who = result.stdout;
708
- if (who) {
709
- let parsed;
710
- try {
711
- parsed = JSON.parse(who);
712
- }
713
- catch {
714
- parsed = undefined;
715
- }
716
- let email = "";
717
- if (parsed && typeof parsed === "object") {
718
- const record = parsed;
719
- const user = record.user && typeof record.user === "object"
720
- ? record.user
721
- : undefined;
722
- email = shellText(record.email ?? user?.email);
723
- add(email);
724
- add(shellText(record.personUid ?? record.person_uid ?? record.uid));
725
- }
726
- if (!email) {
727
- const humanEmail = /.*Email:\s*(.*)/i.exec(who)?.[1]
728
- ?? /.*email\s*[:=]\s*(.*)/i.exec(who)?.[1];
729
- if (humanEmail)
730
- add(humanEmail.replace(/\s/g, ""));
731
- }
732
- }
733
- }
734
- for (const value of identityFileTokens(options))
735
- add(value);
736
- return owners;
737
- }
738
- function ownerMatches(jobOwner, owners) {
739
- if (!jobOwner)
740
- return false;
741
- return owners.some((owner) => owner === jobOwner
742
- || (owner.includes("@") && owner.toLowerCase() === jobOwner.toLowerCase()));
743
- }
744
- function compareReconcilePaths(left, right) {
745
- return Buffer.compare(Buffer.from(left), Buffer.from(right));
746
- }
747
- function addYamlFilesAtDepth(directory, maxDepth) {
748
- const result = [];
749
- const walk = (current, depth) => {
750
- let entries;
751
- try {
752
- entries = fs.readdirSync(current, { withFileTypes: true });
753
- }
754
- catch {
755
- return;
756
- }
757
- for (const entry of entries) {
758
- const file = path.join(current, entry.name);
759
- if (entry.isFile() && depth <= maxDepth && /\.(yaml|yml)$/.test(entry.name)) {
760
- result.push(file);
761
- }
762
- else if (entry.isDirectory() && depth < maxDepth) {
763
- walk(file, depth + 1);
764
- }
765
- }
766
- };
767
- walk(directory, 1);
768
- return result;
769
- }
770
- function collectReconcileJobs(root) {
771
- const files = addYamlFilesAtDepth(path.join(root, "personal", "jobs"), 1);
772
- const companies = path.join(root, "companies");
773
- let companyEntries = [];
774
- try {
775
- companyEntries = fs.readdirSync(companies, { withFileTypes: true });
776
- }
777
- catch { /* A missing companies tree is empty. */ }
778
- for (const company of companyEntries) {
779
- if (!company.isDirectory())
780
- continue;
781
- files.push(...addYamlFilesAtDepth(path.join(companies, company.name, "jobs"), 1));
782
- }
783
- return files
784
- .filter((file) => !file.includes(".conflict-") && !file.includes(`${path.sep}.conflicts${path.sep}`))
785
- .sort(compareReconcilePaths);
786
- }
787
- function readJobValue(file) {
788
- try {
789
- const parsed = parseJobFile(fs.readFileSync(file, "utf8"));
790
- return parsed && typeof parsed === "object" && !Array.isArray(parsed)
791
- ? parsed
792
- : {};
793
- }
794
- catch {
795
- return {};
796
- }
797
- }
798
- function reconcileJobIsValid(file) {
799
- const errors = [];
800
- try {
801
- validateJob(file, parseJobFile(fs.readFileSync(file, "utf8")), [], (_path, _field, message) => errors.push(message));
802
- return errors.length === 0;
803
- }
804
- catch {
805
- return false;
806
- }
807
- }
808
- function parseData(contents) {
809
- return load(contents, { schema: JSON_SCHEMA, json: true });
810
- }
811
- function recordOf(value) {
812
- return value !== null && typeof value === "object" && !Array.isArray(value)
813
- ? value
814
- : undefined;
815
- }
816
- function writeReadinessCache(cacheDir, id, readiness, source, options) {
817
- const filename = path.join(cacheDir, `${id}.json`);
818
- const updatedAt = (options.now?.() ?? new Date()).toISOString().replace(/\.\d{3}Z$/, "Z");
819
- fs.writeFileSync(filename, serializeJqJson({ job_id: id, readiness, updated_at: updatedAt, source }, "compact"));
820
- try {
821
- fs.chmodSync(filename, 0o600);
822
- }
823
- catch { /* The shell ignores chmod failure. */ }
824
- }
825
- function cachedReadiness(cacheDir, home, id) {
826
- try {
827
- const record = recordOf(parseData(fs.readFileSync(path.join(cacheDir, `${id}.json`), "utf8")));
828
- const value = record?.readiness;
829
- if (value !== undefined && value !== null && value !== false)
830
- return shellText(value);
831
- if (value === false)
832
- return "unknown";
833
- }
834
- catch { /* The shell falls through to the probe marker. */ }
835
- try {
836
- const marker = JSON.parse(fs.readFileSync(path.join(home, ".hq", "jobs", "probes", id, "last-attempt.json"), "utf8"));
837
- const reported = marker.reported_readiness;
838
- if (reported !== undefined && reported !== null && reported !== false && reported !== "")
839
- return shellText(reported);
840
- }
841
- catch { /* No successful prior probe marker. */ }
842
- return "unknown";
843
- }
844
- async function liveReadiness(id, cacheDir, options) {
845
- if (process.env.HQ_JOB_DISABLE_LIVE_READINESS === "1")
846
- return undefined;
847
- const token = process.env.HQ_ACCESS_TOKEN;
848
- if (!token)
849
- return undefined;
850
- const api = process.env.HQ_PRO_API_URL || process.env.HQ_API_URL || process.env.HQ_VAULT_API_URL || "https://hqapi.hq.computer";
851
- const url = `${api.replace(/\/$/, "")}/outpost/jobs/status/${id}`;
852
- try {
853
- const response = await (options.fetcher ?? fetch)(url, {
854
- method: "GET",
855
- headers: { authorization: `Bearer ${token}`, accept: "application/json" },
856
- signal: AbortSignal.timeout(15_000),
857
- });
858
- if (!response.ok)
859
- return undefined;
860
- const body = recordOf(await response.json());
861
- const status = recordOf(body?.status);
862
- const readiness = status?.readiness !== undefined && status.readiness !== null && status.readiness !== false
863
- ? status.readiness
864
- : body?.readiness;
865
- if (readiness === undefined || readiness === null || readiness === false || readiness === "")
866
- return undefined;
867
- const result = shellText(readiness);
868
- writeReadinessCache(cacheDir, id, result, "api-get", options);
869
- return result;
870
- }
871
- catch {
872
- return undefined;
873
- }
874
- }
875
- async function jobReadiness(id, cacheDir, home, options) {
876
- return await liveReadiness(id, cacheDir, options) ?? cachedReadiness(cacheDir, home, id);
877
- }
878
- function probeValue(output, field) {
879
- try {
880
- const record = recordOf(JSON.parse(output));
881
- const value = record?.[field];
882
- return value === undefined || value === null ? "" : shellText(value);
883
- }
884
- catch {
885
- return "";
886
- }
887
- }
888
- function cronDowNumber(value) {
889
- const names = { "0": "Sun", "1": "Mon", "2": "Tue", "3": "Wed", "4": "Thu", "5": "Fri", "6": "Sat", "7": "Sun" };
890
- return names[value];
891
- }
892
- function cronDowTokenToSystemd(token) {
893
- if (/^[0-7]+-[0-7]+$/.test(token)) {
894
- const [from, to] = token.split("-");
895
- const start = cronDowNumber(from ?? "");
896
- const end = cronDowNumber(to ?? "");
897
- return start && end ? `${start}..${end}` : undefined;
898
- }
899
- const lower = token.toLowerCase();
900
- const names = {
901
- sun: "Sun", "0": "Sun", "7": "Sun", mon: "Mon", "1": "Mon",
902
- tue: "Tue", "2": "Tue", wed: "Wed", "3": "Wed", thu: "Thu", "4": "Thu",
903
- fri: "Fri", "5": "Fri", sat: "Sat", "6": "Sat", "mon..fri": "Mon..Fri", "1-5": "Mon..Fri",
904
- };
905
- return names[lower];
906
- }
907
- function cronDowToSystemd(field) {
908
- if (field === "*" || field === "*/1")
909
- return "";
910
- const mapped = [];
911
- for (const part of field.split(/[\s,]+/)) {
912
- const value = cronDowTokenToSystemd(part);
913
- if (!value)
914
- return undefined;
915
- mapped.push(value);
916
- }
917
- return mapped.join(",");
918
- }
919
- function padCronField(value) {
920
- return value.length === 1 ? `0${value}` : value;
921
- }
922
- function cronTimeField(field) {
923
- if (field === "*")
924
- return "";
925
- if (field.includes("/"))
926
- return `*/${field.slice(field.indexOf("/") + 1)}`;
927
- if (field.includes("-"))
928
- return field;
929
- return /^\d+$/.test(field) ? padCronField(field) : field;
930
- }
931
- function cronToOnCalendar(fields) {
932
- const [minute = "", hour = "", dom = "", month = "", dow = ""] = fields;
933
- const dowValue = cronDowToSystemd(dow) ?? "";
934
- const monthValue = month === "*" ? "*" : padCronField(month);
935
- const dayValue = dom === "*" ? "*" : padCronField(dom);
936
- const date = `*-${monthValue}-${dayValue}`;
937
- const minuteValue = cronTimeField(minute) || "00";
938
- const hourValue = cronTimeField(hour) || "*";
939
- let time;
940
- if (hourValue === "*")
941
- time = `*:${minuteValue}:00`;
942
- else if (hourValue.includes("/"))
943
- time = `0/${hourValue.slice(hourValue.indexOf("/") + 1)}:${minuteValue}:00`;
944
- else
945
- time = `${hourValue}:${minuteValue}:00`;
946
- return dowValue ? `${dowValue} ${date} ${time}` : `${date} ${time}`;
947
- }
948
- function normalizeServicePath(value) {
949
- const entries = [];
950
- for (const entry of value.split(":")) {
951
- if (entry.startsWith("/") && !entries.includes(entry))
952
- entries.push(entry);
953
- }
954
- return entries.join(":");
955
- }
956
- function servicePathValue() {
957
- let servicePath = normalizeServicePath(process.env.PATH || "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin");
958
- const hq = findExecutable("hq", servicePath);
959
- if (hq) {
960
- let binDirectory = "";
961
- try {
962
- binDirectory = fs.realpathSync(path.dirname(hq));
963
- }
964
- catch { /* `pwd -P` failed in the shell equivalent. */ }
965
- if (binDirectory && !servicePath.split(":").includes(binDirectory))
966
- servicePath = [binDirectory, servicePath].filter(Boolean).join(":");
967
- }
968
- return servicePath;
969
- }
970
- function systemdQuote(value) {
971
- return `"${value.replace(/%/g, "%%").replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t")}"`;
972
- }
973
- function serviceUnit(root, runner, id) {
974
- const pathValue = systemdQuote(`PATH=${servicePathValue()}`);
975
- return `# Generated by outpost-jobs-reconcile.sh — disposable derived state. Do not edit.\n[Unit]\nDescription=HQ Outpost scheduled job: ${id}\nDocumentation=file://${root}/core/knowledge/public/hq-core/outpost-jobs-spec.md\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=oneshot\nEnvironment=HQ_ROOT=${root}\nEnvironment=${pathValue}\nExecStart=${runner} --hq-root ${root} --job-id ${id}\nNice=10\n\n[Install]\nWantedBy=default.target\n`;
976
- }
977
- function timerUnit(id, onCalendar, randomize, root) {
978
- return `# Generated by outpost-jobs-reconcile.sh — disposable derived state. Do not edit.\n[Unit]\nDescription=HQ Outpost scheduled job timer: ${id}\nDocumentation=file://${root}/core/knowledge/public/hq-core/outpost-jobs-spec.md\n\n[Timer]\nOnCalendar=${onCalendar}\nPersistent=true\nRandomizedDelaySec=${randomize}\nUnit=hq-job-${id}.service\n\n[Install]\nWantedBy=timers.target\n`;
979
- }
980
- function systemctlResult(args, dryRun, command, options) {
981
- if (dryRun) {
982
- process.stderr.write(`outpost-jobs-reconcile: dry-run systemctl --user ${args.join(" ")}\n`);
983
- return { status: 0, stdout: "", stderr: "" };
984
- }
985
- if (command === ":" || command === "true")
986
- return { status: 0, stdout: "", stderr: "" };
987
- if (!options.schedulerRunner && !findExecutable(command, process.env.PATH ?? "")) {
988
- process.stderr.write(`outpost-jobs-reconcile: systemctl not available — units written but not enabled (${args.join(" ")})\n`);
989
- return { status: 0, stdout: "", stderr: "" };
990
- }
991
- if (process.env.HQ_JOB_TEST_SCHEDULER_STUB === "1" && !options.schedulerRunner) {
992
- return { status: 127, stdout: "", stderr: "scheduler stub was requested but no injected runner was supplied" };
993
- }
994
- try {
995
- const runner = options.schedulerRunner ?? commandResult;
996
- return runner(command, ["--user", ...args]);
997
- }
998
- catch (error) {
999
- return { status: 127, stdout: "", stderr: error instanceof Error ? error.message : String(error) };
1000
- }
1001
- }
1002
- function installSyncHook(root) {
1003
- const directory = path.join(root, "personal", "hooks", "Stop");
1004
- const filename = path.join(directory, "90-outpost-jobs-reconcile.sh");
1005
- fs.mkdirSync(directory, { recursive: true });
1006
- const contents = [
1007
- "#!/usr/bin/env bash",
1008
- "# Auto-installed by outpost-jobs-reconcile.sh --ensure-hook (US-004).",
1009
- "# hq-sync-runner executes personal/hooks/Stop/* after each sync cycle.",
1010
- "set -u",
1011
- 'HQ_ROOT="${OUTPOST_HQ_ROOT:-${HQ_ROOT:-/home/ec2-user/hq}}"',
1012
- 'RECONCILE="$HQ_ROOT/core/scripts/outpost-jobs-reconcile.sh"',
1013
- 'if [ -x "$RECONCILE" ] || [ -f "$RECONCILE" ]; then',
1014
- ' bash "$RECONCILE" --hq-root "$HQ_ROOT" --after-sync >>"${HOME}/.hq/jobs/reconcile/after-sync.log" 2>&1 || true',
1015
- "fi",
1016
- "",
1017
- ].join("\n");
1018
- fs.writeFileSync(filename, contents);
1019
- fs.chmodSync(filename, 0o755);
1020
- process.stderr.write(`outpost-jobs-reconcile: installed sync Stop hook: ${filename}\n`);
1021
- }
1022
- function disableRemoveUnits(id, unitDir, command, dryRun, options) {
1023
- for (const args of [["disable", "--now", `hq-job-${id}.timer`], ["stop", `hq-job-${id}.service`]]) {
1024
- const result = systemctlResult(args, dryRun, command, options);
1025
- if (result.stdout)
1026
- process.stdout.write(result.stdout);
1027
- }
1028
- fs.rmSync(path.join(unitDir, `hq-job-${id}.service`), { force: true });
1029
- fs.rmSync(path.join(unitDir, `hq-job-${id}.timer`), { force: true });
1030
- }
1031
- function jobEnabled(job) {
1032
- return job.enabled === undefined ? "true" : shellText(job.enabled);
1033
- }
1034
- function isCompanyJobPath(file) {
1035
- return file.split(path.sep).join("/").includes("/companies/");
1036
- }
1037
- function reconcileDie(message) {
1038
- process.stderr.write(`outpost-jobs-reconcile: ${message}\n`);
1039
- return 2;
1040
- }
1041
- export async function runReconcile(argv, rootArg, options = {}) {
1042
- let root = rootArg ?? process.env.HQ_ROOT ?? "";
1043
- let dryRun = false;
1044
- let noProbe = false;
1045
- let probeOnly = false;
1046
- let ensureHook = false;
1047
- const args = [...argv];
1048
- for (let index = 0; index < args.length;) {
1049
- const arg = args[index];
1050
- if (arg === "--hq-root") {
1051
- const value = args[index + 1] ?? "";
1052
- if (!value)
1053
- return reconcileDie("--hq-root requires a directory");
1054
- root = value;
1055
- index += 2;
1056
- }
1057
- else if (arg === "--dry-run") {
1058
- dryRun = true;
1059
- index += 1;
1060
- }
1061
- else if (arg === "--no-probe") {
1062
- noProbe = true;
1063
- index += 1;
1064
- }
1065
- else if (arg === "--probe-only") {
1066
- probeOnly = true;
1067
- index += 1;
1068
- }
1069
- else if (arg === "--ensure-hook") {
1070
- ensureHook = true;
1071
- index += 1;
1072
- }
1073
- else if (arg === "--after-sync") {
1074
- index += 1;
1075
- }
1076
- else if (arg === "-h" || arg === "--help") {
1077
- process.stdout.write(`${RECONCILE_USAGE}\n`);
1078
- return 0;
1079
- }
1080
- else if (arg?.startsWith("-")) {
1081
- return reconcileDie(`unknown option: ${arg}`);
1082
- }
1083
- else if (arg !== undefined) {
1084
- return reconcileDie(`unexpected argument: ${arg}`);
1085
- }
1086
- }
1087
- if (!root)
1088
- root = resolveLiveRoot();
1089
- const validator = path.join(root, "core", "scripts", "jobs-validate.sh");
1090
- const runner = path.join(root, "core", "scripts", "hq-job-run.sh");
1091
- const probe = path.join(root, "core", "scripts", "hq-job-probe.sh");
1092
- if (!fs.existsSync(validator))
1093
- return reconcileDie("missing jobs-validate.sh");
1094
- if (!fs.existsSync(runner))
1095
- return reconcileDie("missing hq-job-run.sh");
1096
- if (!fs.existsSync(probe))
1097
- return reconcileDie("missing hq-job-probe.sh");
1098
- const home = process.env.HOME ?? "";
1099
- const unitDir = process.env.HQ_JOB_UNIT_DIR || path.join(home, ".config", "systemd", "user");
1100
- const cacheDir = process.env.HQ_JOB_STATUS_CACHE_DIR || path.join(home, ".hq", "jobs", "status-cache");
1101
- const stateDir = process.env.HQ_JOB_RECONCILE_STATE || path.join(home, ".hq", "jobs", "reconcile");
1102
- const systemctl = process.env.HQ_JOB_SYSTEMCTL || "systemctl";
1103
- const randomize = process.env.HQ_JOB_RANDOMIZE_SEC || "60";
1104
- for (const directory of [unitDir, cacheDir, stateDir])
1105
- fs.mkdirSync(directory, { recursive: true });
1106
- const log = (message) => {
1107
- process.stderr.write(`outpost-jobs-reconcile: ${message}\n`);
1108
- };
1109
- const commandRunner = options.commandRunner ?? commandResult;
1110
- const owners = resolveBoxOwners(options);
1111
- let errors = 0;
1112
- let armed = 0;
1113
- let skipped = 0;
1114
- let removed = 0;
1115
- let probed = 0;
1116
- const desired = new Set();
1117
- if (ensureHook)
1118
- installSyncHook(root);
1119
- if (!noProbe) {
1120
- for (const file of collectReconcileJobs(root)) {
1121
- if (!reconcileJobIsValid(file))
1122
- continue;
1123
- const job = readJobValue(file);
1124
- const id = shellText(job.id);
1125
- if (!id)
1126
- continue;
1127
- if (isCompanyJobPath(file) && !ownerMatches(shellText(job.owner), owners))
1128
- continue;
1129
- const readiness = await jobReadiness(id, cacheDir, home, options);
1130
- if (readiness === "ready")
1131
- continue;
1132
- log(`probe ${id} (cached readiness=${readiness})`);
1133
- const result = commandRunner("bash", [probe, "--hq-root", root, file]);
1134
- probed += 1;
1135
- const probeReadiness = probeValue(result.stdout, "readiness");
1136
- if (probeReadiness) {
1137
- const ingest = probeValue(result.stdout, "ingest");
1138
- if (ingest === "ok" || ingest === "dry_run")
1139
- writeReadinessCache(cacheDir, id, probeReadiness, "probe", options);
1140
- else if (probeReadiness === "blocked")
1141
- writeReadinessCache(cacheDir, id, "blocked", "probe-local", options);
1142
- }
1143
- if (result.status >= 2 && result.status !== 3)
1144
- errors += 1;
1145
- }
1146
- }
1147
- if (probeOnly) {
1148
- log(`probe-only done (probed=${probed} errors=${errors})`);
1149
- return errors === 0 ? 0 : 1;
1150
- }
1151
- for (const file of collectReconcileJobs(root)) {
1152
- const job = readJobValue(file);
1153
- const idHint = shellText(job.id);
1154
- const timezone = shellText(job.timezone);
1155
- if (timezone && !/^[A-Za-z0-9/_+-]+$/.test(timezone)) {
1156
- log(`skip ${idHint || "unknown"} — invalid timezone contains unsafe characters`);
1157
- errors += 1;
1158
- continue;
1159
- }
1160
- if (!reconcileJobIsValid(file)) {
1161
- log(`skip invalid job YAML: ${file}`);
1162
- errors += 1;
1163
- continue;
1164
- }
1165
- const id = idHint;
1166
- const name = shellText(job.name);
1167
- const owner = shellText(job.owner);
1168
- const schedule = shellText(job.schedule);
1169
- const companyJob = isCompanyJobPath(file);
1170
- const timerPath = path.join(unitDir, `hq-job-${id}.timer`);
1171
- const servicePath = path.join(unitDir, `hq-job-${id}.service`);
1172
- if (companyJob && !ownerMatches(owner, owners)) {
1173
- log(`skip company job ${id} — owner '${owner}' does not match this Outpost`);
1174
- skipped += 1;
1175
- if (fs.existsSync(timerPath)) {
1176
- disableRemoveUnits(id, unitDir, systemctl, dryRun, options);
1177
- removed += 1;
1178
- }
1179
- continue;
1180
- }
1181
- const enabled = jobEnabled(job);
1182
- if (enabled === "false" || enabled === "False" || enabled === "0") {
1183
- log(`remove units for disabled job ${id}`);
1184
- if (fs.existsSync(timerPath) || fs.existsSync(servicePath)) {
1185
- disableRemoveUnits(id, unitDir, systemctl, dryRun, options);
1186
- removed += 1;
1187
- }
1188
- continue;
1189
- }
1190
- const readiness = await jobReadiness(id, cacheDir, home, options);
1191
- if (readiness !== "ready") {
1192
- log(`skip arming ${id} — readiness=${readiness} (need ready)`);
1193
- skipped += 1;
1194
- if (fs.existsSync(timerPath)) {
1195
- disableRemoveUnits(id, unitDir, systemctl, dryRun, options);
1196
- removed += 1;
1197
- log(`stopped timer for non-ready job ${id}`);
1198
- }
1199
- continue;
1200
- }
1201
- const cron = schedule.trim().split(/\s+/);
1202
- if (cron.length !== 5) {
1203
- log(`skip ${id} — schedule not 5-field cron: ${schedule}`);
1204
- errors += 1;
1205
- continue;
1206
- }
1207
- let onCalendar = cronToOnCalendar(cron);
1208
- if (timezone && !` ${onCalendar} `.includes(` ${timezone} `))
1209
- onCalendar = `${onCalendar} ${timezone}`;
1210
- desired.add(id);
1211
- const service = serviceUnit(root, runner, id);
1212
- const timer = timerUnit(id, onCalendar, randomize, root);
1213
- const unchanged = fs.existsSync(servicePath) && fs.existsSync(timerPath)
1214
- && fs.readFileSync(servicePath, "utf8") === service
1215
- && fs.readFileSync(timerPath, "utf8") === timer;
1216
- if (unchanged) {
1217
- log(`noop ${id} — units unchanged (${name})`);
1218
- const reload = systemctlResult(["daemon-reload"], dryRun, systemctl, options);
1219
- if (reload.stdout)
1220
- process.stdout.write(reload.stdout);
1221
- if (reload.stderr)
1222
- process.stderr.write(reload.stderr);
1223
- const enabledResult = systemctlResult(["enable", "--now", `hq-job-${id}.timer`], dryRun, systemctl, options);
1224
- const output = `${enabledResult.stdout}${enabledResult.stderr}`.replace(/\n+$/, "");
1225
- if (enabledResult.status !== 0) {
1226
- log(`systemctl enable timer failed for job ${id} exit=${enabledResult.status}: ${output || "no error message"}`);
1227
- skipped += 1;
1228
- errors += 1;
1229
- }
1230
- else {
1231
- if (output)
1232
- process.stderr.write(`${output}\n`);
1233
- armed += 1;
1234
- }
1235
- continue;
1236
- }
1237
- fs.writeFileSync(servicePath, service);
1238
- fs.writeFileSync(timerPath, timer);
1239
- const reload = systemctlResult(["daemon-reload"], dryRun, systemctl, options);
1240
- if (reload.stdout)
1241
- process.stdout.write(reload.stdout);
1242
- if (reload.stderr)
1243
- process.stderr.write(reload.stderr);
1244
- const enabledResult = systemctlResult(["enable", "--now", `hq-job-${id}.timer`], dryRun, systemctl, options);
1245
- const output = `${enabledResult.stdout}${enabledResult.stderr}`.replace(/\n+$/, "");
1246
- if (enabledResult.status === 0) {
1247
- if (output)
1248
- process.stderr.write(`${output}\n`);
1249
- if (!dryRun)
1250
- log(`armed ${id} OnCalendar=${onCalendar} readiness=ready`);
1251
- armed += 1;
1252
- }
1253
- else {
1254
- log(`systemctl enable timer failed for job ${id} exit=${enabledResult.status}: ${output || "no error message"}`);
1255
- skipped += 1;
1256
- errors += 1;
1257
- }
1258
- }
1259
- let unitNames = [];
1260
- try {
1261
- unitNames = fs.readdirSync(unitDir);
1262
- }
1263
- catch { /* The shell's unmatched glob is ignored. */ }
1264
- for (const unitName of unitNames) {
1265
- const match = /^hq-job-(.+)\.timer$/.exec(unitName);
1266
- if (!match)
1267
- continue;
1268
- const id = match[1];
1269
- if (desired.has(id))
1270
- continue;
1271
- log(`remove orphaned units for deleted/unarmed job ${id}`);
1272
- disableRemoveUnits(id, unitDir, systemctl, dryRun, options);
1273
- removed += 1;
1274
- }
1275
- const timestamp = (options.now?.() ?? new Date()).toISOString().replace(/\.\d{3}Z$/, "Z");
1276
- fs.writeFileSync(path.join(stateDir, "last-reconcile.json"), serializeJqJson({
1277
- armed, skipped, removed, probed, errors, dry_run: dryRun, at: timestamp,
1278
- }, "compact"));
1279
- log(`done armed=${armed} skipped=${skipped} removed=${removed} probed=${probed} errors=${errors}`);
1280
- return errors === 0 ? 0 : 1;
1281
- }
1282
- export function registerCoreJobsNativeCommand(core) {
1283
- const jobs = core.command("jobs").description("Scheduled jobs helpers");
1284
- const register = (name, asset, summary, run) => {
1285
- const command = jobs.command(name)
1286
- .description(summary)
1287
- .helpOption(false)
1288
- .allowUnknownOption()
1289
- .allowExcessArguments(true)
1290
- .argument("[args...]", "Arguments passed to the scaffold helper")
1291
- .action(async (args, _options, current) => {
1292
- const argv = rawArgumentsForCommand(current, args);
1293
- const groupHqRoot = core.opts().hqRoot;
1294
- const { coreNativeJobsEnabled } = await import("./core-native-jobs-flag.js");
1295
- if (!await coreNativeJobsEnabled()) {
1296
- const hqRoot = asset === RECONCILE_ASSET && !argv.includes("--hq-root")
1297
- && !argv.includes("--help") && !argv.includes("-h")
1298
- ? resolveLiveRoot({ hqRoot: groupHqRoot })
1299
- : undefined;
1300
- const result = runBundledScript({ asset, args: argv, cwd: process.cwd(), ...(hqRoot ? { hqRoot } : {}) });
1301
- if (result.code !== 0)
1302
- process.exit(result.code);
1303
- return;
1304
- }
1305
- const result = await run(argv, groupHqRoot ?? process.env.HQ_ROOT);
1306
- if (result !== 0)
1307
- process.exit(result);
1308
- });
1309
- describeCoreCommand(command, { execution: "native", asset, root: "live" });
1310
- };
1311
- register("schedule-parse", SCHEDULE_PARSE_ASSET, "Resolve natural-language or raw cron schedules", runScheduleParse);
1312
- register("validate", VALIDATE_ASSET, "Validate scheduled-job YAML files", validateJobs);
1313
- register("reconcile", RECONCILE_ASSET, "Materialize scheduled jobs on this outpost", runReconcile);
1314
- }
1315
- export function rawArgumentsForCommand(command, fallback, raw = process.argv) {
1316
- const names = [];
1317
- for (let current = command; current?.parent; current = current.parent) {
1318
- names.unshift(current.name());
1319
- }
1320
- let start = -1;
1321
- let cursor = 0;
1322
- for (const name of names) {
1323
- const index = raw.indexOf(name, cursor);
1324
- if (index < 0)
1325
- return command.args.length ? command.args : fallback;
1326
- cursor = index + 1;
1327
- start = cursor;
1328
- }
1329
- return start >= 0 ? raw.slice(start) : (command.args.length ? command.args : fallback);
1330
- }
1331
- /** Fast-entry adapter; the shared family flag is resolved before this module loads. */
1332
- export async function runJobsFast(args, _stdin, _cwd, _liveRoot, commandName, hqRootArg) {
1333
- if (commandName === "schedule-parse")
1334
- return runScheduleParse([...args]);
1335
- if (commandName === "validate")
1336
- return validateJobs([...args]);
1337
- return runReconcile([...args], hqRootArg ?? process.env.HQ_ROOT);
1338
- }
1339
- //# sourceMappingURL=core-jobs-native.js.map