@askexenow/exe-os 0.9.340 → 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-DRRQCMKA.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-ZREGOV2Q.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-F55JF43M.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-G7WO77Z2.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-TALWBVZE.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-7WPOJDTA.js → chunk-YWQMWFYR.js} +7 -7
  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-M6TYHNUW.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-QATGTAPC.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-TOFEJPLF.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 +24 -46
  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-DRCRZIIJ.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,24 @@
1
- import {
2
- runDriftProbes
3
- } from "./chunk-XJI7Z6LZ.js";
4
1
  import {
5
2
  exportOrchestration,
6
3
  importOrchestration,
7
4
  validatePackage
8
- } from "./chunk-QZLIZAS7.js";
5
+ } from "./chunk-DPFQ2WQX.js";
9
6
  import {
10
- StewardGate
11
- } from "./chunk-AOO77BDE.js";
7
+ runDriftProbes
8
+ } from "./chunk-T2PYVVZ5.js";
9
+ import {
10
+ registerAddBugReportComment,
11
+ registerGetBugReport,
12
+ registerGetBugReportComments,
13
+ registerGetFeatureRequest,
14
+ registerGetReview,
15
+ registerListBugReports,
16
+ registerListFeatureRequests,
17
+ registerListReviews,
18
+ registerTriageBugReport,
19
+ registerTriageFeatureRequest,
20
+ registerTriageReview
21
+ } from "./chunk-6QW6JHRE.js";
12
22
  import {
13
23
  DEFAULT_LIST_LIMIT,
14
24
  MAX_IMPORTANCE,
@@ -17,11 +27,26 @@ import {
17
27
  ingestDocument,
18
28
  listDocumentsByWorkspace,
19
29
  updateChunksImportance
20
- } from "./chunk-6M36JFFD.js";
30
+ } from "./chunk-LOBCQXV5.js";
31
+ import {
32
+ analyzeBlastRadius,
33
+ buildCodeContextIndex,
34
+ buildCodeContextIndexWithEmbeddings,
35
+ getCodeContextStats,
36
+ searchCodeContext,
37
+ searchCodeContextSemantic,
38
+ traceCodeSymbol
39
+ } from "./chunk-U2MREVXQ.js";
40
+ import {
41
+ StewardGate
42
+ } from "./chunk-YHUNDGVV.js";
43
+ import {
44
+ DreamingEngine
45
+ } from "./chunk-L2YGXJGF.js";
21
46
  import {
22
47
  isRerankerAvailable,
23
48
  rerankWithScores
24
- } from "./chunk-DRCRZIIJ.js";
49
+ } from "./chunk-WNKVKNOM.js";
25
50
  import {
26
51
  getEntityByName,
27
52
  getEntityNeighbors,
@@ -31,39 +56,27 @@ import {
31
56
  searchEntities
32
57
  } from "./chunk-CRCB5S7I.js";
33
58
  import {
34
- analyzeBlastRadius,
35
- buildCodeContextIndex,
36
- buildCodeContextIndexWithEmbeddings,
37
- getCodeContextStats,
38
- searchCodeContext,
39
- searchCodeContextSemantic,
40
- traceCodeSymbol
41
- } from "./chunk-W7DHFGCB.js";
59
+ listRecentSessionEvents
60
+ } from "./chunk-YLQXP7T7.js";
42
61
  import {
43
62
  DEFAULT_EXPLORE_DURATION_MS,
44
63
  getPlayMode,
45
64
  listExploreSessions,
46
65
  setPlayMode
47
66
  } from "./chunk-PVYR4FCQ.js";
48
- import {
49
- DreamingEngine
50
- } from "./chunk-VJHUVFIW.js";
51
67
  import {
52
68
  AUTO_WAKE_MAX_RETRIES
53
- } from "./chunk-XCTGRD4S.js";
54
- import {
55
- listRecentSessionEvents
56
- } from "./chunk-QFPTDSY2.js";
69
+ } from "./chunk-BMHQPIJ2.js";
57
70
  import {
58
71
  getCachedLicenseGate,
59
72
  refreshLicenseGate
60
- } from "./chunk-DADMPMYX.js";
73
+ } from "./chunk-NDSNM5OH.js";
61
74
  import {
62
75
  getToolUsageStats
63
- } from "./chunk-NQBRGXYR.js";
76
+ } from "./chunk-MC6VPZKS.js";
64
77
  import {
65
78
  getToolCapabilityIndex
66
- } from "./chunk-WHRTDN5J.js";
79
+ } from "./chunk-3NCZKWPO.js";
67
80
  import {
68
81
  isToolAllowed,
69
82
  isToolAllowedForPlan
@@ -74,55 +87,55 @@ import {
74
87
  } from "./chunk-32SXNM3G.js";
75
88
  import {
76
89
  createOrRefreshResumeTask
77
- } from "./chunk-LMZISHSJ.js";
90
+ } from "./chunk-MC4ATFJV.js";
91
+ import {
92
+ registerCreateTask
93
+ } from "./chunk-GOGSWXNZ.js";
78
94
  import {
79
95
  registerListTasks
80
- } from "./chunk-MQRFKSLI.js";
96
+ } from "./chunk-CYA5S5OD.js";
81
97
  import {
82
98
  registerUpdateTask
83
- } from "./chunk-LTVCRHHD.js";
99
+ } from "./chunk-HUSVERE6.js";
84
100
  import {
85
101
  registerCreateReminder
86
- } from "./chunk-6IRVGOUL.js";
102
+ } from "./chunk-CCPHEPLU.js";
87
103
  import {
88
104
  registerListReminders
89
- } from "./chunk-BU2QQWBQ.js";
105
+ } from "./chunk-2YCFNBC4.js";
90
106
  import {
91
107
  registerCompleteReminder
92
- } from "./chunk-PAEXYFMY.js";
108
+ } from "./chunk-N7A5D25S.js";
93
109
  import {
94
110
  registerDeactivateBehavior
95
- } from "./chunk-2SG2UGCH.js";
111
+ } from "./chunk-ZNE6H2JO.js";
96
112
  import {
97
113
  completeReminder,
98
114
  createReminder,
99
115
  listReminders
100
- } from "./chunk-KMBEL7VB.js";
116
+ } from "./chunk-PVIH3ZGV.js";
101
117
  import {
102
118
  registerImportConversations
103
- } from "./chunk-WYLV4S6A.js";
119
+ } from "./chunk-TIXTHUVJ.js";
104
120
  import {
105
121
  registerSendMessage
106
- } from "./chunk-Q7L6G6KV.js";
107
- import {
108
- registerCreateTask
109
- } from "./chunk-DILD54TU.js";
122
+ } from "./chunk-WWNQFOSP.js";
110
123
  import {
111
124
  TOKENS_PER_IDLE_MINUTE,
112
125
  countKillsSince,
113
126
  sumTokensSavedSince
114
- } from "./chunk-T4KZ2Z2N.js";
127
+ } from "./chunk-IELUDZAA.js";
115
128
  import {
116
129
  createSchedule,
117
130
  parseHumanCron
118
- } from "./chunk-GN45PBWI.js";
131
+ } from "./chunk-J6SEDDOR.js";
119
132
  import {
120
133
  status
121
- } from "./chunk-OJTJYEMX.js";
134
+ } from "./chunk-KP4PY2Z2.js";
122
135
  import {
123
136
  evaluateGlobalSpendCap,
124
137
  getAgentSpend
125
- } from "./chunk-BPC5LZ6Y.js";
138
+ } from "./chunk-2WMTTIAZ.js";
126
139
  import {
127
140
  exportGraphHTML,
128
141
  generateGraphReport
@@ -135,14 +148,14 @@ import {
135
148
  formatReport,
136
149
  runAudit,
137
150
  shouldFixShards
138
- } from "./chunk-KCC5A7YL.js";
151
+ } from "./chunk-IXBIVKWZ.js";
139
152
  import {
140
153
  formatDegradations,
141
154
  getRetrievalHealth
142
- } from "./chunk-IYB2NIW3.js";
155
+ } from "./chunk-6MVI4QH2.js";
143
156
  import {
144
157
  runHealthCheck
145
- } from "./chunk-EIF2LQHZ.js";
158
+ } from "./chunk-MJB5ZFQM.js";
146
159
  import {
147
160
  checkCpuStealSync
148
161
  } from "./chunk-SSC7EKY2.js";
@@ -150,7 +163,7 @@ import {
150
163
  hasFailures,
151
164
  runHealth,
152
165
  runTest
153
- } from "./chunk-6HBURYON.js";
166
+ } from "./chunk-UIU2DGRV.js";
154
167
  import {
155
168
  isSupportReportSentStatus,
156
169
  markSupportReportSent
@@ -161,12 +174,12 @@ import {
161
174
  } from "./chunk-2XZ6X3PJ.js";
162
175
  import {
163
176
  renderClientCOOTemplate
164
- } from "./chunk-UXBD22CD.js";
177
+ } from "./chunk-K6KRBXQP.js";
165
178
  import {
166
179
  deactivateGlobalProcedure,
167
180
  loadGlobalProcedures,
168
181
  storeGlobalProcedure
169
- } from "./chunk-I3XKO3KQ.js";
182
+ } from "./chunk-6BQG7EKO.js";
170
183
  import {
171
184
  PLATFORM_PROCEDURES
172
185
  } from "./chunk-A47MXY2I.js";
@@ -175,14 +188,14 @@ import {
175
188
  cloudSync,
176
189
  getCloudReuploadRequired,
177
190
  markCloudReuploadRequired
178
- } from "./chunk-7WPOJDTA.js";
191
+ } from "./chunk-YWQMWFYR.js";
179
192
  import {
180
193
  createARecord
181
194
  } from "./chunk-X2Z5GT3V.js";
182
195
  import {
183
196
  findSimilarTrajectories,
184
197
  hashSignature
185
- } from "./chunk-UPWE5NOG.js";
198
+ } from "./chunk-GPW32HVB.js";
186
199
  import {
187
200
  GHOST_BEHAVIOR_SQL,
188
201
  deactivateBehavior,
@@ -191,20 +204,20 @@ import {
191
204
  reactivateBehavior,
192
205
  storeBehavior,
193
206
  storeReflexBehavior
194
- } from "./chunk-TLYAEISW.js";
207
+ } from "./chunk-OUEFW4RK.js";
195
208
  import {
196
209
  countUnconsolidated,
197
210
  groupMemories,
198
211
  runConsolidation,
199
212
  selectUnconsolidated
200
- } from "./chunk-R44Z32O2.js";
213
+ } from "./chunk-WD55PEBM.js";
201
214
  import {
202
215
  entityId,
203
216
  mergeEntities
204
- } from "./chunk-A4DVMPYB.js";
217
+ } from "./chunk-7UMCQQWS.js";
205
218
  import {
206
219
  embed
207
- } from "./chunk-3QDSCJ3F.js";
220
+ } from "./chunk-AP455LBW.js";
208
221
  import {
209
222
  detectDcrIncompatibleConnectorsFromDisk,
210
223
  detectExternalMcpFailures,
@@ -214,17 +227,17 @@ import {
214
227
  } from "./chunk-5RACW3LX.js";
215
228
  import {
216
229
  updateTask
217
- } from "./chunk-542EWGY3.js";
230
+ } from "./chunk-XSMRR4IW.js";
218
231
  import {
219
232
  fastDbInit
220
- } from "./chunk-UFAXZ2PY.js";
233
+ } from "./chunk-7YORGTXC.js";
221
234
  import {
222
235
  MAX_CONCURRENT_WORKERS
223
- } from "./chunk-N5I7RL3I.js";
236
+ } from "./chunk-2IWBY7XK.js";
224
237
  import {
225
238
  hybridSearch,
226
239
  recentRecords
227
- } from "./chunk-ZREGOV2Q.js";
240
+ } from "./chunk-FOV57K47.js";
228
241
  import {
229
242
  buildFtsMatch,
230
243
  tokenizeForFts
@@ -234,10 +247,16 @@ import {
234
247
  flushBatch,
235
248
  initStore,
236
249
  writeMemory
237
- } from "./chunk-H37HHX3E.js";
250
+ } from "./chunk-EDH54E5A.js";
238
251
  import {
239
252
  getActiveAgent
240
- } from "./chunk-DZ6OQM67.js";
253
+ } from "./chunk-C445WRUX.js";
254
+ import {
255
+ UPSTREAM_ATTACHMENT_MAX_CHARS,
256
+ isTelemetryRedactionEnabled,
257
+ sanitizeUpstreamPayload,
258
+ sanitizedUpstreamBody
259
+ } from "./chunk-RP5GETX5.js";
241
260
  import {
242
261
  getMySession,
243
262
  resolveExeSession,
@@ -246,13 +265,13 @@ import {
246
265
  sessionScopeFilter,
247
266
  updateTaskStatus,
248
267
  writeCheckpoint
249
- } from "./chunk-PLRIJALF.js";
268
+ } from "./chunk-KKOLHBNC.js";
250
269
  import {
251
270
  listSessions
252
- } from "./chunk-UIV2WPBT.js";
271
+ } from "./chunk-HNLXMD2V.js";
253
272
  import {
254
273
  recordOrchestrationEventBestEffort
255
- } from "./chunk-FUIIVSW6.js";
274
+ } from "./chunk-WH7XN5ER.js";
256
275
  import {
257
276
  DEFAULT_MODELS,
258
277
  KNOWN_RUNTIMES,
@@ -260,7 +279,7 @@ import {
260
279
  getAgentRuntime,
261
280
  loadAgentConfig,
262
281
  setAgentRuntime
263
- } from "./chunk-65SVQELL.js";
282
+ } from "./chunk-GFDGDFBF.js";
264
283
  import {
265
284
  DEFAULT_RUNTIME
266
285
  } from "./chunk-NGP6LSV2.js";
