@askexenow/exe-os 0.9.339 → 0.9.341

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 (312) hide show
  1. package/dist/{active-agent-EC6M7KTX.js → active-agent-AIQP4DFL.js} +3 -3
  2. package/dist/{active-agent-WHIUCHLA.js → active-agent-LW45DSJ4.js} +3 -3
  3. package/dist/{agentic-ontology-RNSXGXW4.js → agentic-ontology-RVUNRCQY.js} +1 -1
  4. package/dist/{backfill-metadata-MFY6BHKE.js → backfill-metadata-ZSDJ4O2T.js} +5 -5
  5. package/dist/backup-verify-ZAJLEL4X.js +425 -0
  6. package/dist/{behaviors-HLZUJSMP.js → behaviors-EO7KCP3H.js} +6 -6
  7. package/dist/bin/agentic-ontology-backfill.js +6 -6
  8. package/dist/bin/agentic-reflection-backfill.js +7 -7
  9. package/dist/bin/agentic-semantic-label.js +6 -6
  10. package/dist/bin/backfill-conversations.js +6 -6
  11. package/dist/bin/backfill-responses.js +6 -6
  12. package/dist/bin/backfill-vectors.js +8 -8
  13. package/dist/bin/bulk-sync-postgres.js +12 -12
  14. package/dist/bin/cc-doctor.js +4 -4
  15. package/dist/bin/cleanup-stale-review-tasks.js +17 -17
  16. package/dist/bin/cli.js +50 -18
  17. package/dist/bin/deferred-daemon-restart.js +74 -73
  18. package/dist/bin/exe-agent-config.js +3 -3
  19. package/dist/bin/exe-agent.js +10 -10
  20. package/dist/bin/exe-assign.js +8 -8
  21. package/dist/bin/exe-boot.js +26 -26
  22. package/dist/bin/exe-call.js +4 -4
  23. package/dist/bin/exe-cloud.js +12 -12
  24. package/dist/bin/exe-config-dump.js +3 -3
  25. package/dist/bin/exe-dispatch.js +17 -17
  26. package/dist/bin/exe-doctor.js +4 -4
  27. package/dist/bin/exe-export-behaviors.js +8 -8
  28. package/dist/bin/exe-forget.js +7 -7
  29. package/dist/bin/exe-gateway.js +7 -7
  30. package/dist/bin/exe-healthcheck.js +4 -4
  31. package/dist/bin/exe-heartbeat.js +17 -17
  32. package/dist/bin/exe-kill.js +21 -21
  33. package/dist/bin/exe-launch-agent.js +27 -27
  34. package/dist/bin/exe-new-employee.js +8 -8
  35. package/dist/bin/exe-pending-messages.js +18 -18
  36. package/dist/bin/exe-pending-notifications.js +17 -17
  37. package/dist/bin/exe-pending-reviews.js +17 -17
  38. package/dist/bin/exe-rename.js +4 -4
  39. package/dist/bin/exe-review.js +20 -20
  40. package/dist/bin/exe-search.js +6 -6
  41. package/dist/bin/exe-session-cleanup.js +22 -22
  42. package/dist/bin/exe-settings.js +13 -13
  43. package/dist/bin/exe-start-codex.js +13 -13
  44. package/dist/bin/exe-start-opencode.js +9 -9
  45. package/dist/bin/exe-status.js +18 -18
  46. package/dist/bin/exe-support.js +3 -3
  47. package/dist/bin/exe-team.js +3 -3
  48. package/dist/bin/git-sweep.js +18 -18
  49. package/dist/bin/graph-backfill.js +7 -7
  50. package/dist/bin/graph-export.js +6 -6
  51. package/dist/bin/import-history.js +10 -10
  52. package/dist/bin/install.js +76 -75
  53. package/dist/bin/intercom-check.js +4 -4
  54. package/dist/bin/mcp-sessions.js +2 -2
  55. package/dist/bin/orchestration-metrics.js +4 -4
  56. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  57. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  58. package/dist/bin/reconcile-backlog.js +484 -0
  59. package/dist/bin/registry-proxy.js +1 -1
  60. package/dist/bin/scan-tasks.js +17 -17
  61. package/dist/bin/setup.js +1 -1
  62. package/dist/bin/shard-migrate.js +5 -5
  63. package/dist/bin/stack-update.js +13 -7
  64. package/dist/bin/vps-health-gate.js +1 -1
  65. package/dist/boot-generation-GSMPJOWM.js +22 -0
  66. package/dist/{capability-cards-YOKVMMOL.js → capability-cards-OBYQNAKZ.js} +2 -2
  67. package/dist/{capacity-monitor-S54IOWRL.js → capacity-monitor-MG3FTUD5.js} +18 -18
  68. package/dist/{catchup-brief-DIOMTEW5.js → catchup-brief-BVJOF3GL.js} +21 -21
  69. package/dist/{chunk-X425OEYF.js → chunk-2C455MU3.js} +2 -2
  70. package/dist/{chunk-N5I7RL3I.js → chunk-2IWBY7XK.js} +1 -1
  71. package/dist/{chunk-X7H3HMFH.js → chunk-2P4WJNN5.js} +3 -3
  72. package/dist/{chunk-MW2GJJ53.js → chunk-2UGGBIDL.js} +2 -2
  73. package/dist/{chunk-BPC5LZ6Y.js → chunk-2WMTTIAZ.js} +1 -1
  74. package/dist/{chunk-BU2QQWBQ.js → chunk-2YCFNBC4.js} +1 -1
  75. package/dist/{chunk-RRWDYOQS.js → chunk-32YHCHWW.js} +1 -1
  76. package/dist/{chunk-I5RLNOFK.js → chunk-3BRVLPPA.js} +8 -4
  77. package/dist/{chunk-KTY7I7UH.js → chunk-4FJZ6SO7.js} +1 -1
  78. package/dist/{chunk-XWHE4LZK.js → chunk-4LWV633D.js} +21 -2
  79. package/dist/{chunk-AVKXCSBI.js → chunk-4QSJVMMT.js} +1 -1
  80. package/dist/{chunk-I3XKO3KQ.js → chunk-6BQG7EKO.js} +1 -1
  81. package/dist/{chunk-RLRT2BVM.js → chunk-6D2PI4QD.js} +1 -1
  82. package/dist/{chunk-7EA7LYW4.js → chunk-6MVC43X7.js} +4 -4
  83. package/dist/chunk-6QW6JHRE.js +368 -0
  84. package/dist/{chunk-HHIBOU3P.js → chunk-7LF5DS3A.js} +1 -1
  85. package/dist/{chunk-XACL67CS.js → chunk-7SEC2AG5.js} +1 -1
  86. package/dist/{chunk-UFAXZ2PY.js → chunk-7YORGTXC.js} +1 -1
  87. package/dist/{chunk-3QDSCJ3F.js → chunk-AP455LBW.js} +1 -1
  88. package/dist/{chunk-OFX5B2S7.js → chunk-ATKW3SYL.js} +1 -1
  89. package/dist/{chunk-3OBWSCJN.js → chunk-B7CUBLF7.js} +10 -10
  90. package/dist/{chunk-UCQITDLM.js → chunk-BJ23BNED.js} +1 -1
  91. package/dist/{chunk-B76TSEP3.js → chunk-BJOBR6P2.js} +1 -1
  92. package/dist/{chunk-XCTGRD4S.js → chunk-BMHQPIJ2.js} +12 -12
  93. package/dist/{chunk-ZIVEA3NB.js → chunk-BR4423AS.js} +1 -1
  94. package/dist/{chunk-ATOU6CYR.js → chunk-BV6GBSRP.js} +16 -2
  95. package/dist/{chunk-DZ6OQM67.js → chunk-C445WRUX.js} +1 -1
  96. package/dist/{chunk-YE7NH53A.js → chunk-CCIEIRV2.js} +1 -1
  97. package/dist/{chunk-6IRVGOUL.js → chunk-CCPHEPLU.js} +1 -1
  98. package/dist/{chunk-2HZY3ECT.js → chunk-CMR64RYM.js} +18 -18
  99. package/dist/{chunk-MQRFKSLI.js → chunk-CYA5S5OD.js} +3 -3
  100. package/dist/{chunk-FNZR3B7U.js → chunk-DGGDUKH6.js} +1 -1
  101. package/dist/{chunk-QXSBB26A.js → chunk-DNVFWFYF.js} +1 -1
  102. package/dist/{chunk-QZLIZAS7.js → chunk-DPFQ2WQX.js} +2 -2
  103. package/dist/{chunk-H37HHX3E.js → chunk-EDH54E5A.js} +9 -9
  104. package/dist/{chunk-JD5S5AAV.js → chunk-EDOO23B2.js} +2 -2
  105. package/dist/{chunk-GQQHDEEM.js → chunk-FOV57K47.js} +10 -10
  106. package/dist/{chunk-65SVQELL.js → chunk-GFDGDFBF.js} +9 -0
  107. package/dist/{chunk-DILD54TU.js → chunk-GOGSWXNZ.js} +9 -9
  108. package/dist/{chunk-UPWE5NOG.js → chunk-GPW32HVB.js} +2 -2
  109. package/dist/{chunk-4IYSBPX3.js → chunk-HAZO7TRD.js} +1 -1
  110. package/dist/{chunk-52KNOQMK.js → chunk-HJX6NCJF.js} +3 -3
  111. package/dist/{chunk-UIV2WPBT.js → chunk-HNLXMD2V.js} +1 -1
  112. package/dist/{chunk-Z7OZP3ET.js → chunk-HSYJ6DZ2.js} +1 -1
  113. package/dist/{chunk-LTVCRHHD.js → chunk-HUSVERE6.js} +4 -4
  114. package/dist/{chunk-I7Z6KTGF.js → chunk-I7ECEP3W.js} +5 -5
  115. package/dist/{chunk-T4KZ2Z2N.js → chunk-IELUDZAA.js} +3 -3
  116. package/dist/{chunk-XUKPALWT.js → chunk-ITMEE7PQ.js} +3 -3
  117. package/dist/{chunk-KCC5A7YL.js → chunk-IXBIVKWZ.js} +6 -6
  118. package/dist/{chunk-GN45PBWI.js → chunk-J6SEDDOR.js} +2 -2
  119. package/dist/{chunk-UXBD22CD.js → chunk-K6KRBXQP.js} +1 -1
  120. package/dist/{chunk-PLRIJALF.js → chunk-KKOLHBNC.js} +33 -25
  121. package/dist/{chunk-OJTJYEMX.js → chunk-KP4PY2Z2.js} +3 -3
  122. package/dist/{chunk-VJHUVFIW.js → chunk-L2YGXJGF.js} +3 -3
  123. package/dist/{chunk-6MRWJMI5.js → chunk-LA2Z6RMS.js} +1 -1
  124. package/dist/{chunk-DEPZOCYD.js → chunk-LEJ25726.js} +321 -621
  125. package/dist/{chunk-2233TQCA.js → chunk-LLU6WZLK.js} +1 -1
  126. package/dist/{chunk-6M36JFFD.js → chunk-LOBCQXV5.js} +4 -4
  127. package/dist/{chunk-LMZISHSJ.js → chunk-MC4ATFJV.js} +5 -5
  128. package/dist/{chunk-EIF2LQHZ.js → chunk-MJB5ZFQM.js} +1 -1
  129. package/dist/{chunk-PAEXYFMY.js → chunk-N7A5D25S.js} +1 -1
  130. package/dist/{chunk-DADMPMYX.js → chunk-NDSNM5OH.js} +1 -1
  131. package/dist/{chunk-H2L4PHGH.js → chunk-NFBW7N4D.js} +2 -2
  132. package/dist/{chunk-VYRYY7TE.js → chunk-NTI22F3R.js} +1 -1
  133. package/dist/{chunk-TLYAEISW.js → chunk-OUEFW4RK.js} +2 -2
  134. package/dist/{chunk-K5WFKEXQ.js → chunk-PTJBWC77.js} +1 -1
  135. package/dist/{chunk-KMBEL7VB.js → chunk-PVIH3ZGV.js} +1 -1
  136. package/dist/{support-outbox-MGUVVGHT.js → chunk-Q5AIPSSC.js} +19 -7
  137. package/dist/chunk-RP5GETX5.js +140 -0
  138. package/dist/{chunk-HEPR6QTL.js → chunk-RWSLVYTE.js} +45 -5
  139. package/dist/{chunk-XJI7Z6LZ.js → chunk-T2PYVVZ5.js} +1 -1
  140. package/dist/{chunk-WYLV4S6A.js → chunk-TIXTHUVJ.js} +3 -3
  141. package/dist/{chunk-7WDXEKUL.js → chunk-TWXZM34M.js} +3 -3
  142. package/dist/{chunk-W7DHFGCB.js → chunk-U2MREVXQ.js} +1 -1
  143. package/dist/{chunk-6HBURYON.js → chunk-UIU2DGRV.js} +3 -3
  144. package/dist/{chunk-7TS64TBG.js → chunk-UU4UINUX.js} +6 -1
  145. package/dist/chunk-W6K4XB6G.js +40 -0
  146. package/dist/{chunk-R44Z32O2.js → chunk-WD55PEBM.js} +3 -3
  147. package/dist/{chunk-FUIIVSW6.js → chunk-WH7XN5ER.js} +1 -1
  148. package/dist/{chunk-Q7L6G6KV.js → chunk-WWNQFOSP.js} +2 -2
  149. package/dist/{chunk-542EWGY3.js → chunk-XSMRR4IW.js} +7 -7
  150. package/dist/{chunk-TNJRWUCE.js → chunk-Y3S4H77G.js} +1 -1
  151. package/dist/{chunk-AOO77BDE.js → chunk-YHUNDGVV.js} +1 -1
  152. package/dist/{chunk-JBSCL2XT.js → chunk-YIIME2OW.js} +1 -1
  153. package/dist/{chunk-QFPTDSY2.js → chunk-YLQXP7T7.js} +1 -1
  154. package/dist/{chunk-RDTZTLVQ.js → chunk-YWQMWFYR.js} +30 -14
  155. package/dist/{chunk-2SG2UGCH.js → chunk-ZNE6H2JO.js} +4 -4
  156. package/dist/{cleanup-graph-garbage-KUABW6LS.js → cleanup-graph-garbage-MXQ4Q2MA.js} +6 -6
  157. package/dist/{co-activation-XMPHKGHR.js → co-activation-QI5BK4RT.js} +2 -2
  158. package/dist/{co-occurrence-SHKSJ6CV.js → co-occurrence-BYSQNZSV.js} +4 -4
  159. package/dist/{code-context-index-EXXDY3QZ.js → code-context-index-BNBHDXHW.js} +2 -2
  160. package/dist/{content-extractor-RHITF2KM.js → content-extractor-JRJDNIHP.js} +2 -2
  161. package/dist/{conversation-entity-extractor-D3EFTLT4.js → conversation-entity-extractor-FPAMTL3C.js} +2 -2
  162. package/dist/{crdt-sync-UJELKSNX.js → crdt-sync-ETPKNBCU.js} +1 -1
  163. package/dist/{crm-webhook-HHNBS7LY.js → crm-webhook-M566ZMZS.js} +2 -2
  164. package/dist/{cto-delegation-gate-DXNF5HVW.js → cto-delegation-gate-S734XDXT.js} +16 -16
  165. package/dist/{daemon-orchestration-7QB6QOXT.js → daemon-orchestration-XV5GN73R.js} +20 -20
  166. package/dist/{daemon-ready-5XI5BIJD.js → daemon-ready-RKKB4P6K.js} +1 -1
  167. package/dist/{daemon-ready-signal-E7VMIQ6I.js → daemon-ready-signal-WKEJQNRA.js} +3 -1
  168. package/dist/{db-backup-DLD4QZBO.js → db-backup-MX2G3CEK.js} +1 -1
  169. package/dist/{doc-graph-extractor-3TRLGD7M.js → doc-graph-extractor-LR5KMPH7.js} +4 -4
  170. package/dist/{documents-FHIBU7KJ.js → documents-FA6N7QDA.js} +8 -8
  171. package/dist/{dreaming-OMFUEUCQ.js → dreaming-UKGTQT6I.js} +17 -17
  172. package/dist/{exe-drift-KY2KHZEL.js → exe-drift-TUKTCXZE.js} +3 -3
  173. package/dist/{exe-export-SP6G3QF6.js → exe-export-ZLHBXMZC.js} +7 -7
  174. package/dist/{exe-import-KJU7FBVQ.js → exe-import-VVKBZWSA.js} +7 -7
  175. package/dist/{exe-key-5RLFQMYP.js → exe-key-QJXFBF6G.js} +74 -73
  176. package/dist/{exe-snapshot-ZNPGUKRZ.js → exe-snapshot-JRLUO645.js} +21 -21
  177. package/dist/{fast-db-init-QQB6IVWV.js → fast-db-init-JKJEEHUI.js} +1 -1
  178. package/dist/{founder-context-PQR3BUS7.js → founder-context-HWPLMZVR.js} +2 -2
  179. package/dist/gateway/index.js +24 -24
  180. package/dist/{git-staleness-UGB5J3K7.js → git-staleness-X5XZONX3.js} +2 -2
  181. package/dist/{global-procedures-R7KRREEK.js → global-procedures-VIIVWB6R.js} +3 -3
  182. package/dist/{graph-auto-extract-LKIQ57PL.js → graph-auto-extract-HCQQF5AG.js} +4 -4
  183. package/dist/{graph-rag-JZZAB7PC.js → graph-rag-WAK2BRJH.js} +2 -2
  184. package/dist/hooks/bug-report-worker.js +19 -19
  185. package/dist/hooks/codex-stop-task-finalizer.js +19 -19
  186. package/dist/hooks/commit-complete.js +19 -19
  187. package/dist/hooks/error-recall.js +7 -7
  188. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  189. package/dist/hooks/ingest-worker.js +5 -5
  190. package/dist/hooks/ingest.js +9 -9
  191. package/dist/hooks/instructions-loaded.js +4 -4
  192. package/dist/hooks/manifest.json +20 -20
  193. package/dist/hooks/notification.js +4 -4
  194. package/dist/hooks/post-compact.js +18 -18
  195. package/dist/hooks/post-tool-combined.js +9 -9
  196. package/dist/hooks/pre-compact.js +19 -19
  197. package/dist/hooks/pre-tool-use.js +22 -22
  198. package/dist/hooks/prompt-submit.js +36 -36
  199. package/dist/hooks/session-end.js +24 -24
  200. package/dist/hooks/session-start.js +14 -14
  201. package/dist/hooks/stop.js +25 -25
  202. package/dist/hooks/subagent-stop.js +18 -18
  203. package/dist/hooks/summary-worker.js +23 -23
  204. package/dist/index.js +29 -29
  205. package/dist/{installer-SB2N5NKH.js → installer-6IFVEQI4.js} +5 -5
  206. package/dist/{installer-MZWWBXM6.js → installer-NX2CLNV5.js} +5 -5
  207. package/dist/{installer-MNPXDLGG.js → installer-T2LGHZKL.js} +5 -5
  208. package/dist/{intercom-queue-VU2G6F5R.js → intercom-queue-KYHXXZCQ.js} +16 -16
  209. package/dist/lib/agent-config.js +1 -1
  210. package/dist/lib/cloud-sync.js +12 -12
  211. package/dist/lib/consolidation.js +8 -8
  212. package/dist/lib/database.js +2 -2
  213. package/dist/lib/db-daemon-client.js +2 -2
  214. package/dist/lib/db.js +2 -2
  215. package/dist/lib/device-registry.js +1 -1
  216. package/dist/lib/embedder.js +2 -2
  217. package/dist/lib/employee-templates.js +4 -4
  218. package/dist/lib/employees.js +2 -2
  219. package/dist/lib/exe-daemon-client.js +1 -1
  220. package/dist/lib/exe-daemon.js +123 -54
  221. package/dist/lib/hybrid-search.js +6 -6
  222. package/dist/lib/identity.js +2 -2
  223. package/dist/lib/license.js +2 -2
  224. package/dist/lib/messaging.js +17 -17
  225. package/dist/lib/post-tool-memory.js +3 -3
  226. package/dist/lib/registry-proxy.js +1 -1
  227. package/dist/lib/reminders.js +3 -3
  228. package/dist/lib/schedules.js +6 -6
  229. package/dist/lib/session-registry.js +4 -4
  230. package/dist/lib/skill-learning.js +7 -7
  231. package/dist/lib/store.js +5 -5
  232. package/dist/lib/task-router.js +3 -3
  233. package/dist/lib/tasks.js +18 -18
  234. package/dist/lib/tmux-routing.js +16 -16
  235. package/dist/lib/token-spend.js +3 -3
  236. package/dist/{license-gate-BYDMFMFT.js → license-gate-MGDR4YNI.js} +3 -3
  237. package/dist/{license-sync-N3RNYVP2.js → license-sync-UWE6GEB4.js} +2 -2
  238. package/dist/mcp/register-tools.js +73 -72
  239. package/dist/mcp/server.js +74 -73
  240. package/dist/mcp/tools/complete-reminder.js +4 -4
  241. package/dist/mcp/tools/create-reminder.js +4 -4
  242. package/dist/mcp/tools/create-task.js +20 -20
  243. package/dist/mcp/tools/deactivate-behavior.js +8 -8
  244. package/dist/mcp/tools/list-reminders.js +4 -4
  245. package/dist/mcp/tools/list-tasks.js +20 -20
  246. package/dist/mcp/tools/send-message.js +19 -19
  247. package/dist/mcp/tools/update-task.js +19 -19
  248. package/dist/{mcp-http-config-EMAVS2JI.js → mcp-http-config-RQLYEPTL.js} +3 -3
  249. package/dist/{memory-cards-TQRLZI4D.js → memory-cards-VYQ5DPMR.js} +5 -5
  250. package/dist/{memory-graph-extractor-IWGNVAFU.js → memory-graph-extractor-GX2HNYLU.js} +5 -5
  251. package/dist/{memory-poisoning-defense-T4ITBGSG.js → memory-poisoning-defense-TX7627BD.js} +2 -2
  252. package/dist/{memory-pressure-watchdog-RRIAXPXQ.js → memory-pressure-watchdog-MLNNH26B.js} +17 -17
  253. package/dist/{memory-queue-client-BKQHTYTH.js → memory-queue-client-YRL6XTGU.js} +2 -2
  254. package/dist/{memory-reflection-6N4J2FL7.js → memory-reflection-KIGEFSI4.js} +2 -2
  255. package/dist/notification-ledger-B6AVEGMV.js +407 -0
  256. package/dist/{notifications-KONB3C62.js → notifications-DWXV7SVL.js} +16 -16
  257. package/dist/{orchestration-events-5SIJOE4H.js → orchestration-events-ZG7O4HRY.js} +3 -3
  258. package/dist/{orchestrator-DUUX7FQV.js → orchestrator-PGHJDUUT.js} +18 -18
  259. package/dist/{pipeline-router-O6HU7DKH.js → pipeline-router-RTLAGZTA.js} +3 -3
  260. package/dist/{plan-limits-GRNBOBB3.js → plan-limits-WLQZTCSF.js} +5 -5
  261. package/dist/{projection-worker-ZVOFHTXT.js → projection-worker-44SEKTZ5.js} +2 -2
  262. package/dist/{prospective-memory-W6S67LZZ.js → prospective-memory-UACFTYXK.js} +2 -2
  263. package/dist/{reranker-SSFBRWWD.js → reranker-NL4YAV6R.js} +1 -1
  264. package/dist/{retrieval-health-TWHKYCRK.js → retrieval-health-4C2PO6HH.js} +1 -1
  265. package/dist/{review-polling-PCMD5BFN.js → review-polling-W5AMHNLT.js} +17 -17
  266. package/dist/runtime/index.js +24 -24
  267. package/dist/{session-events-3LCVQEL7.js → session-events-PGL5GJEB.js} +17 -17
  268. package/dist/{session-kill-telemetry-CZSPN5V6.js → session-kill-telemetry-6YDGEF27.js} +17 -17
  269. package/dist/{session-scope-CFHVSVAQ.js → session-scope-3MEOO557.js} +16 -16
  270. package/dist/{setup-wizard-CJZMM43G.js → setup-wizard-CJIYDSSP.js} +1 -1
  271. package/dist/{skill-refinement-74T6VDFM.js → skill-refinement-EOROTBPX.js} +3 -3
  272. package/dist/stack-promote-RSOWO6EY.js +130 -0
  273. package/dist/{stack-release-XXMV7SPX.js → stack-release-PR2XKJ4Q.js} +24 -9
  274. package/dist/{stack-update-E2TKHHSQ.js → stack-update-LMDM27ZW.js} +5 -3
  275. package/dist/{steward-gate-WT7WXQIE.js → steward-gate-4A2XHYFD.js} +3 -3
  276. package/dist/support-inbox-Z77ACQUY.js +32 -0
  277. package/dist/support-outbox-GB5SQFRJ.js +16 -0
  278. package/dist/{task-enforcement-VI7L43DC.js → task-enforcement-X5QVL6RE.js} +17 -17
  279. package/dist/{task-scope-CQEG5SSJ.js → task-scope-EKYDCVUF.js} +16 -16
  280. package/dist/{tasks-crud-UGK5A25L.js → tasks-crud-6LBNU43G.js} +16 -16
  281. package/dist/{tasks-notify-SMLDFBWM.js → tasks-notify-TFJLSQ3B.js} +17 -17
  282. package/dist/{tasks-review-JKBRACII.js → tasks-review-PBIUYXAL.js} +16 -16
  283. package/dist/{telemetry-upload-7LBYGPCB.js → telemetry-upload-WQDFABTF.js} +7 -7
  284. package/dist/{token-budget-QBRJR4M5.js → token-budget-KWGL5DY7.js} +3 -3
  285. package/dist/{tool-capability-index-Q6YQDL7I.js → tool-capability-index-EH3HQVHU.js} +1 -1
  286. package/dist/{tool-telemetry-ULIDUK3P.js → tool-telemetry-UC55LSIH.js} +1 -1
  287. package/dist/tui/App.js +24 -24
  288. package/dist/{tui-data-NPTGKT37.js → tui-data-M3RBSJL3.js} +16 -16
  289. package/dist/update-support-VPBD5SD2.js +355 -0
  290. package/dist/{worker-gate-MXUQUG4M.js → worker-gate-4QLLMXZM.js} +1 -1
  291. package/dist/{workflow-engine-EWCOLD47.js → workflow-engine-MMEHKUN4.js} +2 -2
  292. package/dist/{worktree-GVF2I5FP.js → worktree-YXBDRYOC.js} +4 -4
  293. package/dist/{worktree-sweep-ZAG3V24E.js → worktree-sweep-5WKBU7E6.js} +5 -5
  294. package/package.json +2 -2
  295. package/release-notes.json +35 -60
  296. package/dist/chunk-Y25OJWOQ.js +0 -45
  297. package/dist/{chunk-FLNSJ2TC.js → chunk-2KLAYDFB.js} +0 -0
  298. package/dist/{chunk-WHRTDN5J.js → chunk-3NCZKWPO.js} +0 -0
  299. package/dist/{chunk-IYB2NIW3.js → chunk-6MVI4QH2.js} +0 -0
  300. package/dist/{chunk-A4DVMPYB.js → chunk-7UMCQQWS.js} +3 -3
  301. /package/dist/{chunk-QLFRCA6I.js → chunk-AYLNJGCS.js} +0 -0
  302. /package/dist/{chunk-D3QASX2W.js → chunk-C2SRRCRK.js} +0 -0
  303. /package/dist/{chunk-KTPG4XKI.js → chunk-IB336P52.js} +0 -0
  304. /package/dist/{chunk-NQBRGXYR.js → chunk-MC6VPZKS.js} +0 -0
  305. /package/dist/{chunk-5Z5NATNS.js → chunk-PPZOWQHP.js} +0 -0
  306. /package/dist/{chunk-C2UO2I6K.js → chunk-WNKVKNOM.js} +0 -0
  307. /package/dist/{core-memory-VO5ZIBKH.js → core-memory-3IBWM4WR.js} +0 -0
  308. /package/dist/{entity-boost-DNI4A5I7.js → entity-boost-DWAWXFKN.js} +0 -0
  309. /package/dist/{message-queue-client-Q5BW3O5W.js → message-queue-client-3PTHPG5Q.js} +0 -0
  310. /package/dist/{oauth-server-ROQFOEMM.js → oauth-server-M5TGXT6D.js} +0 -0
  311. /package/dist/{project-boot-SD7GM24K.js → project-boot-6CGQ3EAH.js} +0 -0
  312. /package/dist/{wiki-acl-JA5UCQZ4.js → wiki-acl-7CROE3MJ.js} +0 -0
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-UFAXZ2PY.js";
4
+ } from "../chunk-7YORGTXC.js";
5
5
  import {
6
6
  formatOrchestrationMetrics,
7
7
  getOrchestrationMetrics
8
- } from "../chunk-FUIIVSW6.js";
9
- import "../chunk-HEPR6QTL.js";
8
+ } from "../chunk-WH7XN5ER.js";
9
+ import "../chunk-RWSLVYTE.js";
10
10
  import "../chunk-2I23RPSI.js";
11
- import "../chunk-ATOU6CYR.js";
11
+ import "../chunk-BV6GBSRP.js";
12
12
  import "../chunk-PNQDP3OA.js";
13
13
  import "../chunk-H73TUI4Y.js";
14
14
  import "../chunk-7HLWBYH7.js";
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  buildReflectionCheckpoint
4
- } from "../chunk-KTY7I7UH.js";
4
+ } from "../chunk-4FJZ6SO7.js";
5
5
  import {
6
6
  pgSslConfig
7
7
  } from "../chunk-EQSQ4HBW.js";
8
- import "../chunk-D3QASX2W.js";
8
+ import "../chunk-C2SRRCRK.js";
9
9
  import {
10
10
  politeBatchPause,
11
11
  startManagedJob
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  inferSemanticLabel,
7
7
  stableId
8
- } from "../chunk-D3QASX2W.js";
8
+ } from "../chunk-C2SRRCRK.js";
9
9
  import {
10
10
  politeBatchPause,
11
11
  startManagedJob
@@ -0,0 +1,484 @@
1
+ #!/usr/bin/env node
2
+ import "../chunk-MLKGABMK.js";
3
+
4
+ // src/bin/reconcile-backlog.ts
5
+ import { existsSync, readFileSync } from "fs";
6
+ import path from "path";
7
+ import { homedir } from "os";
8
+ import { fileURLToPath } from "url";
9
+
10
+ // src/lib/backlog-reconcile.ts
11
+ import { execFileSync } from "child_process";
12
+ function defaultGitRunner(args, cwd) {
13
+ try {
14
+ const stdout = execFileSync("git", args, {
15
+ cwd,
16
+ encoding: "utf8",
17
+ stdio: ["ignore", "pipe", "ignore"],
18
+ timeout: 2e4,
19
+ maxBuffer: 32 * 1024 * 1024
20
+ });
21
+ return { stdout, ok: true, code: 0 };
22
+ } catch (err) {
23
+ const e = err;
24
+ const stdout = e.stdout ? e.stdout.toString() : "";
25
+ return { stdout, ok: false, code: typeof e.status === "number" ? e.status : 1 };
26
+ }
27
+ }
28
+ var FIELD_SEP = "";
29
+ var DEFAULT_BRANCH_REFS = ["origin/main", "main", "origin/master", "master"];
30
+ function resolveReachability(runGit, repoPath, sha, defaultBranchRefs = DEFAULT_BRANCH_REFS) {
31
+ const tagRes = runGit(["tag", "--contains", sha], repoPath);
32
+ const tags = tagRes.stdout.split("\n").map((s) => s.trim()).filter(Boolean);
33
+ if (tags.length > 0) {
34
+ const versionTag = tags.find((t) => /v?\d+\.\d+/.test(t)) ?? tags[0];
35
+ return { reachable: true, tag: versionTag };
36
+ }
37
+ for (const ref of defaultBranchRefs) {
38
+ const anc = runGit(["merge-base", "--is-ancestor", sha, ref], repoPath);
39
+ if (anc.ok && anc.code === 0) return { reachable: true };
40
+ }
41
+ return { reachable: false };
42
+ }
43
+ function findIdMatches(runGit, repoPath, repoName, id, defaultBranchRefs = DEFAULT_BRANCH_REFS) {
44
+ const idShort = id.slice(0, 8).toLowerCase();
45
+ if (!/^[0-9a-f]{8}/.test(idShort)) return [];
46
+ const res = runGit(
47
+ ["log", "--all", "--no-color", "-i", `--format=%H${FIELD_SEP}%s`, "--grep", idShort, "--grep", id],
48
+ repoPath
49
+ );
50
+ if (!res.ok || !res.stdout.trim()) return [];
51
+ const matches = [];
52
+ for (const line of res.stdout.split("\n")) {
53
+ if (!line.trim()) continue;
54
+ const sepIdx = line.indexOf(FIELD_SEP);
55
+ const sha = (sepIdx >= 0 ? line.slice(0, sepIdx) : line).trim();
56
+ const subject = sepIdx >= 0 ? line.slice(sepIdx + 1).trim() : "";
57
+ if (!/^[0-9a-f]{7,40}$/.test(sha)) continue;
58
+ const reach = resolveReachability(runGit, repoPath, sha, defaultBranchRefs);
59
+ matches.push({
60
+ repo: repoName,
61
+ commit: sha.slice(0, 10),
62
+ fullCommit: sha,
63
+ subject,
64
+ tag: reach.tag,
65
+ releaseReachable: reach.reachable
66
+ });
67
+ }
68
+ return matches;
69
+ }
70
+ function gitGrepHit(runGit, repoPath, token) {
71
+ if (!token) return false;
72
+ const res = runGit(["grep", "-l", "-i", "-F", token, "HEAD"], repoPath);
73
+ return res.ok && res.stdout.trim().length > 0;
74
+ }
75
+ function pickKeyword(title) {
76
+ const stop = /* @__PURE__ */ new Set([
77
+ "the",
78
+ "and",
79
+ "for",
80
+ "with",
81
+ "that",
82
+ "this",
83
+ "from",
84
+ "into",
85
+ "when",
86
+ "should",
87
+ "support",
88
+ "feature",
89
+ "request",
90
+ "bug",
91
+ "report",
92
+ "please",
93
+ "would",
94
+ "could",
95
+ "make",
96
+ "able",
97
+ "user",
98
+ "users",
99
+ "system",
100
+ "using",
101
+ "based",
102
+ "which",
103
+ "there"
104
+ ]);
105
+ const tokens = (title.toLowerCase().match(/[a-z][a-z0-9_-]{4,}/g) ?? []).filter((t) => !stop.has(t));
106
+ if (tokens.length === 0) return void 0;
107
+ return tokens.sort((a, b) => b.length - a.length)[0];
108
+ }
109
+ function classifyRecord(record, matches, keywordHit = false) {
110
+ const idShort = record.id.slice(0, 8);
111
+ const releaseReachable = matches.filter((m) => m.releaseReachable);
112
+ if (releaseReachable.length > 0) {
113
+ const ev = releaseReachable.map((m) => `${m.repo}@${m.commit}${m.tag ? ` (tag ${m.tag})` : " (default branch)"}`).join(", ");
114
+ return {
115
+ record,
116
+ verdict: "SHIPPED",
117
+ evidence: releaseReachable,
118
+ rawMatches: matches,
119
+ reason: `id ${idShort} found in ${releaseReachable.length} release-reachable commit(s): ${ev}`
120
+ };
121
+ }
122
+ if (matches.length > 0) {
123
+ const where = matches.map((m) => `${m.repo}@${m.commit}`).join(", ");
124
+ return {
125
+ record,
126
+ verdict: "UNKNOWN",
127
+ evidence: [],
128
+ rawMatches: matches,
129
+ reason: `id ${idShort} found only on unmerged branch(es) \u2014 not reachable from a release tag or the default branch; refusing to auto-close (${where})`
130
+ };
131
+ }
132
+ if (keywordHit) {
133
+ return {
134
+ record,
135
+ verdict: "UNKNOWN",
136
+ evidence: [],
137
+ rawMatches: [],
138
+ reason: `no commit references id ${idShort}, but a title keyword appears in code \u2014 manual verification required (keyword-only signal never auto-closes)`
139
+ };
140
+ }
141
+ return {
142
+ record,
143
+ verdict: "STILL_OPEN",
144
+ evidence: [],
145
+ rawMatches: [],
146
+ reason: `no commit references id ${idShort}`
147
+ };
148
+ }
149
+ function pickShippedVersion(evidence, fallback) {
150
+ const tag = evidence.map((m) => m.tag).find((t) => Boolean(t));
151
+ if (tag) return tag.replace(/^v/, "");
152
+ return fallback;
153
+ }
154
+ function buildEvidenceText(evidence) {
155
+ return "Auto-reconciled: already shipped in code. Evidence: " + evidence.map((m) => `${m.repo}@${m.commit}${m.tag ? ` (release ${m.tag})` : " (default branch)"} \u2014 ${m.subject}`).join("; ");
156
+ }
157
+ async function reconcile(opts, deps) {
158
+ const all = await deps.fetchOpenRecords();
159
+ const records = typeof opts.limit === "number" && opts.limit >= 0 ? all.slice(0, opts.limit) : all;
160
+ const results = [];
161
+ let closed = 0;
162
+ let closeFailed = 0;
163
+ for (const record of records) {
164
+ const { matches, keywordHit } = await deps.matchRecord(record);
165
+ const cls = classifyRecord(record, matches, keywordHit);
166
+ let applied = null;
167
+ if (opts.apply && cls.verdict === "SHIPPED" && cls.evidence.length > 0) {
168
+ const version = pickShippedVersion(cls.evidence, opts.shippedVersion);
169
+ const evidenceText = buildEvidenceText(cls.evidence);
170
+ const r = await deps.applyShipped(record, cls.evidence, version, evidenceText);
171
+ applied = { ...r, version };
172
+ if (r.ok) closed++;
173
+ else closeFailed++;
174
+ }
175
+ results.push({ ...cls, applied });
176
+ }
177
+ const summary = {
178
+ total: results.length,
179
+ shipped: results.filter((r) => r.verdict === "SHIPPED").length,
180
+ stillOpen: results.filter((r) => r.verdict === "STILL_OPEN").length,
181
+ unknown: results.filter((r) => r.verdict === "UNKNOWN").length
182
+ };
183
+ return { apply: opts.apply, results, summary, closed, closeFailed };
184
+ }
185
+
186
+ // src/bin/reconcile-backlog.ts
187
+ var STACK_REPOS = [
188
+ "exe-os",
189
+ "exe-crm",
190
+ "exe-wiki",
191
+ "exe-gateway",
192
+ "exe-monitor",
193
+ "exe-chat",
194
+ "exe-erp",
195
+ "exe-build",
196
+ "exe-auth",
197
+ "exe-db",
198
+ "exe-create"
199
+ ];
200
+ var REPO_ALIASES = {
201
+ "exe-crm": ["exe-crm", "openclaw"],
202
+ "exe-wiki": ["exe-wiki", "ink"]
203
+ };
204
+ function exeOsRoot() {
205
+ let dir = path.dirname(fileURLToPath(import.meta.url));
206
+ for (let i = 0; i < 8; i++) {
207
+ if (existsSync(path.join(dir, "package.json"))) {
208
+ try {
209
+ const pkg = JSON.parse(readFileSync(path.join(dir, "package.json"), "utf8"));
210
+ if (pkg.name?.includes("exe-os")) return dir;
211
+ } catch {
212
+ }
213
+ }
214
+ const parent = path.dirname(dir);
215
+ if (parent === dir) break;
216
+ dir = parent;
217
+ }
218
+ return path.join(homedir(), "exe-os");
219
+ }
220
+ function isGitRepo(dir) {
221
+ return existsSync(path.join(dir, ".git"));
222
+ }
223
+ function resolveStackRepos(filter) {
224
+ const root = exeOsRoot();
225
+ const bases = Array.from(/* @__PURE__ */ new Set([path.dirname(root), homedir()]));
226
+ const wanted = filter && filter.length > 0 ? filter : STACK_REPOS;
227
+ const out = [];
228
+ const seen = /* @__PURE__ */ new Set();
229
+ for (const name of wanted) {
230
+ const candidates = REPO_ALIASES[name] ?? [name];
231
+ for (const base of bases) {
232
+ let found;
233
+ for (const cand of candidates) {
234
+ const p = path.join(base, cand);
235
+ if (existsSync(p) && isGitRepo(p)) {
236
+ found = p;
237
+ break;
238
+ }
239
+ }
240
+ if (found && !seen.has(name)) {
241
+ seen.add(name);
242
+ out.push({ name, path: found });
243
+ break;
244
+ }
245
+ }
246
+ }
247
+ return out;
248
+ }
249
+ async function buildSupportHandlers() {
250
+ const tools = /* @__PURE__ */ new Map();
251
+ const fake = {
252
+ registerTool(name, _config, handler) {
253
+ tools.set(name, handler);
254
+ }
255
+ };
256
+ const { registerListFeatureRequests, registerListBugReports } = await import("../support-inbox-Z77ACQUY.js");
257
+ const { registerUpdateFeatureRequest, registerUpdateBugReport } = await import("../update-support-VPBD5SD2.js");
258
+ registerListFeatureRequests(fake);
259
+ registerListBugReports(fake);
260
+ registerUpdateFeatureRequest(fake);
261
+ registerUpdateBugReport(fake);
262
+ return tools;
263
+ }
264
+ function textOf(result) {
265
+ const r = result;
266
+ return r?.content?.[0]?.text ?? "";
267
+ }
268
+ function extractRecords(text, kind) {
269
+ let data;
270
+ try {
271
+ data = JSON.parse(text);
272
+ } catch {
273
+ return [];
274
+ }
275
+ const obj = data ?? {};
276
+ const arr = Array.isArray(data) ? data : obj.items ?? obj.feature_requests ?? obj.bug_reports ?? obj.results ?? obj.data ?? [];
277
+ if (!Array.isArray(arr)) return [];
278
+ return arr.filter((x) => Boolean(x) && typeof x === "object" && "id" in x).map((x) => ({
279
+ id: String(x.id),
280
+ kind,
281
+ title: String(x.title ?? x.summary ?? x.id),
282
+ status: x.status ? String(x.status) : void 0
283
+ }));
284
+ }
285
+ function readPackageVersion() {
286
+ let dir = path.dirname(fileURLToPath(import.meta.url));
287
+ for (let i = 0; i < 8; i++) {
288
+ try {
289
+ const parsed = JSON.parse(readFileSync(path.join(dir, "package.json"), "utf8"));
290
+ if (parsed.version) return parsed.version;
291
+ } catch {
292
+ }
293
+ const parent = path.dirname(dir);
294
+ if (parent === dir) break;
295
+ dir = parent;
296
+ }
297
+ return "unknown";
298
+ }
299
+ function parseArgs(argv) {
300
+ const flags = { apply: false, json: false, help: false, repos: [] };
301
+ for (let i = 0; i < argv.length; i++) {
302
+ const a = argv[i];
303
+ if (a === "--apply") flags.apply = true;
304
+ else if (a === "--dry-run") flags.apply = false;
305
+ else if (a === "--json") flags.json = true;
306
+ else if (a === "--help" || a === "-h") flags.help = true;
307
+ else if (a === "--limit") {
308
+ const n = parseInt(argv[++i] ?? "", 10);
309
+ if (!Number.isNaN(n)) flags.limit = n;
310
+ } else if (a?.startsWith("--limit=")) {
311
+ const n = parseInt(a.slice(8), 10);
312
+ if (!Number.isNaN(n)) flags.limit = n;
313
+ } else if (a === "--repo") {
314
+ const v = argv[++i];
315
+ if (v) flags.repos.push(...v.split(",").map((s) => s.trim()).filter(Boolean));
316
+ } else if (a?.startsWith("--repo=")) {
317
+ flags.repos.push(...a.slice(7).split(",").map((s) => s.trim()).filter(Boolean));
318
+ }
319
+ }
320
+ return flags;
321
+ }
322
+ var ICON = { SHIPPED: "\u{1F7E2}", STILL_OPEN: "\u{1F535}", UNKNOWN: "\u{1F7E0}" };
323
+ function renderRow(row) {
324
+ const icon = ICON[row.verdict] ?? "\u2754";
325
+ const head = `${icon} ${row.verdict.padEnd(10)} ${row.record.kind.padEnd(7)} ${row.record.id.slice(0, 8)} \u2014 ${row.record.title}`;
326
+ const lines = [head, ` ${row.reason}`];
327
+ if (row.applied) {
328
+ lines.push(` ${row.applied.ok ? "\u2705 closed" : "\u274C close failed"} (v${row.applied.version}): ${row.applied.detail.split("\n")[0]}`);
329
+ }
330
+ return lines.join("\n");
331
+ }
332
+ function renderReport(report) {
333
+ const lines = ["", "exe-os reconcile-backlog", ""];
334
+ lines.push(report.apply ? "Mode: APPLY \u2014 SHIPPED records with concrete commit evidence will be closed." : "Mode: report-only (dry-run) \u2014 nothing will be closed. Use --apply to close SHIPPED records.");
335
+ lines.push("");
336
+ for (const row of report.results) lines.push(renderRow(row), "");
337
+ const s = report.summary;
338
+ lines.push(`Summary: ${s.total} open record(s) \u2014 \u{1F7E2} ${s.shipped} shipped, \u{1F7E0} ${s.unknown} unknown, \u{1F535} ${s.stillOpen} still-open`);
339
+ if (report.apply) lines.push(`Closed: ${report.closed} Close-failed: ${report.closeFailed}`);
340
+ else if (s.shipped > 0) lines.push(`Re-run with --apply to close the ${s.shipped} shipped record(s).`);
341
+ lines.push("");
342
+ return lines.join("\n");
343
+ }
344
+ function printHelp() {
345
+ console.log(`
346
+ exe-os reconcile-backlog \u2014 detect support records already shipped in code
347
+
348
+ Usage:
349
+ exe-os reconcile-backlog [--apply] [--dry-run] [--limit <n>] [--repo <name>] [--json]
350
+
351
+ Modes:
352
+ (default) Report-only. Classifies each OPEN feature/bug and closes nothing.
353
+ --apply Close SHIPPED records that have concrete, release-reachable commit
354
+ evidence, via the existing shipped transition. Never closes
355
+ UNKNOWN / STILL_OPEN / keyword-only matches.
356
+
357
+ Options:
358
+ --dry-run Explicit report-only (the default).
359
+ --limit <n> Process at most n records.
360
+ --repo <name> Restrict the git scan to one or more stack repos (comma-separated
361
+ or repeat the flag). Default: all locally-present stack repos.
362
+ --json Machine-readable output.
363
+ -h, --help Show this help.
364
+
365
+ Verdicts:
366
+ \u{1F7E2} SHIPPED id in a commit reachable from a release tag or the default branch
367
+ \u{1F7E0} UNKNOWN id only on an unmerged branch (guard: never closed), or a title
368
+ keyword hit (manual review; never closed)
369
+ \u{1F535} STILL_OPEN no evidence found
370
+
371
+ Requires an AskExe support admin token (ASKEXE_SUPPORT_ADMIN_TOKEN) to list the inbox.
372
+ `);
373
+ }
374
+ function buildDeps(handlers, repos, runGit) {
375
+ const listFeatures = handlers.get("list_feature_requests");
376
+ const listBugs = handlers.get("list_bug_reports");
377
+ const updateFeature = handlers.get("update_feature_request");
378
+ const updateBug = handlers.get("update_bug_report");
379
+ return {
380
+ async fetchOpenRecords() {
381
+ const records = [];
382
+ if (listFeatures) {
383
+ const out = await listFeatures({ status: "open", limit: 100 }, {});
384
+ records.push(...extractRecords(textOf(out), "feature"));
385
+ }
386
+ if (listBugs) {
387
+ const out = await listBugs({ status: "open", limit: 100 }, {});
388
+ records.push(...extractRecords(textOf(out), "bug"));
389
+ }
390
+ return records;
391
+ },
392
+ async matchRecord(record) {
393
+ const matches = [];
394
+ for (const repo of repos) {
395
+ matches.push(...findIdMatches(runGit, repo.path, repo.name, record.id));
396
+ }
397
+ let keywordHit = false;
398
+ if (matches.length === 0) {
399
+ const token = pickKeyword(record.title);
400
+ if (token) keywordHit = repos.some((r) => gitGrepHit(runGit, r.path, token));
401
+ }
402
+ return { matches, keywordHit };
403
+ },
404
+ async applyShipped(record, _evidence, version, evidenceText) {
405
+ const handler = record.kind === "feature" ? updateFeature : updateBug;
406
+ if (!handler) return { ok: false, detail: "update handler unavailable" };
407
+ const args = record.kind === "feature" ? { id: record.id, status: "shipped", shipped_version: version, notes: evidenceText, send_upstream: true } : { id: record.id, status: "closed", fix_version: version, notes: evidenceText, send_upstream: true };
408
+ try {
409
+ const out = await handler(args, {});
410
+ const r = out;
411
+ return { ok: !r?.isError, detail: textOf(out) || "updated" };
412
+ } catch (err) {
413
+ return { ok: false, detail: err instanceof Error ? err.message : String(err) };
414
+ }
415
+ }
416
+ };
417
+ }
418
+ async function main(argv = process.argv.slice(2)) {
419
+ const flags = parseArgs(argv);
420
+ if (flags.help) {
421
+ printHelp();
422
+ return 0;
423
+ }
424
+ const repos = resolveStackRepos(flags.repos);
425
+ if (repos.length === 0) {
426
+ console.error("reconcile-backlog: no stack repos found locally to scan. Expected siblings like ~/exe-os, ~/exe-crm.");
427
+ return 1;
428
+ }
429
+ let handlers;
430
+ try {
431
+ handlers = await buildSupportHandlers();
432
+ } catch (err) {
433
+ console.error(`reconcile-backlog: failed to load support tools: ${err instanceof Error ? err.message : String(err)}`);
434
+ return 1;
435
+ }
436
+ const deps = buildDeps(handlers, repos, defaultGitRunner);
437
+ let report;
438
+ try {
439
+ report = await reconcile(
440
+ { apply: flags.apply, limit: flags.limit, shippedVersion: readPackageVersion() },
441
+ deps
442
+ );
443
+ } catch (err) {
444
+ const msg = err instanceof Error ? err.message : String(err);
445
+ if (/admin token/i.test(msg)) {
446
+ console.error(
447
+ "reconcile-backlog: AskExe support admin token not configured. This tool is AskExe-internal \u2014 set ASKEXE_SUPPORT_ADMIN_TOKEN (or config.support.adminToken) to list the inbox."
448
+ );
449
+ return 1;
450
+ }
451
+ console.error(`reconcile-backlog: ${msg}`);
452
+ return 1;
453
+ }
454
+ if (flags.json) {
455
+ console.log(JSON.stringify(report, null, 2));
456
+ } else {
457
+ console.log(renderReport(report));
458
+ if (repos.length > 0 && !flags.json) {
459
+ console.error(`Scanned repos: ${repos.map((r) => r.name).join(", ")}`);
460
+ }
461
+ }
462
+ return report.apply && report.closeFailed > 0 ? 1 : 0;
463
+ }
464
+ var isDirectRun = (() => {
465
+ try {
466
+ return process.argv[1] === fileURLToPath(import.meta.url);
467
+ } catch {
468
+ return false;
469
+ }
470
+ })();
471
+ if (isDirectRun && !process.env.VITEST) {
472
+ main().then((code) => {
473
+ process.exitCode = code;
474
+ }).catch((err) => {
475
+ console.error(err instanceof Error ? err.stack ?? err.message : String(err));
476
+ process.exitCode = 1;
477
+ });
478
+ }
479
+ export {
480
+ extractRecords,
481
+ main,
482
+ parseArgs,
483
+ resolveStackRepos
484
+ };
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  registryProxyOptionsFromEnv,
4
4
  runRegistryProxy
5
- } from "../chunk-ZIVEA3NB.js";
5
+ } from "../chunk-BR4423AS.js";
6
6
  import {
7
7
  isMainModule
8
8
  } from "../chunk-6Y4B3QF6.js";
@@ -1,43 +1,43 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  queryTaskRows
4
- } from "../chunk-PLRIJALF.js";
5
- import "../chunk-OFX5B2S7.js";
6
- import "../chunk-B76TSEP3.js";
7
- import "../chunk-RLRT2BVM.js";
4
+ } from "../chunk-KKOLHBNC.js";
5
+ import "../chunk-ATKW3SYL.js";
6
+ import "../chunk-BJOBR6P2.js";
7
+ import "../chunk-6D2PI4QD.js";
8
+ import "../chunk-E23LNUWJ.js";
8
9
  import "../chunk-4JERP7NT.js";
9
10
  import "../chunk-EIKATSE4.js";
10
- import "../chunk-E23LNUWJ.js";
11
- import "../chunk-UIV2WPBT.js";
12
- import "../chunk-SSTLTIF3.js";
11
+ import "../chunk-HNLXMD2V.js";
13
12
  import "../chunk-RMOBQ6A5.js";
14
13
  import "../chunk-54QCG45Y.js";
15
- import "../chunk-FUIIVSW6.js";
16
- import "../chunk-65SVQELL.js";
14
+ import "../chunk-SSTLTIF3.js";
15
+ import "../chunk-WH7XN5ER.js";
16
+ import "../chunk-GFDGDFBF.js";
17
17
  import "../chunk-NGP6LSV2.js";
18
- import "../chunk-MW2GJJ53.js";
18
+ import "../chunk-2UGGBIDL.js";
19
19
  import {
20
20
  getSessionRuntime
21
21
  } from "../chunk-CVYC6DUW.js";
22
- import "../chunk-2233TQCA.js";
22
+ import "../chunk-LLU6WZLK.js";
23
23
  import "../chunk-HCJCW7X4.js";
24
24
  import "../chunk-OPU3NYOO.js";
25
- import "../chunk-7TS64TBG.js";
25
+ import "../chunk-UU4UINUX.js";
26
26
  import "../chunk-AFNRE2RV.js";
27
27
  import "../chunk-3NGZ4PL7.js";
28
28
  import "../chunk-NLEW62VC.js";
29
29
  import "../chunk-HYZV25LY.js";
30
30
  import "../chunk-GJV3WDWM.js";
31
31
  import "../chunk-MP2AFCGL.js";
32
- import "../chunk-HEPR6QTL.js";
32
+ import "../chunk-RWSLVYTE.js";
33
33
  import "../chunk-2I23RPSI.js";
34
- import "../chunk-ATOU6CYR.js";
34
+ import "../chunk-BV6GBSRP.js";
35
35
  import "../chunk-PNQDP3OA.js";
36
36
  import "../chunk-H73TUI4Y.js";
37
37
  import "../chunk-7HLWBYH7.js";
38
38
  import "../chunk-FXU7JOXK.js";
39
- import "../chunk-XACL67CS.js";
40
- import "../chunk-5Z5NATNS.js";
39
+ import "../chunk-7SEC2AG5.js";
40
+ import "../chunk-PPZOWQHP.js";
41
41
  import "../chunk-7Y5UDEVM.js";
42
42
  import "../chunk-SHIICYJW.js";
43
43
  import {
@@ -86,7 +86,7 @@ function checkMcpHealth() {
86
86
  }
87
87
  }
88
88
  async function scanFromDb(agentId, tmuxSession, projectName) {
89
- const { fastDbInit } = await import("../fast-db-init-QQB6IVWV.js");
89
+ const { fastDbInit } = await import("../fast-db-init-JKJEEHUI.js");
90
90
  try {
91
91
  await fastDbInit();
92
92
  } catch (err) {
package/dist/bin/setup.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runSetupWizard
4
- } from "../chunk-Z7OZP3ET.js";
4
+ } from "../chunk-HSYJ6DZ2.js";
5
5
  import "../chunk-TPHCZDE3.js";
6
6
  import "../chunk-Z42MXYWW.js";
7
7
  import "../chunk-7Y5UDEVM.js";
@@ -8,17 +8,17 @@ import {
8
8
  import {
9
9
  disposeStore,
10
10
  initStore
11
- } from "../chunk-H37HHX3E.js";
11
+ } from "../chunk-EDH54E5A.js";
12
12
  import "../chunk-CHCA3ZM2.js";
13
13
  import "../chunk-OTVEIJUQ.js";
14
- import "../chunk-HHIBOU3P.js";
15
- import "../chunk-Y25OJWOQ.js";
14
+ import "../chunk-7LF5DS3A.js";
15
+ import "../chunk-RP5GETX5.js";
16
16
  import "../chunk-MP2AFCGL.js";
17
17
  import {
18
18
  getClient
19
- } from "../chunk-HEPR6QTL.js";
19
+ } from "../chunk-RWSLVYTE.js";
20
20
  import "../chunk-2I23RPSI.js";
21
- import "../chunk-ATOU6CYR.js";
21
+ import "../chunk-BV6GBSRP.js";
22
22
  import "../chunk-PNQDP3OA.js";
23
23
  import "../chunk-H73TUI4Y.js";
24
24
  import "../chunk-7HLWBYH7.js";