@askexenow/exe-os 0.9.239 → 0.9.243

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 (316) hide show
  1. package/deploy/compose/.env.customer.example +12 -0
  2. package/deploy/compose/.env.example +13 -1
  3. package/deploy/compose/cloudflared/config.yml.example +23 -4
  4. package/deploy/compose/docker-compose.yml +27 -7
  5. package/deploy/compose/generate-env.ts +49 -1
  6. package/deploy/compose/init-db.sql +10 -2
  7. package/deploy/stack-manifests/v0.9.json +113 -9
  8. package/dist/{active-agent-7MIVNARP.js → active-agent-KO4ZWDXE.js} +4 -4
  9. package/dist/{active-agent-55C5Y3XL.js → active-agent-KP2O52HA.js} +4 -4
  10. package/dist/{agentic-ontology-NCAQIQQI.js → agentic-ontology-DXE5J6I5.js} +1 -1
  11. package/dist/{backfill-metadata-3JP7EZ2U.js → backfill-metadata-DFTIGPXP.js} +7 -7
  12. package/dist/{background-jobs-RWL46VRD.js → background-jobs-CRXY7T4Y.js} +2 -2
  13. package/dist/{behaviors-6BGALYGW.js → behaviors-BL3QCHBT.js} +4 -4
  14. package/dist/bin/age-ontology-load.js +2 -2
  15. package/dist/bin/agentic-ontology-backfill.js +9 -9
  16. package/dist/bin/agentic-reflection-backfill.js +10 -10
  17. package/dist/bin/agentic-semantic-label.js +9 -9
  18. package/dist/bin/backfill-conversations.js +9 -9
  19. package/dist/bin/backfill-responses.js +9 -9
  20. package/dist/bin/backfill-vectors.js +11 -11
  21. package/dist/bin/bulk-sync-postgres.js +10 -10
  22. package/dist/bin/cc-doctor.js +3 -3
  23. package/dist/bin/cleanup-stale-review-tasks.js +13 -13
  24. package/dist/bin/cli.js +27 -22
  25. package/dist/bin/exe-agent-config.js +4 -4
  26. package/dist/bin/exe-agent.js +8 -8
  27. package/dist/bin/exe-assign.js +11 -11
  28. package/dist/bin/exe-boot.js +22 -22
  29. package/dist/bin/exe-call.js +5 -5
  30. package/dist/bin/exe-cloud.js +8 -8
  31. package/dist/bin/exe-dispatch.js +13 -13
  32. package/dist/bin/exe-doctor.js +1 -1
  33. package/dist/bin/exe-export-behaviors.js +10 -10
  34. package/dist/bin/exe-forget.js +9 -9
  35. package/dist/bin/exe-gateway.js +8 -8
  36. package/dist/bin/exe-healthcheck.js +3 -3
  37. package/dist/bin/exe-heartbeat.js +13 -13
  38. package/dist/bin/exe-kill.js +18 -18
  39. package/dist/bin/exe-launch-agent.js +22 -22
  40. package/dist/bin/exe-new-employee.js +8 -8
  41. package/dist/bin/exe-pending-messages.js +14 -14
  42. package/dist/bin/exe-pending-notifications.js +13 -13
  43. package/dist/bin/exe-pending-reviews.js +13 -13
  44. package/dist/bin/exe-rename.js +5 -5
  45. package/dist/bin/exe-review.js +17 -17
  46. package/dist/bin/exe-search.js +8 -8
  47. package/dist/bin/exe-session-cleanup.js +20 -20
  48. package/dist/bin/exe-settings.js +7 -7
  49. package/dist/bin/exe-start-codex.js +14 -14
  50. package/dist/bin/exe-start-opencode.js +11 -11
  51. package/dist/bin/exe-status.js +14 -14
  52. package/dist/bin/exe-support.js +3 -3
  53. package/dist/bin/exe-team.js +4 -4
  54. package/dist/bin/git-sweep.js +13 -13
  55. package/dist/bin/graph-backfill.js +8 -8
  56. package/dist/bin/graph-export.js +8 -8
  57. package/dist/bin/import-history.js +10 -10
  58. package/dist/bin/install.js +7 -7
  59. package/dist/bin/intercom-check.js +4 -4
  60. package/dist/bin/mcp-sessions.js +2 -2
  61. package/dist/bin/orchestration-metrics.js +5 -5
  62. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  63. package/dist/bin/postgres-agentic-semantic-backfill.js +3 -3
  64. package/dist/bin/scan-tasks.js +13 -13
  65. package/dist/bin/setup.js +3 -3
  66. package/dist/bin/shard-migrate.js +8 -8
  67. package/dist/bin/stack-update.js +324 -20
  68. package/dist/bin/verify-stack.js +3 -383
  69. package/dist/bin/vps-backup.js +8 -160
  70. package/dist/bin/vps-health-gate.js +10 -220
  71. package/dist/{branding-I7YYX4FM.js → branding-XWMO5EDR.js} +1 -1
  72. package/dist/{capacity-monitor-IFCZKRPG.js → capacity-monitor-4CSBC7AP.js} +14 -14
  73. package/dist/{catchup-brief-PIDRWXOW.js → catchup-brief-LF5Z6Q6E.js} +17 -17
  74. package/dist/{chunk-FGJUGDNM.js → chunk-222SI7QC.js} +14 -14
  75. package/dist/{chunk-JZMVLAZ2.js → chunk-2WBBVEIB.js} +1 -1
  76. package/dist/{chunk-JDOE33C2.js → chunk-3V53HH5T.js} +4 -4
  77. package/dist/{chunk-2KZSKURT.js → chunk-57SULZJ2.js} +3 -3
  78. package/dist/{chunk-QI4IXJN7.js → chunk-5CHYEKMH.js} +7 -4
  79. package/dist/chunk-5DMAMQNU.js +168 -0
  80. package/dist/{chunk-PLQAFB3Z.js → chunk-5JIG2FP2.js} +1 -1
  81. package/dist/{chunk-UWQ3XCDG.js → chunk-5WK7X5CF.js} +2 -2
  82. package/dist/{chunk-DDPAQ4LT.js → chunk-6JAGJN77.js} +2 -2
  83. package/dist/{chunk-7F37NMKB.js → chunk-73UE2PHT.js} +1 -1
  84. package/dist/{chunk-JL3K5OTS.js → chunk-7IZWLMTP.js} +1 -1
  85. package/dist/{chunk-ELRRL2NC.js → chunk-A4K2ZT6N.js} +4 -4
  86. package/dist/{chunk-GWYADLIW.js → chunk-AHXEU5XB.js} +1 -1
  87. package/dist/{chunk-WSHMBME6.js → chunk-AWRL5FGM.js} +19 -78
  88. package/dist/{chunk-OMPCFLWA.js → chunk-BSPOEYAO.js} +1 -1
  89. package/dist/{chunk-DHVC4RN7.js → chunk-CBDPEJOR.js} +5 -5
  90. package/dist/{chunk-2H55BIV2.js → chunk-CEJO7244.js} +2 -2
  91. package/dist/{chunk-FKWZVO2T.js → chunk-CPXGLSIL.js} +3 -3
  92. package/dist/{chunk-HX5G4AS4.js → chunk-CWITU7DW.js} +2 -2
  93. package/dist/{chunk-5GG7MTRJ.js → chunk-DGBGIXCC.js} +4 -4
  94. package/dist/{chunk-IQXPMK46.js → chunk-DLZYAYVM.js} +60 -14
  95. package/dist/{chunk-PPYWQV2M.js → chunk-DR5BGWFR.js} +2 -2
  96. package/dist/{chunk-BZWKTFEB.js → chunk-ENVRFBTB.js} +2 -2
  97. package/dist/{chunk-DUVO2PUJ.js → chunk-F3GM6OOP.js} +4 -4
  98. package/dist/{chunk-HNLPLLE6.js → chunk-F7JLZXHC.js} +60 -26
  99. package/dist/{chunk-AL4DRC5H.js → chunk-FFLILAG6.js} +1 -1
  100. package/dist/{chunk-BZNI4OK5.js → chunk-GHEWRYMY.js} +18 -2
  101. package/dist/{chunk-C7SFJO5F.js → chunk-GHT4REOS.js} +5 -5
  102. package/dist/{chunk-FBWUJEXS.js → chunk-HANG6NLF.js} +4 -6
  103. package/dist/{chunk-5NJ4A4ZA.js → chunk-HCBMPZDT.js} +1 -1
  104. package/dist/chunk-HOGTZLVU.js +244 -0
  105. package/dist/{chunk-IQSCZDBQ.js → chunk-I5PIBL56.js} +3 -3
  106. package/dist/chunk-IRHNV4GY.js +388 -0
  107. package/dist/{chunk-F4TCKCKK.js → chunk-ITZVPCBQ.js} +33 -12
  108. package/dist/{chunk-4HROS3GJ.js → chunk-IZVKWBIP.js} +1 -1
  109. package/dist/{chunk-DKI5BTBC.js → chunk-J7V7LPPX.js} +2 -2
  110. package/dist/{chunk-TOZ5NN5V.js → chunk-JLKUVK5J.js} +1 -1
  111. package/dist/{chunk-4SC65UBG.js → chunk-JLNXKG3K.js} +1 -1
  112. package/dist/{chunk-KVSQOG3W.js → chunk-K2BDE2B5.js} +4 -4
  113. package/dist/{chunk-KDJRFJDL.js → chunk-K333WOW4.js} +30 -2
  114. package/dist/{chunk-6LBCUA2A.js → chunk-KEZXW3RP.js} +1 -1
  115. package/dist/{chunk-W7G3GY4I.js → chunk-KLQI7QY4.js} +3 -3
  116. package/dist/{chunk-UODVZGBQ.js → chunk-KN7LPTIB.js} +1 -1
  117. package/dist/{chunk-ESKBZN4Q.js → chunk-L4WRH3DL.js} +1 -1
  118. package/dist/{chunk-VFQKKMKE.js → chunk-LAOB5BKV.js} +2 -2
  119. package/dist/{chunk-MAN5LZQ4.js → chunk-LQSFP2BV.js} +1 -1
  120. package/dist/{chunk-EJ7LOTV2.js → chunk-LSFHEMVI.js} +9 -9
  121. package/dist/{chunk-RA2RO27E.js → chunk-MCESA5UW.js} +2 -2
  122. package/dist/{chunk-UPMHG7ET.js → chunk-MEIHREPM.js} +1 -1
  123. package/dist/{chunk-D5C56WO3.js → chunk-MOZ2YQ54.js} +1 -1
  124. package/dist/{chunk-CLGB3FGL.js → chunk-MPX3TRMQ.js} +2 -2
  125. package/dist/{chunk-5R75ODPS.js → chunk-NBY6R37W.js} +61 -232
  126. package/dist/{chunk-RWFGXC35.js → chunk-NEYQAEYU.js} +7 -7
  127. package/dist/{chunk-MBHZDXGN.js → chunk-NL35XNLI.js} +1 -1
  128. package/dist/{chunk-TPQVLYSV.js → chunk-NLGMHPEN.js} +1 -1
  129. package/dist/{chunk-5LMH4YHG.js → chunk-NRVV4Y5V.js} +4 -4
  130. package/dist/{chunk-GN5VHPPR.js → chunk-NVZR7T4E.js} +1 -1
  131. package/dist/{chunk-Y2L7RMGH.js → chunk-NWBHL5PI.js} +1 -1
  132. package/dist/{chunk-YPYDLW75.js → chunk-OEMX65EA.js} +1 -1
  133. package/dist/{chunk-UAFUGPKO.js → chunk-ONAQAL3O.js} +1 -1
  134. package/dist/{chunk-AVM7XZE4.js → chunk-OWQ3CCYJ.js} +7 -6
  135. package/dist/{chunk-K525WLL7.js → chunk-PI6V23GF.js} +5 -4
  136. package/dist/{chunk-AURM7FOT.js → chunk-Q2OAQPWY.js} +1 -1
  137. package/dist/{chunk-FB5VRO5S.js → chunk-QLDWASTX.js} +28 -32
  138. package/dist/{chunk-EPWDTS2Q.js → chunk-QMTGMCWB.js} +1 -1
  139. package/dist/{chunk-VI2FJY2M.js → chunk-QP4FHME2.js} +2 -2
  140. package/dist/{chunk-NJWK6J4N.js → chunk-QUNKPR6Y.js} +5 -5
  141. package/dist/{chunk-O6DAF2TY.js → chunk-QUZVAHO7.js} +2 -2
  142. package/dist/{chunk-VHKL4S4T.js → chunk-RRHSONV5.js} +2 -2
  143. package/dist/{chunk-GPF6X6HE.js → chunk-RYDHEWYY.js} +2 -2
  144. package/dist/{chunk-C2YS2AA6.js → chunk-U7WOVXBB.js} +2 -2
  145. package/dist/chunk-UIRWDGMB.js +230 -0
  146. package/dist/{chunk-FE45RXGC.js → chunk-V2GZMY6O.js} +1 -1
  147. package/dist/{chunk-PATCHPNY.js → chunk-VHALWCUO.js} +1 -1
  148. package/dist/{chunk-HLZSC5WK.js → chunk-VQAP35DA.js} +20 -18
  149. package/dist/{chunk-452XB7OZ.js → chunk-VRIMTCX2.js} +1 -1
  150. package/dist/{chunk-SUNYJ6YE.js → chunk-VT2B5BHM.js} +1 -1
  151. package/dist/{chunk-UZIJDYDA.js → chunk-VWVJVQDH.js} +2 -2
  152. package/dist/{chunk-TRZ5KA2R.js → chunk-VXIMSRTO.js} +2 -2
  153. package/dist/{chunk-DAZIV4QZ.js → chunk-WCXZF42W.js} +1 -1
  154. package/dist/{chunk-6OJJF4WP.js → chunk-XJUUWHVN.js} +1 -1
  155. package/dist/{chunk-F7LU65PQ.js → chunk-Y25OJWOQ.js} +14 -2
  156. package/dist/{chunk-2ORPA23Y.js → chunk-YMXXD2GW.js} +36 -8
  157. package/dist/{chunk-5WLMF6PL.js → chunk-YMZHTTOQ.js} +1 -1
  158. package/dist/{chunk-7DIDOQCX.js → chunk-YRVW57UW.js} +139 -125
  159. package/dist/{chunk-BRFH5X7G.js → chunk-Z7VDUS6L.js} +1 -1
  160. package/dist/{chunk-YFE6W75D.js → chunk-ZKFPHJIJ.js} +1 -1
  161. package/dist/{chunk-5WUTKDH6.js → chunk-ZVXJSQOR.js} +1 -1
  162. package/dist/{co-activation-VB4CJQZB.js → co-activation-L6I2LSJO.js} +3 -3
  163. package/dist/{co-occurrence-XZQJJIBM.js → co-occurrence-QARWYUAY.js} +3 -3
  164. package/dist/{code-context-index-FCQOPUEA.js → code-context-index-UIYQRDHD.js} +4 -4
  165. package/dist/{content-extractor-SPSH5X33.js → content-extractor-EYRVGD6O.js} +2 -2
  166. package/dist/{conversation-wiki-populator-YU35LNRK.js → conversation-wiki-populator-L7O6F3BB.js} +1 -1
  167. package/dist/{crdt-sync-KXETGV45.js → crdt-sync-R6YROKDH.js} +1 -1
  168. package/dist/{crm-webhook-JMOAHTJ6.js → crm-webhook-WK3PYJJK.js} +2 -2
  169. package/dist/{cto-delegation-gate-IJ3KQIKF.js → cto-delegation-gate-5JZORQIT.js} +12 -12
  170. package/dist/{daemon-auth-2IZACWSG.js → daemon-auth-2HEOL6VG.js} +2 -2
  171. package/dist/{daemon-orchestration-ZCY4GEI3.js → daemon-orchestration-BJ3T5MMF.js} +16 -15
  172. package/dist/{db-backup-HLX5OLIV.js → db-backup-EWS52P2W.js} +2 -2
  173. package/dist/{dreaming-2CJML3TU.js → dreaming-BOSBDRI3.js} +13 -13
  174. package/dist/{entity-boost-T5IYWWDZ.js → entity-boost-6ZVX7DFB.js} +26 -2
  175. package/dist/{exe-drift-P5OIRNSH.js → exe-drift-WRE6RADZ.js} +4 -4
  176. package/dist/{exe-export-QQL2H322.js → exe-export-7N5PBCMK.js} +8 -8
  177. package/dist/{exe-import-V4RJCUEP.js → exe-import-YOOE7S3H.js} +8 -8
  178. package/dist/{exe-key-MENJGDD7.js → exe-key-GXJSTCX2.js} +4 -4
  179. package/dist/{exe-org-3FNET2J7.js → exe-org-42YMQL75.js} +2 -2
  180. package/dist/{exe-snapshot-YRARQE7F.js → exe-snapshot-ODUCFW7G.js} +18 -18
  181. package/dist/{fast-db-init-HIJWWKAO.js → fast-db-init-YSR7RMVZ.js} +1 -1
  182. package/dist/{founder-context-BQ5NBDUV.js → founder-context-Q2HUCZX4.js} +2 -2
  183. package/dist/gateway/index.js +9 -9
  184. package/dist/{gateway-client-YGSA5QMC.js → gateway-client-4QXHKN5C.js} +1 -1
  185. package/dist/{git-staleness-IHTKCUMN.js → git-staleness-BJDTCDPC.js} +3 -3
  186. package/dist/{git-task-sweep-5ZPNQS7Y.js → git-task-sweep-L3U3T5HM.js} +13 -13
  187. package/dist/{global-procedures-XHDIZRJU.js → global-procedures-HCHEHKY2.js} +4 -4
  188. package/dist/{graph-auto-extract-5TPT67GP.js → graph-auto-extract-FP5C76LS.js} +3 -3
  189. package/dist/{hook-integrity-SB53Y7UK.js → hook-integrity-2OU3T6UC.js} +1 -1
  190. package/dist/hooks/bug-report-worker.js +15 -14
  191. package/dist/hooks/codex-stop-task-finalizer.js +15 -14
  192. package/dist/hooks/commit-complete.js +16 -16
  193. package/dist/hooks/error-recall.js +10 -10
  194. package/dist/hooks/exe-heartbeat-hook.js +5 -5
  195. package/dist/hooks/ingest-worker.js +8 -8
  196. package/dist/hooks/ingest.js +13 -13
  197. package/dist/hooks/instructions-loaded.js +7 -7
  198. package/dist/hooks/manifest.json +20 -20
  199. package/dist/hooks/notification.js +6 -6
  200. package/dist/hooks/post-compact.js +15 -15
  201. package/dist/hooks/post-tool-combined.js +7 -7
  202. package/dist/hooks/pre-compact.js +20 -20
  203. package/dist/hooks/pre-tool-use.js +28 -25
  204. package/dist/hooks/prompt-submit.js +62 -31
  205. package/dist/hooks/session-end.js +26 -26
  206. package/dist/hooks/session-start.js +39 -15
  207. package/dist/hooks/stop.js +22 -22
  208. package/dist/hooks/subagent-stop.js +15 -15
  209. package/dist/hooks/summary-worker.js +32 -27
  210. package/dist/index.js +21 -21
  211. package/dist/{installer-AMZM4MLS.js → installer-AWMUCRN4.js} +7 -7
  212. package/dist/{installer-KT5FW4CN.js → installer-HB3NH6FG.js} +9 -9
  213. package/dist/{installer-HW74W3IT.js → installer-RU6EVOBL.js} +6 -6
  214. package/dist/{intercom-queue-RNM6EPGA.js → intercom-queue-A6UJEFIF.js} +1 -1
  215. package/dist/{key-backup-status-OZ2CXUDW.js → key-backup-status-4YKCV4ZV.js} +1 -1
  216. package/dist/lib/agent-config.js +2 -2
  217. package/dist/lib/cloud-sync.js +10 -8
  218. package/dist/lib/config.js +1 -1
  219. package/dist/lib/consolidation.js +8 -8
  220. package/dist/lib/database.js +3 -3
  221. package/dist/lib/db-daemon-client.js +3 -3
  222. package/dist/lib/db.js +3 -3
  223. package/dist/lib/device-registry.js +1 -1
  224. package/dist/lib/embedder.js +4 -4
  225. package/dist/lib/employee-templates.js +5 -5
  226. package/dist/lib/employees.js +3 -3
  227. package/dist/lib/exe-daemon-client.js +3 -3
  228. package/dist/lib/exe-daemon.js +105 -74
  229. package/dist/lib/hybrid-search.js +8 -8
  230. package/dist/lib/identity.js +3 -3
  231. package/dist/lib/keychain.js +1 -1
  232. package/dist/lib/license.js +2 -2
  233. package/dist/lib/messaging.js +13 -13
  234. package/dist/lib/post-tool-memory.js +3 -3
  235. package/dist/lib/reminders.js +4 -4
  236. package/dist/lib/schedules.js +8 -8
  237. package/dist/lib/session-registry.js +5 -5
  238. package/dist/lib/skill-learning.js +5 -5
  239. package/dist/lib/store.js +7 -7
  240. package/dist/lib/task-router.js +4 -4
  241. package/dist/lib/tasks.js +14 -13
  242. package/dist/lib/tmux-routing.js +12 -12
  243. package/dist/lib/token-spend.js +4 -4
  244. package/dist/lib/ws-client.js +1 -1
  245. package/dist/{license-gate-XJDIL6OZ.js → license-gate-6JQQFBHS.js} +3 -3
  246. package/dist/mcp/register-tools.js +68 -67
  247. package/dist/mcp/server.js +70 -69
  248. package/dist/mcp/tools/complete-reminder.js +5 -5
  249. package/dist/mcp/tools/create-reminder.js +5 -5
  250. package/dist/mcp/tools/create-task.js +16 -15
  251. package/dist/mcp/tools/deactivate-behavior.js +6 -6
  252. package/dist/mcp/tools/list-reminders.js +5 -5
  253. package/dist/mcp/tools/list-tasks.js +16 -15
  254. package/dist/mcp/tools/send-message.js +15 -15
  255. package/dist/mcp/tools/update-task.js +15 -14
  256. package/dist/{mcp-http-config-BXX3RZPR.js → mcp-http-config-XIJR5P2Z.js} +4 -4
  257. package/dist/{memory-cards-KRTP5GFM.js → memory-cards-H4BJJ5OK.js} +3 -3
  258. package/dist/{memory-graph-extractor-G532PUHC.js → memory-graph-extractor-SDGM3GVR.js} +4 -4
  259. package/dist/{memory-poisoning-defense-HJM3FQA3.js → memory-poisoning-defense-UVU67DGJ.js} +3 -3
  260. package/dist/{memory-queue-FTNBWLS4.js → memory-queue-FNT5WHXP.js} +2 -2
  261. package/dist/{memory-queue-client-DHSHEIHQ.js → memory-queue-client-JZCFYTWQ.js} +5 -5
  262. package/dist/{memory-reflection-RANRFUQL.js → memory-reflection-GGB5K35L.js} +3 -3
  263. package/dist/{notifications-4P2PVEOT.js → notifications-P3XQZDTH.js} +12 -12
  264. package/dist/{orchestration-events-IYTASMSN.js → orchestration-events-25WEKUKH.js} +4 -4
  265. package/dist/{orchestration-phase-SGA7PJ5G.js → orchestration-phase-C26XVKLZ.js} +2 -2
  266. package/dist/{orchestrator-VKVHZ4MV.js → orchestrator-VIXTY4E4.js} +14 -14
  267. package/dist/{pipeline-router-E4L5BDXN.js → pipeline-router-S5PE5U6B.js} +4 -4
  268. package/dist/{plan-limits-5O5QG55H.js → plan-limits-DGIVM42H.js} +5 -5
  269. package/dist/{prediction-log-OMWHW7FL.js → prediction-log-DOEOHDHS.js} +1 -1
  270. package/dist/{project-boot-WMI6CWRX.js → project-boot-4ZL2W7DN.js} +12 -2
  271. package/dist/{projection-worker-54KRNQSO.js → projection-worker-GG2W5OM3.js} +3 -3
  272. package/dist/{push-notifications-E2XXEWJZ.js → push-notifications-AMHVR6DF.js} +2 -2
  273. package/dist/{reranker-4NTUFNYT.js → reranker-UCPLQZE2.js} +2 -2
  274. package/dist/{review-polling-BFRJDLUA.js → review-polling-P2MWEXLR.js} +13 -13
  275. package/dist/runtime/index.js +15 -15
  276. package/dist/{session-events-KCZCWGE4.js → session-events-5CD66R6U.js} +13 -13
  277. package/dist/{session-kill-telemetry-TMNIDYWY.js → session-kill-telemetry-7FBHTEDN.js} +4 -4
  278. package/dist/{session-scope-DRZBQ32Y.js → session-scope-VMIPAZU7.js} +12 -12
  279. package/dist/{setup-wizard-TQKGDAHO.js → setup-wizard-BNR47URR.js} +3 -3
  280. package/dist/{shard-manager-G6MHCO7X.js → shard-manager-VGA2TYHM.js} +2 -2
  281. package/dist/{skill-refinement-Z5SWD3AM.js → skill-refinement-NRG4WWRW.js} +3 -3
  282. package/dist/stack-release-PFZI22WC.js +521 -0
  283. package/dist/{stack-update-NO5MNARG.js → stack-update-JIWJGGLX.js} +3 -3
  284. package/dist/{steward-gate-7DWYS5AT.js → steward-gate-L7DJMF4C.js} +4 -4
  285. package/dist/{task-enforcement-2VL5J6JJ.js → task-enforcement-XQL77PZH.js} +52 -12
  286. package/dist/{task-scope-YHALISIB.js → task-scope-R3XKBIHL.js} +12 -12
  287. package/dist/{tasks-crud-JXZEBZFR.js → tasks-crud-DQOG2NPG.js} +12 -12
  288. package/dist/tasks-notify-4EQYG52H.js +37 -0
  289. package/dist/{tasks-review-PGPYJQF5.js → tasks-review-XPFJ4DSJ.js} +12 -12
  290. package/dist/{telemetry-upload-H7OJNBIF.js → telemetry-upload-OT5B5HUY.js} +7 -7
  291. package/dist/{token-budget-JJ7JQIA2.js → token-budget-D2LQKCAV.js} +3 -3
  292. package/dist/{tool-capability-index-WIV4K3FB.js → tool-capability-index-FAJ5ZHDF.js} +1 -1
  293. package/dist/{tool-telemetry-W4LFCHFT.js → tool-telemetry-QIF5BCLF.js} +1 -1
  294. package/dist/tui/App.js +26 -26
  295. package/dist/{tui-data-72U6N2DC.js → tui-data-UEV2QOR3.js} +108 -12
  296. package/dist/{whatsapp-config-W63RQ3AU.js → whatsapp-config-GOSELKTE.js} +7 -0
  297. package/dist/{worker-gate-SCSN6IHI.js → worker-gate-PRCKA23W.js} +2 -2
  298. package/dist/{workflow-engine-OICYBE4F.js → workflow-engine-7X6LLH3M.js} +2 -2
  299. package/dist/{worktree-JXN4RCWC.js → worktree-RICSCT2S.js} +5 -5
  300. package/package.json +1 -1
  301. package/release-notes.json +137 -297
  302. package/stack.release.json +4 -3
  303. package/dist/preflight-EAH2MI76.js +0 -287
  304. /package/dist/{chunk-H42LEGLB.js → chunk-AQBEG33D.js} +0 -0
  305. /package/dist/{chunk-AU5426YP.js → chunk-B7JGEDVE.js} +0 -0
  306. /package/dist/{chunk-YFDDTHNM.js → chunk-JXI4XUTV.js} +0 -0
  307. /package/dist/{chunk-SNYDRHV3.js → chunk-U3DUFHOT.js} +0 -0
  308. /package/dist/{chunk-N2XUH2HQ.js → chunk-VBPC7IC7.js} +0 -0
  309. /package/dist/{chunk-HTUJBTBM.js → chunk-VUS6WXQ3.js} +0 -0
  310. /package/dist/{chunk-NOLIN2YI.js → chunk-XAYRZHLV.js} +0 -0
  311. /package/dist/{core-memory-VOBGGB2Q.js → core-memory-4KAIKQRQ.js} +0 -0
  312. /package/dist/{message-queue-client-KAJN6TIJ.js → message-queue-client-S6W5VMJV.js} +0 -0
  313. /package/dist/{oauth-server-QEXRSXEP.js → oauth-server-2ESBZB7F.js} +0 -0
  314. /package/dist/{webhook-pipe-LY4XEDL7.js → webhook-pipe-ZRUVOG5H.js} +0 -0
  315. /package/dist/{wiki-acl-M3OR547L.js → wiki-acl-MFLSS6DE.js} +0 -0
  316. /package/dist/{wiki-client-MAFYBXCQ.js → wiki-client-GBPR45BQ.js} +0 -0
