@askexenow/exe-os 0.9.365 → 0.9.367

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 (342) hide show
  1. package/dist/.dist-verified.json +3 -3
  2. package/dist/{active-agent-C6DPH43L.js → active-agent-R6Q7UEUD.js} +3 -3
  3. package/dist/{active-agent-MGF7J3HB.js → active-agent-V3CUDNED.js} +3 -3
  4. package/dist/{agent-defs-generator-X7TVMPVB.js → agent-defs-generator-MLPRGY75.js} +2 -2
  5. package/dist/agent-heartbeat-CQPGJIFF.js +13 -0
  6. package/dist/{agent-loop-E7RZCFDB.js → agent-loop-FOK2IRZQ.js} +1 -1
  7. package/dist/{agentic-ontology-CARDCG37.js → agentic-ontology-5FMQWGDZ.js} +1 -1
  8. package/dist/{backfill-metadata-ANCJA6LA.js → backfill-metadata-YXUMCKRV.js} +5 -5
  9. package/dist/{backup-verify-F7BHVEF7.js → backup-verify-GYHKAX7K.js} +1 -1
  10. package/dist/{behavior-injection-XQ4B7DCF.js → behavior-injection-7VGYY2KO.js} +7 -7
  11. package/dist/{behaviors-R2IE3PEN.js → behaviors-O6HKTSOF.js} +6 -6
  12. package/dist/bin/agentic-ontology-backfill.js +6 -6
  13. package/dist/bin/agentic-reflection-backfill.js +7 -7
  14. package/dist/bin/agentic-semantic-label.js +6 -6
  15. package/dist/bin/backfill-conversations.js +5 -5
  16. package/dist/bin/backfill-responses.js +5 -5
  17. package/dist/bin/backfill-vectors.js +6 -6
  18. package/dist/bin/bulk-sync-postgres.js +10 -10
  19. package/dist/bin/cc-doctor.js +5 -5
  20. package/dist/bin/cleanup-stale-review-tasks.js +14 -13
  21. package/dist/bin/cli.js +20 -20
  22. package/dist/bin/deferred-daemon-restart.js +78 -75
  23. package/dist/bin/exe-agent-config.js +2 -2
  24. package/dist/bin/exe-agent.js +251 -13
  25. package/dist/bin/exe-assign.js +6 -6
  26. package/dist/bin/exe-boot.js +29 -27
  27. package/dist/bin/exe-call.js +4 -4
  28. package/dist/bin/exe-cloud.js +11 -11
  29. package/dist/bin/exe-config-dump.js +2 -2
  30. package/dist/bin/exe-dispatch.js +15 -14
  31. package/dist/bin/exe-doctor.js +5 -5
  32. package/dist/bin/exe-export-behaviors.js +8 -8
  33. package/dist/bin/exe-forget.js +7 -7
  34. package/dist/bin/exe-gateway.js +7 -7
  35. package/dist/bin/exe-healthcheck.js +5 -5
  36. package/dist/bin/exe-heartbeat.js +17 -16
  37. package/dist/bin/exe-kill.js +18 -17
  38. package/dist/bin/exe-launch-agent.js +23 -22
  39. package/dist/bin/exe-mcp.js +3 -3
  40. package/dist/bin/exe-memory-reads.js +5 -5
  41. package/dist/bin/exe-new-employee.js +8 -8
  42. package/dist/bin/exe-os-mcp-proxy.js +3 -3
  43. package/dist/bin/exe-pending-messages.js +15 -14
  44. package/dist/bin/exe-pending-notifications.js +14 -13
  45. package/dist/bin/exe-pending-reviews.js +14 -13
  46. package/dist/bin/exe-rename.js +4 -4
  47. package/dist/bin/exe-review.js +17 -16
  48. package/dist/bin/exe-search.js +6 -6
  49. package/dist/bin/exe-session-cleanup.js +18 -17
  50. package/dist/bin/exe-settings.js +10 -10
  51. package/dist/bin/exe-start-codex.js +21 -13
  52. package/dist/bin/exe-start-opencode.js +9 -9
  53. package/dist/bin/exe-status.js +16 -15
  54. package/dist/bin/exe-support.js +3 -3
  55. package/dist/bin/exe-team.js +4 -4
  56. package/dist/bin/git-sweep.js +23 -14
  57. package/dist/bin/graph-backfill.js +6 -6
  58. package/dist/bin/graph-export.js +6 -6
  59. package/dist/bin/import-history.js +9 -9
  60. package/dist/bin/install.js +80 -77
  61. package/dist/bin/intercom-check.js +4 -4
  62. package/dist/bin/mcp-sessions.js +2 -2
  63. package/dist/bin/orchestration-metrics.js +4 -4
  64. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  65. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  66. package/dist/bin/reconcile-backlog.js +2 -2
  67. package/dist/bin/registry-proxy.js +1 -1
  68. package/dist/bin/scan-tasks.js +14 -13
  69. package/dist/bin/setup.js +1 -1
  70. package/dist/bin/shard-migrate.js +5 -5
  71. package/dist/bin/stack-update.js +34 -6
  72. package/dist/bin/verify-stack.js +6 -1
  73. package/dist/bin/vps-health-gate.js +1 -1
  74. package/dist/{boot-generation-X45BSVZY.js → boot-generation-EZ2Y74IG.js} +3 -3
  75. package/dist/{boot-review-sections-OBVRXXSF.js → boot-review-sections-7CNQTAYR.js} +13 -12
  76. package/dist/build-manifest.json +865 -835
  77. package/dist/{capability-cards-57FURUMR.js → capability-cards-ZTFMK4VJ.js} +2 -2
  78. package/dist/{capacity-monitor-QEL62JDO.js → capacity-monitor-B2XU4YHP.js} +15 -14
  79. package/dist/{catchup-brief-PMXTCASA.js → catchup-brief-3BEOL7EV.js} +18 -17
  80. package/dist/{chunk-J6I7X272.js → chunk-267QB6VB.js} +1 -1
  81. package/dist/{chunk-IXEFO6HD.js → chunk-2IZH6W73.js} +3 -3
  82. package/dist/{chunk-6GQYPJPG.js → chunk-4DJDC4Y2.js} +8 -8
  83. package/dist/{chunk-LZKYVMBY.js → chunk-4WOOCTON.js} +2 -2
  84. package/dist/{chunk-RHX6MNWY.js → chunk-52CFP2AV.js} +1 -1
  85. package/dist/{chunk-EWZYFG5Q.js → chunk-53LCVVX5.js} +2 -2
  86. package/dist/{chunk-52TIQJEQ.js → chunk-5CH6XKVC.js} +1 -1
  87. package/dist/{chunk-22YQBVMO.js → chunk-66BFQOWR.js} +4 -4
  88. package/dist/{chunk-ESTR7QUP.js → chunk-6MCUXRIP.js} +1 -1
  89. package/dist/{chunk-LHOKWZKL.js → chunk-6NJURKRG.js} +1 -1
  90. package/dist/{chunk-VGE6IHZB.js → chunk-7W5LCREK.js} +80 -12
  91. package/dist/{chunk-FXPAUDCZ.js → chunk-7W6FDHHY.js} +1 -1
  92. package/dist/{chunk-E6ORBQHP.js → chunk-AAMGHW5W.js} +1 -0
  93. package/dist/{chunk-EMZHB767.js → chunk-AE3PYLLS.js} +9 -9
  94. package/dist/{chunk-JUOZLXLH.js → chunk-AEVE654G.js} +1 -1
  95. package/dist/{chunk-PPGPCWRC.js → chunk-ALKYXAMB.js} +4 -4
  96. package/dist/{chunk-MPQXQ5IE.js → chunk-ALYI3P5D.js} +1 -1
  97. package/dist/{chunk-4QKKLK3C.js → chunk-BQYQES2Z.js} +10 -10
  98. package/dist/{chunk-WYLFDSIE.js → chunk-BTMX2D4X.js} +5 -5
  99. package/dist/chunk-BTSWFMEH.js +14 -0
  100. package/dist/{chunk-EKVTRI3N.js → chunk-BY3V5CLX.js} +5 -4
  101. package/dist/{chunk-ZSZPMUNX.js → chunk-CKKLSY7B.js} +126 -7
  102. package/dist/{chunk-6Q263OZE.js → chunk-CTPG4KYZ.js} +1 -1
  103. package/dist/{chunk-C3UAQ3JG.js → chunk-CX4MVEM3.js} +1 -1
  104. package/dist/{chunk-DEFSN2FQ.js → chunk-CYNL3ZFD.js} +3 -3
  105. package/dist/{chunk-RD4E5G3B.js → chunk-DTTISDTI.js} +1 -1
  106. package/dist/{chunk-ZRKEUCUZ.js → chunk-DXCTHNEF.js} +12 -10
  107. package/dist/{chunk-KSVLBATT.js → chunk-E5QQZDQN.js} +53 -0
  108. package/dist/{chunk-DQ5KHWFD.js → chunk-EDZ5URGR.js} +1 -1
  109. package/dist/{chunk-ZDUO6QBH.js → chunk-F3PIHVVY.js} +1 -1
  110. package/dist/{chunk-EJ4522YM.js → chunk-FSIAGX55.js} +1 -1
  111. package/dist/{chunk-RVWALVDT.js → chunk-GUOMZ3JM.js} +2 -2
  112. package/dist/{chunk-BRLS5OLZ.js → chunk-HSBKV5LB.js} +35 -4
  113. package/dist/{chunk-QFIVK3G5.js → chunk-IIVFXD6P.js} +1 -1
  114. package/dist/{chunk-SBAU735L.js → chunk-J6VQ7HYV.js} +4 -4
  115. package/dist/{chunk-EWCEUO65.js → chunk-JFOZHVNO.js} +1 -1
  116. package/dist/{chunk-T6S45OLV.js → chunk-JJRZE2LD.js} +1 -1
  117. package/dist/{chunk-DYWGIPVP.js → chunk-JOKKIFRN.js} +3 -3
  118. package/dist/{chunk-X6A2VWVJ.js → chunk-K2OFS57E.js} +2 -2
  119. package/dist/{chunk-NV6A5HDN.js → chunk-KDD26FUY.js} +1 -1
  120. package/dist/{chunk-L3TB7CC3.js → chunk-KM6XSFHP.js} +12 -2
  121. package/dist/{chunk-CKG6CVKI.js → chunk-LIZ3QQGK.js} +1 -1
  122. package/dist/{chunk-OFGFRT5J.js → chunk-LW5WRSDD.js} +1 -1
  123. package/dist/{chunk-JITNFE4W.js → chunk-MLPPG2OG.js} +1 -1
  124. package/dist/{chunk-3JNVB5LG.js → chunk-MQ3N4KZY.js} +1 -1
  125. package/dist/{chunk-2FYIMTQE.js → chunk-N3JLNMPF.js} +2 -2
  126. package/dist/{chunk-RZIKSE6N.js → chunk-NPND34FS.js} +4 -4
  127. package/dist/{chunk-DWAQOEXL.js → chunk-O3F5P6Z5.js} +2 -2
  128. package/dist/{chunk-M7EES2KM.js → chunk-OADOH45L.js} +3 -3
  129. package/dist/{chunk-MZJBUAC3.js → chunk-OISZ2I4X.js} +4 -4
  130. package/dist/{chunk-R7RM766N.js → chunk-OPS7KUFV.js} +3 -3
  131. package/dist/{chunk-JNVQGLPX.js → chunk-P5XER5QY.js} +3 -3
  132. package/dist/{chunk-J4U5Z7VX.js → chunk-P76VYS6V.js} +4 -4
  133. package/dist/{chunk-KRUYQFSH.js → chunk-PFOJX6CR.js} +5 -5
  134. package/dist/chunk-PFR6EOUY.js +356 -0
  135. package/dist/{agent-heartbeat-I5UPGXAU.js → chunk-PHUHIVD5.js} +4 -5
  136. package/dist/{chunk-45EQTS7B.js → chunk-PQ6NRLKL.js} +1 -1
  137. package/dist/{chunk-5CBGH6RA.js → chunk-PR3AHVFW.js} +3 -3
  138. package/dist/{chunk-ODBRU6BF.js → chunk-PS4NA7PM.js} +1399 -943
  139. package/dist/{chunk-CPILYY2K.js → chunk-PS6VPW64.js} +1 -1
  140. package/dist/{chunk-YMJOLEPE.js → chunk-PWCZFIQH.js} +4 -4
  141. package/dist/{chunk-POPRJKAY.js → chunk-QS6HI4B6.js} +6 -0
  142. package/dist/{chunk-ZNEBZCZR.js → chunk-QWDZNQXA.js} +1 -1
  143. package/dist/{chunk-ORNCMRIX.js → chunk-QX33D4CH.js} +25 -31
  144. package/dist/{chunk-BATQKSLI.js → chunk-R3H3WW7H.js} +2 -2
  145. package/dist/chunk-R4AROSYI.js +496 -0
  146. package/dist/{chunk-F2S3M5MB.js → chunk-SFKIZYKK.js} +2 -2
  147. package/dist/{chunk-IIZITKBV.js → chunk-TCR7NBHD.js} +4 -4
  148. package/dist/{chunk-7C4FUNVO.js → chunk-TJSTWACD.js} +2 -2
  149. package/dist/chunk-TX3Q2GIL.js +97 -0
  150. package/dist/{chunk-2ESB5SDP.js → chunk-TZFOWWPM.js} +1 -1
  151. package/dist/{chunk-WR75WUEP.js → chunk-UI3K73LD.js} +1 -1
  152. package/dist/{chunk-DJK45U7B.js → chunk-URHJDUWO.js} +1 -1
  153. package/dist/{chunk-SP37DONS.js → chunk-V3ISR2QT.js} +1 -1
  154. package/dist/{chunk-EPNWEOOE.js → chunk-VY3QUSWS.js} +6 -6
  155. package/dist/{chunk-O2MEBF23.js → chunk-WBKIU6UJ.js} +2 -2
  156. package/dist/{chunk-TO6TB75E.js → chunk-WCDIDSLR.js} +2 -2
  157. package/dist/{chunk-EVPBYX2Z.js → chunk-WSLFGJBA.js} +1 -1
  158. package/dist/{chunk-OPNROU5B.js → chunk-WYVBWDFY.js} +1 -1
  159. package/dist/{chunk-JYFYIGYK.js → chunk-XA4EU3CW.js} +1 -1
  160. package/dist/{chunk-ZEKCHV43.js → chunk-XAMLDTRA.js} +4 -4
  161. package/dist/{chunk-EHHMNKOA.js → chunk-XKFMNAJ7.js} +1 -1
  162. package/dist/{chunk-5KLQCGI5.js → chunk-XKZD5FGK.js} +55 -0
  163. package/dist/{chunk-U373MEF5.js → chunk-XSXZVKJ7.js} +3 -3
  164. package/dist/{chunk-IM2I7OOS.js → chunk-XTEKGO44.js} +1 -1
  165. package/dist/{chunk-Q7BU5Q6I.js → chunk-XUGOVOID.js} +3 -3
  166. package/dist/{chunk-BEHLIRRJ.js → chunk-XVRQZCTS.js} +1 -1
  167. package/dist/{chunk-P47MPWNU.js → chunk-Y4JVM3SI.js} +1 -1
  168. package/dist/{chunk-NO3M2AFM.js → chunk-Y7OK5PJE.js} +1 -1
  169. package/dist/{chunk-ANPE3TT3.js → chunk-YA4PM3MV.js} +3 -3
  170. package/dist/{chunk-EPDNWY5P.js → chunk-YYLVHUYZ.js} +1 -1
  171. package/dist/{chunk-QYJANQWC.js → chunk-Z5Z3MYUW.js} +2 -2
  172. package/dist/{chunk-MXEIZUXG.js → chunk-ZSHLY5BS.js} +1 -1
  173. package/dist/{chunk-AGQAGOQN.js → chunk-ZZ3JQM5I.js} +9 -9
  174. package/dist/{cleanup-graph-garbage-CAA625RJ.js → cleanup-graph-garbage-XDIX3HLN.js} +7 -7
  175. package/dist/{cloud-sync-command-DBB7WRHL.js → cloud-sync-command-VPYE4FIH.js} +2 -2
  176. package/dist/{cloud-sync-db-init-V7IB23W5.js → cloud-sync-db-init-NSDBTFGI.js} +1 -1
  177. package/dist/{cloud-sync-shutdown-2D3B73CJ.js → cloud-sync-shutdown-6OUYTG4T.js} +2 -2
  178. package/dist/{co-activation-JVN7EBS6.js → co-activation-EAAKGGZH.js} +2 -2
  179. package/dist/{co-occurrence-526PTFGT.js → co-occurrence-OFVF55RX.js} +5 -5
  180. package/dist/codex-consolidation-PPXNBXCV.js +96 -0
  181. package/dist/{conversation-entity-extractor-JO56DB2E.js → conversation-entity-extractor-ZR5GFKAI.js} +3 -3
  182. package/dist/{crdt-sync-LIJLZKFE.js → crdt-sync-FGH4SBFW.js} +1 -1
  183. package/dist/{crm-webhook-55F7Y6D2.js → crm-webhook-PJATR2DC.js} +2 -2
  184. package/dist/{cto-delegation-gate-QIYV4KFO.js → cto-delegation-gate-PO4LSSQ4.js} +13 -12
  185. package/dist/{daemon-orchestration-Q3GJA2JJ.js → daemon-orchestration-IJFZFQUX.js} +18 -17
  186. package/dist/{doc-graph-extractor-P46R4QME.js → doc-graph-extractor-CAYUAM5A.js} +5 -5
  187. package/dist/{documents-7KFEREWO.js → documents-W2G477QE.js} +6 -6
  188. package/dist/{dreaming-JMUXBAPU.js → dreaming-FVXSIIWV.js} +17 -16
  189. package/dist/{employee-boot-brief-HN63D2BY.js → employee-boot-brief-OYMSHFHA.js} +19 -18
  190. package/dist/{exe-drift-7J7GX7DP.js → exe-drift-67RGJOBX.js} +3 -3
  191. package/dist/{exe-export-KJ7B2OBU.js → exe-export-SGYX6XZG.js} +7 -7
  192. package/dist/{exe-import-HPZDWKGE.js → exe-import-UABVA5N3.js} +7 -7
  193. package/dist/{exe-key-2PREP464.js → exe-key-XNYDCVFE.js} +78 -75
  194. package/dist/{exe-org-VEIISATF.js → exe-org-XJVSU5HN.js} +8 -8
  195. package/dist/{exe-snapshot-JXQFLUKA.js → exe-snapshot-YXOGYZUX.js} +18 -17
  196. package/dist/{fast-db-init-SCXJXOYX.js → fast-db-init-GDFJY5UH.js} +1 -1
  197. package/dist/{founder-context-U2SZPLYV.js → founder-context-KUXSNXKS.js} +2 -2
  198. package/dist/gateway/index.js +8 -8
  199. package/dist/{git-staleness-S4NDR7NX.js → git-staleness-NN6RWNLW.js} +2 -2
  200. package/dist/{global-procedures-ZOFTOXIR.js → global-procedures-XDNA3TNA.js} +3 -3
  201. package/dist/{graph-auto-extract-CLVTSUSB.js → graph-auto-extract-KTOR45V4.js} +5 -5
  202. package/dist/{graph-rag-LSJLWGXV.js → graph-rag-L5NV5YWD.js} +3 -3
  203. package/dist/{hook-integrity-SGTKBL6W.js → hook-integrity-X3YAVGUW.js} +1 -1
  204. package/dist/{hook-prefetch-BDSLB6F4.js → hook-prefetch-WE4MIXBM.js} +14 -13
  205. package/dist/hooks/bug-report-worker.js +18 -17
  206. package/dist/hooks/codex-stop-task-finalizer.js +19 -18
  207. package/dist/hooks/commit-complete.js +33 -19
  208. package/dist/hooks/error-recall.js +8 -8
  209. package/dist/hooks/exe-heartbeat-hook.js +4 -4
  210. package/dist/hooks/ingest-worker.js +2 -2
  211. package/dist/hooks/ingest.js +11 -11
  212. package/dist/hooks/instructions-loaded.js +5 -5
  213. package/dist/hooks/manifest.json +20 -20
  214. package/dist/hooks/notification.js +5 -5
  215. package/dist/hooks/post-compact.js +4 -4
  216. package/dist/hooks/post-tool-combined.js +12 -12
  217. package/dist/hooks/pre-compact.js +17 -16
  218. package/dist/hooks/pre-tool-use.js +68 -23
  219. package/dist/hooks/prompt-submit.js +30 -29
  220. package/dist/hooks/session-end.js +113 -99
  221. package/dist/hooks/session-start.js +16 -16
  222. package/dist/hooks/stop.js +82 -19
  223. package/dist/hooks/subagent-stop.js +18 -17
  224. package/dist/hooks/summary-worker.js +22 -21
  225. package/dist/index.js +24 -23
  226. package/dist/{installer-RC2JCKSE.js → installer-EAAYEEEF.js} +6 -6
  227. package/dist/{installer-KCEM4RCG.js → installer-EPQAOI6M.js} +152 -8
  228. package/dist/{installer-EA7T3PBD.js → installer-UDRMFY75.js} +6 -6
  229. package/dist/{intercom-queue-6DZPHHQ2.js → intercom-queue-IBOAVT2I.js} +13 -12
  230. package/dist/lib/cloud-sync.js +10 -10
  231. package/dist/lib/consolidation.js +7 -7
  232. package/dist/lib/database.js +2 -2
  233. package/dist/lib/db-backup.js +1 -1
  234. package/dist/lib/db-write-worker.js +3 -3
  235. package/dist/lib/db.js +2 -2
  236. package/dist/lib/device-registry.js +1 -1
  237. package/dist/lib/employee-templates.js +4 -4
  238. package/dist/lib/employees.js +2 -2
  239. package/dist/lib/exe-daemon.js +77 -76
  240. package/dist/lib/hybrid-search.js +6 -6
  241. package/dist/lib/identity.js +2 -2
  242. package/dist/lib/license.js +2 -2
  243. package/dist/lib/messaging.js +14 -13
  244. package/dist/lib/registry-proxy.js +1 -1
  245. package/dist/lib/reminders.js +3 -3
  246. package/dist/lib/schedules.js +6 -6
  247. package/dist/lib/session-registry.js +4 -4
  248. package/dist/lib/skill-learning.js +7 -7
  249. package/dist/lib/status-brief.js +2 -1
  250. package/dist/lib/store.js +5 -5
  251. package/dist/lib/task-router.js +3 -3
  252. package/dist/lib/tasks.js +15 -14
  253. package/dist/lib/tmux-routing.js +13 -12
  254. package/dist/lib/token-spend.js +3 -3
  255. package/dist/{license-gate-HMSMUIAU.js → license-gate-3TTWJABL.js} +3 -3
  256. package/dist/{license-sync-FBCMPC4J.js → license-sync-ZC6TPKVV.js} +2 -2
  257. package/dist/mcp/register-tools.js +77 -74
  258. package/dist/mcp/server.js +78 -75
  259. package/dist/mcp/tools/complete-reminder.js +4 -4
  260. package/dist/mcp/tools/create-reminder.js +4 -4
  261. package/dist/mcp/tools/create-task.js +17 -16
  262. package/dist/mcp/tools/deactivate-behavior.js +8 -8
  263. package/dist/mcp/tools/list-reminders.js +4 -4
  264. package/dist/mcp/tools/list-tasks.js +17 -16
  265. package/dist/mcp/tools/send-message.js +16 -15
  266. package/dist/mcp/tools/update-task.js +16 -15
  267. package/dist/{mcp-http-config-YKJN52HG.js → mcp-http-config-ROF5EPEF.js} +3 -3
  268. package/dist/{mcp-session-identity-QLUVYWPR.js → mcp-session-identity-ERU6FEUB.js} +13 -12
  269. package/dist/{memory-cards-K2OSX4AW.js → memory-cards-3QTXI2SG.js} +5 -5
  270. package/dist/{memory-graph-extractor-YLTSKLSY.js → memory-graph-extractor-7GAILMYG.js} +6 -6
  271. package/dist/{memory-poisoning-defense-IPO4ADRL.js → memory-poisoning-defense-TPXSRJTQ.js} +2 -2
  272. package/dist/{memory-pressure-watchdog-ZI3TH2OF.js → memory-pressure-watchdog-ZSOP6T2F.js} +14 -13
  273. package/dist/{memory-reflection-ZKVRU3NT.js → memory-reflection-3AI4JBV2.js} +2 -2
  274. package/dist/{notification-ledger-4REL6M3T.js → notification-ledger-ZU7ZFJJX.js} +16 -14
  275. package/dist/{notifications-UXJUAP3C.js → notifications-S4GU22GF.js} +13 -12
  276. package/dist/{orchestration-events-GMRGGBMN.js → orchestration-events-HVG56HJ5.js} +3 -3
  277. package/dist/{orchestrator-5TV75HDJ.js → orchestrator-UW3Q3WYG.js} +15 -14
  278. package/dist/{org-brief-session-7AZZEO3F.js → org-brief-session-G36TJBN4.js} +5 -5
  279. package/dist/{org-consent-policy-XT6UZENB.js → org-consent-policy-RMYVMM3X.js} +1 -1
  280. package/dist/{org-partner-runtime-WLZAZJIY.js → org-partner-runtime-KXMGEYFW.js} +5 -5
  281. package/dist/{org-row-visibility-A5XM4MVO.js → org-row-visibility-UI5PGN76.js} +1 -1
  282. package/dist/{pipeline-router-UEVXDUHR.js → pipeline-router-IODWXDDI.js} +3 -3
  283. package/dist/{plan-limits-QEP32X4W.js → plan-limits-XMAQVEJZ.js} +5 -5
  284. package/dist/{projection-worker-GMRC6SBH.js → projection-worker-6LZUCI3B.js} +2 -2
  285. package/dist/{prospective-memory-QLHSAPSG.js → prospective-memory-G5VK5GCD.js} +2 -2
  286. package/dist/{push-notifications-GKRPXOGI.js → push-notifications-S2RYRXLF.js} +14 -13
  287. package/dist/{reranker-GB4VEMUV.js → reranker-EHQTAA3L.js} +1 -1
  288. package/dist/{retrieval-health-QIBPBGN6.js → retrieval-health-WZ4ICGNF.js} +1 -1
  289. package/dist/{review-polling-MU47NQ2N.js → review-polling-MAWLRDSP.js} +14 -13
  290. package/dist/runtime/index.js +18 -17
  291. package/dist/{session-events-YMQ3VGBJ.js → session-events-BRUIZ5E4.js} +14 -13
  292. package/dist/{session-kill-telemetry-VGPKE57M.js → session-kill-telemetry-PTZLHT33.js} +14 -13
  293. package/dist/{session-scope-P46KAHXQ.js → session-scope-G4RVJJGR.js} +13 -12
  294. package/dist/{setup-wizard-BRNHSJ4U.js → setup-wizard-WFEUB63Z.js} +1 -1
  295. package/dist/{skill-refinement-NLYDSFEH.js → skill-refinement-2OYPH7WD.js} +3 -3
  296. package/dist/{stack-promote-NHFTNIM2.js → stack-promote-DLYYQXQI.js} +5 -4
  297. package/dist/{stack-release-AQVKZUS7.js → stack-release-OPWARLXI.js} +5 -4
  298. package/dist/{stack-update-LLX5KT7G.js → stack-update-SJ43IEQE.js} +10 -3
  299. package/dist/{steward-gate-JKHYFAHA.js → steward-gate-V7PBGVFK.js} +3 -3
  300. package/dist/{subagent-brief-injection-VDVOHDOU.js → subagent-brief-injection-BLCRI2AJ.js} +20 -19
  301. package/dist/{support-inbox-S6YO5YZU.js → support-inbox-6HOQYFD2.js} +3 -3
  302. package/dist/{task-enforcement-LXW45H5Z.js → task-enforcement-EF6O2V26.js} +14 -13
  303. package/dist/{task-request-inbox-UCSKDC3R.js → task-request-inbox-OB2KIJWO.js} +1 -1
  304. package/dist/{task-scope-GDLFE26E.js → task-scope-74JBTKJN.js} +17 -15
  305. package/dist/{tasks-crud-W7VGWRUV.js → tasks-crud-ZU6RZDEZ.js} +13 -12
  306. package/dist/{tasks-notify-CT7NWCS4.js → tasks-notify-767DRYAA.js} +14 -13
  307. package/dist/{tasks-review-WCSKOUFW.js → tasks-review-4F6PZZ3B.js} +13 -12
  308. package/dist/{telemetry-upload-FK5WKXVB.js → telemetry-upload-2JM6KIAB.js} +7 -7
  309. package/dist/{token-budget-GBNGSIU3.js → token-budget-NH2RD4YX.js} +3 -3
  310. package/dist/{tool-gates-3IC7DK4R.js → tool-gates-2OZY3GZM.js} +1 -1
  311. package/dist/{tool-gates-GXSYBVK4.js → tool-gates-7PLIOLAL.js} +1 -1
  312. package/dist/{tool-telemetry-VKMRS6MP.js → tool-telemetry-CHCBD4OQ.js} +1 -1
  313. package/dist/tui/App.js +22 -21
  314. package/dist/{tui-data-FTPV2XBQ.js → tui-data-244GF3BI.js} +13 -12
  315. package/dist/{update-support-J6UWPUOC.js → update-support-P2LO3DAB.js} +9 -9
  316. package/dist/work-claims-4QOE7DT2.js +53 -0
  317. package/dist/{work-state-heartbeat-4LDF6DSM.js → work-state-heartbeat-GX3VWWWK.js} +1 -1
  318. package/dist/{worker-gate-35VZINZG.js → worker-gate-62PZATOV.js} +1 -1
  319. package/dist/{workflow-engine-4DA6RSHI.js → workflow-engine-7YIRU62F.js} +2 -2
  320. package/dist/{worktree-H3YFJ3NU.js → worktree-3TUKIZWY.js} +4 -4
  321. package/dist/{worktree-sweep-4EDLLQ2E.js → worktree-sweep-MYQHUXDE.js} +5 -5
  322. package/package.json +6 -2
  323. package/release-notes.json +68 -62
  324. package/dist/chunk-2RQT7TED.js +0 -275
  325. /package/dist/{chunk-7Y6AQWVT.js → chunk-25EN7XXN.js} +0 -0
  326. /package/dist/{chunk-3THNS2T7.js → chunk-62U63R3E.js} +0 -0
  327. /package/dist/{chunk-VS4LPG66.js → chunk-65ZSFW3O.js} +0 -0
  328. /package/dist/{chunk-LKYGSJ2E.js → chunk-BTFDA3UJ.js} +0 -0
  329. /package/dist/{chunk-JRPYLUXH.js → chunk-DAXFAXLN.js} +0 -0
  330. /package/dist/{chunk-3NBWARKC.js → chunk-FLP2BQOA.js} +0 -0
  331. /package/dist/{chunk-CMBF5WCL.js → chunk-GTOMDMJL.js} +0 -0
  332. /package/dist/{chunk-QYECRPGD.js → chunk-JLYHJJHU.js} +0 -0
  333. /package/dist/{chunk-MBBFL2SP.js → chunk-JZBZI36P.js} +0 -0
  334. /package/dist/{chunk-BY7WWPRM.js → chunk-OUIEDJFO.js} +0 -0
  335. /package/dist/{chunk-7DMCAGSC.js → chunk-WM7Y5ZV2.js} +0 -0
  336. /package/dist/{chunk-G2EAYH4U.js → chunk-XM7HJ5SS.js} +0 -0
  337. /package/dist/{chunk-UY6HRDB2.js → chunk-YNPOELAN.js} +0 -0
  338. /package/dist/{core-memory-CMPPHJN5.js → core-memory-EARETDZ6.js} +0 -0
  339. /package/dist/{memory-isolation-ZB5S5HCO.js → memory-isolation-XASOGA7G.js} +0 -0
  340. /package/dist/{oauth-server-NP7KGF7N.js → oauth-server-C3BXAKAW.js} +0 -0
  341. /package/dist/{project-boot-LEZSK3W7.js → project-boot-LCFBQ6NB.js} +0 -0
  342. /package/dist/{wiki-acl-5DKOWOIH.js → wiki-acl-XQH4UBP2.js} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  releaseBackfillLock,
