@askexenow/exe-os 0.9.405 → 0.9.407

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 (398) hide show
  1. package/dist/.dist-verified.json +3 -3
  2. package/dist/{active-agent-KZFLZ4B6.js → active-agent-2OMOWJXI.js} +4 -4
  3. package/dist/{active-agent-IU3D6Y5Z.js → active-agent-U6JYIXZD.js} +4 -4
  4. package/dist/{agent-defs-generator-23FGUXVO.js → agent-defs-generator-TZC3QFTT.js} +3 -3
  5. package/dist/{agentic-ontology-7G44A5LE.js → agentic-ontology-GJI54CFX.js} +1 -1
  6. package/dist/{artifact-backup-GYNBR2I6.js → artifact-backup-4GCKVN3V.js} +3 -3
  7. package/dist/{backfill-metadata-QZND2XBD.js → backfill-metadata-EVJEKCY3.js} +7 -7
  8. package/dist/{backup-verify-E5UQJ4E6.js → backup-verify-PIH5GXLV.js} +1 -1
  9. package/dist/{behavior-injection-FJFD735A.js → behavior-injection-TKQETCCW.js} +10 -10
  10. package/dist/{behavior-promotion-XNO53I4M.js → behavior-promotion-TB53MVMQ.js} +9 -9
  11. package/dist/{behaviors-F6KA2XNB.js → behaviors-2XKHIDUD.js} +8 -8
  12. package/dist/bin/agentic-ontology-backfill.js +8 -8
  13. package/dist/bin/agentic-reflection-backfill.js +9 -9
  14. package/dist/bin/agentic-semantic-label.js +8 -8
  15. package/dist/bin/backfill-conversations.js +7 -7
  16. package/dist/bin/backfill-responses.js +7 -7
  17. package/dist/bin/backfill-vectors.js +7 -7
  18. package/dist/bin/bulk-sync-postgres.js +16 -16
  19. package/dist/bin/cc-doctor.js +8 -8
  20. package/dist/bin/cleanup-stale-review-tasks.js +16 -16
  21. package/dist/bin/cli.js +24 -24
  22. package/dist/bin/deferred-daemon-restart.js +95 -94
  23. package/dist/bin/exe-actions.js +2 -2
  24. package/dist/bin/exe-agent-config.js +3 -3
  25. package/dist/bin/exe-agent.js +14 -14
  26. package/dist/bin/exe-assign.js +8 -8
  27. package/dist/bin/exe-boot.js +36 -36
  28. package/dist/bin/exe-call.js +8 -8
  29. package/dist/bin/exe-cloud.js +17 -17
  30. package/dist/bin/exe-config-dump.js +3 -3
  31. package/dist/bin/exe-dispatch.js +17 -17
  32. package/dist/bin/exe-doctor.js +12 -5
  33. package/dist/bin/exe-export-behaviors.js +12 -12
  34. package/dist/bin/exe-forget.js +10 -10
  35. package/dist/bin/exe-gateway.js +9 -9
  36. package/dist/bin/exe-grant.js +6 -6
  37. package/dist/bin/exe-healthcheck.js +8 -8
  38. package/dist/bin/exe-heartbeat.js +22 -22
  39. package/dist/bin/exe-kill.js +21 -21
  40. package/dist/bin/exe-launch-agent.js +29 -29
  41. package/dist/bin/exe-mcp.js +5 -5
  42. package/dist/bin/exe-memory-reads.js +7 -7
  43. package/dist/bin/exe-new-employee.js +10 -10
  44. package/dist/bin/exe-os-mcp-proxy.js +5 -5
  45. package/dist/bin/exe-pending-messages.js +17 -17
  46. package/dist/bin/exe-pending-notifications.js +16 -16
  47. package/dist/bin/exe-pending-reviews.js +17 -17
  48. package/dist/bin/exe-rename.js +6 -6
  49. package/dist/bin/exe-review.js +20 -20
  50. package/dist/bin/exe-search.js +9 -9
  51. package/dist/bin/exe-session-cleanup.js +21 -21
  52. package/dist/bin/exe-settings.js +16 -16
  53. package/dist/bin/exe-start-codex.js +18 -18
  54. package/dist/bin/exe-start-opencode.js +16 -16
  55. package/dist/bin/exe-status.js +18 -18
  56. package/dist/bin/exe-support.js +3 -3
  57. package/dist/bin/exe-team.js +5 -5
  58. package/dist/bin/git-sweep.js +17 -17
  59. package/dist/bin/graph-backfill.js +8 -8
  60. package/dist/bin/graph-export.js +8 -8
  61. package/dist/bin/hooks-cli.js +1 -1
  62. package/dist/bin/import-history.js +11 -11
  63. package/dist/bin/install.js +175 -96
  64. package/dist/bin/intercom-check.js +5 -5
  65. package/dist/bin/mcp-sessions.js +2 -2
  66. package/dist/bin/orchestration-metrics.js +5 -5
  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/repair-document-chunks.js +7 -7
  72. package/dist/bin/scan-tasks.js +17 -17
  73. package/dist/bin/setup.js +2 -2
  74. package/dist/bin/shard-migrate.js +8 -8
  75. package/dist/bin/stack-update.js +48 -4
  76. package/dist/bin/vps-health-gate.js +1 -1
  77. package/dist/{boot-generation-2LMBR7S7.js → boot-generation-34GD265Q.js} +4 -4
  78. package/dist/{boot-review-sections-P4J6LGFF.js → boot-review-sections-JYDDUJH5.js} +15 -15
  79. package/dist/{bug-landed-reconciler-PWRXOBOE.js → bug-landed-reconciler-ORYLGRQI.js} +6 -6
  80. package/dist/build-info.json +3 -3
  81. package/dist/build-manifest.json +931 -921
  82. package/dist/{capability-cards-VKEXD3BA.js → capability-cards-IOFJOGID.js} +3 -3
  83. package/dist/{capacity-monitor-DIX6TOWZ.js → capacity-monitor-CJSDRDLR.js} +17 -17
  84. package/dist/{catchup-brief-JQIWOJEN.js → catchup-brief-ELSYIYVL.js} +22 -22
  85. package/dist/{chunk-Z4FVCXQN.js → chunk-232YVOFB.js} +2 -2
  86. package/dist/{chunk-3L5B655Z.js → chunk-323DU3UM.js} +3 -3
  87. package/dist/{chunk-ID3KTUXS.js → chunk-342ZBEDI.js} +2 -2
  88. package/dist/{chunk-KRNF2TTT.js → chunk-35PGCSNN.js} +4 -4
  89. package/dist/{chunk-MMQH7AM7.js → chunk-36QUBTID.js} +1 -1
  90. package/dist/{chunk-4BSOTASL.js → chunk-3AC6WJNP.js} +2 -2
  91. package/dist/{chunk-DQUGV7TQ.js → chunk-3AOPBH5S.js} +1 -1
  92. package/dist/{chunk-35XHS5ZL.js → chunk-3DIP37BT.js} +2 -2
  93. package/dist/{chunk-QGTP2A7P.js → chunk-3X733RHO.js} +1 -1
  94. package/dist/{chunk-OV5RG5UT.js → chunk-4MQDDFRN.js} +1 -1
  95. package/dist/{chunk-B4LS4IPJ.js → chunk-4SLKFUA7.js} +1 -1
  96. package/dist/{chunk-KPCUD5A3.js → chunk-4U2TAOW7.js} +1 -1
  97. package/dist/{chunk-QEGSRMGV.js → chunk-52JOFQOK.js} +1 -1
  98. package/dist/{chunk-TFUWNX5F.js → chunk-5F74HGSQ.js} +1 -1
  99. package/dist/{chunk-Y2OSYQCG.js → chunk-5FOJ6N3V.js} +1 -1
  100. package/dist/{chunk-JP6GZTZA.js → chunk-5GYA4ERO.js} +1 -1
  101. package/dist/{chunk-YWMAGQ6C.js → chunk-5QJEJA5H.js} +3 -3
  102. package/dist/{chunk-FBGQXSBL.js → chunk-6ENEX5UH.js} +6 -6
  103. package/dist/{chunk-HC7GQZLN.js → chunk-6GBGKSNQ.js} +5 -5
  104. package/dist/{chunk-A5YNPQBD.js → chunk-6RWTLW75.js} +7 -7
  105. package/dist/{chunk-R2X6IQAD.js → chunk-6SJ4SKWZ.js} +1 -1
  106. package/dist/{chunk-UXSLCTCQ.js → chunk-6XJYUC7K.js} +1 -1
  107. package/dist/{chunk-XIMUZQJT.js → chunk-6Y7TK4EA.js} +2 -2
  108. package/dist/{chunk-UAKAKWWJ.js → chunk-7DG3WBGN.js} +1 -1
  109. package/dist/{chunk-W76IFXGP.js → chunk-7E4KZIX7.js} +1 -1
  110. package/dist/{chunk-YPMI6DNO.js → chunk-7NR6LMGH.js} +2 -2
  111. package/dist/{chunk-HMOB3FPD.js → chunk-7OX2AACL.js} +2 -2
  112. package/dist/{chunk-56XINHPT.js → chunk-7VSPHUIB.js} +24 -24
  113. package/dist/{chunk-3RQHJYRK.js → chunk-AIDYWH4D.js} +2 -2
  114. package/dist/{chunk-3HDUO5XG.js → chunk-AO2HCOE6.js} +2 -2
  115. package/dist/{chunk-3AWX2CAI.js → chunk-AWNX33WP.js} +1 -1
  116. package/dist/{chunk-NXBLILKG.js → chunk-BER2YLZT.js} +1 -1
  117. package/dist/{chunk-LRRPSQ25.js → chunk-BG52IECQ.js} +27 -4
  118. package/dist/{chunk-Z3JFXAIN.js → chunk-BHKCSRJG.js} +3 -3
  119. package/dist/{chunk-SHGAH24B.js → chunk-BIBBNDM3.js} +1 -1
  120. package/dist/{chunk-LZGYRZAP.js → chunk-C7SKFVXQ.js} +4 -4
  121. package/dist/{chunk-BCOGIX5I.js → chunk-CCY37D3C.js} +1 -1
  122. package/dist/{chunk-QILKDHJ7.js → chunk-CP6XE35Z.js} +2 -2
  123. package/dist/{chunk-NG22OOND.js → chunk-D6PNMFPF.js} +4 -4
  124. package/dist/{chunk-6XH6ETY6.js → chunk-DDAOY3DL.js} +1 -1
  125. package/dist/{chunk-LGTGY32U.js → chunk-DEBKL7WW.js} +4 -4
  126. package/dist/{chunk-Z7DIOYLS.js → chunk-DG3DWHYJ.js} +3 -3
  127. package/dist/{chunk-FNWXPIP4.js → chunk-DOO6M2XM.js} +5 -5
  128. package/dist/{chunk-FKMNMSZE.js → chunk-DXZRXNIC.js} +1 -1
  129. package/dist/{chunk-EOIHESMU.js → chunk-EEY77PKF.js} +1 -1
  130. package/dist/{chunk-B42HMZSQ.js → chunk-ERIXGUSV.js} +1 -1
  131. package/dist/{chunk-PQVIARTA.js → chunk-FBB2YMKB.js} +1 -1
  132. package/dist/{chunk-LCC7SS6F.js → chunk-FEJK36FV.js} +1 -1
  133. package/dist/{chunk-UO766M5I.js → chunk-FKANX6A7.js} +1 -1
  134. package/dist/{chunk-AZIJQ6IM.js → chunk-G3ABALZ7.js} +77 -12
  135. package/dist/{chunk-AAAJKHJM.js → chunk-G4MVORCE.js} +5 -5
  136. package/dist/{chunk-Y3CXCRCP.js → chunk-G66AOAYN.js} +1 -1
  137. package/dist/{chunk-YGE6OCHC.js → chunk-G6D6U2EY.js} +4 -4
  138. package/dist/{chunk-QADGKJAC.js → chunk-GRIGIKC4.js} +3 -3
  139. package/dist/{chunk-3OFIIUGD.js → chunk-GVVWEBTD.js} +3 -3
  140. package/dist/{chunk-N4JBGOHA.js → chunk-HBOSSJWS.js} +3 -3
  141. package/dist/{chunk-YNBQSYY5.js → chunk-HJ2DJJIK.js} +120 -7
  142. package/dist/{chunk-YWH7XWOX.js → chunk-HPDR3EL7.js} +4 -4
  143. package/dist/{chunk-VHKJIGNR.js → chunk-IMI5ZAOA.js} +1 -1
  144. package/dist/{chunk-BPNPJVYP.js → chunk-IQI5LAEK.js} +1 -1
  145. package/dist/{chunk-A5TICGUL.js → chunk-IVX4CW6I.js} +2 -2
  146. package/dist/{chunk-2NNTKVDN.js → chunk-KAKURNNS.js} +1 -1
  147. package/dist/{chunk-APOS4EIO.js → chunk-KP3J52RW.js} +3 -3
  148. package/dist/{chunk-X44QG7ES.js → chunk-KVPCFVAH.js} +1 -1
  149. package/dist/{chunk-DPS33ERV.js → chunk-KZSBPAEJ.js} +2 -2
  150. package/dist/{chunk-GLMR5PRH.js → chunk-L23CONP7.js} +2 -2
  151. package/dist/{chunk-WH2TTW4G.js → chunk-LDYQPD5H.js} +3 -3
  152. package/dist/{chunk-YROE2BJ6.js → chunk-MAY4VWEG.js} +2 -2
  153. package/dist/{chunk-4XFVEIPV.js → chunk-MLIRYXZ2.js} +63 -10
  154. package/dist/{chunk-DLATN3UV.js → chunk-MNEVSKUY.js} +1 -1
  155. package/dist/{chunk-ZHHGFNTZ.js → chunk-NF7JS7XW.js} +1 -1
  156. package/dist/{chunk-ZB3ZSZSY.js → chunk-OAP66FCX.js} +2 -2
  157. package/dist/{chunk-DDWLI43S.js → chunk-PCLIU4BP.js} +156 -156
  158. package/dist/{chunk-XRPN4YJ3.js → chunk-Q2RTUZXB.js} +4 -4
  159. package/dist/{chunk-OAYFVKNM.js → chunk-QHQW3VHV.js} +1 -1
  160. package/dist/{chunk-DLJSC6YA.js → chunk-QJTG3DN7.js} +1 -1
  161. package/dist/{chunk-MRQIIVHK.js → chunk-QWXBLCVK.js} +1 -1
  162. package/dist/{chunk-S4SSKW2Q.js → chunk-QZJY4RMF.js} +3 -3
  163. package/dist/{chunk-MXEEMTCV.js → chunk-R5YD5DIP.js} +16 -16
  164. package/dist/{chunk-MKO45WBR.js → chunk-RHEIOXVL.js} +1 -1
  165. package/dist/{chunk-VWSJP5PY.js → chunk-RZTSXHWF.js} +9 -9
  166. package/dist/{chunk-JUJIKD6I.js → chunk-S5OI42DL.js} +3 -3
  167. package/dist/{chunk-ZXMNWYAU.js → chunk-SDJ3TONY.js} +3 -3
  168. package/dist/{chunk-76HWKZMH.js → chunk-SJTFU3YJ.js} +6 -6
  169. package/dist/{chunk-LZX43KPR.js → chunk-SLJDYBLE.js} +1 -1
  170. package/dist/{chunk-L3L4KCBJ.js → chunk-SPHPROWZ.js} +2 -2
  171. package/dist/{chunk-2M5IU5MA.js → chunk-SS3FTK77.js} +1 -1
  172. package/dist/{chunk-AQPS7W6G.js → chunk-TEHJ5TOU.js} +11 -11
  173. package/dist/{chunk-F546SXKC.js → chunk-THMMMWIT.js} +66 -18
  174. package/dist/{chunk-SI7JLNKV.js → chunk-TLELTVAN.js} +1 -1
  175. package/dist/{chunk-6JZPYITB.js → chunk-TRZXFWRO.js} +54 -23
  176. package/dist/{chunk-ZG3ZXYKX.js → chunk-U7A2EACP.js} +3 -3
  177. package/dist/{chunk-TCGYYUDX.js → chunk-UMLDPQ24.js} +2 -2
  178. package/dist/{chunk-DEQJVVAU.js → chunk-UNNOYMQI.js} +1 -1
  179. package/dist/{chunk-DFV4KVU7.js → chunk-VDSAXP3N.js} +1 -1
  180. package/dist/{chunk-3ACGTDYH.js → chunk-VFUMCL6H.js} +1 -1
  181. package/dist/{chunk-GS2I4OUQ.js → chunk-VGP4T2L6.js} +4 -4
  182. package/dist/{chunk-BU4NQU5R.js → chunk-VSJ3Y26C.js} +1 -1
  183. package/dist/{chunk-CKG3O7XJ.js → chunk-WQ7YIU4M.js} +3 -3
  184. package/dist/{chunk-GER43BIE.js → chunk-X4V5ZLNX.js} +1 -1
  185. package/dist/{chunk-FVEAYEMK.js → chunk-X6HOIDIR.js} +3 -3
  186. package/dist/{chunk-T56CQURA.js → chunk-XA5FPMYR.js} +1 -1
  187. package/dist/{chunk-HVT6NOTO.js → chunk-XC6EXJBA.js} +4 -4
  188. package/dist/{chunk-DTNA2PBW.js → chunk-XIJIFRPA.js} +10 -10
  189. package/dist/chunk-XMUG7XDN.js +546 -0
  190. package/dist/{chunk-RKEREP4O.js → chunk-XT7ZZJVD.js} +1 -1
  191. package/dist/{chunk-NSJUD5BW.js → chunk-Y73MI7UH.js} +12 -12
  192. package/dist/{chunk-H6ET4UWS.js → chunk-YB5IW32Y.js} +4 -4
  193. package/dist/{chunk-KOAWUIG6.js → chunk-YTP6L76N.js} +5 -5
  194. package/dist/{chunk-XB5G7WB3.js → chunk-YV5JIEYI.js} +2 -2
  195. package/dist/{chunk-SD5PWIUP.js → chunk-Z5ERWCOL.js} +1 -1
  196. package/dist/{chunk-7UXI2DMI.js → chunk-ZB34E2OV.js} +10 -10
  197. package/dist/{chunk-GAUPRBOT.js → chunk-ZGNMI2WJ.js} +1 -1
  198. package/dist/{chunk-A2TRWGTX.js → chunk-ZGRLIQLE.js} +3 -3
  199. package/dist/{chunk-QEFKJLEY.js → chunk-ZL3D7XTR.js} +1 -1
  200. package/dist/{chunk-KPJYEYGL.js → chunk-ZLMVXK4O.js} +10 -10
  201. package/dist/{chunk-OJPN3XEN.js → chunk-ZSZVJ2FR.js} +1 -1
  202. package/dist/{cleanup-graph-garbage-3LT5R5VO.js → cleanup-graph-garbage-M5OYEPRR.js} +8 -8
  203. package/dist/{cli-shutdown-M7SEMYVZ.js → cli-shutdown-AY2FMXD6.js} +1 -1
  204. package/dist/{cloud-sync-command-YZYG22F7.js → cloud-sync-command-PRC4GV62.js} +2 -2
  205. package/dist/{cloud-sync-db-init-3VYFHYEG.js → cloud-sync-db-init-IYXPCNSJ.js} +1 -1
  206. package/dist/{cloud-sync-shutdown-A4EIAFXO.js → cloud-sync-shutdown-3F6XASFF.js} +3 -3
  207. package/dist/{co-activation-DGPZOQNM.js → co-activation-LB56BYW2.js} +3 -3
  208. package/dist/{co-occurrence-XQZZCRWV.js → co-occurrence-TKPZB3IR.js} +6 -6
  209. package/dist/{consent-passphrase-XTAQJIKQ.js → consent-passphrase-YQLAAPPC.js} +2 -2
  210. package/dist/{conversation-entity-extractor-4PIYOIG5.js → conversation-entity-extractor-J2UZGFG3.js} +3 -3
  211. package/dist/{crdt-sync-ZLD5EI2T.js → crdt-sync-GE6DVV2F.js} +4 -4
  212. package/dist/{crm-webhook-7FG7XJIG.js → crm-webhook-6HXNLEQV.js} +2 -2
  213. package/dist/{cto-delegation-gate-QCFAZHKI.js → cto-delegation-gate-QSWDPH67.js} +15 -15
  214. package/dist/{daemon-orchestration-K5RWVZA6.js → daemon-orchestration-YJ4GMHVM.js} +21 -21
  215. package/dist/{doc-graph-extractor-IJHGWTTK.js → doc-graph-extractor-XLAUARWE.js} +6 -6
  216. package/dist/{documents-CND4LHQK.js → documents-SZ76YQ3Q.js} +8 -8
  217. package/dist/{dreaming-CM26M46X.js → dreaming-ZQGMOZ2E.js} +20 -20
  218. package/dist/{employee-boot-brief-FUKC7RGM.js → employee-boot-brief-SV5JHCJL.js} +24 -24
  219. package/dist/{entity-boost-EIE76PER.js → entity-boost-KTADWOGJ.js} +1 -1
  220. package/dist/{exe-drift-HZXHPQRX.js → exe-drift-CT36U5DX.js} +4 -4
  221. package/dist/{exe-export-KZRXDR6W.js → exe-export-EJ4B74OU.js} +9 -9
  222. package/dist/{exe-import-QRELY26K.js → exe-import-UA6OIZ4C.js} +9 -9
  223. package/dist/{exe-key-53GDRW6F.js → exe-key-SKOOVJCT.js} +95 -94
  224. package/dist/{exe-org-I3H5H5VL.js → exe-org-WQARAD3U.js} +32 -32
  225. package/dist/{exe-snapshot-VUXHUEAC.js → exe-snapshot-2OXDANU3.js} +23 -23
  226. package/dist/{fast-db-init-NGVQV5J2.js → fast-db-init-YFUMI4NH.js} +1 -1
  227. package/dist/{founder-context-3QW7IIRX.js → founder-context-DMWIIDJ2.js} +2 -2
  228. package/dist/{founder-monitor-envelope-56PUEATO.js → founder-monitor-envelope-JYFWXZQ4.js} +4 -4
  229. package/dist/gateway/index.js +14 -14
  230. package/dist/{gateway-client-KFW7FKSO.js → gateway-client-ELHI2DWX.js} +1 -1
  231. package/dist/{git-staleness-QZM6S6ZB.js → git-staleness-K7HHMBWI.js} +3 -3
  232. package/dist/{global-procedures-NJ7UXIBT.js → global-procedures-ERZJFJUA.js} +5 -5
  233. package/dist/{graph-auto-extract-YKCCVXN2.js → graph-auto-extract-LUQ6QZ4P.js} +6 -6
  234. package/dist/{graph-query-A7JYKBHM.js → graph-query-KRNMWF77.js} +1 -1
  235. package/dist/{graph-rag-4HCOSELM.js → graph-rag-2W26GEGZ.js} +3 -3
  236. package/dist/{hook-integrity-PE3ZR6PD.js → hook-integrity-QFBZE5FK.js} +1 -1
  237. package/dist/{hook-prefetch-MEABRYQ3.js → hook-prefetch-WP3PEE4H.js} +16 -16
  238. package/dist/hooks/bug-report-worker.js +20 -20
  239. package/dist/hooks/codex-stop-task-finalizer.js +22 -22
  240. package/dist/hooks/commit-complete.js +19 -19
  241. package/dist/hooks/error-recall.js +11 -11
  242. package/dist/hooks/exe-heartbeat-hook.js +5 -5
  243. package/dist/hooks/ingest-worker.js +7 -7
  244. package/dist/hooks/ingest.js +13 -13
  245. package/dist/hooks/instructions-loaded.js +7 -7
  246. package/dist/hooks/manifest.json +20 -20
  247. package/dist/hooks/notification.js +6 -6
  248. package/dist/hooks/post-compact.js +5 -5
  249. package/dist/hooks/post-tool-combined.js +13 -13
  250. package/dist/hooks/pre-compact.js +19 -19
  251. package/dist/hooks/pre-tool-use.js +2 -2
  252. package/dist/hooks/prompt-submit.js +37 -37
  253. package/dist/hooks/session-end.js +24 -24
  254. package/dist/hooks/session-start.js +18 -18
  255. package/dist/hooks/stop.js +22 -22
  256. package/dist/hooks/subagent-stop.js +21 -21
  257. package/dist/hooks/summary-worker.js +23 -23
  258. package/dist/index.js +29 -29
  259. package/dist/{installer-CHKYUF4F.js → installer-ADGJLDVY.js} +7 -7
  260. package/dist/{installer-EB5YC2DW.js → installer-HCFVVQ6F.js} +7 -7
  261. package/dist/{installer-UMC6ZHE4.js → installer-ZNP4S32U.js} +7 -7
  262. package/dist/{intercom-queue-Y2XUK4NR.js → intercom-queue-NRECOZFL.js} +15 -15
  263. package/dist/lib/cloud-sync.js +16 -16
  264. package/dist/lib/consolidation.js +9 -9
  265. package/dist/lib/crypto.js +3 -3
  266. package/dist/lib/database.js +3 -3
  267. package/dist/lib/db-backup.js +1 -1
  268. package/dist/lib/db-write-worker.js +3 -3
  269. package/dist/lib/db.js +3 -3
  270. package/dist/lib/device-registry.js +1 -1
  271. package/dist/lib/employee-templates.js +6 -6
  272. package/dist/lib/employees.js +3 -3
  273. package/dist/lib/exe-daemon.js +91 -91
  274. package/dist/lib/exe-shims.js +47 -0
  275. package/dist/lib/hybrid-search.js +9 -9
  276. package/dist/lib/identity.js +3 -3
  277. package/dist/lib/keychain.js +1 -1
  278. package/dist/lib/license.js +2 -2
  279. package/dist/lib/messaging.js +16 -16
  280. package/dist/lib/post-tool-memory.js +5 -5
  281. package/dist/lib/registry-proxy.js +1 -1
  282. package/dist/lib/reminders.js +4 -4
  283. package/dist/lib/schedules.js +8 -8
  284. package/dist/lib/session-registry.js +5 -5
  285. package/dist/lib/skill-learning.js +9 -9
  286. package/dist/lib/store.js +7 -7
  287. package/dist/lib/task-router.js +4 -4
  288. package/dist/lib/tasks.js +17 -17
  289. package/dist/lib/tmux-routing.js +15 -15
  290. package/dist/lib/token-spend.js +4 -4
  291. package/dist/lib/ws-client.js +1 -1
  292. package/dist/{license-gate-OZ7QAPSR.js → license-gate-CB2OCT2G.js} +3 -3
  293. package/dist/{license-recheck-KM7YKZQA.js → license-recheck-ZAEPWMY7.js} +1 -1
  294. package/dist/{license-sync-ZBDH7W22.js → license-sync-UW4UH7F5.js} +31 -18
  295. package/dist/{maintenance-worker-HGOCITGW.js → maintenance-worker-OY2E4BM5.js} +3 -1
  296. package/dist/mcp/register-tools.js +94 -93
  297. package/dist/mcp/server.js +97 -96
  298. package/dist/mcp/tools/complete-reminder.js +5 -5
  299. package/dist/mcp/tools/create-reminder.js +5 -5
  300. package/dist/mcp/tools/create-task.js +19 -19
  301. package/dist/mcp/tools/deactivate-behavior.js +10 -10
  302. package/dist/mcp/tools/list-reminders.js +5 -5
  303. package/dist/mcp/tools/list-tasks.js +19 -19
  304. package/dist/mcp/tools/send-message.js +18 -18
  305. package/dist/mcp/tools/update-task.js +18 -18
  306. package/dist/{mcp-http-config-EZVN4MTJ.js → mcp-http-config-IPXCT6Y5.js} +5 -5
  307. package/dist/{mcp-session-identity-JFVK5KWI.js → mcp-session-identity-GRKQ6X6M.js} +15 -15
  308. package/dist/{memory-cards-DR6VSUXF.js → memory-cards-JN32U2KA.js} +7 -7
  309. package/dist/{memory-graph-extractor-T4IT4I65.js → memory-graph-extractor-3LN2GSMZ.js} +7 -7
  310. package/dist/{memory-maintenance-ROT5N576.js → memory-maintenance-YTNSNHD5.js} +1 -1
  311. package/dist/{memory-poisoning-defense-WL4GVB6K.js → memory-poisoning-defense-ISKHR76K.js} +3 -3
  312. package/dist/{memory-pressure-watchdog-IHLTVILV.js → memory-pressure-watchdog-P4QHXE3Z.js} +16 -16
  313. package/dist/{memory-reflection-SR657DTL.js → memory-reflection-R6TAIUOR.js} +7 -7
  314. package/dist/{memory-write-repository-RWFVCHEL.js → memory-write-repository-JTJE3AG4.js} +1 -1
  315. package/dist/{monitor-grants-F7WGLWA6.js → monitor-grants-KX5J6AQ7.js} +3 -3
  316. package/dist/{monitor-identity-7PRT4U2X.js → monitor-identity-WXIGBLYH.js} +2 -2
  317. package/dist/{notification-ledger-QMQ5OU65.js → notification-ledger-DKHZKGZX.js} +16 -16
  318. package/dist/{notifications-WJY5SFDV.js → notifications-ZQVBRXG5.js} +15 -15
  319. package/dist/{orchestration-events-CV72DYKD.js → orchestration-events-B3OHNBR4.js} +4 -4
  320. package/dist/{orchestrator-HVNMWEKQ.js → orchestrator-OG6BEUHS.js} +17 -17
  321. package/dist/{org-brief-session-XABQAU5S.js → org-brief-session-MHDLBUO4.js} +15 -15
  322. package/dist/{org-consent-policy-QQYN2HFH.js → org-consent-policy-OP5L627O.js} +5 -5
  323. package/dist/{org-join-VQMMOCQF.js → org-join-H3PBH7US.js} +9 -9
  324. package/dist/{org-key-admin-WNSGDXLU.js → org-key-admin-UEDWV3F4.js} +11 -11
  325. package/dist/{org-key-epoch-VVF3BSM3.js → org-key-epoch-BW72L7RI.js} +5 -5
  326. package/dist/{org-key-pin-HMB7WW73.js → org-key-pin-XBLJOF4A.js} +3 -3
  327. package/dist/{org-membership-4U6YMOWQ.js → org-membership-UHVIK3UH.js} +4 -4
  328. package/dist/{org-partner-config-L63KMLYM.js → org-partner-config-G3BGVBQT.js} +8 -8
  329. package/dist/{org-partner-runtime-MBP7JUAM.js → org-partner-runtime-H6MROHM7.js} +15 -15
  330. package/dist/{org-row-visibility-BYV2V764.js → org-row-visibility-JK5REXVH.js} +1 -1
  331. package/dist/{pipeline-router-5U5QC4KJ.js → pipeline-router-7L7AV55A.js} +4 -4
  332. package/dist/{plan-limits-XB5F7LLD.js → plan-limits-RKGJXYKE.js} +6 -6
  333. package/dist/{pre-tool-use-impl-ALN4BK7X.js → pre-tool-use-impl-Q3JG5RNT.js} +34 -34
  334. package/dist/{project-name-FUSV5KYR.js → project-name-KQUBSY5O.js} +4 -4
  335. package/dist/{projection-worker-WP35CX6N.js → projection-worker-LGELT4E6.js} +2 -2
  336. package/dist/{prospective-memory-KDW7MLF6.js → prospective-memory-ZESC2I6H.js} +3 -3
  337. package/dist/{push-notifications-OMJABEMF.js → push-notifications-YL2DRTGQ.js} +16 -16
  338. package/dist/{reproject-worktree-memories-NJ235TUP.js → reproject-worktree-memories-VPZRYPQM.js} +15 -15
  339. package/dist/{reranker-YBVXW2ZZ.js → reranker-XC2LXYD3.js} +1 -1
  340. package/dist/{retrieval-health-DDJQFV4A.js → retrieval-health-H4QJN3UZ.js} +1 -1
  341. package/dist/{review-polling-5XYUDU77.js → review-polling-67WTTJHH.js} +16 -16
  342. package/dist/runtime/index.js +23 -23
  343. package/dist/{session-events-54MSRNRE.js → session-events-7XFO27M5.js} +16 -16
  344. package/dist/{session-kill-telemetry-WXINI7UW.js → session-kill-telemetry-2F5INRA6.js} +16 -16
  345. package/dist/{session-scope-Z6UWY4NL.js → session-scope-GEXQAEYT.js} +15 -15
  346. package/dist/{setup-wizard-DND3EEIN.js → setup-wizard-NQI6GC2N.js} +2 -2
  347. package/dist/{shard-manager-TKAQSRYN.js → shard-manager-TJ323N7P.js} +2 -2
  348. package/dist/{skill-refinement-NKMYHUPK.js → skill-refinement-EQ3YVAGM.js} +4 -4
  349. package/dist/{skill-retrieval-5DU6G5AT.js → skill-retrieval-LABSBPVT.js} +11 -11
  350. package/dist/{skill-usage-YDCLNH63.js → skill-usage-WNCOURZY.js} +4 -4
  351. package/dist/{stack-generate-manifest-WGOICIAB.js → stack-generate-manifest-RKQBTLEY.js} +4 -4
  352. package/dist/{stack-promote-F42CIN3Z.js → stack-promote-ZVOIMFRF.js} +4 -4
  353. package/dist/{stack-release-35E3D6R7.js → stack-release-ZCHLWJXF.js} +5 -5
  354. package/dist/{stack-update-V64H2645.js → stack-update-AP6OC7LU.js} +3 -3
  355. package/dist/{steward-gate-AICO7WO2.js → steward-gate-BNI4K3GP.js} +4 -4
  356. package/dist/{subagent-brief-injection-NMIRQ742.js → subagent-brief-injection-ZXKMB5TZ.js} +26 -26
  357. package/dist/{support-bug-actions-ASWOZHR5.js → support-bug-actions-OYM3K4RU.js} +3 -3
  358. package/dist/{support-inbox-K7T6WVJW.js → support-inbox-2JOCSJUT.js} +12 -12
  359. package/dist/{task-enforcement-ZYN67NIM.js → task-enforcement-LUXQXSE6.js} +16 -16
  360. package/dist/{task-request-inbox-CJF4XNSY.js → task-request-inbox-4TOOJ6IR.js} +5 -5
  361. package/dist/{task-scope-M3GVO3IK.js → task-scope-OEA6KUTX.js} +15 -15
  362. package/dist/{tasks-crud-K55N5YNO.js → tasks-crud-GBNROE5E.js} +15 -15
  363. package/dist/{tasks-notify-FM5PGZQ2.js → tasks-notify-FMSTX6Q5.js} +16 -16
  364. package/dist/{tasks-review-KUF6HEPS.js → tasks-review-EAOT3SKK.js} +15 -15
  365. package/dist/{telemetry-upload-DYE34SI5.js → telemetry-upload-OFNKPITF.js} +8 -8
  366. package/dist/{token-budget-AHFSPXIA.js → token-budget-7K5PMPP2.js} +4 -4
  367. package/dist/{tool-telemetry-2SAG4DCP.js → tool-telemetry-HC7NHNWD.js} +1 -1
  368. package/dist/tui/App.js +25 -25
  369. package/dist/{tui-data-BZ2RM634.js → tui-data-C6STFM4Z.js} +19 -19
  370. package/dist/{update-support-U44WRJEG.js → update-support-KOJIIKHY.js} +11 -11
  371. package/dist/{whatsapp-5OYLYPOW.js → whatsapp-JDAZGYPN.js} +2 -2
  372. package/dist/{wiki-acl-B5CI5FVD.js → wiki-acl-7JCCDS7U.js} +1 -1
  373. package/dist/{work-claims-GY7TTKUA.js → work-claims-MDJ3JEUD.js} +4 -4
  374. package/dist/{work-state-heartbeat-6ZG7YVYR.js → work-state-heartbeat-GFPR5OVW.js} +1 -1
  375. package/dist/{workflow-engine-AABOUOVF.js → workflow-engine-YYR2DNFP.js} +2 -2
  376. package/dist/{worktree-UFOTUXOL.js → worktree-XJITSSNN.js} +5 -5
  377. package/dist/{worktree-ownership-guard-XEYU6M2R.js → worktree-ownership-guard-WEJF2C5E.js} +1 -1
  378. package/dist/{worktree-sweep-DUZQ7T5H.js → worktree-sweep-3FJSAGNK.js} +6 -6
  379. package/package.json +1 -1
  380. package/release-notes.json +7 -7
  381. package/stack.release.json +3 -3
  382. /package/dist/{chunk-NEKVGGPF.js → chunk-3NHFXUWK.js} +0 -0
  383. /package/dist/{chunk-Z4MWS4PP.js → chunk-7GCPTNHK.js} +0 -0
  384. /package/dist/{chunk-2MRQBGTY.js → chunk-7QIEF6OZ.js} +0 -0
  385. /package/dist/{chunk-SBOUSFLP.js → chunk-DHRIW7RJ.js} +0 -0
  386. /package/dist/{chunk-FNEUZBKI.js → chunk-E5RCYOLD.js} +0 -0
  387. /package/dist/{chunk-NOJUQ7YQ.js → chunk-FLC2S4BD.js} +0 -0
  388. /package/dist/{chunk-BILTDY5P.js → chunk-GVTIDG37.js} +0 -0
  389. /package/dist/{chunk-2KH6MZL5.js → chunk-HEEKYE6D.js} +0 -0
  390. /package/dist/{chunk-KVZB65B5.js → chunk-MY6P4E5J.js} +0 -0
  391. /package/dist/{chunk-4RFLBGOW.js → chunk-OMMQNLFE.js} +0 -0
  392. /package/dist/{chunk-NV7C4XKQ.js → chunk-QYCRJ76J.js} +0 -0
  393. /package/dist/{chunk-7WYV32ZH.js → chunk-USDMXIPZ.js} +0 -0
  394. /package/dist/{chunk-DJKUA73M.js → chunk-ZWQWLUZA.js} +0 -0
  395. /package/dist/{core-memory-GUEI64AZ.js → core-memory-DQ5A24DD.js} +0 -0
  396. /package/dist/{memory-isolation-6DALQPS2.js → memory-isolation-2M3GFNWG.js} +0 -0
  397. /package/dist/{oauth-server-7VWBWDO5.js → oauth-server-NWVJ26NL.js} +0 -0
  398. /package/dist/{project-boot-RSVYDIZF.js → project-boot-JAGN65MZ.js} +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  orgMembershipsPath,