@@ -269,7 +288,7 @@ import {
269
288
  assertEmployeeLimit,
270
289
  assertFeature,
271
290
  assertMemoryLimit
272
- } from "./chunk-MW2GJJ53.js";
291
+ } from "./chunk-2UGGBIDL.js";
273
292
  import {
274
293
  getProjectName
275
294
  } from "./chunk-OPU3NYOO.js";
@@ -288,7 +307,7 @@ import {
288
307
  isScheduledTrigger,
289
308
  loadTriggers,
290
309
  sanitizeParam
291
- } from "./chunk-KTPG4XKI.js";
310
+ } from "./chunk-IB336P52.js";
292
311
  import {
293
312
  pushConversationToCRM
294
313
  } from "./chunk-ML4S5SHZ.js";
@@ -309,7 +328,7 @@ import {
309
328
  loadEmployeesSync,
310
329
  saveEmployees,
311
330
  updateIdentity
312
- } from "./chunk-HEPR6QTL.js";
331
+ } from "./chunk-RWSLVYTE.js";
313
332
  import {
314
333
  getEventLoopLagMs,
315
334
  isDaemonAlive,
@@ -331,16 +350,16 @@ import {
331
350
  refreshLicense,
332
351
  saveLicense,
333
352
  validateLicense
334
- } from "./chunk-XACL67CS.js";
353
+ } from "./chunk-7SEC2AG5.js";
335
354
  import {
336
355
  EXE_AI_DIR,
337
356
  loadConfig
338
357
  } from "./chunk-7Y5UDEVM.js";
339
358
 
340
359
  // src/mcp/register-tools.ts
341
- import { readFileSync as readFileSync8 } from "fs";
342
- import { join as join5 } from "path";
343
- import { homedir as homedir5 } from "os";
360
+ import { readFileSync as readFileSync7 } from "fs";
361
+ import { join as join4 } from "path";
362
+ import { homedir as homedir4 } from "os";
344
363
 
345
364
  // src/mcp/tools/memory.ts
346
365
  import { z as z12 } from "zod";