7
7
  tryAcquireBackfillLock,
8
8
  tryAcquireWorkerSlot
9
- } from "./chunk-MPQXQ5IE.js";
9
+ } from "./chunk-ALYI3P5D.js";
10
10
  import "./chunk-QMSEL5YS.js";
11
11
  import "./chunk-HSGBZSCA.js";
12
12
  import "./chunk-JKKZGDLP.js";
@@ -10,8 +10,8 @@ import {
10
10
  persistWorkflows,
11
11
  runWorkflow,
12
12
  startWorkflow
13
- } from "./chunk-P47MPWNU.js";
14
- import "./chunk-UY6HRDB2.js";
13
+ } from "./chunk-Y4JVM3SI.js";
14
+ import "./chunk-YNPOELAN.js";
15
15
  import "./chunk-MLKGABMK.js";
16
16
  export {
17
17
  advanceWorkflow,
@@ -16,13 +16,13 @@ import {
16
16
  resolveGitWithRetrySync,
17
17
  worktreeBranch,
18
18
  worktreePath
19
- } from "./chunk-FXPAUDCZ.js";
20
- import "./chunk-WR75WUEP.js";
21
- import "./chunk-BRLS5OLZ.js";
19
+ } from "./chunk-7W6FDHHY.js";
20
+ import "./chunk-UI3K73LD.js";
21
+ import "./chunk-HSBKV5LB.js";
22
22
  import "./chunk-TKDITWDN.js";
