@askexenow/exe-os 0.9.370 → 0.9.372

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 (366) hide show
  1. package/deploy/compose/docker-compose.yml +46 -15
  2. package/deploy/stack-manifests/v0.9.json +117 -2
  3. package/dist/.dist-verified.json +3 -3
  4. package/dist/{active-agent-H5UZGJ5D.js → active-agent-GRT5MKD5.js} +3 -3
  5. package/dist/{active-agent-L6GFD4NP.js → active-agent-L2ZSSXDK.js} +3 -3
  6. package/dist/{agent-defs-generator-BARBPY6L.js → agent-defs-generator-M4ZNYIVX.js} +2 -2
  7. package/dist/{agentic-ontology-OZM624IZ.js → agentic-ontology-DMPRDEUX.js} +1 -1
  8. package/dist/{backfill-metadata-43B5R5JT.js → backfill-metadata-ZMEHJQ5M.js} +5 -5
  9. package/dist/{backup-verify-FW5GEF4B.js → backup-verify-EX2K732J.js} +1 -1
  10. package/dist/{behavior-injection-RT4ET4ZF.js → behavior-injection-22AGMS25.js} +12 -11
  11. package/dist/{behaviors-ZLEW6AIW.js → behaviors-DVFXAWF5.js} +10 -9
  12. package/dist/bin/agentic-ontology-backfill.js +6 -6
  13. package/dist/bin/agentic-reflection-backfill.js +7 -7
  14. package/dist/bin/agentic-semantic-label.js +6 -6
  15. package/dist/bin/backfill-conversations.js +8 -7
  16. package/dist/bin/backfill-responses.js +8 -7
  17. package/dist/bin/backfill-vectors.js +10 -9
  18. package/dist/bin/bulk-sync-postgres.js +14 -13
  19. package/dist/bin/cc-doctor.js +5 -5
  20. package/dist/bin/cleanup-stale-review-tasks.js +18 -17
  21. package/dist/bin/cli.js +30 -22
  22. package/dist/bin/deferred-daemon-restart.js +123 -94
  23. package/dist/bin/exe-agent-config.js +2 -2
  24. package/dist/bin/exe-agent.js +8 -8
  25. package/dist/bin/exe-assign.js +10 -9
  26. package/dist/bin/exe-boot.js +46 -35
  27. package/dist/bin/exe-call.js +4 -4
  28. package/dist/bin/exe-cloud.js +15 -14
  29. package/dist/bin/exe-config-dump.js +2 -2
  30. package/dist/bin/exe-dispatch.js +19 -18
  31. package/dist/bin/exe-doctor.js +5 -5
  32. package/dist/bin/exe-export-behaviors.js +14 -13
  33. package/dist/bin/exe-forget.js +7 -7
  34. package/dist/bin/exe-gateway.js +7 -7
  35. package/dist/bin/exe-healthcheck.js +5 -5
  36. package/dist/bin/exe-heartbeat.js +21 -20
  37. package/dist/bin/exe-kill.js +22 -21
  38. package/dist/bin/exe-launch-agent.js +29 -28
  39. package/dist/bin/exe-mcp.js +3 -3
  40. package/dist/bin/exe-memory-reads.js +5 -5
  41. package/dist/bin/exe-new-employee.js +8 -8
  42. package/dist/bin/exe-os-mcp-proxy.js +3 -3
  43. package/dist/bin/exe-pending-messages.js +19 -18
  44. package/dist/bin/exe-pending-notifications.js +18 -17
  45. package/dist/bin/exe-pending-reviews.js +18 -17
  46. package/dist/bin/exe-rename.js +4 -4
  47. package/dist/bin/exe-repo-truth.js +369 -0
  48. package/dist/bin/exe-review.js +21 -20
  49. package/dist/bin/exe-search.js +6 -6
  50. package/dist/bin/exe-session-cleanup.js +22 -21
  51. package/dist/bin/exe-settings.js +14 -13
  52. package/dist/bin/exe-start-codex.js +19 -18
  53. package/dist/bin/exe-start-opencode.js +15 -14
  54. package/dist/bin/exe-status.js +20 -19
  55. package/dist/bin/exe-support.js +3 -3
  56. package/dist/bin/exe-team.js +4 -4
  57. package/dist/bin/exe-watchdog.js +1 -1
  58. package/dist/bin/git-sweep.js +19 -18
  59. package/dist/bin/graph-backfill.js +6 -6
  60. package/dist/bin/graph-export.js +6 -6
  61. package/dist/bin/import-history.js +9 -9
  62. package/dist/bin/install-launchd.js +1 -1
  63. package/dist/bin/install.js +91 -90
  64. package/dist/bin/intercom-check.js +4 -4
  65. package/dist/bin/mcp-sessions.js +2 -2
  66. package/dist/bin/orchestration-metrics.js +4 -4
  67. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  68. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  69. package/dist/bin/reconcile-backlog.js +2 -2
  70. package/dist/bin/registry-proxy.js +1 -1
  71. package/dist/bin/scan-tasks.js +18 -17
  72. package/dist/bin/setup.js +1 -1
  73. package/dist/bin/shard-migrate.js +5 -5
  74. package/dist/bin/stack-update.js +5 -5
  75. package/dist/bin/vps-health-gate.js +1 -1
  76. package/dist/{boot-generation-Z7ZM5LE5.js → boot-generation-OHXH4YC5.js} +3 -3
  77. package/dist/{boot-review-sections-52Y62Q6M.js → boot-review-sections-N5IXIGSS.js} +17 -16
  78. package/dist/{branch-hygiene-HFJ3HA62.js → branch-hygiene-KCGXRAWP.js} +125 -73
  79. package/dist/build-manifest.json +938 -918
  80. package/dist/{capability-cards-SKMGT3G2.js → capability-cards-4PXVLIVS.js} +2 -2
  81. package/dist/{capacity-monitor-JPFS5FYT.js → capacity-monitor-FKMQXORX.js} +19 -18
  82. package/dist/{catchup-brief-R4FP7ERW.js → catchup-brief-SN5EKO4N.js} +22 -21
  83. package/dist/{chunk-3TSDANOL.js → chunk-23QKEUF6.js} +11 -11
  84. package/dist/{chunk-33VQTJ6H.js → chunk-3KTQWMHI.js} +1 -1
  85. package/dist/{chunk-QS6HI4B6.js → chunk-3TTKAT6V.js} +31 -9
  86. package/dist/{chunk-D3QU2KNF.js → chunk-44C7QNZS.js} +1 -1
  87. package/dist/{chunk-S74ZNCBS.js → chunk-4ZJ5BPY6.js} +1 -1
  88. package/dist/{chunk-FFG3OMOH.js → chunk-53PYNYTW.js} +3 -3
  89. package/dist/{chunk-VZXEDC6K.js → chunk-5AHDQCTB.js} +4 -4
  90. package/dist/{chunk-JRPGAOHL.js → chunk-5AHRZI3R.js} +1 -1
  91. package/dist/{chunk-L6BZDFWT.js → chunk-5APCDDJZ.js} +1 -1
  92. package/dist/{chunk-5XRKPKHJ.js → chunk-5DCCKHDY.js} +3 -3
  93. package/dist/{chunk-64HUCOAL.js → chunk-5V7BD7Z4.js} +9 -1
  94. package/dist/{chunk-QK26AJD7.js → chunk-6XEYELCA.js} +1 -1
  95. package/dist/{chunk-WAIFOWCF.js → chunk-77JP3LK4.js} +6 -6
  96. package/dist/{chunk-C2CQ3KXS.js → chunk-7PSLK36P.js} +1 -1
  97. package/dist/{chunk-E63E3GUT.js → chunk-7R73IAHU.js} +9 -9
  98. package/dist/{chunk-L24EAOSG.js → chunk-7V6M3QUS.js} +1 -1
  99. package/dist/{chunk-BFP7JOD7.js → chunk-7WQRFSZI.js} +3 -3
  100. package/dist/{chunk-QILQ5FCG.js → chunk-A7JYF4RG.js} +6 -0
  101. package/dist/{chunk-P5XTVIEC.js → chunk-AAUWFXOX.js} +4 -4
  102. package/dist/{chunk-OPI5HGW6.js → chunk-AMKSDKMK.js} +1 -1
  103. package/dist/{chunk-U6SWEAAK.js → chunk-CNC57JCS.js} +4 -4
  104. package/dist/{chunk-I3FXDCUE.js → chunk-DKBPCOU4.js} +50 -20
  105. package/dist/{chunk-TTAPKUQV.js → chunk-E2WEFZOR.js} +1 -1
  106. package/dist/{chunk-AYMYU3RC.js → chunk-E7UCDSUE.js} +4 -4
  107. package/dist/{chunk-AWWAZBL7.js → chunk-ECHLVLA7.js} +1 -1
  108. package/dist/{chunk-EKOB53FE.js → chunk-EEXX4UMQ.js} +1 -1
  109. package/dist/{chunk-YTDIGGFZ.js → chunk-ELXFSIIM.js} +2 -2
  110. package/dist/{chunk-XFZHTFH5.js → chunk-ERVQTR7P.js} +2 -2
  111. package/dist/{chunk-VFI3HGKM.js → chunk-FB343XQX.js} +2 -2
  112. package/dist/{chunk-MMDOULD5.js → chunk-FBYAXTDM.js} +1 -1
  113. package/dist/{chunk-XWTZEVBQ.js → chunk-GH6YJOOC.js} +5 -5
  114. package/dist/{chunk-4HNVZDCM.js → chunk-GU62SNDH.js} +1 -1
  115. package/dist/{chunk-RLWSVSDV.js → chunk-HDW4XPDV.js} +1 -1
  116. package/dist/{chunk-6LU3DRZF.js → chunk-HECXZGGZ.js} +9 -9
  117. package/dist/{chunk-DZU7LMXH.js → chunk-HHE2HV3V.js} +1 -1
  118. package/dist/{chunk-637HNKYP.js → chunk-HIIXCAEE.js} +2 -2
  119. package/dist/{chunk-REOG2KQS.js → chunk-HIVZ53YB.js} +1 -1
  120. package/dist/{chunk-QCQT5RXR.js → chunk-HV6Y6F4X.js} +95 -3
  121. package/dist/{chunk-RLDMUSRM.js → chunk-IDZPQG2D.js} +1 -1
  122. package/dist/{chunk-NHJUJWLY.js → chunk-IPMUWYRQ.js} +2 -2
  123. package/dist/chunk-IVU3WN7S.js +227 -0
  124. package/dist/{chunk-WG3B2V6A.js → chunk-JJUGI2YL.js} +1 -1
  125. package/dist/{chunk-U5MEWTAY.js → chunk-JKXZGRWR.js} +1 -1
  126. package/dist/{chunk-EJ5BRL7C.js → chunk-JOO35RHR.js} +2 -2
  127. package/dist/{chunk-FAAHUZFK.js → chunk-JR23BL74.js} +3 -3
  128. package/dist/{chunk-6FMS6DGO.js → chunk-JTWTBX2M.js} +1 -1
  129. package/dist/{chunk-DLMLM63F.js → chunk-KPMC7PY7.js} +1 -1
  130. package/dist/{chunk-RHDDSIFC.js → chunk-KXYFBBZR.js} +1 -1
  131. package/dist/{chunk-MO2A7GUU.js → chunk-KYFFVTGO.js} +1 -1
  132. package/dist/{chunk-J7OPJPYG.js → chunk-L6ZNURWN.js} +1 -1
  133. package/dist/{chunk-AJH2JOKV.js → chunk-LAZKEJMS.js} +147 -147
  134. package/dist/{chunk-KNIYPHUM.js → chunk-LDL3S7AC.js} +1 -1
  135. package/dist/{chunk-5CYFJQGV.js → chunk-MBNIJXKI.js} +3 -3
  136. package/dist/{chunk-RYDR7TRT.js → chunk-MDGYXUOV.js} +1 -1
  137. package/dist/{chunk-SUCWKBYC.js → chunk-MEGRQ53A.js} +5 -5
  138. package/dist/{chunk-MXI2DAXR.js → chunk-MINXPXAB.js} +3 -3
  139. package/dist/{chunk-CWBFOAGM.js → chunk-NQZUSEAR.js} +1 -1
  140. package/dist/{chunk-5PISZ3DK.js → chunk-O4ZFRK6W.js} +11 -11
  141. package/dist/{chunk-5GHQD5NZ.js → chunk-OKGIOWOB.js} +2 -2
  142. package/dist/{chunk-AQL6BFAP.js → chunk-OW5RZIDW.js} +8 -8
  143. package/dist/{chunk-HIIEIDD2.js → chunk-OYQNNKNS.js} +10 -10
  144. package/dist/{chunk-5SRQG3SV.js → chunk-OZBII5E3.js} +4 -4
  145. package/dist/{chunk-VMJ2UH4S.js → chunk-PGLPUP37.js} +1 -1
  146. package/dist/{chunk-ZWYPGZJA.js → chunk-PM6WSWVU.js} +2 -2
  147. package/dist/{chunk-MZVEUPJA.js → chunk-QLA3RTH4.js} +2 -2
  148. package/dist/{chunk-LKB7OV6U.js → chunk-QR624DER.js} +1 -1
  149. package/dist/{chunk-RPJIULZL.js → chunk-QTI4QAWA.js} +1 -1
  150. package/dist/{chunk-ZXZHEAWO.js → chunk-QTYJPWJN.js} +4 -4
  151. package/dist/{chunk-ZVTKWWLV.js → chunk-QZL6E4UB.js} +1 -1
  152. package/dist/{chunk-75IYPYUY.js → chunk-RBYHJDAT.js} +3 -3
  153. package/dist/{chunk-KBXPVEO5.js → chunk-RGUDGC6A.js} +4 -4
  154. package/dist/{chunk-ZSYERTWA.js → chunk-RIK5GRWI.js} +3 -3
  155. package/dist/{chunk-KDP2HV43.js → chunk-RLR6VVKV.js} +4 -4
  156. package/dist/{chunk-GL4VN2FS.js → chunk-RNLF3CBB.js} +1 -1
  157. package/dist/{chunk-D26CLVB4.js → chunk-RUVO3NJC.js} +3 -3
  158. package/dist/{chunk-DOQ5F3GZ.js → chunk-RUWWES2K.js} +2 -2
  159. package/dist/{chunk-T3TSX4XB.js → chunk-SEP5ITFQ.js} +1 -1
  160. package/dist/chunk-SI5SZAJA.js +178 -0
  161. package/dist/{chunk-3WRQAAVT.js → chunk-T4EK56WI.js} +1 -1
  162. package/dist/{chunk-NKTNJSHK.js → chunk-TGEPLJ66.js} +3 -3
  163. package/dist/{chunk-C6ILSUXT.js → chunk-TGPQMMQP.js} +3 -3
  164. package/dist/{chunk-T7QPOQMD.js → chunk-THM7J6UI.js} +4 -4
  165. package/dist/{chunk-4OVLY2NR.js → chunk-TK4MI6F6.js} +3 -3
  166. package/dist/{chunk-X4C3SORV.js → chunk-U3XLRMJD.js} +1 -1
  167. package/dist/{chunk-BJ45A2NG.js → chunk-UKLF7F3Z.js} +5 -5
  168. package/dist/{chunk-BNHAZ65R.js → chunk-UQUUNGTP.js} +5 -1
  169. package/dist/{chunk-SWVRUCVM.js → chunk-UTDMTQNH.js} +1 -1
  170. package/dist/{chunk-JMH4BGNX.js → chunk-UVW7YFAF.js} +4 -4
  171. package/dist/{chunk-IWIESOAK.js → chunk-VKXS2YGN.js} +1 -1
  172. package/dist/{chunk-KU2ASWMO.js → chunk-VX2F4ZUY.js} +2 -2
  173. package/dist/{chunk-QZ4JDQ6R.js → chunk-W25RLOQ2.js} +2 -2
  174. package/dist/{chunk-DNKCJ6KV.js → chunk-WAEKYKTK.js} +1 -1
  175. package/dist/{chunk-FB43C242.js → chunk-WUKQVNLP.js} +1 -1
  176. package/dist/{chunk-UBR5M2TY.js → chunk-WZJVGA5I.js} +1 -1
  177. package/dist/{chunk-LMZD3A6K.js → chunk-XHYHX6F7.js} +26 -26
  178. package/dist/{chunk-YXCZKTTC.js → chunk-XXSNLM6R.js} +1 -1
  179. package/dist/{chunk-PZGLP65B.js → chunk-YFCNWQAM.js} +2 -2
  180. package/dist/{chunk-DPZ7EUY5.js → chunk-YWUQVHDL.js} +1 -1
  181. package/dist/{chunk-REEX7LTW.js → chunk-ZISQOOER.js} +2 -2
  182. package/dist/{chunk-YQ3QJ3SM.js → chunk-ZXB56YR2.js} +10 -10
  183. package/dist/{chunk-XGT2AOL7.js → chunk-ZYCLSEZT.js} +2 -2
  184. package/dist/{cleanup-graph-garbage-V6GERATJ.js → cleanup-graph-garbage-IPYDS5OX.js} +7 -7
  185. package/dist/{cloud-sync-command-RVPVF3H3.js → cloud-sync-command-JLNVG7H4.js} +2 -2
  186. package/dist/{cloud-sync-db-init-GIZFUJQB.js → cloud-sync-db-init-JXUF6GI3.js} +1 -1
  187. package/dist/{cloud-sync-shutdown-PQ6YZ3PA.js → cloud-sync-shutdown-Z4SBP6PL.js} +2 -2
  188. package/dist/{co-activation-6CM4E5ZK.js → co-activation-74RDFTKS.js} +2 -2
  189. package/dist/{co-occurrence-KJ7HM3EG.js → co-occurrence-CN3TBYVR.js} +5 -5
  190. package/dist/{code-context-index-XOP6TLPZ.js → code-context-index-D4MJ4VFX.js} +4 -3
  191. package/dist/{conversation-entity-extractor-PSFZQUJ5.js → conversation-entity-extractor-QGTLH4BP.js} +3 -3
  192. package/dist/{crdt-sync-POXIZVEF.js → crdt-sync-7T4WCOKD.js} +1 -1
  193. package/dist/{crm-webhook-V2H27KYR.js → crm-webhook-FTW3XZTO.js} +2 -2
  194. package/dist/{cto-delegation-gate-J3ND5BWL.js → cto-delegation-gate-SZCE34LB.js} +17 -16
  195. package/dist/{daemon-orchestration-M62T3FS2.js → daemon-orchestration-IGPHVNFR.js} +22 -21
  196. package/dist/{daemon-ready-MKBH4QWD.js → daemon-ready-OT2VQLS7.js} +1 -1
  197. package/dist/{destructive-data-guard-5SKHIZNN.js → destructive-data-guard-6I5MDFVD.js} +1 -1
  198. package/dist/{doc-graph-extractor-3BX3UPBB.js → doc-graph-extractor-VPTRIEKN.js} +5 -5
  199. package/dist/{documents-3D5LWOXL.js → documents-URULIXGM.js} +10 -9
  200. package/dist/{dreaming-WPBIOUHX.js → dreaming-VIZO3QDO.js} +21 -20
  201. package/dist/{employee-boot-brief-LWIOXW2Y.js → employee-boot-brief-XLOG4ULP.js} +25 -24
  202. package/dist/{exe-drift-UDKYXOFS.js → exe-drift-TLQM3IHD.js} +3 -3
  203. package/dist/{exe-export-ON37IIOT.js → exe-export-7YWYWJHY.js} +11 -10
  204. package/dist/{exe-import-ORFMQV3J.js → exe-import-DW6VAUKW.js} +11 -10
  205. package/dist/{exe-key-46N4TFWU.js → exe-key-TLJP2B4Y.js} +88 -87
  206. package/dist/{exe-org-ZYY5MUFH.js → exe-org-LU46N36E.js} +12 -12
  207. package/dist/{exe-snapshot-GLD66ZHQ.js → exe-snapshot-QHUZRS62.js} +23 -22
  208. package/dist/{fast-db-init-YFY566EG.js → fast-db-init-SCTOOIUT.js} +1 -1
  209. package/dist/{founder-context-N73W5XMG.js → founder-context-ZFZC4UHO.js} +2 -2
  210. package/dist/gateway/index.js +11 -11
  211. package/dist/{git-main-guard-TGK3RQY3.js → git-main-guard-TN27QBAI.js} +11 -1
  212. package/dist/{git-staleness-TNJ3XJJ4.js → git-staleness-GSGP344N.js} +2 -2
  213. package/dist/{global-procedures-7Y7LULZC.js → global-procedures-YAR7G4C6.js} +3 -3
  214. package/dist/{graph-auto-extract-4NEJ3OXA.js → graph-auto-extract-GNQS64F5.js} +5 -5
  215. package/dist/{graph-rag-WKAUQZUN.js → graph-rag-RMSFLUOB.js} +3 -3
  216. package/dist/{hook-integrity-D7BN2SLB.js → hook-integrity-CF567MVN.js} +1 -1
  217. package/dist/{hook-prefetch-7OJQ4IJ6.js → hook-prefetch-36BK4F7U.js} +18 -17
  218. package/dist/hooks/bug-report-worker.js +22 -21
  219. package/dist/hooks/codex-stop-task-finalizer.js +23 -22
  220. package/dist/hooks/commit-complete.js +21 -20
  221. package/dist/hooks/error-recall.js +8 -8
  222. package/dist/hooks/exe-heartbeat-hook.js +4 -4
  223. package/dist/hooks/ingest-worker.js +6 -5
  224. package/dist/hooks/ingest.js +11 -11
  225. package/dist/hooks/instructions-loaded.js +5 -5
  226. package/dist/hooks/manifest.json +20 -20
  227. package/dist/hooks/notification.js +5 -5
  228. package/dist/hooks/post-compact.js +4 -4
  229. package/dist/hooks/post-tool-combined.js +12 -12
  230. package/dist/hooks/pre-compact.js +21 -20
  231. package/dist/hooks/pre-tool-use.js +33 -32
  232. package/dist/hooks/prompt-submit.js +35 -34
  233. package/dist/hooks/session-end.js +26 -25
  234. package/dist/hooks/session-start.js +17 -17
  235. package/dist/hooks/stop.js +27 -26
  236. package/dist/hooks/subagent-stop.js +22 -21
  237. package/dist/hooks/summary-worker.js +26 -25
  238. package/dist/index.js +29 -28
  239. package/dist/{installer-KPDMTHOD.js → installer-LUN4HQIC.js} +5 -5
  240. package/dist/{installer-HTFYSA5U.js → installer-MPRFUQJE.js} +5 -5
  241. package/dist/{installer-ZHTVJJNQ.js → installer-OC5VXNC7.js} +5 -5
  242. package/dist/{intercom-queue-D57B3JR3.js → intercom-queue-6DZ7BANV.js} +17 -16
  243. package/dist/lib/cloud-sync.js +14 -13
  244. package/dist/lib/consolidation.js +7 -7
  245. package/dist/lib/database.js +2 -2
  246. package/dist/lib/db-backup.js +1 -1
  247. package/dist/lib/db-daemon-client.js +4 -3
  248. package/dist/lib/db-write-worker.js +3 -3
  249. package/dist/lib/db.js +2 -2
  250. package/dist/lib/device-registry.js +1 -1
  251. package/dist/lib/embedder.js +4 -3
  252. package/dist/lib/employee-templates.js +4 -4
  253. package/dist/lib/employees.js +2 -2
  254. package/dist/lib/exe-daemon-client.js +3 -2
  255. package/dist/lib/exe-daemon.js +103 -83
  256. package/dist/lib/hybrid-search.js +6 -6
  257. package/dist/lib/identity.js +2 -2
  258. package/dist/lib/license.js +4 -2
  259. package/dist/lib/messaging.js +18 -17
  260. package/dist/lib/registry-proxy.js +1 -1
  261. package/dist/lib/reminders.js +3 -3
  262. package/dist/lib/schedules.js +6 -6
  263. package/dist/lib/session-registry.js +4 -4
  264. package/dist/lib/skill-learning.js +11 -10
  265. package/dist/lib/status-brief.js +1 -1
  266. package/dist/lib/store.js +5 -5
  267. package/dist/lib/task-router.js +3 -3
  268. package/dist/lib/tasks.js +19 -18
  269. package/dist/lib/tmux-routing.js +17 -16
  270. package/dist/lib/token-spend.js +3 -3
  271. package/dist/{license-gate-SUVXUQ7E.js → license-gate-ESER24PJ.js} +3 -3
  272. package/dist/{license-sync-TXGIO2PM.js → license-sync-JVG5KNIY.js} +2 -2
  273. package/dist/{linux-systemd-LRW3BYSS.js → linux-systemd-YUADJCJQ.js} +1 -1
  274. package/dist/mcp/register-tools.js +87 -86
  275. package/dist/mcp/server.js +88 -87
  276. package/dist/mcp/tools/complete-reminder.js +4 -4
  277. package/dist/mcp/tools/create-reminder.js +4 -4
  278. package/dist/mcp/tools/create-task.js +21 -20
  279. package/dist/mcp/tools/deactivate-behavior.js +12 -11
  280. package/dist/mcp/tools/list-reminders.js +4 -4
  281. package/dist/mcp/tools/list-tasks.js +21 -20
  282. package/dist/mcp/tools/send-message.js +20 -19
  283. package/dist/mcp/tools/update-task.js +20 -19
  284. package/dist/{mcp-http-config-WCOGCXVR.js → mcp-http-config-6K6IKH5F.js} +3 -3
  285. package/dist/{mcp-session-identity-JMFMB6G3.js → mcp-session-identity-LRC6WJSD.js} +17 -16
  286. package/dist/{memory-cards-IYRUCVDG.js → memory-cards-V3OZHIYP.js} +5 -5
  287. package/dist/{memory-graph-extractor-M6HSDITL.js → memory-graph-extractor-JC2Z64L4.js} +6 -6
  288. package/dist/{memory-poisoning-defense-CHGY62QP.js → memory-poisoning-defense-YM4QJHCX.js} +2 -2
  289. package/dist/{memory-pressure-watchdog-FB5E7MLA.js → memory-pressure-watchdog-6F6KEQHN.js} +18 -17
  290. package/dist/{memory-queue-client-HIHCA3W4.js → memory-queue-client-COA4ABEV.js} +4 -3
  291. package/dist/{memory-reflection-BPGUYVRK.js → memory-reflection-QXHJPYPC.js} +2 -2
  292. package/dist/{notification-ledger-4425CXFW.js → notification-ledger-6QRLQW4Q.js} +18 -17
  293. package/dist/{notifications-JGVJO7S2.js → notifications-7B6D7Y5C.js} +17 -16
  294. package/dist/{orchestration-events-PGKDGE45.js → orchestration-events-GY5VP5LU.js} +3 -3
  295. package/dist/{orchestrator-DV5G5DKQ.js → orchestrator-JVPVOYWA.js} +19 -18
  296. package/dist/{org-brief-session-LXCHYYX7.js → org-brief-session-GRV5R5E3.js} +5 -5
  297. package/dist/{org-consent-policy-52Z4LKHG.js → org-consent-policy-3FHHSYXV.js} +1 -1
  298. package/dist/{org-join-BMBQDMVF.js → org-join-BY4PV6UO.js} +2 -2
  299. package/dist/{org-key-admin-SCCVVE2H.js → org-key-admin-WSCPT2CZ.js} +3 -3
  300. package/dist/{org-partner-runtime-HKGI37ND.js → org-partner-runtime-UJDGECZ4.js} +5 -5
  301. package/dist/{org-row-visibility-K5OFWTXE.js → org-row-visibility-V5DXIHTE.js} +1 -1
  302. package/dist/{pipeline-router-NMWDS5I5.js → pipeline-router-YY5FQKTY.js} +3 -3
  303. package/dist/{plan-limits-P4E7P3O5.js → plan-limits-OVX6SN6B.js} +5 -5
  304. package/dist/{projection-worker-BSORYGBV.js → projection-worker-D2472IOD.js} +2 -2
  305. package/dist/{prospective-memory-3JTGI6VV.js → prospective-memory-JXO2A6PL.js} +2 -2
  306. package/dist/{push-notifications-P2HVB7LZ.js → push-notifications-HR3FZRDI.js} +18 -17
  307. package/dist/{reproject-worktree-memories-IXYGHTGA.js → reproject-worktree-memories-OSS3PGRF.js} +127 -35
  308. package/dist/{reranker-6RA63RUL.js → reranker-IMZRPYJ2.js} +1 -1
  309. package/dist/{retrieval-health-YDVLDURR.js → retrieval-health-W7OD44FE.js} +1 -1
  310. package/dist/{review-polling-XVOU2VTL.js → review-polling-2INP7H6M.js} +18 -17
  311. package/dist/runtime/index.js +25 -24
  312. package/dist/{session-events-6AUB5AKL.js → session-events-G4XUPVWV.js} +18 -17
  313. package/dist/{session-kill-telemetry-OXXPCDBI.js → session-kill-telemetry-W7MHWJTQ.js} +18 -17
  314. package/dist/{session-scope-E4NRAFZL.js → session-scope-LG2J4EMQ.js} +17 -16
  315. package/dist/{setup-wizard-RNV6UE6J.js → setup-wizard-YQJI3SVM.js} +1 -1
  316. package/dist/{skill-refinement-6U66DBPY.js → skill-refinement-RA37U756.js} +3 -3
  317. package/dist/{stack-promote-T7YOBPL6.js → stack-promote-IYBRXHTA.js} +4 -4
  318. package/dist/{stack-release-H7ICM4KT.js → stack-release-OXWLVVG6.js} +4 -4
  319. package/dist/{stack-update-MZIBQHVZ.js → stack-update-2CZEROPK.js} +3 -3
  320. package/dist/{steward-gate-TVRANLPZ.js → steward-gate-LTNFB3FY.js} +3 -3
  321. package/dist/{subagent-brief-injection-Y3IJY34K.js → subagent-brief-injection-OHLWLECQ.js} +26 -25
  322. package/dist/supervisor-handoff-CSJQMI53.js +37 -0
  323. package/dist/{support-inbox-2GGCRQEA.js → support-inbox-4KCEPAZQ.js} +3 -3
  324. package/dist/{task-enforcement-HMGS7GJD.js → task-enforcement-LGXWXGVZ.js} +18 -17
  325. package/dist/{task-request-inbox-EHPQR74T.js → task-request-inbox-WHCOSUCP.js} +1 -1
  326. package/dist/{task-scope-H2XPGS6Y.js → task-scope-KXF7Y6KA.js} +17 -16
  327. package/dist/{tasks-crud-4F6ECDNC.js → tasks-crud-5EM55WRZ.js} +17 -16
  328. package/dist/{tasks-notify-4F3HFDCG.js → tasks-notify-VFMAURTN.js} +18 -17
  329. package/dist/{tasks-review-M5G5J2T3.js → tasks-review-MHGMBHUZ.js} +17 -16
  330. package/dist/{telemetry-upload-DFRMVTOF.js → telemetry-upload-6NRTN7QJ.js} +7 -7
  331. package/dist/{token-budget-4CISVC2P.js → token-budget-LZPOYTRP.js} +3 -3
  332. package/dist/{tool-capability-index-BT2GGLLI.js → tool-capability-index-ED5OAPMW.js} +1 -1
  333. package/dist/{tool-telemetry-WHTCFN2L.js → tool-telemetry-ZX7VSAXK.js} +1 -1
  334. package/dist/tui/App.js +25 -24
  335. package/dist/{tui-data-36IHMXIQ.js → tui-data-CC5POSUV.js} +17 -16
  336. package/dist/{update-support-JQSTFOWO.js → update-support-KH6NSQON.js} +16 -15
  337. package/dist/{work-claims-CH77EFZ4.js → work-claims-MNK7PEPW.js} +3 -3
  338. package/dist/{work-state-heartbeat-YC3O6M2G.js → work-state-heartbeat-YEWT5NMZ.js} +1 -1
  339. package/dist/{worker-gate-BJTF4TUP.js → worker-gate-BOQSIU2Z.js} +1 -1
  340. package/dist/{workflow-engine-ZWRIDV6J.js → workflow-engine-MUUD7ZEX.js} +2 -2
  341. package/dist/{worktree-YNPSWYQY.js → worktree-GOGT2LZP.js} +4 -4
  342. package/dist/{worktree-sweep-GRMHU4DA.js → worktree-sweep-46VWPVQT.js} +5 -5
  343. package/package.json +2 -1
  344. package/release-notes.json +31 -60
  345. package/stack.release.json +4 -4
  346. package/dist/{chunk-Z4AN75KW.js → chunk-3F2UB4IQ.js} +0 -0
  347. package/dist/{chunk-442EX2PZ.js → chunk-3Y5THOU6.js} +0 -0
  348. package/dist/{chunk-KOYGRP2L.js → chunk-5N4SG5NB.js} +3 -3
  349. /package/dist/{chunk-ME3A4LKV.js → chunk-7UTJA6HF.js} +0 -0
  350. /package/dist/{chunk-YSDIJ3VI.js → chunk-7XGXRD22.js} +0 -0
  351. /package/dist/{chunk-EQJ462VM.js → chunk-ADNBOKYZ.js} +0 -0
  352. /package/dist/{chunk-6CAX7YH4.js → chunk-FZQWVQJG.js} +0 -0
  353. /package/dist/{chunk-2A76BLAD.js → chunk-GB3AHV5F.js} +0 -0
  354. /package/dist/{chunk-P3IOJTWW.js → chunk-HR2R2QER.js} +0 -0
  355. /package/dist/{chunk-5HNXTAXL.js → chunk-ORA5BWCV.js} +0 -0
  356. /package/dist/{chunk-PREXA444.js → chunk-R6FLELV6.js} +0 -0
  357. /package/dist/{chunk-G2H2KV4N.js → chunk-V4XAKXXF.js} +0 -0
  358. /package/dist/{chunk-7AQ2C4LT.js → chunk-VJSDGDNS.js} +0 -0
  359. /package/dist/{chunk-VQ7F3W7P.js → chunk-WV3TOOL7.js} +0 -0
  360. /package/dist/{core-memory-KIV3WFOQ.js → core-memory-6WBNT2HL.js} +0 -0
  361. /package/dist/{entity-boost-CDFAXVYL.js → entity-boost-MT336PI3.js} +0 -0
  362. /package/dist/{memory-isolation-CPTYUIPJ.js → memory-isolation-EJ45IXBH.js} +0 -0
  363. /package/dist/{message-queue-client-PL2POQOV.js → message-queue-client-MVBTYCSV.js} +0 -0
  364. /package/dist/{oauth-server-NJRJAT7X.js → oauth-server-TZFNQAFS.js} +0 -0
  365. /package/dist/{project-boot-QYYCFYFC.js → project-boot-LXLU2J32.js} +0 -0
  366. /package/dist/{wiki-acl-OROXIW3P.js → wiki-acl-WXRJGZ5Q.js} +0 -0
