@indigoai-us/hq-cli 5.313.0 → 5.314.0

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