23
23
  import "./chunk-BBMTVAE3.js";
24
24
  import "./chunk-5YEUPUV4.js";
25
- import "./chunk-NO3M2AFM.js";
25
+ import "./chunk-Y7OK5PJE.js";
26
26
  import "./chunk-YYB5PMTK.js";
27
27
  import "./chunk-NJFJWQNN.js";
28
28
  import "./chunk-V3W3SATA.js";
@@ -4,14 +4,14 @@ import {
4
4
  discoverRepoPathsAsync,
5
5
  isWorktreePathOccupiedByCwd,
6
6
  sweepWorktrees
7
- } from "./chunk-NV6A5HDN.js";
8
- import "./chunk-FXPAUDCZ.js";
9
- import "./chunk-WR75WUEP.js";
10
- import "./chunk-BRLS5OLZ.js";
7
+ } from "./chunk-KDD26FUY.js";
8
+ import "./chunk-7W6FDHHY.js";
9
+ import "./chunk-UI3K73LD.js";
10
+ import "./chunk-HSBKV5LB.js";
11
11
  import "./chunk-TKDITWDN.js";
12
12
  import "./chunk-BBMTVAE3.js";
13
13
  import "./chunk-5YEUPUV4.js";
14
- import "./chunk-NO3M2AFM.js";
14
+ import "./chunk-Y7OK5PJE.js";
15
15
  import "./chunk-YYB5PMTK.js";