@@ -515,7 +534,7 @@ function registerRecallMyMemory(server) {
515
534
  }) => {
516
535
  try {
517
536
  if (!isInitialized()) {
518
- const { fastDbInit: fastDbInit2 } = await import("./fast-db-init-QQB6IVWV.js");
537
+ const { fastDbInit: fastDbInit2 } = await import("./fast-db-init-JKJEEHUI.js");
519
538
  await fastDbInit2();
520
539
  }
521
540
  if (!recent && !query) {
@@ -562,7 +581,7 @@ function registerRecallMyMemory(server) {
562
581
  let federatedCount = 0;
563
582
  if (!recent && query && results.length < FEDERATION_THRESHOLD) {
564
583
  try {
565
- const { searchCodeContextSemantic: searchCodeContextSemantic2 } = await import("./code-context-index-EXXDY3QZ.js");
584
+ const { searchCodeContextSemantic: searchCodeContextSemantic2 } = await import("./code-context-index-BNBHDXHW.js");
566
585
  const codeResults = await Promise.race([
567
586
  searchCodeContextSemantic2(query, { limit: 5 }),
568
587
  new Promise((_, rej) => setTimeout(() => rej(new Error("timeout")), 2e3))
@@ -800,7 +819,7 @@ function registerStoreMemory(server) {
800
819
  }
801
820
  const { agentId, agentRole } = getActiveAgent();
802
821
  if (kind === "prospective") {
803
- const { createProspectiveMemory } = await import("./prospective-memory-W6S67LZZ.js");
822
+ const { createProspectiveMemory } = await import("./prospective-memory-UACFTYXK.js");
804
823
  let sessionScope = null;
805
824
  try {
806
825
  const { resolveExeSession: resolveExeSession2 } = await import("./lib/tmux-routing.js");
@@ -1786,7 +1805,7 @@ async function handleSupersede(input) {
1786
1805
  }
1787
1806
  try {
1788
1807
  const { getClient: getClient2 } = await import("./lib/database.js");
1789
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
1808
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
1790
1809
  const { writeMemory: writeMemory2, flushBatch: flushBatch2 } = await import("./lib/store.js");
1791
1810
  const { randomUUID: randomUUID2 } = await import("crypto");
1792
1811
  const client = getClient2();
@@ -1839,7 +1858,7 @@ New memory id: ${newId}`
1839
1858
  }
1840
1859
  async function handleResonanceQuery(input) {
1841
1860
  try {
1842
- const { getHotPairs, getCoActivationNeighbors } = await import("./co-activation-XMPHKGHR.js");
1861
+ const { getHotPairs, getCoActivationNeighbors } = await import("./co-activation-QI5BK4RT.js");
1843
1862
  const subAction = input.resonance_action ?? "hot_pairs";
1844
1863
  const limit = input.limit ?? 20;
1845
1864
  if (subAction === "hot_pairs") {
@@ -1934,7 +1953,7 @@ function registerMemory(server) {
1934
1953
  return handleResonanceQuery(input);
1935
1954
  }
1936
1955
  if (action === "update_working_memory" || action === "get_working_memory") {
1937
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
1956
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
1938
1957
  const { agentId } = getActiveAgent2();
1939
1958
  const { readWorkingMemoryWithMeta, writeWorkingMemory, WORKING_MEMORY_MAX_BYTES } = await import("./working-memory-PY4AG577.js");
1940
1959
  if (action === "get_working_memory") {
@@ -1960,9 +1979,9 @@ function registerMemory(server) {
1960
1979
  }
1961
1980
  }
1962
1981
  if (action === "core_get" || action === "core_set" || action === "core_delete") {
1963
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
1982
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
1964
1983
  const { agentId } = getActiveAgent2();
1965
- const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-VO5ZIBKH.js");
1984
+ const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-3IBWM4WR.js");
1966
1985
  if (action === "core_get") {
1967
1986
  const entries = await getCoreMemory(agentId);
1968
1987
  const block = formatCoreMemoryBlock(entries);
@@ -2014,12 +2033,12 @@ function registerMemory(server) {
2014
2033
  if (!storeTrigger || !storeTriggerAction) {
2015
2034
  return errorResult('memory action "store" with kind="reflex" requires trigger and trigger_action fields');
2016
2035
  }
2017
- const { formatReflexContent, storeReflexBehavior: storeReflexBehavior2 } = await import("./behaviors-HLZUJSMP.js");
2036
+ const { formatReflexContent, storeReflexBehavior: storeReflexBehavior2 } = await import("./behaviors-EO7KCP3H.js");
2018
2037
  const reflexText = formatReflexContent(storeTrigger, storeTriggerAction);
2019
2038
  legacyArgs.text ??= reflexText;
2020
2039
  legacyArgs.query ??= reflexText;
2021
2040
  try {
2022
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
2041
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
2023
2042
  const { getProjectName: getProjectName2 } = await import("./project-name-EWG5KAZP.js");
2024
2043
  const agent = getActiveAgent2();
2025
2044
  const behaviorId = await storeReflexBehavior2({
@@ -2375,7 +2394,7 @@ function registerCloseTask(server) {
2375
2394
  async ({ task_id, result: result3, status: status2 }) => {
2376
2395
  const agent = getActiveAgent();
2377
2396
  try {
2378
- const { StewardGate: StewardGate2 } = await import("./steward-gate-WT7WXQIE.js");
2397
+ const { StewardGate: StewardGate2 } = await import("./steward-gate-4A2XHYFD.js");
2379
2398
  const steward = new StewardGate2();
2380
2399
  const gateDecision = await steward.checkAuthority(agent.agentId || "unknown", "close_task", task_id);
2381
2400
  if (!gateDecision.allowed) {
@@ -2556,8 +2575,8 @@ ${preflightWarnings.join("\n")}`;
2556
2575
  if (mergeNote) text5 += mergeNote;
2557
2576
  if (status2 === "closed" && assignee) {
2558
2577
  try {
2559
- const { cleanupAgentWorktree } = await import("./worktree-sweep-ZAG3V24E.js");
2560
- const { getGitRoot } = await import("./worktree-GVF2I5FP.js");
2578
+ const { cleanupAgentWorktree } = await import("./worktree-sweep-5WKBU7E6.js");
2579
+ const { getGitRoot } = await import("./worktree-YXBDRYOC.js");
2561
2580
  const repoRoot = getGitRoot(baseDir);
2562
2581
  if (repoRoot) {
2563
2582
  const cleanupNotes = await cleanupAgentWorktree(repoRoot, assignee);
@@ -2606,8 +2625,8 @@ ${preflightWarnings.join("\n")}`;
2606
2625
  } catch {
2607
2626
  }
2608
2627
  try {
2609
- const { cleanupAgentWorktree } = await import("./worktree-sweep-ZAG3V24E.js");
2610
- const { getGitRoot } = await import("./worktree-GVF2I5FP.js");
2628
+ const { cleanupAgentWorktree } = await import("./worktree-sweep-5WKBU7E6.js");
2629
+ const { getGitRoot } = await import("./worktree-YXBDRYOC.js");
2611
2630
  const root = getGitRoot(_baseDir);
2612
2631
  if (root) {
2613
2632
  const notes = await cleanupAgentWorktree(root, _assignee);
@@ -2710,7 +2729,7 @@ function registerResumeEmployee(server) {
2710
2729
  },
2711
2730
  async ({ agent_id, project_name }) => {
2712
2731
  if (!isInitialized()) {
2713
- const { fastDbInit: fastDbInit2 } = await import("./fast-db-init-QQB6IVWV.js");
2732
+ const { fastDbInit: fastDbInit2 } = await import("./fast-db-init-JKJEEHUI.js");
2714
2733
  await fastDbInit2();
2715
2734
  }
2716
2735
  const client = getClient();
@@ -2736,7 +2755,7 @@ function registerResumeEmployee(server) {
2736
2755
  };
2737
2756
  }
2738
2757
  try {
2739
- const { isTmuxSessionAlive } = await import("./tasks-crud-UGK5A25L.js");
2758
+ const { isTmuxSessionAlive } = await import("./tasks-crud-6LBNU43G.js");
2740
2759
  const now = (/* @__PURE__ */ new Date()).toISOString();
2741
2760
  for (const row of openTasks.rows) {
2742
2761
  const status2 = String(row.status);
@@ -2764,7 +2783,7 @@ function registerResumeEmployee(server) {
2764
2783
  }
2765
2784
  let checkpointInfo = "";
2766
2785
  try {
2767
- const { readLatestCheckpoint } = await import("./tasks-crud-UGK5A25L.js");
2786
+ const { readLatestCheckpoint } = await import("./tasks-crud-6LBNU43G.js");
2768
2787
  const checkpoint = await readLatestCheckpoint(agent_id);
2769
2788
  if (checkpoint) {
2770
2789
  const filesTouched = checkpoint.files_touched?.length > 0 ? checkpoint.files_touched.join(", ") : "none";
@@ -3180,7 +3199,7 @@ function registerTask(server) {
3180
3199
  const missing2 = missingRequiredFields2(args, REQUIRED_FIELDS2.create_group);
3181
3200
  if (missing2.length > 0) return errorResult2(`task action "create_group" missing required field(s): ${missing2.join(", ")}`);
3182
3201
  try {
3183
- const { createTaskGroup } = await import("./tasks-crud-UGK5A25L.js");
3202
+ const { createTaskGroup } = await import("./tasks-crud-6LBNU43G.js");
3184
3203
  const group = await createTaskGroup({
3185
3204
  title: args.title,
3186
3205
  coordinator: args.coordinator,
@@ -3199,7 +3218,7 @@ function registerTask(server) {
3199
3218
  const missing2 = missingRequiredFields2(args, REQUIRED_FIELDS2.group_status);
3200
3219
  if (missing2.length > 0) return errorResult2(`task action "group_status" missing required field(s): ${missing2.join(", ")}`);
3201
3220
  try {
3202
- const { getGroupStatus } = await import("./tasks-crud-UGK5A25L.js");
3221
+ const { getGroupStatus } = await import("./tasks-crud-6LBNU43G.js");
3203
3222
  const status2 = await getGroupStatus(args.group_id);
3204
3223
  return { content: [{ type: "text", text: JSON.stringify(status2, null, 2) }] };
3205
3224
  } catch (err) {
@@ -3211,7 +3230,7 @@ function registerTask(server) {
3211
3230
  const missing2 = missingRequiredFields2(args, REQUIRED_FIELDS2.group_results);
3212
3231
  if (missing2.length > 0) return errorResult2(`task action "group_results" missing required field(s): ${missing2.join(", ")}`);
3213
3232
  try {
3214
- const { getGroupResults } = await import("./tasks-crud-UGK5A25L.js");
3233
+ const { getGroupResults } = await import("./tasks-crud-6LBNU43G.js");
3215
3234
  const results = await getGroupResults(args.group_id);
3216
3235
  return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }] };
3217
3236
  } catch (err) {
@@ -3462,7 +3481,7 @@ function registerMessage(server) {
3462
3481
  if (msgType && msgPayload) {
3463
3482
  try {
3464
3483
  const { buildTypedMessage, serializeMessage } = await import("./typed-messages-TKDGVPHS.js");
3465
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
3484
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
3466
3485
  const { sendMessage } = await import("./lib/messaging.js");
3467
3486
  const { agentId } = getActiveAgent2();
3468
3487
  const envelope = buildTypedMessage({
@@ -3496,7 +3515,7 @@ ID: ${msg.id}`
3496
3515
  if (action === "read") {
3497
3516
  try {
3498
3517
  const { getPendingMessages } = await import("./lib/messaging.js");
3499
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
3518
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
3500
3519
  const { agentId } = getActiveAgent2();
3501
3520
  const messages = await getPendingMessages(agentId);
3502
3521
  if (messages.length === 0) {
@@ -3859,8 +3878,8 @@ function registerIngestDocument(server) {
3859
3878
  },
3860
3879
  async (input) => {
3861
3880
  try {
3862
- const { assertFeature: assertFeature2 } = await import("./plan-limits-GRNBOBB3.js");
3863
- const { assertMemoryLimit: assertMemoryLimit2 } = await import("./plan-limits-GRNBOBB3.js");
3881
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-WLQZTCSF.js");
3882
+ const { assertMemoryLimit: assertMemoryLimit2 } = await import("./plan-limits-WLQZTCSF.js");
3864
3883
  await assertFeature2("wiki");
3865
3884
  await assertMemoryLimit2();
3866
3885
  const result3 = await ingestDocument(input);
@@ -3931,8 +3950,8 @@ function registerPurgeDocument(server) {
3931
3950
  },
3932
3951
  async ({ document_id }) => {
3933
3952
  try {
3934
- const { StewardGate: StewardGate2 } = await import("./steward-gate-WT7WXQIE.js");
3935
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
3953
+ const { StewardGate: StewardGate2 } = await import("./steward-gate-4A2XHYFD.js");
3954
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
3936
3955
  const steward = new StewardGate2();
3937
3956
  const agent = getActiveAgent2();
3938
3957
  const gateDecision = await steward.checkAuthority(agent.agentId || "unknown", "purge_document", document_id);
@@ -4102,7 +4121,7 @@ function registerDocument(server) {
4102
4121
  const { action: _action, ...legacyArgs } = input;
4103
4122
  if (action === "list" && (legacyArgs.workspace_id === void 0 || legacyArgs.workspace_id === null || legacyArgs.workspace_id === "")) {
4104
4123
  try {
4105
- const { resolveDefaultWorkspaceId, listWorkspaces } = await import("./documents-FHIBU7KJ.js");
4124
+ const { resolveDefaultWorkspaceId, listWorkspaces } = await import("./documents-FA6N7QDA.js");
4106
4125
  const defaultId = await resolveDefaultWorkspaceId();
4107
4126
  if (defaultId) {
4108
4127
  legacyArgs.workspace_id = defaultId;
@@ -4772,12 +4791,12 @@ async function validateGoTrueToken(token, gotrueUrl) {
4772
4791
  }
4773
4792
  async function getGoTrueUser(userId, gotrueUrl) {
4774
4793
  const url = gotrueUrl ?? process.env.GOTRUE_URL ?? process.env.EXE_GOTRUE_URL;
4775
- const adminToken2 = process.env.GOTRUE_ADMIN_TOKEN ?? process.env.EXE_GOTRUE_ADMIN_TOKEN;
4776
- if (!url || !adminToken2) return null;
4794
+ const adminToken = process.env.GOTRUE_ADMIN_TOKEN ?? process.env.EXE_GOTRUE_ADMIN_TOKEN;
4795
+ if (!url || !adminToken) return null;
4777
4796
  try {
4778
4797
  const res = await fetch(`${url}/admin/users/${userId}`, {
4779
4798
  headers: {
4780
- Authorization: `Bearer ${adminToken2}`,
4799
+ Authorization: `Bearer ${adminToken}`,
4781
4800
  "Content-Type": "application/json"
4782
4801
  },
4783
4802
  signal: AbortSignal.timeout(GOTRUE_TIMEOUT_MS)
@@ -5102,7 +5121,7 @@ async function handleStatus() {
5102
5121
  detail: wikiUrl ? `API at ${wikiUrl}` : "EXE_WIKI_API_URL not set"
5103
5122
  };
5104
5123
  try {
5105
- await import("./graph-rag-JZZAB7PC.js");
5124
+ await import("./graph-rag-WAK2BRJH.js");
5106
5125
  sinks.entity_extraction = { configured: true, detail: "GraphRAG available" };
5107
5126
  } catch {
5108
5127
  sinks.entity_extraction = { configured: false, detail: "graph-rag module unavailable" };
@@ -5129,7 +5148,7 @@ async function handleTrigger(limit) {
5129
5148
  if (rows.rows.length === 0) {
5130
5149
  return text3("No conversations found to re-process.");
5131
5150
  }
5132
- const { ingest } = await import("./pipeline-router-O6HU7DKH.js");
5151
+ const { ingest } = await import("./pipeline-router-RTLAGZTA.js");
5133
5152
  const results = [];
5134
5153
  for (const row of rows.rows) {
5135
5154
  const r = row;
@@ -5760,8 +5779,8 @@ function registerMergeEntities(server) {
5760
5779
  },
5761
5780
  async ({ source_name, source_type, target_name, target_type }) => {
5762
5781
  try {
5763
- const { StewardGate: StewardGate2 } = await import("./steward-gate-WT7WXQIE.js");
5764
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
5782
+ const { StewardGate: StewardGate2 } = await import("./steward-gate-4A2XHYFD.js");
5783
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
5765
5784
  const steward = new StewardGate2();
5766
5785
  const agent = getActiveAgent2();
5767
5786
  const gateDecision = await steward.checkAuthority(agent.agentId || "unknown", "merge_entities", `${source_name}\u2192${target_name}`);
@@ -5969,7 +5988,7 @@ async function handleExtractFromDocument(args) {
5969
5988
  return errorResult7('graph action "extract_from_document" requires document_id');
5970
5989
  }
5971
5990
  try {
5972
- const { extractGraphFromExistingDocument } = await import("./doc-graph-extractor-3TRLGD7M.js");
5991
+ const { extractGraphFromExistingDocument } = await import("./doc-graph-extractor-LR5KMPH7.js");
5973
5992
  const result3 = await extractGraphFromExistingDocument(documentId);
5974
5993
  const lines = [
5975
5994
  `## Graph Extraction for Document ${documentId}`,
@@ -5996,7 +6015,7 @@ async function handleCleanupGarbage(args) {
5996
6015
  const doMerge = !garbageOnly;
5997
6016
  let mod;
5998
6017
  try {
5999
- mod = await import("./cleanup-graph-garbage-KUABW6LS.js");
6018
+ mod = await import("./cleanup-graph-garbage-MXQ4Q2MA.js");
6000
6019
  } catch (err) {
6001
6020
  return errorResult7(`cleanup_garbage: failed to load cleanup module \u2014 ${err instanceof Error ? err.message : String(err)}`);
6002
6021
  }
@@ -6641,8 +6660,8 @@ ${extHealth.remediation}`);
6641
6660
  } catch {
6642
6661
  }
6643
6662
  try {
6644
- const { homedir: homedir6 } = await import("os");
6645
- const dcrConnectors = detectDcrIncompatibleConnectorsFromDisk(homedir6());
6663
+ const { homedir: homedir5 } = await import("os");
6664
+ const dcrConnectors = detectDcrIncompatibleConnectorsFromDisk(homedir5());
6646
6665
  if (dcrConnectors.length > 0) {
6647
6666
  lines.push("\n### Google MCP connectors (auth-incompatible)");
6648
6667
  lines.push("| Connector | Endpoint |");
@@ -6876,7 +6895,7 @@ async function getAgentSessionLoad() {
6876
6895
  return { sessions: [], totalLive: 0, busySessions: 0, idleSessions: 0 };
6877
6896
  }
6878
6897
  const { getClient: getClient2 } = await import("./lib/database.js");
6879
- const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-CQEG5SSJ.js");
6898
+ const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-EKYDCVUF.js");
6880
6899
  const client = getClient2();
6881
6900
  const scope = sessionScopeFilter2();
6882
6901
  for (const s of liveAgentSessions) {
@@ -7003,7 +7022,7 @@ ${mode} Applying repairs...
7003
7022
  `];
7004
7023
  if (!isDryRun) {
7005
7024
  try {
7006
- const { createBackup: createBackup2 } = await import("./db-backup-DLD4QZBO.js");
7025
+ const { createBackup: createBackup2 } = await import("./db-backup-MX2G3CEK.js");
7007
7026
  const backupPath = await createBackup2("pre-fix");
7008
7027
  if (backupPath) {
7009
7028
  fixLog.push(` Backup created: ${backupPath.split("/").pop()}`);
@@ -7242,7 +7261,7 @@ async function cloudStatusText() {
7242
7261
  if (lastReuploadedAt) lines.push(`- Last re-upload: ${lastReuploadedAt}`);
7243
7262
  lines.push("");
7244
7263
  try {
7245
- const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-TWHKYCRK.js");
7264
+ const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-4C2PO6HH.js");
7246
7265
  const h = await getRetrievalHealth2();
7247
7266
  lines.push(formatDegradations2(h.degradations, "Health / Degradations"));
7248
7267
  lines.push("");
@@ -8611,11 +8630,11 @@ async function sendSetPlan(payload) {
8611
8630
  }
8612
8631
  const config = await loadConfig();
8613
8632
  const routerUrl = process.env.API_ROUTER_URL?.replace(/\/+$/, "");
8614
- const endpoint2 = process.env.EXE_SET_CUSTOMER_PLAN_ENDPOINT || (routerUrl ? `${routerUrl}/admin/customer/plan` : "https://api.askexe.com/admin/customer/plan");
8633
+ const endpoint = process.env.EXE_SET_CUSTOMER_PLAN_ENDPOINT || (routerUrl ? `${routerUrl}/admin/customer/plan` : "https://api.askexe.com/admin/customer/plan");
8615
8634
  const licenseKey = loadLicense() || process.env.EXE_LICENSE_KEY || config.cloud?.apiKey;
8616
8635
  const licenseToken = readCachedLicenseToken();
8617
8636
  try {
8618
- const parsed = new URL(endpoint2);
8637
+ const parsed = new URL(endpoint);
8619
8638
  if (parsed.protocol !== "https:" && !["localhost", "127.0.0.1", "::1"].includes(parsed.hostname)) {
8620
8639
  return { status: "failed: insecure endpoint rejected" };
8621
8640
  }
@@ -8737,7 +8756,7 @@ function registerCreateTrigger(server) {
8737
8756
  }
8738
8757
  },
8739
8758
  async ({ name, event, conditions, actions, project, enabled, schedule, query }) => {
8740
- const { assertFeature: assertFeature2 } = await import("./plan-limits-GRNBOBB3.js");
8759
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-WLQZTCSF.js");
8741
8760
  const gatedActions = {
8742
8761
  send_whatsapp: "external_agents",
8743
8762
  update_wiki: "wiki"
@@ -9707,8 +9726,8 @@ function buildHandlers5() {
9707
9726
  }
9708
9727
  async function handleDreaming(action, args) {
9709
9728
  try {
9710
- const { DreamingEngine: DreamingEngine2 } = await import("./dreaming-OMFUEUCQ.js");
9711
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
9729
+ const { DreamingEngine: DreamingEngine2 } = await import("./dreaming-UKGTQT6I.js");
9730
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
9712
9731
  const { getClient: getClient2 } = await import("./lib/database.js");
9713
9732
  const agentId = args.agent_id ?? getActiveAgent2().agentId;
9714
9733
  if (action === "dreaming_run") {
@@ -9866,8 +9885,8 @@ function registerConfig(server) {
9866
9885
  }
9867
9886
  if (action === "closeout") {
9868
9887
  try {
9869
- const { DreamingEngine: DreamingEngine2 } = await import("./dreaming-OMFUEUCQ.js");
9870
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
9888
+ const { DreamingEngine: DreamingEngine2 } = await import("./dreaming-UKGTQT6I.js");
9889
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
9871
9890
  const { writeMemory: writeMemory2, flushBatch: flushBatch2 } = await import("./lib/store.js");
9872
9891
  const { randomUUID: randomUUID2 } = await import("crypto");
9873
9892
  const { getProjectName: getProjectName2 } = await import("./project-name-EWG5KAZP.js");
@@ -9938,7 +9957,7 @@ function registerConfig(server) {
9938
9957
  }
9939
9958
  if (action === "capability_cards") {
9940
9959
  try {
9941
- const { getAllCapabilityCards, findAgentForTask } = await import("./capability-cards-YOKVMMOL.js");
9960
+ const { getAllCapabilityCards, findAgentForTask } = await import("./capability-cards-OBYQNAKZ.js");
9942
9961
  const cards = getAllCapabilityCards();
9943
9962
  const taskQuery = args.query;
9944
9963
  if (taskQuery) {
@@ -9989,7 +10008,7 @@ function registerConfig(server) {
9989
10008
  const existing = loadEmployeesSync2();
9990
10009
  if (existing.some((e) => e.name === employeeName)) return errorResult8(`Employee "${employeeName}" already exists.`);
9991
10010
  try {
9992
- const { assertEmployeeLimit: assertEmployeeLimit2 } = await import("./plan-limits-GRNBOBB3.js");
10011
+ const { assertEmployeeLimit: assertEmployeeLimit2 } = await import("./plan-limits-WLQZTCSF.js");
9993
10012
  await assertEmployeeLimit2();
9994
10013
  } catch (e) {
9995
10014
  return errorResult8(e instanceof Error ? e.message : "Employee limit reached.");
@@ -10030,7 +10049,7 @@ You are ${employeeName}. Role: ${role}.`, "utf-8");
10030
10049
  }
10031
10050
  try {
10032
10051
  const { generateSessionWrappers } = await import("./lib/session-wrappers.js");
10033
- const { resolvePackageRoot } = await import("./installer-MNPXDLGG.js");
10052
+ const { resolvePackageRoot } = await import("./installer-T2LGHZKL.js");
10034
10053
  generateSessionWrappers(resolvePackageRoot());
10035
10054
  } catch {
10036
10055
  }
@@ -10117,7 +10136,7 @@ function registerListWikiPages(server) {
10117
10136
  }
10118
10137
  },
10119
10138
  async ({ workspace, folder }) => {
10120
- const { assertFeature: assertFeature2 } = await import("./plan-limits-GRNBOBB3.js");
10139
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-WLQZTCSF.js");
10121
10140
  await assertFeature2("wiki");
10122
10141
  const apiUrl = process.env.EXE_WIKI_API_URL;
10123
10142
  const apiKey = process.env.EXE_WIKI_API_KEY;
@@ -10217,7 +10236,7 @@ function registerGetWikiPage(server) {
10217
10236
  }
10218
10237
  },
10219
10238
  async ({ workspace, document_id, title }) => {
10220
- const { assertFeature: assertFeature2 } = await import("./plan-limits-GRNBOBB3.js");
10239
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-WLQZTCSF.js");
10221
10240
  await assertFeature2("wiki");
10222
10241
  const apiUrl = process.env.EXE_WIKI_API_URL;
10223
10242
  const apiKey = process.env.EXE_WIKI_API_KEY;
@@ -10411,10 +10430,10 @@ async function handleWikiSearch(input) {
10411
10430
  const userId = input.user_id;
10412
10431
  if (!workspace) return errorResult9('wiki action "search" requires workspace');
10413
10432
  if (!query) return errorResult9('wiki action "search" requires query');
10414
- const { assertFeature: assertFeature2 } = await import("./plan-limits-GRNBOBB3.js");
10433
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-WLQZTCSF.js");
10415
10434
  await assertFeature2("wiki");
10416
10435
  if (userId) {
10417
- const { checkWikiAccess } = await import("./wiki-acl-JA5UCQZ4.js");
10436
+ const { checkWikiAccess } = await import("./wiki-acl-7CROE3MJ.js");
10418
10437
  const { allowed } = await checkWikiAccess(String(userId), String(workspace), "read");
10419
10438
  if (!allowed) {
10420
10439
  return errorResult9(`Access denied: user "${userId}" does not have read access to workspace "${workspace}"`);
@@ -10517,7 +10536,7 @@ function registerWiki(server) {
10517
10536
  return errorResult9('wiki action "document_rerank" requires at least one candidate');
10518
10537
  }
10519
10538
  if (user_id && legacyArgs.workspace) {
10520
- const { checkWikiAccess } = await import("./wiki-acl-JA5UCQZ4.js");
10539
+ const { checkWikiAccess } = await import("./wiki-acl-7CROE3MJ.js");
10521
10540
  const { allowed } = await checkWikiAccess(
10522
10541
  String(user_id),
10523
10542
  String(legacyArgs.workspace),
@@ -10838,7 +10857,7 @@ Use /exe-forget to remove any that this supersedes.`;
10838
10857
  }]
10839
10858
  };
10840
10859
  }
10841
- const { bulkPurgeGhostBehaviors } = await import("./behaviors-HLZUJSMP.js");
10860
+ const { bulkPurgeGhostBehaviors } = await import("./behaviors-EO7KCP3H.js");
10842
10861
  const res = await bulkPurgeGhostBehaviors({ batchSize: 5e3, vacuum: true });
10843
10862
  return {
10844
10863
  content: [{
@@ -10949,7 +10968,7 @@ Use /exe-forget to remove any that this supersedes.`;
10949
10968
  return { content: [{ type: "text", text: `Behavior not found: ${behavior_id}` }], isError: true };
10950
10969
  }
10951
10970
  const row2 = result4.rows[0];
10952
- const { reactivateBehavior: reactivateBehavior2 } = await import("./behaviors-HLZUJSMP.js");
10971
+ const { reactivateBehavior: reactivateBehavior2 } = await import("./behaviors-EO7KCP3H.js");
10953
10972
  const wasReactivated = await reactivateBehavior2(behavior_id);
10954
10973
  if (!wasReactivated) {
10955
10974
  return { content: [{ type: "text", text: `Behavior ${behavior_id} is already active.` }] };
@@ -11470,7 +11489,7 @@ function registerWorkflowTool(server) {
11470
11489
  getWorkflowInstance,
11471
11490
  listWorkflowInstances,
11472
11491
  approveWorkflowStep
11473
- } = await import("./workflow-engine-EWCOLD47.js");
11492
+ } = await import("./workflow-engine-MMEHKUN4.js");
11474
11493
  try {
11475
11494
  switch (input.action) {
11476
11495
  case "create_workflow": {
@@ -11650,7 +11669,12 @@ function buildMarkdown(input) {
11650
11669
  function prepareUpstreamPayload(payload) {
11651
11670
  const cleaned = { ...payload };
11652
11671
  delete cleaned.agent_role;
11653
- return { body: JSON.stringify(cleaned), contentType: "application/json", encrypted: false };
11672
+ if (!isTelemetryRedactionEnabled()) {
11673
+ console.error("[bug-report] WARNING: EXE_TELEMETRY_REDACT=off \u2014 sending UNREDACTED payload upstream");
11674
+ return { body: JSON.stringify(cleaned), contentType: "application/json", encrypted: false, redactedCount: 0, truncatedCount: 0 };
11675
+ }
11676
+ const { payload: sanitized, redactedCount, truncatedCount } = sanitizeUpstreamPayload(cleaned);
11677
+ return { body: JSON.stringify(sanitized), contentType: "application/json", encrypted: false, redactedCount, truncatedCount };
11654
11678
  }
11655
11679
  async function maybeSendUpstream(payload) {
11656
11680
  if (process.env.VITEST || process.env.NODE_ENV === "test") {
@@ -11658,19 +11682,19 @@ async function maybeSendUpstream(payload) {
11658
11682
  }
11659
11683
  const config = await loadConfig();
11660
11684
  const routerUrl = process.env.API_ROUTER_URL?.replace(/\/+$/, "");
11661
- const endpoint2 = config.support?.bugReportEndpoint || process.env.EXE_BUG_REPORT_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/bug-reports` : "https://api.askexe.com/v1/support/bug-reports");
11685
+ const endpoint = config.support?.bugReportEndpoint || process.env.EXE_BUG_REPORT_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/bug-reports` : "https://api.askexe.com/v1/support/bug-reports");
11662
11686
  const token = config.support?.bugReportToken || process.env.EXE_BUG_REPORT_TOKEN;
11663
11687
  const licenseKey = loadLicense() || process.env.EXE_LICENSE_KEY || config.cloud?.apiKey;
11664
11688
  const licenseToken = readCachedLicenseToken();
11665
- if (!endpoint2) {
11689
+ if (!endpoint) {
11666
11690
  return "not_configured";
11667
11691
  }
11668
11692
  try {
11669
- const parsed = new URL(endpoint2);
11693
+ const parsed = new URL(endpoint);
11670
11694
  if (parsed.protocol !== "https:" && !["localhost", "127.0.0.1", "::1"].includes(parsed.hostname)) {
11671
11695
  return "failed: insecure endpoint rejected";
11672
11696
  }
11673
- const { body, contentType, encrypted } = prepareUpstreamPayload(payload);
11697
+ const { body, contentType, encrypted, redactedCount, truncatedCount } = prepareUpstreamPayload(payload);
11674
11698
  const response = await fetch(parsed, {
11675
11699
  method: "POST",
11676
11700
  headers: {
@@ -11685,7 +11709,11 @@ async function maybeSendUpstream(payload) {
11685
11709
  signal: AbortSignal.timeout(1e4)
11686
11710
  });
11687
11711
  if (!response.ok) return `failed: HTTP ${response.status}`;
11688
- return encrypted ? "sent (encrypted)" : "sent (redacted)";
11712
+ if (encrypted) return "sent (encrypted)";
11713
+ const parts = ["sanitized"];
11714
+ if (redactedCount > 0) parts.push(`${redactedCount} secret${redactedCount === 1 ? "" : "s"} redacted`);
11715
+ if (truncatedCount > 0) parts.push(`${truncatedCount} field${truncatedCount === 1 ? "" : "s"} truncated`);
11716
+ return `sent (${parts.join(", ")})`;
11689
11717
  } catch (err) {
11690
11718
  return `failed: ${err instanceof Error ? err.message : String(err)}`;
11691
11719
  }
@@ -11757,7 +11785,7 @@ function registerCreateBugReport(server) {
11757
11785
  const version = package_version ?? "unknown";
11758
11786
  let metricsSnapshot = "";
11759
11787
  try {
11760
- const { getOrchestrationMetrics, formatOrchestrationMetrics } = await import("./orchestration-events-5SIJOE4H.js");
11788
+ const { getOrchestrationMetrics, formatOrchestrationMetrics } = await import("./orchestration-events-ZG7O4HRY.js");
11761
11789
  const sinceIso = new Date(Date.now() - 60 * 60 * 1e3).toISOString();
11762
11790
  const metrics = await getOrchestrationMetrics({ sinceIso });
11763
11791
  if (metrics.totalEvents > 0) {
@@ -11843,11 +11871,9 @@ ${formatOrchestrationMetrics(metrics)}
11843
11871
  file_paths: files_changed ? JSON.stringify(files_changed) : null
11844
11872
  });
11845
11873
  await flushBatch();
11846
- const UPSTREAM_ATTACHMENT_MAX_CHARS = 4096;
11847
11874
  const upstreamAttachments = attachments?.map((att) => ({
11848
11875
  filename: att.filename,
11849
- content: att.content.length > UPSTREAM_ATTACHMENT_MAX_CHARS ? att.content.slice(0, UPSTREAM_ATTACHMENT_MAX_CHARS) + `
11850
- ... [truncated, ${att.content.length} chars total]` : att.content,
11876
+ content: att.content,
11851
11877
  truncated: att.content.length > UPSTREAM_ATTACHMENT_MAX_CHARS,
11852
11878
  original_size: att.content.length
11853
11879
  }));
@@ -11945,18 +11971,30 @@ async function maybeSendUpstream2(payload) {
11945
11971
  }
11946
11972
  const config = await loadConfig();
11947
11973
  const routerUrl = process.env.API_ROUTER_URL?.replace(/\/+$/, "");
11948
- const endpoint2 = config.support?.featureRequestEndpoint || process.env.EXE_FEATURE_REQUEST_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/feature-requests` : "https://api.askexe.com/v1/support/feature-requests");
11974
+ const endpoint = config.support?.featureRequestEndpoint || process.env.EXE_FEATURE_REQUEST_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/feature-requests` : "https://api.askexe.com/v1/support/feature-requests");
11949
11975
  const token = config.support?.featureRequestToken || process.env.EXE_FEATURE_REQUEST_TOKEN;
11950
11976
  const licenseKey = loadLicense() || process.env.EXE_LICENSE_KEY || config.cloud?.apiKey;
11951
11977
  const licenseToken = readCachedLicenseToken();
11952
- if (!endpoint2) {
11978
+ if (!endpoint) {
11953
11979
  return "not_configured";
11954
11980
  }
11955
11981
  try {
11956
- const parsed = new URL(endpoint2);
11982
+ const parsed = new URL(endpoint);
11957
11983
  if (parsed.protocol !== "https:" && !["localhost", "127.0.0.1", "::1"].includes(parsed.hostname)) {
11958
11984
  return "failed: insecure endpoint rejected";
11959
11985
  }
11986
+ let outboundBody;
11987
+ let redactedCount = 0;
11988
+ let truncatedCount = 0;
11989
+ if (isTelemetryRedactionEnabled()) {
11990
+ const sanitized = sanitizeUpstreamPayload(payload);
11991
+ outboundBody = JSON.stringify(sanitized.payload);
11992
+ redactedCount = sanitized.redactedCount;
11993
+ truncatedCount = sanitized.truncatedCount;
11994
+ } else {
11995
+ console.error("[feature-request] WARNING: EXE_TELEMETRY_REDACT=off \u2014 sending UNREDACTED payload upstream");
11996
+ outboundBody = JSON.stringify(payload);
11997
+ }
11960
11998
  const response = await fetch(parsed, {
11961
11999
  method: "POST",
11962
12000
  headers: {
@@ -11966,11 +12004,14 @@ async function maybeSendUpstream2(payload) {
11966
12004
  ...licenseToken ? { "x-exe-license-token": licenseToken } : {},
11967
12005
  ...supportAdminHeaders(config)
11968
12006
  },
11969
- body: JSON.stringify(payload),
12007
+ body: outboundBody,
11970
12008
  signal: AbortSignal.timeout(1e4)
11971
12009
  });
11972
12010
  if (!response.ok) return `failed: HTTP ${response.status}`;
11973
- return "sent";
12011
+ const parts = ["sanitized"];
12012
+ if (redactedCount > 0) parts.push(`${redactedCount} secret${redactedCount === 1 ? "" : "s"} redacted`);
12013
+ if (truncatedCount > 0) parts.push(`${truncatedCount} field${truncatedCount === 1 ? "" : "s"} truncated`);
12014
+ return `sent (${parts.join(", ")})`;
11974
12015
  } catch (err) {
11975
12016
  return `failed: ${err instanceof Error ? err.message : String(err)}`;
11976
12017
  }
@@ -12094,11 +12135,9 @@ function registerCreateFeatureRequest(server) {
12094
12135
  file_paths: null
12095
12136
  });
12096
12137
  await flushBatch();
12097
- const UPSTREAM_ATTACHMENT_MAX_CHARS = 4096;
12098
12138
  const upstreamAttachments = attachments?.map((att) => ({
12099
12139
  filename: att.filename,
12100
- content: att.content.length > UPSTREAM_ATTACHMENT_MAX_CHARS ? att.content.slice(0, UPSTREAM_ATTACHMENT_MAX_CHARS) + `
12101
- ... [truncated, ${att.content.length} chars total]` : att.content,
12140
+ content: att.content,
12102
12141
  truncated: att.content.length > UPSTREAM_ATTACHMENT_MAX_CHARS,
12103
12142
  original_size: att.content.length
12104
12143
  }));
@@ -12227,9 +12266,9 @@ async function appendUpdateSection(filePath, opts) {
12227
12266
  async function sendUpstream(payload, isAdmin) {
12228
12267
  const config = await loadConfig();
12229
12268
  const routerUrl = process.env.API_ROUTER_URL?.replace(/\/+$/, "");
12230
- const adminToken2 = resolveSupportAdminToken(config);
12269
+ const adminToken = resolveSupportAdminToken(config);
12231
12270
  const support = config.support;
12232
- const baseEndpoint = isAdmin && adminToken2 ? process.env.ASKEXE_SUPPORT_ADMIN_ENDPOINT || support?.adminEndpoint || support?.admin_endpoint || "https://api.askexe.com/admin/support/bug-reports" : config.support?.bugReportEndpoint || process.env.EXE_BUG_REPORT_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/bug-reports` : "https://api.askexe.com/v1/support/bug-reports");
12271
+ const baseEndpoint = isAdmin && adminToken ? process.env.ASKEXE_SUPPORT_ADMIN_ENDPOINT || support?.adminEndpoint || support?.admin_endpoint || "https://api.askexe.com/admin/support/bug-reports" : config.support?.bugReportEndpoint || process.env.EXE_BUG_REPORT_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/bug-reports` : "https://api.askexe.com/v1/support/bug-reports");
12233
12272
  const licenseKey = loadLicense() || process.env.EXE_LICENSE_KEY || config.cloud?.apiKey;
12234
12273
  const licenseToken = readCachedLicenseToken();
12235
12274
  if (!baseEndpoint) return "not_configured";
@@ -12240,18 +12279,21 @@ async function sendUpstream(payload, isAdmin) {
12240
12279
  if (parsed.protocol !== "https:" && !["localhost", "127.0.0.1", "::1"].includes(parsed.hostname)) {
12241
12280
  return "failed: insecure endpoint rejected";
12242
12281
  }
12243
- const adminHeaders = isAdmin && adminToken2 ? { authorization: `Bearer ${adminToken2}`, ...supportAdminHeaders(config) } : {};
12282
+ const adminHeaders = isAdmin && adminToken ? { authorization: `Bearer ${adminToken}`, ...supportAdminHeaders(config) } : {};
12244
12283
  const response = await fetch(parsed, {
12245
12284
  method: "PATCH",
12246
12285
  headers: {
12247
12286
  "content-type": "application/json",
12248
- ...isAdmin && adminToken2 ? {} : {
12287
+ ...isAdmin && adminToken ? {} : {
12249
12288
  ...licenseKey ? { "x-exe-license-key": licenseKey, authorization: `Bearer ${licenseKey}` } : {},
12250
12289
  ...licenseToken ? { "x-exe-license-token": licenseToken } : {}
12251
12290
  },
12252
12291
  ...adminHeaders
12253
12292
  },
12254
- body: JSON.stringify(payload),
12293
+ // Egress redaction gate (dc16fee4) — add_evidence ("logs, repro details,
12294
+ // stack traces"), add_note, and triage_notes are the most secret-dense
12295
+ // support fields; redact before the network send.
12296
+ body: sanitizedUpstreamBody(payload, "update-bug-report"),
12255
12297
  signal: AbortSignal.timeout(1e4)
12256
12298
  });
12257
12299
  if (!response.ok) return `failed: HTTP ${response.status}`;
@@ -12432,9 +12474,9 @@ async function appendStatusUpdate(filePath, status2, notes, shippedVersion) {
12432
12474
  async function sendUpstream2(payload) {
12433
12475
  const config = await loadConfig();
12434
12476
  const routerUrl = process.env.API_ROUTER_URL?.replace(/\/+$/, "");
12435
- const adminToken2 = resolveSupportAdminToken(config);
12477
+ const adminToken = resolveSupportAdminToken(config);
12436
12478
  const support = config.support;
12437
- const baseEndpoint = adminToken2 ? process.env.ASKEXE_SUPPORT_ADMIN_FEATURE_ENDPOINT || support?.adminFeatureEndpoint || support?.admin_feature_endpoint || "https://api.askexe.com/admin/support/feature-requests" : config.support?.featureRequestEndpoint || process.env.EXE_FEATURE_REQUEST_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/feature-requests` : "https://api.askexe.com/v1/support/feature-requests");
12479
+ const baseEndpoint = adminToken ? process.env.ASKEXE_SUPPORT_ADMIN_FEATURE_ENDPOINT || support?.adminFeatureEndpoint || support?.admin_feature_endpoint || "https://api.askexe.com/admin/support/feature-requests" : config.support?.featureRequestEndpoint || process.env.EXE_FEATURE_REQUEST_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/feature-requests` : "https://api.askexe.com/v1/support/feature-requests");
12438
12480
  const licenseKey = loadLicense() || process.env.EXE_LICENSE_KEY || config.cloud?.apiKey;
12439
12481
  const licenseToken = readCachedLicenseToken();
12440
12482
  if (!baseEndpoint) return "not_configured";
@@ -12449,12 +12491,14 @@ async function sendUpstream2(payload) {
12449
12491
  method: "PATCH",
12450
12492
  headers: {
12451
12493
  "content-type": "application/json",
12452
- ...adminToken2 ? { authorization: `Bearer ${adminToken2}`, ...supportAdminHeaders(config) } : {
12494
+ ...adminToken ? { authorization: `Bearer ${adminToken}`, ...supportAdminHeaders(config) } : {
12453
12495
  ...licenseKey ? { "x-exe-license-key": licenseKey, authorization: `Bearer ${licenseKey}` } : {},
12454
12496
  ...licenseToken ? { "x-exe-license-token": licenseToken } : {}
12455
12497
  }
12456
12498
  },
12457
- body: JSON.stringify(payload),
12499
+ // Egress redaction gate (dc16fee4) — redact response_notes/add_note
12500
+ // before the network send.
12501
+ body: sanitizedUpstreamBody(payload, "update-feature-request"),
12458
12502
  signal: AbortSignal.timeout(1e4)
12459
12503
  });
12460
12504
  if (!response.ok) return `failed: HTTP ${response.status}`;
@@ -12619,10 +12663,10 @@ function registerSupportTools(server) {
12619
12663
  isError: true
12620
12664
  };
12621
12665
  }
12622
- const endpoint2 = new URL("https://api.askexe.com/v1/support/my-reports");
12623
- endpoint2.searchParams.set("status", status2);
12624
- endpoint2.searchParams.set("limit", String(limit));
12625
- endpoint2.searchParams.set("offset", String(offset));
12666
+ const endpoint = new URL("https://api.askexe.com/v1/support/my-reports");
12667
+ endpoint.searchParams.set("status", status2);
12668
+ endpoint.searchParams.set("limit", String(limit));
12669
+ endpoint.searchParams.set("offset", String(offset));
12626
12670
  const headers = { "content-type": "application/json" };
12627
12671
  if (licenseKey) {
12628
12672
  headers["authorization"] = `Bearer ${licenseKey}`;
@@ -12630,7 +12674,7 @@ function registerSupportTools(server) {
12630
12674
  }
12631
12675
  if (licenseToken) headers["x-exe-license-token"] = licenseToken;
12632
12676
  try {
12633
- const res = await fetch(endpoint2.toString(), { method: "GET", headers, signal: AbortSignal.timeout(15e3) });
12677
+ const res = await fetch(endpoint.toString(), { method: "GET", headers, signal: AbortSignal.timeout(15e3) });
12634
12678
  if (!res.ok) {
12635
12679
  const body = await res.text().catch(() => "");
12636
12680
  return {
@@ -12691,10 +12735,10 @@ function registerSupportTools(server) {
12691
12735
  isError: true
12692
12736
  };
12693
12737
  }
12694
- const endpoint2 = new URL("https://api.askexe.com/v1/support/my-feature-requests");
12695
- endpoint2.searchParams.set("status", status2);
12696
- endpoint2.searchParams.set("limit", String(limit));
12697
- endpoint2.searchParams.set("offset", String(offset));
12738
+ const endpoint = new URL("https://api.askexe.com/v1/support/my-feature-requests");
12739
+ endpoint.searchParams.set("status", status2);
12740
+ endpoint.searchParams.set("limit", String(limit));
12741
+ endpoint.searchParams.set("offset", String(offset));
12698
12742
  const headers = { "content-type": "application/json" };
12699
12743
  if (licenseKey) {
12700
12744
  headers["authorization"] = `Bearer ${licenseKey}`;
@@ -12702,7 +12746,7 @@ function registerSupportTools(server) {
12702
12746
  }
12703
12747
  if (licenseToken) headers["x-exe-license-token"] = licenseToken;
12704
12748
  try {
12705
- const res = await fetch(endpoint2.toString(), { method: "GET", headers, signal: AbortSignal.timeout(15e3) });
12749
+ const res = await fetch(endpoint.toString(), { method: "GET", headers, signal: AbortSignal.timeout(15e3) });
12706
12750
  if (!res.ok) {
12707
12751
  const body = await res.text().catch(() => "");
12708
12752
  return {
@@ -12763,9 +12807,9 @@ function registerSupportTools(server) {
12763
12807
  isError: true
12764
12808
  };
12765
12809
  }
12766
- const endpoint2 = new URL("https://api.askexe.com/v1/support/my-reviews");
12767
- endpoint2.searchParams.set("status", status2);
12768
- endpoint2.searchParams.set("limit", String(limit));
12810
+ const endpoint = new URL("https://api.askexe.com/v1/support/my-reviews");
12811
+ endpoint.searchParams.set("status", status2);
12812
+ endpoint.searchParams.set("limit", String(limit));
12769
12813
  const headers = { "content-type": "application/json" };
12770
12814
  if (licenseKey) {
12771
12815
  headers["authorization"] = `Bearer ${licenseKey}`;
@@ -12773,7 +12817,7 @@ function registerSupportTools(server) {
12773
12817
  }
12774
12818
  if (licenseToken) headers["x-exe-license-token"] = licenseToken;
12775
12819
  try {
12776
- const res = await fetch(endpoint2.toString(), { method: "GET", headers, signal: AbortSignal.timeout(15e3) });
12820
+ const res = await fetch(endpoint.toString(), { method: "GET", headers, signal: AbortSignal.timeout(15e3) });
12777
12821
  if (!res.ok) {
12778
12822
  const body = await res.text().catch(() => "");
12779
12823
  if (res.status === 500 || res.status === 404) {
@@ -13031,7 +13075,7 @@ function registerCliParityTools(server) {
13031
13075
  const out = await runCommand("exe-os", ["cloud", "status"], 45e3);
13032
13076
  let healthSection = "";
13033
13077
  try {
13034
- const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-TWHKYCRK.js");
13078
+ const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-4C2PO6HH.js");
13035
13079
  const h = await getRetrievalHealth2();
13036
13080
  const lines = [
13037
13081
  "",
@@ -13099,7 +13143,7 @@ function registerCodeContext(server) {
13099
13143
  const index = buildCodeContextIndex(opts);
13100
13144
  let graphExtract;
13101
13145
  try {
13102
- const { autoExtractGraphEntities } = await import("./graph-auto-extract-LKIQ57PL.js");
13146
+ const { autoExtractGraphEntities } = await import("./graph-auto-extract-HCQQF5AG.js");
13103
13147
  graphExtract = await autoExtractGraphEntities(opts.projectRoot);
13104
13148
  } catch {
13105
13149
  }
@@ -13173,355 +13217,8 @@ function registerCodeContext(server) {
13173
13217
  });
13174
13218
  }
13175
13219
 
13176
- // src/mcp/tools/support-inbox.ts
13177
- import { z as z95 } from "zod";
13178
- import { readFileSync as readFileSync7 } from "fs";
13179
- import { join as join4 } from "path";
13180
- import { homedir as homedir4 } from "os";
13181
- var DEFAULT_ENDPOINT = "https://api.askexe.com/admin/support/bug-reports";
13182
- var DEFAULT_OWNER_ENDPOINT = "https://api.askexe.com/v1/support/bug-reports";
13183
- var STATUS3 = z95.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
13184
- function adminToken() {
13185
- if (process.env.ASKEXE_SUPPORT_ADMIN_TOKEN) return process.env.ASKEXE_SUPPORT_ADMIN_TOKEN;
13186
- if (process.env.EXE_SUPPORT_ADMIN_TOKEN) return process.env.EXE_SUPPORT_ADMIN_TOKEN;
13187
- try {
13188
- const configPath = join4(process.env.EXE_OS_DIR ?? join4(homedir4(), ".exe-os"), "config.json");
13189
- const config = JSON.parse(readFileSync7(configPath, "utf-8"));
13190
- return config.support?.adminToken || config.support?.admin_token;
13191
- } catch {
13192
- return void 0;
13193
- }
13194
- }
13195
- function endpoint() {
13196
- return (process.env.ASKEXE_SUPPORT_ADMIN_ENDPOINT || DEFAULT_ENDPOINT).replace(/\/+$/, "");
13197
- }
13198
- function ownerEndpoint() {
13199
- const routerUrl = process.env.API_ROUTER_URL?.replace(/\/+$/, "");
13200
- let configured;
13201
- try {
13202
- const configPath = join4(process.env.EXE_OS_DIR ?? join4(homedir4(), ".exe-os"), "config.json");
13203
- const config = JSON.parse(readFileSync7(configPath, "utf-8"));
13204
- configured = config.support?.bugReportEndpoint;
13205
- } catch {
13206
- }
13207
- const base = configured || process.env.EXE_BUG_REPORT_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/bug-reports` : DEFAULT_OWNER_ENDPOINT);
13208
- return base.replace(/\/+$/, "");
13209
- }
13210
- function ownerAuthHeaders() {
13211
- let cloudApiKey;
13212
- try {
13213
- const configPath = join4(process.env.EXE_OS_DIR ?? join4(homedir4(), ".exe-os"), "config.json");
13214
- const config = JSON.parse(readFileSync7(configPath, "utf-8"));
13215
- cloudApiKey = config.cloud?.apiKey;
13216
- } catch {
13217
- }
13218
- const licenseKey = loadLicense() || process.env.EXE_LICENSE_KEY || cloudApiKey;
13219
- const licenseToken = readCachedLicenseToken();
13220
- const headers = {};
13221
- if (licenseKey) {
13222
- headers["x-exe-license-key"] = licenseKey;
13223
- headers.authorization = `Bearer ${licenseKey}`;
13224
- }
13225
- if (licenseToken) headers["x-exe-license-token"] = licenseToken;
13226
- return headers;
13227
- }
13228
- function assertInternal() {
13229
- const token = adminToken();
13230
- if (!token) throw new Error("AskExe support admin token not configured");
13231
- return token;
13232
- }
13233
- async function requestJson(url, init) {
13234
- const token = assertInternal();
13235
- const res = await fetch(url, {
13236
- ...init,
13237
- headers: {
13238
- "content-type": "application/json",
13239
- authorization: `Bearer ${token}`,
13240
- ...init?.headers ?? {}
13241
- },
13242
- signal: AbortSignal.timeout(1e4)
13243
- });
13244
- const text5 = await res.text();
13245
- let data = text5;
13246
- try {
13247
- data = text5 ? JSON.parse(text5) : {};
13248
- } catch {
13249
- }
13250
- if (!res.ok) throw new Error(`HTTP ${res.status}: ${typeof data === "string" ? data : JSON.stringify(data)}`);
13251
- return data;
13252
- }
13253
- async function fetchJson(url, headers, init) {
13254
- const res = await fetch(url, {
13255
- ...init,
13256
- headers: { "content-type": "application/json", ...headers, ...init?.headers ?? {} },
13257
- signal: AbortSignal.timeout(1e4)
13258
- });
13259
- const text5 = await res.text();
13260
- let data = text5;
13261
- try {
13262
- data = text5 ? JSON.parse(text5) : {};
13263
- } catch {
13264
- }
13265
- if (!res.ok) throw new Error(`HTTP ${res.status}: ${typeof data === "string" ? data : JSON.stringify(data)}`);
13266
- return data;
13267
- }
13268
- async function commentRequestJson(bugId, init) {
13269
- const token = adminToken();
13270
- if (token) {
13271
- const url2 = `${endpoint()}/${encodeURIComponent(bugId)}/comments`;
13272
- return fetchJson(url2, { authorization: `Bearer ${token}` }, init);
13273
- }
13274
- const ownerHeaders = ownerAuthHeaders();
13275
- if (!ownerHeaders.authorization && !ownerHeaders["x-exe-license-token"]) {
13276
- throw new Error(
13277
- "Not authenticated for support comments. Run `exe-os login` (GoTrue) or set a license key, or configure an AskExe admin token (ASKEXE_SUPPORT_ADMIN_TOKEN)."
13278
- );
13279
- }
13280
- const url = `${ownerEndpoint()}/${encodeURIComponent(bugId)}/comments`;
13281
- return fetchJson(url, ownerHeaders, init);
13282
- }
13283
- function registerListBugReports(server) {
13284
- server.registerTool(
13285
- "list_bug_reports",
13286
- {
13287
- title: "List Bug Reports",
13288
- description: "AskExe-internal only: list incoming customer bug reports from the support inbox.",
13289
- inputSchema: {
13290
- status: z95.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("open"),
13291
- severity: z95.enum(["p0", "p1", "p2", "p3"]).optional(),
13292
- limit: z95.number().int().min(1).max(100).default(25)
13293
- }
13294
- },
13295
- async ({ status: status2, severity, limit }) => {
13296
- const url = new URL(endpoint());
13297
- url.searchParams.set("status", status2);
13298
- url.searchParams.set("limit", String(limit));
13299
- if (severity) url.searchParams.set("severity", severity);
13300
- const data = await requestJson(url.toString());
13301
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13302
- }
13303
- );
13304
- }
13305
- function parseComments(row) {
13306
- if (!row || typeof row !== "object") return [];
13307
- const raw = row.progress_log;
13308
- if (typeof raw !== "string" || !raw.trim()) return [];
13309
- try {
13310
- const parsed = JSON.parse(raw);
13311
- return Array.isArray(parsed) ? parsed : [];
13312
- } catch {
13313
- return [];
13314
- }
13315
- }
13316
- function registerGetBugReport(server) {
13317
- server.registerTool(
13318
- "get_bug_report",
13319
- {
13320
- title: "Get Bug Report",
13321
- description: "AskExe-internal only: fetch one customer bug report with full markdown payload and comments thread.",
13322
- inputSchema: { id: z95.string().min(8) }
13323
- },
13324
- async ({ id }) => {
13325
- const data = await requestJson(`${endpoint()}/${encodeURIComponent(id)}`);
13326
- const comments = parseComments(data);
13327
- const enriched = data && typeof data === "object" ? { ...data, comments } : { id, comments };
13328
- return { content: [{ type: "text", text: JSON.stringify(enriched, null, 2) }] };
13329
- }
13330
- );
13331
- }
13332
- function registerAddBugReportComment(server) {
13333
- server.registerTool(
13334
- "add_bug_report_comment",
13335
- {
13336
- title: "Add Bug Report Comment",
13337
- description: "AskExe-internal only: append a comment to a bug report's thread (POST /comments). Non-destructive \u2014 does not touch triage_notes or status.",
13338
- inputSchema: {
13339
- id: z95.string().min(8),
13340
- comment: z95.string().min(1).describe("Comment text to append to the bug report thread")
13341
- }
13342
- },
13343
- async ({ id, comment }) => {
13344
- const data = await commentRequestJson(id, {
13345
- method: "POST",
13346
- body: JSON.stringify({ comment })
13347
- });
13348
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13349
- }
13350
- );
13351
- }
13352
- function registerGetBugReportComments(server) {
13353
- server.registerTool(
13354
- "get_bug_report_comments",
13355
- {
13356
- title: "Get Bug Report Comments",
13357
- description: "AskExe-internal only: list the comments thread on a bug report (GET /comments).",
13358
- inputSchema: { id: z95.string().min(8) }
13359
- },
13360
- async ({ id }) => {
13361
- const data = await commentRequestJson(id);
13362
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13363
- }
13364
- );
13365
- }
13366
- function registerTriageBugReport(server) {
13367
- server.registerTool(
13368
- "triage_bug_report",
13369
- {
13370
- title: "Triage Bug Report",
13371
- description: "AskExe-internal only: update bug report status and link task/commit/release metadata.",
13372
- inputSchema: {
13373
- id: z95.string().min(8),
13374
- status: STATUS3.optional(),
13375
- triage_notes: z95.string().optional(),
13376
- add_note: z95.string().optional().describe("Append a timestamped progress note without changing status or replacing triage_notes"),
13377
- linked_task_id: z95.string().optional(),
13378
- linked_commit: z95.string().optional(),
13379
- fixed_version: z95.string().optional(),
13380
- product: z95.string().optional().describe("Re-label this bug's product: exe-os, exe-create, exe-wiki, exe-gateway, exe-crm, exe-build, exe-chat, exe-auth, exe-monitor, exe-db, exe-erp")
13381
- }
13382
- },
13383
- async ({ id, status: status2, triage_notes, add_note, linked_task_id, linked_commit, fixed_version, product }) => {
13384
- const effectiveStatus = fixed_version && !status2 ? "closed" : status2;
13385
- const data = await requestJson(`${endpoint()}/${encodeURIComponent(id)}`, {
13386
- method: "PATCH",
13387
- body: JSON.stringify({ status: effectiveStatus, triage_notes, add_note, linked_task_id, linked_commit, fixed_version, product })
13388
- });
13389
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13390
- }
13391
- );
13392
- }
13393
- var FEATURE_STATUS = z95.enum(["open", "planned", "in_progress", "shipped", "closed", "wontdo"]);
13394
- function featureEndpoint() {
13395
- return endpoint().replace(/\/bug-reports\/?$/, "/feature-requests");
13396
- }
13397
- function registerListFeatureRequests(server) {
13398
- server.registerTool(
13399
- "list_feature_requests",
13400
- {
13401
- title: "List Feature Requests",
13402
- description: "AskExe-internal only: list incoming customer feature requests from the support inbox.",
13403
- inputSchema: {
13404
- status: z95.enum(["all", "open", "planned", "in_progress", "shipped", "closed", "wontdo"]).default("open"),
13405
- priority: z95.enum(["p0", "p1", "p2", "p3"]).optional(),
13406
- limit: z95.number().int().min(1).max(100).default(25)
13407
- }
13408
- },
13409
- async ({ status: status2, priority, limit }) => {
13410
- const url = new URL(featureEndpoint());
13411
- url.searchParams.set("status", status2);
13412
- url.searchParams.set("limit", String(limit));
13413
- if (priority) url.searchParams.set("priority", priority);
13414
- const data = await requestJson(url.toString());
13415
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13416
- }
13417
- );
13418
- }
13419
- function registerGetFeatureRequest(server) {
13420
- server.registerTool(
13421
- "get_feature_request",
13422
- {
13423
- title: "Get Feature Request",
13424
- description: "AskExe-internal only: fetch one customer feature request with full payload.",
13425
- inputSchema: { id: z95.string().min(8) }
13426
- },
13427
- async ({ id }) => {
13428
- const data = await requestJson(`${featureEndpoint()}/${encodeURIComponent(id)}`);
13429
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13430
- }
13431
- );
13432
- }
13433
- function registerTriageFeatureRequest(server) {
13434
- server.registerTool(
13435
- "triage_feature_request",
13436
- {
13437
- title: "Triage Feature Request",
13438
- description: "AskExe-internal only: update feature request status, response notes, and version metadata.",
13439
- inputSchema: {
13440
- id: z95.string().min(8),
13441
- status: FEATURE_STATUS.optional(),
13442
- response_notes: z95.string().optional(),
13443
- add_note: z95.string().optional().describe("Append a timestamped progress note without changing status or replacing response_notes"),
13444
- target_version: z95.string().optional(),
13445
- shipped_version: z95.string().optional()
13446
- }
13447
- },
13448
- async ({ id, status: status2, response_notes, add_note, target_version, shipped_version }) => {
13449
- const effectiveStatus = shipped_version && !status2 ? "shipped" : status2;
13450
- const data = await requestJson(`${featureEndpoint()}/${encodeURIComponent(id)}`, {
13451
- method: "PATCH",
13452
- body: JSON.stringify({ status: effectiveStatus, response_notes, add_note, target_version, shipped_version })
13453
- });
13454
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13455
- }
13456
- );
13457
- }
13458
- var REVIEW_STATUS = z95.enum(["open", "in_review", "approved", "merged", "closed", "rejected"]);
13459
- function reviewEndpoint() {
13460
- return endpoint().replace(/\/bug-reports\/?$/, "/reviews");
13461
- }
13462
- function registerListReviews(server) {
13463
- server.registerTool(
13464
- "list_reviews",
13465
- {
13466
- title: "List Reviews",
13467
- description: "AskExe-internal only: list incoming review requests from the support inbox.",
13468
- inputSchema: {
13469
- status: z95.enum(["all", "open", "in_review", "approved", "merged", "closed", "rejected"]).default("open"),
13470
- priority: z95.enum(["p0", "p1", "p2", "p3"]).optional(),
13471
- limit: z95.number().int().min(1).max(100).default(25)
13472
- }
13473
- },
13474
- async ({ status: status2, priority, limit }) => {
13475
- const url = new URL(reviewEndpoint());
13476
- url.searchParams.set("status", status2);
13477
- url.searchParams.set("limit", String(limit));
13478
- if (priority) url.searchParams.set("priority", priority);
13479
- const data = await requestJson(url.toString());
13480
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13481
- }
13482
- );
13483
- }
13484
- function registerGetReview(server) {
13485
- server.registerTool(
13486
- "get_review",
13487
- {
13488
- title: "Get Review",
13489
- description: "AskExe-internal only: fetch one review with full payload.",
13490
- inputSchema: { id: z95.string().min(8) }
13491
- },
13492
- async ({ id }) => {
13493
- const data = await requestJson(`${reviewEndpoint()}/${encodeURIComponent(id)}`);
13494
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13495
- }
13496
- );
13497
- }
13498
- function registerTriageReview(server) {
13499
- server.registerTool(
13500
- "triage_review",
13501
- {
13502
- title: "Triage Review",
13503
- description: "AskExe-internal only: update review status, response notes, and resolution.",
13504
- inputSchema: {
13505
- id: z95.string().min(8),
13506
- status: REVIEW_STATUS.optional(),
13507
- response_notes: z95.string().optional(),
13508
- add_note: z95.string().optional().describe("Append a timestamped progress note without changing status or replacing response_notes"),
13509
- resolution: z95.string().optional(),
13510
- pr_url: z95.string().optional()
13511
- }
13512
- },
13513
- async ({ id, status: status2, response_notes, add_note, resolution, pr_url }) => {
13514
- const data = await requestJson(`${reviewEndpoint()}/${encodeURIComponent(id)}`, {
13515
- method: "PATCH",
13516
- body: JSON.stringify({ status: status2, response_notes, add_note, resolution, pr_url })
13517
- });
13518
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13519
- }
13520
- );
13521
- }
13522
-
13523
13220
  // src/mcp/tools/decision.ts
13524
- import { z as z96 } from "zod";
13221
+ import { z as z95 } from "zod";
13525
13222
  function buildHandlers6() {
13526
13223
  const tools = /* @__PURE__ */ new Map();
13527
13224
  const fake = {
@@ -13545,12 +13242,12 @@ function registerDecision(server) {
13545
13242
  title: "Decision",
13546
13243
  description: "Store or retrieve authoritative decisions. Actions: store (persist a decision by domain), get (look up a decision by domain/query).",
13547
13244
  inputSchema: {
13548
- action: z96.enum(["store", "get"]).describe("Decision operation"),
13549
- domain: z96.string().optional().describe("Decision domain (e.g. 'architecture', 'hiring')"),
13550
- decision: z96.string().optional().describe("Decision text for action=store"),
13551
- rationale: z96.string().optional().describe("Why this decision was made (action=store)"),
13552
- query: z96.string().optional().describe("Search query for action=get"),
13553
- limit: z96.coerce.number().optional().describe("Max results for action=get")
13245
+ action: z95.enum(["store", "get"]).describe("Decision operation"),
13246
+ domain: z95.string().optional().describe("Decision domain (e.g. 'architecture', 'hiring')"),
13247
+ decision: z95.string().optional().describe("Decision text for action=store"),
13248
+ rationale: z95.string().optional().describe("Why this decision was made (action=store)"),
13249
+ query: z95.string().optional().describe("Search query for action=get"),
13250
+ limit: z95.coerce.number().optional().describe("Max results for action=get")
13554
13251
  }
13555
13252
  },
13556
13253
  async (input, extra) => {
@@ -13566,7 +13263,7 @@ function registerDecision(server) {
13566
13263
  }
13567
13264
 
13568
13265
  // src/mcp/tools/session.ts
13569
- import { z as z97 } from "zod";
13266
+ import { z as z96 } from "zod";
13570
13267
  function buildHandlers7() {
13571
13268
  const tools = /* @__PURE__ */ new Map();
13572
13269
  const fake = {
@@ -13614,17 +13311,17 @@ function registerSession(server) {
13614
13311
  title: "Session",
13615
13312
  description: "Session tools. Actions: events (session event log), last_response (most recent assistant text), set_mode (enter explore or task mode), get_mode (query current mode and active explore sessions).",
13616
13313
  inputSchema: {
13617
- action: z97.enum(["events", "last_response", "set_mode", "get_mode"]).describe("Session operation"),
13618
- session_id: z97.string().optional().describe("Session ID for action=events"),
13619
- limit: z97.coerce.number().optional().describe("Max events for action=events"),
13314
+ action: z96.enum(["events", "last_response", "set_mode", "get_mode"]).describe("Session operation"),
13315
+ session_id: z96.string().optional().describe("Session ID for action=events"),
13316
+ limit: z96.coerce.number().optional().describe("Max events for action=events"),
13620
13317
  // set_mode params
13621
- mode: z97.enum(["explore", "task"]).optional().describe(
13318
+ mode: z96.enum(["explore", "task"]).optional().describe(
13622
13319
  "Mode for action=set_mode. 'explore' = divergent, no deliverable, nudges suppressed. 'task' = default convergent behaviour (resets any active explore session)."
13623
13320
  ),
13624
- duration_minutes: z97.number().optional().describe(
13321
+ duration_minutes: z96.number().optional().describe(
13625
13322
  `How long to stay in explore mode in minutes (action=set_mode, mode=explore). Default: ${DEFAULT_EXPLORE_DURATION_MS / 6e4} minutes (1 hour).`
13626
13323
  ),
13627
- notes: z97.string().optional().describe("Optional notes about this explore session (action=set_mode)")
13324
+ notes: z96.string().optional().describe("Optional notes about this explore session (action=set_mode)")
13628
13325
  }
13629
13326
  },
13630
13327
  async (input, extra) => {
@@ -13689,14 +13386,14 @@ All active explore sessions (${active.length}):
13689
13386
  }
13690
13387
 
13691
13388
  // src/mcp/tools/support-consolidated.ts
13692
- import { z as z99 } from "zod";
13389
+ import { z as z98 } from "zod";
13693
13390
 
13694
13391
  // src/mcp/tools/create-review.ts
13695
- import { z as z98 } from "zod";
13392
+ import { z as z97 } from "zod";
13696
13393
  import crypto6 from "crypto";
13697
13394
  import { mkdir as mkdir4, writeFile as writeFile6 } from "fs/promises";
13698
13395
  import path17 from "path";
13699
- var PRIORITY2 = z98.enum(["p0", "p1", "p2", "p3"]);
13396
+ var PRIORITY2 = z97.enum(["p0", "p1", "p2", "p3"]);
13700
13397
  function slugify3(input) {
13701
13398
  return input.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 80) || "review";
13702
13399
  }
@@ -13725,15 +13422,15 @@ function buildMarkdown3(input) {
13725
13422
  async function maybeSendUpstream3(payload) {
13726
13423
  const config = await loadConfig();
13727
13424
  const routerUrl = process.env.API_ROUTER_URL?.replace(/\/+$/, "");
13728
- const endpoint2 = config.support?.reviewEndpoint || process.env.EXE_REVIEW_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/reviews` : "https://api.askexe.com/v1/support/reviews");
13425
+ const endpoint = config.support?.reviewEndpoint || process.env.EXE_REVIEW_ENDPOINT || (routerUrl ? `${routerUrl}/v1/support/reviews` : "https://api.askexe.com/v1/support/reviews");
13729
13426
  const token = config.support?.reviewToken || process.env.EXE_REVIEW_TOKEN;
13730
13427
  const licenseKey = loadLicense() || process.env.EXE_LICENSE_KEY || config.cloud?.apiKey;
13731
13428
  const licenseToken = readCachedLicenseToken();
13732
- if (!endpoint2) {
13429
+ if (!endpoint) {
13733
13430
  return "not_configured";
13734
13431
  }
13735
13432
  try {
13736
- const parsed = new URL(endpoint2);
13433
+ const parsed = new URL(endpoint);
13737
13434
  if (parsed.protocol !== "https:" && !["localhost", "127.0.0.1", "::1"].includes(parsed.hostname)) {
13738
13435
  return "failed: insecure endpoint rejected";
13739
13436
  }
@@ -13746,7 +13443,10 @@ async function maybeSendUpstream3(payload) {
13746
13443
  ...licenseToken ? { "x-exe-license-token": licenseToken } : {},
13747
13444
  ...supportAdminHeaders(config)
13748
13445
  },
13749
- body: JSON.stringify(payload),
13446
+ // Egress redaction gate (dc16fee4) — redact secrets from description +
13447
+ // rendered markdown before the network send. No disk outbox for reviews,
13448
+ // so this direct send is the only path.
13449
+ body: sanitizedUpstreamBody(payload, "create-review"),
13750
13450
  signal: AbortSignal.timeout(1e4)
13751
13451
  });
13752
13452
  if (!response.ok) return `failed: HTTP ${response.status}`;
@@ -13762,15 +13462,15 @@ function registerCreateReview(server) {
13762
13462
  title: "Create Review",
13763
13463
  description: "File a review request (code review, self-improvement findings, PR review needs). Writes a local report, stores memory, and optionally sends to AskExe support.",
13764
13464
  inputSchema: {
13765
- title: z98.string().min(3).describe("Short descriptive title"),
13766
- description: z98.string().optional().describe("What needs review and why"),
13465
+ title: z97.string().min(3).describe("Short descriptive title"),
13466
+ description: z97.string().optional().describe("What needs review and why"),
13767
13467
  priority: PRIORITY2.default("p1").describe("p0 critical -> p3 low"),
13768
- source: z98.string().optional().describe("Source: self-improve, manual, ci, etc."),
13769
- pr_url: z98.string().optional().describe("PR URL if applicable"),
13770
- product: z98.string().optional().describe("Product: exe-os (default), exe-create, exe-wiki, exe-gateway, exe-crm, exe-build"),
13771
- package_version: z98.string().optional().describe("Installed package version"),
13772
- project_name: z98.string().optional().describe("Project/customer context"),
13773
- send_upstream: z98.boolean().default(false).describe("Attempt to POST to configured AskExe support endpoint (disabled by default \u2014 review route not yet live)")
13468
+ source: z97.string().optional().describe("Source: self-improve, manual, ci, etc."),
13469
+ pr_url: z97.string().optional().describe("PR URL if applicable"),
13470
+ product: z97.string().optional().describe("Product: exe-os (default), exe-create, exe-wiki, exe-gateway, exe-crm, exe-build"),
13471
+ package_version: z97.string().optional().describe("Installed package version"),
13472
+ project_name: z97.string().optional().describe("Project/customer context"),
13473
+ send_upstream: z97.boolean().default(false).describe("Attempt to POST to configured AskExe support endpoint (disabled by default \u2014 review route not yet live)")
13774
13474
  }
13775
13475
  },
13776
13476
  async ({
@@ -13926,7 +13626,7 @@ function registerSupportConsolidated(server) {
13926
13626
  title: "Support",
13927
13627
  description: "Bug reports, feature requests, reviews, and support system. Actions: create_bug, create_feature, create_review, update_bug, update_feature, list_my_bugs, list_my_features, list_my_reviews, list_bugs, get_bug, add_comment, get_comments, triage_bug, list_features, get_feature, triage_feature, list_reviews, get_review, triage_review, health, test. Use 'product' param to file bugs for any AskExe product.",
13928
13628
  inputSchema: {
13929
- action: z99.enum([
13629
+ action: z98.enum([
13930
13630
  "create_bug",
13931
13631
  "create_feature",
13932
13632
  "create_review",
@@ -13949,40 +13649,40 @@ function registerSupportConsolidated(server) {
13949
13649
  "health",
13950
13650
  "test"
13951
13651
  ]).describe("Support operation"),
13952
- title: z99.string().optional().describe("Bug/feature title"),
13953
- description: z99.string().optional().describe("Bug/feature description"),
13954
- steps_to_reproduce: z99.string().optional().describe("Steps to reproduce (bugs)"),
13955
- expected_behavior: z99.string().optional().describe("Expected behavior (bugs)"),
13956
- actual_behavior: z99.string().optional().describe("Actual behavior (bugs)"),
13957
- severity: z99.string().optional().describe("Severity: p0/p1/p2/p3"),
13958
- product: z99.string().optional().describe("Product (create_bug default exe-os; also re-labels a bug via update_bug, admin only): exe-os, exe-create, exe-wiki, exe-gateway, exe-crm, exe-build, exe-chat, exe-auth, exe-monitor, exe-db, exe-erp"),
13959
- use_case: z99.string().optional().describe("Use case (features)"),
13960
- proposed_solution: z99.string().optional().describe("Proposed solution (features)"),
13961
- priority: z99.string().optional().describe("Priority (features)"),
13962
- on_behalf_of_email: z99.string().email().optional().describe("ADMIN ONLY: file this request owned by another customer's license email; ignored unless caller holds the support admin token (create_bug/create_feature)"),
13963
- id: z99.string().optional().describe("Bug/feature ID for get/triage/add_comment/get_comments"),
13964
- comment: z99.string().optional().describe("Comment text to append to a bug report thread (add_comment)"),
13965
- status: z99.string().optional().describe("Filter by status"),
13966
- classification: z99.string().optional().describe("Triage classification"),
13967
- resolution: z99.string().optional().describe("Triage resolution"),
13968
- notes: z99.string().optional().describe("Triage notes (mapped to triage_notes for bug/feature triage)"),
13969
- triage_notes: z99.string().optional().describe("Triage notes (legacy field name)"),
13970
- linked_task_id: z99.string().optional().describe("Linked task ID for triage"),
13971
- linked_commit: z99.string().optional().describe("Linked commit hash for triage"),
13972
- fixed_version: z99.string().optional().describe("Version that fixes this bug"),
13973
- shipped_version: z99.string().optional().describe("Version that ships this feature (features only)"),
13974
- add_evidence: z99.string().optional().describe("Owner self-service: additional evidence (logs, repro, stack traces) for update_bug"),
13975
- reopen_request: z99.boolean().optional().describe("Owner self-service: request a reopen on a recurring fixed bug (update_bug)"),
13976
- reopen_reason: z99.string().optional().describe("Owner self-service: why the bug should be reopened (update_bug)"),
13977
- attachments: z99.array(z99.object({
13978
- filename: z99.string().min(1).describe("Filename for the attachment"),
13979
- content: z99.string().min(1).describe("File content \u2014 plain text")
13652
+ title: z98.string().optional().describe("Bug/feature title"),
13653
+ description: z98.string().optional().describe("Bug/feature description"),
13654
+ steps_to_reproduce: z98.string().optional().describe("Steps to reproduce (bugs)"),
13655
+ expected_behavior: z98.string().optional().describe("Expected behavior (bugs)"),
13656
+ actual_behavior: z98.string().optional().describe("Actual behavior (bugs)"),
13657
+ severity: z98.string().optional().describe("Severity: p0/p1/p2/p3"),
13658
+ product: z98.string().optional().describe("Product (create_bug default exe-os; also re-labels a bug via update_bug, admin only): exe-os, exe-create, exe-wiki, exe-gateway, exe-crm, exe-build, exe-chat, exe-auth, exe-monitor, exe-db, exe-erp"),
13659
+ use_case: z98.string().optional().describe("Use case (features)"),
13660
+ proposed_solution: z98.string().optional().describe("Proposed solution (features)"),
13661
+ priority: z98.string().optional().describe("Priority (features)"),
13662
+ on_behalf_of_email: z98.string().email().optional().describe("ADMIN ONLY: file this request owned by another customer's license email; ignored unless caller holds the support admin token (create_bug/create_feature)"),
13663
+ id: z98.string().optional().describe("Bug/feature ID for get/triage/add_comment/get_comments"),
13664
+ comment: z98.string().optional().describe("Comment text to append to a bug report thread (add_comment)"),
13665
+ status: z98.string().optional().describe("Filter by status"),
13666
+ classification: z98.string().optional().describe("Triage classification"),
13667
+ resolution: z98.string().optional().describe("Triage resolution"),
13668
+ notes: z98.string().optional().describe("Triage notes (mapped to triage_notes for bug/feature triage)"),
13669
+ triage_notes: z98.string().optional().describe("Triage notes (legacy field name)"),
13670
+ linked_task_id: z98.string().optional().describe("Linked task ID for triage"),
13671
+ linked_commit: z98.string().optional().describe("Linked commit hash for triage"),
13672
+ fixed_version: z98.string().optional().describe("Version that fixes this bug"),
13673
+ shipped_version: z98.string().optional().describe("Version that ships this feature (features only)"),
13674
+ add_evidence: z98.string().optional().describe("Owner self-service: additional evidence (logs, repro, stack traces) for update_bug"),
13675
+ reopen_request: z98.boolean().optional().describe("Owner self-service: request a reopen on a recurring fixed bug (update_bug)"),
13676
+ reopen_reason: z98.string().optional().describe("Owner self-service: why the bug should be reopened (update_bug)"),
13677
+ attachments: z98.array(z98.object({
13678
+ filename: z98.string().min(1).describe("Filename for the attachment"),
13679
+ content: z98.string().min(1).describe("File content \u2014 plain text")
13980
13680
  })).optional().describe("File attachments for bug reports / feature requests (diffs, logs, config snippets)"),
13981
- source: z99.string().optional().describe("Review source: self-improve, manual, ci"),
13982
- pr_url: z99.string().optional().describe("PR URL (reviews)"),
13983
- review_resolution: z99.string().optional().describe("Resolution text (reviews)"),
13984
- limit: z99.coerce.number().optional().describe("Max results per page (up to 500)"),
13985
- offset: z99.coerce.number().optional().describe("Number of results to skip for pagination (list_my_bugs/list_my_features). Use next_offset from a prior response.")
13681
+ source: z98.string().optional().describe("Review source: self-improve, manual, ci"),
13682
+ pr_url: z98.string().optional().describe("PR URL (reviews)"),
13683
+ review_resolution: z98.string().optional().describe("Resolution text (reviews)"),
13684
+ limit: z98.coerce.number().optional().describe("Max results per page (up to 500)"),
13685
+ offset: z98.coerce.number().optional().describe("Number of results to skip for pagination (list_my_bugs/list_my_features). Use next_offset from a prior response.")
13986
13686
  }
13987
13687
  },
13988
13688
  async (input, extra) => {
@@ -14068,7 +13768,7 @@ function registerSupportConsolidated(server) {
14068
13768
  }
14069
13769
 
14070
13770
  // src/mcp/tools/diagnostics.ts
14071
- import { z as z100 } from "zod";
13771
+ import { z as z99 } from "zod";
14072
13772
  function buildHandlers9() {
14073
13773
  const tools = /* @__PURE__ */ new Map();
14074
13774
  const fake = {
@@ -14089,21 +13789,21 @@ function registerDiagnostics(server) {
14089
13789
  title: "Diagnostics",
14090
13790
  description: `System diagnostics and admin operations. Actions: ${toolNames.join(", ")}. Covers health checks, update status, cloud status, key management, employee rename, semantic tool discovery (tool_search), identity drift detection (drift), agent liveness monitoring (agent_liveness), agent memory reassignment (merge_agent_memories), steward identity gate (steward_check, steward_audit_log, steward_override), daemon restart forensics (daemon_restarts \u2014 'why did the daemon restart?': restart-cause breakdown, slowest-timer leaderboard, event-loop-block frequency), and orchestration-health visibility: spawn_failures ('why did dispatch fail?': tmux spawn fail count + cause breakdown path_not_found/claude_launch_failed/timeout + success-vs-fail ratio), orchestration_health ('is the box healthy / is the spiral happening?': load/core, event-loop lag, direct-SQLite-fallback count, event-loop blocks), and work_map ('who's doing what / who died and why?': live sessions \xD7 role \xD7 task \xD7 worktree flag, plus recent session deaths with cause/load + worktree violations).`,
14091
13791
  inputSchema: {
14092
- action: z100.string().describe(`Diagnostic operation: ${toolNames.join(", ")}`),
13792
+ action: z99.string().describe(`Diagnostic operation: ${toolNames.join(", ")}`),
14093
13793
  // Pass-through params used by various sub-tools
14094
- agent_id: z100.string().optional().describe("Agent to probe (drift). Defaults to all agents."),
14095
- name: z100.string().optional().describe("Employee name (rename_employee)"),
14096
- new_name: z100.string().optional().describe("New employee name (rename_employee)"),
14097
- query: z100.string().optional().describe("Search/filter query, or natural language for tool_search"),
14098
- format: z100.string().optional().describe("Output format"),
14099
- limit: z100.coerce.number().int().min(1).max(100).optional().describe("Max results for tool_search (default 20)"),
14100
- from_agent_id: z100.string().optional().describe("Source agent ID to merge from (merge_agent_memories)"),
14101
- to_agent_id: z100.string().optional().describe("Target agent ID to merge into (merge_agent_memories)"),
14102
- dry_run: z100.boolean().optional().default(true).describe("Preview mode \u2014 show count without changing (merge_agent_memories). Default: true"),
13794
+ agent_id: z99.string().optional().describe("Agent to probe (drift). Defaults to all agents."),
13795
+ name: z99.string().optional().describe("Employee name (rename_employee)"),
13796
+ new_name: z99.string().optional().describe("New employee name (rename_employee)"),
13797
+ query: z99.string().optional().describe("Search/filter query, or natural language for tool_search"),
13798
+ format: z99.string().optional().describe("Output format"),
13799
+ limit: z99.coerce.number().int().min(1).max(100).optional().describe("Max results for tool_search (default 20)"),
13800
+ from_agent_id: z99.string().optional().describe("Source agent ID to merge from (merge_agent_memories)"),
13801
+ to_agent_id: z99.string().optional().describe("Target agent ID to merge into (merge_agent_memories)"),
13802
+ dry_run: z99.boolean().optional().default(true).describe("Preview mode \u2014 show count without changing (merge_agent_memories). Default: true"),
14103
13803
  // Steward params (absorbed from steward tool)
14104
- operation: z100.string().optional().describe("Operation name for steward_check/steward_override"),
14105
- target: z100.string().optional().describe("Target resource for steward_check/steward_override"),
14106
- reason: z100.string().optional().describe("Override reason for steward_override")
13804
+ operation: z99.string().optional().describe("Operation name for steward_check/steward_override"),
13805
+ target: z99.string().optional().describe("Target resource for steward_check/steward_override"),
13806
+ reason: z99.string().optional().describe("Override reason for steward_override")
14107
13807
  }
14108
13808
  },
14109
13809
  async (input, extra) => {
@@ -14268,7 +13968,7 @@ async function handleMergeAgentMemories(input) {
14268
13968
  }
14269
13969
  async function handleSpawnFailures() {
14270
13970
  try {
14271
- const { getOrchestrationMetrics } = await import("./orchestration-events-5SIJOE4H.js");
13971
+ const { getOrchestrationMetrics } = await import("./orchestration-events-ZG7O4HRY.js");
14272
13972
  const metrics = await getOrchestrationMetrics();
14273
13973
  const c = metrics.counts;
14274
13974
  const attempted = c.tmuxSpawnAttempted;
@@ -14370,7 +14070,7 @@ async function handleOrchestrationHealth() {
14370
14070
  async function handleWorkMap() {
14371
14071
  try {
14372
14072
  const { getAgentLivenessReport } = await import("./agent-heartbeat-I5UPGXAU.js");
14373
- const { classifyRole } = await import("./session-kill-telemetry-CZSPN5V6.js");
14073
+ const { classifyRole } = await import("./session-kill-telemetry-6YDGEF27.js");
14374
14074
  const { buildSessionDeathSummary } = await import("./orchestration-health-read-EJWVUARG.js");
14375
14075
  const { getPaneCwd } = await import("./lib/tmux-status.js");
14376
14076
  const live = getAgentLivenessReport();
@@ -14505,7 +14205,7 @@ async function handleDrift(input) {
14505
14205
  }
14506
14206
  async function handleSteward(action, input) {
14507
14207
  const gate = new StewardGate();
14508
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-EC6M7KTX.js");
14208
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-AIQP4DFL.js");
14509
14209
  const inputAgent = input.agent_id;
14510
14210
  const operation = input.operation;
14511
14211
  const target = input.target;
@@ -14553,7 +14253,7 @@ async function handleSteward(action, input) {
14553
14253
  }
14554
14254
 
14555
14255
  // src/mcp/tools/dreaming.ts
14556
- import { z as z101 } from "zod";
14256
+ import { z as z100 } from "zod";
14557
14257
  function registerDreaming(server) {
14558
14258
  server.registerTool(
14559
14259
  "dreaming",
@@ -14561,10 +14261,10 @@ function registerDreaming(server) {
14561
14261
  title: "Dreaming",
14562
14262
  description: "Self-improvement loop \u2014 reviews recent work, identifies patterns, proposes behavior changes, and detects identity drift. Actions: run (execute dream cycle), status (last cycle result), history (past cycles).",
14563
14263
  inputSchema: {
14564
- action: z101.enum(["run", "status", "history"]).describe("Action to perform"),
14565
- agent_id: z101.string().optional().describe("Agent to analyze. Defaults to calling agent."),
14566
- hours: z101.coerce.number().min(1).max(720).optional().describe("Lookback window in hours (run). Default 24."),
14567
- limit: z101.coerce.number().int().min(1).max(50).optional().describe("Max results for history. Default 10.")
14264
+ action: z100.enum(["run", "status", "history"]).describe("Action to perform"),
14265
+ agent_id: z100.string().optional().describe("Agent to analyze. Defaults to calling agent."),
14266
+ hours: z100.coerce.number().min(1).max(720).optional().describe("Lookback window in hours (run). Default 24."),
14267
+ limit: z100.coerce.number().int().min(1).max(50).optional().describe("Max results for history. Default 10.")
14568
14268
  }
14569
14269
  },
14570
14270
  async ({ action, agent_id, hours, limit }) => {
@@ -14687,7 +14387,7 @@ ${String(row.raw_text)}`
14687
14387
  }
14688
14388
 
14689
14389
  // src/mcp/tools/steward.ts
14690
- import { z as z102 } from "zod";
14390
+ import { z as z101 } from "zod";
14691
14391
  function errorResult11(text5) {
14692
14392
  return { content: [{ type: "text", text: text5 }], isError: true };
14693
14393
  }
@@ -14699,12 +14399,12 @@ function registerSteward(server) {
14699
14399
  title: "Steward Identity Gate",
14700
14400
  description: "Constitutional check before destructive operations. action=check: verify agent authority for an operation. action=audit_log: query the audit trail. action=override: coordinator-only bypass with reason.",
14701
14401
  inputSchema: {
14702
- action: z102.enum(["check", "audit_log", "override"]).describe("Steward operation to perform"),
14703
- agent: z102.string().optional().describe("Agent to check (defaults to calling agent for action=check)"),
14704
- operation: z102.string().optional().describe("Operation name (required for check/override)"),
14705
- target: z102.string().optional().describe("Target resource (required for check/override)"),
14706
- reason: z102.string().optional().describe("Override reason (required for action=override)"),
14707
- limit: z102.number().optional().describe("Max audit entries to return (default: 50)")
14402
+ action: z101.enum(["check", "audit_log", "override"]).describe("Steward operation to perform"),
14403
+ agent: z101.string().optional().describe("Agent to check (defaults to calling agent for action=check)"),
14404
+ operation: z101.string().optional().describe("Operation name (required for check/override)"),
14405
+ target: z101.string().optional().describe("Target resource (required for check/override)"),
14406
+ reason: z101.string().optional().describe("Override reason (required for action=override)"),
14407
+ limit: z101.number().optional().describe("Max audit entries to return (default: 50)")
14708
14408
  }
14709
14409
  },
14710
14410
  async (input) => {
@@ -14787,7 +14487,7 @@ function registerSteward(server) {
14787
14487
  }
14788
14488
 
14789
14489
  // src/mcp/tools/resonance.ts
14790
- import { z as z103 } from "zod";
14490
+ import { z as z102 } from "zod";
14791
14491
  function text4(content, isError = false) {
14792
14492
  return { content: [{ type: "text", text: content }], ...isError ? { isError: true } : {} };
14793
14493
  }
@@ -14796,14 +14496,14 @@ function registerResonance(server) {
14796
14496
  title: "Resonance Network",
14797
14497
  description: "Co-activation network queries. Actions: hot_pairs (top co-activated memory pairs), neighbors (co-activation neighbors for a specific memory).",
14798
14498
  inputSchema: {
14799
- action: z103.enum(["hot_pairs", "neighbors"]).describe("Resonance query type"),
14800
- memory_id: z103.string().optional().describe("Memory ID for neighbors action"),
14801
- entity_id: z103.string().optional().describe("Deprecated alias for memory_id on neighbors action"),
14802
- limit: z103.number().optional().describe("Max results (default 20)")
14499
+ action: z102.enum(["hot_pairs", "neighbors"]).describe("Resonance query type"),
14500
+ memory_id: z102.string().optional().describe("Memory ID for neighbors action"),
14501
+ entity_id: z102.string().optional().describe("Deprecated alias for memory_id on neighbors action"),
14502
+ limit: z102.number().optional().describe("Max results (default 20)")
14803
14503
  }
14804
14504
  }, async ({ action, memory_id, entity_id, limit }) => {
14805
14505
  try {
14806
- const { getHotPairs, getCoActivationNeighbors } = await import("./co-activation-XMPHKGHR.js");
14506
+ const { getHotPairs, getCoActivationNeighbors } = await import("./co-activation-QI5BK4RT.js");
14807
14507
  if (action === "hot_pairs") {
14808
14508
  const pairs = await getHotPairs(limit ?? 20);
14809
14509
  if (pairs.length === 0) return text4("No co-activation data yet. Pairs are recorded as memories are accessed together in searches.");
@@ -15217,7 +14917,7 @@ ${err.stack ?? ""}` : String(err);
15217
14917
  gate("registerSupportTools", registerSupportTools);
15218
14918
  const hasAdminToken = !!(process.env.ASKEXE_SUPPORT_ADMIN_TOKEN || process.env.EXE_SUPPORT_ADMIN_TOKEN || (() => {
15219
14919
  try {
15220
- const c = JSON.parse(readFileSync8(join5(process.env.EXE_OS_DIR ?? join5(homedir5(), ".exe-os"), "config.json"), "utf-8"));
14920
+ const c = JSON.parse(readFileSync7(join4(process.env.EXE_OS_DIR ?? join4(homedir4(), ".exe-os"), "config.json"), "utf-8"));
15221
14921
  return c.support?.adminToken || c.support?.admin_token;
15222
14922
  } catch {
15223
14923
  return "";