@@ -1,42 +1,28 @@
1
+ import {
2
+ dispatchTaskToEmployee,
3
+ markTaskNotificationsRead,
4
+ notifyTaskDone
5
+ } from "./chunk-HOGTZLVU.js";
1
6
  import {
2
7
  cleanupReviewFile,
3
8
  createTaskCore,
4
9
  deleteTaskCore,
5
- employeeSessionName,
6
- ensureEmployee,
7
10
  markAsReadByTaskFile,
8
- notifyParentExe,
9
- resolveExeSession,
10
- sendIntercom,
11
11
  sessionScopeFilter,
12
12
  updateTaskStatus,
13
13
  writeNotification
14
- } from "./chunk-HNLPLLE6.js";
15
- import {
16
- getTransport
17
- } from "./chunk-MVW62NIZ.js";
18
- import {
19
- recordOrchestrationEventBestEffort
20
- } from "./chunk-5NJ4A4ZA.js";
21
- import {
22
- getAgentRuntime
23
- } from "./chunk-6OJJF4WP.js";
24
- import {
25
- getSessionKey
26
- } from "./chunk-CVYC6DUW.js";
14
+ } from "./chunk-F7JLZXHC.js";
27
15
  import {
28
16
  orgBus
29
17
  } from "./chunk-MP2AFCGL.js";
30
18
  import {
31
19
  getClient,
32
20
  getCoordinatorName,
33
- isCoordinatorName,
34
- isMultiInstance,
35
- shouldAutoInstance
36
- } from "./chunk-2H55BIV2.js";
21
+ isCoordinatorName
22
+ } from "./chunk-CEJO7244.js";
37
23
  import {
38
24
  EXE_AI_DIR
39
- } from "./chunk-TRZ5KA2R.js";
25
+ } from "./chunk-VXIMSRTO.js";
40
26
 
41
27
  // src/lib/tasks.ts
42
28
  import path2 from "path";
@@ -49,7 +35,7 @@ async function cascadeUnblock(taskId, baseDir, now) {
49
35
  const client = getClient();
50
36
  const ubScope = sessionScopeFilter();
51
37
  const blockedRows = await client.execute({
52
- sql: `SELECT id, title, assigned_to, priority, task_file FROM tasks WHERE blocked_by = ? AND status = 'blocked'${ubScope.sql}`,
38
+ sql: `SELECT id, title, assigned_to, priority, task_file, project_name FROM tasks WHERE blocked_by = ? AND status = 'blocked'${ubScope.sql}`,
53
39
  args: [taskId, ...ubScope.args]
54
40
  });
55
41
  if (blockedRows.rows.length === 0) return;
@@ -75,15 +61,41 @@ async function cascadeUnblock(taskId, baseDir, now) {
75
61
  }
76
62
  if (unblockedRows.rows.length > 0 && !process.env.VITEST) {
77
63
  try {
78
- const { queueIntercom } = await import("./intercom-queue-RNM6EPGA.js");
64
+ const { dispatchTaskToEmployee: dispatchTaskToEmployee2 } = await import("./tasks-notify-4EQYG52H.js");
79
65
  const dispatched = /* @__PURE__ */ new Set();
80
66
  for (const ur of unblockedRows.rows) {
81
67
  const assignee = String(ur.assigned_to);
82
68
  if (dispatched.has(assignee)) continue;
83
69
  dispatched.add(assignee);
84
- queueIntercom(`${assignee}`, `unblocked: "${String(ur.title)}" is now ready`);
70
+ const unblockedId = String(ur.id);
71
+ const title = String(ur.title);
72
+ const priority = String(ur.priority ?? "P2");
73
+ const taskFile = String(ur.task_file ?? "");
74
+ const projectName = ur.project_name != null ? String(ur.project_name) : void 0;
75
+ dispatchTaskToEmployee2({
76
+ assignedTo: assignee,
77
+ taskId: unblockedId,
78
+ title,
79
+ priority,
80
+ taskFile,
81
+ initialStatus: "open",
82
+ projectDir: baseDir,
83
+ projectName
84
+ }).catch(() => {
85
+ });
85
86
  }
86
87
  } catch {
88
+ try {
89
+ const { queueIntercom } = await import("./intercom-queue-A6UJEFIF.js");
90
+ const dispatched = /* @__PURE__ */ new Set();
91
+ for (const ur of unblockedRows.rows) {
92
+ const assignee = String(ur.assigned_to);
93
+ if (dispatched.has(assignee)) continue;
94
+ dispatched.add(assignee);
95
+ queueIntercom(`${assignee}`, `unblocked: "${String(ur.title)}" is now ready`);
96
+ }
97
+ } catch {
98
+ }
87
99
  }
88
100
  }
89
101
  }
@@ -112,13 +124,13 @@ async function checkSubtaskCompletion(parentTaskId, projectName) {
112
124
  const scScope = sessionScopeFilter();
113
125
  const remaining = await client.execute({
114
126
  sql: `SELECT COUNT(*) as cnt FROM tasks
115
- WHERE parent_task_id = ? AND status NOT IN ('done', 'cancelled', 'closed')${scScope.sql}`,
127
+ WHERE parent_task_id = ? AND status NOT IN ('done', 'needs_review', 'cancelled', 'closed')${scScope.sql}`,
116
128
  args: [parentTaskId, ...scScope.args]
117
129
  });
118
130
  const cnt = Number(remaining.rows[0]?.cnt ?? 1);
119
131
  if (cnt === 0) {
120
132
  const parentRow = await client.execute({
121
- sql: `SELECT assigned_to, title, task_file, project_name FROM tasks WHERE id = ?`,
133
+ sql: `SELECT assigned_to, title, task_file, project_name, session_scope FROM tasks WHERE id = ?`,
122
134
  args: [parentTaskId]
123
135
  });
124
136
  if (parentRow.rows.length === 1) {
@@ -130,200 +142,12 @@ async function checkSubtaskCompletion(parentTaskId, projectName) {
130
142
  event: "subtasks_complete",
131
143
  project: parentProject,
132
144
  summary: `All subtasks complete for "${String(pr.title)}" \u2014 ready for rollup review`,
133
- taskFile: String(pr.task_file)
134
- });
135
- }
136
- }
137
- }
138
-
139
- // src/lib/tasks-notify.ts
140
- function resolveDispatchRuntime(agentId, override) {
141
- if (override) return override;
142
- try {
143
- return getAgentRuntime(agentId).runtime ?? null;
144
- } catch {
145
- return null;
146
- }
147
- }
148
- async function dispatchTaskToEmployee(input) {
149
- if (isCoordinatorName(input.assignedTo)) return { dispatched: "skipped" };
150
- const dispatchRuntime = resolveDispatchRuntime(input.assignedTo, input.spawnRuntime);
151
- recordOrchestrationEventBestEffort({
152
- eventType: "dispatch.attempted",
153
- source: "tasks-notify.dispatchTaskToEmployee",
154
- taskId: input.taskId ?? null,
155
- agentId: input.assignedTo,
156
- runtime: dispatchRuntime,
157
- payload: { priority: input.priority, projectName: input.projectName }
158
- });
159
- let crossProject = false;
160
- if (input.projectName) {
161
- try {
162
- const { assertSessionScope } = await import("./session-scope-DRZBQ32Y.js");
163
- const check = assertSessionScope("dispatch_task", input.projectName);
164
- if (check.reason === "cross_session_denied") {
165
- crossProject = true;
166
- recordOrchestrationEventBestEffort({
167
- eventType: "dispatch.failed",
168
- source: "tasks-notify.dispatchTaskToEmployee",
169
- taskId: input.taskId ?? null,
170
- agentId: input.assignedTo,
171
- runtime: dispatchRuntime,
172
- errorCode: "cross_session_denied",
173
- payload: { projectName: input.projectName }
174
- });
175
- return { dispatched: "skipped", crossProject: true };
176
- }
177
- } catch {
178
- }
179
- }
180
- try {
181
- const transport = getTransport();
182
- const exeSession = resolveExeSession();
183
- if (!exeSession) {
184
- recordOrchestrationEventBestEffort({
185
- eventType: "dispatch.failed",
186
- source: "tasks-notify.dispatchTaskToEmployee",
187
- taskId: input.taskId ?? null,
188
- agentId: input.assignedTo,
189
- runtime: dispatchRuntime,
190
- errorCode: "no_exe_session"
145
+ taskFile: String(pr.task_file),
146
+ // Scope the notification to the parent task's coordinator session —
147
+ // prevents subtask-complete notifications from leaking to other coordinator lanes.
148
+ sessionScope: pr.session_scope ? String(pr.session_scope) : void 0
191
149
  });
192
- return { dispatched: "session_missing" };
193
150
  }
194
- const multiInstance = isMultiInstance(input.assignedTo);
195
- if (multiInstance) {
196
- const projectDir = input.projectDir ?? process.cwd();
197
- const autoOpts = shouldAutoInstance(input.assignedTo);
198
- const result = ensureEmployee(input.assignedTo, exeSession, projectDir, {
199
- ...autoOpts,
200
- runtimeOverride: input.spawnRuntime,
201
- modelOverride: input.spawnModel
202
- });
203
- if (result.status === "failed") {
204
- process.stderr.write(
205
- `[dispatch-audit] SPAWN FAILED \u2192 ${input.assignedTo} | task="${input.title}" [${input.priority}] | error=${result.error}
206
- `
207
- );
208
- recordOrchestrationEventBestEffort({
209
- eventType: "dispatch.failed",
210
- source: "tasks-notify.dispatchTaskToEmployee",
211
- taskId: input.taskId ?? null,
212
- agentId: input.assignedTo,
213
- sessionScope: exeSession,
214
- runtime: dispatchRuntime,
215
- errorCode: "spawn_failed",
216
- payload: { path: "multi_instance", error: result.error }
217
- });
218
- return { dispatched: "session_missing" };
219
- }
220
- const dispatched = result.status === "intercom_sent" || result.status === "intercom_unprocessed" ? "sent_unverified" : "spawned";
221
- process.stderr.write(
222
- `[dispatch-audit] ${dispatched === "spawned" ? "SPAWNED" : "INTERCOM"} \u2192 ${result.sessionName} | task="${input.title}" [${input.priority}]
223
- `
224
- );
225
- recordOrchestrationEventBestEffort({
226
- eventType: "dispatch.completed",
227
- source: "tasks-notify.dispatchTaskToEmployee",
228
- taskId: input.taskId ?? null,
229
- agentId: input.assignedTo,
230
- sessionScope: exeSession,
231
- tmuxSession: result.sessionName,
232
- runtime: dispatchRuntime,
233
- result: dispatched,
234
- payload: { path: "multi_instance", priority: input.priority }
235
- });
236
- return { dispatched, session: result.sessionName, crossProject };
237
- }
238
- const sessionName = employeeSessionName(input.assignedTo, exeSession);
239
- if (transport.isAlive(sessionName)) {
240
- const result = sendIntercom(sessionName, { force: true });
241
- const dispatched = result === "acknowledged" || result === "debounced" || result === "queued" ? "verified" : result === "delivered" ? "sent_unverified" : "session_dead";
242
- process.stderr.write(
243
- `[dispatch-audit] intercom \u2192 ${sessionName} | task="${input.title}" [${input.priority}] | result=${dispatched} (sendIntercom=${result})
244
- `
245
- );
246
- recordOrchestrationEventBestEffort({
247
- eventType: "dispatch.completed",
248
- source: "tasks-notify.dispatchTaskToEmployee",
249
- taskId: input.taskId ?? null,
250
- agentId: input.assignedTo,
251
- sessionScope: exeSession,
252
- tmuxSession: sessionName,
253
- runtime: dispatchRuntime,
254
- result: dispatched,
255
- payload: { path: "single_instance_intercom", priority: input.priority }
256
- });
257
- return { dispatched, session: sessionName, crossProject };
258
- } else {
259
- const projectDir = input.projectDir ?? process.cwd();
260
- const result = ensureEmployee(input.assignedTo, exeSession, projectDir, {
261
- runtimeOverride: input.spawnRuntime,
262
- modelOverride: input.spawnModel
263
- });
264
- if (result.status === "failed") {
265
- process.stderr.write(
266
- `[dispatch-audit] SPAWN FAILED \u2192 ${input.assignedTo} | task="${input.title}" [${input.priority}] | error=${result.error}
267
- `
268
- );
269
- recordOrchestrationEventBestEffort({
270
- eventType: "dispatch.failed",
271
- source: "tasks-notify.dispatchTaskToEmployee",
272
- taskId: input.taskId ?? null,
273
- agentId: input.assignedTo,
274
- sessionScope: exeSession,
275
- runtime: dispatchRuntime,
276
- errorCode: "spawn_failed",
277
- payload: { path: "single_instance_spawn", error: result.error }
278
- });
279
- return { dispatched: "session_missing" };
280
- }
281
- process.stderr.write(
282
- `[dispatch-audit] SPAWNED \u2192 ${result.sessionName} | task="${input.title}" [${input.priority}]
283
- `
284
- );
285
- recordOrchestrationEventBestEffort({
286
- eventType: "dispatch.completed",
287
- source: "tasks-notify.dispatchTaskToEmployee",
288
- taskId: input.taskId ?? null,
289
- agentId: input.assignedTo,
290
- sessionScope: exeSession,
291
- tmuxSession: result.sessionName,
292
- runtime: dispatchRuntime,
293
- result: "spawned",
294
- payload: { path: "single_instance_spawn", priority: input.priority }
295
- });
296
- return { dispatched: "spawned", session: result.sessionName, crossProject };
297
- }
298
- } catch {
299
- recordOrchestrationEventBestEffort({
300
- eventType: "dispatch.failed",
301
- source: "tasks-notify.dispatchTaskToEmployee",
302
- taskId: input.taskId ?? null,
303
- agentId: input.assignedTo,
304
- runtime: dispatchRuntime,
305
- errorCode: "exception"
306
- });
307
- return { dispatched: "session_missing" };
308
- }
309
- }
310
- function notifyTaskDone() {
311
- try {
312
- const key = getSessionKey();
313
- if (key && !process.env.VITEST) {
314
- notifyParentExe(key);
315
- process.stderr.write(
316
- `[dispatch-audit] notifyTaskDone \u2192 parent coordinator (session=${key})
317
- `
318
- );
319
- }
320
- } catch {
321
- }
322
- }
323
- async function markTaskNotificationsRead(taskFile) {
324
- try {
325
- await markAsReadByTaskFile(taskFile);
326
- } catch {
327
151
  }
328
152
  }
329
153
 
@@ -434,17 +258,17 @@ async function updateTask(input) {
434
258
  const taskTitle = String(row.title);
435
259
  let delivered = false;
436
260
  try {
437
- const { sendIntercom: sendIntercom2, resolveExeSession: resolveExeSession2 } = await import("./lib/tmux-routing.js");
438
- const exeSession = row.session_scope ? String(row.session_scope) : resolveExeSession2();
261
+ const { sendIntercom, resolveExeSession } = await import("./lib/tmux-routing.js");
262
+ const exeSession = row.session_scope ? String(row.session_scope) : resolveExeSession();
439
263
  if (exeSession) {
440
264
  const reviewerSession = `${reviewer}-${exeSession}`;
441
- const result = sendIntercom2(reviewerSession, { reason: "completion" });
265
+ const result = sendIntercom(reviewerSession, { reason: "completion" });
442
266
  if (result !== "failed") {
443
267
  delivered = true;
444
268
  process.stderr.write(`[tasks] EVENT: notified reviewer "${reviewer}" via tmux for "${taskTitle}"
445
269
  `);
446
270
  } else if (isCoordinatorName(reviewer)) {
447
- const cooResult = sendIntercom2(exeSession, { reason: "completion" });
271
+ const cooResult = sendIntercom(exeSession, { reason: "completion" });
448
272
  if (cooResult !== "failed") {
449
273
  delivered = true;
450
274
  process.stderr.write(`[tasks] EVENT: notified coordinator "${reviewer}" for "${taskTitle}"
@@ -460,12 +284,16 @@ async function updateTask(input) {
460
284
  try {
461
285
  process.stderr.write(`[tasks] EVENT: tmux delivery failed for reviewer="${reviewer}". Queueing for daemon delivery.
462
286
  `);
463
- const { queueIntercom } = await import("./intercom-queue-RNM6EPGA.js");
464
- const { resolveExeSession: resolveExeSession2 } = await import("./lib/tmux-routing.js");
465
- const exeSession = row.session_scope ? String(row.session_scope) : resolveExeSession2();
287
+ const { queueIntercom } = await import("./intercom-queue-A6UJEFIF.js");
288
+ const { resolveExeSession } = await import("./lib/tmux-routing.js");
289
+ const exeSession = row.session_scope ? String(row.session_scope) : resolveExeSession();
466
290
  if (exeSession) {
467
291
  const reviewerSession = isCoordinatorName(reviewer) ? exeSession : `${reviewer}-${exeSession}`;
468
- queueIntercom(reviewerSession, `Review ready: "${taskTitle}" by ${String(row.assigned_to)}. Run /exe-review.`);
292
+ queueIntercom(
293
+ reviewerSession,
294
+ `Review ready: "${taskTitle}" by ${String(row.assigned_to)}. Run /exe-review.`,
295
+ "completion"
296
+ );
469
297
  }
470
298
  } catch (e) {
471
299
  process.stderr.write(`[tasks] EVENT: intercom queue failed: ${e instanceof Error ? e.message : String(e)}
@@ -473,7 +301,7 @@ async function updateTask(input) {
473
301
  }
474
302
  }
475
303
  try {
476
- const { pushNotifyAsync } = await import("./push-notifications-E2XXEWJZ.js");
304
+ const { pushNotifyAsync } = await import("./push-notifications-AMHVR6DF.js");
477
305
  pushNotifyAsync({
478
306
  event: "review_ready",
479
307
  title: `Review ready: ${taskTitle.slice(0, 50)}`,
@@ -485,7 +313,7 @@ async function updateTask(input) {
485
313
  }
486
314
  if (!isCoordinator) {
487
315
  try {
488
- const { pushNotifyAsync } = await import("./push-notifications-E2XXEWJZ.js");
316
+ const { pushNotifyAsync } = await import("./push-notifications-AMHVR6DF.js");
489
317
  const event = input.status === "needs_review" ? "review_ready" : "task_complete";
490
318
  pushNotifyAsync({
491
319
  event,
@@ -500,14 +328,15 @@ async function updateTask(input) {
500
328
  await markTaskNotificationsRead(taskFile);
501
329
  if (input.status === "needs_review" && !isCoordinator) {
502
330
  try {
503
- const { writeNotification: writeNotification2 } = await import("./notifications-4P2PVEOT.js");
331
+ const { writeNotification: writeNotification2 } = await import("./notifications-P3XQZDTH.js");
504
332
  await writeNotification2({
505
333
  agentId: String(row.assigned_to),
506
334
  agentRole: String(row.assigned_to),
507
335
  event: "task_complete",
508
336
  project: String(row.project_name),
509
337
  summary: `"${String(row.title)}" is ready for review`,
510
- taskFile
338
+ taskFile,
339
+ sessionScope: row.session_scope ? String(row.session_scope) : void 0
511
340
  });
512
341
  } catch (e) {
513
342
  process.stderr.write(`[tasks] needs_review notification failed: ${e instanceof Error ? e.message : String(e)}
@@ -589,7 +589,7 @@ function auditHookOwnership() {
589
589
  }
590
590
  async function auditShards() {
591
591
  try {
592
- const { auditShardHealth } = await import("./shard-manager-G6MHCO7X.js");
592
+ const { auditShardHealth } = await import("./shard-manager-VGA2TYHM.js");
593
593
  const report = await auditShardHealth();
594
594
  return {
595
595
  total: report.total,
@@ -607,7 +607,7 @@ async function auditShards() {
607
607
  async function auditKeyHealth() {
608
608
  try {
609
609
  const { getMasterKey } = await import("./lib/keychain.js");
610
- const { getKeyBackupStatus } = await import("./key-backup-status-OZ2CXUDW.js");
610
+ const { getKeyBackupStatus } = await import("./key-backup-status-4YKCV4ZV.js");
611
611
  const key = await getMasterKey();
612
612
  const backup = getKeyBackupStatus();
613
613
  return {
@@ -859,7 +859,7 @@ function formatReport(report, flags) {
859
859
  return lines.join("\n");
860
860
  }
861
861
  async function fixNullVectors() {
862
- const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-SCSN6IHI.js");
862
+ const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-PRCKA23W.js");
863
863
  if (!tryAcquireWorkerSlot()) {
864
864
  process.stderr.write("[exe-doctor] Worker gate full \u2014 waiting for existing backfill workers to finish\n");
865
865
  await new Promise((r) => setTimeout(r, 5e3));
@@ -943,7 +943,7 @@ async function fixBloated(client, bloated, dryRun) {
943
943
  return chunksCreated;
944
944
  }
945
945
  async function fixShards(dryRun) {
946
- const { auditShardHealth } = await import("./shard-manager-G6MHCO7X.js");
946
+ const { auditShardHealth } = await import("./shard-manager-VGA2TYHM.js");
947
947
  const report = await auditShardHealth({ repair: true, dryRun });
948
948
  return {
949
949
  total: report.total,
@@ -982,7 +982,7 @@ function splitAtSentences(text, maxChunkSize) {
982
982
  }
983
983
  async function main(argv = process.argv.slice(2)) {
984
984
  const flags = parseFlags(argv);
985
- const { fastDbInit } = await import("./fast-db-init-HIJWWKAO.js");
985
+ const { fastDbInit } = await import("./fast-db-init-YSR7RMVZ.js");
986
986
  const client = await fastDbInit();
987
987
  const report = await runAudit(client, flags);
988
988
  console.log(formatReport(report, flags));
@@ -993,8 +993,8 @@ ${mode} Applying repairs...
993
993
  `);
994
994
  if (!flags.dryRun) {
995
995
  try {
996
- const { createBackup } = await import("./db-backup-HLX5OLIV.js");
997
- const backupPath = createBackup("pre-fix");
996
+ const { createBackup } = await import("./db-backup-EWS52P2W.js");
997
+ const backupPath = await createBackup("pre-fix");
998
998
  if (backupPath) {
999
999
  console.log(` Backup created: ${backupPath.split("/").pop()}`);
1000
1000
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  loadConfig,
3
3
  saveConfig
4
- } from "./chunk-TRZ5KA2R.js";
4
+ } from "./chunk-VXIMSRTO.js";
5
5
 
6
6
  // src/lib/orchestration-phase.ts
7
7
  var ORCHESTRATION_PHASES = [
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listReminders
3
- } from "./chunk-5WLMF6PL.js";
3
+ } from "./chunk-YMZHTTOQ.js";
4
4
 
5
5
  // src/mcp/tools/list-reminders.ts
6
6
  import { z } from "zod";
@@ -1,11 +1,11 @@
1
- import {
2
- ingest
3
- } from "./chunk-ELRRL2NC.js";
4
1
  import {
5
2
  listWorkflowDefinitions,
6
3
  runWorkflow,
7
4
  startWorkflow
8
- } from "./chunk-FE45RXGC.js";
5
+ } from "./chunk-V2GZMY6O.js";
6
+ import {
7
+ ingest
8
+ } from "./chunk-A4K2ZT6N.js";
9
9
  import {
10
10
  initCRMBridge
11
11
  } from "./chunk-ONKIWA3R.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-K77WC6HA.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-2H55BIV2.js";
7
+ } from "./chunk-CEJO7244.js";
8
8
 
9
9
  // src/lib/global-procedures.ts
10
10
  import { randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  writeMemoryViaDaemon
3
- } from "./chunk-BZWKTFEB.js";
3
+ } from "./chunk-ENVRFBTB.js";
4
4
 
5
5
  // src/lib/auto-checkpoint.ts
6
6
  var FILE_RE = /(?:^|\s)([\w./-]+\.(?:ts|tsx|js|jsx|json|md|yml|yaml|sql|go|py|css|scss|html|sh))(?:\b|$)/g;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  clean,
3
3
  stableId
4
- } from "./chunk-NOLIN2YI.js";
4
+ } from "./chunk-XAYRZHLV.js";
5
5
 
6
6
  // src/lib/reflection-checkpoints.ts
7
7
  function parsePayload(payload) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-2H55BIV2.js";
3
+ } from "./chunk-CEJO7244.js";
4
4
 
5
5
  // src/lib/behaviors.ts
6
6
  import crypto from "crypto";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  sessionScopeFilter
3
- } from "./chunk-HNLPLLE6.js";
3
+ } from "./chunk-F7JLZXHC.js";
4
4
  import {
5
5
  getClient,
6
6
  getIdentity
7
- } from "./chunk-2H55BIV2.js";
7
+ } from "./chunk-CEJO7244.js";
8
8
 
9
9
  // src/lib/dreaming.ts
10
10
  var DreamingEngine = class {
@@ -131,6 +131,7 @@ var DreamingEngine = class {
131
131
  */
132
132
  identifyPatterns(review) {
133
133
  const patterns = [];
134
+ const investigations = review.investigations ?? [];
134
135
  const errorTasks = review.tasks.filter(
135
136
  (t) => /\b(fix|bug|error|fail|broken|crash|revert)\b/i.test(t.title) || t.result && /\b(error|failed|broken|crash)\b/i.test(t.result)
136
137
  );
@@ -188,12 +189,12 @@ var DreamingEngine = class {
188
189
  confidence: 0.7
189
190
  });
190
191
  }
191
- if (review.investigations.length > 0) {
192
+ if (investigations.length > 0) {
192
193
  const catTotals = /* @__PURE__ */ new Map();
193
194
  let totalFailed = 0;
194
195
  let totalAttempts = 0;
195
196
  let totalWastedMs = 0;
196
- for (const inv of review.investigations) {
197
+ for (const inv of investigations) {
197
198
  totalAttempts += inv.totalAttempts;
198
199
  totalFailed += inv.failedAttempts;
199
200
  totalWastedMs += inv.wastedMs;
@@ -203,7 +204,7 @@ var DreamingEngine = class {
203
204
  patterns.push({
204
205
  type: "mistake",
205
206
  description: `Investigation failure rate: ${Math.round(totalFailed / totalAttempts * 100)}% of ${totalAttempts} attempts failed (${Math.round(totalWastedMs / 6e4)}min wasted)`,
206
- evidence: review.investigations.map((i) => `${i.investigationKey}: ${i.failedAttempts}/${i.totalAttempts} failed (${i.topFailureCategory})`),
207
+ evidence: investigations.map((i) => `${i.investigationKey}: ${i.failedAttempts}/${i.totalAttempts} failed (${i.topFailureCategory})`),
207
208
  frequency: totalFailed,
208
209
  confidence: Math.min(0.6 + totalFailed * 0.05, 0.95)
209
210
  });
@@ -214,7 +215,7 @@ var DreamingEngine = class {
214
215
  patterns.push({
215
216
  type: "inefficiency",
216
217
  description: `Top debugging failure: "${topCat}" (${topCount} times). ${topCat === "lack_of_context" ? "Agent didn't have enough code context before editing" : topCat === "lack_of_tools" ? "Agent couldn't verify the fix (missing tools)" : topCat === "lack_of_reasoning" ? "Agent had the info but drew wrong conclusion" : topCat === "lack_of_measurement" ? "Agent tested the wrong thing (API vs browser)" : topCat === "wrong_diagnosis" ? "Agent misidentified the root cause" : "Recurring failure pattern"}`,
217
- evidence: review.investigations.filter((i) => i.topFailureCategory === topCat).map((i) => `${i.investigationKey}: ${i.failedAttempts} failed attempts`),
218
+ evidence: investigations.filter((i) => i.topFailureCategory === topCat).map((i) => `${i.investigationKey}: ${i.failedAttempts} failed attempts`),
218
219
  frequency: topCount,
219
220
  confidence: Math.min(0.7 + topCount * 0.05, 0.95)
220
221
  });
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  extractMemoryGraph
3
- } from "./chunk-O6DAF2TY.js";
3
+ } from "./chunk-QUZVAHO7.js";
4
4
  import {
5
5
  flushBatch,
6
6
  writeMemory
7
- } from "./chunk-FGJUGDNM.js";
7
+ } from "./chunk-222SI7QC.js";
8
8
  import {
9
9
  extractKeywords
10
10
  } from "./chunk-CHCA3ZM2.js";
11
11
  import {
12
12
  getActiveAgent
13
- } from "./chunk-RA2RO27E.js";
13
+ } from "./chunk-MCESA5UW.js";
14
14
 
15
15
  // src/mcp/tools/import-conversations.ts
16
16
  import { z } from "zod";
@@ -350,7 +350,8 @@ function registerImportConversations(server) {
350
350
  await flushBatch();
351
351
  await new Promise((r) => setTimeout(r, 0));
352
352
  if ((i + 1) % (YIELD_INTERVAL * 10) === 0) {
353
- console.log(`[import] ${i + 1}/${allMemories.length} memories processed, ${stored} stored`);
353
+ process.stderr.write(`[import] ${i + 1}/${allMemories.length} memories processed, ${stored} stored
354
+ `);
354
355
  }
355
356
  }
356
357
  }
@@ -6,7 +6,7 @@ import {
6
6
  getIdentity,
7
7
  listIdentities,
8
8
  updateIdentity
9
- } from "./chunk-2H55BIV2.js";
9
+ } from "./chunk-CEJO7244.js";
10
10
  import {
11
11
  atomicWriteJsonSync
12
12
  } from "./chunk-LYH5HE24.js";