16
16
  import "./chunk-NJFJWQNN.js";
17
17
  import "./chunk-V3W3SATA.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.365",
3
+ "version": "0.9.367",
4
4
  "description": "AI employee operating system \u2014 persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -112,6 +112,7 @@
112
112
  "test:watch": "vitest",
113
113
  "lint": "eslint src/ --max-warnings 53",
114
114
  "typecheck": "tsc --noEmit",
115
+ "typecheck:workers": "tsc --noEmit -p api-router/tsconfig.json && tsc --noEmit -p api-router/tsconfig.test.json && tsc --noEmit -p worker/tsconfig.json",
115
116
  "build": "node scripts/dist-ownership-guard.mjs && bash scripts/build-lock.sh && mkdir -p dist/assets && cp src/assets/tmux.conf dist/assets/ && cp src/assets/ghostty.conf dist/assets/ && cp src/assets/statusline-command.sh dist/assets/ && cp src/assets/wezterm.lua dist/assets/ && cp src/assets/com.askexe.exed.plist dist/assets/ && cp src/bin/exe-start.sh dist/bin/exe-start.sh && (node dist/bin/generate-hook-manifest.js 2>/dev/null || true) && node scripts/dist-integrity.mjs --record",
116
117
  "deploy": "node dist/bin/pre-build-guard.js && EXE_DIST_OP_RESTARTS_DAEMON=1 EXE_DIST_CLEAN=1 npm run build && node scripts/dist-integrity.mjs --verify && (node dist/bin/prune-orphan-chunks.js || true) && npm install -g . && node dist/bin/install.js --global && echo '[exe-os] Deploy complete. Run /mcp in active sessions to reconnect.'",