3
3
  readActiveOrgMemberships
4
- } from "./chunk-4XFVEIPV.js";
4
+ } from "./chunk-MLIRYXZ2.js";
5
5
  import {
6
6
  resolveExeDataDir
7
7
  } from "./chunk-NPXIS2RY.js";
8
8
 
9
9
  // src/lib/org-departure.ts
10
- import { existsSync as existsSync3, mkdirSync as mkdirSync3, readFileSync as readFileSync3, rmSync, writeFileSync as writeFileSync3 } from "fs";
10
+ import { mkdirSync as mkdirSync3, readFileSync as readFileSync3, rmSync, statSync, writeFileSync as writeFileSync3 } from "fs";
11
11
  import os2 from "os";
12
12
  import path3 from "path";
13
13
 
@@ -175,6 +175,16 @@ function resolveTargetOrgId(explicit) {
175
175
  }
176
176
 
177
177
  // src/lib/org-departure.ts
178
+ function classifyPathPresence(p) {
179
+ try {
180
+ statSync(p);
181
+ return "present";
182
+ } catch (err) {
183
+ const code = err.code;
184
+ if (code === "ENOENT" || code === "ENOTDIR") return "absent";
185
+ return "inconclusive";
186
+ }
187
+ }
178
188
  var EXE_DIR2 = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? path3.join(os2.homedir(), ".exe-os");
179
189
  var PER_ORG_STATE_DIRS = [
180
190
  {
@@ -198,7 +208,13 @@ function orgSegment(orgId) {
198
208
  }
199
209
  function readMembershipsFile() {
200
210
  const p = orgMembershipsPath();
201
- if (!existsSync3(p)) return { version: 1, memberships: [] };
211
+ const presence = classifyPathPresence(p);
212
+ if (presence === "absent") return { version: 1, memberships: [] };
213
+ if (presence === "inconclusive") {
214
+ throw new Error(
215
+ `the local membership record at ${p} could not be verified (permission or I/O error); its existence is unknown, so it is being treated as possibly-present rather than absent`
216
+ );
217
+ }
202
218
  try {
203
219
  const parsed = JSON.parse(readFileSync3(p, "utf-8"));
204
220
  if (!Array.isArray(parsed?.memberships)) return { version: 1, memberships: [] };
@@ -216,7 +232,16 @@ async function departOrgToPersonalFreeTier(orgIdRaw, cause = "left") {
216
232
  const orgId = orgIdRaw.trim().toLowerCase();
217
233
  const notes = [];
218
234
  const failures = [];
219
- const file = readMembershipsFile();
235
+ forgetSeatReportingOrgId(orgId);
236
+ let file;
237
+ try {
238
+ file = readMembershipsFile();
239
+ } catch (err) {
240
+ failures.push(
241
+ `the local membership record for ${orgId} could not be verified (${err instanceof Error ? err.message : String(err)}). Nothing was changed; the file may exist and be unreadable rather than absent.`
242
+ );
243
+ file = { version: 1, memberships: [] };
244
+ }
220
245
  let changed = false;
221
246
  for (const m of file.memberships) {
222
247
  if (typeof m.org_id === "string" && m.org_id.toLowerCase() === orgId && m.status !== "revoked") {
@@ -236,11 +261,16 @@ async function departOrgToPersonalFreeTier(orgIdRaw, cause = "left") {
236
261
  }
237
262
  let consentCleared = false;
238
263
  const consentStatePath = path3.join(EXE_DIR2, "org-consent", orgSegment(orgId), "consent-state.json");
239
- if (!existsSync3(consentStatePath)) {
264
+ const consentPresence = classifyPathPresence(consentStatePath);
265
+ if (consentPresence === "absent") {
240
266
  consentCleared = true;
241
267
  notes.push(`No standing consent policies existed for ${orgId}; there was nothing to disarm.`);
268
+ } else if (consentPresence === "inconclusive") {
269
+ failures.push(
270
+ `could not determine whether standing consent policies exist for ${orgId} (permission or I/O error checking ${consentStatePath}). Treating this as NOT cleared \u2014 they may still be armed. Re-run the departure once the file is readable.`
271
+ );
242
272
  } else try {
243
- const { clearStandingPolicies } = await import("./org-consent-policy-QQYN2HFH.js");
273
+ const { clearStandingPolicies } = await import("./org-consent-policy-OP5L627O.js");
244
274
  await clearStandingPolicies(orgId);
245
275
  consentCleared = true;
246
276
  } catch (err) {
@@ -259,7 +289,7 @@ async function departOrgToPersonalFreeTier(orgIdRaw, cause = "left") {
259
289
  }
260
290
  let pollerStopped = false;
261
291
  try {
262
- const { stopOrgPartnerPollerFor } = await import("./org-partner-runtime-MBP7JUAM.js");
292
+ const { stopOrgPartnerPollerFor } = await import("./org-partner-runtime-H6MROHM7.js");
263
293
  pollerStopped = await stopOrgPartnerPollerFor(orgId);
264
294
  } catch (err) {
265
295
  failures.push(
@@ -268,7 +298,7 @@ async function departOrgToPersonalFreeTier(orgIdRaw, cause = "left") {
268
298
  }
269
299
  let seqFloor = 0;
270
300
  try {
271
- const { preserveOutboundSeqFloor } = await import("./task-request-inbox-CJF4XNSY.js");
301
+ const { preserveOutboundSeqFloor } = await import("./task-request-inbox-4TOOJ6IR.js");
272
302
  seqFloor = preserveOutboundSeqFloor(orgId);
273
303
  if (seqFloor > 0) {
274
304
  notes.push(
@@ -284,7 +314,14 @@ async function departOrgToPersonalFreeTier(orgIdRaw, cause = "left") {
284
314
  for (const { root, store, why } of PER_ORG_STATE_DIRS) {
285
315
  const dir = path3.join(root, orgSegment(orgId));
286
316
  try {
287
- if (!existsSync3(dir)) continue;
317
+ const presence = classifyPathPresence(dir);
318
+ if (presence === "absent") continue;
319
+ if (presence === "inconclusive") {
320
+ failures.push(
321
+ `${store} state for ${orgId} could not be checked (permission or I/O error on ${dir}); leaving it in place rather than guessing: ${why}.`
322
+ );
323
+ continue;
324
+ }
288
325
  rmSync(dir, { recursive: true, force: true });
289
326
  purged.push(store);
290
327
  } catch (err) {
@@ -301,11 +338,21 @@ async function departOrgToPersonalFreeTier(orgIdRaw, cause = "left") {
301
338
  `the local adminship note for ${orgId} was NOT removed (${err instanceof Error ? err.message : String(err)}).`
302
339
  );
303
340
  }
304
- const remaining = readMembershipsFile().memberships.filter((m) => m.status !== "revoked").map((m) => String(m.org_id));
341
+ let remaining;
342
+ let remainingVerified = true;
343
+ try {
344
+ remaining = readMembershipsFile().memberships.filter((m) => m.status !== "revoked").map((m) => String(m.org_id));
345
+ } catch (err) {
346
+ remainingVerified = false;
347
+ failures.push(
348
+ `remaining memberships could not be verified (${err instanceof Error ? err.message : String(err)}). Falling back to the membership state already read at the start of this departure, which may not reflect a concurrent change.`
349
+ );
350
+ remaining = file.memberships.filter((m) => m.status !== "revoked").map((m) => String(m.org_id));
351
+ }
305
352
  notes.push(
306
353
  "Your Partner, your keys, and your memory are untouched and stay on this machine. You continue on the personal FREE tier at no cost \u2014 leaving an organization never requires you to buy a plan to keep what is yours."
307
354
  );
308
- if (remaining.length === 0) {
355
+ if (remainingVerified && remaining.length === 0) {
309
356
  notes.push(
310
357
  "This install now belongs to no organization. It keeps working as a personal Partner; org-mode protections stay latched (clearing them is a separate, deliberate action)."
311
358
  );
@@ -329,8 +376,26 @@ async function departOrgToPersonalFreeTier(orgIdRaw, cause = "left") {
329
376
  notes
330
377
  };
331
378
  }
379
+ var _lastKnownSeatReportingOrgIds;
380
+ function forgetSeatReportingOrgId(orgId) {
381
+ if (_lastKnownSeatReportingOrgIds === void 0) return;
382
+ const lower = orgId.toLowerCase();
383
+ _lastKnownSeatReportingOrgIds = _lastKnownSeatReportingOrgIds.filter(
384
+ (id) => id.toLowerCase() !== lower
385
+ );
386
+ }
332
387
  function seatReportingOrgIds() {
333
- return readMembershipsFile().memberships.filter((m) => m.status === "active").map((m) => String(m.org_id).toLowerCase());
388
+ let ids;
389
+ try {
390
+ ids = readMembershipsFile().memberships.filter((m) => m.status === "active").map((m) => String(m.org_id).toLowerCase());
391
+ } catch (err) {
392
+ process.stderr.write(
393
+ `[exe-os] \u26A0 could not verify org memberships for seat reporting (${err instanceof Error ? err.message : String(err)}); ` + (_lastKnownSeatReportingOrgIds === void 0 ? "no prior confirmed read exists, so reporting none this tick" : `continuing to report the last confirmed set (${_lastKnownSeatReportingOrgIds.length} org(s))`) + "\n"
394
+ );
395
+ return _lastKnownSeatReportingOrgIds ?? [];
396
+ }
397
+ _lastKnownSeatReportingOrgIds = ids;
398
+ return ids;
334
399
  }
335
400
 
336
401
  export {
@@ -3,25 +3,25 @@ import {
3
3
  } from "./chunk-W4H2MZAS.js";
4
4
  import {
5
5
  resolvePartnerIdentities
6
- } from "./chunk-HC7GQZLN.js";
6
+ } from "./chunk-6GBGKSNQ.js";
7
7
  import {
8
8
  OrgKeyPinConflictError,
9
9
  orgKeyPinConfirmation,
10
10
  pinOrgKey,
11
11
  readOrgKeyPin
12
- } from "./chunk-QEGSRMGV.js";
12
+ } from "./chunk-52JOFQOK.js";
13
13
  import {
14
14
  displayFingerprint,
15
15
  ed25519PrivateKeyFromSeed,
16
16
  signKeyFingerprint
17
- } from "./chunk-B42HMZSQ.js";
17
+ } from "./chunk-ERIXGUSV.js";
18
18
  import {
19
19
  establishOrgMode,
20
20
  upsertOrgMembership
21
- } from "./chunk-4XFVEIPV.js";
21
+ } from "./chunk-MLIRYXZ2.js";
22
22
  import {
23
23
  isValidX25519Recipient
24
- } from "./chunk-DLJSC6YA.js";
24
+ } from "./chunk-QJTG3DN7.js";
25
25
 
26
26
  // src/lib/org-join.ts
27
27
  import { createHash, sign } from "crypto";
@@ -4,7 +4,7 @@ import {
4
4
  getGitRootAsync,
5
5
  isWorktreeDirty,
6
6
  isWorktreeDirtyAsync
7
- } from "./chunk-SI7JLNKV.js";
7
+ } from "./chunk-TLELTVAN.js";
8
8
 
9
9
  // src/lib/worktree-sweep.ts
10
10
  import { execFile } from "child_process";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  shutdownCli
3
- } from "./chunk-2KH6MZL5.js";
3
+ } from "./chunk-HEEKYE6D.js";
4
4
  import {
5
5
  fastDbInit
6
- } from "./chunk-2MRQBGTY.js";
6
+ } from "./chunk-7QIEF6OZ.js";
7
7
  import {
8
8
  sessionScopeFilter
9
- } from "./chunk-56XINHPT.js";
9
+ } from "./chunk-7VSPHUIB.js";
10
10
  import {
11
11
  formatStatusAll,
12
12
  formatStatusDeep,
@@ -17,7 +17,7 @@ import {
17
17
  getClient,
18
18
  isCoordinatorRole,
19
19
  loadEmployees
20
- } from "./chunk-YWH7XWOX.js";
20
+ } from "./chunk-HPDR3EL7.js";
21
21
  import {
22
22
  isMainModule
23
23
  } from "./chunk-6Y4B3QF6.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-YWH7XWOX.js";
3
+ } from "./chunk-HPDR3EL7.js";
4
4
 
5
5
  // src/lib/pipeline-router.ts
6
6
  import crypto from "crypto";
@@ -140,8 +140,8 @@ Agent response: ${agentResponse}` : ""
140
140
  }
141
141
  async function sinkEntityExtraction(msg, agentResponse, agentName) {
142
142
  try {
143
- const { extractFromConversation } = await import("./conversation-entity-extractor-4PIYOIG5.js");
144
- const { storeExtraction } = await import("./graph-rag-4HCOSELM.js");
143
+ const { extractFromConversation } = await import("./conversation-entity-extractor-J2UZGFG3.js");
144
+ const { storeExtraction } = await import("./graph-rag-2W26GEGZ.js");
145
145
  if ((msg.text?.length ?? 0) < 20) return false;
146
146
  if (msg.isHistorical) return false;
147
147
  const extraction = await extractFromConversation(msg, agentResponse, agentName);
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  withScopedReadWindow
3
- } from "./chunk-DPS33ERV.js";
3
+ } from "./chunk-KZSBPAEJ.js";
4
4
  import {
5
5
  requireOrgPartnerBinding,
6
6
  resolvePartnerIdentities
7
- } from "./chunk-HC7GQZLN.js";
7
+ } from "./chunk-6GBGKSNQ.js";
8
8
  import {
9
9
  allocateOutboundSeq,
10
10
  approveBriefManually,
@@ -22,7 +22,7 @@ import {
22
22
  sealMailboxEnvelope,
23
23
  unrecordedText,
24
24
  verifyManifest
25
- } from "./chunk-6JZPYITB.js";
25
+ } from "./chunk-TRZXFWRO.js";
26
26
  import {
27
27
  queueMailboxDeposit
28
28
  } from "./chunk-3FGBBJYM.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-SSC7EKY2.js";
11
11
  import {
12
12
  computeDegradations
13
- } from "./chunk-DQUGV7TQ.js";
13
+ } from "./chunk-3AOPBH5S.js";
14
14
  import {
15
15
  inventoryLocalSecretResidue,
16
16
  redactResiduePathForDisplay
@@ -41,13 +41,13 @@ import {
41
41
  } from "./chunk-T4IDLAZM.js";
42
42
  import {
43
43
  mcpHttpPort
44
- } from "./chunk-ID3KTUXS.js";
44
+ } from "./chunk-342ZBEDI.js";
45
45
  import {
46
46
  isWithin
47
47
  } from "./chunk-YRUZK2QA.js";
48
48
  import {
49
49
  inspectKeyCustodySync
50
- } from "./chunk-ZHHGFNTZ.js";
50
+ } from "./chunk-NF7JS7XW.js";
51
51
  import {
52
52
  checkSingleGotrueInstance
53
53
  } from "./chunk-FTZET5YX.js";
@@ -10,10 +10,18 @@ import {
10
10
  LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS,
11
11
  manifestEntryForCommand
12
12
  } from "./chunk-KM6XSFHP.js";
13
+ import {
14
+ inspectManagedShim,
15
+ isDirOnPath,
16
+ nodeVersionAt,
17
+ probeLoginShellNode,
18
+ readBinEntries,
19
+ resolveLoginPath
20
+ } from "./chunk-XMUG7XDN.js";
13
21
  import {
14
22
  formatDegradations,
15
23
  getRetrievalHealth
16
- } from "./chunk-DQUGV7TQ.js";
24
+ } from "./chunk-3AOPBH5S.js";
17
25
  import {
18
26
  cleanupLocalSecretResidue,
19
27
  inventoryLocalSecretResidue,
@@ -31,7 +39,7 @@ import {
31
39
  import {
32
40
  offloadReadIfMain,
33
41
  repairFtsTable
34
- } from "./chunk-YWH7XWOX.js";
42
+ } from "./chunk-HPDR3EL7.js";
35
43
 
36
44
  // src/bin/exe-doctor.ts
37
45
  import os from "os";
@@ -680,7 +688,7 @@ function auditHookOwnership() {
680
688
  }
681
689
  async function auditShards() {
682
690
  try {
683
- const { auditShardHealth } = await import("./shard-manager-TKAQSRYN.js");
691
+ const { auditShardHealth } = await import("./shard-manager-TJ323N7P.js");
684
692
  const report = await auditShardHealth();
685
693
  return {
686
694
  total: report.total,
@@ -781,6 +789,77 @@ function auditGlobalBin(opts) {
781
789
  const missing = expected.filter((name) => !exists(path.join(binDir, name)));
782
790
  return { checked: true, binDir, targetPresent, expected, missing, reinstallCommand };
783
791
  }
792
+ function findExeOsPackageRoot(moduleFile, opts) {
793
+ const exists = opts?.existsFn ?? existsSync;
794
+ const read = opts?.readFn ?? ((p) => readFileSync(p, "utf-8"));
795
+ let dir = path.dirname(moduleFile);
796
+ const root = path.parse(dir).root;
797
+ while (dir !== root) {
798
+ const pkgPath = path.join(dir, "package.json");
799
+ if (exists(pkgPath)) {
800
+ try {
801
+ const pkg = JSON.parse(read(pkgPath));
802
+ if (pkg.name === "@askexenow/exe-os" || pkg.name === "exe-os") return dir;
803
+ } catch {
804
+ }
805
+ }
806
+ dir = path.dirname(dir);
807
+ }
808
+ return null;
809
+ }
810
+ async function auditManagedShims(opts) {
811
+ const moduleFile = opts?.moduleFile ?? fileURLToPath(import.meta.url);
812
+ const homeDir = opts?.homeDir ?? os.homedir();
813
+ const env = opts?.env ?? process.env;
814
+ const exists = opts?.existsFn ?? existsSync;
815
+ const binDir = path.join(homeDir, ".local", "bin");
816
+ const packageRoot = opts?.packageRoot !== void 0 ? opts.packageRoot : findExeOsPackageRoot(moduleFile, { existsFn: exists });
817
+ const expected = packageRoot ? readBinEntries(packageRoot).map((e) => e.name) : [];
818
+ const loginPath = await resolveLoginPath(env);
819
+ const onLoginPath = loginPath.unknown || !loginPath.path ? "unknown" : isDirOnPath(binDir, loginPath.path) ? "yes" : "no";
820
+ const checks = expected.map((name) => inspectManagedShim(binDir, name, exists));
821
+ const missing = checks.filter((c) => !c.present).map((c) => c.name);
822
+ const invalid = checks.filter((c) => c.present && c.managed && (!c.nodeExists || !c.entryExists)).map((c) => ({ name: c.name, nodeExists: c.nodeExists, entryExists: c.entryExists }));
823
+ const validCount = checks.filter((c) => c.present && c.managed && c.nodeExists && c.entryExists).length;
824
+ const unmanagedCount = checks.filter((c) => c.present && !c.managed).length;
825
+ return { checked: expected.length > 0, binDir, onLoginPath, expected, missing, invalid, unmanagedCount, validCount };
826
+ }
827
+ async function auditLoginShellNode(opts) {
828
+ const probe = await (opts?.probe ?? probeLoginShellNode)();
829
+ const versionOf = opts?.versionOf ?? nodeVersionAt;
830
+ const installedNodePath = opts?.installedNodePath ?? null;
831
+ const installedNodeVersion = installedNodePath ? versionOf(installedNodePath) : null;
832
+ if (probe.unknown) {
833
+ return {
834
+ status: "warn",
835
+ detail: "Could not determine what a login shell resolves ($SHELL unset, the probe errored, or it timed out).",
836
+ loginNodePath: null,
837
+ loginNodeVersion: null,
838
+ installedNodePath,
839
+ installedNodeVersion
840
+ };
841
+ }
842
+ const loginNodeVersion = probe.loginNodePath ? versionOf(probe.loginNodePath) : null;
843
+ if (!probe.loginExePath) {
844
+ const installedLabel = installedNodeVersion ? installedNodeVersion.replace(/^v/, "") : "<installed-version>";
845
+ return {
846
+ status: "fail",
847
+ detail: `exe-launch-agent is not reachable from a login shell (login shell uses ${loginNodeVersion ?? probe.loginNodePath ?? "an unresolved Node"}${installedNodeVersion ? `, exe-os installed under ${installedNodeVersion}` : ""}) \u2192 run \`nvm alias default ${installedLabel}\` or reinstall with \`npm i -g @askexenow/exe-os\`.`,
848
+ loginNodePath: probe.loginNodePath,
849
+ loginNodeVersion,
850
+ installedNodePath,
851
+ installedNodeVersion
852
+ };
853
+ }
854
+ return {
855
+ status: "pass",
856
+ detail: "exe-launch-agent is reachable from a login shell.",
857
+ loginNodePath: probe.loginNodePath,
858
+ loginNodeVersion,
859
+ installedNodePath,
860
+ installedNodeVersion
861
+ };
862
+ }
784
863
  async function runAudit(client, flags) {
785
864
  const runConflicts = flags.conflicts || process.env.EXE_AUDIT_CONFLICTS === "1";
786
865
  const [stats, nullVectors, duplicates, bloated, fts, orphanedProjects, shards, keyHealth, localSecretResidue, outbox, cpuSteal, postinstallFailure, globalBin] = await Promise.all([
@@ -823,13 +902,16 @@ async function runAudit(client, flags) {
823
902
  const hookHealth = auditHookHealth();
824
903
  const hookOwnership = auditHookOwnership();
825
904
  const hookLiveness = auditRegisteredHookLiveness();
905
+ const shimHealth = await auditManagedShims();
906
+ const installedNodePath = inspectManagedShim(shimHealth.binDir, "exe-launch-agent").nodeBin;
907
+ const loginShellNode = await auditLoginShellNode({ installedNodePath });
826
908
  let retrievalHealth;
827
909
  try {
828
910
  retrievalHealth = await getRetrievalHealth();
829
911
  } catch {
830
912
  retrievalHealth = void 0;
831
913
  }
832
- return { stats, nullVectors, duplicates, duplicateCount, bloated, fts, orphanedProjects, conflicts, hookHealth, hookOwnership, hookLiveness, shards, keyHealth, localSecretResidue, outbox, cpuSteal, postinstallFailure, globalBin, retrievalHealth };
914
+ return { stats, nullVectors, duplicates, duplicateCount, bloated, fts, orphanedProjects, conflicts, hookHealth, hookOwnership, hookLiveness, shards, keyHealth, localSecretResidue, outbox, cpuSteal, postinstallFailure, globalBin, shimHealth, loginShellNode, retrievalHealth };
833
915
  }
834
916
  function indicator(value, warn) {
835
917
  if (value === 0) return "\u{1F7E2}";
@@ -1006,6 +1088,26 @@ function formatReport(report, flags) {
1006
1088
  lines.push(` Reinstall to restore it: ${gb.reinstallCommand}`);
1007
1089
  }
1008
1090
  }
1091
+ const lsn = report.loginShellNode;
1092
+ if (lsn.status === "pass") {
1093
+ lines.push(`\u{1F7E2} Login shell: exe-launch-agent reachable${lsn.loginNodeVersion ? ` (${lsn.loginNodeVersion})` : ""}`);
1094
+ } else if (lsn.status === "fail") {
1095
+ lines.push("\u{1F534} Login shell: exe-launch-agent NOT reachable from a fresh login shell");
1096
+ lines.push(` ${lsn.detail}`);
1097
+ } else {
1098
+ lines.push(`\u{1F7E0} Login shell: unknown \u2014 ${lsn.detail}`);
1099
+ }
1100
+ const sm = report.shimHealth;
1101
+ if (sm.checked) {
1102
+ if (sm.missing.length === 0 && sm.invalid.length === 0) {
1103
+ lines.push(`\u{1F7E2} Command shims: ${fmtNum(sm.validCount)}/${fmtNum(sm.expected.length)} valid in ${sm.binDir}${sm.onLoginPath !== "yes" ? " (not on login PATH)" : ""}`);
1104
+ } else {
1105
+ lines.push(`\u{1F7E0} Command shims: ${fmtNum(sm.missing.length)} missing, ${fmtNum(sm.invalid.length)} broken in ${sm.binDir}`);
1106
+ for (const inv of sm.invalid.slice(0, 5)) {
1107
+ lines.push(` ${inv.name}: ${!inv.nodeExists ? "node missing" : ""}${!inv.nodeExists && !inv.entryExists ? "; " : ""}${!inv.entryExists ? "dist entry missing" : ""}`);
1108
+ }
1109
+ }
1110
+ }
1009
1111
  const sh = report.shards;
1010
1112
  if (sh.total > 0) {
1011
1113
  if (sh.unreadable === 0 && sh.schemaMismatches === 0) {
@@ -1129,6 +1231,12 @@ function formatReport(report, flags) {
1129
1231
  if (report.globalBin.checked && report.globalBin.missing.length > 0) {
1130
1232
  recs.push(`Global command(s) ${report.globalBin.missing.join(", ")} are missing (likely AV/CleanMyMac quarantine \u2014 known false positive). Restore with \`${report.globalBin.reinstallCommand}\`. See SECURITY.md "Antivirus false positives".`);
1131
1233
  }
1234
+ if (report.loginShellNode.status === "fail") {
1235
+ recs.push(report.loginShellNode.detail);
1236
+ }
1237
+ if (report.shimHealth.checked && (report.shimHealth.missing.length > 0 || report.shimHealth.invalid.length > 0)) {
1238
+ recs.push(`Re-run \`npm i -g @askexenow/exe-os\` to regenerate the command shims in ${report.shimHealth.binDir}.`);
1239
+ }
1132
1240
  if (report.retrievalHealth) {
1133
1241
  for (const d of report.retrievalHealth.degradations) {
1134
1242
  if (d.severity === "critical" || d.severity === "warn") {
@@ -1265,7 +1373,7 @@ function shouldFixShards(shards) {
1265
1373
  return shards.unreadable > 0 || shards.schemaMismatches > 0;
1266
1374
  }
1267
1375
  async function fixShards(dryRun) {
1268
- const { auditShardHealth } = await import("./shard-manager-TKAQSRYN.js");
1376
+ const { auditShardHealth } = await import("./shard-manager-TJ323N7P.js");
1269
1377
  const report = await auditShardHealth({ repair: true, dryRun });
1270
1378
  return {
1271
1379
  total: report.total,
@@ -1330,7 +1438,9 @@ function emptyAuditReport() {
1330
1438
  outbox: { bugReports: { total: 0, unsent: 0 }, featureRequests: { total: 0, unsent: 0 } },
1331
1439
  cpuSteal: { available: false, stealPercent: null, severity: "na", source: "none", message: "not checked" },
1332
1440
  postinstallFailure: null,
1333
- globalBin: { checked: false, binDir: null, targetPresent: false, expected: ["exe", "exe-os"], missing: [], reinstallCommand: "npm install -g @askexenow/exe-os" }
1441
+ globalBin: { checked: false, binDir: null, targetPresent: false, expected: ["exe", "exe-os"], missing: [], reinstallCommand: "npm install -g @askexenow/exe-os" },
1442
+ shimHealth: { checked: false, binDir: "", onLoginPath: "unknown", expected: [], missing: [], invalid: [], unmanagedCount: 0, validCount: 0 },
1443
+ loginShellNode: { status: "warn", detail: "not checked", loginNodePath: null, loginNodeVersion: null, installedNodePath: null, installedNodeVersion: null }
1334
1444
  };
1335
1445
  }
1336
1446
  async function main(argv = process.argv.slice(2)) {
@@ -1340,7 +1450,7 @@ async function main(argv = process.argv.slice(2)) {
1340
1450
  console.log(formatRestartReport(restartReport));
1341
1451
  return emptyAuditReport();
1342
1452
  }
1343
- const { fastDbInit } = await import("./fast-db-init-NGVQV5J2.js");
1453
+ const { fastDbInit } = await import("./fast-db-init-YFUMI4NH.js");
1344
1454
  const client = await fastDbInit();
1345
1455
  const report = await runAudit(client, flags);
1346
1456
  console.log(formatReport(report, flags));
@@ -1453,6 +1563,9 @@ export {
1453
1563
  auditCpuSteal,
1454
1564
  auditPostinstallFailure,
1455
1565
  auditGlobalBin,
1566
+ findExeOsPackageRoot,
1567
+ auditManagedShims,
1568
+ auditLoginShellNode,
1456
1569
  runAudit,
1457
1570
  formatReport,
1458
1571
  fixNullVectors,
@@ -7,14 +7,14 @@ import {
7
7
  import {
8
8
  listBackups,
9
9
  preBackupCheckpoint
10
- } from "./chunk-XIMUZQJT.js";
10
+ } from "./chunk-6Y7TK4EA.js";
11
11
  import {
12
12
  MEMORY_PROJECTION_OUTBOX_INDEX_SQL,
13
13
  MEMORY_PROJECTION_OUTBOX_TABLE_SQL,
14
14
  MEMORY_PROJECTION_OUTBOX_UNIQUE_INDEX_SQL,
15
15
  PROJECTION_CHECKPOINT_TABLE_SQL,
16
16
  ensureMemoryWriteIndex
17
- } from "./chunk-BU4NQU5R.js";
17
+ } from "./chunk-VSJ3Y26C.js";
18
18
  import {
19
19
  recordDbOpen
20
20
  } from "./chunk-5YEUPUV4.js";
@@ -1515,7 +1515,7 @@ async function migrateReflectionDedup(client) {
1515
1515
  "ALTER TABLE memory_reflections ADD COLUMN dedup_key TEXT",
1516
1516
  "migration add memory_reflections.dedup_key"
1517
1517
  );
1518
- const { reflectionDedupKey } = await import("./memory-reflection-SR657DTL.js");
1518
+ const { reflectionDedupKey } = await import("./memory-reflection-R6TAIUOR.js");
1519
1519
  const keyForRow = (row) => {
1520
1520
  let sources = [];
1521
1521
  try {
@@ -2573,7 +2573,7 @@ async function sweepExpiredSoftDeletedMemories(client, options = {}) {
2573
2573
  const purgeArchived = archDays !== void 0;
2574
2574
  const BATCH_SIZE = 2e3;
2575
2575
  const MAX_BATCHES = 500;
2576
- const { cleanupCardsForMemories, cleanupGraphLinksForMemories } = await import("./graph-rag-4HCOSELM.js");
2576
+ const { cleanupCardsForMemories, cleanupGraphLinksForMemories } = await import("./graph-rag-2W26GEGZ.js");
2577
2577
  const softCutoff = `-${softDays} days`;
2578
2578
  const selectArgsBase = [softCutoff];
2579
2579
  let predicate = `status = 'deleted' AND COALESCE(deleted_at, timestamp) < datetime('now', ?)`;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-YWH7XWOX.js";
3
+ } from "./chunk-HPDR3EL7.js";
4
4
 
5
5
  // src/lib/token-budget.ts
6
6
  var WARN_THRESHOLD = 0.8;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  clean,
3
3
  stableId
4
- } from "./chunk-7WYV32ZH.js";
4
+ } from "./chunk-USDMXIPZ.js";
5
5
 
6
6
  // src/lib/reflection-checkpoints.ts
7
7
  function parsePayload(payload) {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  sessionScopeFilter
3
- } from "./chunk-56XINHPT.js";
3
+ } from "./chunk-7VSPHUIB.js";
4
4
  import {
5
5
  leaseExpiryIso
6
6
  } from "./chunk-E23LNUWJ.js";
7
7
  import {
8
8
  getProjectName
9
- } from "./chunk-SD5PWIUP.js";
9
+ } from "./chunk-Z5ERWCOL.js";
10
10
 
11
11
  // src/lib/subagent-observability.ts
12
12
  var MAX_RESULT_DIGEST_CHARS = 200;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getIdentity,
3
3
  loadEmployeesSync
4
- } from "./chunk-YWH7XWOX.js";
4
+ } from "./chunk-HPDR3EL7.js";
5
5
 
6
6
  // src/lib/drift-probes.ts
7
7
  var DRIFT_THRESHOLD = 80;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  listBehaviors
3
- } from "./chunk-L3L4KCBJ.js";
3
+ } from "./chunk-SPHPROWZ.js";
4
4
  import {
5
5
  incrementSkillUsage
6
- } from "./chunk-PQVIARTA.js";
6
+ } from "./chunk-FBB2YMKB.js";
7
7
 
8
8
  // src/lib/behavior-injection.ts
9
9
  import { appendFile } from "fs/promises";
@@ -349,7 +349,7 @@ async function injectBehaviors(opts) {
349
349
  `[behavior-injection] ${opts.assignedTo} <- ${selected.length}/${behaviors.length} behaviour(s) for "${opts.title.slice(0, 60)}": ` + selected.map((s) => `${s.behavior.id.slice(0, 8)}(${s.score.toFixed(2)})`).join(" ") + "\n"
350
350
  );
351
351
  await incrementSkillUsage(selected.map((s) => s.behavior));
352
- const { recordBehaviorsConsulted } = await import("./skill-usage-YDCLNH63.js");
352
+ const { recordBehaviorsConsulted } = await import("./skill-usage-WNCOURZY.js");
353
353
  await recordBehaviorsConsulted(selected.map((s) => s.behavior.id));
354
354
  return selected;
355
355
  } catch (err) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isExeSession
3
- } from "./chunk-56XINHPT.js";
3
+ } from "./chunk-7VSPHUIB.js";
4
4
  import {
5
5
  loadConfigSync
6
6
  } from "./chunk-MMS2HBRT.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registerScopedQueryChokepoint,
3
3
  scopedQueryChokepointStatus
4
- } from "./chunk-6JZPYITB.js";
4
+ } from "./chunk-TRZXFWRO.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-YWH7XWOX.js";
7
+ } from "./chunk-HPDR3EL7.js";
8
8
 
9
9
  // src/lib/org-scoped-rows.ts
10
10
  var SCOPED_QUERY_MAX_LIMIT = 200;
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-RGPEUXOE.js";
6
6
  import {
7
7
  sessionScopeFilter
8
- } from "./chunk-56XINHPT.js";
8
+ } from "./chunk-7VSPHUIB.js";
9
9
  import {
10
10
  isWithin
11
11
  } from "./chunk-YRUZK2QA.js";
@@ -297,7 +297,7 @@ async function sweepTasks(projectName, options = {}) {
297
297
  }
298
298
  if (!dryRun) {
299
299
  try {
300
- const { updateTaskStatus } = await import("./tasks-crud-K55N5YNO.js");
300
+ const { updateTaskStatus } = await import("./tasks-crud-GBNROE5E.js");
301
301
  await updateTaskStatus({
302
302
  taskId: task.id,
303
303
  status: "needs_review",