@indigoai-us/hq-cli 5.314.0 → 5.315.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 (1178) hide show
  1. package/CHANGELOG.md +4311 -1
  2. package/README.md +113 -0
  3. package/assets/bot-workers/setup/context/USER-GUIDE.md +404 -0
  4. package/assets/bot-workers/setup/context/quick-reference.md +199 -0
  5. package/assets/bot-workers/setup/skills/agents-and-team.md +167 -0
  6. package/assets/bot-workers/setup/skills/explain-hq.md +35 -0
  7. package/assets/bot-workers/setup/skills/first-company.md +74 -0
  8. package/assets/bot-workers/setup/skills/joining-a-team.md +125 -0
  9. package/assets/bot-workers/setup/skills/pricing.md +92 -0
  10. package/assets/bot-workers/setup/skills/standing-help.md +81 -0
  11. package/assets/bot-workers/setup/skills/your-business.md +281 -0
  12. package/assets/bot-workers/setup/worker.yaml +791 -0
  13. package/assets/lanes-hooks/hq-lanes-drain.json +15 -0
  14. package/assets/lanes-hooks/hq-lanes-drain.mjs +275 -0
  15. package/assets/lanes-hooks/hq-lanes-drain.sh +21 -0
  16. package/assets/lanes-reconcile/hq-lanes-reconcile.service +11 -0
  17. package/assets/lanes-reconcile/hq-lanes-reconcile.timer +12 -0
  18. package/assets/scaffold/.claude/hooks/validate-policy-frontmatter.sh +485 -0
  19. package/assets/scaffold/core/scripts/audit-log.sh +384 -0
  20. package/assets/scaffold/core/scripts/checkpoint-stop-gate.sh +281 -43
  21. package/assets/scaffold/core/scripts/clean-worktree-reconcile-handoff.sh +171 -0
  22. package/assets/scaffold/core/scripts/eval-trigger.sh +193 -0
  23. package/assets/scaffold/core/scripts/git-pack-extension-check.sh +164 -0
  24. package/assets/scaffold/core/scripts/handoff-finalize.sh +688 -0
  25. package/assets/scaffold/core/scripts/handoff-open-steps.sh +81 -0
  26. package/assets/scaffold/core/scripts/handoff-post.sh +252 -0
  27. package/assets/scaffold/core/scripts/hook-lib.sh +345 -50
  28. package/assets/scaffold/core/scripts/hq-delegate-bundle.sh +307 -0
  29. package/assets/scaffold/core/scripts/hq-delegate-grant.sh +252 -0
  30. package/assets/scaffold/core/scripts/hq-delegate-pickup.sh +99 -0
  31. package/assets/scaffold/core/scripts/hq-delegate-publish.sh +91 -0
  32. package/assets/scaffold/core/scripts/hq-delegate-repo.sh +158 -0
  33. package/assets/scaffold/core/scripts/hq-delegate-resolve.sh +145 -0
  34. package/assets/scaffold/core/scripts/hq-delegate-secrets.sh +129 -0
  35. package/assets/scaffold/core/scripts/hq-delegate-send.sh +259 -0
  36. package/assets/scaffold/core/scripts/hq-delegate-transfer.sh +175 -0
  37. package/assets/scaffold/core/scripts/hq-delegate-verify.sh +238 -0
  38. package/assets/scaffold/core/scripts/hq-dm-bind.sh +585 -0
  39. package/assets/scaffold/core/scripts/hq-job-notify.sh +389 -0
  40. package/assets/scaffold/core/scripts/hq-job-probe.sh +835 -0
  41. package/assets/scaffold/core/scripts/hq-job-remediate.sh +359 -0
  42. package/assets/scaffold/core/scripts/hq-job-run.sh +1025 -0
  43. package/assets/scaffold/core/scripts/hq-pin.sh +118 -0
  44. package/assets/scaffold/core/scripts/hq-session.sh +184 -23
  45. package/assets/scaffold/core/scripts/jobs-schedule-parse.sh +310 -0
  46. package/assets/scaffold/core/scripts/jobs-validate.sh +451 -0
  47. package/assets/scaffold/core/scripts/knowledge-prefs.sh +55 -0
  48. package/assets/scaffold/core/scripts/lib/portable.sh +211 -0
  49. package/assets/scaffold/core/scripts/lib/secret-patterns.sh +58 -0
  50. package/assets/scaffold/core/scripts/lib/session-id.sh +3 -2
  51. package/assets/scaffold/core/scripts/lib/session-scope-capability.sh +1 -1
  52. package/assets/scaffold/core/scripts/lib/work-mesh-enqueue.sh +2 -1
  53. package/assets/scaffold/core/scripts/lib/work-mesh-live-hook.sh +378 -0
  54. package/assets/scaffold/core/scripts/lib/work-mesh-live-rebind.sh +141 -0
  55. package/assets/scaffold/core/scripts/migrate-policy-triggers.sh +378 -0
  56. package/assets/scaffold/core/scripts/ontology-audience-grant.sh +81 -0
  57. package/assets/scaffold/core/scripts/ontology-brief.mjs +93 -0
  58. package/assets/scaffold/core/scripts/ontology-candidate.sh +100 -0
  59. package/assets/scaffold/core/scripts/ontology-garden.mjs +238 -0
  60. package/assets/scaffold/core/scripts/ontology-source-worklist.sh +79 -0
  61. package/assets/scaffold/core/scripts/outpost-jobs-reconcile.sh +834 -0
  62. package/assets/scaffold/core/scripts/policy-age-report.sh +156 -0
  63. package/assets/scaffold/core/scripts/policy-retire.sh +199 -0
  64. package/assets/scaffold/core/scripts/qmd-reindex-after-sync.sh +10 -87
  65. package/assets/scaffold/core/scripts/qmd-reindex-bg.sh +40 -0
  66. package/assets/scaffold/core/scripts/read-policy-frontmatter.sh +32 -0
  67. package/assets/scaffold/core/scripts/rebuild-company-knowledge-index.sh +36 -3
  68. package/assets/scaffold/core/scripts/rebuild-projects-index.sh +99 -12
  69. package/assets/scaffold/core/scripts/refresh-vault-access.sh +188 -0
  70. package/assets/scaffold/core/scripts/register-project.sh +262 -0
  71. package/assets/scaffold/core/scripts/resolve-company.sh +199 -0
  72. package/assets/scaffold/core/scripts/resume-thread-lock.sh +285 -0
  73. package/assets/scaffold/core/scripts/source-yaml-validate.sh +36 -0
  74. package/assets/scaffold/core/scripts/token-usage-report.sh +81 -20
  75. package/assets/scaffold/core/scripts/verify-story-deliverables.sh +148 -0
  76. package/assets/scaffold/core/scripts/work-mesh-live-bind-trusted.sh +152 -0
  77. package/assets/scaffold/core/scripts/work-mesh-live-rebind.sh +59 -0
  78. package/assets/scaffold/core/scripts/worktree-gc.sh +362 -0
  79. package/contracts/preflight/v1/fixtures.json +87 -0
  80. package/contracts/preflight/v1/schema.json +58 -0
  81. package/dist/bin/hq-auth-refresh.d.ts +2 -0
  82. package/dist/bin/hq-auth-refresh.js +12 -6
  83. package/dist/command-catalog.generated.d.ts +10753 -0
  84. package/dist/command-catalog.generated.js +13859 -0
  85. package/dist/command-registration-plan.d.ts +474 -0
  86. package/dist/command-registration-plan.js +136 -0
  87. package/dist/commands/__fixtures__/access-vault.d.ts +2 -0
  88. package/dist/commands/__fixtures__/access-vault.js +1 -1
  89. package/dist/commands/_patterns.d.ts +16 -0
  90. package/dist/commands/_patterns.js +20 -3
  91. package/dist/commands/access.d.ts +2 -1
  92. package/dist/commands/access.js +58 -49
  93. package/dist/commands/agent-enroll.d.ts +146 -0
  94. package/dist/commands/agent-enroll.js +401 -0
  95. package/dist/commands/agent-inbox.d.ts +9 -0
  96. package/dist/commands/agent-inbox.js +102 -0
  97. package/dist/commands/agent-kit.d.ts +87 -0
  98. package/dist/commands/agent-kit.js +480 -0
  99. package/dist/commands/agent-mcp.d.ts +24 -0
  100. package/dist/commands/agent-mcp.js +127 -0
  101. package/dist/commands/agent-probe.d.ts +77 -0
  102. package/dist/commands/agent-probe.js +335 -0
  103. package/dist/commands/agent.d.ts +13 -0
  104. package/dist/commands/agent.js +40 -0
  105. package/dist/commands/agents.d.ts +106 -4
  106. package/dist/commands/agents.js +924 -45
  107. package/dist/commands/auth.d.ts +1 -0
  108. package/dist/commands/auth.js +189 -19
  109. package/dist/commands/billing-sponsor.d.ts +83 -0
  110. package/dist/commands/billing-sponsor.js +344 -0
  111. package/dist/commands/billing.d.ts +3 -0
  112. package/dist/commands/billing.js +6 -1
  113. package/dist/commands/bot-companies.d.ts +40 -0
  114. package/dist/commands/bot-companies.js +64 -0
  115. package/dist/commands/bot-continuity.d.ts +28 -0
  116. package/dist/commands/bot-continuity.js +68 -0
  117. package/dist/commands/bot-jobs.d.ts +127 -0
  118. package/dist/commands/bot-jobs.js +454 -0
  119. package/dist/commands/bot.d.ts +278 -0
  120. package/dist/commands/bot.js +1982 -0
  121. package/dist/commands/channels.js +56 -1
  122. package/dist/commands/cloud-demote.js +3 -2
  123. package/dist/commands/cloud-provision.d.ts +14 -0
  124. package/dist/commands/cloud-provision.js +232 -58
  125. package/dist/commands/cloud-retire.d.ts +51 -0
  126. package/dist/commands/cloud-retire.js +154 -0
  127. package/dist/commands/cloud.d.ts +49 -15
  128. package/dist/commands/cloud.js +357 -122
  129. package/dist/commands/company-rename-flag.d.ts +4 -0
  130. package/dist/commands/company-rename-flag.js +7 -0
  131. package/dist/commands/company-rename.d.ts +4 -0
  132. package/dist/commands/company-rename.js +90 -0
  133. package/dist/commands/company-transfer.d.ts +4 -28
  134. package/dist/commands/company-transfer.js +5 -49
  135. package/dist/commands/company.js +68 -3
  136. package/dist/commands/core-audit-log-native.d.ts +9 -0
  137. package/dist/commands/core-audit-log-native.js +257 -0
  138. package/dist/commands/core-checkpoint-gate-setting.d.ts +59 -0
  139. package/dist/commands/core-checkpoint-gate-setting.js +163 -0
  140. package/dist/commands/core-checkpoint-stop-gate-native.d.ts +34 -0
  141. package/dist/commands/core-checkpoint-stop-gate-native.js +725 -0
  142. package/dist/commands/core-checkpoint.d.ts +19 -9
  143. package/dist/commands/core-checkpoint.js +301 -37
  144. package/dist/commands/core-command-catalog.d.ts +34 -0
  145. package/dist/commands/core-command-catalog.js +62 -0
  146. package/dist/commands/core-company-index-scope-flag.d.ts +3 -0
  147. package/dist/commands/core-company-index-scope-flag.js +6 -0
  148. package/dist/commands/core-delegate-w1b.d.ts +10 -0
  149. package/dist/commands/core-delegate-w1b.js +1219 -0
  150. package/dist/commands/core-delegate.d.ts +46 -0
  151. package/dist/commands/core-delegate.js +1040 -0
  152. package/dist/commands/core-dm-bind-native.d.ts +32 -0
  153. package/dist/commands/core-dm-bind-native.js +668 -0
  154. package/dist/commands/core-eval-trigger-native.d.ts +4 -0
  155. package/dist/commands/core-eval-trigger-native.js +12 -0
  156. package/dist/commands/core-git-pack-extension-check-native.d.ts +22 -0
  157. package/dist/commands/core-git-pack-extension-check-native.js +190 -0
  158. package/dist/commands/core-handoff-fast.d.ts +18 -0
  159. package/dist/commands/core-handoff-fast.js +104 -0
  160. package/dist/commands/core-handoff-open-steps.d.ts +21 -0
  161. package/dist/commands/core-handoff-open-steps.js +264 -0
  162. package/dist/commands/core-handoff.d.ts +24 -0
  163. package/dist/commands/core-handoff.js +1144 -0
  164. package/dist/commands/core-hq-session-native.d.ts +39 -0
  165. package/dist/commands/core-hq-session-native.js +579 -0
  166. package/dist/commands/core-job-native-utils.d.ts +6 -0
  167. package/dist/commands/core-job-native-utils.js +80 -0
  168. package/dist/commands/core-job-native.d.ts +5 -0
  169. package/dist/commands/core-job-native.js +16 -0
  170. package/dist/commands/core-job-notify-native.d.ts +36 -0
  171. package/dist/commands/core-job-notify-native.js +359 -0
  172. package/dist/commands/core-job-probe-native.d.ts +45 -0
  173. package/dist/commands/core-job-probe-native.js +564 -0
  174. package/dist/commands/core-job-remediate-native.d.ts +26 -0
  175. package/dist/commands/core-job-remediate-native.js +374 -0
  176. package/dist/commands/core-job-remote-launcher.d.ts +7 -0
  177. package/dist/commands/core-job-remote-launcher.js +51 -0
  178. package/dist/commands/core-job-run-native.d.ts +47 -0
  179. package/dist/commands/core-job-run-native.js +1215 -0
  180. package/dist/commands/core-jobs-native.d.ts +25 -0
  181. package/dist/commands/core-jobs-native.js +1339 -0
  182. package/dist/commands/core-knowledge-prefs.d.ts +11 -0
  183. package/dist/commands/core-knowledge-prefs.js +137 -0
  184. package/dist/commands/core-migrate-policy-triggers-native.d.ts +21 -0
  185. package/dist/commands/core-migrate-policy-triggers-native.js +374 -0
  186. package/dist/commands/core-native-handoff-flag.d.ts +4 -0
  187. package/dist/commands/core-native-handoff-flag.js +7 -0
  188. package/dist/commands/core-native-hook-helper-commands.d.ts +4 -0
  189. package/dist/commands/core-native-hook-helper-commands.js +56 -0
  190. package/dist/commands/core-native-hook-helpers-flag.d.ts +4 -0
  191. package/dist/commands/core-native-hook-helpers-flag.js +7 -0
  192. package/dist/commands/core-native-jobs-flag.d.ts +4 -0
  193. package/dist/commands/core-native-jobs-flag.js +7 -0
  194. package/dist/commands/core-native-policy-flag.d.ts +9 -0
  195. package/dist/commands/core-native-policy-flag.js +12 -0
  196. package/dist/commands/core-native-session-flag.d.ts +4 -0
  197. package/dist/commands/core-native-session-flag.js +7 -0
  198. package/dist/commands/core-native-utilities-flag.d.ts +4 -0
  199. package/dist/commands/core-native-utilities-flag.js +7 -0
  200. package/dist/commands/core-native-utilities.d.ts +29 -0
  201. package/dist/commands/core-native-utilities.js +54 -0
  202. package/dist/commands/core-native-worker-skills-flag.d.ts +4 -0
  203. package/dist/commands/core-native-worker-skills-flag.js +7 -0
  204. package/dist/commands/core-ontology-native.d.ts +17 -0
  205. package/dist/commands/core-ontology-native.js +916 -0
  206. package/dist/commands/core-ontology.d.ts +66 -0
  207. package/dist/commands/core-ontology.js +430 -0
  208. package/dist/commands/core-pin-native.d.ts +14 -0
  209. package/dist/commands/core-pin-native.js +236 -0
  210. package/dist/commands/core-policy-frontmatter.d.ts +8 -0
  211. package/dist/commands/core-policy-frontmatter.js +52 -0
  212. package/dist/commands/core-policy.d.ts +14 -0
  213. package/dist/commands/core-policy.js +1018 -0
  214. package/dist/commands/core-refresh-vault-access-native.d.ts +20 -0
  215. package/dist/commands/core-refresh-vault-access-native.js +229 -0
  216. package/dist/commands/core-register-project-native.d.ts +30 -0
  217. package/dist/commands/core-register-project-native.js +347 -0
  218. package/dist/commands/core-resolve-company-command.d.ts +4 -0
  219. package/dist/commands/core-resolve-company-command.js +42 -0
  220. package/dist/commands/core-resolve-company-native.d.ts +28 -0
  221. package/dist/commands/core-resolve-company-native.js +408 -0
  222. package/dist/commands/core-work-mesh-bind-trusted-native.d.ts +32 -0
  223. package/dist/commands/core-work-mesh-bind-trusted-native.js +190 -0
  224. package/dist/commands/core-work-mesh-live-rebind-native.d.ts +18 -0
  225. package/dist/commands/core-work-mesh-live-rebind-native.js +262 -0
  226. package/dist/commands/core-worker-lint-native.d.ts +4 -0
  227. package/dist/commands/core-worker-lint-native.js +160 -0
  228. package/dist/commands/core-worker-share-native.d.ts +4 -0
  229. package/dist/commands/core-worker-share-native.js +260 -0
  230. package/dist/commands/core-worker-skills-command.d.ts +8 -0
  231. package/dist/commands/core-worker-skills-command.js +33 -0
  232. package/dist/commands/core-worker-skills-runtime.d.ts +33 -0
  233. package/dist/commands/core-worker-skills-runtime.js +86 -0
  234. package/dist/commands/core.d.ts +4 -0
  235. package/dist/commands/core.js +277 -80
  236. package/dist/commands/crm.js +52 -3
  237. package/dist/commands/daemon.d.ts +63 -0
  238. package/dist/commands/daemon.js +877 -0
  239. package/dist/commands/db-provision.js +4 -4
  240. package/dist/commands/db-sql.js +7 -21
  241. package/dist/commands/deploy-comments.d.ts +3 -0
  242. package/dist/commands/deploy-comments.js +162 -0
  243. package/dist/commands/dm.d.ts +119 -12
  244. package/dist/commands/dm.js +388 -38
  245. package/dist/commands/doctor.d.ts +12 -0
  246. package/dist/commands/doctor.js +158 -12
  247. package/dist/commands/feedback.d.ts +6 -0
  248. package/dist/commands/feedback.js +86 -37
  249. package/dist/commands/files-browse.d.ts +32 -12
  250. package/dist/commands/files-browse.js +176 -60
  251. package/dist/commands/files.d.ts +17 -0
  252. package/dist/commands/files.js +300 -47
  253. package/dist/commands/group-grants.js +3 -2
  254. package/dist/commands/groups.js +6 -5
  255. package/dist/commands/index-cmd.d.ts +19 -1
  256. package/dist/commands/index-cmd.js +74 -7
  257. package/dist/commands/integrations-api.d.ts +15 -10
  258. package/dist/commands/integrations-api.js +27 -22
  259. package/dist/commands/integrations-connect.d.ts +51 -13
  260. package/dist/commands/integrations-connect.js +86 -71
  261. package/dist/commands/integrations-core.d.ts +6 -6
  262. package/dist/commands/integrations-core.js +25 -11
  263. package/dist/commands/integrations-import.d.ts +1 -1
  264. package/dist/commands/integrations-import.js +43 -24
  265. package/dist/commands/integrations-manage.js +20 -13
  266. package/dist/commands/integrations.d.ts +8 -0
  267. package/dist/commands/integrations.js +94 -7
  268. package/dist/commands/lanes-accounts.d.ts +28 -0
  269. package/dist/commands/lanes-accounts.js +595 -0
  270. package/dist/commands/lanes-autopilot.d.ts +11 -0
  271. package/dist/commands/lanes-autopilot.js +336 -0
  272. package/dist/commands/lanes-checks.d.ts +51 -0
  273. package/dist/commands/lanes-checks.js +941 -0
  274. package/dist/commands/lanes-hold.d.ts +43 -0
  275. package/dist/commands/lanes-hold.js +655 -0
  276. package/dist/commands/lanes-keep-alive-audit.d.ts +10 -0
  277. package/dist/commands/lanes-keep-alive-audit.js +19 -0
  278. package/dist/commands/lanes-kpis.d.ts +11 -0
  279. package/dist/commands/lanes-kpis.js +34 -0
  280. package/dist/commands/lanes-message.d.ts +9 -0
  281. package/dist/commands/lanes-message.js +946 -0
  282. package/dist/commands/lanes-move.d.ts +12 -0
  283. package/dist/commands/lanes-move.js +397 -0
  284. package/dist/commands/lanes-questions.d.ts +36 -0
  285. package/dist/commands/lanes-questions.js +1005 -0
  286. package/dist/commands/lanes-report.d.ts +11 -0
  287. package/dist/commands/lanes-report.js +333 -0
  288. package/dist/commands/lanes-resume.d.ts +6 -0
  289. package/dist/commands/lanes-resume.js +564 -0
  290. package/dist/commands/lanes-review.d.ts +10 -0
  291. package/dist/commands/lanes-review.js +56 -0
  292. package/dist/commands/lanes-shared.d.ts +449 -0
  293. package/dist/commands/lanes-shared.js +170 -0
  294. package/dist/commands/lanes-stories.d.ts +15 -0
  295. package/dist/commands/lanes-stories.js +347 -0
  296. package/dist/commands/lanes-watch.d.ts +7 -0
  297. package/dist/commands/lanes-watch.js +216 -0
  298. package/dist/commands/lanes.d.ts +149 -0
  299. package/dist/commands/lanes.js +8983 -0
  300. package/dist/commands/login.js +49 -6
  301. package/dist/commands/mcp-registration.d.ts +32 -25
  302. package/dist/commands/mcp-registration.js +256 -23
  303. package/dist/commands/mcp-status.js +1 -0
  304. package/dist/commands/meetings.js +55 -34
  305. package/dist/commands/members.js +5 -1
  306. package/dist/commands/mesh.d.ts +11 -0
  307. package/dist/commands/mesh.js +1086 -76
  308. package/dist/commands/monitor.d.ts +58 -0
  309. package/dist/commands/monitor.js +980 -0
  310. package/dist/commands/onboard-bot-membership.d.ts +32 -0
  311. package/dist/commands/onboard-bot-membership.js +40 -0
  312. package/dist/commands/onboard-create-identity.d.ts +26 -0
  313. package/dist/commands/onboard-create-identity.js +23 -0
  314. package/dist/commands/onboard-identity-guard.d.ts +1 -1
  315. package/dist/commands/onboard.js +24 -5
  316. package/dist/commands/outpost-pruner.d.ts +3 -0
  317. package/dist/commands/outpost-pruner.js +125 -0
  318. package/dist/commands/pack-install.js +3 -1
  319. package/dist/commands/packs.js +11 -1
  320. package/dist/commands/people.d.ts +4 -0
  321. package/dist/commands/people.js +37 -3
  322. package/dist/commands/personal-connector-settings-flag.d.ts +4 -0
  323. package/dist/commands/personal-connector-settings-flag.js +7 -0
  324. package/dist/commands/personal-targeted-push-flag.d.ts +4 -0
  325. package/dist/commands/personal-targeted-push-flag.js +7 -0
  326. package/dist/commands/personal-targeted-push-paths.d.ts +3 -0
  327. package/dist/commands/personal-targeted-push-paths.js +67 -0
  328. package/dist/commands/publish.d.ts +8 -1
  329. package/dist/commands/publish.js +17 -4
  330. package/dist/commands/reindex.js +56 -6
  331. package/dist/commands/report.d.ts +19 -0
  332. package/dist/commands/report.js +537 -0
  333. package/dist/commands/rescue.d.ts +4 -0
  334. package/dist/commands/rescue.js +27 -17
  335. package/dist/commands/run-feature-telemetry.d.ts +3 -0
  336. package/dist/commands/run-feature-telemetry.js +6 -0
  337. package/dist/commands/run.js +18 -4
  338. package/dist/commands/safe-extract.d.ts +11 -2
  339. package/dist/commands/safe-extract.js +36 -8
  340. package/dist/commands/secrets.d.ts +20 -2
  341. package/dist/commands/secrets.js +175 -71
  342. package/dist/commands/skill.d.ts +35 -4
  343. package/dist/commands/skill.js +357 -18
  344. package/dist/commands/staff/reset-test-account.d.ts +110 -0
  345. package/dist/commands/staff/reset-test-account.js +268 -0
  346. package/dist/commands/staff/test-account.d.ts +51 -0
  347. package/dist/commands/staff/test-account.js +196 -0
  348. package/dist/commands/sync-mode.d.ts +11 -0
  349. package/dist/commands/sync-mode.js +30 -0
  350. package/dist/commands/sync-narrow.js +36 -5
  351. package/dist/commands/team-sync.js +71 -10
  352. package/dist/commands/update.js +6 -0
  353. package/dist/commands/vault-retention-flag.d.ts +3 -0
  354. package/dist/commands/vault-retention-flag.js +9 -0
  355. package/dist/commands/vault-retention.d.ts +11 -0
  356. package/dist/commands/vault-retention.js +69 -0
  357. package/dist/commands/version.d.ts +10 -0
  358. package/dist/commands/version.js +11 -0
  359. package/dist/commands/whoami.d.ts +22 -0
  360. package/dist/commands/whoami.js +137 -4
  361. package/dist/commands/workers.d.ts +2 -14
  362. package/dist/commands/workers.js +7 -10
  363. package/dist/fast-core.d.ts +6 -7
  364. package/dist/fast-core.js +87 -24
  365. package/dist/fast-scaffold.d.ts +86 -0
  366. package/dist/fast-scaffold.js +364 -0
  367. package/dist/index.d.ts +3 -4
  368. package/dist/index.js +59 -9
  369. package/dist/lanes-drain-hook.d.ts +14 -0
  370. package/dist/lanes-drain-hook.js +203 -0
  371. package/dist/lazy-commands.d.ts +20 -44
  372. package/dist/lazy-commands.js +60 -58
  373. package/dist/lib/agent-kit/adopt-identity.d.ts +27 -0
  374. package/dist/lib/agent-kit/adopt-identity.js +60 -0
  375. package/dist/lib/agent-kit/attachment-download.d.ts +24 -0
  376. package/dist/lib/agent-kit/attachment-download.js +47 -0
  377. package/dist/lib/agent-kit/creds.d.ts +106 -0
  378. package/dist/lib/agent-kit/creds.js +163 -0
  379. package/dist/lib/agent-kit/fallback.d.ts +78 -0
  380. package/dist/lib/agent-kit/fallback.js +210 -0
  381. package/dist/lib/agent-kit/inbox-state.d.ts +83 -0
  382. package/dist/lib/agent-kit/inbox-state.js +159 -0
  383. package/dist/lib/agent-kit/kit-config.d.ts +56 -0
  384. package/dist/lib/agent-kit/kit-config.js +65 -0
  385. package/dist/lib/agent-kit/log.d.ts +16 -0
  386. package/dist/lib/agent-kit/log.js +46 -0
  387. package/dist/lib/agent-kit/mcp/attachments.d.ts +126 -0
  388. package/dist/lib/agent-kit/mcp/attachments.js +222 -0
  389. package/dist/lib/agent-kit/mcp/jsonrpc.d.ts +75 -0
  390. package/dist/lib/agent-kit/mcp/jsonrpc.js +164 -0
  391. package/dist/lib/agent-kit/mcp/tools.d.ts +64 -0
  392. package/dist/lib/agent-kit/mcp/tools.js +397 -0
  393. package/dist/lib/agent-kit/paths.d.ts +65 -0
  394. package/dist/lib/agent-kit/paths.js +118 -0
  395. package/dist/lib/agent-kit/private-file.d.ts +29 -0
  396. package/dist/lib/agent-kit/private-file.js +91 -0
  397. package/dist/lib/agent-kit/run/heartbeat.d.ts +72 -0
  398. package/dist/lib/agent-kit/run/heartbeat.js +128 -0
  399. package/dist/lib/agent-kit/run/inbox.d.ts +76 -0
  400. package/dist/lib/agent-kit/run/inbox.js +205 -0
  401. package/dist/lib/agent-kit/run/supervisor.d.ts +35 -0
  402. package/dist/lib/agent-kit/run/supervisor.js +85 -0
  403. package/dist/lib/agent-kit/run/sync.d.ts +33 -0
  404. package/dist/lib/agent-kit/run/sync.js +58 -0
  405. package/dist/lib/agent-kit/services.d.ts +31 -0
  406. package/dist/lib/agent-kit/services.js +55 -0
  407. package/dist/lib/agent-kit/skills.d.ts +18 -0
  408. package/dist/lib/agent-kit/skills.js +151 -0
  409. package/dist/lib/agent-kit/wake.d.ts +83 -0
  410. package/dist/lib/agent-kit/wake.js +243 -0
  411. package/dist/lib/agents/model-catalog.d.ts +62 -0
  412. package/dist/lib/agents/model-catalog.js +275 -0
  413. package/dist/lib/auth-login-provider-state.d.ts +8 -0
  414. package/dist/lib/auth-login-provider-state.js +63 -0
  415. package/dist/lib/aws-sdk-node-warning-output.d.ts +12 -0
  416. package/dist/lib/aws-sdk-node-warning-output.js +22 -0
  417. package/dist/lib/billing/free-month.d.ts +18 -0
  418. package/dist/lib/billing/free-month.js +31 -0
  419. package/dist/lib/billing/plan-limit-refusals.d.ts +69 -0
  420. package/dist/lib/billing/plan-limit-refusals.js +187 -0
  421. package/dist/lib/billing/plan-limit-upgrade-url.d.ts +11 -0
  422. package/dist/lib/billing/plan-limit-upgrade-url.js +66 -0
  423. package/dist/lib/billing/plan-lock.d.ts +143 -0
  424. package/dist/lib/billing/plan-lock.js +439 -0
  425. package/dist/lib/bot/api.d.ts +349 -0
  426. package/dist/lib/bot/api.js +316 -0
  427. package/dist/lib/bot/attachments.d.ts +45 -0
  428. package/dist/lib/bot/attachments.js +89 -0
  429. package/dist/lib/bot/cli-update.d.ts +138 -0
  430. package/dist/lib/bot/cli-update.js +278 -0
  431. package/dist/lib/bot/company-bind.d.ts +27 -0
  432. package/dist/lib/bot/company-bind.js +62 -0
  433. package/dist/lib/bot/config.d.ts +153 -0
  434. package/dist/lib/bot/config.js +233 -0
  435. package/dist/lib/bot/continuity-download.d.ts +28 -0
  436. package/dist/lib/bot/continuity-download.js +75 -0
  437. package/dist/lib/bot/continuity-install.d.ts +14 -0
  438. package/dist/lib/bot/continuity-install.js +101 -0
  439. package/dist/lib/bot/continuity.d.ts +67 -0
  440. package/dist/lib/bot/continuity.js +301 -0
  441. package/dist/lib/bot/creds.d.ts +24 -0
  442. package/dist/lib/bot/creds.js +51 -0
  443. package/dist/lib/bot/daemon.d.ts +173 -0
  444. package/dist/lib/bot/daemon.js +552 -0
  445. package/dist/lib/bot/inbox-poll-backoff-flag.d.ts +24 -0
  446. package/dist/lib/bot/inbox-poll-backoff-flag.js +135 -0
  447. package/dist/lib/bot/inbox-state.d.ts +18 -0
  448. package/dist/lib/bot/inbox-state.js +51 -0
  449. package/dist/lib/bot/index.d.ts +23 -0
  450. package/dist/lib/bot/index.js +23 -0
  451. package/dist/lib/bot/inflight.d.ts +119 -0
  452. package/dist/lib/bot/inflight.js +83 -0
  453. package/dist/lib/bot/job-completions.d.ts +89 -0
  454. package/dist/lib/bot/job-completions.js +132 -0
  455. package/dist/lib/bot/job-run.d.ts +109 -0
  456. package/dist/lib/bot/job-run.js +246 -0
  457. package/dist/lib/bot/local-config.d.ts +61 -0
  458. package/dist/lib/bot/local-config.js +145 -0
  459. package/dist/lib/bot/local-jobs.d.ts +89 -0
  460. package/dist/lib/bot/local-jobs.js +459 -0
  461. package/dist/lib/bot/local-name.d.ts +54 -0
  462. package/dist/lib/bot/local-name.js +114 -0
  463. package/dist/lib/bot/log.d.ts +13 -0
  464. package/dist/lib/bot/log.js +59 -0
  465. package/dist/lib/bot/owner-context.d.ts +79 -0
  466. package/dist/lib/bot/owner-context.js +175 -0
  467. package/dist/lib/bot/paths.d.ts +76 -0
  468. package/dist/lib/bot/paths.js +131 -0
  469. package/dist/lib/bot/progress.d.ts +132 -0
  470. package/dist/lib/bot/progress.js +289 -0
  471. package/dist/lib/bot/promote.d.ts +16 -0
  472. package/dist/lib/bot/promote.js +106 -0
  473. package/dist/lib/bot/promotion-hold.d.ts +24 -0
  474. package/dist/lib/bot/promotion-hold.js +103 -0
  475. package/dist/lib/bot/promotion-receipt.d.ts +9 -0
  476. package/dist/lib/bot/promotion-receipt.js +56 -0
  477. package/dist/lib/bot/promotion-upload.d.ts +16 -0
  478. package/dist/lib/bot/promotion-upload.js +80 -0
  479. package/dist/lib/bot/prompt.d.ts +136 -0
  480. package/dist/lib/bot/prompt.js +433 -0
  481. package/dist/lib/bot/room-policy.d.ts +63 -0
  482. package/dist/lib/bot/room-policy.js +91 -0
  483. package/dist/lib/bot/run.d.ts +217 -0
  484. package/dist/lib/bot/run.js +1869 -0
  485. package/dist/lib/bot/runnable.d.ts +51 -0
  486. package/dist/lib/bot/runnable.js +65 -0
  487. package/dist/lib/bot/runtime/claude.d.ts +50 -0
  488. package/dist/lib/bot/runtime/claude.js +170 -0
  489. package/dist/lib/bot/runtime/codex.d.ts +28 -0
  490. package/dist/lib/bot/runtime/codex.js +153 -0
  491. package/dist/lib/bot/runtime/grok-acp.d.ts +40 -0
  492. package/dist/lib/bot/runtime/grok-acp.js +265 -0
  493. package/dist/lib/bot/runtime/grok.d.ts +41 -0
  494. package/dist/lib/bot/runtime/grok.js +169 -0
  495. package/dist/lib/bot/runtime/index.d.ts +36 -0
  496. package/dist/lib/bot/runtime/index.js +417 -0
  497. package/dist/lib/bot/runtime/messages-stream.d.ts +56 -0
  498. package/dist/lib/bot/runtime/messages-stream.js +194 -0
  499. package/dist/lib/bot/runtime/sanitize.d.ts +18 -0
  500. package/dist/lib/bot/runtime/sanitize.js +28 -0
  501. package/dist/lib/bot/runtime/types.d.ts +159 -0
  502. package/dist/lib/bot/runtime/types.js +51 -0
  503. package/dist/lib/bot/runtime/windows.d.ts +10 -0
  504. package/dist/lib/bot/runtime/windows.js +53 -0
  505. package/dist/lib/bot/runtime-sign-in.d.ts +24 -0
  506. package/dist/lib/bot/runtime-sign-in.js +31 -0
  507. package/dist/lib/bot/scaffold.d.ts +38 -0
  508. package/dist/lib/bot/scaffold.js +94 -0
  509. package/dist/lib/bot/self-heal.d.ts +52 -0
  510. package/dist/lib/bot/self-heal.js +79 -0
  511. package/dist/lib/bot/self-process.d.ts +19 -0
  512. package/dist/lib/bot/self-process.js +35 -0
  513. package/dist/lib/bot/session.d.ts +19 -0
  514. package/dist/lib/bot/session.js +39 -0
  515. package/dist/lib/bot/setup-explain.d.ts +64 -0
  516. package/dist/lib/bot/setup-explain.js +141 -0
  517. package/dist/lib/bot/split.d.ts +32 -0
  518. package/dist/lib/bot/split.js +241 -0
  519. package/dist/lib/bot/status.d.ts +57 -0
  520. package/dist/lib/bot/status.js +66 -0
  521. package/dist/lib/bot/worker-source.d.ts +66 -0
  522. package/dist/lib/bot/worker-source.js +283 -0
  523. package/dist/lib/checkpoint-ontology/aliases.d.ts +17 -0
  524. package/dist/lib/checkpoint-ontology/aliases.js +44 -0
  525. package/dist/lib/checkpoint-ontology/apply.d.ts +110 -0
  526. package/dist/lib/checkpoint-ontology/apply.js +777 -0
  527. package/dist/lib/checkpoint-ontology/company-brief.d.ts +18 -0
  528. package/dist/lib/checkpoint-ontology/company-brief.js +337 -0
  529. package/dist/lib/checkpoint-ontology/company.d.ts +44 -0
  530. package/dist/lib/checkpoint-ontology/company.js +118 -0
  531. package/dist/lib/checkpoint-ontology/drop-aliases.d.ts +41 -0
  532. package/dist/lib/checkpoint-ontology/drop-aliases.js +76 -0
  533. package/dist/lib/checkpoint-ontology/entity-file.d.ts +109 -0
  534. package/dist/lib/checkpoint-ontology/entity-file.js +371 -0
  535. package/dist/lib/checkpoint-ontology/identity.d.ts +38 -0
  536. package/dist/lib/checkpoint-ontology/identity.js +95 -0
  537. package/dist/lib/checkpoint-ontology/merge-copies.d.ts +199 -0
  538. package/dist/lib/checkpoint-ontology/merge-copies.js +1086 -0
  539. package/dist/lib/checkpoint-ontology/multi-writer.d.ts +101 -0
  540. package/dist/lib/checkpoint-ontology/multi-writer.js +394 -0
  541. package/dist/lib/checkpoint-ontology/plan.d.ts +193 -0
  542. package/dist/lib/checkpoint-ontology/plan.js +504 -0
  543. package/dist/lib/checkpoint-ontology/queued-touches.d.ts +29 -0
  544. package/dist/lib/checkpoint-ontology/queued-touches.js +193 -0
  545. package/dist/lib/checkpoint-ontology/sync-client.d.ts +38 -0
  546. package/dist/lib/checkpoint-ontology/sync-client.js +84 -0
  547. package/dist/lib/checkpoint-ontology/tree.d.ts +55 -0
  548. package/dist/lib/checkpoint-ontology/tree.js +198 -0
  549. package/dist/lib/company-errors-sdk-warning-flag.d.ts +5 -0
  550. package/dist/lib/company-errors-sdk-warning-flag.js +8 -0
  551. package/dist/lib/company-skill-wrapper.d.ts +1 -0
  552. package/dist/lib/company-skill-wrapper.js +121 -29
  553. package/dist/lib/core-utils/codex-skill-bridge.d.ts +2 -1
  554. package/dist/lib/core-utils/hook-timeout-debug-context-flag.d.ts +20 -0
  555. package/dist/lib/core-utils/hook-timeout-debug-context-flag.js +81 -0
  556. package/dist/lib/core-utils/jq-json-serializer.d.ts +5 -0
  557. package/dist/lib/core-utils/jq-json-serializer.js +10 -0
  558. package/dist/lib/core-utils/qmd-reindex-after-sync.d.ts +14 -1
  559. package/dist/lib/core-utils/qmd-reindex-after-sync.js +101 -17
  560. package/dist/lib/core-utils/secret-patterns.d.ts +43 -0
  561. package/dist/lib/core-utils/secret-patterns.js +34 -0
  562. package/dist/lib/core-utils/sentry-report.d.ts +114 -0
  563. package/dist/lib/core-utils/sentry-report.js +1055 -0
  564. package/dist/lib/core-utils/soft-timeout.js +1 -1
  565. package/dist/lib/core-utils/timeout-guard-native.d.ts +7 -0
  566. package/dist/lib/core-utils/timeout-guard-native.js +40 -0
  567. package/dist/lib/core-utils/timeout-guard.d.ts +3 -3
  568. package/dist/lib/core-utils/timeout-guard.js +28 -13
  569. package/dist/lib/core-utils/token-usage-report.js +17 -3
  570. package/dist/lib/core-utils/worktree-resume.d.ts +20 -0
  571. package/dist/lib/core-utils/worktree-resume.js +1198 -0
  572. package/dist/lib/daemon/catalog.d.ts +134 -0
  573. package/dist/lib/daemon/catalog.js +358 -0
  574. package/dist/lib/daemon/config.d.ts +35 -0
  575. package/dist/lib/daemon/config.js +108 -0
  576. package/dist/lib/daemon/flag.d.ts +25 -0
  577. package/dist/lib/daemon/flag.js +59 -0
  578. package/dist/lib/daemon/handoff.d.ts +56 -0
  579. package/dist/lib/daemon/handoff.js +161 -0
  580. package/dist/lib/daemon/hq-cloud.d.ts +79 -0
  581. package/dist/lib/daemon/hq-cloud.js +183 -0
  582. package/dist/lib/daemon/install.d.ts +85 -0
  583. package/dist/lib/daemon/install.js +320 -0
  584. package/dist/lib/daemon/legacy-sync-env.d.ts +10 -0
  585. package/dist/lib/daemon/legacy-sync-env.js +58 -0
  586. package/dist/lib/daemon/legacy.d.ts +45 -0
  587. package/dist/lib/daemon/legacy.js +133 -0
  588. package/dist/lib/daemon/lock.d.ts +47 -0
  589. package/dist/lib/daemon/lock.js +138 -0
  590. package/dist/lib/daemon/machine-type.d.ts +50 -0
  591. package/dist/lib/daemon/machine-type.js +159 -0
  592. package/dist/lib/daemon/migrate.d.ts +77 -0
  593. package/dist/lib/daemon/migrate.js +265 -0
  594. package/dist/lib/daemon/paths.d.ts +24 -0
  595. package/dist/lib/daemon/paths.js +43 -0
  596. package/dist/lib/daemon/protocol-tail.d.ts +33 -0
  597. package/dist/lib/daemon/protocol-tail.js +131 -0
  598. package/dist/lib/daemon/remote-control.d.ts +74 -0
  599. package/dist/lib/daemon/remote-control.js +153 -0
  600. package/dist/lib/daemon/requests.d.ts +28 -0
  601. package/dist/lib/daemon/requests.js +65 -0
  602. package/dist/lib/daemon/run.d.ts +79 -0
  603. package/dist/lib/daemon/run.js +755 -0
  604. package/dist/lib/daemon/succession.d.ts +118 -0
  605. package/dist/lib/daemon/succession.js +263 -0
  606. package/dist/lib/daemon/supervisor.d.ts +132 -0
  607. package/dist/lib/daemon/supervisor.js +836 -0
  608. package/dist/lib/daemon/sync-runner.d.ts +58 -0
  609. package/dist/lib/daemon/sync-runner.js +277 -0
  610. package/dist/lib/daemon/tools.d.ts +52 -0
  611. package/dist/lib/daemon/tools.js +95 -0
  612. package/dist/lib/daemon/updater.d.ts +57 -0
  613. package/dist/lib/daemon/updater.js +163 -0
  614. package/dist/lib/db/control-plane.js +6 -0
  615. package/dist/lib/db/local.d.ts +0 -5
  616. package/dist/lib/db/local.js +1 -1
  617. package/dist/lib/db/migrate.d.ts +0 -12
  618. package/dist/lib/db/migrate.js +5 -5
  619. package/dist/lib/db/remote-sql.d.ts +2 -2
  620. package/dist/lib/db/remote-sql.js +3 -3
  621. package/dist/lib/db/sql.d.ts +0 -10
  622. package/dist/lib/db/sql.js +4 -8
  623. package/dist/lib/deploy-api.d.ts +5 -0
  624. package/dist/lib/deploy-api.js +21 -0
  625. package/dist/lib/deploy-apps.d.ts +13 -0
  626. package/dist/lib/deploy-apps.js +29 -0
  627. package/dist/lib/doctor/__testing__/fake-hq-tree.d.ts +1 -1
  628. package/dist/lib/doctor/__testing__/fake-hq-tree.js +1 -1
  629. package/dist/lib/doctor/__testing__/run-doctor.d.ts +8 -0
  630. package/dist/lib/doctor/__testing__/run-doctor.js +52 -0
  631. package/dist/lib/doctor/checks/bots.d.ts +13 -0
  632. package/dist/lib/doctor/checks/bots.js +189 -0
  633. package/dist/lib/doctor/checks/claude-wiring.js +70 -1
  634. package/dist/lib/doctor/checks/codex-wiring.d.ts +0 -4
  635. package/dist/lib/doctor/checks/codex-wiring.js +3 -35
  636. package/dist/lib/doctor/checks/grok-wiring.js +1 -34
  637. package/dist/lib/doctor/checks/integrations.js +11 -0
  638. package/dist/lib/doctor/checks/runtime-health.d.ts +4 -17
  639. package/dist/lib/doctor/checks/runtime-health.js +20 -7
  640. package/dist/lib/doctor/checks/scaffold-cli-floor.d.ts +6 -0
  641. package/dist/lib/doctor/checks/scaffold-cli-floor.js +73 -0
  642. package/dist/lib/doctor/checks/sync-health.d.ts +21 -0
  643. package/dist/lib/doctor/checks/sync-health.js +72 -2
  644. package/dist/lib/doctor/checks/sync-runtime.d.ts +11 -0
  645. package/dist/lib/doctor/checks/sync-runtime.js +216 -0
  646. package/dist/lib/doctor/checks/work-context.js +20 -6
  647. package/dist/lib/doctor/client-health-flag-token.d.ts +15 -0
  648. package/dist/lib/doctor/client-health-flag-token.js +66 -0
  649. package/dist/lib/doctor/client-health-reason-codes-flag.d.ts +27 -0
  650. package/dist/lib/doctor/client-health-reason-codes-flag.js +106 -0
  651. package/dist/lib/doctor/compat.d.ts +0 -16
  652. package/dist/lib/doctor/compat.js +4 -3
  653. package/dist/lib/doctor/deep/effects.js +1 -3
  654. package/dist/lib/doctor/deep/executor.d.ts +4 -10
  655. package/dist/lib/doctor/deep/executor.js +1 -1
  656. package/dist/lib/doctor/deep/parity.d.ts +2 -29
  657. package/dist/lib/doctor/deep/parity.js +7 -7
  658. package/dist/lib/doctor/deep/sandbox.d.ts +7 -25
  659. package/dist/lib/doctor/deep/sandbox.js +5 -7
  660. package/dist/lib/doctor/fix/apply.d.ts +79 -8
  661. package/dist/lib/doctor/fix/apply.js +292 -80
  662. package/dist/lib/doctor/fix/json-output.d.ts +28 -0
  663. package/dist/lib/doctor/fix/json-output.js +33 -0
  664. package/dist/lib/doctor/fix/refresh-sync-outcome.d.ts +12 -0
  665. package/dist/lib/doctor/fix/refresh-sync-outcome.js +25 -0
  666. package/dist/lib/doctor/fix/remediation.d.ts +14 -6
  667. package/dist/lib/doctor/fix/remediation.js +49 -9
  668. package/dist/lib/doctor/fixtures/schema.js +1 -3
  669. package/dist/lib/doctor/json-output.d.ts +17 -1
  670. package/dist/lib/doctor/json-output.js +7 -2
  671. package/dist/lib/doctor/platform.d.ts +0 -26
  672. package/dist/lib/doctor/platform.js +5 -5
  673. package/dist/lib/doctor/registry.d.ts +14 -0
  674. package/dist/lib/doctor/registry.js +71 -0
  675. package/dist/lib/doctor/report.js +1 -1
  676. package/dist/lib/doctor/shared.d.ts +8 -0
  677. package/dist/lib/doctor/shared.js +38 -0
  678. package/dist/lib/doctor/stray-gate-entries.d.ts +35 -0
  679. package/dist/lib/doctor/stray-gate-entries.js +83 -0
  680. package/dist/lib/doctor/types.d.ts +5 -0
  681. package/dist/lib/doctor/types.js +20 -0
  682. package/dist/lib/first-sync-next-step.d.ts +34 -0
  683. package/dist/lib/first-sync-next-step.js +179 -0
  684. package/dist/lib/flag-registry-endpoint.d.ts +5 -0
  685. package/dist/lib/flag-registry-endpoint.js +9 -0
  686. package/dist/lib/flag-registry-worker-source.generated.d.ts +2 -0
  687. package/dist/lib/flag-registry-worker-source.generated.js +3 -0
  688. package/dist/lib/flag-registry-worker.js +12 -1
  689. package/dist/lib/flag-registry.d.ts +26 -6
  690. package/dist/lib/flag-registry.js +133 -16
  691. package/dist/lib/flag-snapshot-file.d.ts +20 -0
  692. package/dist/lib/flag-snapshot-file.js +91 -0
  693. package/dist/lib/heartbeat-identity.d.ts +30 -0
  694. package/dist/lib/heartbeat-identity.js +76 -0
  695. package/dist/lib/index-render/companies.d.ts +4 -1
  696. package/dist/lib/index-render/companies.js +66 -3
  697. package/dist/lib/index-render/company-knowledge.js +80 -17
  698. package/dist/lib/index-render/index.d.ts +1 -0
  699. package/dist/lib/index-render/index.js +2 -1
  700. package/dist/lib/index-render/projects.js +82 -5
  701. package/dist/lib/index-render/shared.d.ts +13 -1
  702. package/dist/lib/index-render/shared.js +41 -2
  703. package/dist/lib/lanes/account-home.d.ts +8 -0
  704. package/dist/lib/lanes/account-home.js +10 -0
  705. package/dist/lib/lanes/accounts.d.ts +117 -0
  706. package/dist/lib/lanes/accounts.js +366 -0
  707. package/dist/lib/lanes/admission-host.d.ts +22 -0
  708. package/dist/lib/lanes/admission-host.js +37 -0
  709. package/dist/lib/lanes/admission.d.ts +26 -0
  710. package/dist/lib/lanes/admission.js +210 -0
  711. package/dist/lib/lanes/approval-gate.d.ts +8 -0
  712. package/dist/lib/lanes/approval-gate.js +90 -0
  713. package/dist/lib/lanes/autopilot-metrics.d.ts +99 -0
  714. package/dist/lib/lanes/autopilot-metrics.js +301 -0
  715. package/dist/lib/lanes/autopilot-registry.d.ts +62 -0
  716. package/dist/lib/lanes/autopilot-registry.js +192 -0
  717. package/dist/lib/lanes/autopilot.d.ts +133 -0
  718. package/dist/lib/lanes/autopilot.js +1222 -0
  719. package/dist/lib/lanes/blocker-freshness.d.ts +31 -0
  720. package/dist/lib/lanes/blocker-freshness.js +168 -0
  721. package/dist/lib/lanes/checked-company-path.d.ts +3 -0
  722. package/dist/lib/lanes/checked-company-path.js +39 -0
  723. package/dist/lib/lanes/claude-balance.d.ts +97 -0
  724. package/dist/lib/lanes/claude-balance.js +319 -0
  725. package/dist/lib/lanes/compaction.d.ts +110 -0
  726. package/dist/lib/lanes/compaction.js +293 -0
  727. package/dist/lib/lanes/config.d.ts +94 -0
  728. package/dist/lib/lanes/config.js +606 -0
  729. package/dist/lib/lanes/constants.d.ts +3 -0
  730. package/dist/lib/lanes/constants.js +3 -0
  731. package/dist/lib/lanes/delivery-core.d.ts +15 -0
  732. package/dist/lib/lanes/delivery-core.js +21 -0
  733. package/dist/lib/lanes/delivery.d.ts +180 -0
  734. package/dist/lib/lanes/delivery.js +443 -0
  735. package/dist/lib/lanes/disk-guard.d.ts +66 -0
  736. package/dist/lib/lanes/disk-guard.js +172 -0
  737. package/dist/lib/lanes/dropbox.d.ts +129 -0
  738. package/dist/lib/lanes/dropbox.js +601 -0
  739. package/dist/lib/lanes/effort.d.ts +51 -0
  740. package/dist/lib/lanes/effort.js +113 -0
  741. package/dist/lib/lanes/envelope-repair-dispatch.d.ts +26 -0
  742. package/dist/lib/lanes/envelope-repair-dispatch.js +74 -0
  743. package/dist/lib/lanes/errors.d.ts +39 -0
  744. package/dist/lib/lanes/errors.js +72 -0
  745. package/dist/lib/lanes/flag-keys.d.ts +22 -0
  746. package/dist/lib/lanes/flag-keys.js +22 -0
  747. package/dist/lib/lanes/grants.d.ts +30 -0
  748. package/dist/lib/lanes/grants.js +171 -0
  749. package/dist/lib/lanes/hire-grant-dispatch.d.ts +29 -0
  750. package/dist/lib/lanes/hire-grant-dispatch.js +315 -0
  751. package/dist/lib/lanes/hooks-install.d.ts +82 -0
  752. package/dist/lib/lanes/hooks-install.js +479 -0
  753. package/dist/lib/lanes/host-capacity.d.ts +69 -0
  754. package/dist/lib/lanes/host-capacity.js +254 -0
  755. package/dist/lib/lanes/hq-root.d.ts +19 -0
  756. package/dist/lib/lanes/hq-root.js +28 -0
  757. package/dist/lib/lanes/index.d.ts +76 -0
  758. package/dist/lib/lanes/index.js +42 -0
  759. package/dist/lib/lanes/keep-alive-audit.d.ts +46 -0
  760. package/dist/lib/lanes/keep-alive-audit.js +370 -0
  761. package/dist/lib/lanes/keep-alive.d.ts +68 -0
  762. package/dist/lib/lanes/keep-alive.js +343 -0
  763. package/dist/lib/lanes/kr-freshness.d.ts +76 -0
  764. package/dist/lib/lanes/kr-freshness.js +413 -0
  765. package/dist/lib/lanes/lane-company.d.ts +10 -0
  766. package/dist/lib/lanes/lane-company.js +41 -0
  767. package/dist/lib/lanes/liveness.d.ts +108 -0
  768. package/dist/lib/lanes/liveness.js +396 -0
  769. package/dist/lib/lanes/machine-identity.d.ts +34 -0
  770. package/dist/lib/lanes/machine-identity.js +92 -0
  771. package/dist/lib/lanes/manager-status-gate.d.ts +17 -0
  772. package/dist/lib/lanes/manager-status-gate.js +133 -0
  773. package/dist/lib/lanes/merge-command.d.ts +15 -0
  774. package/dist/lib/lanes/merge-command.js +629 -0
  775. package/dist/lib/lanes/mesh-events.d.ts +127 -0
  776. package/dist/lib/lanes/mesh-events.js +564 -0
  777. package/dist/lib/lanes/message-replay.d.ts +21 -0
  778. package/dist/lib/lanes/message-replay.js +122 -0
  779. package/dist/lib/lanes/models.d.ts +86 -0
  780. package/dist/lib/lanes/models.js +234 -0
  781. package/dist/lib/lanes/monitor.d.ts +48 -0
  782. package/dist/lib/lanes/monitor.js +428 -0
  783. package/dist/lib/lanes/move-account.d.ts +56 -0
  784. package/dist/lib/lanes/move-account.js +193 -0
  785. package/dist/lib/lanes/orphans.d.ts +25 -0
  786. package/dist/lib/lanes/orphans.js +102 -0
  787. package/dist/lib/lanes/outpost-dispatch.d.ts +147 -0
  788. package/dist/lib/lanes/outpost-dispatch.js +271 -0
  789. package/dist/lib/lanes/outpost-hire-cache.d.ts +22 -0
  790. package/dist/lib/lanes/outpost-hire-cache.js +153 -0
  791. package/dist/lib/lanes/outpost-identity.d.ts +33 -0
  792. package/dist/lib/lanes/outpost-identity.js +59 -0
  793. package/dist/lib/lanes/outpost-profile-repin.d.ts +17 -0
  794. package/dist/lib/lanes/outpost-profile-repin.js +84 -0
  795. package/dist/lib/lanes/outpost-pruner-install.d.ts +37 -0
  796. package/dist/lib/lanes/outpost-pruner-install.js +238 -0
  797. package/dist/lib/lanes/outpost-registry-worker-approval.d.ts +18 -0
  798. package/dist/lib/lanes/outpost-registry-worker-approval.js +109 -0
  799. package/dist/lib/lanes/outpost-snapshot-memo.d.ts +6 -0
  800. package/dist/lib/lanes/outpost-snapshot-memo.js +14 -0
  801. package/dist/lib/lanes/outpost-worktree-pruner-flag.d.ts +19 -0
  802. package/dist/lib/lanes/outpost-worktree-pruner-flag.js +86 -0
  803. package/dist/lib/lanes/outpost-worktree-pruner.d.ts +62 -0
  804. package/dist/lib/lanes/outpost-worktree-pruner.js +1201 -0
  805. package/dist/lib/lanes/profile.d.ts +69 -0
  806. package/dist/lib/lanes/profile.js +552 -0
  807. package/dist/lib/lanes/provider-rejection.d.ts +86 -0
  808. package/dist/lib/lanes/provider-rejection.js +286 -0
  809. package/dist/lib/lanes/questions.d.ts +90 -0
  810. package/dist/lib/lanes/questions.js +384 -0
  811. package/dist/lib/lanes/quota.d.ts +134 -0
  812. package/dist/lib/lanes/quota.js +471 -0
  813. package/dist/lib/lanes/reconcile-install.d.ts +90 -0
  814. package/dist/lib/lanes/reconcile-install.js +257 -0
  815. package/dist/lib/lanes/reconcile.d.ts +161 -0
  816. package/dist/lib/lanes/reconcile.js +3343 -0
  817. package/dist/lib/lanes/registry-flag.d.ts +35 -0
  818. package/dist/lib/lanes/registry-flag.js +164 -0
  819. package/dist/lib/lanes/registry-persona.d.ts +20 -0
  820. package/dist/lib/lanes/registry-persona.js +329 -0
  821. package/dist/lib/lanes/registry.d.ts +122 -0
  822. package/dist/lib/lanes/registry.js +570 -0
  823. package/dist/lib/lanes/reviews.d.ts +38 -0
  824. package/dist/lib/lanes/reviews.js +395 -0
  825. package/dist/lib/lanes/runaway-tool-guard.d.ts +38 -0
  826. package/dist/lib/lanes/runaway-tool-guard.js +284 -0
  827. package/dist/lib/lanes/session-relink.d.ts +25 -0
  828. package/dist/lib/lanes/session-relink.js +216 -0
  829. package/dist/lib/lanes/spawn.d.ts +355 -0
  830. package/dist/lib/lanes/spawn.js +2668 -0
  831. package/dist/lib/lanes/ssm-command-context.d.ts +12 -0
  832. package/dist/lib/lanes/ssm-command-context.js +52 -0
  833. package/dist/lib/lanes/store.d.ts +91 -0
  834. package/dist/lib/lanes/store.js +1822 -0
  835. package/dist/lib/lanes/stories.d.ts +23 -0
  836. package/dist/lib/lanes/stories.js +92 -0
  837. package/dist/lib/lanes/story-ledger.d.ts +80 -0
  838. package/dist/lib/lanes/story-ledger.js +815 -0
  839. package/dist/lib/lanes/story-switch.d.ts +21 -0
  840. package/dist/lib/lanes/story-switch.js +75 -0
  841. package/dist/lib/lanes/text-scan.d.ts +11 -0
  842. package/dist/lib/lanes/text-scan.js +103 -0
  843. package/dist/lib/lanes/throttle.d.ts +116 -0
  844. package/dist/lib/lanes/throttle.js +437 -0
  845. package/dist/lib/lanes/timestamp.d.ts +3 -0
  846. package/dist/lib/lanes/timestamp.js +26 -0
  847. package/dist/lib/lanes/tracker-checks.d.ts +77 -0
  848. package/dist/lib/lanes/tracker-checks.js +134 -0
  849. package/dist/lib/lanes/tracker-report-state.d.ts +10 -0
  850. package/dist/lib/lanes/tracker-report-state.js +124 -0
  851. package/dist/lib/lanes/tracker-report.d.ts +203 -0
  852. package/dist/lib/lanes/tracker-report.js +522 -0
  853. package/dist/lib/lanes/tracker-store.d.ts +18 -0
  854. package/dist/lib/lanes/tracker-store.js +106 -0
  855. package/dist/lib/lanes/types.d.ts +1030 -0
  856. package/dist/lib/lanes/types.js +418 -0
  857. package/dist/lib/lanes/wait.d.ts +39 -0
  858. package/dist/lib/lanes/wait.js +159 -0
  859. package/dist/lib/lanes/watch.d.ts +39 -0
  860. package/dist/lib/lanes/watch.js +249 -0
  861. package/dist/lib/lanes/watcher-main.d.ts +11 -0
  862. package/dist/lib/lanes/watcher-main.js +108 -0
  863. package/dist/lib/lanes/watcher.d.ts +287 -0
  864. package/dist/lib/lanes/watcher.js +1972 -0
  865. package/dist/lib/mesh/api.d.ts +103 -10
  866. package/dist/lib/mesh/api.js +334 -64
  867. package/dist/lib/mesh/client.d.ts +3 -2
  868. package/dist/lib/mesh/client.js +26 -7
  869. package/dist/lib/mesh/denial-codes.d.ts +5 -0
  870. package/dist/lib/mesh/denial-codes.js +14 -0
  871. package/dist/lib/mesh/live/backfill-held.d.ts +67 -16
  872. package/dist/lib/mesh/live/backfill-held.js +415 -61
  873. package/dist/lib/mesh/live/backoff.d.ts +2 -2
  874. package/dist/lib/mesh/live/backoff.js +16 -3
  875. package/dist/lib/mesh/live/daemon/board-refresh.d.ts +7 -1
  876. package/dist/lib/mesh/live/daemon/board-refresh.js +78 -30
  877. package/dist/lib/mesh/live/daemon/config.d.ts +36 -0
  878. package/dist/lib/mesh/live/daemon/config.js +120 -0
  879. package/dist/lib/mesh/live/daemon/credentials.d.ts +64 -10
  880. package/dist/lib/mesh/live/daemon/credentials.js +270 -20
  881. package/dist/lib/mesh/live/daemon/doctor.d.ts +53 -0
  882. package/dist/lib/mesh/live/daemon/doctor.js +190 -6
  883. package/dist/lib/mesh/live/daemon/index.d.ts +13 -10
  884. package/dist/lib/mesh/live/daemon/index.js +7 -6
  885. package/dist/lib/mesh/live/daemon/install.d.ts +255 -1
  886. package/dist/lib/mesh/live/daemon/install.js +811 -13
  887. package/dist/lib/mesh/live/daemon/legacy-listen.d.ts +43 -0
  888. package/dist/lib/mesh/live/daemon/legacy-listen.js +89 -0
  889. package/dist/lib/mesh/live/daemon/live-cache.d.ts +26 -0
  890. package/dist/lib/mesh/live/daemon/live-cache.js +116 -0
  891. package/dist/lib/mesh/live/daemon/mqtt-events.d.ts +7 -0
  892. package/dist/lib/mesh/live/daemon/mqtt-events.js +2 -0
  893. package/dist/lib/mesh/live/daemon/mqtt-events.test-d.d.ts +2 -0
  894. package/dist/lib/mesh/live/daemon/mqtt-events.test-d.js +10 -0
  895. package/dist/lib/mesh/live/daemon/paths.d.ts +2 -0
  896. package/dist/lib/mesh/live/daemon/paths.js +2 -0
  897. package/dist/lib/mesh/live/daemon/presence.d.ts +24 -5
  898. package/dist/lib/mesh/live/daemon/presence.js +79 -10
  899. package/dist/lib/mesh/live/daemon/run.d.ts +48 -2
  900. package/dist/lib/mesh/live/daemon/run.js +485 -33
  901. package/dist/lib/mesh/live/daemon/state.d.ts +19 -2
  902. package/dist/lib/mesh/live/daemon/state.js +34 -2
  903. package/dist/lib/mesh/live/daemon/transcript-watch.d.ts +45 -9
  904. package/dist/lib/mesh/live/daemon/transcript-watch.js +227 -31
  905. package/dist/lib/mesh/live/daemon/version-drift.d.ts +5 -0
  906. package/dist/lib/mesh/live/daemon/version-drift.js +47 -0
  907. package/dist/lib/mesh/live/daemon/work-subscribe.d.ts +32 -0
  908. package/dist/lib/mesh/live/daemon/work-subscribe.js +262 -0
  909. package/dist/lib/mesh/live/emit-client.d.ts +8 -0
  910. package/dist/lib/mesh/live/emit-client.js +23 -8
  911. package/dist/lib/mesh/live/emit-evidence.d.ts +19 -0
  912. package/dist/lib/mesh/live/emit-evidence.js +20 -2
  913. package/dist/lib/mesh/live/emit.d.ts +9 -0
  914. package/dist/lib/mesh/live/emit.js +28 -2
  915. package/dist/lib/mesh/live/enqueue.d.ts +5 -0
  916. package/dist/lib/mesh/live/enqueue.js +19 -0
  917. package/dist/lib/mesh/live/flush.d.ts +17 -5
  918. package/dist/lib/mesh/live/flush.js +391 -38
  919. package/dist/lib/mesh/live/format-spool-line.d.ts +5 -2
  920. package/dist/lib/mesh/live/format-spool-line.js +10 -0
  921. package/dist/lib/mesh/live/paths.d.ts +2 -0
  922. package/dist/lib/mesh/live/paths.js +4 -0
  923. package/dist/lib/mesh/live/report-summary.d.ts +45 -0
  924. package/dist/lib/mesh/live/report-summary.js +234 -0
  925. package/dist/lib/mesh/live/session-event.schema.json +24 -1
  926. package/dist/lib/mesh/live/session-events-client.d.ts +2 -0
  927. package/dist/lib/mesh/live/session-events-client.js +26 -0
  928. package/dist/lib/mesh/live/session-seq.d.ts +4 -0
  929. package/dist/lib/mesh/live/session-seq.js +33 -0
  930. package/dist/lib/mesh/live/spool.d.ts +19 -0
  931. package/dist/lib/mesh/live/spool.js +269 -3
  932. package/dist/lib/mesh/live/validate-session-event.d.ts +1 -1
  933. package/dist/lib/mesh/live/validate-session-event.js +1 -1
  934. package/dist/lib/mesh/project-board.d.ts +65 -0
  935. package/dist/lib/mesh/project-board.js +181 -0
  936. package/dist/lib/mesh/story-status.d.ts +22 -0
  937. package/dist/lib/mesh/story-status.js +49 -0
  938. package/dist/lib/monitor.d.ts +149 -0
  939. package/dist/lib/monitor.js +519 -0
  940. package/dist/lib/node-binary.d.ts +50 -0
  941. package/dist/lib/node-binary.js +133 -0
  942. package/dist/lib/notify-recipient.d.ts +7 -0
  943. package/dist/lib/notify-recipient.js +11 -0
  944. package/dist/lib/onboarding/checkpoint.d.ts +13 -0
  945. package/dist/lib/onboarding/checkpoint.js +44 -0
  946. package/dist/lib/onboarding/cli/onboard.d.ts +53 -0
  947. package/dist/lib/onboarding/cli/onboard.js +135 -0
  948. package/dist/lib/onboarding/cli/prompts.d.ts +28 -0
  949. package/dist/lib/onboarding/cli/prompts.js +83 -0
  950. package/dist/lib/onboarding/errors.d.ts +34 -0
  951. package/dist/lib/onboarding/errors.js +59 -0
  952. package/dist/lib/onboarding/index.d.ts +13 -0
  953. package/dist/lib/onboarding/index.js +13 -0
  954. package/dist/lib/onboarding/orchestrator.d.ts +47 -0
  955. package/dist/lib/onboarding/orchestrator.js +569 -0
  956. package/dist/lib/onboarding/types.d.ts +79 -0
  957. package/dist/lib/onboarding/types.js +8 -0
  958. package/dist/lib/plan-limit-nag.d.ts +102 -6
  959. package/dist/lib/plan-limit-nag.js +348 -43
  960. package/dist/lib/policy-validator.d.ts +7 -0
  961. package/dist/lib/policy-validator.js +187 -0
  962. package/dist/lib/process-flag-company-context.d.ts +8 -0
  963. package/dist/lib/process-flag-company-context.js +67 -0
  964. package/dist/lib/report-publish.d.ts +175 -0
  965. package/dist/lib/report-publish.js +421 -0
  966. package/dist/lib/report-run.d.ts +62 -0
  967. package/dist/lib/report-run.js +123 -0
  968. package/dist/lib/report-snapshot.d.ts +12 -0
  969. package/dist/lib/report-snapshot.js +135 -0
  970. package/dist/lib/report-templates.d.ts +9 -0
  971. package/dist/lib/report-templates.js +21 -0
  972. package/dist/lib/scaffold-cli-floor.d.ts +8 -0
  973. package/dist/lib/scaffold-cli-floor.js +50 -0
  974. package/dist/lib/scan-packages/index.d.ts +2 -0
  975. package/dist/lib/scan-packages/index.js +168 -6
  976. package/dist/lib/search-index/background.d.ts +8 -1
  977. package/dist/lib/search-index/background.js +55 -200
  978. package/dist/lib/search-index/collection-path-repair-flag.d.ts +4 -0
  979. package/dist/lib/search-index/collection-path-repair-flag.js +7 -0
  980. package/dist/lib/search-index/embed-lock.d.ts +34 -0
  981. package/dist/lib/search-index/embed-lock.js +295 -0
  982. package/dist/lib/search-index/index.d.ts +12 -0
  983. package/dist/lib/search-index/index.js +153 -7
  984. package/dist/lib/search-index/load-gate.d.ts +57 -0
  985. package/dist/lib/search-index/load-gate.js +270 -0
  986. package/dist/lib/search-index/max-doc-bytes.d.ts +219 -0
  987. package/dist/lib/search-index/max-doc-bytes.js +463 -0
  988. package/dist/lib/search-index/qmd-exit-diagnostics.d.ts +5 -0
  989. package/dist/lib/search-index/qmd-exit-diagnostics.js +40 -0
  990. package/dist/lib/search-index/reindex-single-flight-flag.d.ts +5 -0
  991. package/dist/lib/search-index/reindex-single-flight-flag.js +8 -0
  992. package/dist/lib/service-manager/index.d.ts +42 -0
  993. package/dist/lib/service-manager/index.js +105 -0
  994. package/dist/lib/service-manager/launchd.d.ts +81 -0
  995. package/dist/lib/service-manager/launchd.js +212 -0
  996. package/dist/lib/service-manager/systemd.d.ts +19 -0
  997. package/dist/lib/service-manager/systemd.js +72 -0
  998. package/dist/lib/service-manager/types.d.ts +34 -0
  999. package/dist/lib/service-manager/types.js +26 -0
  1000. package/dist/lib/test-utils/isolated-flag-company-context.d.ts +3 -0
  1001. package/dist/lib/test-utils/isolated-flag-company-context.js +18 -0
  1002. package/dist/lib/work-context/bind-best.d.ts +66 -0
  1003. package/dist/lib/work-context/bind-best.js +344 -0
  1004. package/dist/lib/work-context/bind-calling-session.d.ts +26 -0
  1005. package/dist/lib/work-context/bind-calling-session.js +63 -0
  1006. package/dist/lib/work-context/company-rebind.d.ts +23 -0
  1007. package/dist/lib/work-context/company-rebind.js +59 -0
  1008. package/dist/lib/work-context/company.d.ts +22 -20
  1009. package/dist/lib/work-context/company.js +124 -40
  1010. package/dist/lib/work-context/config.d.ts +58 -11
  1011. package/dist/lib/work-context/config.js +334 -83
  1012. package/dist/lib/work-context/contract.d.ts +13 -0
  1013. package/dist/lib/work-context/contract.schema.json +3 -1
  1014. package/dist/lib/work-context/default-company.d.ts +43 -0
  1015. package/dist/lib/work-context/default-company.js +83 -0
  1016. package/dist/lib/work-context/outbox-quarantine-status-flag.d.ts +4 -0
  1017. package/dist/lib/work-context/outbox-quarantine-status-flag.js +7 -0
  1018. package/dist/lib/work-context/outbox.d.ts +27 -5
  1019. package/dist/lib/work-context/outbox.js +135 -6
  1020. package/dist/lib/work-context/prd-sync.d.ts +56 -0
  1021. package/dist/lib/work-context/prd-sync.js +197 -0
  1022. package/dist/lib/work-context/preflight-contract.d.ts +28 -0
  1023. package/dist/lib/work-context/preflight-contract.js +85 -0
  1024. package/dist/lib/work-context/prompt-rebind.d.ts +25 -0
  1025. package/dist/lib/work-context/prompt-rebind.js +85 -0
  1026. package/dist/lib/work-context/reconcile.d.ts +15 -0
  1027. package/dist/lib/work-context/reconcile.js +405 -29
  1028. package/dist/lib/work-context/state.d.ts +93 -10
  1029. package/dist/lib/work-context/state.js +342 -29
  1030. package/dist/lib/work-context/windows-acl.d.ts +123 -0
  1031. package/dist/lib/work-context/windows-acl.js +425 -0
  1032. package/dist/lib/workers-registry/index.js +62 -8
  1033. package/dist/lib/workers-registry/read.d.ts +15 -0
  1034. package/dist/lib/workers-registry/read.js +17 -0
  1035. package/dist/main.d.ts +32 -0
  1036. package/dist/main.js +273 -73
  1037. package/dist/native-fast-route.d.ts +7 -0
  1038. package/dist/native-fast-route.js +45 -0
  1039. package/dist/node-network-compat-core.d.ts +12 -0
  1040. package/dist/node-network-compat-core.js +41 -0
  1041. package/dist/node-network-compat-fast.d.ts +7 -0
  1042. package/dist/node-network-compat-fast.js +23 -0
  1043. package/dist/node-network-compat.d.ts +2 -30
  1044. package/dist/node-network-compat.js +4 -51
  1045. package/dist/node-preflight.d.ts +7 -1
  1046. package/dist/node-preflight.js +5 -5
  1047. package/dist/register-all.d.ts +4 -29
  1048. package/dist/register-all.js +4 -233
  1049. package/dist/run/discover-schemas.d.ts +2 -1
  1050. package/dist/run/env-graph-guard.d.ts +2 -2
  1051. package/dist/run/env-graph-guard.js +5 -2
  1052. package/dist/run/hq-plugin.d.ts +4 -0
  1053. package/dist/run/hq-plugin.js +36 -8
  1054. package/dist/secrets-env-fast-path.d.ts +5 -0
  1055. package/dist/secrets-env-fast-path.js +16 -0
  1056. package/dist/secrets-env-fast-route.d.ts +18 -0
  1057. package/dist/secrets-env-fast-route.js +54 -0
  1058. package/dist/sentry-before-send.js +80 -0
  1059. package/dist/sentry.d.ts +16 -4
  1060. package/dist/sentry.js +179 -18
  1061. package/dist/startup-registration.d.ts +26 -2
  1062. package/dist/startup-registration.js +116 -15
  1063. package/dist/utils/checkpoint-stamp-write-error.d.ts +28 -0
  1064. package/dist/utils/checkpoint-stamp-write-error.js +99 -0
  1065. package/dist/utils/cli-network-lifecycle.d.ts +4 -0
  1066. package/dist/utils/cli-network-lifecycle.js +11 -0
  1067. package/dist/utils/cli-telemetry.d.ts +75 -1
  1068. package/dist/utils/cli-telemetry.js +433 -7
  1069. package/dist/utils/client-health.d.ts +0 -4
  1070. package/dist/utils/client-health.js +2 -2
  1071. package/dist/utils/cognito-refresh-sentry.d.ts +3 -0
  1072. package/dist/utils/cognito-refresh-sentry.js +49 -0
  1073. package/dist/utils/cognito-session.d.ts +71 -0
  1074. package/dist/utils/cognito-session.js +481 -27
  1075. package/dist/utils/console-origin.d.ts +9 -0
  1076. package/dist/utils/console-origin.js +28 -0
  1077. package/dist/utils/contribution-table.d.ts +1 -1
  1078. package/dist/utils/core-eval-trigger.d.ts +4 -0
  1079. package/dist/utils/core-eval-trigger.js +88 -0
  1080. package/dist/utils/environmental-error.d.ts +18 -0
  1081. package/dist/utils/environmental-error.js +240 -7
  1082. package/dist/utils/exclusive-lock.d.ts +32 -0
  1083. package/dist/utils/exclusive-lock.js +75 -0
  1084. package/dist/utils/expected-cli-error.d.ts +2 -0
  1085. package/dist/utils/expected-cli-error.js +4 -0
  1086. package/dist/utils/fast-stream-errors.d.ts +12 -0
  1087. package/dist/utils/fast-stream-errors.js +18 -0
  1088. package/dist/utils/feedback-diagnostics.d.ts +2 -1
  1089. package/dist/utils/feedback-log-bundle.d.ts +51 -26
  1090. package/dist/utils/feedback-log-bundle.js +211 -31
  1091. package/dist/utils/feedback-logs.d.ts +18 -47
  1092. package/dist/utils/feedback-logs.js +50 -21
  1093. package/dist/utils/feedback-screenshots.d.ts +0 -1
  1094. package/dist/utils/feedback-screenshots.js +1 -1
  1095. package/dist/utils/files-browse-acl.d.ts +5 -0
  1096. package/dist/utils/files-browse-acl.js +11 -0
  1097. package/dist/utils/hq-core-yaml.d.ts +10 -0
  1098. package/dist/utils/hq-core-yaml.js +40 -0
  1099. package/dist/utils/hq-root-resolver.d.ts +13 -0
  1100. package/dist/utils/hq-root-resolver.js +103 -0
  1101. package/dist/utils/hq-roots.d.ts +25 -2
  1102. package/dist/utils/hq-roots.js +67 -7
  1103. package/dist/utils/incomplete-install-error.d.ts +87 -19
  1104. package/dist/utils/incomplete-install-error.js +319 -68
  1105. package/dist/utils/install-tree-torn.d.ts +260 -24
  1106. package/dist/utils/install-tree-torn.js +998 -51
  1107. package/dist/utils/large-file-guard.d.ts +0 -10
  1108. package/dist/utils/large-file-guard.js +1 -1
  1109. package/dist/utils/local-files-overview.d.ts +4 -8
  1110. package/dist/utils/local-files-overview.js +48 -7
  1111. package/dist/utils/login-provider.d.ts +7 -0
  1112. package/dist/utils/login-provider.js +34 -0
  1113. package/dist/utils/pack-contributions.d.ts +2 -14
  1114. package/dist/utils/pack-contributions.js +7 -44
  1115. package/dist/utils/package-root-diagnostics.d.ts +1 -1
  1116. package/dist/utils/people.d.ts +7 -11
  1117. package/dist/utils/people.js +5 -20
  1118. package/dist/utils/plan-gate-error.d.ts +52 -10
  1119. package/dist/utils/plan-gate-error.js +364 -41
  1120. package/dist/utils/qmd-model-download-error.d.ts +0 -8
  1121. package/dist/utils/qmd-model-download-error.js +1 -1
  1122. package/dist/utils/qmd-query-document-error.d.ts +0 -6
  1123. package/dist/utils/qmd-query-document-error.js +1 -1
  1124. package/dist/utils/redact-error-text.d.ts +0 -2
  1125. package/dist/utils/redact-error-text.js +3 -2
  1126. package/dist/utils/redact-url.d.ts +14 -0
  1127. package/dist/utils/redact-url.js +218 -0
  1128. package/dist/utils/run-bundled-script.d.ts +6 -0
  1129. package/dist/utils/run-bundled-script.js +117 -4
  1130. package/dist/utils/sandbox-runner-client.d.ts +2 -1
  1131. package/dist/utils/scaffold-fast-import-guard.d.ts +2 -0
  1132. package/dist/utils/scaffold-fast-import-guard.js +40 -0
  1133. package/dist/utils/scaffold-packlist-guard.d.ts +7 -0
  1134. package/dist/utils/scaffold-packlist-guard.js +23 -0
  1135. package/dist/utils/scaffold-sibling-references.d.ts +22 -0
  1136. package/dist/utils/scaffold-sibling-references.js +156 -0
  1137. package/dist/utils/secret-load-availability.d.ts +8 -0
  1138. package/dist/utils/secret-load-availability.js +54 -0
  1139. package/dist/utils/secrets-cache.d.ts +7 -3
  1140. package/dist/utils/secrets-cache.js +162 -14
  1141. package/dist/utils/self-update.d.ts +34 -1
  1142. package/dist/utils/self-update.js +660 -42
  1143. package/dist/utils/sentry-fingerprint.d.ts +23 -1
  1144. package/dist/utils/sentry-fingerprint.js +223 -31
  1145. package/dist/utils/staged-install.d.ts +34 -0
  1146. package/dist/utils/staged-install.js +346 -0
  1147. package/dist/utils/staged-npm-install.d.ts +16 -0
  1148. package/dist/utils/staged-npm-install.js +264 -0
  1149. package/dist/utils/sync-log-sources.d.ts +15 -0
  1150. package/dist/utils/sync-log-sources.js +36 -0
  1151. package/dist/utils/table-width.d.ts +7 -0
  1152. package/dist/utils/table-width.js +15 -0
  1153. package/dist/utils/team-upgrade.d.ts +1 -1
  1154. package/dist/utils/team-upgrade.js +4 -3
  1155. package/dist/utils/update-command-supervisor.cjs +247 -0
  1156. package/dist/utils/upload-author.d.ts +15 -0
  1157. package/dist/utils/upload-author.js +39 -0
  1158. package/dist/utils/vault-api.d.ts +21 -1
  1159. package/dist/utils/vault-api.js +251 -84
  1160. package/dist/utils/version-check.d.ts +11 -1
  1161. package/dist/utils/version-check.js +32 -3
  1162. package/dist/utils/version-gate.d.ts +101 -17
  1163. package/dist/utils/version-gate.js +645 -70
  1164. package/dist/utils/version-report.d.ts +27 -0
  1165. package/dist/utils/version-report.js +105 -0
  1166. package/dist/utils/windows-spawn.d.ts +6 -0
  1167. package/dist/utils/windows-spawn.js +37 -0
  1168. package/dist/version-request.d.ts +14 -0
  1169. package/dist/version-request.js +36 -0
  1170. package/package.json +20 -8
  1171. package/scripts/mesh-daemon-if-stale.mjs +20 -0
  1172. package/templates/reports/blank.md +3 -0
  1173. package/templates/reports/daily-digest.md +11 -0
  1174. package/templates/runbooks/update-report.md +21 -0
  1175. package/dist/commands/scaffold-fast.d.ts +0 -41
  1176. package/dist/commands/scaffold-fast.js +0 -57
  1177. package/dist/lib/work-context/index.d.ts +0 -25
  1178. package/dist/lib/work-context/index.js +0 -21
@@ -0,0 +1,1005 @@
1
+ import { buildOutpostQuestionAnswerCommand, buildOutpostQuestionCancelCommand, buildOutpostQuestionShowCommand, dispatchErrorMessage } from "../lib/lanes/outpost-dispatch.js";
2
+ import { assertNoSecretText } from "../lib/lanes/text-scan.js";
3
+ import { sessionIdFromEnv } from "../lib/mesh/live/session-identity.js";
4
+ import { appendCappedHistory, createQuestion, isLanesError, listSessionLiveness, parseLivenessState, parseQuestionRecord, parseQuestionStatus, readDaemonPresenceConnected, readLane, readQuestion, wakeAnsweredLaneNow, sessionLiveness, appendDropboxMessage, answerDropboxMessage, laneAcceptsDropboxDelivery, laneIdForAnswerDelivery, writeQuestionBody } from "../lib/lanes/index.js";
5
+ import { resolveQuestionCompanyWithFallback } from "../lib/lanes/questions.js";
6
+ import { LanesError } from "../lib/lanes/errors.js";
7
+ export function resolveAnswerChoice(choice, options, freeform) {
8
+ const trimmed = choice.trim();
9
+ if (/^[0-9]+$/.test(trimmed)) {
10
+ const index = Number(trimmed);
11
+ if (Number.isInteger(index) && index >= 1 && index <= options.length) {
12
+ return options[index - 1];
13
+ }
14
+ }
15
+ if (options.includes(trimmed) || options.includes(choice)) {
16
+ return options.includes(trimmed) ? trimmed : choice;
17
+ }
18
+ if (freeform)
19
+ return choice;
20
+ throw new LanesError("off_menu_choice", `Choice ${JSON.stringify(choice)} is not on the menu. Pass --freeform to allow it.`, { choice, options });
21
+ }
22
+ export function createLaneQuestionsHandlers(deps) {
23
+ const { CAPACITY_PROBE_TIMEOUT_MS, MAX_PLACEMENT_OUTPOSTS, OUTPOST_QUESTION_LOOKUP_CONCURRENCY, assertLaneRunsHereForOperatorMutation, assertQuestionAnswerAuthorized, assertQuestionCompanyMatchesLane, casUpdateQuestion, casUpdateLane, effectiveLaneQuestionCompany, emitLaneMeshEvent, groupQuestionLanesByCompany, isQuestionAnswer, laneIsHostedHere, livenessDepsFromCtx, loadAllLanes, loadAllQuestions, mapWithConcurrency, mintMessageId, parseOutpostQuestionAudience, parseOutpostQuestionBody, parseRemoteJson, parseSeniorRef, questionCompanyForLane, questionCompanyRefMatches, questionListCompanyArg, readOutpostQuestionRecords, readQuestionBody, printJson, readSessionMeta, reconcileHostFromCtx, resolveActiveQuestionCompany, resolveAudience, sameQuestionAnswer, sameQuestionCompany, seniorOfSession, writeAnswerDeliveryFailed } = deps;
24
+ function requireQuestionBody(hqRoot, question) {
25
+ const body = readQuestionBody(hqRoot, question);
26
+ if (!body) {
27
+ throw new LanesError("question_body_unavailable", `Question body is not available on this host for ${question.question_id}`, {
28
+ question_id: question.question_id,
29
+ store: question.body.store,
30
+ ref: question.body.ref,
31
+ });
32
+ }
33
+ return body;
34
+ }
35
+ function assertQuestionCompanyAccess(question, lane, requestedCompany, hqRoot) {
36
+ assertQuestionCompanyMatchesLane(question, lane, "question_company_mismatch", hqRoot);
37
+ const questionCompany = questionCompanyForLane(question, lane, hqRoot);
38
+ if (questionCompany !== null && !sameQuestionCompany(questionCompany, requestedCompany)) {
39
+ throw new LanesError("question_company_mismatch", `Question ${question.question_id} does not belong to the requested or active company`, { question_id: question.question_id, lane_id: lane.lane_id });
40
+ }
41
+ }
42
+ function assertQuestionCompanyResolvedForAnswer(question, lane, hqRoot, resolvedCompany) {
43
+ if (questionCompanyForLane(question, lane, hqRoot) !== null || resolvedCompany)
44
+ return;
45
+ throw new LanesError("question_company_unavailable", `Cannot answer legacy question ${question.question_id}: its company cannot be resolved from the question or lane; re-run with --company <slug>`, { question_id: question.question_id, lane_id: lane.lane_id });
46
+ }
47
+ function audienceMatches(audience, filter) {
48
+ if (filter.kind === "me") {
49
+ return audience.kind === "session" && audience.id === filter.id;
50
+ }
51
+ if (filter.kind === "user")
52
+ return audience.kind === "user";
53
+ return audience.kind === filter.kind && audience.id === filter.id;
54
+ }
55
+ function questionAudienceMatchesSenior(audience, lane, ctx) {
56
+ if (audienceMatches(audience, lane.senior))
57
+ return true;
58
+ const sessionId = sessionIdFromEnv(ctx.env);
59
+ if (sessionId && audienceMatches(audience, { kind: "session", id: sessionId }))
60
+ return true;
61
+ const callerLaneId = ctx.env.HQ_LANE_ID?.trim();
62
+ return callerLaneId !== undefined && callerLaneId.length > 0 &&
63
+ audienceMatches(audience, { kind: "lane", id: callerLaneId });
64
+ }
65
+ function parseForFilter(raw, ctx) {
66
+ const trimmed = raw.trim();
67
+ if (trimmed === "me") {
68
+ const sessionId = sessionIdFromEnv(ctx.env);
69
+ if (!sessionId) {
70
+ throw new LanesError("missing_session_id", "--for me requires a current session id (HQ_SESSION_ID)", {});
71
+ }
72
+ return { kind: "me", id: sessionId };
73
+ }
74
+ return parseSeniorRef(trimmed);
75
+ }
76
+ function yieldEventLoop() {
77
+ return new Promise((resolve) => {
78
+ setImmediate(resolve);
79
+ });
80
+ }
81
+ function throwIfQuestionNotPending(current) {
82
+ if (current.status === "pending")
83
+ return;
84
+ throw new LanesError("question_not_pending", `Question ${current.question_id} is ${current.status}`, { question_id: current.question_id, status: current.status });
85
+ }
86
+ async function dispatchOutpostQuestionAnswer(ctx, lane, questionId, options, lookupErrors = []) {
87
+ if (lane.host.kind !== "outpost") {
88
+ throw new LanesError("outpost_dispatch_failed", `Lane ${lane.lane_id} has no Outpost host to answer its question`, { lane_id: lane.lane_id, question_id: questionId });
89
+ }
90
+ assertQuestionAnswerAuthorized(ctx, lane);
91
+ const outpostId = lane.host.id;
92
+ let dispatched;
93
+ try {
94
+ dispatched = await ctx.dispatchOutpostExec({
95
+ outpostId,
96
+ command: buildOutpostQuestionAnswerCommand({
97
+ questionId,
98
+ choice: options.choice,
99
+ freeform: options.freeform,
100
+ notes: options.notes,
101
+ company: options.company,
102
+ }),
103
+ });
104
+ }
105
+ catch (err) {
106
+ throw new LanesError("outpost_dispatch_failed", `Could not dispatch question ${questionId} to Outpost ${outpostId}: ${dispatchErrorMessage(err)}`, { lane_id: lane.lane_id, question_id: questionId, outpost_id: outpostId });
107
+ }
108
+ if (dispatched.done !== true || dispatched.status !== "Success" || dispatched.exitCode !== 0) {
109
+ throw new LanesError("outpost_dispatch_failed", `Outpost ${outpostId} did not confirm the answer for question ${questionId}`, {
110
+ lane_id: lane.lane_id,
111
+ question_id: questionId,
112
+ outpost_id: outpostId,
113
+ command_id: dispatched.commandId,
114
+ status: dispatched.status,
115
+ done: dispatched.done ?? false,
116
+ exit_code: dispatched.exitCode,
117
+ });
118
+ }
119
+ const remote = parseRemoteJson(dispatched.stdout, "Outpost question answer");
120
+ if (remote?.error !== undefined) {
121
+ throw new LanesError("outpost_remote_command_failed", typeof remote.message === "string"
122
+ ? remote.message
123
+ : `Outpost ${outpostId} rejected the answer for question ${questionId}`, {
124
+ lane_id: lane.lane_id,
125
+ question_id: questionId,
126
+ outpost_id: outpostId,
127
+ command_id: dispatched.commandId,
128
+ remote_error: remote.error,
129
+ });
130
+ }
131
+ const remoteQuestion = remote?.question !== null && typeof remote?.question === "object"
132
+ ? remote.question
133
+ : null;
134
+ const awaitingWakeConfirmed = lane.state !== "awaiting_input" ||
135
+ (remote?.wake_status === "resumed" && remote.lane_state === "running") ||
136
+ (remote?.wake_status === "queued" && remote.lane_state === "queued") ||
137
+ ((remote?.wake_status === "awaiting_answers" || remote?.wake_status === "deferred") &&
138
+ remote.lane_state === "awaiting_input");
139
+ if (remote?.ok !== true ||
140
+ remote.action !== "questions.answer" ||
141
+ remoteQuestion?.question_id !== questionId ||
142
+ remoteQuestion.lane_id !== lane.lane_id ||
143
+ remoteQuestion.status !== "answered" ||
144
+ typeof remote.delivery !== "string" ||
145
+ !awaitingWakeConfirmed) {
146
+ throw new LanesError("outpost_delivery_unconfirmed", `Outpost ${outpostId} completed exec without confirming the answer and wake status for question ${questionId}`, {
147
+ lane_id: lane.lane_id,
148
+ question_id: questionId,
149
+ outpost_id: outpostId,
150
+ command_id: dispatched.commandId,
151
+ });
152
+ }
153
+ let ownerQuestion;
154
+ try {
155
+ ownerQuestion = parseQuestionRecord(remoteQuestion);
156
+ }
157
+ catch (err) {
158
+ throw new LanesError("outpost_delivery_unconfirmed", `Outpost ${outpostId} did not return a valid answered question record for ${questionId}: ${dispatchErrorMessage(err)}`, {
159
+ lane_id: lane.lane_id,
160
+ question_id: questionId,
161
+ outpost_id: outpostId,
162
+ command_id: dispatched.commandId,
163
+ });
164
+ }
165
+ const ownerAnswer = ownerQuestion.answer;
166
+ const ownerLaneCompany = effectiveLaneQuestionCompany(lane, ctx.hqRoot());
167
+ if (!isQuestionAnswer(ownerAnswer) ||
168
+ ownerQuestion.lane_id !== lane.lane_id ||
169
+ (ownerQuestion.company !== null && ownerLaneCompany !== null &&
170
+ !sameQuestionCompany(ownerQuestion.company, ownerLaneCompany))) {
171
+ throw new LanesError("outpost_delivery_unconfirmed", `Outpost ${outpostId} did not return the confirmed answer for question ${questionId}`, {
172
+ lane_id: lane.lane_id,
173
+ question_id: questionId,
174
+ outpost_id: outpostId,
175
+ command_id: dispatched.commandId,
176
+ });
177
+ }
178
+ const updatePrimaryCopy = () => casUpdateQuestion(ctx.hqRoot(), questionId, (current) => {
179
+ if (current.lane_id !== lane.lane_id) {
180
+ throw new LanesError("outpost_question_sync_conflict", `Primary question ${questionId} belongs to a different lane than Outpost ${outpostId} confirmed`, { lane_id: lane.lane_id, question_id: questionId, outpost_id: outpostId });
181
+ }
182
+ if (current.company !== null &&
183
+ effectiveLaneQuestionCompany(lane, ctx.hqRoot()) !== null &&
184
+ !sameQuestionCompany(current.company, effectiveLaneQuestionCompany(lane, ctx.hqRoot()))) {
185
+ throw new LanesError("outpost_question_sync_conflict", `Primary question ${questionId} belongs to a different company than Outpost ${outpostId} confirmed`, { lane_id: lane.lane_id, question_id: questionId, outpost_id: outpostId });
186
+ }
187
+ if (current.company !== null &&
188
+ ownerQuestion.company !== null &&
189
+ !sameQuestionCompany(current.company, ownerQuestion.company)) {
190
+ throw new LanesError("outpost_question_sync_conflict", `Primary question ${questionId} has a different company than Outpost ${outpostId} confirmed`, { lane_id: lane.lane_id, question_id: questionId, outpost_id: outpostId });
191
+ }
192
+ if (current.status === "pending") {
193
+ return {
194
+ ...current,
195
+ company: current.company ?? ownerQuestion.company,
196
+ status: "answered",
197
+ answer: ownerAnswer,
198
+ delivered_at: ownerQuestion.delivered_at ?? current.delivered_at ?? null,
199
+ };
200
+ }
201
+ if (current.status === "answered" && sameQuestionAnswer(current.answer, ownerAnswer)) {
202
+ const deliveredAt = ownerQuestion.delivered_at ?? current.delivered_at ?? null;
203
+ const company = current.company ?? ownerQuestion.company;
204
+ return deliveredAt === current.delivered_at && company === current.company
205
+ ? current
206
+ : { ...current, company, delivered_at: deliveredAt };
207
+ }
208
+ throw new LanesError("outpost_question_sync_conflict", `Primary question ${questionId} is ${current.status} or has a different answer than Outpost ${outpostId} confirmed`, { lane_id: lane.lane_id, question_id: questionId, outpost_id: outpostId });
209
+ });
210
+ let syncedQuestion;
211
+ try {
212
+ syncedQuestion = updatePrimaryCopy();
213
+ }
214
+ catch (err) {
215
+ if (!isLanesError(err) || err.error !== "question_not_found")
216
+ throw err;
217
+ const primaryLane = readLane(ctx.hqRoot(), lane.lane_id);
218
+ const primaryCompany = effectiveLaneQuestionCompany(primaryLane, ctx.hqRoot());
219
+ const ownerCompany = effectiveLaneQuestionCompany(lane, ctx.hqRoot());
220
+ if (primaryCompany !== null && ownerCompany !== null && !sameQuestionCompany(primaryCompany, ownerCompany)) {
221
+ throw new LanesError("outpost_question_sync_conflict", `Primary lane ${lane.lane_id} belongs to a different company than Outpost ${outpostId} confirmed`, { lane_id: lane.lane_id, question_id: questionId, outpost_id: outpostId });
222
+ }
223
+ try {
224
+ syncedQuestion = createQuestion(ctx.hqRoot(), ownerQuestion);
225
+ }
226
+ catch (createErr) {
227
+ if (!isLanesError(createErr) || createErr.error !== "question_exists")
228
+ throw createErr;
229
+ syncedQuestion = updatePrimaryCopy();
230
+ }
231
+ }
232
+ printJson({
233
+ ...remote,
234
+ lane_id: lane.lane_id,
235
+ question: syncedQuestion,
236
+ outpost_id: outpostId,
237
+ outpost_command_id: dispatched.commandId,
238
+ outpost_transport: "outposts_exec",
239
+ ...(lookupErrors.length > 0 ? { lookup_errors: lookupErrors } : {}),
240
+ });
241
+ }
242
+ async function readOutpostQuestionDetail(ctx, owner) {
243
+ if (owner.lane.host.kind !== "outpost") {
244
+ throw new LanesError("outpost_question_owner_invalid", `Question ${owner.question.question_id} does not have an Outpost owner`, { question_id: owner.question.question_id, lane_id: owner.lane.lane_id });
245
+ }
246
+ const outpostId = owner.lane.host.id;
247
+ let result;
248
+ try {
249
+ result = await ctx.dispatchOutpostExec({
250
+ outpostId,
251
+ command: buildOutpostQuestionShowCommand(owner.question.question_id),
252
+ timeoutSeconds: CAPACITY_PROBE_TIMEOUT_MS / 1000,
253
+ waitMs: CAPACITY_PROBE_TIMEOUT_MS,
254
+ });
255
+ }
256
+ catch {
257
+ throw new LanesError("outpost_question_show_unavailable", `Could not read question ${owner.question.question_id} from Outpost ${outpostId}`, { outpost_id: outpostId, question_id: owner.question.question_id });
258
+ }
259
+ if (result.done !== true || result.status !== "Success" || result.exitCode !== 0) {
260
+ throw new LanesError("outpost_question_show_unavailable", `Outpost ${outpostId} did not return question ${owner.question.question_id}`, { outpost_id: outpostId, question_id: owner.question.question_id });
261
+ }
262
+ let raw;
263
+ try {
264
+ raw = JSON.parse(result.stdout);
265
+ }
266
+ catch {
267
+ throw new LanesError("outpost_question_show_invalid", `Outpost ${outpostId} returned invalid question-show JSON`, { outpost_id: outpostId, question_id: owner.question.question_id });
268
+ }
269
+ if (raw === null ||
270
+ typeof raw !== "object" ||
271
+ Array.isArray(raw) ||
272
+ raw.ok !== true ||
273
+ raw.action !== "questions.show" ||
274
+ !Object.prototype.hasOwnProperty.call(raw, "body")) {
275
+ throw new LanesError("outpost_question_show_invalid", `Outpost ${outpostId} returned a malformed question-show response`, { outpost_id: outpostId, question_id: owner.question.question_id });
276
+ }
277
+ const response = raw;
278
+ let question;
279
+ try {
280
+ question = parseQuestionRecord(response.question);
281
+ }
282
+ catch {
283
+ throw new LanesError("outpost_question_show_invalid", `Outpost ${outpostId} returned an invalid question record`, { outpost_id: outpostId, question_id: owner.question.question_id });
284
+ }
285
+ if (question.question_id !== owner.question.question_id ||
286
+ question.lane_id !== owner.lane.lane_id) {
287
+ throw new LanesError("outpost_question_company_mismatch", `Outpost ${outpostId} returned question ${owner.question.question_id} for a different lane or company`, { outpost_id: outpostId, question_id: owner.question.question_id });
288
+ }
289
+ assertQuestionCompanyMatchesLane(question, owner.lane, "outpost_question_company_mismatch", ctx.hqRoot());
290
+ const audience = parseOutpostQuestionAudience(response.audience, outpostId, 0);
291
+ const body = parseOutpostQuestionBody(response.body, outpostId, question.question_id);
292
+ return { question, audience, body };
293
+ }
294
+ async function loadPrimaryOwnedOutpostQuestions(ctx, hqRoot, companyFilter) {
295
+ const hostedLanes = loadAllLanes(hqRoot).filter((lane) => lane.host.kind === "outpost" &&
296
+ !laneIsHostedHere(ctx, lane) &&
297
+ (!companyFilter ||
298
+ effectiveLaneQuestionCompany(lane, hqRoot) === null ||
299
+ questionCompanyRefMatches(effectiveLaneQuestionCompany(lane, hqRoot), companyFilter)));
300
+ const lanesByOutpost = new Map();
301
+ for (const lane of hostedLanes) {
302
+ if (lane.host.kind !== "outpost")
303
+ continue;
304
+ const lanes = lanesByOutpost.get(lane.host.id) ?? [];
305
+ lanes.push(lane);
306
+ lanesByOutpost.set(lane.host.id, lanes);
307
+ }
308
+ const questions = [];
309
+ const errors = [];
310
+ const eligibleGroups = [];
311
+ for (const [outpostId, lanes] of [...lanesByOutpost.entries()].sort(([a], [b]) => a.localeCompare(b))) {
312
+ for (const group of groupQuestionLanesByCompany(hqRoot, lanes, companyFilter)) {
313
+ if (group.company === null) {
314
+ errors.push({
315
+ host: `outpost:${outpostId}`,
316
+ error: "outpost_question_company_unavailable",
317
+ });
318
+ continue;
319
+ }
320
+ if (companyFilter && !questionCompanyRefMatches(group.company, companyFilter))
321
+ continue;
322
+ eligibleGroups.push({ outpostId, group });
323
+ }
324
+ }
325
+ if (eligibleGroups.length === 0) {
326
+ return { questions, errors: [...new Map(errors.map((entry) => [entry.host, entry])).values()] };
327
+ }
328
+ let knownOutpostIds;
329
+ try {
330
+ knownOutpostIds = await ctx.listOutpostIds();
331
+ }
332
+ catch {
333
+ return {
334
+ questions,
335
+ errors: [...new Map([
336
+ ...errors,
337
+ ...[...new Set(eligibleGroups.map(({ outpostId }) => outpostId))].map((outpostId) => ({
338
+ host: `outpost:${outpostId}`,
339
+ error: "outpost_list_unavailable",
340
+ })),
341
+ ].map((entry) => [entry.host, entry])).values()],
342
+ };
343
+ }
344
+ const normalizedOutpostIds = knownOutpostIds.map((id) => typeof id === "string" ? id.trim() : "");
345
+ if (knownOutpostIds.length > MAX_PLACEMENT_OUTPOSTS ||
346
+ normalizedOutpostIds.some((id) => id === "") ||
347
+ new Set(normalizedOutpostIds).size !== normalizedOutpostIds.length) {
348
+ throw new LanesError("outpost_list_invalid", "Outpost list is malformed or exceeds the placement limit", { count: knownOutpostIds.length, maximum: MAX_PLACEMENT_OUTPOSTS });
349
+ }
350
+ const knownOutpostIdSet = new Set(normalizedOutpostIds);
351
+ const loadedGroups = await mapWithConcurrency(eligibleGroups, OUTPOST_QUESTION_LOOKUP_CONCURRENCY, async ({ outpostId, group }) => {
352
+ if (!knownOutpostIdSet.has(outpostId)) {
353
+ return {
354
+ questions: [],
355
+ errors: [{ host: `outpost:${outpostId}`, error: "unknown_outpost" }],
356
+ };
357
+ }
358
+ try {
359
+ const remoteQuestions = await readOutpostQuestionRecords(ctx, outpostId, group.company);
360
+ const localLanesById = new Map(group.lanes.map((lane) => [lane.lane_id, lane]));
361
+ const groupQuestions = [];
362
+ const seenQuestionIds = new Set();
363
+ for (const { question, audience } of remoteQuestions) {
364
+ const lane = localLanesById.get(question.lane_id);
365
+ if (!lane)
366
+ continue;
367
+ assertQuestionCompanyMatchesLane(question, lane, "outpost_question_company_mismatch", hqRoot);
368
+ if (seenQuestionIds.has(question.question_id)) {
369
+ throw new LanesError("outpost_question_list_invalid", `Outpost ${outpostId} returned a duplicate question id`, { outpost_id: outpostId, question_id: question.question_id });
370
+ }
371
+ seenQuestionIds.add(question.question_id);
372
+ groupQuestions.push({
373
+ question,
374
+ lane,
375
+ host: `outpost:${outpostId}`,
376
+ audience,
377
+ });
378
+ }
379
+ return { questions: groupQuestions, errors: [] };
380
+ }
381
+ catch (err) {
382
+ return {
383
+ questions: [],
384
+ errors: [{
385
+ host: `outpost:${outpostId}`,
386
+ error: isLanesError(err) ? err.error : "outpost_question_list_unavailable",
387
+ }],
388
+ };
389
+ }
390
+ });
391
+ questions.push(...loadedGroups.flatMap(({ questions: groupQuestions }) => groupQuestions));
392
+ errors.push(...loadedGroups.flatMap(({ errors: groupErrors }) => groupErrors));
393
+ return {
394
+ questions,
395
+ errors: [...new Map(errors.map((entry) => [entry.host, entry])).values()],
396
+ };
397
+ }
398
+ async function cancelFallbackQuestionsForLane(ctx, lane, trigger, at) {
399
+ const hqRoot = ctx.hqRoot();
400
+ const caller = ctx.env.HQ_LANE_ID?.trim() || sessionIdFromEnv(ctx.env) || "user";
401
+ const reason = `Fallback ${trigger} by ${caller} at ${at}`;
402
+ const failures = [];
403
+ const cancelledQuestionIds = [];
404
+ const remoteOwner = lane.host.kind === "outpost" && !laneIsHostedHere(ctx, lane);
405
+ let pending;
406
+ try {
407
+ pending = remoteOwner
408
+ ? (await readOutpostQuestionRecords(ctx, lane.host.id, effectiveLaneQuestionCompany(lane, hqRoot)))
409
+ .map(({ question }) => question)
410
+ .filter((question) => question.origin.id === lane.lane_id && question.status === "pending")
411
+ : loadAllQuestions(hqRoot).filter((question) => question.origin.id === lane.lane_id && question.status === "pending");
412
+ }
413
+ catch (err) {
414
+ failures.push({ error: dispatchErrorMessage(err) });
415
+ pending = [];
416
+ }
417
+ for (const question of pending) {
418
+ try {
419
+ if (remoteOwner) {
420
+ const outpostId = lane.host.id;
421
+ const dispatched = await ctx.dispatchOutpostExec({
422
+ outpostId,
423
+ command: buildOutpostQuestionCancelCommand({ questionId: question.question_id, reason }),
424
+ timeoutSeconds: Math.ceil(CAPACITY_PROBE_TIMEOUT_MS / 1000),
425
+ waitMs: CAPACITY_PROBE_TIMEOUT_MS,
426
+ });
427
+ const remote = parseRemoteJson(dispatched.stdout, "Outpost question cancel");
428
+ const remoteQuestion = remote?.question !== null && typeof remote?.question === "object"
429
+ ? remote.question
430
+ : null;
431
+ if (dispatched.done !== true || dispatched.status !== "Success" || dispatched.exitCode !== 0 ||
432
+ remote?.ok !== true || remote.action !== "questions.cancel" ||
433
+ remoteQuestion?.question_id !== question.question_id || remoteQuestion.status !== "cancelled") {
434
+ throw new LanesError("outpost_question_cancel_unconfirmed", `Outpost ${outpostId} did not confirm cancellation of question ${question.question_id}`, { lane_id: lane.lane_id, question_id: question.question_id, outpost_id: outpostId });
435
+ }
436
+ }
437
+ else {
438
+ const cancellationEntry = {
439
+ hop: question.hop,
440
+ audience: resolveAudience(hqRoot, question, ctx),
441
+ at,
442
+ reason: "cancelled",
443
+ detail: reason,
444
+ };
445
+ const updated = casUpdateQuestion(hqRoot, question.question_id, (current) => {
446
+ if (current.status !== "pending")
447
+ return current;
448
+ return {
449
+ ...current,
450
+ status: "cancelled",
451
+ routing_history: appendCappedHistory(current.routing_history, cancellationEntry),
452
+ };
453
+ });
454
+ if (updated.status !== "cancelled")
455
+ continue;
456
+ }
457
+ cancelledQuestionIds.push(question.question_id);
458
+ }
459
+ catch (err) {
460
+ failures.push({ question_id: question.question_id, error: dispatchErrorMessage(err) });
461
+ }
462
+ }
463
+ if (failures.length > 0) {
464
+ const failure = {
465
+ at,
466
+ caller,
467
+ trigger,
468
+ question_ids: failures.flatMap((entry) => entry.question_id ? [entry.question_id] : []),
469
+ error: failures.map((entry) => entry.error).join("; "),
470
+ };
471
+ try {
472
+ casUpdateLane(hqRoot, lane.lane_id, (current) => {
473
+ const history = current.fallback_question_cancellation_failures ?? [];
474
+ const duplicate = history.some((entry) => entry.at === failure.at && entry.caller === caller && entry.trigger === trigger);
475
+ return duplicate
476
+ ? current
477
+ : {
478
+ ...current,
479
+ fallback_question_cancellation_failures: [...history, failure].slice(-20),
480
+ };
481
+ });
482
+ }
483
+ catch (err) {
484
+ const message = `Could not record fallback question cancellation failure for lane ${lane.lane_id}: ${dispatchErrorMessage(err)}\n`;
485
+ process.stderr.write(message);
486
+ failures.push({ error: `Failure record could not be persisted: ${dispatchErrorMessage(err)}` });
487
+ }
488
+ }
489
+ return { cancelled_question_ids: cancelledQuestionIds, failures };
490
+ }
491
+ async function hasPendingQuestionForLane(ctx, lane) {
492
+ const hqRoot = ctx.hqRoot();
493
+ const local = loadAllQuestions(hqRoot).some((question) => question.lane_id === lane.lane_id &&
494
+ question.status === "pending" &&
495
+ questionAudienceMatchesSenior(resolveAudience(hqRoot, question, ctx), lane, ctx));
496
+ if (local)
497
+ return true;
498
+ if (lane.host.kind !== "outpost" || laneIsHostedHere(ctx, lane))
499
+ return false;
500
+ // Reuse the owner lookup used by questions list/answer. An unreachable
501
+ // owner leaves no answerable question, so the message/resume path can recover.
502
+ const lookup = await loadPrimaryOwnedOutpostQuestions(ctx, hqRoot);
503
+ return lookup.questions.some(({ question, lane: ownerLane, audience }) => ownerLane.lane_id === lane.lane_id &&
504
+ question.status === "pending" &&
505
+ questionAudienceMatchesSenior(audience, ownerLane, ctx));
506
+ }
507
+ function syncPrimaryQuestionDelivery(hqRoot, owner) {
508
+ const deliveredAt = owner.question.delivered_at;
509
+ if (!deliveredAt)
510
+ return;
511
+ try {
512
+ casUpdateQuestion(hqRoot, owner.question.question_id, (current) => {
513
+ if (current.lane_id !== owner.lane.lane_id) {
514
+ throw new LanesError("outpost_question_sync_conflict", `Primary question ${current.question_id} belongs to a different lane than its Outpost owner`, { lane_id: owner.lane.lane_id, question_id: current.question_id });
515
+ }
516
+ if (current.company !== null &&
517
+ owner.question.company !== null &&
518
+ !sameQuestionCompany(current.company, owner.question.company)) {
519
+ throw new LanesError("outpost_question_sync_conflict", `Primary question ${current.question_id} belongs to a different company than its Outpost owner`, { lane_id: owner.lane.lane_id, question_id: current.question_id });
520
+ }
521
+ const company = current.company ?? owner.question.company;
522
+ const nextDeliveredAt = current.delivered_at ?? deliveredAt;
523
+ return company === current.company && nextDeliveredAt === current.delivered_at
524
+ ? current
525
+ : { ...current, company, delivered_at: nextDeliveredAt };
526
+ });
527
+ }
528
+ catch (err) {
529
+ if (isLanesError(err) && err.error === "question_not_found")
530
+ return;
531
+ throw err;
532
+ }
533
+ }
534
+ function deliverAnswerToAskingLane(ctx, question, choice, at) {
535
+ const hqRoot = ctx.hqRoot();
536
+ const laneId = laneIdForAnswerDelivery(question);
537
+ try {
538
+ const lane = readLane(hqRoot, laneId);
539
+ if (!laneAcceptsDropboxDelivery(lane)) {
540
+ return { status: "recorded_only" };
541
+ }
542
+ assertLaneRunsHereForOperatorMutation(ctx, lane, "deliver an answer to");
543
+ appendDropboxMessage(hqRoot, laneId, answerDropboxMessage(question, choice, at, mintMessageId()));
544
+ return { status: "awaiting_next_tool_call" };
545
+ }
546
+ catch (err) {
547
+ writeAnswerDeliveryFailed(hqRoot, laneId, question.question_id, err, at);
548
+ return { status: "failed" };
549
+ }
550
+ }
551
+ async function runQuestionsList(ctx, opts) {
552
+ const hqRoot = ctx.hqRoot();
553
+ const status = opts.status ? parseQuestionStatus(opts.status) : undefined;
554
+ const forFilter = opts.for ? parseForFilter(opts.for, ctx) : undefined;
555
+ const company = opts.company
556
+ ? await ctx.resolveCompany(opts.company)
557
+ : await resolveActiveQuestionCompany(ctx, "Cannot access lane questions because the active HQ company could not be resolved; re-run with --company <slug>");
558
+ const localLanes = new Map(loadAllLanes(hqRoot).map((lane) => [lane.lane_id, lane]));
559
+ const targeted = opts.from !== undefined || opts.project !== undefined || opts.story !== undefined;
560
+ const localQuestions = loadAllQuestions(hqRoot)
561
+ .filter((q) => {
562
+ if (status && q.status !== status)
563
+ return false;
564
+ if (opts.from && q.lane_id !== opts.from && q.origin.id !== opts.from)
565
+ return false;
566
+ if (opts.project && q.project_id !== opts.project)
567
+ return false;
568
+ if (opts.story && q.story_id !== opts.story)
569
+ return false;
570
+ const lane = localLanes.get(q.lane_id);
571
+ if (lane)
572
+ assertQuestionCompanyMatchesLane(q, lane, "question_company_mismatch", hqRoot);
573
+ const questionCompany = lane ? questionCompanyForLane(q, lane, hqRoot) : q.company;
574
+ if (questionCompany !== null && !sameQuestionCompany(questionCompany, company)) {
575
+ if (targeted) {
576
+ throw new LanesError("question_company_mismatch", `Question ${q.question_id} does not belong to the requested or active company`, { question_id: q.question_id, lane_id: q.lane_id });
577
+ }
578
+ return false;
579
+ }
580
+ if (forFilter) {
581
+ const audience = resolveAudience(hqRoot, q, ctx);
582
+ if (!audienceMatches(audience, forFilter))
583
+ return false;
584
+ }
585
+ return true;
586
+ });
587
+ const outpostLoad = opts.allHosts
588
+ ? await loadPrimaryOwnedOutpostQuestions(ctx, hqRoot, company)
589
+ : { questions: [], errors: [] };
590
+ for (const owner of outpostLoad.questions) {
591
+ assertQuestionCompanyAccess(owner.question, owner.lane, company, hqRoot);
592
+ syncPrimaryQuestionDelivery(hqRoot, owner);
593
+ }
594
+ const remoteQuestionIds = new Set(outpostLoad.questions.map(({ question }) => question.question_id));
595
+ const questions = [
596
+ ...localQuestions
597
+ .filter((q) => !remoteQuestionIds.has(q.question_id))
598
+ .map((q) => {
599
+ const row = {
600
+ ...q,
601
+ priority: q.priority ?? null,
602
+ priority_display: q.priority ?? "-",
603
+ audience: resolveAudience(hqRoot, q, ctx),
604
+ ...(q.question_kind === "continue" ? { flag: "continue-loop" } : {}),
605
+ };
606
+ if (!opts.allHosts)
607
+ return row;
608
+ const lane = localLanes.get(q.lane_id);
609
+ const host = lane?.host.kind === "outpost" ? `outpost:${lane.host.id}` : "local";
610
+ return { ...row, host };
611
+ }),
612
+ ...outpostLoad.questions
613
+ .filter(({ question: q, lane, audience }) => {
614
+ if (status && q.status !== status)
615
+ return false;
616
+ if (opts.from && q.lane_id !== opts.from && q.origin.id !== opts.from)
617
+ return false;
618
+ if (opts.project && q.project_id !== opts.project)
619
+ return false;
620
+ if (opts.story && q.story_id !== opts.story)
621
+ return false;
622
+ assertQuestionCompanyAccess(q, lane, company, hqRoot);
623
+ if (forFilter) {
624
+ if (!audienceMatches(audience, forFilter))
625
+ return false;
626
+ }
627
+ return true;
628
+ })
629
+ .map(({ question: q, host, audience }) => ({
630
+ ...q,
631
+ priority: q.priority ?? null,
632
+ priority_display: q.priority ?? "-",
633
+ host,
634
+ audience,
635
+ ...(q.question_kind === "continue" ? { flag: "continue-loop" } : {}),
636
+ })),
637
+ ];
638
+ printJson({
639
+ ok: true,
640
+ action: "questions.list",
641
+ questions,
642
+ ...(outpostLoad.errors.length > 0 ? { errors: outpostLoad.errors } : {}),
643
+ });
644
+ }
645
+ async function runQuestionsShow(ctx, questionId) {
646
+ const hqRoot = ctx.hqRoot();
647
+ let question;
648
+ try {
649
+ question = readQuestion(hqRoot, questionId);
650
+ }
651
+ catch (err) {
652
+ if (!isLanesError(err) || err.error !== "question_not_found")
653
+ throw err;
654
+ const lookup = await loadPrimaryOwnedOutpostQuestions(ctx, hqRoot);
655
+ if (lookup.errors.length > 0) {
656
+ throw new LanesError("outpost_question_lookup_unavailable", `Could not verify whether Outposts own question ${questionId}`, {
657
+ question_id: questionId,
658
+ hosts: lookup.errors.map(({ host, error }) => ({ host, error })),
659
+ });
660
+ }
661
+ const matches = lookup.questions.filter((entry) => entry.question.question_id === questionId);
662
+ if (matches.length === 0) {
663
+ throw new LanesError("question_not_found", `Question ${questionId} not found on this primary or its Outposts`, { question_id: questionId });
664
+ }
665
+ if (matches.length > 1) {
666
+ throw new LanesError("outpost_question_ambiguous", `Question ${questionId} is present on more than one Outpost`, { question_id: questionId, owner_count: matches.length });
667
+ }
668
+ const owner = matches[0];
669
+ if (!owner) {
670
+ throw new LanesError("outpost_question_ambiguous", `Question ${questionId} has no unique Outpost owner`, { question_id: questionId });
671
+ }
672
+ const detail = await readOutpostQuestionDetail(ctx, owner);
673
+ printJson({
674
+ ok: true,
675
+ action: "questions.show",
676
+ question: detail.question,
677
+ audience: detail.audience,
678
+ body: detail.body,
679
+ host: owner.host,
680
+ });
681
+ return;
682
+ }
683
+ const body = readQuestionBody(hqRoot, question);
684
+ printJson({
685
+ ok: true,
686
+ action: "questions.show",
687
+ question,
688
+ audience: resolveAudience(hqRoot, question, ctx),
689
+ body,
690
+ });
691
+ }
692
+ async function runQuestionsAnswer(ctx, questionId, opts) {
693
+ const hqRoot = ctx.hqRoot();
694
+ if (opts.choice !== undefined)
695
+ assertNoSecretText("answer choice", opts.choice);
696
+ if (opts.freeform !== undefined)
697
+ assertNoSecretText("freeform answer", opts.freeform);
698
+ if (opts.notes !== undefined)
699
+ assertNoSecretText("answer notes", opts.notes);
700
+ const explicitCompany = opts.company ? await ctx.resolveCompany(opts.company) : undefined;
701
+ let question;
702
+ try {
703
+ question = readQuestion(hqRoot, questionId);
704
+ }
705
+ catch (err) {
706
+ if (!isLanesError(err) || err.error !== "question_not_found")
707
+ throw err;
708
+ const company = explicitCompany ?? await resolveActiveQuestionCompany(ctx, "Cannot look up this lane question because the active HQ company could not be resolved; re-run with --company <slug>");
709
+ const lookup = await loadPrimaryOwnedOutpostQuestions(ctx, hqRoot, company);
710
+ const matches = lookup.questions.filter((entry) => entry.question.question_id === questionId);
711
+ if (matches.length === 0 && lookup.errors.length > 0) {
712
+ throw new LanesError("outpost_question_lookup_unavailable", `Could not verify whether Outposts own question ${questionId}`, {
713
+ question_id: questionId,
714
+ hosts: lookup.errors.map(({ host, error }) => ({ host, error })),
715
+ });
716
+ }
717
+ if (matches.length === 0) {
718
+ const allCompanyLookup = await loadPrimaryOwnedOutpostQuestions(ctx, hqRoot);
719
+ const otherCompanyMatch = allCompanyLookup.questions.find((entry) => entry.question.question_id === questionId);
720
+ if (otherCompanyMatch) {
721
+ assertQuestionCompanyAccess(otherCompanyMatch.question, otherCompanyMatch.lane, company, hqRoot);
722
+ }
723
+ if (allCompanyLookup.errors.length > 0) {
724
+ throw new LanesError("outpost_question_lookup_unavailable", `Could not verify whether Outposts own question ${questionId}`, {
725
+ question_id: questionId,
726
+ hosts: allCompanyLookup.errors.map(({ host, error }) => ({ host, error })),
727
+ });
728
+ }
729
+ throw new LanesError("question_not_found", `Question ${questionId} not found on this primary or its Outposts`, { question_id: questionId });
730
+ }
731
+ if (matches.length > 1) {
732
+ throw new LanesError("outpost_question_ambiguous", `Question ${questionId} is present on more than one Outpost`, { question_id: questionId, owner_count: matches.length });
733
+ }
734
+ const owner = matches[0];
735
+ if (!owner) {
736
+ throw new LanesError("question_not_found", `Question ${questionId} not found on this primary or its Outposts`, { question_id: questionId });
737
+ }
738
+ assertQuestionCompanyAccess(owner.question, owner.lane, company, hqRoot);
739
+ const ownerCompany = await resolveQuestionCompanyWithFallback(hqRoot, owner.lane, async () => explicitCompany ?? company);
740
+ assertQuestionCompanyResolvedForAnswer(owner.question, owner.lane, hqRoot, ownerCompany);
741
+ throwIfQuestionNotPending(owner.question);
742
+ await yieldEventLoop();
743
+ await dispatchOutpostQuestionAnswer(ctx, owner.lane, questionId, {
744
+ ...opts,
745
+ company: questionListCompanyArg(ownerCompany),
746
+ }, lookup.errors);
747
+ return;
748
+ }
749
+ await yieldEventLoop();
750
+ const askingLane = readLane(hqRoot, laneIdForAnswerDelivery(question));
751
+ const resolvedCompany = await resolveQuestionCompanyWithFallback(hqRoot, askingLane, async () => explicitCompany ?? question.company ?? await resolveActiveQuestionCompany(ctx, `Cannot answer legacy question ${questionId}: its company cannot be resolved from the question or lane; re-run with --company <slug>`));
752
+ const requestedCompany = explicitCompany ?? resolvedCompany;
753
+ assertQuestionCompanyAccess(question, askingLane, requestedCompany, hqRoot);
754
+ assertQuestionCompanyResolvedForAnswer(question, askingLane, hqRoot, resolvedCompany);
755
+ const questionCompany = question.company ?? effectiveLaneQuestionCompany(askingLane, hqRoot) ?? resolvedCompany;
756
+ const questionForBody = question.company === null
757
+ ? { ...question, company: questionCompany }
758
+ : question;
759
+ if (askingLane.host.kind === "outpost" && !laneIsHostedHere(ctx, askingLane)) {
760
+ await dispatchOutpostQuestionAnswer(ctx, askingLane, questionId, {
761
+ ...opts,
762
+ company: questionListCompanyArg(questionCompany),
763
+ });
764
+ return;
765
+ }
766
+ throwIfQuestionNotPending(question);
767
+ if (askingLane.state === "awaiting_input") {
768
+ assertLaneRunsHereForOperatorMutation(ctx, askingLane, "wake after answering");
769
+ }
770
+ if (laneAcceptsDropboxDelivery(askingLane)) {
771
+ assertLaneRunsHereForOperatorMutation(ctx, askingLane, "deliver an answer to");
772
+ }
773
+ const body = requireQuestionBody(hqRoot, questionForBody);
774
+ // A trimmed-empty --freeform is absent: it must not win over --choice and
775
+ // must not become a freeform answer of "".
776
+ const freeform = opts.freeform?.trim() || undefined;
777
+ if (freeform !== undefined && body.options.length === 0) {
778
+ throw new LanesError("freeform_not_allowed", "--freeform is only allowed for a question with options", { question_id: questionId });
779
+ }
780
+ if (!freeform && !opts.choice) {
781
+ throw new LanesError("missing_choice", "--choice or --freeform is required", {});
782
+ }
783
+ const choice = freeform ?? resolveAnswerChoice(opts.choice, body.options, false);
784
+ const at = ctx.now().toISOString();
785
+ const answeredBy = sessionIdFromEnv(ctx.env)
786
+ ? `session:${sessionIdFromEnv(ctx.env)}`
787
+ : "user";
788
+ const updated = casUpdateQuestion(hqRoot, questionId, (current) => {
789
+ throwIfQuestionNotPending(current);
790
+ assertQuestionCompanyAccess(current, askingLane, requestedCompany, hqRoot);
791
+ const recordedCompany = current.company ?? questionCompany;
792
+ const currentForBody = current.company === null
793
+ ? { ...current, company: recordedCompany }
794
+ : current;
795
+ let notesRef;
796
+ let nextBody = current.body;
797
+ if (opts.notes) {
798
+ const stored = writeQuestionBody(hqRoot, currentForBody, {
799
+ ...body,
800
+ notes: opts.notes,
801
+ });
802
+ notesRef = stored.ref;
803
+ nextBody = stored;
804
+ }
805
+ return {
806
+ ...current,
807
+ company: recordedCompany,
808
+ body: nextBody,
809
+ status: "answered",
810
+ answer: {
811
+ choice,
812
+ answer_kind: freeform ? "freeform" : "option",
813
+ notes_ref: notesRef,
814
+ answered_by: answeredBy,
815
+ answered_at: at,
816
+ answered_level: current.hop,
817
+ },
818
+ };
819
+ });
820
+ const latestAskingLane = readLane(hqRoot, askingLane.lane_id);
821
+ if (latestAskingLane.state === "awaiting_input") {
822
+ let wake;
823
+ try {
824
+ wake = await wakeAnsweredLaneNow(hqRoot, askingLane.lane_id, {
825
+ now: ctx.now,
826
+ host: reconcileHostFromCtx(ctx),
827
+ dryRun: false,
828
+ spawnLaneDeps: {
829
+ env: ctx.env,
830
+ existsSync: ctx.existsSync,
831
+ spawnProcess: ctx.spawnProcess,
832
+ proveDetached: ctx.proveDetached,
833
+ killProcess: ctx.killProcess,
834
+ now: ctx.now,
835
+ resolveMachineIdentity: ctx.resolveMachineIdentity,
836
+ runCompaction: ctx.runCompaction,
837
+ locateTranscript: ctx.locateTranscript,
838
+ },
839
+ throttleDeps: ctx.throttleDeps,
840
+ livenessDeps: livenessDepsFromCtx(ctx),
841
+ presenceConnected: ctx.presenceConnected,
842
+ mesh: ctx.mesh,
843
+ env: ctx.env,
844
+ });
845
+ }
846
+ catch (err) {
847
+ throw new LanesError("question_wake_failed", `Question ${questionId} was recorded, but lane ${askingLane.lane_id} could not be woken: ${dispatchErrorMessage(err)}`, { lane_id: askingLane.lane_id, question_id: questionId });
848
+ }
849
+ if (wake.status === "failed") {
850
+ throw new LanesError("question_wake_failed", `Question ${questionId} was recorded, but lane ${askingLane.lane_id} could not be woken: ${wake.error}`, { lane_id: askingLane.lane_id, question_id: questionId, wake_error: wake.error });
851
+ }
852
+ printJson({
853
+ ok: true,
854
+ action: "questions.answer",
855
+ lane_id: askingLane.lane_id,
856
+ question: updated,
857
+ delivery: wake.status === "awaiting_answers" ? "awaiting_other_answers" : wake.status,
858
+ wake_status: wake.status,
859
+ lane_state: wake.lane_state,
860
+ ...(wake.queued_reason !== undefined ? { queued_reason: wake.queued_reason } : {}),
861
+ ...(wake.remaining_question_ids !== undefined
862
+ ? { remaining_question_ids: wake.remaining_question_ids }
863
+ : {}),
864
+ });
865
+ return;
866
+ }
867
+ const delivery = deliverAnswerToAskingLane(ctx, updated, choice, at);
868
+ printJson({
869
+ ok: true,
870
+ action: "questions.answer",
871
+ question: updated,
872
+ delivery: delivery.status,
873
+ });
874
+ }
875
+ async function runQuestionsEscalate(ctx, questionId, opts) {
876
+ const hqRoot = ctx.hqRoot();
877
+ const question = readQuestion(hqRoot, questionId);
878
+ throwIfQuestionNotPending(question);
879
+ await yieldEventLoop();
880
+ const originalHop = question.hop;
881
+ const audience = resolveAudience(hqRoot, question, ctx);
882
+ if (audience.kind === "user") {
883
+ throw new LanesError("already_at_top_authority", "Cannot escalate past the user", { question_id: questionId });
884
+ }
885
+ const at = ctx.now().toISOString();
886
+ if (opts.note) {
887
+ requireQuestionBody(hqRoot, question);
888
+ }
889
+ const updated = casUpdateQuestion(hqRoot, questionId, (current) => {
890
+ throwIfQuestionNotPending(current);
891
+ if (current.hop !== originalHop) {
892
+ throw new LanesError("question_already_escalated", `Question ${questionId} hop already advanced`, {
893
+ question_id: questionId,
894
+ hop: current.hop,
895
+ expected_hop: originalHop,
896
+ });
897
+ }
898
+ let nextBody = current.body;
899
+ if (opts.note) {
900
+ const body = requireQuestionBody(hqRoot, current);
901
+ nextBody = writeQuestionBody(hqRoot, current, {
902
+ ...body,
903
+ notes: [body.notes, opts.note].filter(Boolean).join("\n"),
904
+ });
905
+ }
906
+ const nextHop = current.hop + 1;
907
+ return {
908
+ ...current,
909
+ body: nextBody,
910
+ hop: nextHop,
911
+ routing_history: appendCappedHistory(current.routing_history, {
912
+ hop: nextHop,
913
+ audience: resolveAudience(hqRoot, { ...current, hop: nextHop }, ctx),
914
+ at,
915
+ reason: "escalated",
916
+ }),
917
+ };
918
+ });
919
+ const nextAudience = resolveAudience(hqRoot, updated, ctx);
920
+ if (nextAudience.kind === "user") {
921
+ const lane = readLane(hqRoot, updated.lane_id);
922
+ await emitLaneMeshEvent(ctx, lane.mesh_company ?? lane.company, lane.thread_id, "lane_question_at_user", { lane_id: lane.lane_id, question_id: updated.question_id });
923
+ }
924
+ printJson({ ok: true, action: "questions.escalate", question: updated });
925
+ }
926
+ async function runQuestionsCancel(ctx, questionId, opts) {
927
+ const hqRoot = ctx.hqRoot();
928
+ const question = readQuestion(hqRoot, questionId);
929
+ throwIfQuestionNotPending(question);
930
+ await yieldEventLoop();
931
+ const at = ctx.now().toISOString();
932
+ const updated = casUpdateQuestion(hqRoot, questionId, (current) => {
933
+ throwIfQuestionNotPending(current);
934
+ const entry = {
935
+ hop: current.hop,
936
+ audience: resolveAudience(hqRoot, current, ctx),
937
+ at,
938
+ reason: "cancelled",
939
+ ...(opts.reason ? { detail: opts.reason } : {}),
940
+ };
941
+ return {
942
+ ...current,
943
+ status: "cancelled",
944
+ routing_history: appendCappedHistory(current.routing_history, entry),
945
+ };
946
+ });
947
+ printJson({ ok: true, action: "questions.cancel", question: updated });
948
+ }
949
+ async function runSessionsList(ctx, opts) {
950
+ const hqRoot = ctx.hqRoot();
951
+ const state = opts.state ? parseLivenessState(opts.state) : undefined;
952
+ const livenessDeps = livenessDepsFromCtx(ctx);
953
+ const presenceConnected = ctx.presenceConnected ?? readDaemonPresenceConnected(livenessDeps);
954
+ const rows = listSessionLiveness(hqRoot, {
955
+ nowMs: ctx.now().getTime(),
956
+ presenceConnected,
957
+ deps: livenessDeps,
958
+ }).filter((row) => {
959
+ if (state && row.state !== state)
960
+ return false;
961
+ if (!opts.company)
962
+ return true;
963
+ const meta = readSessionMeta(hqRoot, row.sessionId, ctx);
964
+ const slug = typeof meta?.company_slug === "string" ? meta.company_slug : "";
965
+ const uid = typeof meta?.company_uid === "string" ? meta.company_uid : "";
966
+ return slug === opts.company || uid === opts.company;
967
+ });
968
+ printJson({ ok: true, action: "sessions.list", sessions: rows });
969
+ }
970
+ async function runSessionsShow(ctx, sessionId) {
971
+ const hqRoot = ctx.hqRoot();
972
+ const livenessDeps = livenessDepsFromCtx(ctx);
973
+ const presenceConnected = ctx.presenceConnected ?? readDaemonPresenceConnected(livenessDeps);
974
+ const state = sessionLiveness(hqRoot, sessionId, {
975
+ nowMs: ctx.now().getTime(),
976
+ presenceConnected,
977
+ deps: livenessDeps,
978
+ });
979
+ if (state === null) {
980
+ throw new LanesError("session_not_found", `Session ${sessionId} is not in the liveness index`, { session_id: sessionId });
981
+ }
982
+ const meta = readSessionMeta(hqRoot, sessionId, ctx);
983
+ printJson({
984
+ ok: true,
985
+ action: "sessions.show",
986
+ session_id: sessionId,
987
+ state,
988
+ senior: meta ? seniorOfSession(hqRoot, sessionId, ctx) : { kind: "user" },
989
+ company_slug: typeof meta?.company_slug === "string" ? meta.company_slug : null,
990
+ });
991
+ }
992
+ return {
993
+ hasPendingQuestionForLane,
994
+ cancelFallbackQuestionsForLane,
995
+ runQuestionsList,
996
+ runQuestionsShow,
997
+ runQuestionsAnswer,
998
+ runQuestionsEscalate,
999
+ runQuestionsCancel,
1000
+ runSessionsList,
1001
+ runSessionsShow,
1002
+ requireQuestionBody
1003
+ };
1004
+ }
1005
+ //# sourceMappingURL=lanes-questions.js.map