117
118
  "postinstall": "node postinstall.mjs",
@@ -120,6 +121,7 @@
120
121
  "benchmark:longmemeval": "npx tsx tests/benchmarks/longmemeval.ts",
121
122
  "guard:esm-require": "node scripts/check-no-runtime-require.mjs",
122
123
  "guard:defect-classes": "node scripts/check-defect-gates.mjs",
124
+ "guard:required-checks": "node scripts/check-required-checks-evaluable.mjs",
123
125
  "check:schema-version": "node scripts/check-schema-version.mjs",
124
126
  "check:perms-ui-sync": "node packages/permissions-ui/sync.mjs --check",
125
127
  "check:switcher-ui-sync": "node packages/exe-service-switcher/sync.mjs --check",
@@ -158,6 +160,7 @@
158
160
  "zod": "^4.3.6"
159
161
  },
160
162
  "devDependencies": {
163
+ "@cloudflare/workers-types": "^4.0.0",
161
164
  "@types/node": "^22.0.0",
162
165
  "@types/nodemailer": "^8.0.0",
163
166
  "@types/pg": "^8.20.0",
@@ -168,7 +171,8 @@
168
171
  "eslint": "^10.4.0",
169
172
  "tsup": "^8.5.1",
170
173
  "tsx": "^4.0.0",
171
- "vitest": "^4.1.0"
174
+ "vitest": "^4.1.0",
175
+ "yaml": "2.8.3"
172
176
  },