@@ -2,15 +2,15 @@ import {
2
2
  BUSY_PATTERN,
3
3
  sendIntercom,
4
4
  updateTaskStatus
5
- } from "./chunk-LMZD3A6K.js";
5
+ } from "./chunk-XHYHX6F7.js";
6
6
  import {
7
7
  recordOrchestrationEventBestEffort
8
- } from "./chunk-TTAPKUQV.js";
8
+ } from "./chunk-E2WEFZOR.js";
9
9
  import {
10
10
  baseAgentName,
11
11
  getCoordinatorName,
12
12
  isCoordinatorName
13
- } from "./chunk-5XRKPKHJ.js";
13
+ } from "./chunk-5DCCKHDY.js";
14
14
 
15
15
  // src/lib/play-mode.ts
16
16
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
@@ -332,7 +332,7 @@ async function surfaceStaleDispatchPendingSignals(scopeList, now, thresholdMs =
332
332
  const sessionScope = signalScope ?? (scopeList.length === 1 ? scopeList[0] : null);
333
333
  if (allowedScopes.size > 0 && sessionScope && !allowedScopes.has(sessionScope)) continue;
334
334
  try {
335
- const { writeNotification } = await import("./notifications-JGVJO7S2.js");
335
+ const { writeNotification } = await import("./notifications-7B6D7Y5C.js");
336
336
  await writeNotification({
337
337
  agentId: getCoordinatorName(),
338
338
  agentRole: "COO",
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-A7XLR3K7.js";
4
4
  import {
5
5
  getDeviceInfo
6
- } from "./chunk-2A76BLAD.js";
6
+ } from "./chunk-GB3AHV5F.js";
7
7
  import {
8
8
  EXE_AI_DIR
9
9
  } from "./chunk-QMSEL5YS.js";
@@ -232,6 +232,12 @@ function cacheResponse(token) {
232
232
  } catch {
233
233
  }
234
234
  }
235
+ function clearLicenseCache() {
236
+ try {
237
+ if (existsSync(CACHE_PATH)) rmSync(CACHE_PATH, { force: true });
238
+ } catch {
239
+ }
240
+ }
235
241
  async function validateViaCFWorker(apiKey, deviceId, timeoutMs = 1e4) {
236
242
  try {
237
243
  const res = await fetchRetry(`${API_BASE}/auth/activate`, {
@@ -240,38 +246,51 @@ async function validateViaCFWorker(apiKey, deviceId, timeoutMs = 1e4) {
240
246
  body: JSON.stringify({ apiKey, deviceId }),
241
247
  signal: AbortSignal.timeout(timeoutMs)
242
248
  }, timeoutMs);
243
- if (!res.ok) return null;
244
- const data = await res.json();
245
- if (data.error === "device_limit_exceeded") return null;
249
+ if (!res.ok) return { kind: "unreachable" };
250
+ let data;
251
+ try {
252
+ data = await res.json();
253
+ } catch {
254
+ return { kind: "unreachable" };
255
+ }
256
+ if (data.error === "device_limit_exceeded") return { kind: "unreachable" };
246
257
  if (data.error === "seat_released") {
247
258
  markPersonalFreeGrandfather(data.email ?? "", data.org_id);
248
- return grandfatheredFreeLicense();
259
+ return { kind: "valid", license: grandfatheredFreeLicense() };
249
260
  }
250
- if (!data.valid) return null;
261
+ if (!data.valid) return { kind: "invalid" };
251
262
  clearPersonalFreeGrandfather();
252
263
  if (data.token) {
253
264
  cacheResponse(data.token);
254
265
  const verified = await verifyLicenseJwt(data.token);
255
- if (verified) return verified;
266
+ if (verified) return { kind: "valid", license: verified };
256
267
  }
257
268
  const limits = PLAN_LIMITS[data.plan] ?? PLAN_LIMITS.free;
258
269
  return {
259
- valid: data.valid,
260
- plan: data.plan,
261
- email: data.email,
262
- expiresAt: data.expiresAt,
263
- deviceLimit: limits.devices,
264
- employeeLimit: limits.employees,
265
- memoryLimit: limits.memories
270
+ kind: "valid",
271
+ license: {
272
+ valid: data.valid,
273
+ plan: data.plan,
274
+ email: data.email,
275
+ expiresAt: data.expiresAt,
276
+ deviceLimit: limits.devices,
277
+ employeeLimit: limits.employees,
278
+ memoryLimit: limits.memories
279
+ }
266
280
  };
267
281
  } catch {
268
- return null;
282
+ return { kind: "unreachable" };
269
283
  }
270
284
  }
271
285
  async function validateLicense(apiKey, deviceId) {
272
286
  const did = deviceId ?? loadDeviceId();
273
- const cfResult = await validateViaCFWorker(apiKey, did);
274
- if (cfResult) return cfResult;
287
+ const cf = await validateViaCFWorker(apiKey, did);
288
+ if (cf.kind === "valid") return cf.license;
289
+ if (cf.kind === "invalid") {
290
+ clearLicenseCache();
291
+ clearPersonalFreeGrandfather();
292
+ return { ...FREE_LICENSE, valid: false };
293
+ }
275
294
  const cached = await getCachedLicense();
276
295
  if (cached) return cached;
277
296
  const graced = await getGraceVerifiedLicense();
@@ -323,12 +342,22 @@ async function refreshLicense(opts) {
323
342
  }
324
343
  const deviceId = loadDeviceId();
325
344
  const online = await validateViaCFWorker(key, deviceId, opts?.timeoutMs ?? 1e4);
326
- if (online) {
345
+ if (online.kind === "valid") {
346
+ return {
347
+ reachedCloud: true,
348
+ changed: oldPlan !== null && oldPlan !== online.license.plan,
349
+ oldPlan,
350
+ license: online.license
351
+ };
352
+ }
353
+ if (online.kind === "invalid") {
354
+ clearLicenseCache();
355
+ clearPersonalFreeGrandfather();
327
356
  return {
328
357
  reachedCloud: true,
329
- changed: oldPlan !== null && oldPlan !== online.plan,
358
+ changed: oldPlan !== null,
330
359
  oldPlan,
331
- license: online
360
+ license: { ...FREE_LICENSE, valid: false }
332
361
  };
333
362
  }
334
363
  const fallback = before ?? await getGraceVerifiedLicense() ?? { ...FREE_LICENSE, valid: false };
@@ -463,6 +492,7 @@ export {
463
492
  getGraceVerifiedLicense,
464
493
  readCachedLicenseToken,
465
494
  getLicenseCacheAgeMs,
495
+ clearLicenseCache,
466
496
  validateLicense,
467
497
  checkLicense,
468
498
  refreshLicense,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-5XRKPKHJ.js";
3
+ } from "./chunk-5DCCKHDY.js";
4
4
 
5
5
  // src/lib/orchestration-events.ts
6
6
  import crypto from "crypto";
@@ -1,11 +1,11 @@
1
- import {
2
- ingest
3
- } from "./chunk-4OVLY2NR.js";
4
1
  import {
5
2
  listWorkflowDefinitions,
6
3
  runWorkflow,
7
4
  startWorkflow
8
- } from "./chunk-RHDDSIFC.js";
5
+ } from "./chunk-KXYFBBZR.js";
6
+ import {
7
+ ingest
8
+ } from "./chunk-TK4MI6F6.js";
9
9
  import {
10
10
  initCRMBridge
11
11
  } from "./chunk-ML4S5SHZ.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  processCRMEvent
3
- } from "./chunk-EQJ462VM.js";
3
+ } from "./chunk-ADNBOKYZ.js";
4
4
 
5
5
  // src/gateway/adapters/crm-webhook.ts
6
6
  function parseTwentyWebhook(payload) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-5XRKPKHJ.js";
3
+ } from "./chunk-5DCCKHDY.js";
4
4
 
5
5
  // src/lib/token-budget.ts
6
6
  var WARN_THRESHOLD = 0.8;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  listBehaviors
3
- } from "./chunk-5CYFJQGV.js";
3
+ } from "./chunk-MBNIJXKI.js";
4
4
  import {
5
5
  incrementSkillUsage
6
- } from "./chunk-J7OPJPYG.js";
6
+ } from "./chunk-L6ZNURWN.js";
7
7
 
8
8
  // src/lib/behavior-injection.ts
9
9
  import { appendFile } from "fs/promises";
@@ -3,13 +3,13 @@ import {
3
3
  } from "./chunk-THIJIOE2.js";
4
4
  import {
5
5
  isGhostBehaviorRow
6
- } from "./chunk-5CYFJQGV.js";
6
+ } from "./chunk-MBNIJXKI.js";
7
7
  import {
8
8
  getClient,
9
9
  getIdentity,
10
10
  listIdentities,
11
11
  updateIdentity
12
- } from "./chunk-5XRKPKHJ.js";
12
+ } from "./chunk-5DCCKHDY.js";
13
13
  import {
14
14
  atomicWriteJsonSync
15
15
  } from "./chunk-HSGBZSCA.js";
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-75H4R62K.js";
4
4
  import {
5
5
  initStore
6
- } from "./chunk-HIIEIDD2.js";
6
+ } from "./chunk-OYQNNKNS.js";
7
7
  import {
8
8
  getClient,
9
9
  isInitialized
10
- } from "./chunk-5XRKPKHJ.js";
10
+ } from "./chunk-5DCCKHDY.js";
11
11
 
12
12
  // src/lib/schedules.ts
13
13
  import crypto from "crypto";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getCurrentSessionScope,
3
3
  strictSessionScopeFilter
4
- } from "./chunk-LMZD3A6K.js";
4
+ } from "./chunk-XHYHX6F7.js";
5
5
  import {
6
6
  getProjectName
7
7
  } from "./chunk-W2IRQJ6R.js";
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  recordSessionKill
3
- } from "./chunk-75IYPYUY.js";
3
+ } from "./chunk-RBYHJDAT.js";
4
4
  import {
5
5
  sessionScopeFilter,
6
6
  verifyPaneAtCapacity,
7
7
  writeNotification
8
- } from "./chunk-LMZD3A6K.js";
8
+ } from "./chunk-XHYHX6F7.js";
9
9
  import {
10
10
  listSessions
11
- } from "./chunk-RYDR7TRT.js";
11
+ } from "./chunk-MDGYXUOV.js";
12
12
  import {
13
13
  getTransport
14
14
  } from "./chunk-UXLO7VHX.js";
15
15
  import {
16
16
  recordOrchestrationEventBestEffort
17
- } from "./chunk-TTAPKUQV.js";
17
+ } from "./chunk-E2WEFZOR.js";
18
18
  import {
19
19
  getClient,
20
20
  isCoordinatorName
21
- } from "./chunk-5XRKPKHJ.js";
21
+ } from "./chunk-5DCCKHDY.js";
22
22
 
23
23
  // src/lib/capacity-monitor.ts
24
24
  var CAPACITY_PATTERNS = [
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-L25OAFOU.js";
12
12
  import {
13
13
  loadLicense
14
- } from "./chunk-I3FXDCUE.js";
14
+ } from "./chunk-DKBPCOU4.js";
15
15
 
16
16
  // src/lib/stack-update.ts
17
17
  import { execFileSync, spawnSync as spawnSync2 } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  canonicalizeStackManifest
3
- } from "./chunk-4HNVZDCM.js";
3
+ } from "./chunk-GU62SNDH.js";
4
4
 
5
5
  // src/lib/stack-manifest-write.ts
6
6
  import { readFileSync, writeFileSync } from "fs";
@@ -2,7 +2,7 @@ import {
2
2
  dispatchTaskToEmployee,
3
3
  markTaskNotificationsRead,
4
4
  notifyTaskDone
5
- } from "./chunk-ZXZHEAWO.js";
5
+ } from "./chunk-QTYJPWJN.js";
6
6
  import {
7
7
  clearCurrentTask,
8
8
  writeCurrentTask
@@ -16,7 +16,7 @@ import {
16
16
  strictSessionScopeFilter,
17
17
  updateTaskStatus,
18
18
  writeNotification
19
- } from "./chunk-LMZD3A6K.js";
19
+ } from "./chunk-XHYHX6F7.js";
20
20
  import {
21
21
  getAgentContext
22
22
  } from "./chunk-GJV3WDWM.js";
@@ -27,7 +27,7 @@ import {
27
27
  getClient,
28
28
  getCoordinatorName,
29
29
  isCoordinatorName
30
- } from "./chunk-5XRKPKHJ.js";
30
+ } from "./chunk-5DCCKHDY.js";
31
31
 
32
32
  // src/lib/tasks-chain.ts
33
33
  import path from "path";
@@ -62,7 +62,7 @@ async function cascadeUnblock(taskId, baseDir, now) {
62
62
  }
63
63
  if (unblockedRows.rows.length > 0 && !process.env.VITEST) {
64
64
  try {
65
- const { dispatchTaskToEmployee: dispatchTaskToEmployee2 } = await import("./tasks-notify-4F3HFDCG.js");
65
+ const { dispatchTaskToEmployee: dispatchTaskToEmployee2 } = await import("./tasks-notify-VFMAURTN.js");
66
66
  const dispatched = /* @__PURE__ */ new Set();
67
67
  for (const ur of unblockedRows.rows) {
68
68
  const assignee = String(ur.assigned_to);
@@ -87,7 +87,7 @@ async function cascadeUnblock(taskId, baseDir, now) {
87
87
  }
88
88
  } catch {
89
89
  try {
90
- const { queueIntercom } = await import("./intercom-queue-D57B3JR3.js");
90
+ const { queueIntercom } = await import("./intercom-queue-6DZ7BANV.js");
91
91
  const dispatched = /* @__PURE__ */ new Set();
92
92
  for (const ur of unblockedRows.rows) {
93
93
  const assignee = String(ur.assigned_to);
@@ -285,7 +285,7 @@ async function updateTask(input) {
285
285
  try {
286
286
  process.stderr.write(`[tasks] EVENT: tmux delivery failed for reviewer="${reviewer}". Queueing for daemon delivery.
287
287
  `);
288
- const { queueIntercom } = await import("./intercom-queue-D57B3JR3.js");
288
+ const { queueIntercom } = await import("./intercom-queue-6DZ7BANV.js");
289
289
  const { resolveExeSession } = await import("./lib/tmux-routing.js");
290
290
  const exeSession = row.session_scope ? String(row.session_scope) : resolveExeSession();
291
291
  if (exeSession) {
@@ -302,7 +302,7 @@ async function updateTask(input) {
302
302
  }
303
303
  }
304
304
  try {
305
- const { pushNotifyAsync } = await import("./push-notifications-P2HVB7LZ.js");
305
+ const { pushNotifyAsync } = await import("./push-notifications-HR3FZRDI.js");
306
306
  pushNotifyAsync({
307
307
  event: "review_ready",
308
308
  title: `Review ready: ${taskTitle.slice(0, 50)}`,
@@ -314,7 +314,7 @@ async function updateTask(input) {
314
314
  }
315
315
  if (!isCoordinator && isCompletionReviewTransition) {
316
316
  try {
317
- const { pushNotifyAsync } = await import("./push-notifications-P2HVB7LZ.js");
317
+ const { pushNotifyAsync } = await import("./push-notifications-HR3FZRDI.js");
318
318
  const event = input.status === "needs_review" ? "review_ready" : "task_complete";
319
319
  pushNotifyAsync({
320
320
  event,
@@ -329,7 +329,7 @@ async function updateTask(input) {
329
329
  await markTaskNotificationsRead(taskFile);
330
330
  if (isCompletionReviewTransition && !isCoordinator && row.reviewer) {
331
331
  try {
332
- const { writeNotification: writeNotification2 } = await import("./notifications-JGVJO7S2.js");
332
+ const { writeNotification: writeNotification2 } = await import("./notifications-7B6D7Y5C.js");
333
333
  const reviewer = String(row.reviewer);
334
334
  await writeNotification2({
335
335
  agentId: reviewer,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listReminders
3
- } from "./chunk-T3TSX4XB.js";
3
+ } from "./chunk-SEP5ITFQ.js";
4
4
 
5
5
  // src/mcp/tools/list-reminders.ts
6
6
  import { z } from "zod";
@@ -3,12 +3,12 @@ import {
3
3
  getClient,
4
4
  isInitialized,
5
5
  loadEmployees
6
- } from "./chunk-5XRKPKHJ.js";
6
+ } from "./chunk-5DCCKHDY.js";
7
7
  import {
8
8
  checkLicense,
9
9
  isFeatureAllowed,
10
10
  isPersonalFreeGrandfathered
11
- } from "./chunk-I3FXDCUE.js";
11
+ } from "./chunk-DKBPCOU4.js";
12
12
  import {
13
13
  PLAN_LIMITS
14
14
  } from "./chunk-A7XLR3K7.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-THIJIOE2.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-5XRKPKHJ.js";
7
+ } from "./chunk-5DCCKHDY.js";
8
8
 
9
9
  // src/lib/global-procedures.ts
10
10
  import { randomUUID } from "crypto";
@@ -8,13 +8,14 @@ var GIT_TIMEOUT_MS = (() => {
8
8
  const n = raw ? Number.parseInt(raw, 10) : Number.NaN;
9
9
  return Number.isFinite(n) && n > 0 ? n : 1e4;
10
10
  })();
11
- function runGit(cwd, args) {
11
+ function runGit(cwd, args, extraEnv) {
12
12
  try {
13
13
  const out = execFileSync("git", args, {
14
14
  cwd,
15
15
  encoding: "utf8",
16
16
  timeout: GIT_TIMEOUT_MS,
17
- stdio: ["ignore", "pipe", "ignore"]
17
+ stdio: ["ignore", "pipe", "ignore"],
18
+ ...extraEnv ? { env: { ...process.env, ...extraEnv } } : {}
18
19
  });
19
20
  return { status: "ok", stdout: out.trim() };
20
21
  } catch (err) {
@@ -422,15 +423,25 @@ function parsePush(args, contextDir) {
422
423
  positionals.push(a);
423
424
  }
424
425
  if (mirror) return { kind: "force-remote", verb: "push --mirror", contextDir };
426
+ const deleteFlag = del;
427
+ const remote = positionals[0] ?? null;
425
428
  const refspecs = positionals.length > 1 ? positionals.slice(1) : [];
426
429
  let targetsMain = false;
427
430
  let needsUpstream = false;
431
+ const deleteTargets = [];
428
432
  for (const spec of refspecs) {
429
433
  if (/^\+/.test(spec)) force = true;
430
434
  if (/^\+?:/.test(spec)) del = true;
431
435
  const bare = spec.replace(/^\+/, "");
432
436
  const colon = bare.indexOf(":");
433
437
  const dst = colon >= 0 ? bare.slice(colon + 1) : bare;
438
+ if (colon === 0) deleteTargets.push(dst);
439
+ else if (deleteFlag) {
440
+ if (colon > 0) {
441
+ return { kind: "unparseable", reason: `push --delete with a src:dst refspec ("${spec}") \u2014 the deleted ref cannot be determined` };
442
+ }
443
+ deleteTargets.push(bare);
444
+ }
434
445
  if (dst === "HEAD") {
435
446
  needsUpstream = true;
436
447
  continue;
@@ -439,7 +450,7 @@ function parsePush(args, contextDir) {
439
450
  }
440
451
  if (refspecs.length === 0) needsUpstream = true;
441
452
  const destructive = force || del;
442
- return { kind: "push", destructive, targetsMain, needsUpstream, contextDir };
453
+ return { kind: "push", destructive, targetsMain, needsUpstream, contextDir, remote, deleteTargets };
443
454
  }
444
455
  function resolveRepoStateOnce(cwd) {
445
456
  const root = runGit(cwd, ["rev-parse", "--show-toplevel"]);
@@ -477,6 +488,62 @@ function resolveRepoState(cwd) {
477
488
  if (first.ok || first.reason !== "unverifiable") return first;
478
489
  return resolveRepoStateOnce(cwd);
479
490
  }
491
+ function isResolvableRefName(name) {
492
+ if (name.length === 0 || name.length > 255) return false;
493
+ if (!/^[A-Za-z0-9._\-/]+$/.test(name)) return false;
494
+ if (name.startsWith("-") || name.startsWith("/") || name.endsWith("/")) return false;
495
+ if (name.includes("..") || name.includes("//")) return false;
496
+ if (name.endsWith(".lock") || name.endsWith(".")) return false;
497
+ return true;
498
+ }
499
+ function isUsableRemoteOperand(remote) {
500
+ return remote.length > 0 && !remote.startsWith("-");
501
+ }
502
+ function resolveRemoteRefKind(cwd, remote, name) {
503
+ if (!isUsableRemoteOperand(remote) || !isResolvableRefName(name)) return "unavailable";
504
+ const tagRef = `refs/tags/${name}`;
505
+ const headRef = `refs/heads/${name}`;
506
+ const res = runGit(cwd, ["ls-remote", remote, tagRef, headRef], { GIT_TERMINAL_PROMPT: "0" });
507
+ if (res.status !== "ok") return "unavailable";
508
+ let isTag = false;
509
+ let isBranch = false;
510
+ for (const line of res.stdout.split("\n")) {
511
+ const ref = line.split(" ")[1]?.trim();
512
+ if (!ref) continue;
513
+ if (ref === tagRef || ref === `${tagRef}^{}`) isTag = true;
514
+ else if (ref === headRef) isBranch = true;
515
+ }
516
+ if (isTag && isBranch) return "both";
517
+ if (isTag) return "tag";
518
+ if (isBranch) return "branch";
519
+ return "absent";
520
+ }
521
+ function classifyDeleteTarget(target, remote, resolve) {
522
+ if (target.startsWith("refs/tags/") || target.startsWith("tags/")) return { verdict: "tag" };
523
+ const head = destHeadShortName(target);
524
+ if (head !== null && headTargetsMainOrGlob(head)) return { verdict: "main" };
525
+ if (target.startsWith("refs/heads/") || target.startsWith("heads/")) {
526
+ return { verdict: "blocked", reason: `"${target}" is a branch ref, not a tag` };
527
+ }
528
+ if (target.startsWith("refs/")) {
529
+ return { verdict: "blocked", reason: `"${target}" is not a tag ref and cannot be proven safe to delete` };
530
+ }
531
+ if (remote === null) return { verdict: "blocked", reason: `no remote given, so "${target}" cannot be resolved` };
532
+ if (!isUsableRemoteOperand(remote)) return { verdict: "blocked", reason: `remote "${remote}" is not a usable operand` };
533
+ if (!isResolvableRefName(target)) return { verdict: "blocked", reason: `"${target}" is not a resolvable ref name (globs and exotic characters are never resolved)` };
534
+ switch (resolve(remote, target)) {
535
+ case "tag":
536
+ return { verdict: "tag" };
537
+ case "branch":
538
+ return { verdict: "blocked", reason: `"${target}" exists on ${remote} as a BRANCH, not a tag` };
539
+ case "both":
540
+ return { verdict: "blocked", reason: `"${target}" exists on ${remote} as BOTH a tag and a branch \u2014 the target is genuinely ambiguous` };
541
+ case "absent":
542
+ return { verdict: "blocked", reason: `"${target}" does not exist on ${remote} as either a tag or a branch, so it cannot be proven to be a tag` };
543
+ default:
544
+ return { verdict: "blocked", reason: `the guard could not reach ${remote} to prove "${target}" is a tag (network, auth, or timeout) \u2014 a failed lookup is never a permit` };
545
+ }
546
+ }
480
547
  function resolvePushTargetOnce(cwd) {
481
548
  for (const rev of ["@{push}", "@{upstream}"]) {
482
549
  const r = runGit(cwd, ["rev-parse", "--abbrev-ref", "--symbolic-full-name", rev]);
@@ -557,6 +624,17 @@ function evaluateMainGuard(command, opts = {}) {
557
624
  return { block: true, message: formatMainAheadBlockMessage({ repoRoot: ctxDir, branch: state.mainBranch, ahead: state.mainAhead, commits: state.aheadCommits }, parsed.verb) };
558
625
  }
559
626
  if (!parsed.destructive) return { block: false };
627
+ const resolveRemoteRef = opts.remoteRefResolver ?? resolveRemoteRefKind;
628
+ for (const target of parsed.deleteTargets) {
629
+ const v = classifyDeleteTarget(
630
+ target,
631
+ parsed.remote,
632
+ (remote, name) => resolveRemoteRef(ctxDir, remote, name)
633
+ );
634
+ if (v.verdict === "tag") continue;
635
+ if (v.verdict === "main") return { block: true, message: formatForcePushBlockMessage("force/delete push to main") };
636
+ return { block: true, message: formatUnprovableDeleteBlockMessage(target, parsed.remote, v.reason) };
637
+ }
560
638
  let targetsMain = parsed.targetsMain;
561
639
  if (!targetsMain && parsed.needsUpstream) {
562
640
  const state = resolveState(ctxDir);
@@ -592,6 +670,15 @@ SAFE ALTERNATIVES:
592
670
  \u2022 Force-pushing a FEATURE branch is allowed; only main/master is guarded.
593
671
  ${OVERRIDE_LINE}`;
594
672
  }
673
+ function formatUnprovableDeleteBlockMessage(target, remote, reason) {
674
+ return `\u{1F6AB} BLOCKED: \`git push --delete ${remote ?? "<remote>"} ${target}\` \u2014 the guard could not PROVE this is a tag: ${reason}.
675
+ WHY: deleting a remote BRANCH destroys shared work; deleting a TAG does not. A bare ref name does not say which it is, so the guard resolves it on the remote and permits ONLY a name that exists as a tag and NOT as a branch (bug 6aaea78f). Branch, both, absent, or an unreachable remote all keep blocking \u2014 a failed lookup is not a permit.
676
+ SAFE ALTERNATIVES:
677
+ \u2022 Deleting a TAG: say so explicitly \u2014 git push ${remote ?? "origin"} --delete refs/tags/${target.replace(/^refs\/(tags|heads)\//, "")}
678
+ \u2022 Deleting a BRANCH on the remote: do it from the GitHub/host UI, or ask a human \u2014 this guard will not do it for you.
679
+ \u2022 If the remote was just unreachable, re-run once the network/auth is working; the guard will resolve it then.
680
+ NOTE: EXE_FORCE_ALLOW_MAIN_HISTORY_REWRITE is NOT the escape hatch for this \u2014 it declares a main-history rewrite, which this is not.`;
681
+ }
595
682
  function formatUnverifiableBlockMessage(reason) {
596
683
  return `\u{1F6AB} BLOCKED: this git command could rewrite main/master and the guard CANNOT verify its target \u2014 ${reason}.
597
684
  WHY: exe-os fails CLOSED here \u2014 a compound/wrapped command can move HEAD before a check runs, so an unverifiable destructive-git command is denied rather than parsed permissively (bug 6aaea78f).
@@ -613,6 +700,10 @@ export {
613
700
  containsDestructiveGitCandidate,
614
701
  parseSingleGitCommand,
615
702
  resolveRepoState,
703
+ isResolvableRefName,
704
+ isUsableRemoteOperand,
705
+ resolveRemoteRefKind,
706
+ classifyDeleteTarget,
616
707
  resolvePushTargetBranch,
617
708
  getLocalMainAheadInfo,
618
709
  getCurrentBranch,
@@ -620,6 +711,7 @@ export {
620
711
  evaluateMainGuard,
621
712
  formatMainAheadBlockMessage,
622
713
  formatForcePushBlockMessage,
714
+ formatUnprovableDeleteBlockMessage,
623
715
  formatUnverifiableBlockMessage,
624
716
  formatStateUnverifiableBlockMessage
625
717
  };
@@ -2,7 +2,7 @@ import {
2
2
  connectEmbedDaemon,
3
3
  disconnectClient,
4
4
  embedViaClient
5
- } from "./chunk-BNHAZ65R.js";
5
+ } from "./chunk-UQUUNGTP.js";
6
6
  import {
7
7
  EMBEDDING_DIM
8
8
  } from "./chunk-FXU7JOXK.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  sendMessage
3
- } from "./chunk-BFP7JOD7.js";
3
+ } from "./chunk-7WQRFSZI.js";
4
4
  import {
5
5
  getActiveAgent
6
- } from "./chunk-MO2A7GUU.js";
6
+ } from "./chunk-KYFFVTGO.js";
7
7
 
8
8
  // src/mcp/tools/send-message.ts
9
9
  import { z } from "zod";