@askexenow/exe-os 0.9.365 → 0.9.368

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 (357) hide show
  1. package/deploy/compose/.env.askexe-control-plane.example +3 -1
  2. package/deploy/compose/.env.customer.example +6 -2
  3. package/deploy/compose/.env.example +8 -2
  4. package/deploy/compose/docker-compose.yml +21 -2
  5. package/deploy/compose/generate-env.ts +21 -1
  6. package/dist/.dist-verified.json +3 -3
  7. package/dist/{active-agent-MGF7J3HB.js → active-agent-6WNC756A.js} +3 -3
  8. package/dist/{active-agent-C6DPH43L.js → active-agent-RDTJGZHP.js} +3 -3
  9. package/dist/{agent-defs-generator-X7TVMPVB.js → agent-defs-generator-M5AUL3WM.js} +2 -2
  10. package/dist/agent-heartbeat-CQPGJIFF.js +13 -0
  11. package/dist/{agent-loop-E7RZCFDB.js → agent-loop-FOK2IRZQ.js} +1 -1
  12. package/dist/{agentic-ontology-CARDCG37.js → agentic-ontology-ZJBRYETW.js} +1 -1
  13. package/dist/{backfill-metadata-ANCJA6LA.js → backfill-metadata-Q4X23XLR.js} +5 -5
  14. package/dist/{backup-verify-F7BHVEF7.js → backup-verify-UKLX6IEK.js} +1 -1
  15. package/dist/behavior-injection-C3HEKSJY.js +60 -0
  16. package/dist/{behaviors-R2IE3PEN.js → behaviors-UCMAREU3.js} +8 -6
  17. package/dist/bin/agentic-ontology-backfill.js +6 -6
  18. package/dist/bin/agentic-reflection-backfill.js +7 -7
  19. package/dist/bin/agentic-semantic-label.js +6 -6
  20. package/dist/bin/backfill-conversations.js +5 -5
  21. package/dist/bin/backfill-responses.js +5 -5
  22. package/dist/bin/backfill-vectors.js +6 -6
  23. package/dist/bin/bulk-sync-postgres.js +10 -10
  24. package/dist/bin/cc-doctor.js +5 -5
  25. package/dist/bin/cleanup-stale-review-tasks.js +15 -14
  26. package/dist/bin/cli.js +20 -20
  27. package/dist/bin/deferred-daemon-restart.js +88 -83
  28. package/dist/bin/exe-agent-config.js +2 -2
  29. package/dist/bin/exe-agent.js +252 -14
  30. package/dist/bin/exe-assign.js +6 -6
  31. package/dist/bin/exe-boot.js +33 -31
  32. package/dist/bin/exe-call.js +4 -4
  33. package/dist/bin/exe-cloud.js +11 -11
  34. package/dist/bin/exe-config-dump.js +2 -2
  35. package/dist/bin/exe-dispatch.js +16 -15
  36. package/dist/bin/exe-doctor.js +6 -6
  37. package/dist/bin/exe-export-behaviors.js +10 -8
  38. package/dist/bin/exe-forget.js +7 -7
  39. package/dist/bin/exe-gateway.js +7 -7
  40. package/dist/bin/exe-healthcheck.js +5 -5
  41. package/dist/bin/exe-heartbeat.js +18 -17
  42. package/dist/bin/exe-kill.js +19 -18
  43. package/dist/bin/exe-launch-agent.js +25 -23
  44. package/dist/bin/exe-mcp.js +3 -3
  45. package/dist/bin/exe-memory-reads.js +5 -5
  46. package/dist/bin/exe-new-employee.js +8 -8
  47. package/dist/bin/exe-os-mcp-proxy.js +3 -3
  48. package/dist/bin/exe-pending-messages.js +16 -15
  49. package/dist/bin/exe-pending-notifications.js +15 -14
  50. package/dist/bin/exe-pending-reviews.js +15 -14
  51. package/dist/bin/exe-rename.js +4 -4
  52. package/dist/bin/exe-review.js +18 -17
  53. package/dist/bin/exe-search.js +6 -6
  54. package/dist/bin/exe-session-cleanup.js +20 -18
  55. package/dist/bin/exe-settings.js +10 -10
  56. package/dist/bin/exe-start-codex.js +81 -19
  57. package/dist/bin/exe-start-opencode.js +11 -9
  58. package/dist/bin/exe-status.js +17 -16
  59. package/dist/bin/exe-support.js +3 -3
  60. package/dist/bin/exe-team.js +4 -4
  61. package/dist/bin/exe-verify-running-images.js +123 -4
  62. package/dist/bin/exe-watchdog.js +44 -3
  63. package/dist/bin/git-sweep.js +25 -15
  64. package/dist/bin/graph-backfill.js +7 -7
  65. package/dist/bin/graph-export.js +6 -6
  66. package/dist/bin/import-history.js +10 -10
  67. package/dist/bin/install.js +90 -85
  68. package/dist/bin/intercom-check.js +4 -4
  69. package/dist/bin/mcp-sessions.js +2 -2
  70. package/dist/bin/orchestration-metrics.js +4 -4
  71. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  72. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
  73. package/dist/bin/reconcile-backlog.js +47 -6
  74. package/dist/bin/registry-proxy.js +1 -1
  75. package/dist/bin/scan-tasks.js +15 -14
  76. package/dist/bin/setup.js +1 -1
  77. package/dist/bin/shard-migrate.js +5 -5
  78. package/dist/bin/stack-update.js +35 -6
  79. package/dist/bin/verify-stack.js +11 -1
  80. package/dist/bin/vps-health-gate.js +1 -1
  81. package/dist/{boot-generation-X45BSVZY.js → boot-generation-7H7Y4KC2.js} +3 -3
  82. package/dist/{boot-review-sections-OBVRXXSF.js → boot-review-sections-4AGCECCP.js} +14 -13
  83. package/dist/build-manifest.json +910 -845
  84. package/dist/{capability-cards-57FURUMR.js → capability-cards-6KAC5D2Z.js} +2 -2
  85. package/dist/{capacity-monitor-QEL62JDO.js → capacity-monitor-J2Y4SFLA.js} +16 -15
  86. package/dist/{catchup-brief-PMXTCASA.js → catchup-brief-F2HKF2CU.js} +19 -18
  87. package/dist/{chunk-5CBGH6RA.js → chunk-2AS6FG6C.js} +3 -3
  88. package/dist/{chunk-TO6TB75E.js → chunk-2UBMXN4D.js} +2 -2
  89. package/dist/{chunk-J6I7X272.js → chunk-2UGU3V63.js} +1 -1
  90. package/dist/{chunk-45EQTS7B.js → chunk-34BMZTWV.js} +1 -1
  91. package/dist/{chunk-JYFYIGYK.js → chunk-4DGIOK6T.js} +1 -1
  92. package/dist/{chunk-T6S45OLV.js → chunk-4GVJIMMK.js} +12 -6
  93. package/dist/{chunk-IXEFO6HD.js → chunk-4L732DE5.js} +3 -3
  94. package/dist/{chunk-MXEIZUXG.js → chunk-4RRMZJLG.js} +1 -1
  95. package/dist/{chunk-3JNVB5LG.js → chunk-5IVLOOJR.js} +1 -1
  96. package/dist/chunk-5YKNEL3W.js +356 -0
  97. package/dist/{chunk-EMZHB767.js → chunk-6EXOW5ZA.js} +9 -9
  98. package/dist/{chunk-6Q263OZE.js → chunk-6P7DVFKA.js} +1 -1
  99. package/dist/{chunk-ZDUO6QBH.js → chunk-6UZ3DEQI.js} +1 -1
  100. package/dist/{chunk-DJK45U7B.js → chunk-72JZQ7EV.js} +1 -1
  101. package/dist/{chunk-22YQBVMO.js → chunk-72QUZX6J.js} +4 -4
  102. package/dist/{chunk-DYWGIPVP.js → chunk-AAL6CDMQ.js} +7 -7
  103. package/dist/{chunk-E6ORBQHP.js → chunk-AAMGHW5W.js} +1 -0
  104. package/dist/{chunk-EJ4522YM.js → chunk-AJGX4Z34.js} +1 -1
  105. package/dist/{chunk-M7EES2KM.js → chunk-BEPO36MW.js} +3 -3
  106. package/dist/{chunk-WR75WUEP.js → chunk-BFL3UB77.js} +1 -1
  107. package/dist/{chunk-NV6A5HDN.js → chunk-BFPQXPN3.js} +1 -1
  108. package/dist/{chunk-VGE6IHZB.js → chunk-BJKC6ZJU.js} +110 -86
  109. package/dist/{chunk-R7RM766N.js → chunk-BLNSUBP3.js} +3 -3
  110. package/dist/{chunk-52TIQJEQ.js → chunk-BNDHQGOY.js} +1 -1
  111. package/dist/{chunk-QYJANQWC.js → chunk-BPQWRR4H.js} +2 -2
  112. package/dist/{chunk-ANPE3TT3.js → chunk-BTGR55GX.js} +3 -3
  113. package/dist/chunk-BTSWFMEH.js +14 -0
  114. package/dist/{chunk-OPNROU5B.js → chunk-C4IJ5IS5.js} +1 -1
  115. package/dist/{chunk-BEHLIRRJ.js → chunk-C5FOA5GO.js} +14 -3
  116. package/dist/{chunk-EHHMNKOA.js → chunk-CSBD7QLZ.js} +1 -1
  117. package/dist/{chunk-EKVTRI3N.js → chunk-CU2OUUSV.js} +27 -6
  118. package/dist/{chunk-P47MPWNU.js → chunk-CXHRNESJ.js} +1 -1
  119. package/dist/{chunk-F2S3M5MB.js → chunk-DRMGPZSC.js} +2 -2
  120. package/dist/{chunk-KRUYQFSH.js → chunk-DYPKSVB7.js} +5 -5
  121. package/dist/{chunk-KSVLBATT.js → chunk-E5QQZDQN.js} +53 -0
  122. package/dist/{chunk-ODBRU6BF.js → chunk-EDB3LXBQ.js} +1542 -984
  123. package/dist/{chunk-IIZITKBV.js → chunk-EDRXCUEP.js} +4 -4
  124. package/dist/{chunk-4QKKLK3C.js → chunk-ELY5WBZX.js} +10 -10
  125. package/dist/{chunk-MPQXQ5IE.js → chunk-EZUSIF66.js} +1 -1
  126. package/dist/{chunk-DEFSN2FQ.js → chunk-FHYX64H3.js} +3 -3
  127. package/dist/{chunk-YMJOLEPE.js → chunk-FSALI4B7.js} +4 -4
  128. package/dist/{chunk-6GQYPJPG.js → chunk-FWKTZURC.js} +8 -8
  129. package/dist/{chunk-EWZYFG5Q.js → chunk-FWVPGXHD.js} +5 -5
  130. package/dist/{chunk-DWAQOEXL.js → chunk-GILYOIMP.js} +2 -2
  131. package/dist/{chunk-RZIKSE6N.js → chunk-GP3J3AOT.js} +4 -4
  132. package/dist/{chunk-LHOKWZKL.js → chunk-H6J7N3BZ.js} +1 -1
  133. package/dist/{chunk-EVPBYX2Z.js → chunk-HQSUXAB4.js} +1 -1
  134. package/dist/{chunk-IM2I7OOS.js → chunk-HTLJHSN4.js} +1 -1
  135. package/dist/{chunk-JUOZLXLH.js → chunk-HXV3DGL7.js} +1 -1
  136. package/dist/{chunk-OFGFRT5J.js → chunk-IEE6X6R2.js} +1 -1
  137. package/dist/{chunk-SP37DONS.js → chunk-IKRIUEIF.js} +1 -1
  138. package/dist/{chunk-RHX6MNWY.js → chunk-J44774XC.js} +1 -1
  139. package/dist/{chunk-7C4FUNVO.js → chunk-J77ZIMH5.js} +5 -5
  140. package/dist/{chunk-NO3M2AFM.js → chunk-JDPV7W2L.js} +1 -1
  141. package/dist/{chunk-FXPAUDCZ.js → chunk-KGPWS4KE.js} +1 -1
  142. package/dist/{chunk-L3TB7CC3.js → chunk-KM6XSFHP.js} +12 -2
  143. package/dist/{chunk-ZEKCHV43.js → chunk-KWQ7RHYD.js} +4 -4
  144. package/dist/{chunk-QFIVK3G5.js → chunk-KYVIV54Y.js} +1 -1
  145. package/dist/chunk-KZXMP6JG.js +319 -0
  146. package/dist/{chunk-AGQAGOQN.js → chunk-LJWCK2DR.js} +9 -9
  147. package/dist/{chunk-O2MEBF23.js → chunk-MCXYNYZI.js} +30 -2
  148. package/dist/{chunk-L2VZBPJJ.js → chunk-MWEIBVBS.js} +13 -1
  149. package/dist/{chunk-RVWALVDT.js → chunk-MXP27XTP.js} +2 -2
  150. package/dist/{chunk-DQ5KHWFD.js → chunk-N3CGSO3S.js} +1 -1
  151. package/dist/{chunk-ZNEBZCZR.js → chunk-NNXPIJRB.js} +1 -1
  152. package/dist/{chunk-MZJBUAC3.js → chunk-NWE3CFX7.js} +4 -4
  153. package/dist/{chunk-BRLS5OLZ.js → chunk-OBESOWFJ.js} +35 -4
  154. package/dist/{chunk-5KLQCGI5.js → chunk-OL3QP3AU.js} +171 -1
  155. package/dist/{chunk-ESTR7QUP.js → chunk-P3PAD6AA.js} +1 -1
  156. package/dist/{chunk-2FYIMTQE.js → chunk-PGF5I7EV.js} +2 -2
  157. package/dist/{agent-heartbeat-I5UPGXAU.js → chunk-PHUHIVD5.js} +4 -5
  158. package/dist/{chunk-C3UAQ3JG.js → chunk-PVWM2WMM.js} +1 -1
  159. package/dist/{chunk-EWCEUO65.js → chunk-QCSAYYL6.js} +1 -1
  160. package/dist/{chunk-SBAU735L.js → chunk-QE5KWKVU.js} +27 -6
  161. package/dist/{chunk-LZKYVMBY.js → chunk-QKZEUCTS.js} +2 -2
  162. package/dist/{chunk-POPRJKAY.js → chunk-QS6HI4B6.js} +6 -0
  163. package/dist/{chunk-JNVQGLPX.js → chunk-QT6CNCXO.js} +3 -3
  164. package/dist/{chunk-J4U5Z7VX.js → chunk-QZYYCPNL.js} +4 -4
  165. package/dist/{chunk-RD4E5G3B.js → chunk-RDIZSXXD.js} +1 -1
  166. package/dist/{chunk-2RQT7TED.js → chunk-RFWOXKVL.js} +55 -3
  167. package/dist/chunk-S2YTU74T.js +76 -0
  168. package/dist/{chunk-X6A2VWVJ.js → chunk-TP7BFVQP.js} +2 -2
  169. package/dist/{chunk-CKG6CVKI.js → chunk-TTJWPV4G.js} +1 -1
  170. package/dist/chunk-TX3Q2GIL.js +97 -0
  171. package/dist/{chunk-Q7BU5Q6I.js → chunk-UATT6BNO.js} +3 -3
  172. package/dist/{chunk-PPGPCWRC.js → chunk-UVM5ZXO2.js} +4 -4
  173. package/dist/{chunk-BATQKSLI.js → chunk-V7E37GE3.js} +2 -2
  174. package/dist/{chunk-U373MEF5.js → chunk-VD3CVNGB.js} +3 -3
  175. package/dist/{chunk-ZSZPMUNX.js → chunk-VIW62NN5.js} +126 -7
  176. package/dist/{chunk-EPNWEOOE.js → chunk-VTOO5UB3.js} +10 -10
  177. package/dist/chunk-W5MCOZTW.js +304 -0
  178. package/dist/{chunk-2ESB5SDP.js → chunk-WJOJWRN5.js} +139 -33
  179. package/dist/{chunk-CPILYY2K.js → chunk-X4MRVNR3.js} +1 -1
  180. package/dist/{chunk-EPDNWY5P.js → chunk-XBTQPQN7.js} +1 -1
  181. package/dist/{behavior-injection-XQ4B7DCF.js → chunk-XOTDAKJL.js} +24 -38
  182. package/dist/{chunk-ORNCMRIX.js → chunk-Y4AYNLXU.js} +31 -37
  183. package/dist/{chunk-WYLFDSIE.js → chunk-YGPJ7VSJ.js} +48 -10
  184. package/dist/{chunk-ZRKEUCUZ.js → chunk-ZR3VMM3X.js} +12 -10
  185. package/dist/{chunk-JITNFE4W.js → chunk-ZWONQU5S.js} +1 -1
  186. package/dist/{cleanup-graph-garbage-CAA625RJ.js → cleanup-graph-garbage-FBSQI33K.js} +8 -8
  187. package/dist/{cloud-sync-command-DBB7WRHL.js → cloud-sync-command-NHGVDTLM.js} +11 -3
  188. package/dist/{cloud-sync-db-init-V7IB23W5.js → cloud-sync-db-init-I75VOTXC.js} +1 -1
  189. package/dist/{cloud-sync-shutdown-2D3B73CJ.js → cloud-sync-shutdown-JGOFGGET.js} +2 -2
  190. package/dist/{cloud-sync-state-5DFKLWNB.js → cloud-sync-state-QF3TMMJ4.js} +3 -1
  191. package/dist/{co-activation-JVN7EBS6.js → co-activation-AE5L2SJV.js} +2 -2
  192. package/dist/{co-occurrence-526PTFGT.js → co-occurrence-O65D4SCN.js} +6 -6
  193. package/dist/codex-consolidation-PPXNBXCV.js +96 -0
  194. package/dist/{conversation-entity-extractor-JO56DB2E.js → conversation-entity-extractor-LFIDTD2O.js} +4 -4
  195. package/dist/{crdt-sync-LIJLZKFE.js → crdt-sync-NRWDBRSE.js} +1 -1
  196. package/dist/{crm-webhook-55F7Y6D2.js → crm-webhook-XOQGX6DV.js} +2 -2
  197. package/dist/{cto-delegation-gate-QIYV4KFO.js → cto-delegation-gate-ZGOAXQI2.js} +14 -13
  198. package/dist/{daemon-orchestration-Q3GJA2JJ.js → daemon-orchestration-ZMQWYYDT.js} +19 -18
  199. package/dist/dispatch-intent-journal-VV6HMZC4.js +17 -0
  200. package/dist/{doc-graph-extractor-P46R4QME.js → doc-graph-extractor-6C5JBKPP.js} +6 -6
  201. package/dist/{documents-7KFEREWO.js → documents-FKSQGSO4.js} +6 -6
  202. package/dist/{dreaming-JMUXBAPU.js → dreaming-IB3H6NDZ.js} +18 -17
  203. package/dist/{employee-boot-brief-HN63D2BY.js → employee-boot-brief-5YRTUEJH.js} +25 -21
  204. package/dist/{exe-drift-7J7GX7DP.js → exe-drift-CUWUYX3O.js} +3 -3
  205. package/dist/{exe-export-KJ7B2OBU.js → exe-export-XWENYJNM.js} +7 -7
  206. package/dist/{exe-import-HPZDWKGE.js → exe-import-OWOMRF2S.js} +7 -7
  207. package/dist/{exe-key-2PREP464.js → exe-key-P356FGK5.js} +88 -83
  208. package/dist/{exe-org-VEIISATF.js → exe-org-UKIVF3KE.js} +8 -8
  209. package/dist/{exe-snapshot-JXQFLUKA.js → exe-snapshot-AZI2WW5Y.js} +19 -18
  210. package/dist/{fast-db-init-SCXJXOYX.js → fast-db-init-FPAPF3GB.js} +1 -1
  211. package/dist/{founder-context-U2SZPLYV.js → founder-context-QTQ6V3B5.js} +2 -2
  212. package/dist/gateway/index.js +11 -11
  213. package/dist/{git-staleness-S4NDR7NX.js → git-staleness-6ACWLV5Q.js} +2 -2
  214. package/dist/{global-procedures-ZOFTOXIR.js → global-procedures-RXIKBVLZ.js} +3 -3
  215. package/dist/{graph-auto-extract-CLVTSUSB.js → graph-auto-extract-Q4A4QMOF.js} +6 -6
  216. package/dist/{graph-rag-LSJLWGXV.js → graph-rag-RLRQMY54.js} +4 -4
  217. package/dist/{hook-integrity-SGTKBL6W.js → hook-integrity-3X2JRLBM.js} +1 -1
  218. package/dist/{hook-prefetch-BDSLB6F4.js → hook-prefetch-DU44UZQP.js} +15 -14
  219. package/dist/hooks/bug-report-worker.js +19 -18
  220. package/dist/hooks/codex-stop-task-finalizer.js +20 -19
  221. package/dist/hooks/commit-complete.js +35 -19
  222. package/dist/hooks/error-recall.js +8 -8
  223. package/dist/hooks/exe-heartbeat-hook.js +4 -4
  224. package/dist/hooks/ingest-worker.js +2 -2
  225. package/dist/hooks/ingest.js +11 -11
  226. package/dist/hooks/instructions-loaded.js +5 -5
  227. package/dist/hooks/manifest.json +20 -20
  228. package/dist/hooks/notification.js +5 -5
  229. package/dist/hooks/post-compact.js +4 -4
  230. package/dist/hooks/post-tool-combined.js +12 -12
  231. package/dist/hooks/pre-compact.js +18 -17
  232. package/dist/hooks/pre-tool-use.js +86 -34
  233. package/dist/hooks/prompt-submit.js +36 -31
  234. package/dist/hooks/session-end.js +114 -100
  235. package/dist/hooks/session-start.js +16 -16
  236. package/dist/hooks/stop.js +83 -20
  237. package/dist/hooks/subagent-stop.js +19 -18
  238. package/dist/hooks/summary-worker.js +23 -22
  239. package/dist/index.js +27 -26
  240. package/dist/{installer-RC2JCKSE.js → installer-B7QYQE56.js} +8 -6
  241. package/dist/{installer-EA7T3PBD.js → installer-EXR25DDG.js} +6 -6
  242. package/dist/{installer-KCEM4RCG.js → installer-TOPA7673.js} +152 -8
  243. package/dist/{intercom-queue-6DZPHHQ2.js → intercom-queue-BZ4M3L4S.js} +14 -13
  244. package/dist/lib/cloud-sync.js +10 -10
  245. package/dist/lib/consolidation.js +8 -8
  246. package/dist/lib/database.js +2 -2
  247. package/dist/lib/db-backup.js +1 -1
  248. package/dist/lib/db-write-worker.js +3 -3
  249. package/dist/lib/db.js +2 -2
  250. package/dist/lib/delivery-truth.js +25 -0
  251. package/dist/lib/device-registry.js +1 -1
  252. package/dist/lib/employee-templates.js +4 -4
  253. package/dist/lib/employees.js +2 -2
  254. package/dist/lib/exe-daemon.js +185 -79
  255. package/dist/lib/hybrid-search.js +6 -6
  256. package/dist/lib/identity.js +2 -2
  257. package/dist/lib/license.js +2 -2
  258. package/dist/lib/messaging.js +15 -14
  259. package/dist/lib/registry-proxy.js +1 -1
  260. package/dist/lib/reminders.js +3 -3
  261. package/dist/lib/schedules.js +6 -6
  262. package/dist/lib/session-registry.js +4 -4
  263. package/dist/lib/skill-learning.js +7 -7
  264. package/dist/lib/status-brief.js +2 -1
  265. package/dist/lib/store.js +5 -5
  266. package/dist/lib/task-router.js +3 -3
  267. package/dist/lib/tasks.js +16 -15
  268. package/dist/lib/tmux-routing.js +14 -13
  269. package/dist/lib/token-spend.js +3 -3
  270. package/dist/{license-gate-HMSMUIAU.js → license-gate-YTIOLKVV.js} +3 -3
  271. package/dist/{license-sync-FBCMPC4J.js → license-sync-5VE5OSTV.js} +2 -2
  272. package/dist/mcp/register-tools.js +87 -82
  273. package/dist/mcp/server.js +90 -85
  274. package/dist/mcp/tools/complete-reminder.js +4 -4
  275. package/dist/mcp/tools/create-reminder.js +4 -4
  276. package/dist/mcp/tools/create-task.js +26 -23
  277. package/dist/mcp/tools/deactivate-behavior.js +8 -8
  278. package/dist/mcp/tools/list-reminders.js +4 -4
  279. package/dist/mcp/tools/list-tasks.js +18 -17
  280. package/dist/mcp/tools/send-message.js +17 -16
  281. package/dist/mcp/tools/update-task.js +17 -16
  282. package/dist/{mcp-http-config-YKJN52HG.js → mcp-http-config-XUNRIGQH.js} +3 -3
  283. package/dist/{mcp-session-identity-QLUVYWPR.js → mcp-session-identity-4UIG7KLK.js} +14 -13
  284. package/dist/{memory-cards-K2OSX4AW.js → memory-cards-R74YU4CO.js} +5 -5
  285. package/dist/{memory-graph-extractor-YLTSKLSY.js → memory-graph-extractor-3B4QJUXI.js} +7 -7
  286. package/dist/{memory-poisoning-defense-IPO4ADRL.js → memory-poisoning-defense-OAKFL5O2.js} +2 -2
  287. package/dist/{memory-pressure-watchdog-ZI3TH2OF.js → memory-pressure-watchdog-FFC2CHFJ.js} +15 -14
  288. package/dist/{memory-reflection-ZKVRU3NT.js → memory-reflection-5IJ6RE2J.js} +2 -2
  289. package/dist/{notification-ledger-4REL6M3T.js → notification-ledger-P5XBUYKO.js} +17 -15
  290. package/dist/{notifications-UXJUAP3C.js → notifications-LLCCHRYV.js} +14 -13
  291. package/dist/{orchestration-events-GMRGGBMN.js → orchestration-events-VBGCIQSS.js} +3 -3
  292. package/dist/{orchestrator-5TV75HDJ.js → orchestrator-EB3SCTAJ.js} +16 -15
  293. package/dist/{org-brief-session-7AZZEO3F.js → org-brief-session-GDCDKBFF.js} +6 -6
  294. package/dist/{org-consent-policy-XT6UZENB.js → org-consent-policy-HCD42NBN.js} +2 -2
  295. package/dist/{org-partner-runtime-WLZAZJIY.js → org-partner-runtime-TPVKFR6E.js} +6 -6
  296. package/dist/{org-row-visibility-A5XM4MVO.js → org-row-visibility-ZZLOPZLH.js} +1 -1
  297. package/dist/{pipeline-router-UEVXDUHR.js → pipeline-router-3JTL2KF6.js} +3 -3
  298. package/dist/{plan-limits-QEP32X4W.js → plan-limits-MTHRP4WY.js} +5 -5
  299. package/dist/{projection-worker-GMRC6SBH.js → projection-worker-FLASNERC.js} +2 -2
  300. package/dist/{prospective-memory-QLHSAPSG.js → prospective-memory-HI3WUY4U.js} +2 -2
  301. package/dist/{push-notifications-GKRPXOGI.js → push-notifications-DFSR6P7V.js} +15 -14
  302. package/dist/{reranker-GB4VEMUV.js → reranker-XHBKUDGG.js} +1 -1
  303. package/dist/{retrieval-health-QIBPBGN6.js → retrieval-health-NYKSDS6M.js} +1 -1
  304. package/dist/{review-polling-MU47NQ2N.js → review-polling-UAV6DZIZ.js} +15 -14
  305. package/dist/runtime/index.js +23 -22
  306. package/dist/{session-events-YMQ3VGBJ.js → session-events-YCYPLWPG.js} +15 -14
  307. package/dist/{session-kill-telemetry-VGPKE57M.js → session-kill-telemetry-UEJTHL65.js} +15 -14
  308. package/dist/{session-scope-P46KAHXQ.js → session-scope-LXDW7LJJ.js} +14 -13
  309. package/dist/{setup-wizard-BRNHSJ4U.js → setup-wizard-OVJQYUUL.js} +1 -1
  310. package/dist/{skill-refinement-NLYDSFEH.js → skill-refinement-EWRJID73.js} +3 -3
  311. package/dist/{stack-promote-NHFTNIM2.js → stack-promote-4IJM36OG.js} +5 -4
  312. package/dist/{stack-release-AQVKZUS7.js → stack-release-BAIRY65H.js} +5 -4
  313. package/dist/{stack-update-LLX5KT7G.js → stack-update-VDM5WXRS.js} +10 -3
  314. package/dist/stalled-dispatch-escalation-MHLYH2PT.js +80 -0
  315. package/dist/{steward-gate-JKHYFAHA.js → steward-gate-Y4N2XY3R.js} +3 -3
  316. package/dist/{subagent-brief-injection-VDVOHDOU.js → subagent-brief-injection-7A6JEVTP.js} +22 -20
  317. package/dist/{support-inbox-S6YO5YZU.js → support-inbox-LT4WJECQ.js} +4 -3
  318. package/dist/{task-enforcement-LXW45H5Z.js → task-enforcement-WOIZ5TLK.js} +15 -14
  319. package/dist/{task-request-inbox-UCSKDC3R.js → task-request-inbox-D65BPUKZ.js} +2 -2
  320. package/dist/{task-scope-GDLFE26E.js → task-scope-PQ67YRWP.js} +18 -16
  321. package/dist/{tasks-crud-W7VGWRUV.js → tasks-crud-TJNMUKKH.js} +14 -13
  322. package/dist/{tasks-notify-CT7NWCS4.js → tasks-notify-7UVC3VGI.js} +15 -14
  323. package/dist/{tasks-review-WCSKOUFW.js → tasks-review-WDWYISZ2.js} +14 -13
  324. package/dist/{telemetry-upload-FK5WKXVB.js → telemetry-upload-6LBGRJUE.js} +7 -7
  325. package/dist/{token-budget-GBNGSIU3.js → token-budget-XO5XW6DL.js} +3 -3
  326. package/dist/{tool-gates-3IC7DK4R.js → tool-gates-2OZY3GZM.js} +1 -1
  327. package/dist/{tool-gates-GXSYBVK4.js → tool-gates-7PLIOLAL.js} +1 -1
  328. package/dist/{tool-telemetry-VKMRS6MP.js → tool-telemetry-ZL6TTZWG.js} +1 -1
  329. package/dist/tui/App.js +23 -22
  330. package/dist/{tui-data-FTPV2XBQ.js → tui-data-UK7ZPKN4.js} +14 -13
  331. package/dist/{update-support-J6UWPUOC.js → update-support-BGL5KAZO.js} +12 -12
  332. package/dist/work-claims-XZL2DKQ3.js +53 -0
  333. package/dist/{work-state-heartbeat-4LDF6DSM.js → work-state-heartbeat-267YQ75U.js} +1 -1
  334. package/dist/{worker-gate-35VZINZG.js → worker-gate-RUM6MLIR.js} +1 -1
  335. package/dist/{workflow-engine-4DA6RSHI.js → workflow-engine-YQHGHKSJ.js} +2 -2
  336. package/dist/{worktree-H3YFJ3NU.js → worktree-3FO6EQ4G.js} +4 -4
  337. package/dist/{worktree-sweep-4EDLLQ2E.js → worktree-sweep-X7MUEEQS.js} +5 -5
  338. package/package.json +7 -2
  339. package/release-notes.json +93 -81
  340. /package/dist/{chunk-7Y6AQWVT.js → chunk-4AN2PWUK.js} +0 -0
  341. /package/dist/{chunk-7DMCAGSC.js → chunk-5U4UJGTW.js} +0 -0
  342. /package/dist/{chunk-3THNS2T7.js → chunk-EYIX6JU7.js} +0 -0
  343. /package/dist/{chunk-QYECRPGD.js → chunk-FDA45THL.js} +0 -0
  344. /package/dist/{chunk-MBBFL2SP.js → chunk-GIO4VU4J.js} +0 -0
  345. /package/dist/{chunk-LKYGSJ2E.js → chunk-I76LRCNA.js} +0 -0
  346. /package/dist/{chunk-UY6HRDB2.js → chunk-LBWEAQ6Z.js} +0 -0
  347. /package/dist/{chunk-VS4LPG66.js → chunk-MQ5RUHNZ.js} +0 -0
  348. /package/dist/{chunk-G2EAYH4U.js → chunk-PFCE4AXQ.js} +0 -0
  349. /package/dist/{chunk-3NBWARKC.js → chunk-SXAERZL2.js} +0 -0
  350. /package/dist/{chunk-BY7WWPRM.js → chunk-TKTQRSSD.js} +0 -0
  351. /package/dist/{chunk-JRPYLUXH.js → chunk-U2AZUMBZ.js} +0 -0
  352. /package/dist/{chunk-CMBF5WCL.js → chunk-W6FVADZS.js} +0 -0
  353. /package/dist/{core-memory-CMPPHJN5.js → core-memory-W5ZHHBRR.js} +0 -0
  354. /package/dist/{memory-isolation-ZB5S5HCO.js → memory-isolation-ZE7EDBO4.js} +0 -0
  355. /package/dist/{oauth-server-NP7KGF7N.js → oauth-server-3HG62YYJ.js} +0 -0
  356. /package/dist/{project-boot-LEZSK3W7.js → project-boot-3OAWKYLO.js} +0 -0
  357. /package/dist/{wiki-acl-5DKOWOIH.js → wiki-acl-FQV4E6M4.js} +0 -0
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getIdentity,
3
3
  loadEmployeesSync
4
- } from "./chunk-BRLS5OLZ.js";
4
+ } from "./chunk-OBESOWFJ.js";
5
5
  import "./chunk-TKDITWDN.js";
6
6
  import "./chunk-BBMTVAE3.js";
7
7
  import "./chunk-5YEUPUV4.js";
8
- import "./chunk-NO3M2AFM.js";
8
+ import "./chunk-JDPV7W2L.js";
9
9
  import "./chunk-YYB5PMTK.js";
10
10
  import {
11
11
  getRoleCapabilities
@@ -8,27 +8,28 @@ import {
8
8
  isAtCapacity,
9
9
  isWithinRelaunchCooldown,
10
10
  pollCapacityDead
11
- } from "./chunk-KRUYQFSH.js";
12
- import "./chunk-ANPE3TT3.js";
13
- import "./chunk-ORNCMRIX.js";
14
- import "./chunk-ESTR7QUP.js";
15
- import "./chunk-FXPAUDCZ.js";
16
- import "./chunk-QFIVK3G5.js";
11
+ } from "./chunk-DYPKSVB7.js";
12
+ import "./chunk-BTGR55GX.js";
13
+ import "./chunk-Y4AYNLXU.js";
14
+ import "./chunk-BTSWFMEH.js";
15
+ import "./chunk-P3PAD6AA.js";
16
+ import "./chunk-KGPWS4KE.js";
17
+ import "./chunk-KYVIV54Y.js";
17
18
  import "./chunk-WT4RI36X.js";
18
- import "./chunk-C3UAQ3JG.js";
19
19
  import "./chunk-KI5PFRG6.js";
20
+ import "./chunk-QAEWWYHL.js";
20
21
  import "./chunk-EIKATSE4.js";
21
22
  import "./chunk-E23LNUWJ.js";
22
- import "./chunk-QAEWWYHL.js";
23
- import "./chunk-EHHMNKOA.js";
23
+ import "./chunk-CSBD7QLZ.js";
24
24
  import "./chunk-GBNB4EWD.js";
25
25
  import "./chunk-UXLO7VHX.js";
26
26
  import "./chunk-DSOQUQTV.js";
27
- import "./chunk-WR75WUEP.js";
27
+ import "./chunk-BFL3UB77.js";
28
28
  import "./chunk-AJIXH5JF.js";
29
+ import "./chunk-PVWM2WMM.js";
29
30
  import "./chunk-XTWHNLGD.js";
30
31
  import "./chunk-AM7S2TY6.js";
31
- import "./chunk-2FYIMTQE.js";
32
+ import "./chunk-PGF5I7EV.js";
32
33
  import "./chunk-CVYC6DUW.js";
33
34
  import "./chunk-ZVTKWWLV.js";
34
35
  import "./chunk-CDUB5Q6J.js";
@@ -40,20 +41,20 @@ import "./chunk-W2IRQJ6R.js";
40
41
  import "./chunk-HYZV25LY.js";
41
42
  import "./chunk-GJV3WDWM.js";
42
43
  import "./chunk-MP2AFCGL.js";
43
- import "./chunk-BRLS5OLZ.js";
44
+ import "./chunk-OBESOWFJ.js";
44
45
  import "./chunk-TKDITWDN.js";
45
46
  import "./chunk-BBMTVAE3.js";
46
47
  import "./chunk-5YEUPUV4.js";
47
- import "./chunk-NO3M2AFM.js";
48
+ import "./chunk-JDPV7W2L.js";
48
49
  import "./chunk-YYB5PMTK.js";
49
50
  import "./chunk-NJFJWQNN.js";
50
51
  import "./chunk-V3W3SATA.js";
51
52
  import "./chunk-JY5GAZYC.js";
52
53
  import "./chunk-FXU7JOXK.js";
53
54
  import "./chunk-WNBZJSQT.js";
54
- import "./chunk-ZDUO6QBH.js";
55
+ import "./chunk-6UZ3DEQI.js";
55
56
  import "./chunk-A7XLR3K7.js";
56
- import "./chunk-VS4LPG66.js";
57
+ import "./chunk-MQ5RUHNZ.js";
57
58
  import "./chunk-QILQ5FCG.js";
58
59
  import "./chunk-ARX6TAGN.js";
59
60
  import "./chunk-QMSEL5YS.js";
@@ -1,37 +1,38 @@
1
1
  import {
2
2
  lightweightSearch
3
- } from "./chunk-EMZHB767.js";
3
+ } from "./chunk-6EXOW5ZA.js";
4
4
  import "./chunk-VMHZSZQJ.js";
5
- import "./chunk-4QKKLK3C.js";
6
- import "./chunk-QYECRPGD.js";
5
+ import "./chunk-ELY5WBZX.js";
6
+ import "./chunk-FDA45THL.js";
7
7
  import "./chunk-CHCA3ZM2.js";
8
8
  import "./chunk-OTVEIJUQ.js";
9
- import "./chunk-7DMCAGSC.js";
9
+ import "./chunk-5U4UJGTW.js";
10
10
  import "./chunk-5MOYSU5A.js";
11
11
  import "./chunk-4QCFFW2H.js";
12
12
  import "./chunk-76CJBM36.js";
13
13
  import {
14
14
  sessionScopeFilter,
15
15
  strictSessionScopeFilter
16
- } from "./chunk-ORNCMRIX.js";
17
- import "./chunk-ESTR7QUP.js";
18
- import "./chunk-FXPAUDCZ.js";
19
- import "./chunk-QFIVK3G5.js";
16
+ } from "./chunk-Y4AYNLXU.js";
17
+ import "./chunk-BTSWFMEH.js";
18
+ import "./chunk-P3PAD6AA.js";
19
+ import "./chunk-KGPWS4KE.js";
20
+ import "./chunk-KYVIV54Y.js";
20
21
  import "./chunk-WT4RI36X.js";
21
- import "./chunk-C3UAQ3JG.js";
22
22
  import "./chunk-KI5PFRG6.js";
23
+ import "./chunk-QAEWWYHL.js";
23
24
  import "./chunk-EIKATSE4.js";
24
25
  import "./chunk-E23LNUWJ.js";
25
- import "./chunk-QAEWWYHL.js";
26
- import "./chunk-EHHMNKOA.js";
26
+ import "./chunk-CSBD7QLZ.js";
27
27
  import "./chunk-GBNB4EWD.js";
28
28
  import "./chunk-UXLO7VHX.js";
29
29
  import "./chunk-DSOQUQTV.js";
30
- import "./chunk-WR75WUEP.js";
30
+ import "./chunk-BFL3UB77.js";
31
31
  import "./chunk-AJIXH5JF.js";
32
+ import "./chunk-PVWM2WMM.js";
32
33
  import "./chunk-XTWHNLGD.js";
33
34
  import "./chunk-AM7S2TY6.js";
34
- import "./chunk-2FYIMTQE.js";
35
+ import "./chunk-PGF5I7EV.js";
35
36
  import "./chunk-CVYC6DUW.js";
36
37
  import "./chunk-ZVTKWWLV.js";
37
38
  import "./chunk-CDUB5Q6J.js";
@@ -45,11 +46,11 @@ import "./chunk-GJV3WDWM.js";
45
46
  import "./chunk-MP2AFCGL.js";
46
47
  import {
47
48
  getClient
48
- } from "./chunk-BRLS5OLZ.js";
49
+ } from "./chunk-OBESOWFJ.js";
49
50
  import "./chunk-TKDITWDN.js";
50
51
  import "./chunk-BBMTVAE3.js";
51
52
  import "./chunk-5YEUPUV4.js";
52
- import "./chunk-NO3M2AFM.js";
53
+ import "./chunk-JDPV7W2L.js";
53
54
  import "./chunk-YYB5PMTK.js";
54
55
  import "./chunk-NJFJWQNN.js";
55
56
  import "./chunk-V3W3SATA.js";
@@ -57,9 +58,9 @@ import "./chunk-JY5GAZYC.js";
57
58
  import "./chunk-FXU7JOXK.js";
58
59
  import "./chunk-HPXFKUGU.js";
59
60
  import "./chunk-WNBZJSQT.js";
60
- import "./chunk-ZDUO6QBH.js";
61
+ import "./chunk-6UZ3DEQI.js";
61
62
  import "./chunk-A7XLR3K7.js";
62
- import "./chunk-VS4LPG66.js";
63
+ import "./chunk-MQ5RUHNZ.js";
63
64
  import "./chunk-QILQ5FCG.js";
64
65
  import "./chunk-ARX6TAGN.js";
65
66
  import "./chunk-QMSEL5YS.js";
@@ -171,7 +172,7 @@ ${msgLines}`);
171
172
  } catch {
172
173
  }
173
174
  try {
174
- const { getPendingProspective, markSurfaced } = await import("./prospective-memory-QLHSAPSG.js");
175
+ const { getPendingProspective, markSurfaced } = await import("./prospective-memory-HI3WUY4U.js");
175
176
  const due = await getPendingProspective(agentId, { projectName, limit: 5 });
176
177
  if (due.length > 0) {
177
178
  const now = Date.now();
@@ -4,10 +4,10 @@ import {
4
4
  import {
5
5
  reserveVersions,
6
6
  vectorToBlob
7
- } from "./chunk-4QKKLK3C.js";
7
+ } from "./chunk-ELY5WBZX.js";
8
8
  import {
9
9
  getClient
10
- } from "./chunk-BRLS5OLZ.js";
10
+ } from "./chunk-OBESOWFJ.js";
11
11
 
12
12
  // src/lib/documents.ts
13
13
  import crypto from "crypto";
@@ -270,7 +270,7 @@ async function ingestDocument(input) {
270
270
  await client.batch([documentStmt, ...chunkStmts], "write");
271
271
  const embedded = vectors.filter((v) => v !== null).length;
272
272
  const originalTexts = input.chunks.map((c) => c.text);
273
- import("./doc-graph-extractor-P46R4QME.js").then(
273
+ import("./doc-graph-extractor-6C5JBKPP.js").then(
274
274
  ({ extractAndStoreDocumentGraph }) => extractAndStoreDocumentGraph(documentId, originalTexts)
275
275
  ).catch((err) => {
276
276
  process.stderr.write(
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  withScopedReadWindow
3
- } from "./chunk-DWAQOEXL.js";
3
+ } from "./chunk-GILYOIMP.js";
4
4
  import {
5
5
  requireOrgPartnerBinding,
6
6
  resolvePartnerIdentities
@@ -22,7 +22,7 @@ import {
22
22
  sealMailboxEnvelope,
23
23
  unrecordedText,
24
24
  verifyManifest
25
- } from "./chunk-DYWGIPVP.js";
25
+ } from "./chunk-AAL6CDMQ.js";
26
26
  import {
27
27
  queueMailboxDeposit
28
28
  } from "./chunk-4LWBC7CM.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-BRLS5OLZ.js";
3
+ } from "./chunk-OBESOWFJ.js";
4
4
 
5
5
  // src/lib/token-budget.ts
6
6
  var WARN_THRESHOLD = 0.8;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listReminders
3
- } from "./chunk-RD4E5G3B.js";
3
+ } from "./chunk-RDIZSXXD.js";
4
4
 
5
5
  // src/mcp/tools/list-reminders.ts
6
6
  import { z } from "zod";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  flushBatch,
6
6
  writeMemory
7
- } from "./chunk-4QKKLK3C.js";
7
+ } from "./chunk-ELY5WBZX.js";
8
8
  import {
9
9
  redactSecrets
10
10
  } from "./chunk-4QCFFW2H.js";
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  loadLicense,
10
10
  readCachedLicenseToken
11
- } from "./chunk-ZDUO6QBH.js";
11
+ } from "./chunk-6UZ3DEQI.js";
12
12
  import {
13
13
  EXE_AI_DIR,
14
14
  loadConfig
@@ -213,18 +213,24 @@ async function maybeCloseAdmin(id, adminEndpoint, version, config) {
213
213
  const res = await fetch(`${adminEndpoint}/${encodeURIComponent(id)}`, {
214
214
  method: "PATCH",
215
215
  headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
216
+ // The smoke report is NOT a defect, so there is no fix commit and no defect
217
+ // absence to evidence — it can never produce a verification artifact, and
218
+ // `closed` now requires one (bug e9ba4b47). Resolving it as `wontfix` is the
219
+ // honest terminal state for a synthetic record and is deliberately ungated:
220
+ // declining to fix something is a judgement, not a claim that a defect is gone.
221
+ // Forging an artifact to keep the word "closed" would defeat the gate this
222
+ // health check exists alongside.
216
223
  body: JSON.stringify({
217
- status: "closed",
218
- triage_notes: "Auto-closed synthetic support smoke test.",
219
- fixed_version: version
224
+ status: "wontfix",
225
+ triage_notes: `Synthetic support smoke test from exe-os ${version} \u2014 not a defect, auto-resolved.`
220
226
  }),
221
227
  signal: AbortSignal.timeout(1e4)
222
228
  });
223
229
  return {
224
230
  check: "askexe_admin_autoclose",
225
231
  level: res.ok ? "pass" : "warn",
226
- detail: res.ok ? "closed" : `${res.status} ${await res.text()}`,
227
- next: res.ok ? void 0 : "Report was sent; AskExe can close the smoke report manually."
232
+ detail: res.ok ? "resolved wontfix" : `${res.status} ${await res.text()}`,
233
+ next: res.ok ? void 0 : "Report was sent; AskExe can resolve the smoke report manually."
228
234
  };
229
235
  } catch (err) {
230
236
  return {
@@ -4,17 +4,17 @@ import {
4
4
  resolveExeSession,
5
5
  sendIntercom,
6
6
  strictSessionScopeFilter
7
- } from "./chunk-ORNCMRIX.js";
7
+ } from "./chunk-Y4AYNLXU.js";
8
8
  import {
9
9
  parseMessage,
10
10
  serializeMessage
11
11
  } from "./chunk-QAEWWYHL.js";
12
12
  import {
13
13
  recordOrchestrationEventBestEffort
14
- } from "./chunk-WR75WUEP.js";
14
+ } from "./chunk-BFL3UB77.js";
15
15
  import {
16
16
  getClient
17
- } from "./chunk-BRLS5OLZ.js";
17
+ } from "./chunk-OBESOWFJ.js";
18
18
 
19
19
  // src/lib/messaging.ts
20
20
  import crypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-BRLS5OLZ.js";
3
+ } from "./chunk-OBESOWFJ.js";
4
4
 
5
5
  // src/lib/boot-generation.ts
6
6
  var SYNC_META_KEY = "daemon_boot_generation";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  checkLicense,
3
3
  loadLicense
4
- } from "./chunk-ZDUO6QBH.js";
4
+ } from "./chunk-6UZ3DEQI.js";
5
5
 
6
6
  // src/lib/license-gate.ts
7
7
  var _cachedLicense = null;
@@ -0,0 +1,356 @@
1
+ import {
2
+ getAgentLivenessReport
3
+ } from "./chunk-PHUHIVD5.js";
4
+ import {
5
+ isValidSessionScope
6
+ } from "./chunk-BTSWFMEH.js";
7
+ import {
8
+ leaseExpiryIso,
9
+ leaseNowIso
10
+ } from "./chunk-E23LNUWJ.js";
11
+ import {
12
+ getClient
13
+ } from "./chunk-OBESOWFJ.js";
14
+
15
+ // src/lib/work-claims.ts
16
+ var CLAIM_TTL_MINUTES = 90;
17
+ var CLAIM_GRACE_MINUTES = 30;
18
+ var MAX_CLAIM_AGE_HOURS = 24;
19
+ var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
20
+ var SHORT_ID_RE = /^[0-9a-f]{8}$/;
21
+ function normalizeWorkRef(raw) {
22
+ const v = raw.trim().toLowerCase();
23
+ if (UUID_RE.test(v)) return v.slice(0, 8);
24
+ if (SHORT_ID_RE.test(v)) return v;
25
+ return v.replace(/\s+/g, " ");
26
+ }
27
+ function normalizePathTarget(raw, repoRoot) {
28
+ let v = raw.trim().replace(/\\/g, "/");
29
+ if (repoRoot) {
30
+ const root = repoRoot.replace(/\\/g, "/").replace(/\/+$/, "");
31
+ if (v.startsWith(root + "/")) v = v.slice(root.length + 1);
32
+ }
33
+ v = v.replace(/^\.\//, "").replace(/^\/+/, (m) => repoRoot ? "" : m);
34
+ return v;
35
+ }
36
+ function normalizeTarget(target, opts = {}) {
37
+ if (target.kind === "path") {
38
+ const rel = normalizePathTarget(target.value, opts.repoRoot);
39
+ const project = (opts.project ?? "").trim();
40
+ const key = project ? `${project}/${rel}` : rel;
41
+ return { kind: "path", key, label: project ? `${project}/${rel}` : rel };
42
+ }
43
+ return { kind: "work_ref", key: normalizeWorkRef(target.value), label: target.value.trim() };
44
+ }
45
+ function extractWorkRefCandidates(text) {
46
+ if (!text) return [];
47
+ const out = /* @__PURE__ */ new Set();
48
+ for (const m of text.toLowerCase().matchAll(/\b[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}\b/g)) {
49
+ out.add(m[0].slice(0, 8));
50
+ }
51
+ for (const m of text.toLowerCase().matchAll(/\b[0-9a-f]{8}\b/g)) {
52
+ out.add(m[0]);
53
+ }
54
+ return [...out];
55
+ }
56
+ function rootScope(sessionName) {
57
+ const raw = (sessionName ?? "").trim();
58
+ if (!raw) return "";
59
+ const lastDash = raw.lastIndexOf("-");
60
+ return lastDash >= 0 ? raw.slice(lastDash + 1) : raw;
61
+ }
62
+ function liveSessionScopes() {
63
+ const live = /* @__PURE__ */ new Set();
64
+ try {
65
+ for (const r of getAgentLivenessReport()) {
66
+ if (r.status === "dead") continue;
67
+ const root = rootScope(r.sessionName);
68
+ if (root) live.add(root);
69
+ }
70
+ } catch {
71
+ }
72
+ return live;
73
+ }
74
+ var SELECT_COLS = "id, claim_group, target_kind, target_key, target_label, task_id, holder_session, holder_agent, note, claimed_at, lease_expires_at, updated_at";
75
+ function toRow(r) {
76
+ return {
77
+ id: String(r.id),
78
+ claimGroup: String(r.claim_group),
79
+ targetKind: String(r.target_kind),
80
+ targetKey: String(r.target_key),
81
+ targetLabel: r.target_label == null ? String(r.target_key) : String(r.target_label),
82
+ taskId: r.task_id == null ? null : String(r.task_id),
83
+ holderSession: String(r.holder_session),
84
+ holderAgent: r.holder_agent == null ? null : String(r.holder_agent),
85
+ note: r.note == null ? null : String(r.note),
86
+ claimedAt: String(r.claimed_at),
87
+ leaseExpiresAt: String(r.lease_expires_at),
88
+ updatedAt: String(r.updated_at)
89
+ };
90
+ }
91
+ function isUniqueViolation(err) {
92
+ const msg = err instanceof Error ? err.message : String(err);
93
+ return /UNIQUE constraint failed|SQLITE_CONSTRAINT_UNIQUE|duplicate key value/i.test(msg);
94
+ }
95
+ async function listClaims() {
96
+ const client = await getClient();
97
+ const res = await client.execute({
98
+ sql: `SELECT ${SELECT_COLS} FROM work_claims ORDER BY claimed_at DESC`,
99
+ args: []
100
+ });
101
+ return res.rows.map(toRow);
102
+ }
103
+ async function findConflicts(targets, holderSession) {
104
+ if (targets.length === 0) return [];
105
+ const client = await getClient();
106
+ const placeholders = targets.map(() => "(target_kind = ? AND target_key = ?)").join(" OR ");
107
+ const args = [];
108
+ for (const t of targets) args.push(t.kind, t.key);
109
+ const res = await client.execute({
110
+ sql: `SELECT ${SELECT_COLS} FROM work_claims WHERE (${placeholders})`,
111
+ args
112
+ });
113
+ const nowMs = Date.now();
114
+ const live = liveSessionScopes();
115
+ return res.rows.map(toRow).filter((r) => r.holderSession !== holderSession).filter((r) => {
116
+ const expiresMs = new Date(r.leaseExpiresAt).getTime();
117
+ if (Number.isNaN(expiresMs)) return true;
118
+ if (expiresMs >= nowMs) return true;
119
+ const ageMs = nowMs - new Date(r.claimedAt).getTime();
120
+ return live.has(r.holderSession) && ageMs < MAX_CLAIM_AGE_HOURS * 36e5;
121
+ });
122
+ }
123
+ async function findConflictsInText(text, holderSession) {
124
+ const candidates = extractWorkRefCandidates(text);
125
+ if (candidates.length === 0) return [];
126
+ return findConflicts(
127
+ candidates.map((c) => ({ kind: "work_ref", key: c, label: c })),
128
+ holderSession
129
+ );
130
+ }
131
+ async function acquireClaim(input) {
132
+ const holderSession = (input.holderSession ?? "").trim();
133
+ if (!isValidSessionScope(holderSession)) {
134
+ throw new Error(
135
+ `work-claims: refusing to claim for an invalid session scope "${holderSession}". A claim must name the owning coordinator session (e.g. exe2), not an agent or free text.`
136
+ );
137
+ }
138
+ if (input.force && !(input.reason ?? "").trim()) {
139
+ throw new Error(
140
+ "work-claims: force override requires a reason. Overriding another session's claim is a deliberate act and is recorded with who and why."
141
+ );
142
+ }
143
+ const targets = input.targets.map((t) => normalizeTarget(t, { repoRoot: input.repoRoot, project: input.project })).filter((t) => t.key.length > 0);
144
+ if (targets.length === 0) {
145
+ throw new Error("work-claims: no valid targets to claim.");
146
+ }
147
+ const seen = /* @__PURE__ */ new Set();
148
+ const unique = targets.filter((t) => {
149
+ const k = `${t.kind}\0${t.key}`;
150
+ if (seen.has(k)) return false;
151
+ seen.add(k);
152
+ return true;
153
+ });
154
+ const client = await getClient();
155
+ const now = leaseNowIso();
156
+ const nowMs = Date.parse(now);
157
+ const expiry = leaseExpiryIso(now, input.ttlMinutes ?? CLAIM_TTL_MINUTES);
158
+ const graceExpiry = leaseExpiryIso(now, CLAIM_GRACE_MINUTES);
159
+ const minClaimedAt = new Date(nowMs - MAX_CLAIM_AGE_HOURS * 36e5).toISOString();
160
+ const live = [...liveSessionScopes()];
161
+ const stmts = [];
162
+ if (live.length > 0) {
163
+ stmts.push({
164
+ sql: `UPDATE work_claims SET lease_expires_at = ?, updated_at = ? WHERE lease_expires_at < ? AND claimed_at > ? AND holder_session IN (${live.map(() => "?").join(",")})`,
165
+ args: [graceExpiry, now, now, minClaimedAt, ...live]
166
+ });
167
+ }
168
+ stmts.push({
169
+ sql: `DELETE FROM work_claims WHERE lease_expires_at < ?`,
170
+ args: [now]
171
+ });
172
+ for (const t of unique) {
173
+ if (input.force) {
174
+ stmts.push({
175
+ sql: `DELETE FROM work_claims WHERE target_kind = ? AND target_key = ?`,
176
+ args: [t.kind, t.key]
177
+ });
178
+ } else {
179
+ stmts.push({
180
+ sql: `DELETE FROM work_claims WHERE target_kind = ? AND target_key = ? AND holder_session = ?`,
181
+ args: [t.kind, t.key, holderSession]
182
+ });
183
+ }
184
+ }
185
+ const claimGroup = crypto.randomUUID();
186
+ for (const t of unique) {
187
+ stmts.push({
188
+ sql: `INSERT INTO work_claims (id, claim_group, target_kind, target_key, target_label, task_id, holder_session, holder_agent, note, claimed_at, lease_expires_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
189
+ args: [
190
+ crypto.randomUUID(),
191
+ claimGroup,
192
+ t.kind,
193
+ t.key,
194
+ t.label,
195
+ input.taskId ?? null,
196
+ holderSession,
197
+ input.holderAgent ?? null,
198
+ input.note ?? null,
199
+ now,
200
+ expiry,
201
+ now
202
+ ]
203
+ });
204
+ }
205
+ let displaced = [];
206
+ if (input.force) {
207
+ try {
208
+ displaced = await findConflicts(unique, holderSession);
209
+ } catch {
210
+ }
211
+ }
212
+ try {
213
+ await client.batch(stmts, "write");
214
+ } catch (err) {
215
+ if (!isUniqueViolation(err)) throw err;
216
+ if (live.length > 0) {
217
+ try {
218
+ await client.execute({
219
+ sql: `UPDATE work_claims SET lease_expires_at = ?, updated_at = ? WHERE lease_expires_at < ? AND claimed_at > ? AND holder_session IN (${live.map(() => "?").join(",")})`,
220
+ args: [graceExpiry, now, now, minClaimedAt, ...live]
221
+ });
222
+ } catch {
223
+ }
224
+ }
225
+ let conflicts = [];
226
+ try {
227
+ conflicts = await findConflicts(unique, holderSession);
228
+ } catch {
229
+ }
230
+ return { ok: false, claimGroup: null, claimed: [], conflicts };
231
+ }
232
+ await recordClaimEvent(
233
+ input.force ? "claim.override" : "claim.acquired",
234
+ holderSession,
235
+ input.holderAgent ?? null,
236
+ {
237
+ claimGroup,
238
+ targets: unique.map((t) => `${t.kind}:${t.key}`),
239
+ note: input.note ?? null,
240
+ reason: input.reason ?? null,
241
+ displaced: displaced.map((d) => ({
242
+ target: `${d.targetKind}:${d.targetKey}`,
243
+ holderSession: d.holderSession,
244
+ holderAgent: d.holderAgent,
245
+ claimedAt: d.claimedAt
246
+ }))
247
+ },
248
+ input.force ? "warn" : "info"
249
+ );
250
+ return { ok: true, claimGroup, claimed: unique, conflicts: [] };
251
+ }
252
+ async function releaseClaim(input) {
253
+ const holderSession = (input.holderSession ?? "").trim();
254
+ if (input.force && !(input.reason ?? "").trim()) {
255
+ throw new Error("work-claims: force release requires a reason.");
256
+ }
257
+ const client = await getClient();
258
+ let released = 0;
259
+ if (!input.claimGroup && !input.taskId && (input.targets ?? []).length === 0) {
260
+ return { released: 0 };
261
+ }
262
+ if (input.claimGroup) {
263
+ const sql = input.force ? `DELETE FROM work_claims WHERE claim_group = ?` : `DELETE FROM work_claims WHERE claim_group = ? AND holder_session = ?`;
264
+ const args = input.force ? [input.claimGroup] : [input.claimGroup, holderSession];
265
+ const res = await client.execute({ sql, args });
266
+ released += Number(res.rowsAffected ?? 0);
267
+ }
268
+ if (input.taskId) {
269
+ const sql = input.force ? `DELETE FROM work_claims WHERE task_id = ?` : `DELETE FROM work_claims WHERE task_id = ? AND holder_session = ?`;
270
+ const args = input.force ? [input.taskId] : [input.taskId, holderSession];
271
+ const res = await client.execute({ sql, args });
272
+ released += Number(res.rowsAffected ?? 0);
273
+ }
274
+ for (const raw of input.targets ?? []) {
275
+ const t = normalizeTarget(raw, { repoRoot: input.repoRoot, project: input.project });
276
+ if (!t.key) continue;
277
+ const sql = input.force ? `DELETE FROM work_claims WHERE target_kind = ? AND target_key = ?` : `DELETE FROM work_claims WHERE target_kind = ? AND target_key = ? AND holder_session = ?`;
278
+ const args = input.force ? [t.kind, t.key] : [t.kind, t.key, holderSession];
279
+ const res = await client.execute({ sql, args });
280
+ released += Number(res.rowsAffected ?? 0);
281
+ }
282
+ if (released > 0) {
283
+ await recordClaimEvent(
284
+ input.force ? "claim.force_released" : "claim.released",
285
+ holderSession,
286
+ null,
287
+ {
288
+ claimGroup: input.claimGroup ?? null,
289
+ taskId: input.taskId ?? null,
290
+ released,
291
+ reason: input.reason ?? null
292
+ },
293
+ input.force ? "warn" : "info"
294
+ );
295
+ }
296
+ return { released };
297
+ }
298
+ async function heartbeatClaims(holderSession, ttlMinutes = CLAIM_TTL_MINUTES) {
299
+ const client = await getClient();
300
+ const now = leaseNowIso();
301
+ const res = await client.execute({
302
+ sql: `UPDATE work_claims SET lease_expires_at = ?, updated_at = ? WHERE holder_session = ?`,
303
+ args: [leaseExpiryIso(now, ttlMinutes), now, holderSession]
304
+ });
305
+ return { renewed: Number(res.rowsAffected ?? 0) };
306
+ }
307
+ async function recordClaimEvent(eventType, sessionScope, agentId, payload, severity) {
308
+ try {
309
+ const { recordOrchestrationEventBestEffort } = await import("./orchestration-events-VBGCIQSS.js");
310
+ recordOrchestrationEventBestEffort({
311
+ eventType,
312
+ source: "work-claims",
313
+ severity,
314
+ sessionScope: sessionScope || null,
315
+ agentId: agentId ?? void 0,
316
+ payload
317
+ });
318
+ } catch {
319
+ }
320
+ }
321
+ async function resolveHolderSession() {
322
+ let raw = "";
323
+ try {
324
+ const { getAgentContext } = await import("./agent-context-AZTTMUHP.js");
325
+ raw = getAgentContext()?.sessionHint ?? "";
326
+ } catch {
327
+ }
328
+ if (!raw) raw = process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || "";
329
+ const root = rootScope(raw);
330
+ return isValidSessionScope(root) ? root : "";
331
+ }
332
+ function describeConflict(row, nowMs = Date.now()) {
333
+ const ageMin = Math.max(0, Math.round((nowMs - new Date(row.claimedAt).getTime()) / 6e4));
334
+ const who = row.holderAgent ? `${row.holderSession} (${row.holderAgent})` : row.holderSession;
335
+ const note = row.note ? ` \u2014 "${row.note}"` : "";
336
+ return `${row.targetKind}:${row.targetLabel} held by ${who}, ${ageMin}m ago${note}`;
337
+ }
338
+
339
+ export {
340
+ CLAIM_TTL_MINUTES,
341
+ CLAIM_GRACE_MINUTES,
342
+ MAX_CLAIM_AGE_HOURS,
343
+ normalizeWorkRef,
344
+ normalizePathTarget,
345
+ normalizeTarget,
346
+ extractWorkRefCandidates,
347
+ liveSessionScopes,
348
+ listClaims,
349
+ findConflicts,
350
+ findConflictsInText,
351
+ acquireClaim,
352
+ releaseClaim,
353
+ heartbeatClaims,
354
+ resolveHolderSession,
355
+ describeConflict
356
+ };