173
177
  "optionalDependencies": {
174
178
  "keytar": "^7.9.0",
@@ -1,47 +1,81 @@
1
1
  {
2
- "current": "0.9.365",
2
+ "current": "0.9.367",
3
3
  "notes": {
4
+ "0.9.367": {
5
+ "version": "0.9.367",
6
+ "date": "2026-08-13",
7
+ "features": [],
8
+ "fixes": [],
9
+ "security": [],
10
+ "other": [
11
+ "v0.9.367 (#699)"
12
+ ],
13
+ "migration_notes": []
14
+ },
15
+ "0.9.366": {
16
+ "version": "0.9.366",
17
+ "date": "2026-08-13",
18
+ "features": [
19
+ "atomic work claims — two sessions can no longer take the same job, enforced at every dispatch path",
20
+ "Codex session consolidation + hook trust: Codex hooks were never actually running, so fresh installs captured nothing",
21
+ "auth page: confirmation state, gated token tab, and opt-in cross-app SSO",
22
+ "wiki docs: seal/unseal capability with cloud-docs worker endpoints"
23
+ ],
24
+ "fixes": [
25
+ "SECURITY: GoTrue's admin API is no longer published on the public internet",
26
+ "SECURITY: account termination was reversible by the terminated user — now tombstoned and lock-fenced",
27
+ "SSO cookie contract is gated at deploy and monitored live",
28
+ "task + tracker close gates now require a verification artifact, so automated completion cannot close work that was never verified",
29
+ "runtime: exe-os MCP tools are registered and the agent loop detects stalls",
30
+ "stack-update: unset-pin rollback and a stale-deploy alert",
31
+ "preflight: SMTP recovery fails on incomplete credentials instead of silently continuing",
32
+ "hook tests: empty stdout is now a clear diagnostic rather than an opaque JSON parse error, and hook fixtures are isolated from the live daemon"
33
+ ],
34
+ "infrastructure": [
35
+ "restored 52 test files that ran in NO CI job at all — including 33 gateway security suites covering permission-guard, api-router enforcement, read-only SQL and rate limiting, dark since 2026-04-20 and green in 17 seconds",
36
+ "a guard that fails loudly when a required check cannot evaluate on a pull request, so a required context can never again be satisfied by never running",
37
+ "native-addon smoke gate: node-llama-cpp's addon had zero coverage, meaning production was the first place it ever executed",
38
+ "the CI sweeper's four correctness fixes finally reached main — an absent required check no longer reads as green",
39
+ "stopped paying for lint and typecheck twice per PR; sweeps every 5 minutes",
40
+ "SHA-pinned the last mutable action ref"
41
+ ],
42
+ "security": [],
43
+ "other": [],
44
+ "migration_notes": []
45
+ },
4
46
  "0.9.365": {
5
47
  "version": "0.9.365",
6
48
  "date": "2026-08-13",
7
49
  "features": [
8
- "mount cross-app service switcher in dashboard + team pages (#683)",
9
- "phase 5 — org-aware usage/credits/keys/billing + persisted alert threshold (e51ca54c) (#677)",
10
- "phase 6a — invite email via Resend + redeemability corrections (e51ca54c) (#678)",
11
- "phase 4 — atomic spend-cap admission + freeze kill-switch (api-router lane) (#672)",
12
- "phase 2 — self-serve org scoping (GET /v1/orgs, is_staff, panel mode 'self') (#653)",
13
- "phase 3 — spend-limits model, authoring + ceiling guard, claim projection (e51ca54c) (#663)",
14
- "detect the unsupervised-daemon state (ad8886b8) (#623)",
15
- "phase 0 — planning-doc truth, permsSubject() identity join, live self-edit warning (#649)"
50
+ "org permissions: self-serve org scoping, spend-limits with an atomic admission cap and freeze kill-switch, role revoke path, and invite emails that are actually redeemable",
51
+ "dashboard: org-aware usage, credits, keys and billing with persisted alert thresholds, plus the cross-app service switcher",
52
+ "daemon: detects the unsupervised-daemon state instead of failing silently"
16
53
  ],
17
54
  "fixes": [
18
- "deadlock-proof the release path — drift monitor + required-context gate off the release lane (#675)",
19
- "write stack state files 0644 so the drift watchdog can read them (exe-monitor#27) (#680)",
20
- "teach the named-subagent default at every layer, not just the ladder (#614)",
21
- "honest backup verification — index is healthy, the alarm was not (e0b92e67) (#632)",
22
- "attribute every kill + verify PID identity before signalling (7a915790, 9fc28233, 42aa8c56) (#636)",
23
- "digest-pin every shipped image, make strict-digest the DEFAULT (#679)",
24
- "move extended-tests out of CI workflow so a non-required job stops gating releases (debdb921) (#655)",
25
- "match agent healthcheck to the PINNED image generation (bug 9ce2a68b coupling) (#676)",
26
- "live manifest first, packaged only as offline fallback (bug c00e1544) (#674)",
27
- "resolve the exe-db container dynamically in wire-update-service.sh (bug 7ff62674) (#666)",
28
- "project attribution must survive git worktrees (e19ce3a3) (#661)",
29
- "--services is run-scoped, managed-set writes additive-only (bug db262248) (#660)",
30
- "fail-closed manifest signatures + built-in verification key (bug c00e1544) (#664)",
31
- "make managed-permissions mode explicit in the shipped stack (e51ca54c) (#668)",
32
- "role 'none' clears the roster admin bit + a real revoke path in the panel (Phase 1, e51ca54c) (#650)",
33
- "enforce prepaid credit balance with a 402 gate (5a862f9c) (#642)",
34
- "add missing /openai segment to Gemini base URL (#648)",
35
- "stop committing empty secrets in wrangler [vars] (b6f1cbf9) (#647)",
36
- "make isolation real and non-optional (2b7072a7) (#621)"
55
+ "api-router: prepaid credit balance is now enforced with a 402 gate — a zero or negative balance could previously consume AI indefinitely (P0 5a862f9c)",
56
+ "daemon: every kill is attributed and the PID identity verified before signalling (7a915790)",
57
+ "memory: project attribution survives git worktrees (e19ce3a3)",
58
+ "stack: every shipped image is digest-pinned and strict-digest is now the DEFAULT",
59
+ "stack-update: fail-closed manifest signatures with a built-in verification key; live manifest first with the packaged copy only as an offline fallback (c00e1544)",
60
+ "stack-update: --services is run-scoped and managed-set writes are additive-only (db262248)",
61
+ "stack-update: state files written 0644 so the drift watchdog can read them",
62
+ "db-integrity: honest backup verification — the index was healthy and the alarm was not (e0b92e67)",
63
+ "worker: stop committing empty secrets in wrangler [vars] (b6f1cbf9)",
64
+ "api-router: add the missing /openai segment to the Gemini base URL",
65
+ "monitor: agent healthcheck matches the pinned image generation (9ce2a68b)",
66
+ "deploy: resolve the exe-db container dynamically; managed-permissions mode is explicit in the shipped stack",
67
+ "dispatch: the named-subagent default is taught at every layer, not just the ladder",
68
+ "tests: hermetic isolation is real and non-optional (2b7072a7)"
37
69
  ],
38
- "security": [],
39
- "other": [
40
- "v0.9.365 (#686)",
41
- "build + push the exe-dashboard image on main (was hand-shipped) (#654)",
42
- "right-size the x64 Linux release gate to native-module verification (e8f2cccd) (#651)",
43
- "release(stack): 0.9.35 — pin exe-auth v0.5.0 (EXE INTELLIGENCE front door) (#645)"
70
+ "infrastructure": [
71
+ "release path is deadlock-proof: the publish gate now asserts the branch-protection REQUIRED CONTEXTS on the release SHA instead of waiting for a whole workflow run to conclude, and it runs on a local runner so it can never hold the lane it is waiting for. A non-required job can no longer gate a release",
72
+ "release-drift monitor: every 30 minutes the published npm dist-tag is compared against main's package.json and alerts on divergence — v0.9.363 was believed shipped while npm served 0.9.362 for five days",
73
+ "x64 Linux release gate right-sized to native-module verification (e8f2cccd) — the full 8,400-test matrix no longer runs on the shared VPS",
74
+ "extended-tests moved out of the CI workflow so a non-required nightly job stops gating releases",
75
+ "dashboard image is built and pushed on main instead of being hand-shipped"
44
76
  ],
77
+ "security": [],
78
+ "other": [],
45
79
  "migration_notes": []
46
80
  },
47
81
  "0.9.364": {
@@ -91,34 +125,6 @@
91
125
  "security": [],
92
126
  "other": [],
93
127
  "migration_notes": []
94
- },
95
- "0.9.362": {
96
- "version": "0.9.362",
97
- "date": "2026-08-08",
98
- "features": [
99
- "p0 timers: daemon timers moved off the event loop — long-running timer callbacks no longer block the daemon event loop, and a worker-race in timer scheduling is closed so overlapping ticks cannot starve MCP handling (Codex gpt-5.5 build, triage 2026-08-06) (#562, re-review findings closed in #571)",
100
- "p0 durability: last-mile durability for the local store — encrypted backups now actually run, the write path preserves the WAL and does not drop the ledger, and duplicate writes are de-duplicated (Codex gpt-5.5 build) (#560, 5 Codex NO-GO findings closed in #570)",
101
- "p0 postinstall: postinstall now fails loud on genuine failures — the real exit code is propagated instead of being swallowed, so a broken install surfaces immediately instead of silently degrading (rebuild of #561, Codex findings fixed) (#574)"
102
- ],
103
- "fixes": [
104
- "p0 provenance: app-image provenance repo map hardened against spoofing — the imageName→ghRepo mapping is enforced so a cross-named app image cannot masquerade under another repo's provenance (#572)"
105
- ],
106
- "security": [],
107
- "other": [],
108
- "migration_notes": []
109
- },
110
- "0.9.359": {
111
- "version": "0.9.359",
112
- "date": "2026-07-30",
113
- "features": [],
114
- "fixes": [
115
- "org-mode: the org-mode-anchor keychain probe no longer risks raising the DESTRUCTIVE macOS 'A keychain cannot be found to store org-mode-anchor' dialog (whose 'Reset To Defaults' button can wipe the login keychain). nativeKeychainAllowed() now skips the native keychain — a best-effort mirror of the authoritative home-anchored file, so nothing is lost — in the daemon (EXE_IS_DAEMON), SSH/remote sessions, and on macOS with no default keychain (probed via a read-only `security default-keychain` that never invokes SecurityAgent). A healthy interactive GUI login is unaffected. Strictly-safer 1-file guard tightening (#514)",
116
- "privacy: stop unconsented telemetry + support-content egress (bug 4b8b47fd, P0) (#510)",
117
- "internal (dormant — no user-facing change until the org feature is wired): AI-Partner phase-1 infrastructure — B1 org-mode privacy/crypto boundary via a boot-resolved SyncCipher (existing single-user installs keep byte-identical v=1 cloud-sync encryption; the org path stays dormant until an org-membership anchor exists) + partner signing identity + sealed mailbox envelope (#504), and B2 sealed-mailbox relay/transport with cross-tenant SQL-predicate scoping (#505)"
118
- ],
119
- "security": [],
120
- "other": [],
121
- "migration_notes": []
122
128
  }
123
129
  }
124
130
  }
@@ -1,275 +0,0 @@
1
- import {
2
- sessionScopeFilter
3
- } from "./chunk-ORNCMRIX.js";
4
-
5
- // src/lib/git-task-sweep.ts
6
- import { execSync } from "child_process";
7
- var DEFAULT_COMMIT_LIMIT = 50;
8
- var DEFAULT_STALE_MINUTES = 10;
9
- var AUTO_ESCALATE_THRESHOLD = 0.6;
10
- var EXACT_UUID_SCORE = 1;
11
- var TITLE_KEYWORD_SCORE = 0.5;
12
- var FILE_PATH_SCORE = 0.3;
13
- var MIN_KEYWORD_OVERLAP = 3;
14
- var STOP_WORDS = /* @__PURE__ */ new Set([
15
- "a",
16
- "an",
17
- "the",
18
- "and",
19
- "or",
20
- "but",
21
- "in",
22
- "on",
23
- "at",
24
- "to",
25
- "for",
26
- "of",
27
- "with",
28
- "by",
29
- "from",
30
- "is",
31
- "it",
32
- "as",
33
- "be",
34
- "was",
35
- "are",
36
- "this",
37
- "that",
38
- "not",
39
- "no",
40
- "if",
41
- "so",
42
- "do",
43
- "up"
44
- ]);
45
- function extractKeywords(text) {
46
- return text.toLowerCase().replace(/[^a-z0-9\s-]/g, " ").split(/\s+/).filter((w) => w.length >= 3 && !STOP_WORDS.has(w));
47
- }
48
- function matchScore(task, commitMessage, changedFiles) {
49
- if (task.id.length >= 8 && commitMessage.includes(task.id)) {
50
- return EXACT_UUID_SCORE;
51
- }
52
- let score = 0;
53
- const titleWords = extractKeywords(task.title);
54
- const commitWords = new Set(extractKeywords(commitMessage));
55
- const overlap = titleWords.filter((w) => commitWords.has(w));
56
- if (overlap.length >= MIN_KEYWORD_OVERLAP) {
57
- score += TITLE_KEYWORD_SCORE;
58
- }
59
- if (task.context && changedFiles.length > 0) {
60
- const contextLower = task.context.toLowerCase();
61
- const hasFileMatch = changedFiles.some(
62
- (f) => contextLower.includes(f.toLowerCase())
63
- );
64
- if (hasFileMatch) {
65
- score += FILE_PATH_SCORE;
66
- }
67
- }
68
- return score;
69
- }
70
- function getRecentCommits(limit = DEFAULT_COMMIT_LIMIT) {
71
- try {
72
- const SEPARATOR = "<<SEP>>";
73
- const output = execSync(
74
- `git log --format="%h${SEPARATOR}%s${SEPARATOR}%aI" --name-only -n ${limit} -z`,
75
- { encoding: "utf8", timeout: 1e4 }
76
- );
77
- const entries = output.split("\0").filter(Boolean);
78
- const commits = [];
79
- let current = null;
80
- for (const entry of entries) {
81
- if (entry.includes(SEPARATOR)) {
82
- const lines = entry.split("\n");
83
- const headerLine = lines[0];
84
- const parts = headerLine.split(SEPARATOR);
85
- if (parts.length >= 3) {
86
- if (current) commits.push(current);
87
- current = {
88
- hash: parts[0],
89
- message: parts[1],
90
- files: lines.slice(1).filter(Boolean),
91
- date: new Date(parts[2])
92
- };
93
- }
94
- } else if (current) {
95
- const files = entry.split("\n").filter(Boolean);
96
- current.files.push(...files);
97
- }
98
- }
99
- if (current) commits.push(current);
100
- return commits;
101
- } catch {
102
- return [];
103
- }
104
- }
105
- function pushUnpushedCommits() {
106
- const run = (args) => execSync(`git ${args}`, { encoding: "utf8", timeout: 15e3, stdio: ["pipe", "pipe", "pipe"] }).trim();
107
- let branch;
108
- try {
109
- branch = run("rev-parse --abbrev-ref HEAD");
110
- } catch {
111
- return { branch: null, ahead: 0, pushed: false, status: "not_a_repo" };
112
- }
113
- if (!branch || branch === "HEAD") {
114
- return { branch: null, ahead: 0, pushed: false, status: "no_branch" };
115
- }
116
- if (branch === "main" || branch === "master") {
117
- return { branch, ahead: 0, pushed: false, status: "default_branch_skipped" };
118
- }
119
- let ahead = 0;
120
- let hasUpstream = false;
121
- try {
122
- run("rev-parse --abbrev-ref --symbolic-full-name @{u}");
123
- hasUpstream = true;
124
- const count = run("rev-list --count @{u}..HEAD");
125
- ahead = Number.parseInt(count, 10) || 0;
126
- } catch {
127
- hasUpstream = false;
128
- for (const base of ["origin/main", "origin/master"]) {
129
- try {
130
- const count = run(`rev-list --count ${base}..HEAD`);
131
- ahead = Number.parseInt(count, 10) || 0;
132
- if (ahead > 0) break;
133
- } catch {
134
- }
135
- }
136
- if (ahead === 0) {
137
- try {
138
- const count = run("rev-list --count HEAD");
139
- ahead = Number.parseInt(count, 10) || 0;
140
- } catch {
141
- ahead = 0;
142
- }
143
- }
144
- }
145
- if (ahead <= 0) {
146
- return { branch, ahead: 0, pushed: false, status: "nothing_to_push" };
147
- }
148
- try {
149
- if (hasUpstream) {
150
- run("push");
151
- } else {
152
- run(`push --set-upstream origin ${branch}`);
153
- }
154
- return { branch, ahead, pushed: true, status: "pushed" };
155
- } catch (err) {
156
- return {
157
- branch,
158
- ahead,
159
- pushed: false,
160
- status: "push_failed",
161
- error: err instanceof Error ? err.message : String(err)
162
- };
163
- }
164
- }
165
- function isStale(updatedAt, staleMinutes) {
166
- const updated = new Date(updatedAt).getTime();
167
- const threshold = Date.now() - staleMinutes * 6e4;
168
- return updated < threshold;
169
- }
170
- function findBestMatch(task, commits) {
171
- let best = null;
172
- for (const commit of commits) {
173
- const score = matchScore(task, commit.message, commit.files);
174
- if (score >= AUTO_ESCALATE_THRESHOLD && (!best || score > best.score)) {
175
- best = { commit, score };
176
- }
177
- }
178
- return best;
179
- }
180
- async function sweepTasks(projectName, options = {}) {
181
- const commitLimit = options.commitLimit ?? DEFAULT_COMMIT_LIMIT;
182
- const staleMinutes = options.staleMinutes ?? DEFAULT_STALE_MINUTES;
183
- const dryRun = options.dryRun ?? false;
184
- const result = { escalated: [], unchanged: 0, errors: [] };
185
- const commits = getRecentCommits(commitLimit);
186
- if (commits.length === 0) {
187
- result.errors.push("No git commits found (not a git repo or empty history)");
188
- return result;
189
- }
190
- let tasks;
191
- try {
192
- const { initStore } = await import("./lib/store.js");
193
- await initStore();
194
- const { getClient } = await import("./lib/database.js");
195
- const client = getClient();
196
- const conditions = ["status = 'in_progress'"];
197
- const args = [];
198
- if (projectName) {
199
- conditions.push("project_name = ?");
200
- args.push(projectName);
201
- }
202
- const swScope = sessionScopeFilter();
203
- if (swScope.sql) {
204
- conditions.push("(session_scope IS NULL OR session_scope = ?)");
205
- args.push(...swScope.args);
206
- }
207
- const queryResult = await client.execute({
208
- sql: `SELECT id, title, assigned_to, project_name, status, updated_at, context
209
- FROM tasks WHERE ${conditions.join(" AND ")}
210
- ORDER BY updated_at ASC`,
211
- args
212
- });
213
- tasks = queryResult.rows.map((r) => ({
214
- id: String(r.id),
215
- title: String(r.title),
216
- assignedTo: String(r.assigned_to),
217
- projectName: String(r.project_name),
218
- status: String(r.status),
219
- updatedAt: String(r.updated_at),
220
- context: r.context ? String(r.context) : void 0
221
- }));
222
- } catch (err) {
223
- result.errors.push(`DB query failed: ${err instanceof Error ? err.message : String(err)}`);
224
- return result;
225
- }
226
- if (tasks.length === 0) {
227
- return result;
228
- }
229
- for (const task of tasks) {
230
- if (!isStale(task.updatedAt, staleMinutes)) {
231
- result.unchanged++;
232
- continue;
233
- }
234
- const match = findBestMatch(task, commits);
235
- if (!match) {
236
- result.unchanged++;
237
- continue;
238
- }
239
- if (!dryRun) {
240
- try {
241
- const { updateTaskStatus } = await import("./tasks-crud-W7VGWRUV.js");
242
- await updateTaskStatus({
243
- taskId: task.id,
244
- status: "needs_review",
245
- result: `Auto-escalated by git-sweep: matching commit ${match.commit.hash} found (score: ${match.score.toFixed(2)})`
246
- });
247
- } catch (err) {
248
- result.errors.push(
249
- `Failed to escalate task ${task.id}: ${err instanceof Error ? err.message : String(err)}`
250
- );
251
- continue;
252
- }
253
- }
254
- result.escalated.push({
255
- taskId: task.id,
256
- title: task.title,
257
- matchedCommit: match.commit.hash,
258
- score: match.score
259
- });
260
- process.stderr.write(
261
- `[git-sweep] ${dryRun ? "WOULD escalate" : "Escalated"} task ${task.id} \u2192 commit ${match.commit.hash} (score: ${match.score.toFixed(2)})
262
- `
263
- );
264
- }
265
- return result;
266
- }
267
-
268
- export {
269
- extractKeywords,
270
- matchScore,
271
- getRecentCommits,
272
- pushUnpushedCommits,
273
- findBestMatch,
274
- sweepTasks
275
- };
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes