@askexenow/exe-os 0.9.319 → 0.9.322

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 (294) hide show
  1. package/deploy/compose/docker-compose.yml +1 -1
  2. package/deploy/stack-manifests/v0.9.json +110 -2
  3. package/dist/{active-agent-EA2Q3KYR.js → active-agent-M5NJFEBM.js} +3 -3
  4. package/dist/{active-agent-XIPGXSQA.js → active-agent-SHM4QSRJ.js} +3 -3
  5. package/dist/{agentic-ontology-7ZUMZC2O.js → agentic-ontology-HQKCU7LG.js} +1 -1
  6. package/dist/{backfill-metadata-7RO5PSMN.js → backfill-metadata-CXWFCTBO.js} +4 -4
  7. package/dist/{behaviors-OEGZD5DH.js → behaviors-J47D342W.js} +5 -5
  8. package/dist/bin/agentic-ontology-backfill.js +5 -5
  9. package/dist/bin/agentic-reflection-backfill.js +6 -6
  10. package/dist/bin/agentic-semantic-label.js +5 -5
  11. package/dist/bin/backfill-conversations.js +6 -6
  12. package/dist/bin/backfill-responses.js +6 -6
  13. package/dist/bin/backfill-vectors.js +8 -8
  14. package/dist/bin/bulk-sync-postgres.js +12 -12
  15. package/dist/bin/cc-doctor.js +4 -4
  16. package/dist/bin/cleanup-stale-review-tasks.js +12 -12
  17. package/dist/bin/cli.js +56 -16
  18. package/dist/bin/deferred-daemon-restart.js +67 -67
  19. package/dist/bin/exe-agent-config.js +3 -3
  20. package/dist/bin/exe-agent.js +8 -8
  21. package/dist/bin/exe-assign.js +8 -8
  22. package/dist/bin/exe-boot.js +55 -30
  23. package/dist/bin/exe-call.js +4 -4
  24. package/dist/bin/exe-cloud.js +12 -12
  25. package/dist/bin/exe-config-dump.js +3 -3
  26. package/dist/bin/exe-dispatch.js +12 -12
  27. package/dist/bin/exe-doctor.js +4 -4
  28. package/dist/bin/exe-export-behaviors.js +7 -7
  29. package/dist/bin/exe-forget.js +6 -6
  30. package/dist/bin/exe-gateway.js +7 -7
  31. package/dist/bin/exe-healthcheck.js +4 -4
  32. package/dist/bin/exe-heartbeat.js +12 -12
  33. package/dist/bin/exe-kill.js +15 -15
  34. package/dist/bin/exe-launch-agent.js +33 -22
  35. package/dist/bin/exe-new-employee.js +8 -8
  36. package/dist/bin/exe-pending-messages.js +13 -13
  37. package/dist/bin/exe-pending-notifications.js +12 -12
  38. package/dist/bin/exe-pending-reviews.js +12 -12
  39. package/dist/bin/exe-rename.js +4 -4
  40. package/dist/bin/exe-review.js +14 -14
  41. package/dist/bin/exe-search.js +5 -5
  42. package/dist/bin/exe-session-cleanup.js +18 -18
  43. package/dist/bin/exe-settings.js +13 -13
  44. package/dist/bin/exe-start-codex.js +12 -12
  45. package/dist/bin/exe-start-opencode.js +8 -8
  46. package/dist/bin/exe-status.js +13 -13
  47. package/dist/bin/exe-support.js +3 -3
  48. package/dist/bin/exe-team.js +3 -3
  49. package/dist/bin/git-sweep.js +13 -13
  50. package/dist/bin/graph-backfill.js +4 -4
  51. package/dist/bin/graph-export.js +5 -5
  52. package/dist/bin/import-history.js +7 -7
  53. package/dist/bin/install-launchd.js +2 -2
  54. package/dist/bin/install.js +70 -70
  55. package/dist/bin/intercom-check.js +4 -4
  56. package/dist/bin/mcp-sessions.js +2 -2
  57. package/dist/bin/orchestration-metrics.js +4 -4
  58. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  59. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  60. package/dist/bin/registry-proxy.js +7 -1
  61. package/dist/bin/scan-tasks.js +12 -12
  62. package/dist/bin/setup.js +1 -1
  63. package/dist/bin/shard-migrate.js +4 -4
  64. package/dist/bin/stack-update.js +4 -4
  65. package/dist/bin/vps-health-gate.js +1 -1
  66. package/dist/{capability-cards-4BONYCI4.js → capability-cards-H7H3MU74.js} +2 -2
  67. package/dist/{capacity-monitor-SV2Q7CMC.js → capacity-monitor-WAEHVBL7.js} +13 -13
  68. package/dist/{catchup-brief-5ULTVKSE.js → catchup-brief-L42STIDR.js} +15 -15
  69. package/dist/{chunk-LQWCIW4K.js → chunk-2GBGIXKH.js} +1 -1
  70. package/dist/{chunk-C7QYH2YN.js → chunk-3JW3ZXCP.js} +1 -1
  71. package/dist/{chunk-KF6NBYV4.js → chunk-3M73L663.js} +2 -2
  72. package/dist/{chunk-MRB2BXIB.js → chunk-4Z47UMMM.js} +10 -10
  73. package/dist/{chunk-VTHR4DPE.js → chunk-5ZNY7IZI.js} +5 -1
  74. package/dist/{chunk-UQOCHKPX.js → chunk-657AQEPY.js} +1 -1
  75. package/dist/{chunk-B2FUBD6Z.js → chunk-6IBUQBMY.js} +9 -9
  76. package/dist/{chunk-Q774HAGE.js → chunk-6N4LYEDI.js} +1 -1
  77. package/dist/{chunk-EPZWVXKI.js → chunk-6SXJZHRJ.js} +1 -1
  78. package/dist/{chunk-XLQH263A.js → chunk-6UQRJCKK.js} +2 -2
  79. package/dist/{chunk-3ZOWUUKR.js → chunk-6XM6PZXQ.js} +1 -1
  80. package/dist/{chunk-DZJZAHTB.js → chunk-7BZ6TOZN.js} +2 -2
  81. package/dist/{chunk-E3WZA2WU.js → chunk-7CUF27OT.js} +1 -1
  82. package/dist/{chunk-V4UKBUUA.js → chunk-7FBPLVHM.js} +1 -1
  83. package/dist/{chunk-OXGNFT3L.js → chunk-7SDS5VCL.js} +5 -5
  84. package/dist/{chunk-FJUQ5L5R.js → chunk-A3KUGBDP.js} +92 -1
  85. package/dist/{chunk-TWPYSILC.js → chunk-ABGDTMKC.js} +1 -1
  86. package/dist/{chunk-VUZRAEF3.js → chunk-AZL3EUR3.js} +64 -18
  87. package/dist/{chunk-TRXBT24O.js → chunk-BFHBHQFA.js} +5 -5
  88. package/dist/{chunk-F3P34OHU.js → chunk-C4BIZXKB.js} +1 -1
  89. package/dist/{chunk-DFSR3UUL.js → chunk-CHSRSESS.js} +1 -1
  90. package/dist/{chunk-7XGDTKHX.js → chunk-CMDC5D7S.js} +2 -2
  91. package/dist/{chunk-CNFUVZLM.js → chunk-CXXERHNC.js} +1 -1
  92. package/dist/{chunk-N3ZLLKBN.js → chunk-DGFIXJ4S.js} +3 -3
  93. package/dist/{chunk-JNUYJRQX.js → chunk-E32KARET.js} +4 -4
  94. package/dist/{chunk-RJHOFX72.js → chunk-EOPSIIEH.js} +1 -1
  95. package/dist/{chunk-CQ2T4A2D.js → chunk-EPBB2OD3.js} +2 -2
  96. package/dist/{chunk-YTHZTDXH.js → chunk-ERSFOJGC.js} +1 -1
  97. package/dist/{chunk-MM7EYJJ3.js → chunk-EVUXF2G4.js} +1 -1
  98. package/dist/{chunk-V2GI2MJJ.js → chunk-F5FAD2YR.js} +2 -2
  99. package/dist/{chunk-7S3SRDPQ.js → chunk-FANIBYUO.js} +2 -2
  100. package/dist/{chunk-LJTXVAG4.js → chunk-G5TP2D2U.js} +3 -3
  101. package/dist/{chunk-36CFV3ZF.js → chunk-GA76RGSP.js} +3 -3
  102. package/dist/{chunk-B3SFW4LY.js → chunk-GN3IWZDH.js} +612 -536
  103. package/dist/{chunk-PHUKD7VK.js → chunk-H2SD2EA7.js} +9 -9
  104. package/dist/{chunk-LRWB35MD.js → chunk-HGM6NZQH.js} +1 -1
  105. package/dist/{chunk-WXQVFMNV.js → chunk-HIOO7DZ2.js} +5 -5
  106. package/dist/{chunk-7I4HQYPL.js → chunk-HKSJSW2V.js} +1 -1
  107. package/dist/{chunk-RVF6JBHW.js → chunk-HV5CUDOE.js} +1 -1
  108. package/dist/{chunk-5L62XXNH.js → chunk-HWC5W34K.js} +1 -1
  109. package/dist/{chunk-JJ2FFUFV.js → chunk-JXEMAB4M.js} +1 -1
  110. package/dist/{chunk-2OOCPANV.js → chunk-KK4ZOYXJ.js} +1 -1
  111. package/dist/{chunk-K6GZMAIA.js → chunk-KL5WYWS3.js} +2 -2
  112. package/dist/{chunk-RREJ2QQ4.js → chunk-KLG53B63.js} +1 -1
  113. package/dist/{chunk-IPD5ZSOK.js → chunk-KXP3CUTL.js} +2 -2
  114. package/dist/{chunk-AKD6IKYS.js → chunk-LB77CSLO.js} +3 -3
  115. package/dist/{chunk-T5O2EBHU.js → chunk-LCZ55G5G.js} +7 -7
  116. package/dist/{chunk-TDV3XEGQ.js → chunk-LOE2N23P.js} +1 -1
  117. package/dist/{chunk-JPTBLJLS.js → chunk-MYMA23KC.js} +1 -1
  118. package/dist/{chunk-PJH7JUWD.js → chunk-NAHAOFTY.js} +3 -3
  119. package/dist/{chunk-HFDFQ7CB.js → chunk-NFM6VHL7.js} +1 -1
  120. package/dist/{chunk-PM6XSS6R.js → chunk-NYFPFOYM.js} +1 -1
  121. package/dist/{chunk-DRA2FYUQ.js → chunk-OFR7KQ37.js} +3 -3
  122. package/dist/{chunk-OC222BAQ.js → chunk-OI63OVCR.js} +1 -1
  123. package/dist/{chunk-ZOCW4TGA.js → chunk-ORC5AO7E.js} +1 -1
  124. package/dist/{chunk-WUF5MYA5.js → chunk-PISGLNV7.js} +9 -9
  125. package/dist/{chunk-LWBOSHSS.js → chunk-PLBDXCYZ.js} +95 -29
  126. package/dist/{chunk-RAKFEXCN.js → chunk-QNUHDEPI.js} +4 -4
  127. package/dist/{chunk-C54QKE4O.js → chunk-QQOH3I4A.js} +1 -1
  128. package/dist/{chunk-Q26VSIXA.js → chunk-QVFJCFNM.js} +24 -0
  129. package/dist/{chunk-C2DFOF7O.js → chunk-QYLDCPNG.js} +1 -1
  130. package/dist/{chunk-C5SALMKH.js → chunk-ROMB2HH4.js} +5 -5
  131. package/dist/{chunk-GRB44WRN.js → chunk-SENJA7BZ.js} +1 -1
  132. package/dist/{chunk-NODTWD7N.js → chunk-SQ5JWDJ2.js} +1 -1
  133. package/dist/{chunk-KHM3TKOM.js → chunk-T6AUMO5X.js} +1 -1
  134. package/dist/{chunk-YJYE6MMJ.js → chunk-TI6YX3L5.js} +2 -2
  135. package/dist/{chunk-WL5K3R7W.js → chunk-TKBWBHFV.js} +1 -1
  136. package/dist/{chunk-7PUNIH6G.js → chunk-V2ESQU3S.js} +1 -1
  137. package/dist/{chunk-YZTOGIV7.js → chunk-VSXGFHJY.js} +1 -1
  138. package/dist/{chunk-QLVMJGUQ.js → chunk-VY7345RO.js} +46 -7
  139. package/dist/{chunk-YSSJOTVN.js → chunk-WCCR5IFR.js} +2 -2
  140. package/dist/{chunk-4XAYC77M.js → chunk-WFHYAKEU.js} +1 -1
  141. package/dist/{chunk-IDMIGP53.js → chunk-WSYKLS2Y.js} +3 -3
  142. package/dist/{chunk-DTP4HXM3.js → chunk-X62GD6QW.js} +1 -1
  143. package/dist/{chunk-GBUFDCLX.js → chunk-XC7C3GQ2.js} +2 -2
  144. package/dist/{chunk-WG4PRZGT.js → chunk-XEBN5CPD.js} +5 -5
  145. package/dist/{chunk-36SS3TE7.js → chunk-XLNF3CIO.js} +3 -3
  146. package/dist/{chunk-MNUFLCHT.js → chunk-XP53WEXP.js} +3 -3
  147. package/dist/{cleanup-graph-garbage-IXYSUIUH.js → cleanup-graph-garbage-MX5JDTJA.js} +4 -4
  148. package/dist/{co-activation-BQRXOZN2.js → co-activation-K44LGZ7A.js} +2 -2
  149. package/dist/{co-occurrence-QPLSUQ4O.js → co-occurrence-N62HJTRP.js} +2 -2
  150. package/dist/{code-context-index-NQFP6ED5.js → code-context-index-6YQ3DGCN.js} +3 -3
  151. package/dist/completion-nudge-dedup-DBZF24MM.js +74 -0
  152. package/dist/{crdt-sync-VLSJH6LL.js → crdt-sync-BO76VVRX.js} +1 -1
  153. package/dist/{crm-webhook-IZYJXHSK.js → crm-webhook-UZLTHXAS.js} +2 -2
  154. package/dist/{cto-delegation-gate-FU4HGNSN.js → cto-delegation-gate-NVMRONA2.js} +11 -11
  155. package/dist/{daemon-orchestration-IXSMZXGO.js → daemon-orchestration-JI3RD5EZ.js} +15 -15
  156. package/dist/{db-backup-7GJYDSXA.js → db-backup-ITRADB2J.js} +1 -1
  157. package/dist/{doc-graph-extractor-U7XGZQ7T.js → doc-graph-extractor-L7YESUSI.js} +2 -2
  158. package/dist/{documents-U47VG24Q.js → documents-7BFXA6V3.js} +8 -8
  159. package/dist/{dreaming-VBI4BI6R.js → dreaming-NRTMPNPZ.js} +12 -12
  160. package/dist/{exe-drift-BMSRHAT6.js → exe-drift-GLJIM7EI.js} +3 -3
  161. package/dist/{exe-export-CIRE2HZA.js → exe-export-THIAYHXK.js} +6 -6
  162. package/dist/{exe-import-X6U6VG7Q.js → exe-import-3Y4VOUYL.js} +6 -6
  163. package/dist/{exe-key-7VXVXX4Q.js → exe-key-IPGY4RMU.js} +67 -67
  164. package/dist/{exe-snapshot-P5BLEXQJ.js → exe-snapshot-2ZEWCDYK.js} +15 -15
  165. package/dist/{fast-db-init-SMBGFVXM.js → fast-db-init-TLYUWCDE.js} +1 -1
  166. package/dist/{founder-context-AMMO53S7.js → founder-context-J362DNU4.js} +2 -2
  167. package/dist/gateway/index.js +11 -11
  168. package/dist/{git-staleness-AJDPXQJF.js → git-staleness-BRDHTHNS.js} +2 -2
  169. package/dist/{git-task-sweep-EJ3HEH4Y.js → git-task-sweep-7GVUKDBW.js} +12 -12
  170. package/dist/{global-procedures-KV2SVX43.js → global-procedures-FNUKY2LF.js} +3 -3
  171. package/dist/{graph-auto-extract-HFXDXJC3.js → graph-auto-extract-AJZUV3PO.js} +2 -2
  172. package/dist/hooks/bug-report-worker.js +14 -14
  173. package/dist/hooks/codex-stop-task-finalizer.js +14 -14
  174. package/dist/hooks/commit-complete.js +14 -14
  175. package/dist/hooks/error-recall.js +6 -6
  176. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  177. package/dist/hooks/ingest-worker.js +3 -3
  178. package/dist/hooks/ingest.js +6 -6
  179. package/dist/hooks/instructions-loaded.js +4 -4
  180. package/dist/hooks/manifest.json +20 -20
  181. package/dist/hooks/notification.js +4 -4
  182. package/dist/hooks/post-compact.js +13 -13
  183. package/dist/hooks/post-tool-combined.js +8 -8
  184. package/dist/hooks/pre-compact.js +17 -17
  185. package/dist/hooks/pre-tool-use.js +24 -22
  186. package/dist/hooks/prompt-submit.js +26 -26
  187. package/dist/hooks/session-end.js +22 -22
  188. package/dist/hooks/session-start.js +12 -12
  189. package/dist/hooks/stop.js +37 -41
  190. package/dist/hooks/subagent-stop.js +13 -13
  191. package/dist/hooks/summary-worker.js +20 -20
  192. package/dist/index.js +22 -22
  193. package/dist/{installer-XLP5MIRG.js → installer-2EKTDQZB.js} +5 -5
  194. package/dist/{installer-MWRZB3RT.js → installer-SC7CQBYY.js} +5 -5
  195. package/dist/{installer-2SY3BEHJ.js → installer-UEF44TWQ.js} +5 -5
  196. package/dist/lib/agent-config.js +7 -1
  197. package/dist/lib/cloud-sync.js +12 -12
  198. package/dist/lib/consolidation.js +5 -5
  199. package/dist/lib/database.js +2 -2
  200. package/dist/lib/db-daemon-client.js +3 -3
  201. package/dist/lib/db.js +2 -2
  202. package/dist/lib/device-registry.js +1 -1
  203. package/dist/lib/embedder.js +3 -3
  204. package/dist/lib/employee-templates.js +4 -4
  205. package/dist/lib/employees.js +2 -2
  206. package/dist/lib/exe-daemon-client.js +2 -2
  207. package/dist/lib/exe-daemon.js +51 -51
  208. package/dist/lib/hybrid-search.js +5 -5
  209. package/dist/lib/identity.js +2 -2
  210. package/dist/lib/license.js +8 -2
  211. package/dist/lib/messaging.js +12 -12
  212. package/dist/lib/registry-proxy.js +1 -1
  213. package/dist/lib/reminders.js +3 -3
  214. package/dist/lib/schedules.js +5 -5
  215. package/dist/lib/session-registry.js +4 -4
  216. package/dist/lib/skill-learning.js +6 -6
  217. package/dist/lib/status-brief.js +1 -1
  218. package/dist/lib/store.js +4 -4
  219. package/dist/lib/task-router.js +3 -3
  220. package/dist/lib/tasks.js +13 -13
  221. package/dist/lib/tmux-routing.js +11 -11
  222. package/dist/lib/token-spend.js +3 -3
  223. package/dist/{license-gate-PHJLO2G6.js → license-gate-YUUSIPJ7.js} +3 -3
  224. package/dist/license-sync-LX73IEBH.js +238 -0
  225. package/dist/mcp/register-tools.js +66 -66
  226. package/dist/mcp/server.js +70 -70
  227. package/dist/mcp/tools/complete-reminder.js +4 -4
  228. package/dist/mcp/tools/create-reminder.js +4 -4
  229. package/dist/mcp/tools/create-task.js +15 -15
  230. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  231. package/dist/mcp/tools/list-reminders.js +4 -4
  232. package/dist/mcp/tools/list-tasks.js +15 -15
  233. package/dist/mcp/tools/send-message.js +14 -14
  234. package/dist/mcp/tools/update-task.js +14 -14
  235. package/dist/{mcp-http-config-6Q7SYJFY.js → mcp-http-config-MBG5AQNH.js} +3 -3
  236. package/dist/{memory-cards-IG3K6T7M.js → memory-cards-MGZ4P3AA.js} +4 -4
  237. package/dist/{memory-graph-extractor-WZ77ITZ3.js → memory-graph-extractor-44P2ATID.js} +3 -3
  238. package/dist/{memory-poisoning-defense-YQW6WVPL.js → memory-poisoning-defense-3CYFKNLA.js} +2 -2
  239. package/dist/{memory-pressure-watchdog-JPCLJAXH.js → memory-pressure-watchdog-6PFLEOUO.js} +12 -12
  240. package/dist/{memory-queue-client-W24ZZ6ZF.js → memory-queue-client-BZD6MXA5.js} +3 -3
  241. package/dist/{memory-reflection-UGK2I2T7.js → memory-reflection-AYPJRPU7.js} +2 -2
  242. package/dist/{notifications-3MO6HVJM.js → notifications-BBQ23ORD.js} +11 -11
  243. package/dist/{orchestration-events-SKESCF4F.js → orchestration-events-O5P5NEKS.js} +3 -3
  244. package/dist/{orchestrator-SM65YFE2.js → orchestrator-SERM6FDY.js} +13 -13
  245. package/dist/{pipeline-router-UGCC5XSO.js → pipeline-router-T673WGL3.js} +3 -3
  246. package/dist/{plan-limits-RUCNKVRH.js → plan-limits-QWBN2EKH.js} +5 -5
  247. package/dist/{projection-worker-FBFQ232A.js → projection-worker-K6TILAZH.js} +2 -2
  248. package/dist/{prospective-memory-X4UQTUC2.js → prospective-memory-XRNRMEDL.js} +2 -2
  249. package/dist/{reranker-FIRW3XMW.js → reranker-3XC5UM4F.js} +1 -1
  250. package/dist/{retrieval-health-NWYJEIZS.js → retrieval-health-ULVVOIPL.js} +1 -1
  251. package/dist/{review-polling-HUJMBGUY.js → review-polling-5YGDPJUX.js} +12 -12
  252. package/dist/runtime/index.js +19 -19
  253. package/dist/{session-events-UNCFJIK7.js → session-events-D52HNUJK.js} +12 -12
  254. package/dist/{session-kill-telemetry-VQ4JWWTI.js → session-kill-telemetry-IBNCJSI7.js} +12 -12
  255. package/dist/{session-scope-OLSNZJ24.js → session-scope-5FWZ4AYR.js} +11 -11
  256. package/dist/{setup-wizard-X72EV5E2.js → setup-wizard-KVTLSSRD.js} +1 -1
  257. package/dist/{skill-refinement-OJRBB3LD.js → skill-refinement-YLIAY7V4.js} +2 -2
  258. package/dist/{stack-update-PK2OYYR3.js → stack-update-OWWGTYRB.js} +3 -3
  259. package/dist/{steward-gate-5ZWUVNGD.js → steward-gate-3ZITRYVH.js} +3 -3
  260. package/dist/{task-enforcement-VFFLCP3N.js → task-enforcement-L4YTDOOX.js} +11 -11
  261. package/dist/{task-scope-75JK27V5.js → task-scope-OIHLMQOQ.js} +11 -11
  262. package/dist/{tasks-crud-ADVXVR7D.js → tasks-crud-QUIIRWE3.js} +11 -11
  263. package/dist/{tasks-notify-NAA6IHHW.js → tasks-notify-ANYLB5GU.js} +12 -12
  264. package/dist/{tasks-review-5A3JJR6R.js → tasks-review-BWSCXFMB.js} +11 -11
  265. package/dist/{telemetry-upload-HSXQYSVJ.js → telemetry-upload-XLDBCD7B.js} +7 -7
  266. package/dist/{token-budget-GD2VU7N4.js → token-budget-OQCLPV3A.js} +3 -3
  267. package/dist/{tool-capability-index-KA2HQ7A4.js → tool-capability-index-3UWKZZED.js} +1 -1
  268. package/dist/{tool-telemetry-UQY7GDGE.js → tool-telemetry-AQTFWOWG.js} +1 -1
  269. package/dist/tui/App.js +19 -19
  270. package/dist/{tui-data-VYSH7F2K.js → tui-data-3Y5L5LJB.js} +11 -11
  271. package/dist/{worker-gate-DRSX2SOW.js → worker-gate-WJS2MFNA.js} +1 -1
  272. package/dist/{workflow-engine-WFDIVYWP.js → workflow-engine-EPPZ226V.js} +2 -2
  273. package/dist/{worktree-LWVPNZ4L.js → worktree-OYGDGJP7.js} +4 -4
  274. package/dist/{worktree-sweep-3IZLGYYH.js → worktree-sweep-KV4H4766.js} +5 -5
  275. package/package.json +1 -1
  276. package/release-notes.json +47 -44
  277. /package/dist/{chunk-3YKA5BKT.js → chunk-72LWCZTJ.js} +0 -0
  278. /package/dist/{chunk-7NG77I33.js → chunk-DQJ3WZRK.js} +0 -0
  279. /package/dist/{chunk-HJSMIHEY.js → chunk-DY3J6GQO.js} +0 -0
  280. /package/dist/{chunk-XRJ3EFEF.js → chunk-IZY6V4FI.js} +0 -0
  281. /package/dist/{chunk-S6N7DLKL.js → chunk-Q5YKWFVO.js} +0 -0
  282. /package/dist/{chunk-4AHV3QBI.js → chunk-QTEHH4LG.js} +0 -0
  283. /package/dist/{chunk-UWVAG35C.js → chunk-RRQI5PSJ.js} +0 -0
  284. /package/dist/{chunk-NOPDNOGQ.js → chunk-SIJSFULW.js} +0 -0
  285. /package/dist/{chunk-SOIHGU5I.js → chunk-SJZT66LM.js} +0 -0
  286. /package/dist/{chunk-3EZQSPTG.js → chunk-WXRVHXVP.js} +0 -0
  287. /package/dist/{chunk-6DTSAEDS.js → chunk-YIFZZYQD.js} +0 -0
  288. /package/dist/{chunk-53ARJV2L.js → chunk-ZU6767WK.js} +0 -0
  289. /package/dist/{core-memory-5HNI2YLS.js → core-memory-DARTILJG.js} +0 -0
  290. /package/dist/{entity-boost-AQBUEMJK.js → entity-boost-VR5YOQCT.js} +0 -0
  291. /package/dist/{message-queue-client-JGOK7POW.js → message-queue-client-HVFR67QH.js} +0 -0
  292. /package/dist/{oauth-server-NZTPAFQ7.js → oauth-server-UQHCFVHT.js} +0 -0
  293. /package/dist/{project-boot-3UP6ETJY.js → project-boot-22ZZL2GE.js} +0 -0
  294. /package/dist/{wiki-acl-4W4CSCFO.js → wiki-acl-EZMGL6KW.js} +0 -0
@@ -2,10 +2,10 @@ import {
2
2
  exportOrchestration,
3
3
  importOrchestration,
4
4
  validatePackage
5
- } from "./chunk-IPD5ZSOK.js";
5
+ } from "./chunk-KXP3CUTL.js";
6
6
  import {
7
7
  runDriftProbes
8
- } from "./chunk-Q774HAGE.js";
8
+ } from "./chunk-6N4LYEDI.js";
9
9
  import {
10
10
  DEFAULT_LIST_LIMIT,
11
11
  MAX_IMPORTANCE,
@@ -14,7 +14,7 @@ import {
14
14
  ingestDocument,
15
15
  listDocumentsByWorkspace,
16
16
  updateChunksImportance
17
- } from "./chunk-RAKFEXCN.js";
17
+ } from "./chunk-QNUHDEPI.js";
18
18
  import {
19
19
  analyzeBlastRadius,
20
20
  buildCodeContextIndex,
@@ -23,17 +23,17 @@ import {
23
23
  searchCodeContext,
24
24
  searchCodeContextSemantic,
25
25
  traceCodeSymbol
26
- } from "./chunk-OC222BAQ.js";
26
+ } from "./chunk-OI63OVCR.js";
27
27
  import {
28
28
  StewardGate
29
- } from "./chunk-E3WZA2WU.js";
29
+ } from "./chunk-7CUF27OT.js";
30
30
  import {
31
31
  DreamingEngine
32
- } from "./chunk-PJH7JUWD.js";
32
+ } from "./chunk-NAHAOFTY.js";
33
33
  import {
34
34
  isRerankerAvailable,
35
35
  rerankWithScores
36
- } from "./chunk-UWVAG35C.js";
36
+ } from "./chunk-RRQI5PSJ.js";
37
37
  import {
38
38
  getEntityByName,
39
39
  getEntityNeighbors,
@@ -42,93 +42,93 @@ import {
42
42
  getRelationships,
43
43
  searchEntities
44
44
  } from "./chunk-CRCB5S7I.js";
45
+ import {
46
+ AUTO_WAKE_MAX_RETRIES
47
+ } from "./chunk-AZL3EUR3.js";
45
48
  import {
46
49
  listRecentSessionEvents
47
- } from "./chunk-JJ2FFUFV.js";
50
+ } from "./chunk-JXEMAB4M.js";
48
51
  import {
49
52
  DEFAULT_EXPLORE_DURATION_MS,
50
53
  getPlayMode,
51
54
  listExploreSessions,
52
55
  setPlayMode
53
56
  } from "./chunk-PVYR4FCQ.js";
57
+ import {
58
+ getToolUsageStats
59
+ } from "./chunk-Q5YKWFVO.js";
54
60
  import {
55
61
  getToolCapabilityIndex
56
- } from "./chunk-SOIHGU5I.js";
62
+ } from "./chunk-SJZT66LM.js";
57
63
  import {
58
64
  isToolAllowed,
59
65
  isToolAllowedForPlan
60
66
  } from "./chunk-E6ORBQHP.js";
61
- import {
62
- AUTO_WAKE_MAX_RETRIES
63
- } from "./chunk-VUZRAEF3.js";
64
67
  import {
65
68
  getCachedLicenseGate,
66
69
  refreshLicenseGate
67
- } from "./chunk-3ZOWUUKR.js";
68
- import {
69
- getToolUsageStats
70
- } from "./chunk-S6N7DLKL.js";
70
+ } from "./chunk-6XM6PZXQ.js";
71
71
  import {
72
72
  loadOrchestrationPhase,
73
73
  setOrchestrationPhase
74
74
  } from "./chunk-32SXNM3G.js";
75
75
  import {
76
76
  createOrRefreshResumeTask
77
- } from "./chunk-WXQVFMNV.js";
77
+ } from "./chunk-HIOO7DZ2.js";
78
78
  import {
79
79
  registerUpdateTask
80
- } from "./chunk-MNUFLCHT.js";
80
+ } from "./chunk-XP53WEXP.js";
81
81
  import {
82
82
  registerCreateReminder
83
- } from "./chunk-PM6XSS6R.js";
83
+ } from "./chunk-NYFPFOYM.js";
84
84
  import {
85
85
  registerListReminders
86
- } from "./chunk-EPZWVXKI.js";
86
+ } from "./chunk-6SXJZHRJ.js";
87
87
  import {
88
88
  registerCompleteReminder
89
- } from "./chunk-4XAYC77M.js";
89
+ } from "./chunk-WFHYAKEU.js";
90
90
  import {
91
91
  registerDeactivateBehavior
92
- } from "./chunk-JNUYJRQX.js";
92
+ } from "./chunk-E32KARET.js";
93
93
  import {
94
94
  completeReminder,
95
95
  createReminder,
96
96
  listReminders
97
- } from "./chunk-MM7EYJJ3.js";
97
+ } from "./chunk-EVUXF2G4.js";
98
98
  import {
99
99
  registerSendMessage
100
- } from "./chunk-YSSJOTVN.js";
100
+ } from "./chunk-WCCR5IFR.js";
101
101
  import {
102
102
  registerCreateTask
103
- } from "./chunk-B2FUBD6Z.js";
103
+ } from "./chunk-6IBUQBMY.js";
104
104
  import {
105
105
  registerListTasks
106
- } from "./chunk-N3ZLLKBN.js";
106
+ } from "./chunk-DGFIXJ4S.js";
107
107
  import {
108
108
  TOKENS_PER_IDLE_MINUTE,
109
109
  countKillsSince,
110
110
  sumTokensSavedSince
111
- } from "./chunk-LJTXVAG4.js";
111
+ } from "./chunk-G5TP2D2U.js";
112
112
  import {
113
113
  registerImportConversations
114
- } from "./chunk-AKD6IKYS.js";
114
+ } from "./chunk-LB77CSLO.js";
115
115
  import {
116
116
  createSchedule,
117
117
  parseHumanCron
118
- } from "./chunk-XLQH263A.js";
118
+ } from "./chunk-6UQRJCKK.js";
119
119
  import {
120
120
  status
121
- } from "./chunk-IDMIGP53.js";
121
+ } from "./chunk-WSYKLS2Y.js";
122
122
  import {
123
123
  getAgentSpend
124
- } from "./chunk-YZTOGIV7.js";
124
+ } from "./chunk-VSXGFHJY.js";
125
125
  import {
126
126
  exportGraphHTML,
127
127
  generateGraphReport
128
128
  } from "./chunk-3OEVDGIY.js";
129
129
  import {
130
130
  runHealthCheck
131
- } from "./chunk-GRB44WRN.js";
131
+ } from "./chunk-SENJA7BZ.js";
132
132
  import {
133
133
  checkCpuStealSync
134
134
  } from "./chunk-SSC7EKY2.js";
@@ -140,16 +140,16 @@ import {
140
140
  formatReport,
141
141
  runAudit,
142
142
  shouldFixShards
143
- } from "./chunk-C5SALMKH.js";
143
+ } from "./chunk-ROMB2HH4.js";
144
144
  import {
145
145
  formatDegradations,
146
146
  getRetrievalHealth
147
- } from "./chunk-4AHV3QBI.js";
147
+ } from "./chunk-QTEHH4LG.js";
148
148
  import {
149
149
  hasFailures,
150
150
  runHealth,
151
151
  runTest
152
- } from "./chunk-7PUNIH6G.js";
152
+ } from "./chunk-V2ESQU3S.js";
153
153
  import {
154
154
  isSupportReportSentStatus,
155
155
  markSupportReportSent
@@ -160,12 +160,12 @@ import {
160
160
  } from "./chunk-2XZ6X3PJ.js";
161
161
  import {
162
162
  renderClientCOOTemplate
163
- } from "./chunk-TDV3XEGQ.js";
163
+ } from "./chunk-LOE2N23P.js";
164
164
  import {
165
165
  deactivateGlobalProcedure,
166
166
  loadGlobalProcedures,
167
167
  storeGlobalProcedure
168
- } from "./chunk-ZOCW4TGA.js";
168
+ } from "./chunk-ORC5AO7E.js";
169
169
  import {
170
170
  PLATFORM_PROCEDURES
171
171
  } from "./chunk-DDKDN4HV.js";
@@ -174,14 +174,14 @@ import {
174
174
  cloudSync,
175
175
  getCloudReuploadRequired,
176
176
  markCloudReuploadRequired
177
- } from "./chunk-T5O2EBHU.js";
177
+ } from "./chunk-LCZ55G5G.js";
178
178
  import {
179
179
  createARecord
180
180
  } from "./chunk-X2Z5GT3V.js";
181
181
  import {
182
182
  findSimilarTrajectories,
183
183
  hashSignature
184
- } from "./chunk-YJYE6MMJ.js";
184
+ } from "./chunk-TI6YX3L5.js";
185
185
  import {
186
186
  GHOST_BEHAVIOR_SQL,
187
187
  deactivateBehavior,
@@ -190,20 +190,20 @@ import {
190
190
  reactivateBehavior,
191
191
  storeBehavior,
192
192
  storeReflexBehavior
193
- } from "./chunk-7S3SRDPQ.js";
193
+ } from "./chunk-FANIBYUO.js";
194
194
  import {
195
195
  countUnconsolidated,
196
196
  groupMemories,
197
197
  runConsolidation,
198
198
  selectUnconsolidated
199
- } from "./chunk-GBUFDCLX.js";
199
+ } from "./chunk-XC7C3GQ2.js";
200
200
  import {
201
201
  entityId,
202
202
  mergeEntities
203
203
  } from "./chunk-7UMCQQWS.js";
204
204
  import {
205
205
  embed
206
- } from "./chunk-DFSR3UUL.js";
206
+ } from "./chunk-CHSRSESS.js";
207
207
  import {
208
208
  detectDcrIncompatibleConnectorsFromDisk,
209
209
  detectExternalMcpFailures,
@@ -213,20 +213,20 @@ import {
213
213
  } from "./chunk-CWQAXO3O.js";
214
214
  import {
215
215
  updateTask
216
- } from "./chunk-OXGNFT3L.js";
216
+ } from "./chunk-7SDS5VCL.js";
217
217
  import {
218
218
  fastDbInit
219
- } from "./chunk-53ARJV2L.js";
219
+ } from "./chunk-ZU6767WK.js";
220
220
  import {
221
221
  MAX_CONCURRENT_WORKERS
222
- } from "./chunk-WL5K3R7W.js";
222
+ } from "./chunk-TKBWBHFV.js";
223
223
  import {
224
224
  readDaemonToken
225
225
  } from "./chunk-3NGZ4PL7.js";
226
226
  import {
227
227
  hybridSearch,
228
228
  recentRecords
229
- } from "./chunk-MRB2BXIB.js";
229
+ } from "./chunk-4Z47UMMM.js";
230
230
  import {
231
231
  buildFtsMatch,
232
232
  tokenizeForFts
@@ -236,10 +236,10 @@ import {
236
236
  flushBatch,
237
237
  initStore,
238
238
  writeMemory
239
- } from "./chunk-PHUKD7VK.js";
239
+ } from "./chunk-H2SD2EA7.js";
240
240
  import {
241
241
  getActiveAgent
242
- } from "./chunk-RJHOFX72.js";
242
+ } from "./chunk-EOPSIIEH.js";
243
243
  import {
244
244
  getMySession,
245
245
  resolveExeSession,
@@ -247,13 +247,13 @@ import {
247
247
  sessionScopeFilter,
248
248
  updateTaskStatus,
249
249
  writeCheckpoint
250
- } from "./chunk-LWBOSHSS.js";
250
+ } from "./chunk-PLBDXCYZ.js";
251
251
  import {
252
252
  listSessions
253
- } from "./chunk-TWPYSILC.js";
253
+ } from "./chunk-ABGDTMKC.js";
254
254
  import {
255
255
  recordOrchestrationEventBestEffort
256
- } from "./chunk-RVF6JBHW.js";
256
+ } from "./chunk-HV5CUDOE.js";
257
257
  import {
258
258
  DEFAULT_MODELS,
259
259
  KNOWN_RUNTIMES,
@@ -261,7 +261,7 @@ import {
261
261
  getAgentRuntime,
262
262
  loadAgentConfig,
263
263
  setAgentRuntime
264
- } from "./chunk-Q26VSIXA.js";
264
+ } from "./chunk-QVFJCFNM.js";
265
265
  import {
266
266
  DEFAULT_RUNTIME
267
267
  } from "./chunk-NGP6LSV2.js";
@@ -270,7 +270,7 @@ import {
270
270
  assertEmployeeLimit,
271
271
  assertFeature,
272
272
  assertMemoryLimit
273
- } from "./chunk-CQ2T4A2D.js";
273
+ } from "./chunk-EPBB2OD3.js";
274
274
  import {
275
275
  getProjectName
276
276
  } from "./chunk-OPU3NYOO.js";
@@ -286,7 +286,7 @@ import {
286
286
  isScheduledTrigger,
287
287
  loadTriggers,
288
288
  sanitizeParam
289
- } from "./chunk-XRJ3EFEF.js";
289
+ } from "./chunk-IZY6V4FI.js";
290
290
  import {
291
291
  pushConversationToCRM
292
292
  } from "./chunk-ONKIWA3R.js";
@@ -307,7 +307,7 @@ import {
307
307
  loadEmployeesSync,
308
308
  saveEmployees,
309
309
  updateIdentity
310
- } from "./chunk-36SS3TE7.js";
310
+ } from "./chunk-XLNF3CIO.js";
311
311
  import {
312
312
  getEventLoopLagMs,
313
313
  isDaemonAlive,
@@ -326,9 +326,10 @@ import {
326
326
  loadDeviceId,
327
327
  loadLicense,
328
328
  readCachedLicenseToken,
329
+ refreshLicense,
329
330
  saveLicense,
330
331
  validateLicense
331
- } from "./chunk-QLVMJGUQ.js";
332
+ } from "./chunk-VY7345RO.js";
332
333
  import {
333
334
  EXE_AI_DIR,
334
335
  loadConfig
@@ -512,7 +513,7 @@ function registerRecallMyMemory(server) {
512
513
  }) => {
513
514
  try {
514
515
  if (!isInitialized()) {
515
- const { fastDbInit: fastDbInit2 } = await import("./fast-db-init-SMBGFVXM.js");
516
+ const { fastDbInit: fastDbInit2 } = await import("./fast-db-init-TLYUWCDE.js");
516
517
  await fastDbInit2();
517
518
  }
518
519
  if (!recent && !query) {
@@ -559,7 +560,7 @@ function registerRecallMyMemory(server) {
559
560
  let federatedCount = 0;
560
561
  if (!recent && query && results.length < FEDERATION_THRESHOLD) {
561
562
  try {
562
- const { searchCodeContextSemantic: searchCodeContextSemantic2 } = await import("./code-context-index-NQFP6ED5.js");
563
+ const { searchCodeContextSemantic: searchCodeContextSemantic2 } = await import("./code-context-index-6YQ3DGCN.js");
563
564
  const codeResults = await Promise.race([
564
565
  searchCodeContextSemantic2(query, { limit: 5 }),
565
566
  new Promise((_, rej) => setTimeout(() => rej(new Error("timeout")), 2e3))
@@ -797,7 +798,7 @@ function registerStoreMemory(server) {
797
798
  }
798
799
  const { agentId, agentRole } = getActiveAgent();
799
800
  if (kind === "prospective") {
800
- const { createProspectiveMemory } = await import("./prospective-memory-X4UQTUC2.js");
801
+ const { createProspectiveMemory } = await import("./prospective-memory-XRNRMEDL.js");
801
802
  let sessionScope = null;
802
803
  try {
803
804
  const { resolveExeSession: resolveExeSession2 } = await import("./lib/tmux-routing.js");
@@ -1783,7 +1784,7 @@ async function handleSupersede(input) {
1783
1784
  }
1784
1785
  try {
1785
1786
  const { getClient: getClient2 } = await import("./lib/database.js");
1786
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
1787
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
1787
1788
  const { writeMemory: writeMemory2, flushBatch: flushBatch2 } = await import("./lib/store.js");
1788
1789
  const { randomUUID: randomUUID2 } = await import("crypto");
1789
1790
  const client = getClient2();
@@ -1836,7 +1837,7 @@ New memory id: ${newId}`
1836
1837
  }
1837
1838
  async function handleResonanceQuery(input) {
1838
1839
  try {
1839
- const { getHotPairs, getCoActivationNeighbors } = await import("./co-activation-BQRXOZN2.js");
1840
+ const { getHotPairs, getCoActivationNeighbors } = await import("./co-activation-K44LGZ7A.js");
1840
1841
  const subAction = input.resonance_action ?? "hot_pairs";
1841
1842
  const limit = input.limit ?? 20;
1842
1843
  if (subAction === "hot_pairs") {
@@ -1931,7 +1932,7 @@ function registerMemory(server) {
1931
1932
  return handleResonanceQuery(input);
1932
1933
  }
1933
1934
  if (action === "update_working_memory" || action === "get_working_memory") {
1934
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
1935
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
1935
1936
  const { agentId } = getActiveAgent2();
1936
1937
  const { readWorkingMemoryWithMeta, writeWorkingMemory, WORKING_MEMORY_MAX_BYTES } = await import("./working-memory-PY4AG577.js");
1937
1938
  if (action === "get_working_memory") {
@@ -1957,9 +1958,9 @@ function registerMemory(server) {
1957
1958
  }
1958
1959
  }
1959
1960
  if (action === "core_get" || action === "core_set" || action === "core_delete") {
1960
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
1961
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
1961
1962
  const { agentId } = getActiveAgent2();
1962
- const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-5HNI2YLS.js");
1963
+ const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-DARTILJG.js");
1963
1964
  if (action === "core_get") {
1964
1965
  const entries = await getCoreMemory(agentId);
1965
1966
  const block = formatCoreMemoryBlock(entries);
@@ -2011,12 +2012,12 @@ function registerMemory(server) {
2011
2012
  if (!storeTrigger || !storeTriggerAction) {
2012
2013
  return errorResult('memory action "store" with kind="reflex" requires trigger and trigger_action fields');
2013
2014
  }
2014
- const { formatReflexContent, storeReflexBehavior: storeReflexBehavior2 } = await import("./behaviors-OEGZD5DH.js");
2015
+ const { formatReflexContent, storeReflexBehavior: storeReflexBehavior2 } = await import("./behaviors-J47D342W.js");
2015
2016
  const reflexText = formatReflexContent(storeTrigger, storeTriggerAction);
2016
2017
  legacyArgs.text ??= reflexText;
2017
2018
  legacyArgs.query ??= reflexText;
2018
2019
  try {
2019
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
2020
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
2020
2021
  const { getProjectName: getProjectName2 } = await import("./project-name-EWG5KAZP.js");
2021
2022
  const agent = getActiveAgent2();
2022
2023
  const behaviorId = await storeReflexBehavior2({
@@ -2372,7 +2373,7 @@ function registerCloseTask(server) {
2372
2373
  async ({ task_id, result: result3, status: status2 }) => {
2373
2374
  const agent = getActiveAgent();
2374
2375
  try {
2375
- const { StewardGate: StewardGate2 } = await import("./steward-gate-5ZWUVNGD.js");
2376
+ const { StewardGate: StewardGate2 } = await import("./steward-gate-3ZITRYVH.js");
2376
2377
  const steward = new StewardGate2();
2377
2378
  const gateDecision = await steward.checkAuthority(agent.agentId || "unknown", "close_task", task_id);
2378
2379
  if (!gateDecision.allowed) {
@@ -2553,8 +2554,8 @@ ${preflightWarnings.join("\n")}`;
2553
2554
  if (mergeNote) text5 += mergeNote;
2554
2555
  if (status2 === "closed" && assignee) {
2555
2556
  try {
2556
- const { cleanupAgentWorktree } = await import("./worktree-sweep-3IZLGYYH.js");
2557
- const { getGitRoot } = await import("./worktree-LWVPNZ4L.js");
2557
+ const { cleanupAgentWorktree } = await import("./worktree-sweep-KV4H4766.js");
2558
+ const { getGitRoot } = await import("./worktree-OYGDGJP7.js");
2558
2559
  const repoRoot = getGitRoot(baseDir);
2559
2560
  if (repoRoot) {
2560
2561
  const cleanupNotes = cleanupAgentWorktree(repoRoot, assignee);
@@ -2603,8 +2604,8 @@ ${preflightWarnings.join("\n")}`;
2603
2604
  } catch {
2604
2605
  }
2605
2606
  try {
2606
- const { cleanupAgentWorktree } = await import("./worktree-sweep-3IZLGYYH.js");
2607
- const { getGitRoot } = await import("./worktree-LWVPNZ4L.js");
2607
+ const { cleanupAgentWorktree } = await import("./worktree-sweep-KV4H4766.js");
2608
+ const { getGitRoot } = await import("./worktree-OYGDGJP7.js");
2608
2609
  const root = getGitRoot(_baseDir);
2609
2610
  if (root) {
2610
2611
  const notes = cleanupAgentWorktree(root, _assignee);
@@ -2707,7 +2708,7 @@ function registerResumeEmployee(server) {
2707
2708
  },
2708
2709
  async ({ agent_id, project_name }) => {
2709
2710
  if (!isInitialized()) {
2710
- const { fastDbInit: fastDbInit2 } = await import("./fast-db-init-SMBGFVXM.js");
2711
+ const { fastDbInit: fastDbInit2 } = await import("./fast-db-init-TLYUWCDE.js");
2711
2712
  await fastDbInit2();
2712
2713
  }
2713
2714
  const client = getClient();
@@ -2733,7 +2734,7 @@ function registerResumeEmployee(server) {
2733
2734
  };
2734
2735
  }
2735
2736
  try {
2736
- const { isTmuxSessionAlive } = await import("./tasks-crud-ADVXVR7D.js");
2737
+ const { isTmuxSessionAlive } = await import("./tasks-crud-QUIIRWE3.js");
2737
2738
  const now = (/* @__PURE__ */ new Date()).toISOString();
2738
2739
  for (const row of openTasks.rows) {
2739
2740
  const status2 = String(row.status);
@@ -2761,7 +2762,7 @@ function registerResumeEmployee(server) {
2761
2762
  }
2762
2763
  let checkpointInfo = "";
2763
2764
  try {
2764
- const { readLatestCheckpoint } = await import("./tasks-crud-ADVXVR7D.js");
2765
+ const { readLatestCheckpoint } = await import("./tasks-crud-QUIIRWE3.js");
2765
2766
  const checkpoint = await readLatestCheckpoint(agent_id);
2766
2767
  if (checkpoint) {
2767
2768
  const filesTouched = checkpoint.files_touched?.length > 0 ? checkpoint.files_touched.join(", ") : "none";
@@ -3160,7 +3161,7 @@ function registerTask(server) {
3160
3161
  const missing2 = missingRequiredFields2(args, REQUIRED_FIELDS2.create_group);
3161
3162
  if (missing2.length > 0) return errorResult2(`task action "create_group" missing required field(s): ${missing2.join(", ")}`);
3162
3163
  try {
3163
- const { createTaskGroup } = await import("./tasks-crud-ADVXVR7D.js");
3164
+ const { createTaskGroup } = await import("./tasks-crud-QUIIRWE3.js");
3164
3165
  const group = await createTaskGroup({
3165
3166
  title: args.title,
3166
3167
  coordinator: args.coordinator,
@@ -3179,7 +3180,7 @@ function registerTask(server) {
3179
3180
  const missing2 = missingRequiredFields2(args, REQUIRED_FIELDS2.group_status);
3180
3181
  if (missing2.length > 0) return errorResult2(`task action "group_status" missing required field(s): ${missing2.join(", ")}`);
3181
3182
  try {
3182
- const { getGroupStatus } = await import("./tasks-crud-ADVXVR7D.js");
3183
+ const { getGroupStatus } = await import("./tasks-crud-QUIIRWE3.js");
3183
3184
  const status2 = await getGroupStatus(args.group_id);
3184
3185
  return { content: [{ type: "text", text: JSON.stringify(status2, null, 2) }] };
3185
3186
  } catch (err) {
@@ -3191,7 +3192,7 @@ function registerTask(server) {
3191
3192
  const missing2 = missingRequiredFields2(args, REQUIRED_FIELDS2.group_results);
3192
3193
  if (missing2.length > 0) return errorResult2(`task action "group_results" missing required field(s): ${missing2.join(", ")}`);
3193
3194
  try {
3194
- const { getGroupResults } = await import("./tasks-crud-ADVXVR7D.js");
3195
+ const { getGroupResults } = await import("./tasks-crud-QUIIRWE3.js");
3195
3196
  const results = await getGroupResults(args.group_id);
3196
3197
  return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }] };
3197
3198
  } catch (err) {
@@ -3442,7 +3443,7 @@ function registerMessage(server) {
3442
3443
  if (msgType && msgPayload) {
3443
3444
  try {
3444
3445
  const { buildTypedMessage, serializeMessage } = await import("./typed-messages-TKDGVPHS.js");
3445
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
3446
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
3446
3447
  const { sendMessage } = await import("./lib/messaging.js");
3447
3448
  const { agentId } = getActiveAgent2();
3448
3449
  const envelope = buildTypedMessage({
@@ -3476,7 +3477,7 @@ ID: ${msg.id}`
3476
3477
  if (action === "read") {
3477
3478
  try {
3478
3479
  const { getPendingMessages } = await import("./lib/messaging.js");
3479
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
3480
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
3480
3481
  const { agentId } = getActiveAgent2();
3481
3482
  const messages = await getPendingMessages(agentId);
3482
3483
  if (messages.length === 0) {
@@ -3839,8 +3840,8 @@ function registerIngestDocument(server) {
3839
3840
  },
3840
3841
  async (input) => {
3841
3842
  try {
3842
- const { assertFeature: assertFeature2 } = await import("./plan-limits-RUCNKVRH.js");
3843
- const { assertMemoryLimit: assertMemoryLimit2 } = await import("./plan-limits-RUCNKVRH.js");
3843
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-QWBN2EKH.js");
3844
+ const { assertMemoryLimit: assertMemoryLimit2 } = await import("./plan-limits-QWBN2EKH.js");
3844
3845
  await assertFeature2("wiki");
3845
3846
  await assertMemoryLimit2();
3846
3847
  const result3 = await ingestDocument(input);
@@ -3911,8 +3912,8 @@ function registerPurgeDocument(server) {
3911
3912
  },
3912
3913
  async ({ document_id }) => {
3913
3914
  try {
3914
- const { StewardGate: StewardGate2 } = await import("./steward-gate-5ZWUVNGD.js");
3915
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
3915
+ const { StewardGate: StewardGate2 } = await import("./steward-gate-3ZITRYVH.js");
3916
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
3916
3917
  const steward = new StewardGate2();
3917
3918
  const agent = getActiveAgent2();
3918
3919
  const gateDecision = await steward.checkAuthority(agent.agentId || "unknown", "purge_document", document_id);
@@ -4082,7 +4083,7 @@ function registerDocument(server) {
4082
4083
  const { action: _action, ...legacyArgs } = input;
4083
4084
  if (action === "list" && (legacyArgs.workspace_id === void 0 || legacyArgs.workspace_id === null || legacyArgs.workspace_id === "")) {
4084
4085
  try {
4085
- const { resolveDefaultWorkspaceId, listWorkspaces } = await import("./documents-U47VG24Q.js");
4086
+ const { resolveDefaultWorkspaceId, listWorkspaces } = await import("./documents-7BFXA6V3.js");
4086
4087
  const defaultId = await resolveDefaultWorkspaceId();
4087
4088
  if (defaultId) {
4088
4089
  legacyArgs.workspace_id = defaultId;
@@ -5109,7 +5110,7 @@ async function handleTrigger(limit) {
5109
5110
  if (rows.rows.length === 0) {
5110
5111
  return text3("No conversations found to re-process.");
5111
5112
  }
5112
- const { ingest } = await import("./pipeline-router-UGCC5XSO.js");
5113
+ const { ingest } = await import("./pipeline-router-T673WGL3.js");
5113
5114
  const results = [];
5114
5115
  for (const row of rows.rows) {
5115
5116
  const r = row;
@@ -5740,8 +5741,8 @@ function registerMergeEntities(server) {
5740
5741
  },
5741
5742
  async ({ source_name, source_type, target_name, target_type }) => {
5742
5743
  try {
5743
- const { StewardGate: StewardGate2 } = await import("./steward-gate-5ZWUVNGD.js");
5744
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
5744
+ const { StewardGate: StewardGate2 } = await import("./steward-gate-3ZITRYVH.js");
5745
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
5745
5746
  const steward = new StewardGate2();
5746
5747
  const agent = getActiveAgent2();
5747
5748
  const gateDecision = await steward.checkAuthority(agent.agentId || "unknown", "merge_entities", `${source_name}\u2192${target_name}`);
@@ -5949,7 +5950,7 @@ async function handleExtractFromDocument(args) {
5949
5950
  return errorResult7('graph action "extract_from_document" requires document_id');
5950
5951
  }
5951
5952
  try {
5952
- const { extractGraphFromExistingDocument } = await import("./doc-graph-extractor-U7XGZQ7T.js");
5953
+ const { extractGraphFromExistingDocument } = await import("./doc-graph-extractor-L7YESUSI.js");
5953
5954
  const result3 = await extractGraphFromExistingDocument(documentId);
5954
5955
  const lines = [
5955
5956
  `## Graph Extraction for Document ${documentId}`,
@@ -5976,7 +5977,7 @@ async function handleCleanupGarbage(args) {
5976
5977
  const doMerge = !garbageOnly;
5977
5978
  let mod;
5978
5979
  try {
5979
- mod = await import("./cleanup-graph-garbage-IXYSUIUH.js");
5980
+ mod = await import("./cleanup-graph-garbage-MX5JDTJA.js");
5980
5981
  } catch (err) {
5981
5982
  return errorResult7(`cleanup_garbage: failed to load cleanup module \u2014 ${err instanceof Error ? err.message : String(err)}`);
5982
5983
  }
@@ -6117,7 +6118,7 @@ function registerGraph(server) {
6117
6118
  }
6118
6119
 
6119
6120
  // src/mcp/tools/config.ts
6120
- import { z as z75 } from "zod";
6121
+ import { z as z76 } from "zod";
6121
6122
 
6122
6123
  // src/mcp/tools/set-agent-config.ts
6123
6124
  import { z as z48 } from "zod";
@@ -6835,7 +6836,7 @@ async function getAgentSessionLoad() {
6835
6836
  return { sessions: [], totalLive: 0, busySessions: 0, idleSessions: 0 };
6836
6837
  }
6837
6838
  const { getClient: getClient2 } = await import("./lib/database.js");
6838
- const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-75JK27V5.js");
6839
+ const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-OIHLMQOQ.js");
6839
6840
  const client = getClient2();
6840
6841
  const scope = sessionScopeFilter2();
6841
6842
  for (const s of liveAgentSessions) {
@@ -6962,7 +6963,7 @@ ${mode} Applying repairs...
6962
6963
  `];
6963
6964
  if (!isDryRun) {
6964
6965
  try {
6965
- const { createBackup: createBackup2 } = await import("./db-backup-7GJYDSXA.js");
6966
+ const { createBackup: createBackup2 } = await import("./db-backup-ITRADB2J.js");
6966
6967
  const backupPath = await createBackup2("pre-fix");
6967
6968
  if (backupPath) {
6968
6969
  fixLog.push(` Backup created: ${backupPath.split("/").pop()}`);
@@ -7201,7 +7202,7 @@ async function cloudStatusText() {
7201
7202
  if (lastReuploadedAt) lines.push(`- Last re-upload: ${lastReuploadedAt}`);
7202
7203
  lines.push("");
7203
7204
  try {
7204
- const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-NWYJEIZS.js");
7205
+ const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-ULVVOIPL.js");
7205
7206
  const h = await getRetrievalHealth2();
7206
7207
  lines.push(formatDegradations2(h.degradations, "Health / Degradations"));
7207
7208
  lines.push("");
@@ -8245,6 +8246,9 @@ function registerGetLicenseStatus(server) {
8245
8246
  const icon = allowed ? "\u2705" : "\u274C";
8246
8247
  lines.push(`| ${feature} | ${icon} |`);
8247
8248
  }
8249
+ lines.push(
8250
+ "\n> Upgraded your plan? Pick it up without editing any files: run the `refresh_license` config action, or `exe-os license refresh` in a terminal."
8251
+ );
8248
8252
  return {
8249
8253
  content: [{ type: "text", text: lines.join("\n") }]
8250
8254
  };
@@ -8492,16 +8496,81 @@ Key saved to ~/.exe-os/license.key. Device ID: ${deviceId}`);
8492
8496
  );
8493
8497
  }
8494
8498
 
8495
- // src/mcp/tools/create-trigger.ts
8499
+ // src/mcp/tools/refresh-license.ts
8496
8500
  import { z as z67 } from "zod";
8497
- var conditionSchema = z67.object({
8498
- field: z67.string().describe("Dot-path field to evaluate, e.g., 'stage' or 'amount'"),
8499
- op: z67.enum(["eq", "neq", "gt", "lt", "gte", "lte", "contains", "not_contains"]).describe("Comparison operator"),
8500
- value: z67.string().or(z67.number()).or(z67.boolean()).describe("Value to compare against")
8501
+ function limitLine(label, n) {
8502
+ return `- **${label}:** ${n === -1 ? "unlimited" : n.toLocaleString()}`;
8503
+ }
8504
+ function registerRefreshLicense(server) {
8505
+ server.registerTool(
8506
+ "refresh_license",
8507
+ {
8508
+ title: "Refresh License",
8509
+ description: "Force re-validation of the license against the cloud (bypasses the offline-grace cache) and re-caches the signed JWT. Use this to pick up a plan upgrade (e.g. more agents) without editing any files. Reports old plan \u2192 new plan and the resulting limits.",
8510
+ inputSchema: {
8511
+ _dummy: z67.string().optional().describe("Unused \u2014 no input required")
8512
+ }
8513
+ },
8514
+ async () => {
8515
+ try {
8516
+ const result3 = await refreshLicense();
8517
+ try {
8518
+ await refreshLicenseGate();
8519
+ } catch {
8520
+ }
8521
+ const license = result3.license;
8522
+ const lines = [];
8523
+ if (!result3.reachedCloud) {
8524
+ lines.push("## License Refresh \u2014 Cloud Unreachable\n");
8525
+ lines.push(
8526
+ "Could not reach the license server, so the plan was NOT re-checked. Your cached plan is unchanged (a brief outage never downgrades you)."
8527
+ );
8528
+ lines.push(`
8529
+ - **Current plan:** ${license.plan}`);
8530
+ lines.push("\nTry again once connectivity to https://api.askexe.com is restored.");
8531
+ return { content: [{ type: "text", text: lines.join("\n") }] };
8532
+ }
8533
+ if (result3.changed && result3.oldPlan) {
8534
+ lines.push("## License Refreshed \u2014 Plan Changed\n");
8535
+ lines.push(`**${result3.oldPlan} \u2192 ${license.plan}**
8536
+ `);
8537
+ } else {
8538
+ lines.push("## License Refreshed \u2014 No Change\n");
8539
+ lines.push(`Plan is up to date: **${license.plan}**
8540
+ `);
8541
+ }
8542
+ lines.push("### Limits");
8543
+ lines.push(limitLine("Employees", license.employeeLimit));
8544
+ lines.push(limitLine("Devices", license.deviceLimit));
8545
+ lines.push(limitLine("Memories", license.memoryLimit));
8546
+ lines.push(`
8547
+ Valid: ${license.valid ? "yes" : "no"}`);
8548
+ return { content: [{ type: "text", text: lines.join("\n") }] };
8549
+ } catch (err) {
8550
+ return {
8551
+ content: [
8552
+ {
8553
+ type: "text",
8554
+ text: `Error refreshing license: ${err instanceof Error ? err.message : String(err)}`
8555
+ }
8556
+ ],
8557
+ isError: true
8558
+ };
8559
+ }
8560
+ }
8561
+ );
8562
+ }
8563
+
8564
+ // src/mcp/tools/create-trigger.ts
8565
+ import { z as z68 } from "zod";
8566
+ var conditionSchema = z68.object({
8567
+ field: z68.string().describe("Dot-path field to evaluate, e.g., 'stage' or 'amount'"),
8568
+ op: z68.enum(["eq", "neq", "gt", "lt", "gte", "lte", "contains", "not_contains"]).describe("Comparison operator"),
8569
+ value: z68.string().or(z68.number()).or(z68.boolean()).describe("Value to compare against")
8501
8570
  });
8502
- var actionSchema = z67.object({
8503
- type: z67.enum(["send_whatsapp", "send_message", "create_task", "mcp_tool"]).describe("Action type to execute"),
8504
- params: z67.record(z67.string(), z67.string()).describe(
8571
+ var actionSchema = z68.object({
8572
+ type: z68.enum(["send_whatsapp", "send_message", "create_task", "mcp_tool"]).describe("Action type to execute"),
8573
+ params: z68.record(z68.string(), z68.string()).describe(
8505
8574
  "Action parameters. Supports {{record.field}} templates for dynamic values."
8506
8575
  )
8507
8576
  });
@@ -8512,24 +8581,24 @@ function registerCreateTrigger(server) {
8512
8581
  title: "Create Trigger",
8513
8582
  description: "Create a CRM event trigger or scheduled automation. When matching events occur (e.g., Deal.updated with stage=won), configured actions fire automatically (send_whatsapp, create_task, etc.).",
8514
8583
  inputSchema: {
8515
- name: z67.string().describe("Human-readable trigger name"),
8516
- event: z67.string().describe(
8584
+ name: z68.string().describe("Human-readable trigger name"),
8585
+ event: z68.string().describe(
8517
8586
  'CRM event to match, e.g., "Deal.updated", "Order.created", "*" for all'
8518
8587
  ),
8519
- conditions: z67.array(conditionSchema).default([]).describe("Conditions that must all match (AND logic)"),
8520
- actions: z67.array(actionSchema).min(1).describe("Actions to execute when trigger fires"),
8521
- project: z67.string().optional().describe("Scope trigger to a specific project"),
8522
- enabled: z67.boolean().default(true).describe("Whether trigger is active"),
8523
- schedule: z67.string().optional().describe(
8588
+ conditions: z68.array(conditionSchema).default([]).describe("Conditions that must all match (AND logic)"),
8589
+ actions: z68.array(actionSchema).min(1).describe("Actions to execute when trigger fires"),
8590
+ project: z68.string().optional().describe("Scope trigger to a specific project"),
8591
+ enabled: z68.boolean().default(true).describe("Whether trigger is active"),
8592
+ schedule: z68.string().optional().describe(
8524
8593
  'Cron schedule for time-based triggers, e.g., "0 9 * * *" or "Monday 9am"'
8525
8594
  ),
8526
- query: z67.string().optional().describe(
8595
+ query: z68.string().optional().describe(
8527
8596
  "CRM GraphQL query to run on schedule (required if schedule is set)"
8528
8597
  )
8529
8598
  }
8530
8599
  },
8531
8600
  async ({ name, event, conditions, actions, project, enabled, schedule, query }) => {
8532
- const { assertFeature: assertFeature2 } = await import("./plan-limits-RUCNKVRH.js");
8601
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-QWBN2EKH.js");
8533
8602
  const gatedActions = {
8534
8603
  send_whatsapp: "external_agents",
8535
8604
  update_wiki: "wiki"
@@ -8603,7 +8672,7 @@ Enabled: ${trigger.enabled}` + scheduleInfo;
8603
8672
  }
8604
8673
 
8605
8674
  // src/mcp/tools/list-triggers.ts
8606
- import { z as z68 } from "zod";
8675
+ import { z as z69 } from "zod";
8607
8676
  function registerListTriggers(server) {
8608
8677
  server.registerTool(
8609
8678
  "list_triggers",
@@ -8611,7 +8680,7 @@ function registerListTriggers(server) {
8611
8680
  title: "List Triggers",
8612
8681
  description: "List configured CRM event triggers and scheduled automations.",
8613
8682
  inputSchema: {
8614
- project: z68.string().optional().describe("Filter triggers by project name")
8683
+ project: z69.string().optional().describe("Filter triggers by project name")
8615
8684
  }
8616
8685
  },
8617
8686
  async ({ project }) => {
@@ -8646,7 +8715,7 @@ function registerListTriggers(server) {
8646
8715
  }
8647
8716
 
8648
8717
  // src/mcp/tools/apply-starter-pack.ts
8649
- import { z as z69 } from "zod";
8718
+ import { z as z70 } from "zod";
8650
8719
 
8651
8720
  // src/automation/starter-packs/index.ts
8652
8721
  import { readFileSync as readFileSync3, readdirSync as readdirSync2, existsSync as existsSync5 } from "fs";
@@ -8830,17 +8899,17 @@ function registerApplyStarterPack(server) {
8830
8899
  title: "Apply Starter Pack",
8831
8900
  description: "Apply an industry starter pack to a project. Sets up CRM custom objects, pre-wired automation triggers, and wiki seed content. When the pack creates a Client COO (e.g. distribution) and agent_name, company_name, founder_name are all provided, also provisions the COO identity, roster entry, and feedback-loop behavior. Available packs: distribution. More coming.",
8832
8901
  inputSchema: {
8833
- industry: z69.string().describe(
8902
+ industry: z70.string().describe(
8834
8903
  'Industry pack to apply (e.g., "distribution"). Use without args to list available packs.'
8835
8904
  ),
8836
- project: z69.string().describe("Project name to scope the triggers to"),
8837
- agent_name: z69.string().optional().describe(
8905
+ project: z70.string().describe("Project name to scope the triggers to"),
8906
+ agent_name: z70.string().optional().describe(
8838
8907
  "Optional. Lowercase alphanumeric name for the Client COO agent. Required (alongside company_name and founder_name) to provision a COO."
8839
8908
  ),
8840
- company_name: z69.string().optional().describe(
8909
+ company_name: z70.string().optional().describe(
8841
8910
  "Optional. The client company the COO serves. Required to provision a COO."
8842
8911
  ),
8843
- founder_name: z69.string().optional().describe(
8912
+ founder_name: z70.string().optional().describe(
8844
8913
  "Optional. The founder the COO reports to. Required to provision a COO."
8845
8914
  )
8846
8915
  }
@@ -8985,7 +9054,7 @@ ${err.message}`
8985
9054
  }
8986
9055
 
8987
9056
  // src/mcp/tools/load-skill.ts
8988
- import { z as z70 } from "zod";
9057
+ import { z as z71 } from "zod";
8989
9058
  import { readFileSync as readFileSync4, readdirSync as readdirSync3, statSync } from "fs";
8990
9059
  import path10 from "path";
8991
9060
  import { homedir as homedir3 } from "os";
@@ -9015,7 +9084,7 @@ function registerLoadSkill(server) {
9015
9084
  title: "Load Skill",
9016
9085
  description: "Load domain-specific guidance into your context. Use when you need specialized knowledge for a task (e.g., load_skill('seo') before doing SEO work, load_skill('code-reviewer') before reviewing code). Pass skill_name='list' to see all available skills.",
9017
9086
  inputSchema: {
9018
- skill_name: z70.string().describe(
9087
+ skill_name: z71.string().describe(
9019
9088
  "Skill to load (e.g. 'seo', 'code-reviewer', 'frontend-design'). Pass 'list' to see all available skills."
9020
9089
  )
9021
9090
  }
@@ -9072,7 +9141,7 @@ ${available.map((s) => `- ${s}`).join("\n")}` : "\n\nNo skills found in ~/.claud
9072
9141
  // src/mcp/tools/export-orchestration.ts
9073
9142
  import { mkdirSync as mkdirSync3, writeFileSync as writeFileSync5 } from "fs";
9074
9143
  import path11 from "path";
9075
- import { z as z71 } from "zod";
9144
+ import { z as z72 } from "zod";
9076
9145
  function registerExportOrchestration(server) {
9077
9146
  server.registerTool(
9078
9147
  "export_orchestration",
@@ -9080,7 +9149,7 @@ function registerExportOrchestration(server) {
9080
9149
  title: "Export Orchestration",
9081
9150
  description: "Export roster, identities, behaviors, and customer procedures to a JSON package.",
9082
9151
  inputSchema: {
9083
- output_path: z71.string().describe("File path to write the JSON package")
9152
+ output_path: z72.string().describe("File path to write the JSON package")
9084
9153
  }
9085
9154
  },
9086
9155
  async ({ output_path }) => {
@@ -9111,7 +9180,7 @@ function registerExportOrchestration(server) {
9111
9180
 
9112
9181
  // src/mcp/tools/import-orchestration.ts
9113
9182
  import { readFileSync as readFileSync5 } from "fs";
9114
- import { z as z72 } from "zod";
9183
+ import { z as z73 } from "zod";
9115
9184
  function registerImportOrchestration(server) {
9116
9185
  server.registerTool(
9117
9186
  "import_orchestration",
@@ -9119,8 +9188,8 @@ function registerImportOrchestration(server) {
9119
9188
  title: "Import Orchestration",
9120
9189
  description: "Import roster, identities, behaviors, and procedures from an orchestration package. Restricted to coordinator/founder.",
9121
9190
  inputSchema: {
9122
- package_path: z72.string().describe("Path to the orchestration package JSON file"),
9123
- merge_strategy: z72.enum(["replace", "merge"]).default("merge").describe("How to apply the package: both strategies are additive-only \u2014 existing data is never deleted or overwritten")
9191
+ package_path: z73.string().describe("Path to the orchestration package JSON file"),
9192
+ merge_strategy: z73.enum(["replace", "merge"]).default("merge").describe("How to apply the package: both strategies are additive-only \u2014 existing data is never deleted or overwritten")
9124
9193
  }
9125
9194
  },
9126
9195
  async ({ package_path, merge_strategy }) => {
@@ -9160,7 +9229,7 @@ function registerImportOrchestration(server) {
9160
9229
  }
9161
9230
 
9162
9231
  // src/mcp/tools/global-procedure.ts
9163
- import { z as z73 } from "zod";
9232
+ import { z as z74 } from "zod";
9164
9233
  function registerCompanyProcedureTool(server, toolName) {
9165
9234
  server.registerTool(
9166
9235
  toolName,
@@ -9168,13 +9237,13 @@ function registerCompanyProcedureTool(server, toolName) {
9168
9237
  title: "Company Procedure",
9169
9238
  description: "Manage company procedures and values (customer-owned Layer 0 rules) that supersede identity, expertise, and experience. Actions: store (create new, restricted), list (view all, open), deactivate (soft-delete, restricted). Use kind='value' for company values (principles/beliefs), kind='procedure' for operational instructions.",
9170
9239
  inputSchema: {
9171
- action: z73.enum(["store", "list", "deactivate"]).describe("Action to perform"),
9172
- title: z73.string().optional().describe("Short title for the procedure or value (store)"),
9173
- content: z73.string().max(500).optional().describe("The content \u2014 clear, actionable instruction or guiding principle (store)"),
9174
- priority: z73.enum(["p0", "p1", "p2"]).optional().describe("Priority tier. p0 = always (default). p1 = standard. p2 = nice-to-have."),
9175
- domain: z73.string().optional().describe("Category: workflow, code-style, communication, architecture, testing, security"),
9176
- kind: z73.enum(["procedure", "value"]).optional().describe("Type: 'procedure' (operational instruction) or 'value' (company principle). Default: procedure."),
9177
- procedure_id: z73.string().optional().describe("UUID of the company procedure (deactivate)")
9240
+ action: z74.enum(["store", "list", "deactivate"]).describe("Action to perform"),
9241
+ title: z74.string().optional().describe("Short title for the procedure or value (store)"),
9242
+ content: z74.string().max(500).optional().describe("The content \u2014 clear, actionable instruction or guiding principle (store)"),
9243
+ priority: z74.enum(["p0", "p1", "p2"]).optional().describe("Priority tier. p0 = always (default). p1 = standard. p2 = nice-to-have."),
9244
+ domain: z74.string().optional().describe("Category: workflow, code-style, communication, architecture, testing, security"),
9245
+ kind: z74.enum(["procedure", "value"]).optional().describe("Type: 'procedure' (operational instruction) or 'value' (company principle). Default: procedure."),
9246
+ procedure_id: z74.string().optional().describe("UUID of the company procedure (deactivate)")
9178
9247
  }
9179
9248
  },
9180
9249
  async ({ action, title, content, priority, domain, kind, procedure_id }) => {
@@ -9299,8 +9368,8 @@ function registerGlobalProcedure(server) {
9299
9368
  }
9300
9369
 
9301
9370
  // src/mcp/tools/get-session-events.ts
9302
- import { z as z74 } from "zod";
9303
- var EVENT_TYPE = z74.enum([
9371
+ import { z as z75 } from "zod";
9372
+ var EVENT_TYPE = z75.enum([
9304
9373
  "user_prompt",
9305
9374
  "assistant_response",
9306
9375
  "tool_call",
@@ -9330,11 +9399,11 @@ function registerGetSessionEvents(server) {
9330
9399
  title: "Get Session Events",
9331
9400
  description: "Return exact recent chronological user prompts, assistant responses, and tool calls from the append-only session journal. Use this when asked what happened last, not semantic memory search.",
9332
9401
  inputSchema: {
9333
- agent_id: z74.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
9334
- session_id: z74.string().optional().describe("Optional exact runtime session id."),
9402
+ agent_id: z75.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
9403
+ session_id: z75.string().optional().describe("Optional exact runtime session id."),
9335
9404
  event_type: EVENT_TYPE.optional().describe("Filter to one event type."),
9336
- project_name: z74.string().optional().describe("Optional project filter. Pass 'all' for all projects."),
9337
- limit: z74.number().int().min(1).max(100).default(20).describe("Number of events to return.")
9405
+ project_name: z75.string().optional().describe("Optional project filter. Pass 'all' for all projects."),
9406
+ limit: z75.number().int().min(1).max(100).default(20).describe("Number of events to return.")
9338
9407
  }
9339
9408
  },
9340
9409
  async ({ agent_id, session_id, event_type, project_name, limit }) => {
@@ -9370,8 +9439,8 @@ function registerGetLastAssistantResponse(server) {
9370
9439
  title: "Get Last Assistant Response",
9371
9440
  description: "Return the exact last assistant response for an agent from the session event journal. Use for 'what was the last thing you said?'",
9372
9441
  inputSchema: {
9373
- agent_id: z74.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
9374
- project_name: z74.string().optional().describe("Optional project filter. Pass 'all' for all projects.")
9442
+ agent_id: z75.string().optional().describe("Agent to inspect. Defaults to active agent. COO/CTO may inspect others."),
9443
+ project_name: z75.string().optional().describe("Optional project filter. Pass 'all' for all projects.")
9375
9444
  }
9376
9445
  },
9377
9446
  async ({ agent_id, project_name }) => {
@@ -9422,6 +9491,7 @@ var ACTION_TO_TOOL2 = {
9422
9491
  create_license: "create_license",
9423
9492
  list_licenses: "list_licenses",
9424
9493
  activate_license: "activate_license",
9494
+ refresh_license: "refresh_license",
9425
9495
  create_trigger: "create_trigger",
9426
9496
  list_triggers: "list_triggers",
9427
9497
  apply_starter_pack: "apply_starter_pack",
@@ -9479,6 +9549,7 @@ function buildHandlers5() {
9479
9549
  registerCreateLicense(localServer);
9480
9550
  registerListLicenses(localServer);
9481
9551
  registerActivateLicense(localServer);
9552
+ registerRefreshLicense(localServer);
9482
9553
  registerCreateTrigger(localServer);
9483
9554
  registerListTriggers(localServer);
9484
9555
  registerApplyStarterPack(localServer);
@@ -9495,8 +9566,8 @@ function buildHandlers5() {
9495
9566
  }
9496
9567
  async function handleDreaming(action, args) {
9497
9568
  try {
9498
- const { DreamingEngine: DreamingEngine2 } = await import("./dreaming-VBI4BI6R.js");
9499
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
9569
+ const { DreamingEngine: DreamingEngine2 } = await import("./dreaming-NRTMPNPZ.js");
9570
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
9500
9571
  const { getClient: getClient2 } = await import("./lib/database.js");
9501
9572
  const agentId = args.agent_id ?? getActiveAgent2().agentId;
9502
9573
  if (action === "dreaming_run") {
@@ -9580,51 +9651,51 @@ function registerConfig(server) {
9580
9651
  title: "Config",
9581
9652
  description: "Consolidated COO/admin tool for runtime config, system health, licensing, triggers, orchestration import/export, company procedures, identity management, session inspection, dreaming self-improvement, and session closeout.",
9582
9653
  inputSchema: {
9583
- action: z75.enum(Object.keys(ACTION_TO_TOOL2)).describe("Admin/config operation. identity_get/identity_update manage agent identity files. session_events/session_last_response inspect session logs. dreaming_run/dreaming_status/dreaming_history manage the self-improvement loop. closeout runs dreaming + commits a structured session summary to memory. capability_cards returns A2A-style JSON manifests for all agents. restart_telemetry shows why the daemon restarted \u2014 cause breakdown, slowest timers, event-loop blocks."),
9584
- agent_id: z75.string().optional().describe("Agent id for set_agent_config/agent_spend/session queries/hire"),
9585
- role: z75.string().optional().describe("Role template for action=hire: coo, cto, cmo, gm, principal-engineer, content-specialist, ai-specialist, staff-code-reviewer"),
9586
- runtime: z75.string().optional().describe("Runtime for set_agent_config"),
9587
- model: z75.string().optional().describe("Model for set_agent_config"),
9588
- reasoning_effort: z75.string().optional().describe("Reasoning effort for Codex agents"),
9589
- dry_run: z75.boolean().optional().describe("Preview without applying where supported"),
9590
- fix: z75.boolean().optional().describe("Apply fixes for memory_audit where supported"),
9591
- verbose: z75.boolean().optional().describe("Verbose output where supported"),
9592
- project_name: z75.string().optional().describe("Project filter/name"),
9593
- since: z75.string().optional().describe("ISO lower-bound timestamp"),
9594
- limit: z75.coerce.number().optional().describe("Result limit"),
9595
- output_path: z75.string().optional().describe("Output path for export/backup"),
9596
- input_path: z75.string().optional().describe("Input path for import_orchestration"),
9597
- strategy: z75.enum(["merge", "replace"]).optional().describe("Import strategy; replace must still be additive-only per platform rules"),
9598
- license_key: z75.string().optional().describe("License key for activation/status"),
9599
- email: z75.string().optional().describe("Customer email for license creation"),
9600
- plan: z75.string().optional().describe("License plan"),
9601
- name: z75.string().optional().describe("Trigger/starter pack/procedure/client name"),
9602
- event: z75.string().optional().describe("Trigger event"),
9603
- conditions: z75.array(z75.record(z75.string(), z75.unknown())).optional().describe("Trigger conditions"),
9604
- actions: z75.array(z75.record(z75.string(), z75.unknown())).optional().describe("Trigger actions"),
9605
- enabled: z75.boolean().optional().describe("Trigger enabled flag"),
9606
- schedule: z75.string().optional().describe("Trigger schedule"),
9607
- query: z75.string().optional().describe("Trigger query or filter"),
9608
- skill_name: z75.string().optional().describe("Skill name for load_skill"),
9609
- pack_name: z75.string().optional().describe("Starter pack name"),
9610
- title: z75.string().optional().describe("Procedure title"),
9611
- content: z75.string().optional().describe("Procedure content"),
9612
- priority: z75.enum(["p0", "p1", "p2"]).optional().describe("Procedure priority"),
9613
- domain: z75.string().optional().describe("Procedure domain"),
9614
- procedure_id: z75.string().optional().describe("Procedure id for deactivate"),
9615
- subaction: z75.enum(["store", "list", "deactivate"]).optional().describe("Nested action for company_procedure/global_procedure"),
9616
- max_clusters: z75.coerce.number().optional().describe("Consolidation max clusters"),
9617
- force: z75.boolean().optional().describe("Force operation where supported"),
9618
- cloud_action: z75.enum(["status", "sync", "reupload"]).optional().describe("Nested operation for action=cloud_sync"),
9619
- confirm_local_db_source_of_truth: z75.string().optional().describe("Required for cloud_action=reupload; must exactly equal LOCAL DB IS SOURCE OF TRUTH"),
9620
- domain_name: z75.string().optional().describe("Client deployment domain"),
9621
- phase: z75.enum(["phase_1_coo", "phase_2_executives", "phase_3_parallel_org", "1", "2", "3"]).optional().describe("Orchestration phase for orchestration_phase action"),
9654
+ action: z76.enum(Object.keys(ACTION_TO_TOOL2)).describe("Admin/config operation. refresh_license force re-checks the plan against the cloud and re-caches the signed JWT (picks up plan upgrades without editing files). identity_get/identity_update manage agent identity files. session_events/session_last_response inspect session logs. dreaming_run/dreaming_status/dreaming_history manage the self-improvement loop. closeout runs dreaming + commits a structured session summary to memory. capability_cards returns A2A-style JSON manifests for all agents. restart_telemetry shows why the daemon restarted \u2014 cause breakdown, slowest timers, event-loop blocks."),
9655
+ agent_id: z76.string().optional().describe("Agent id for set_agent_config/agent_spend/session queries/hire"),
9656
+ role: z76.string().optional().describe("Role template for action=hire: coo, cto, cmo, gm, principal-engineer, content-specialist, ai-specialist, staff-code-reviewer"),
9657
+ runtime: z76.string().optional().describe("Runtime for set_agent_config"),
9658
+ model: z76.string().optional().describe("Model for set_agent_config"),
9659
+ reasoning_effort: z76.string().optional().describe("Reasoning effort for Codex agents"),
9660
+ dry_run: z76.boolean().optional().describe("Preview without applying where supported"),
9661
+ fix: z76.boolean().optional().describe("Apply fixes for memory_audit where supported"),
9662
+ verbose: z76.boolean().optional().describe("Verbose output where supported"),
9663
+ project_name: z76.string().optional().describe("Project filter/name"),
9664
+ since: z76.string().optional().describe("ISO lower-bound timestamp"),
9665
+ limit: z76.coerce.number().optional().describe("Result limit"),
9666
+ output_path: z76.string().optional().describe("Output path for export/backup"),
9667
+ input_path: z76.string().optional().describe("Input path for import_orchestration"),
9668
+ strategy: z76.enum(["merge", "replace"]).optional().describe("Import strategy; replace must still be additive-only per platform rules"),
9669
+ license_key: z76.string().optional().describe("License key for activation/status"),
9670
+ email: z76.string().optional().describe("Customer email for license creation"),
9671
+ plan: z76.string().optional().describe("License plan"),
9672
+ name: z76.string().optional().describe("Trigger/starter pack/procedure/client name"),
9673
+ event: z76.string().optional().describe("Trigger event"),
9674
+ conditions: z76.array(z76.record(z76.string(), z76.unknown())).optional().describe("Trigger conditions"),
9675
+ actions: z76.array(z76.record(z76.string(), z76.unknown())).optional().describe("Trigger actions"),
9676
+ enabled: z76.boolean().optional().describe("Trigger enabled flag"),
9677
+ schedule: z76.string().optional().describe("Trigger schedule"),
9678
+ query: z76.string().optional().describe("Trigger query or filter"),
9679
+ skill_name: z76.string().optional().describe("Skill name for load_skill"),
9680
+ pack_name: z76.string().optional().describe("Starter pack name"),
9681
+ title: z76.string().optional().describe("Procedure title"),
9682
+ content: z76.string().optional().describe("Procedure content"),
9683
+ priority: z76.enum(["p0", "p1", "p2"]).optional().describe("Procedure priority"),
9684
+ domain: z76.string().optional().describe("Procedure domain"),
9685
+ procedure_id: z76.string().optional().describe("Procedure id for deactivate"),
9686
+ subaction: z76.enum(["store", "list", "deactivate"]).optional().describe("Nested action for company_procedure/global_procedure"),
9687
+ max_clusters: z76.coerce.number().optional().describe("Consolidation max clusters"),
9688
+ force: z76.boolean().optional().describe("Force operation where supported"),
9689
+ cloud_action: z76.enum(["status", "sync", "reupload"]).optional().describe("Nested operation for action=cloud_sync"),
9690
+ confirm_local_db_source_of_truth: z76.string().optional().describe("Required for cloud_action=reupload; must exactly equal LOCAL DB IS SOURCE OF TRUTH"),
9691
+ domain_name: z76.string().optional().describe("Client deployment domain"),
9692
+ phase: z76.enum(["phase_1_coo", "phase_2_executives", "phase_3_parallel_org", "1", "2", "3"]).optional().describe("Orchestration phase for orchestration_phase action"),
9622
9693
  // Identity params (absorbed from identity tool)
9623
- identity_content: z75.string().optional().describe("Full exe.md content for action=identity_update"),
9694
+ identity_content: z76.string().optional().describe("Full exe.md content for action=identity_update"),
9624
9695
  // Session params (absorbed from session tool)
9625
- session_id: z75.string().optional().describe("Session ID for action=session_events"),
9696
+ session_id: z76.string().optional().describe("Session ID for action=session_events"),
9626
9697
  // Dreaming params (absorbed from dreaming tool)
9627
- hours: z75.coerce.number().min(1).max(720).optional().describe("Lookback window in hours for action=dreaming_run/restart_telemetry. Default 24.")
9698
+ hours: z76.coerce.number().min(1).max(720).optional().describe("Lookback window in hours for action=dreaming_run/restart_telemetry. Default 24.")
9628
9699
  }
9629
9700
  }, async (input, extra) => {
9630
9701
  const action = input.action;
@@ -9652,8 +9723,8 @@ function registerConfig(server) {
9652
9723
  }
9653
9724
  if (action === "closeout") {
9654
9725
  try {
9655
- const { DreamingEngine: DreamingEngine2 } = await import("./dreaming-VBI4BI6R.js");
9656
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
9726
+ const { DreamingEngine: DreamingEngine2 } = await import("./dreaming-NRTMPNPZ.js");
9727
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
9657
9728
  const { writeMemory: writeMemory2, flushBatch: flushBatch2 } = await import("./lib/store.js");
9658
9729
  const { randomUUID: randomUUID2 } = await import("crypto");
9659
9730
  const { getProjectName: getProjectName2 } = await import("./project-name-EWG5KAZP.js");
@@ -9724,7 +9795,7 @@ function registerConfig(server) {
9724
9795
  }
9725
9796
  if (action === "capability_cards") {
9726
9797
  try {
9727
- const { getAllCapabilityCards, findAgentForTask } = await import("./capability-cards-4BONYCI4.js");
9798
+ const { getAllCapabilityCards, findAgentForTask } = await import("./capability-cards-H7H3MU74.js");
9728
9799
  const cards = getAllCapabilityCards();
9729
9800
  const taskQuery = args.query;
9730
9801
  if (taskQuery) {
@@ -9775,7 +9846,7 @@ function registerConfig(server) {
9775
9846
  const existing = loadEmployeesSync2();
9776
9847
  if (existing.some((e) => e.name === employeeName)) return errorResult8(`Employee "${employeeName}" already exists.`);
9777
9848
  try {
9778
- const { assertEmployeeLimit: assertEmployeeLimit2 } = await import("./plan-limits-RUCNKVRH.js");
9849
+ const { assertEmployeeLimit: assertEmployeeLimit2 } = await import("./plan-limits-QWBN2EKH.js");
9779
9850
  await assertEmployeeLimit2();
9780
9851
  } catch (e) {
9781
9852
  return errorResult8(e instanceof Error ? e.message : "Employee limit reached.");
@@ -9816,7 +9887,7 @@ You are ${employeeName}. Role: ${role}.`, "utf-8");
9816
9887
  }
9817
9888
  try {
9818
9889
  const { generateSessionWrappers } = await import("./lib/session-wrappers.js");
9819
- const { resolvePackageRoot } = await import("./installer-MWRZB3RT.js");
9890
+ const { resolvePackageRoot } = await import("./installer-SC7CQBYY.js");
9820
9891
  generateSessionWrappers(resolvePackageRoot());
9821
9892
  } catch {
9822
9893
  }
@@ -9886,10 +9957,10 @@ You are ${employeeName}. Role: ${role}.`, "utf-8");
9886
9957
  }
9887
9958
 
9888
9959
  // src/mcp/tools/wiki.ts
9889
- import { z as z78 } from "zod";
9960
+ import { z as z79 } from "zod";
9890
9961
 
9891
9962
  // src/mcp/tools/list-wiki-pages.ts
9892
- import { z as z76 } from "zod";
9963
+ import { z as z77 } from "zod";
9893
9964
  var FETCH_TIMEOUT_MS2 = 1e4;
9894
9965
  function registerListWikiPages(server) {
9895
9966
  server.registerTool(
@@ -9898,12 +9969,12 @@ function registerListWikiPages(server) {
9898
9969
  title: "List Wiki Pages",
9899
9970
  description: "List documents in an exe-wiki workspace. Optionally filter by folder.",
9900
9971
  inputSchema: {
9901
- workspace: z76.string().describe('Wiki workspace slug (e.g., "hygo")'),
9902
- folder: z76.string().optional().describe("Filter by folder path")
9972
+ workspace: z77.string().describe('Wiki workspace slug (e.g., "hygo")'),
9973
+ folder: z77.string().optional().describe("Filter by folder path")
9903
9974
  }
9904
9975
  },
9905
9976
  async ({ workspace, folder }) => {
9906
- const { assertFeature: assertFeature2 } = await import("./plan-limits-RUCNKVRH.js");
9977
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-QWBN2EKH.js");
9907
9978
  await assertFeature2("wiki");
9908
9979
  const apiUrl = process.env.EXE_WIKI_API_URL;
9909
9980
  const apiKey = process.env.EXE_WIKI_API_KEY;
@@ -9988,7 +10059,7 @@ function registerListWikiPages(server) {
9988
10059
  }
9989
10060
 
9990
10061
  // src/mcp/tools/get-wiki-page.ts
9991
- import { z as z77 } from "zod";
10062
+ import { z as z78 } from "zod";
9992
10063
  var FETCH_TIMEOUT_MS3 = 1e4;
9993
10064
  function registerGetWikiPage(server) {
9994
10065
  server.registerTool(
@@ -9997,13 +10068,13 @@ function registerGetWikiPage(server) {
9997
10068
  title: "Get Wiki Page",
9998
10069
  description: "Read a wiki page by document ID or title. Returns content, metadata, and folder path. Use title search when you know the page name but not the ID.",
9999
10070
  inputSchema: {
10000
- workspace: z77.string().describe('Wiki workspace slug (e.g., "hygo")'),
10001
- document_id: z77.string().optional().describe("Specific document ID (exact lookup)"),
10002
- title: z77.string().optional().describe("Search by title (fuzzy match)")
10071
+ workspace: z78.string().describe('Wiki workspace slug (e.g., "hygo")'),
10072
+ document_id: z78.string().optional().describe("Specific document ID (exact lookup)"),
10073
+ title: z78.string().optional().describe("Search by title (fuzzy match)")
10003
10074
  }
10004
10075
  },
10005
10076
  async ({ workspace, document_id, title }) => {
10006
- const { assertFeature: assertFeature2 } = await import("./plan-limits-RUCNKVRH.js");
10077
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-QWBN2EKH.js");
10007
10078
  await assertFeature2("wiki");
10008
10079
  const apiUrl = process.env.EXE_WIKI_API_URL;
10009
10080
  const apiKey = process.env.EXE_WIKI_API_KEY;
@@ -10197,10 +10268,10 @@ async function handleWikiSearch(input) {
10197
10268
  const userId = input.user_id;
10198
10269
  if (!workspace) return errorResult9('wiki action "search" requires workspace');
10199
10270
  if (!query) return errorResult9('wiki action "search" requires query');
10200
- const { assertFeature: assertFeature2 } = await import("./plan-limits-RUCNKVRH.js");
10271
+ const { assertFeature: assertFeature2 } = await import("./plan-limits-QWBN2EKH.js");
10201
10272
  await assertFeature2("wiki");
10202
10273
  if (userId) {
10203
- const { checkWikiAccess } = await import("./wiki-acl-4W4CSCFO.js");
10274
+ const { checkWikiAccess } = await import("./wiki-acl-EZMGL6KW.js");
10204
10275
  const { allowed } = await checkWikiAccess(String(userId), String(workspace), "read");
10205
10276
  if (!allowed) {
10206
10277
  return errorResult9(`Access denied: user "${userId}" does not have read access to workspace "${workspace}"`);
@@ -10255,34 +10326,34 @@ function registerWiki(server) {
10255
10326
  title: "Wiki",
10256
10327
  description: "Consolidated wiki and document domain tool. Actions: list, get, search (wiki pages), document_ingest, document_list, document_purge, document_set_importance, document_rerank (document management). Wiki writes flow through raw data ingestion/projection into the curated wiki store.",
10257
10328
  inputSchema: {
10258
- action: z78.enum(["list", "get", "search", "document_ingest", "document_list", "document_purge", "document_set_importance", "document_rerank"]).describe("Wiki/document operation. list/get/search for wiki pages. document_* for document management."),
10259
- query: z78.string().optional().describe("Search query for action=search (FTS across page titles and content)"),
10260
- workspace: z78.string().optional().describe("Wiki workspace slug"),
10261
- title: z78.string().optional().describe("Fuzzy page title lookup for get"),
10262
- content: z78.string().optional().describe("Reserved; wiki writes use raw-data ingestion/projection"),
10263
- folder: z78.string().optional().describe("Optional folder path for list"),
10264
- document_id: z78.string().optional().describe("Document ID for get/purge/set_importance"),
10265
- mode: z78.enum(["replace", "append"]).optional().describe("Reserved; direct wiki updates are removed"),
10266
- section: z78.string().optional().describe("Reserved; direct wiki updates are removed"),
10267
- user_id: z78.string().optional().describe("User ID for ACL enforcement. When set, workspace access is checked against wiki_acl table."),
10329
+ action: z79.enum(["list", "get", "search", "document_ingest", "document_list", "document_purge", "document_set_importance", "document_rerank"]).describe("Wiki/document operation. list/get/search for wiki pages. document_* for document management."),
10330
+ query: z79.string().optional().describe("Search query for action=search (FTS across page titles and content)"),
10331
+ workspace: z79.string().optional().describe("Wiki workspace slug"),
10332
+ title: z79.string().optional().describe("Fuzzy page title lookup for get"),
10333
+ content: z79.string().optional().describe("Reserved; wiki writes use raw-data ingestion/projection"),
10334
+ folder: z79.string().optional().describe("Optional folder path for list"),
10335
+ document_id: z79.string().optional().describe("Document ID for get/purge/set_importance"),
10336
+ mode: z79.enum(["replace", "append"]).optional().describe("Reserved; direct wiki updates are removed"),
10337
+ section: z79.string().optional().describe("Reserved; direct wiki updates are removed"),
10338
+ user_id: z79.string().optional().describe("User ID for ACL enforcement. When set, workspace access is checked against wiki_acl table."),
10268
10339
  // Document management params (absorbed from document tool)
10269
- workspace_id: z78.string().optional().describe("Workspace UUID or slug for document operations"),
10270
- filename: z78.string().optional().describe("Document filename for action=document_ingest"),
10271
- mime: z78.string().optional().describe("MIME type for action=document_ingest"),
10272
- source_type: z78.enum(["upload", "url", "manual", "paste"]).optional().describe("Source type for action=document_ingest"),
10273
- chunks: z78.array(z78.object({
10274
- text: z78.string(),
10275
- char_offset: z78.number().optional(),
10276
- page_number: z78.number().optional(),
10277
- metadata: z78.record(z78.string(), z78.unknown()).optional()
10340
+ workspace_id: z79.string().optional().describe("Workspace UUID or slug for document operations"),
10341
+ filename: z79.string().optional().describe("Document filename for action=document_ingest"),
10342
+ mime: z79.string().optional().describe("MIME type for action=document_ingest"),
10343
+ source_type: z79.enum(["upload", "url", "manual", "paste"]).optional().describe("Source type for action=document_ingest"),
10344
+ chunks: z79.array(z79.object({
10345
+ text: z79.string(),
10346
+ char_offset: z79.number().optional(),
10347
+ page_number: z79.number().optional(),
10348
+ metadata: z79.record(z79.string(), z79.unknown()).optional()
10278
10349
  })).optional().describe("Document chunks for action=document_ingest"),
10279
- document_metadata: z78.record(z78.string(), z78.unknown()).optional().describe("Document metadata for action=document_ingest"),
10280
- importance: z78.number().int().min(1).max(10).optional().describe("Importance for action=document_set_importance"),
10281
- doc_query: z78.string().optional().describe("Query for action=document_rerank"),
10282
- candidates: z78.array(z78.string()).optional().describe("Candidate texts for action=document_rerank"),
10283
- top_k: z78.coerce.number().int().positive().optional().describe("Top K for action=document_rerank"),
10284
- limit: z78.number().int().positive().optional().describe("Limit for action=document_list"),
10285
- offset: z78.number().int().nonnegative().optional().describe("Offset for action=document_list")
10350
+ document_metadata: z79.record(z79.string(), z79.unknown()).optional().describe("Document metadata for action=document_ingest"),
10351
+ importance: z79.number().int().min(1).max(10).optional().describe("Importance for action=document_set_importance"),
10352
+ doc_query: z79.string().optional().describe("Query for action=document_rerank"),
10353
+ candidates: z79.array(z79.string()).optional().describe("Candidate texts for action=document_rerank"),
10354
+ top_k: z79.coerce.number().int().positive().optional().describe("Top K for action=document_rerank"),
10355
+ limit: z79.number().int().positive().optional().describe("Limit for action=document_list"),
10356
+ offset: z79.number().int().nonnegative().optional().describe("Offset for action=document_list")
10286
10357
  }
10287
10358
  },
10288
10359
  async (input, extra) => {
@@ -10303,7 +10374,7 @@ function registerWiki(server) {
10303
10374
  return errorResult9('wiki action "document_rerank" requires at least one candidate');
10304
10375
  }
10305
10376
  if (user_id && legacyArgs.workspace) {
10306
- const { checkWikiAccess } = await import("./wiki-acl-4W4CSCFO.js");
10377
+ const { checkWikiAccess } = await import("./wiki-acl-EZMGL6KW.js");
10307
10378
  const { allowed } = await checkWikiAccess(
10308
10379
  String(user_id),
10309
10380
  String(legacyArgs.workspace),
@@ -10328,7 +10399,7 @@ function registerWiki(server) {
10328
10399
  }
10329
10400
 
10330
10401
  // src/mcp/tools/behavior.ts
10331
- import { z as z79 } from "zod";
10402
+ import { z as z80 } from "zod";
10332
10403
  function rowToBehavior2(r) {
10333
10404
  return {
10334
10405
  id: String(r.id),
@@ -10357,23 +10428,23 @@ function registerBehavior(server) {
10357
10428
  title: "Behavior",
10358
10429
  description: "Manage behavioral patterns, corrections, and reusable procedures for employees. Actions: store (create new), list (query existing), audit (creation context), deactivate (soft-delete, restricted), reactivate (re-enable deactivated, restricted), purge (hard-delete inactive, or purge_ghosts=true to delete corrupt empty/null-id rows; restricted).",
10359
10430
  inputSchema: {
10360
- action: z79.enum(["store", "list", "deactivate", "reactivate", "audit", "purge"]).describe("Action to perform"),
10361
- content: z79.string().max(500).optional().describe("The behavioral instruction \u2014 one clear sentence (store). Not needed when trigger+action are provided for reflex domain."),
10362
- domain: z79.string().optional().describe("Category: workflow, code-style, tool-use, communication, architecture, testing, reflex. Use 'reflex' for trigger\u2192action behaviors."),
10363
- priority: z79.enum(["p0", "p1", "p2"]).optional().describe("Priority tier. p0 = always included. p1 = standard (default). p2 = nice-to-have. Forced to p0 for reflex domain."),
10364
- trigger: z79.string().max(200).optional().describe("Condition that activates this reflex (e.g. 'when customer says cancel', 'when deadline mentioned'). Required when domain='reflex'."),
10365
- trigger_action: z79.string().max(300).optional().describe("What the agent should do when the trigger fires (e.g. 'offer retention discount', 'flag for manager review'). Required when domain='reflex'."),
10366
- agent_id: z79.string().optional().describe("Employee name. Defaults to current agent. Pass 'all' to list everyone's (list only)."),
10367
- project_name: z79.string().optional().describe("Defaults to current project. Pass 'global' for a behavior that applies everywhere (store)."),
10368
- behavior_id: z79.string().optional().describe("UUID of the behavior (deactivate)"),
10369
- shared_skills: z79.boolean().optional().describe("When true with action=list, include skills (domain='skill') from ALL agents. Default: false."),
10370
- device_scoped: z79.boolean().optional().describe("When true, behavior only loads on this device. Default false (global \u2014 loads everywhere). (store)"),
10371
- limit: z79.coerce.number().int().min(1).max(500).optional().describe("Max rows for list/purge preview. Default 100 for list, 500 for purge."),
10372
- offset: z79.coerce.number().int().min(0).optional().describe("Pagination offset for list. Default 0."),
10373
- older_than_days: z79.coerce.number().int().min(0).optional().describe("For purge: only hard-delete inactive behaviors older than this many days. Default 30."),
10374
- dry_run: z79.boolean().optional().default(true).describe("For purge: preview by default; set false to permanently delete matching inactive behaviors."),
10375
- purge_ghosts: z79.boolean().optional().describe("For purge: target ghost rows (empty content or NULL id) regardless of active status / age, instead of aged inactive behaviors. Use to clean up corrupt rows that flood behavior list. (purge)"),
10376
- bulk: z79.boolean().optional().describe("For purge with purge_ghosts=true: drain ALL ghost rows in bounded batches in a single call (handles millions of rows safely) and VACUUM. Use when the ghost table is too large to clear 1000-at-a-time. (purge)")
10431
+ action: z80.enum(["store", "list", "deactivate", "reactivate", "audit", "purge"]).describe("Action to perform"),
10432
+ content: z80.string().max(500).optional().describe("The behavioral instruction \u2014 one clear sentence (store). Not needed when trigger+action are provided for reflex domain."),
10433
+ domain: z80.string().optional().describe("Category: workflow, code-style, tool-use, communication, architecture, testing, reflex. Use 'reflex' for trigger\u2192action behaviors."),
10434
+ priority: z80.enum(["p0", "p1", "p2"]).optional().describe("Priority tier. p0 = always included. p1 = standard (default). p2 = nice-to-have. Forced to p0 for reflex domain."),
10435
+ trigger: z80.string().max(200).optional().describe("Condition that activates this reflex (e.g. 'when customer says cancel', 'when deadline mentioned'). Required when domain='reflex'."),
10436
+ trigger_action: z80.string().max(300).optional().describe("What the agent should do when the trigger fires (e.g. 'offer retention discount', 'flag for manager review'). Required when domain='reflex'."),
10437
+ agent_id: z80.string().optional().describe("Employee name. Defaults to current agent. Pass 'all' to list everyone's (list only)."),
10438
+ project_name: z80.string().optional().describe("Defaults to current project. Pass 'global' for a behavior that applies everywhere (store)."),
10439
+ behavior_id: z80.string().optional().describe("UUID of the behavior (deactivate)"),
10440
+ shared_skills: z80.boolean().optional().describe("When true with action=list, include skills (domain='skill') from ALL agents. Default: false."),
10441
+ device_scoped: z80.boolean().optional().describe("When true, behavior only loads on this device. Default false (global \u2014 loads everywhere). (store)"),
10442
+ limit: z80.coerce.number().int().min(1).max(500).optional().describe("Max rows for list/purge preview. Default 100 for list, 500 for purge."),
10443
+ offset: z80.coerce.number().int().min(0).optional().describe("Pagination offset for list. Default 0."),
10444
+ older_than_days: z80.coerce.number().int().min(0).optional().describe("For purge: only hard-delete inactive behaviors older than this many days. Default 30."),
10445
+ dry_run: z80.boolean().optional().default(true).describe("For purge: preview by default; set false to permanently delete matching inactive behaviors."),
10446
+ purge_ghosts: z80.boolean().optional().describe("For purge: target ghost rows (empty content or NULL id) regardless of active status / age, instead of aged inactive behaviors. Use to clean up corrupt rows that flood behavior list. (purge)"),
10447
+ bulk: z80.boolean().optional().describe("For purge with purge_ghosts=true: drain ALL ghost rows in bounded batches in a single call (handles millions of rows safely) and VACUUM. Use when the ghost table is too large to clear 1000-at-a-time. (purge)")
10377
10448
  }
10378
10449
  },
10379
10450
  async ({ action, content, domain, priority, trigger, trigger_action, agent_id, project_name, behavior_id, shared_skills, device_scoped, limit, offset, older_than_days, dry_run, purge_ghosts, bulk }) => {
@@ -10624,7 +10695,7 @@ Use /exe-forget to remove any that this supersedes.`;
10624
10695
  }]
10625
10696
  };
10626
10697
  }
10627
- const { bulkPurgeGhostBehaviors } = await import("./behaviors-OEGZD5DH.js");
10698
+ const { bulkPurgeGhostBehaviors } = await import("./behaviors-J47D342W.js");
10628
10699
  const res = await bulkPurgeGhostBehaviors({ batchSize: 5e3, vacuum: true });
10629
10700
  return {
10630
10701
  content: [{
@@ -10735,7 +10806,7 @@ Use /exe-forget to remove any that this supersedes.`;
10735
10806
  return { content: [{ type: "text", text: `Behavior not found: ${behavior_id}` }], isError: true };
10736
10807
  }
10737
10808
  const row2 = result4.rows[0];
10738
- const { reactivateBehavior: reactivateBehavior2 } = await import("./behaviors-OEGZD5DH.js");
10809
+ const { reactivateBehavior: reactivateBehavior2 } = await import("./behaviors-J47D342W.js");
10739
10810
  const wasReactivated = await reactivateBehavior2(behavior_id);
10740
10811
  if (!wasReactivated) {
10741
10812
  return { content: [{ type: "text", text: `Behavior ${behavior_id} is already active.` }] };
@@ -10805,7 +10876,7 @@ Content: ${row.content}`
10805
10876
  }
10806
10877
 
10807
10878
  // src/mcp/tools/reminder.ts
10808
- import { z as z80 } from "zod";
10879
+ import { z as z81 } from "zod";
10809
10880
  function registerReminder(server) {
10810
10881
  server.registerTool(
10811
10882
  "reminder",
@@ -10813,11 +10884,11 @@ function registerReminder(server) {
10813
10884
  title: "Reminder",
10814
10885
  description: "Manage reminders for the founder. Shown in the boot brief every session. Actions: create (set new), list (view active), complete (mark done).",
10815
10886
  inputSchema: {
10816
- action: z80.enum(["create", "list", "complete"]).describe("Action to perform"),
10817
- text: z80.string().optional().describe("What to remind about (create)"),
10818
- due_date: z80.string().optional().describe("Optional due date \u2014 ISO date (2026-04-01) or null for persistent (create)"),
10819
- reminder_id: z80.string().optional().describe("Reminder UUID or text substring to match (complete)"),
10820
- include_completed: z80.boolean().optional().default(false).describe("Include completed reminders (list)")
10887
+ action: z81.enum(["create", "list", "complete"]).describe("Action to perform"),
10888
+ text: z81.string().optional().describe("What to remind about (create)"),
10889
+ due_date: z81.string().optional().describe("Optional due date \u2014 ISO date (2026-04-01) or null for persistent (create)"),
10890
+ reminder_id: z81.string().optional().describe("Reminder UUID or text substring to match (complete)"),
10891
+ include_completed: z81.boolean().optional().default(false).describe("Include completed reminders (list)")
10821
10892
  }
10822
10893
  },
10823
10894
  async ({ action, text: text5, due_date, reminder_id, include_completed }) => {
@@ -10870,7 +10941,7 @@ function registerReminder(server) {
10870
10941
  }
10871
10942
 
10872
10943
  // src/mcp/tools/store-global-procedure.ts
10873
- import { z as z81 } from "zod";
10944
+ import { z as z82 } from "zod";
10874
10945
  function registerStoreGlobalProcedure(server) {
10875
10946
  server.registerTool(
10876
10947
  "store_global_procedure",
@@ -10878,10 +10949,10 @@ function registerStoreGlobalProcedure(server) {
10878
10949
  title: "Store Company Procedure (use global_procedure instead)",
10879
10950
  description: "DEPRECATED \u2014 use global_procedure with action='store'. Create a company procedure (customer-owned Layer 0 rule). RESTRICTED: only coordinator or founder sessions.",
10880
10951
  inputSchema: {
10881
- title: z81.string().describe("Short title for the procedure"),
10882
- content: z81.string().max(500).describe("The procedure content \u2014 clear, actionable instruction"),
10883
- priority: z81.enum(["p0", "p1", "p2"]).optional().describe("Priority tier. p0 = always (default)."),
10884
- domain: z81.string().optional().describe("Category: workflow, code-style, communication, architecture, testing, security")
10952
+ title: z82.string().describe("Short title for the procedure"),
10953
+ content: z82.string().max(500).describe("The procedure content \u2014 clear, actionable instruction"),
10954
+ priority: z82.enum(["p0", "p1", "p2"]).optional().describe("Priority tier. p0 = always (default)."),
10955
+ domain: z82.string().optional().describe("Category: workflow, code-style, communication, architecture, testing, security")
10885
10956
  }
10886
10957
  },
10887
10958
  async ({ title, content, priority, domain }) => {
@@ -10953,7 +11024,7 @@ ${lines.join("\n\n")}`
10953
11024
  }
10954
11025
 
10955
11026
  // src/mcp/tools/deactivate-global-procedure.ts
10956
- import { z as z82 } from "zod";
11027
+ import { z as z83 } from "zod";
10957
11028
  function registerDeactivateGlobalProcedure(server) {
10958
11029
  server.registerTool(
10959
11030
  "deactivate_global_procedure",
@@ -10961,7 +11032,7 @@ function registerDeactivateGlobalProcedure(server) {
10961
11032
  title: "Deactivate Company Procedure (use global_procedure instead)",
10962
11033
  description: "DEPRECATED \u2014 use global_procedure with action='deactivate'. Soft-delete a company procedure. RESTRICTED: only coordinator or founder sessions.",
10963
11034
  inputSchema: {
10964
- procedure_id: z82.string().describe("UUID of the company procedure to deactivate")
11035
+ procedure_id: z83.string().describe("UUID of the company procedure to deactivate")
10965
11036
  }
10966
11037
  },
10967
11038
  async ({ procedure_id }) => {
@@ -11016,7 +11087,7 @@ Content: ${row.content}`
11016
11087
  }
11017
11088
 
11018
11089
  // src/mcp/tools/people-roster.ts
11019
- import { z as z83 } from "zod";
11090
+ import { z as z84 } from "zod";
11020
11091
 
11021
11092
  // src/lib/people.ts
11022
11093
  import { readFile, writeFile, mkdir } from "fs/promises";
@@ -11063,10 +11134,10 @@ function registerAddPerson(server) {
11063
11134
  title: "Add Person",
11064
11135
  description: "Add or update a key human in the people roster. Used for co-founders, partners, customers \u2014 anyone agents need to know about.",
11065
11136
  inputSchema: {
11066
- name: z83.string().describe("Person's name"),
11067
- role: z83.string().describe("Their role (e.g. co-founder, customer, partner)"),
11068
- relationship: z83.string().describe("Relationship to the organization (e.g. co-founder, early adopter, investor)"),
11069
- notes: z83.string().optional().describe("Additional context about this person")
11137
+ name: z84.string().describe("Person's name"),
11138
+ role: z84.string().describe("Their role (e.g. co-founder, customer, partner)"),
11139
+ relationship: z84.string().describe("Relationship to the organization (e.g. co-founder, early adopter, investor)"),
11140
+ notes: z84.string().optional().describe("Additional context about this person")
11070
11141
  }
11071
11142
  },
11072
11143
  async ({ name, role, relationship, notes }) => {
@@ -11112,7 +11183,7 @@ function registerGetPerson(server) {
11112
11183
  title: "Get Person",
11113
11184
  description: "Look up a specific person by name from the people roster.",
11114
11185
  inputSchema: {
11115
- name: z83.string().describe("Person's name to look up")
11186
+ name: z84.string().describe("Person's name to look up")
11116
11187
  }
11117
11188
  },
11118
11189
  async ({ name }) => {
@@ -11136,9 +11207,9 @@ Notes: ${person.notes}` : ""}`
11136
11207
  }
11137
11208
 
11138
11209
  // src/mcp/tools/company-actions.ts
11139
- import { z as z84 } from "zod";
11210
+ import { z as z85 } from "zod";
11140
11211
  var FETCH_TIMEOUT_MS5 = 15e3;
11141
- var ACTION = z84.enum(["list_connectors", "describe_connector", "preview", "execute", "list_runs", "get_run"]);
11212
+ var ACTION = z85.enum(["list_connectors", "describe_connector", "preview", "execute", "list_runs", "get_run"]);
11142
11213
  function format(payload) {
11143
11214
  return ["# Company Actions", "", JSON.stringify(payload, null, 2)].join("\n");
11144
11215
  }
@@ -11150,13 +11221,13 @@ function registerCompanyActions(server) {
11150
11221
  description: "Preview and execute external connector actions (Asana, WhatsApp) through exe-gateway with audit/safety gates.",
11151
11222
  inputSchema: {
11152
11223
  action: ACTION.describe("list_connectors, describe_connector, preview, execute, list_runs, get_run"),
11153
- connector: z84.string().optional().describe("Connector to use, e.g. asana, whatsapp, airtable, notion"),
11154
- connector_ref: z84.string().optional().describe("Exact connector ref from list_connectors when connector names overlap"),
11155
- operation: z84.string().optional().describe("Connector operation, e.g. create_task or send_message"),
11156
- payload: z84.record(z84.string(), z84.unknown()).optional().describe("Operation payload"),
11157
- idempotency_key: z84.string().optional().describe("Stable key to prevent duplicate execution"),
11158
- confirm_token: z84.string().optional().describe("Optional future approval token"),
11159
- run_id: z84.string().optional().describe("Run id for get_run")
11224
+ connector: z85.string().optional().describe("Connector to use, e.g. asana, whatsapp, airtable, notion"),
11225
+ connector_ref: z85.string().optional().describe("Exact connector ref from list_connectors when connector names overlap"),
11226
+ operation: z85.string().optional().describe("Connector operation, e.g. create_task or send_message"),
11227
+ payload: z85.record(z85.string(), z85.unknown()).optional().describe("Operation payload"),
11228
+ idempotency_key: z85.string().optional().describe("Stable key to prevent duplicate execution"),
11229
+ confirm_token: z85.string().optional().describe("Optional future approval token"),
11230
+ run_id: z85.string().optional().describe("Run id for get_run")
11160
11231
  }
11161
11232
  },
11162
11233
  async (input) => {
@@ -11201,8 +11272,8 @@ function registerCompanyActions(server) {
11201
11272
  }
11202
11273
 
11203
11274
  // src/mcp/tools/workflow.ts
11204
- import { z as z85 } from "zod";
11205
- var ACTION2 = z85.enum([
11275
+ import { z as z86 } from "zod";
11276
+ var ACTION2 = z86.enum([
11206
11277
  "create_workflow",
11207
11278
  "start_workflow",
11208
11279
  "get_workflow_status",
@@ -11210,23 +11281,23 @@ var ACTION2 = z85.enum([
11210
11281
  "list_workflows",
11211
11282
  "list_instances"
11212
11283
  ]);
11213
- var StepSchema = z85.object({
11214
- name: z85.string().describe("Human-readable step name"),
11215
- type: z85.enum(["execute_action", "wait_for_approval", "conditional"]).describe("Step type"),
11216
- action: z85.object({
11217
- type: z85.enum(["send_whatsapp", "send_message", "create_task", "update_wiki", "mcp_tool"]),
11218
- params: z85.record(z85.string(), z85.string()),
11219
- requires_approval: z85.boolean().optional()
11284
+ var StepSchema = z86.object({
11285
+ name: z86.string().describe("Human-readable step name"),
11286
+ type: z86.enum(["execute_action", "wait_for_approval", "conditional"]).describe("Step type"),
11287
+ action: z86.object({
11288
+ type: z86.enum(["send_whatsapp", "send_message", "create_task", "update_wiki", "mcp_tool"]),
11289
+ params: z86.record(z86.string(), z86.string()),
11290
+ requires_approval: z86.boolean().optional()
11220
11291
  }).optional().describe("Action to execute (for execute_action steps)"),
11221
- connector: z85.string().optional().describe("Connector name (e.g., asana, whatsapp)"),
11222
- operation: z85.string().optional().describe("Connector operation (e.g., create_task)"),
11223
- payload: z85.record(z85.string(), z85.unknown()).optional().describe("Operation payload"),
11224
- condition: z85.object({
11225
- expression: z85.string().describe("Expression like '{{step.1.result.status}} == completed'"),
11226
- then_step: z85.number().optional(),
11227
- else_step: z85.number().optional()
11292
+ connector: z86.string().optional().describe("Connector name (e.g., asana, whatsapp)"),
11293
+ operation: z86.string().optional().describe("Connector operation (e.g., create_task)"),
11294
+ payload: z86.record(z86.string(), z86.unknown()).optional().describe("Operation payload"),
11295
+ condition: z86.object({
11296
+ expression: z86.string().describe("Expression like '{{step.1.result.status}} == completed'"),
11297
+ then_step: z86.number().optional(),
11298
+ else_step: z86.number().optional()
11228
11299
  }).optional().describe("Condition for conditional steps"),
11229
- approval_message: z85.string().optional().describe("Message shown when waiting for approval")
11300
+ approval_message: z86.string().optional().describe("Message shown when waiting for approval")
11230
11301
  });
11231
11302
  function registerWorkflowTool(server) {
11232
11303
  server.registerTool(
@@ -11236,14 +11307,14 @@ function registerWorkflowTool(server) {
11236
11307
  description: "Create, run, and manage multi-step workflows that chain actions with approval gates. Steps reference previous outputs via {{step.N.result}}. Actions: create_workflow, start_workflow, get_workflow_status, approve_workflow_step, list_workflows, list_instances.",
11237
11308
  inputSchema: {
11238
11309
  action: ACTION2.describe("create_workflow | start_workflow | get_workflow_status | approve_workflow_step | list_workflows | list_instances"),
11239
- name: z85.string().optional().describe("Workflow name (for create_workflow)"),
11240
- description: z85.string().optional().describe("Workflow description (for create_workflow)"),
11241
- steps: z85.array(StepSchema).optional().describe("Workflow steps (for create_workflow)"),
11242
- definition_id: z85.string().optional().describe("Workflow definition ID (for start_workflow)"),
11243
- instance_id: z85.string().optional().describe("Workflow instance ID (for get_workflow_status, approve_workflow_step)"),
11244
- context: z85.record(z85.string(), z85.unknown()).optional().describe("Initial context/record (for start_workflow)"),
11245
- approved: z85.boolean().optional().describe("Approve (true) or reject (false) the step (for approve_workflow_step)"),
11246
- status_filter: z85.string().optional().describe("Filter instances by status (for list_instances)")
11310
+ name: z86.string().optional().describe("Workflow name (for create_workflow)"),
11311
+ description: z86.string().optional().describe("Workflow description (for create_workflow)"),
11312
+ steps: z86.array(StepSchema).optional().describe("Workflow steps (for create_workflow)"),
11313
+ definition_id: z86.string().optional().describe("Workflow definition ID (for start_workflow)"),
11314
+ instance_id: z86.string().optional().describe("Workflow instance ID (for get_workflow_status, approve_workflow_step)"),
11315
+ context: z86.record(z86.string(), z86.unknown()).optional().describe("Initial context/record (for start_workflow)"),
11316
+ approved: z86.boolean().optional().describe("Approve (true) or reject (false) the step (for approve_workflow_step)"),
11317
+ status_filter: z86.string().optional().describe("Filter instances by status (for list_instances)")
11247
11318
  }
11248
11319
  },
11249
11320
  async (input) => {
@@ -11256,7 +11327,7 @@ function registerWorkflowTool(server) {
11256
11327
  getWorkflowInstance,
11257
11328
  listWorkflowInstances,
11258
11329
  approveWorkflowStep
11259
- } = await import("./workflow-engine-WFDIVYWP.js");
11330
+ } = await import("./workflow-engine-EPPZ226V.js");
11260
11331
  try {
11261
11332
  switch (input.action) {
11262
11333
  case "create_workflow": {
@@ -11379,17 +11450,17 @@ function formatInstanceStatus(inst, def) {
11379
11450
  }
11380
11451
 
11381
11452
  // src/mcp/tools/create-bug-report.ts
11382
- import { z as z86 } from "zod";
11453
+ import { z as z87 } from "zod";
11383
11454
  import crypto4 from "crypto";
11384
11455
  import { mkdir as mkdir2, writeFile as writeFile2 } from "fs/promises";
11385
11456
  import path13 from "path";
11386
- var CLASSIFICATION = z86.enum([
11457
+ var CLASSIFICATION = z87.enum([
11387
11458
  "upstream_bug",
11388
11459
  "customer_customization",
11389
11460
  "emergency_hotfix",
11390
11461
  "unclear"
11391
11462
  ]);
11392
- var SEVERITY = z86.enum(["p0", "p1", "p2", "p3"]);
11463
+ var SEVERITY = z87.enum(["p0", "p1", "p2", "p3"]);
11393
11464
  function slugify(input) {
11394
11465
  return input.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 80) || "bug-report";
11395
11466
  }
@@ -11483,29 +11554,29 @@ function registerCreateBugReport(server) {
11483
11554
  title: "Create Bug Report",
11484
11555
  description: "Classify and file an exe-os issue as upstream_bug, customer_customization, emergency_hotfix, or unclear. Writes a local report, stores memory, and optionally sends to AskExe support when a support endpoint is configured. IMPORTANT: Before filing, use diagnostics(action='healthcheck') and review orchestration metrics (exe-os-orchestration-metrics --since 1h) to include evidence in your report. Metrics are auto-attached to every bug report.",
11485
11556
  inputSchema: {
11486
- title: z86.string().min(3).describe("Short descriptive title"),
11557
+ title: z87.string().min(3).describe("Short descriptive title"),
11487
11558
  classification: CLASSIFICATION.describe(
11488
11559
  "upstream_bug = platform defect; customer_customization = local preference; emergency_hotfix = temporary local patch; unclear = needs maintainer triage"
11489
11560
  ),
11490
11561
  severity: SEVERITY.default("p2").describe("p0 critical \u2192 p3 low"),
11491
- summary: z86.string().min(10).describe("What happened and why it matters"),
11492
- customer_impact: z86.string().optional().describe("How this affects the customer/founder"),
11493
- reproduction_steps: z86.array(z86.string()).optional().describe("Steps to reproduce"),
11494
- expected: z86.string().optional().describe("Expected behavior"),
11495
- actual: z86.string().optional().describe("Actual behavior"),
11496
- files_changed: z86.array(z86.string()).optional().describe("Files changed or suspected"),
11497
- workaround: z86.string().optional().describe("Temporary local workaround/hotfix, if any"),
11498
- local_patch_diff: z86.string().optional().describe("Small local diff or patch summary"),
11499
- product: z86.string().optional().describe("Product this bug is for: exe-os, exe-create, exe-wiki, exe-gateway, exe-crm, exe-build. Defaults to exe-os."),
11500
- package_version: z86.string().optional().describe("Installed package version"),
11501
- project_name: z86.string().optional().describe("Project/customer context"),
11502
- implementing_branch: z86.string().optional().describe("Branch name or PR URL that implements/fixes this bug. Recorded on the report so future work can find existing fixes instead of redoing them (bug e324f244)."),
11503
- attachments: z86.array(z86.object({
11504
- filename: z86.string().min(1).describe("Filename for the attachment (e.g. error.log, patch.diff)"),
11505
- content: z86.string().min(1).describe("File content \u2014 plain text (diffs, logs, config snippets)")
11562
+ summary: z87.string().min(10).describe("What happened and why it matters"),
11563
+ customer_impact: z87.string().optional().describe("How this affects the customer/founder"),
11564
+ reproduction_steps: z87.array(z87.string()).optional().describe("Steps to reproduce"),
11565
+ expected: z87.string().optional().describe("Expected behavior"),
11566
+ actual: z87.string().optional().describe("Actual behavior"),
11567
+ files_changed: z87.array(z87.string()).optional().describe("Files changed or suspected"),
11568
+ workaround: z87.string().optional().describe("Temporary local workaround/hotfix, if any"),
11569
+ local_patch_diff: z87.string().optional().describe("Small local diff or patch summary"),
11570
+ product: z87.string().optional().describe("Product this bug is for: exe-os, exe-create, exe-wiki, exe-gateway, exe-crm, exe-build. Defaults to exe-os."),
11571
+ package_version: z87.string().optional().describe("Installed package version"),
11572
+ project_name: z87.string().optional().describe("Project/customer context"),
11573
+ implementing_branch: z87.string().optional().describe("Branch name or PR URL that implements/fixes this bug. Recorded on the report so future work can find existing fixes instead of redoing them (bug e324f244)."),
11574
+ attachments: z87.array(z87.object({
11575
+ filename: z87.string().min(1).describe("Filename for the attachment (e.g. error.log, patch.diff)"),
11576
+ content: z87.string().min(1).describe("File content \u2014 plain text (diffs, logs, config snippets)")
11506
11577
  })).optional().describe("File attachments: diffs, logs, config snippets, screenshots (text-based)"),
11507
- send_upstream: z86.boolean().default(true).describe("Attempt to POST to configured AskExe support endpoint"),
11508
- on_behalf_of_email: z86.string().email().optional().describe("ADMIN ONLY: file this request owned by another customer's license email; ignored unless caller holds the support admin token")
11578
+ send_upstream: z87.boolean().default(true).describe("Attempt to POST to configured AskExe support endpoint"),
11579
+ on_behalf_of_email: z87.string().email().optional().describe("ADMIN ONLY: file this request owned by another customer's license email; ignored unless caller holds the support admin token")
11509
11580
  }
11510
11581
  },
11511
11582
  async ({
@@ -11543,7 +11614,7 @@ function registerCreateBugReport(server) {
11543
11614
  const version = package_version ?? "unknown";
11544
11615
  let metricsSnapshot = "";
11545
11616
  try {
11546
- const { getOrchestrationMetrics, formatOrchestrationMetrics } = await import("./orchestration-events-SKESCF4F.js");
11617
+ const { getOrchestrationMetrics, formatOrchestrationMetrics } = await import("./orchestration-events-O5P5NEKS.js");
11547
11618
  const sinceIso = new Date(Date.now() - 60 * 60 * 1e3).toISOString();
11548
11619
  const metrics = await getOrchestrationMetrics({ sinceIso });
11549
11620
  if (metrics.totalEvents > 0) {
@@ -11684,17 +11755,17 @@ Upstream status: ${upstreamStatus}`
11684
11755
  }
11685
11756
 
11686
11757
  // src/mcp/tools/create-feature-request.ts
11687
- import { z as z87 } from "zod";
11758
+ import { z as z88 } from "zod";
11688
11759
  import crypto5 from "crypto";
11689
11760
  import { mkdir as mkdir3, writeFile as writeFile3 } from "fs/promises";
11690
11761
  import path14 from "path";
11691
- var CATEGORY = z87.enum([
11762
+ var CATEGORY = z88.enum([
11692
11763
  "upstream_feature",
11693
11764
  "local_customization",
11694
11765
  "integration",
11695
11766
  "unclear"
11696
11767
  ]);
11697
- var PRIORITY = z87.enum(["p0", "p1", "p2", "p3"]);
11768
+ var PRIORITY = z88.enum(["p0", "p1", "p2", "p3"]);
11698
11769
  function slugify2(input) {
11699
11770
  return input.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 80) || "feature-request";
11700
11771
  }
@@ -11768,26 +11839,26 @@ function registerCreateFeatureRequest(server) {
11768
11839
  title: "Create Feature Request",
11769
11840
  description: "File a feature request for exe-os: upstream_feature (requires platform changes), local_customization (configurable in customer layers), integration (third-party), or unclear. Writes a local report, stores memory, and optionally sends to AskExe.",
11770
11841
  inputSchema: {
11771
- title: z87.string().min(3).describe("Short descriptive title"),
11842
+ title: z88.string().min(3).describe("Short descriptive title"),
11772
11843
  category: CATEGORY.describe(
11773
11844
  "upstream_feature = platform capability change; local_customization = configurable in customer layers; integration = third-party connector; unclear = needs product triage"
11774
11845
  ),
11775
11846
  priority: PRIORITY.default("p2").describe("p0 critical \u2192 p3 low"),
11776
- description: z87.string().min(10).describe("What capability is needed and why"),
11777
- use_case: z87.string().optional().describe("Concrete scenario where this feature would be used"),
11778
- current_workaround: z87.string().optional().describe("How the need is currently addressed, if at all"),
11779
- proposed_solution: z87.string().optional().describe("Suggested implementation approach"),
11780
- business_impact: z87.string().optional().describe("Impact on business/workflow if this ships"),
11781
- product: z87.string().optional().describe("Product this feature is for: exe-os, exe-create, exe-wiki, exe-gateway, exe-crm, exe-build. Defaults to exe-os."),
11782
- package_version: z87.string().optional().describe("Installed package version"),
11783
- project_name: z87.string().optional().describe("Project/customer context"),
11784
- implementing_branch: z87.string().optional().describe("Branch name or PR URL that implements this feature. Recorded on the request so future work can find existing implementations instead of redoing them (bug e324f244)."),
11785
- attachments: z87.array(z87.object({
11786
- filename: z87.string().min(1).describe("Filename for the attachment (e.g. mockup.txt, api-sketch.diff)"),
11787
- content: z87.string().min(1).describe("File content \u2014 plain text (diffs, logs, config snippets)")
11847
+ description: z88.string().min(10).describe("What capability is needed and why"),
11848
+ use_case: z88.string().optional().describe("Concrete scenario where this feature would be used"),
11849
+ current_workaround: z88.string().optional().describe("How the need is currently addressed, if at all"),
11850
+ proposed_solution: z88.string().optional().describe("Suggested implementation approach"),
11851
+ business_impact: z88.string().optional().describe("Impact on business/workflow if this ships"),
11852
+ product: z88.string().optional().describe("Product this feature is for: exe-os, exe-create, exe-wiki, exe-gateway, exe-crm, exe-build. Defaults to exe-os."),
11853
+ package_version: z88.string().optional().describe("Installed package version"),
11854
+ project_name: z88.string().optional().describe("Project/customer context"),
11855
+ implementing_branch: z88.string().optional().describe("Branch name or PR URL that implements this feature. Recorded on the request so future work can find existing implementations instead of redoing them (bug e324f244)."),
11856
+ attachments: z88.array(z88.object({
11857
+ filename: z88.string().min(1).describe("Filename for the attachment (e.g. mockup.txt, api-sketch.diff)"),
11858
+ content: z88.string().min(1).describe("File content \u2014 plain text (diffs, logs, config snippets)")
11788
11859
  })).optional().describe("File attachments: diffs, logs, config snippets, mockups (text-based)"),
11789
- send_upstream: z87.boolean().default(true).describe("Attempt to POST to configured AskExe support endpoint"),
11790
- on_behalf_of_email: z87.string().email().optional().describe("ADMIN ONLY: file this request owned by another customer's license email; ignored unless caller holds the support admin token")
11860
+ send_upstream: z88.boolean().default(true).describe("Attempt to POST to configured AskExe support endpoint"),
11861
+ on_behalf_of_email: z88.string().email().optional().describe("ADMIN ONLY: file this request owned by another customer's license email; ignored unless caller holds the support admin token")
11791
11862
  }
11792
11863
  },
11793
11864
  async ({
@@ -11943,10 +12014,10 @@ Upstream status: ${upstreamStatus}`
11943
12014
  }
11944
12015
 
11945
12016
  // src/mcp/tools/update-bug-report.ts
11946
- import { z as z88 } from "zod";
12017
+ import { z as z89 } from "zod";
11947
12018
  import { readdir, readFile as readFile2, writeFile as writeFile4 } from "fs/promises";
11948
12019
  import path15 from "path";
11949
- var STATUS = z88.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
12020
+ var STATUS = z89.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
11950
12021
  var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
11951
12022
  var FRONTMATTER_ID_RE = /^id:\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\s*$/m;
11952
12023
  async function readReportId(filePath) {
@@ -12053,20 +12124,21 @@ function registerUpdateBugReport(server) {
12053
12124
  title: "Update Bug Report",
12054
12125
  description: "Update a previously filed bug report. As the filing customer (owner) you can add follow-up notes (notes/add_note), attach additional evidence (add_evidence), and request a reopen on a recurring fixed bug (reopen_request). AskExe support (with an admin token) can also move status: open \u2192 triaged \u2192 fixed \u2192 closed (or wontfix). Updates the local file, POSTs the change to AskExe support, and stores a memory.",
12055
12126
  inputSchema: {
12056
- id: z88.string().min(8).describe("Bug report UUID (full or 8-char prefix)"),
12127
+ id: z89.string().min(8).describe("Bug report UUID (full or 8-char prefix)"),
12057
12128
  status: STATUS.optional().describe(
12058
12129
  "New status (admin only): open, triaged, fixed, closed, wontfix. Owners cannot set this \u2014 use reopen_request instead."
12059
12130
  ),
12060
- fix_version: z88.string().optional().describe("Version that fixes this bug (admin only, e.g. '0.9.161')"),
12061
- notes: z88.string().optional().describe("Follow-up notes about the bug or status change"),
12062
- add_note: z88.string().optional().describe("Owner follow-up note (alias of notes)"),
12063
- add_evidence: z88.string().optional().describe("Additional evidence: logs, repro details, stack traces"),
12064
- reopen_request: z88.boolean().optional().describe("Request a reopen on a recurring fixed/closed bug"),
12065
- reopen_reason: z88.string().optional().describe("Why the bug should be reopened (recurring symptoms, etc.)"),
12066
- send_upstream: z88.boolean().default(true).describe("POST the change to AskExe support endpoint")
12131
+ fix_version: z89.string().optional().describe("Version that fixes this bug (admin only, e.g. '0.9.161')"),
12132
+ product: z89.string().optional().describe("Re-label this bug's product (admin only): exe-os, exe-create, exe-wiki, exe-gateway, exe-crm, exe-build, exe-chat, exe-auth, exe-monitor, exe-db, exe-erp"),
12133
+ notes: z89.string().optional().describe("Follow-up notes about the bug or status change"),
12134
+ add_note: z89.string().optional().describe("Owner follow-up note (alias of notes)"),
12135
+ add_evidence: z89.string().optional().describe("Additional evidence: logs, repro details, stack traces"),
12136
+ reopen_request: z89.boolean().optional().describe("Request a reopen on a recurring fixed/closed bug"),
12137
+ reopen_reason: z89.string().optional().describe("Why the bug should be reopened (recurring symptoms, etc.)"),
12138
+ send_upstream: z89.boolean().default(true).describe("POST the change to AskExe support endpoint")
12067
12139
  }
12068
12140
  },
12069
- async ({ id, status: status2, fix_version, notes, add_note, add_evidence, reopen_request, reopen_reason, send_upstream }) => {
12141
+ async ({ id, status: status2, fix_version, product, notes, add_note, add_evidence, reopen_request, reopen_reason, send_upstream }) => {
12070
12142
  const { agentId, agentRole } = getActiveAgent();
12071
12143
  const config = await loadConfig();
12072
12144
  const isAdmin = !!resolveSupportAdminToken(config);
@@ -12108,6 +12180,7 @@ These do not match \u2014 not updating to avoid mutating the wrong bug. Verify t
12108
12180
  if (reopen) changeParts.push("reopen requested");
12109
12181
  else if (status2) changeParts.push(`marked ${status2}`);
12110
12182
  if (fix_version) changeParts.push(`fix v${fix_version}`);
12183
+ if (product) changeParts.push(`product \u2192 ${product}`);
12111
12184
  if (add_evidence) changeParts.push("evidence added");
12112
12185
  if (followUpNote && !reopen && !status2) changeParts.push("note added");
12113
12186
  const change = changeParts.length > 0 ? changeParts.join(", ") : "updated";
@@ -12151,6 +12224,7 @@ These do not match \u2014 not updating to avoid mutating the wrong bug. Verify t
12151
12224
  payload.fixed_version = fix_version;
12152
12225
  payload.fix_version = fix_version;
12153
12226
  }
12227
+ if (product) payload.product = product;
12154
12228
  if (followUpNote) payload.triage_notes = followUpNote;
12155
12229
  } else {
12156
12230
  if (followUpNote) payload.add_note = followUpNote;
@@ -12170,6 +12244,7 @@ ID: ${fullId}
12170
12244
  ` + (status2 && isAdmin ? `New status: ${status2}
12171
12245
  ` : "") + (reopen ? `Reopen requested: yes
12172
12246
  ` : "") + (fix_version && isAdmin ? `Fix version: ${fix_version}
12247
+ ` : "") + (product && isAdmin ? `Product: ${product}
12173
12248
  ` : "") + (add_evidence ? `Evidence: added
12174
12249
  ` : "") + (followUpNote ? `Note: added
12175
12250
  ` : "") + `Mode: ${isAdmin ? "admin" : "owner"}
@@ -12184,10 +12259,10 @@ Upstream status: ${upstreamStatus}`
12184
12259
  }
12185
12260
 
12186
12261
  // src/mcp/tools/update-feature-request.ts
12187
- import { z as z89 } from "zod";
12262
+ import { z as z90 } from "zod";
12188
12263
  import { readdir as readdir2, readFile as readFile3, writeFile as writeFile5 } from "fs/promises";
12189
12264
  import path16 from "path";
12190
- var STATUS2 = z89.enum(["open", "planned", "in_progress", "shipped", "closed", "wontdo"]);
12265
+ var STATUS2 = z90.enum(["open", "planned", "in_progress", "shipped", "closed", "wontdo"]);
12191
12266
  async function findRequestFile(id) {
12192
12267
  const dir = path16.join(EXE_AI_DIR, "feature-requests");
12193
12268
  try {
@@ -12247,11 +12322,11 @@ function registerUpdateFeatureRequest(server) {
12247
12322
  title: "Update Feature Request",
12248
12323
  description: "Update the status of a previously filed feature request. Updates local file, POSTs change to AskExe support, and stores a memory. Status flow: open \u2192 planned \u2192 in_progress \u2192 shipped \u2192 closed (or wontdo at any point).",
12249
12324
  inputSchema: {
12250
- id: z89.string().min(8).describe("Feature request UUID (full or 8-char prefix)"),
12325
+ id: z90.string().min(8).describe("Feature request UUID (full or 8-char prefix)"),
12251
12326
  status: STATUS2.describe("New status: open, planned, in_progress, shipped, closed, wontdo"),
12252
- shipped_version: z89.string().optional().describe("Version that ships this feature (e.g. '0.9.161')"),
12253
- notes: z89.string().optional().describe("Notes about the status change"),
12254
- send_upstream: z89.boolean().default(true).describe("POST status change to AskExe support endpoint")
12327
+ shipped_version: z90.string().optional().describe("Version that ships this feature (e.g. '0.9.161')"),
12328
+ notes: z90.string().optional().describe("Notes about the status change"),
12329
+ send_upstream: z90.boolean().default(true).describe("POST status change to AskExe support endpoint")
12255
12330
  }
12256
12331
  },
12257
12332
  async ({ id, status: status2, shipped_version, notes, send_upstream }) => {
@@ -12323,7 +12398,7 @@ Upstream status: ${upstreamStatus}`
12323
12398
  }
12324
12399
 
12325
12400
  // src/mcp/tools/support.ts
12326
- import { z as z90 } from "zod";
12401
+ import { z as z91 } from "zod";
12327
12402
  function formatRows(rows, mode) {
12328
12403
  const lines = [`exe-os support ${mode}`, ""];
12329
12404
  for (const row of rows) {
@@ -12364,7 +12439,7 @@ function registerSupportTools(server) {
12364
12439
  title: "Support Test",
12365
12440
  description: "End-to-end support intake smoke test. Files a clearly marked test report upstream and auto-closes it on AskExe machines with admin credentials.",
12366
12441
  inputSchema: {
12367
- project: z90.string().default("support-smoke").describe("Customer/project name, e.g. hygo")
12442
+ project: z91.string().default("support-smoke").describe("Customer/project name, e.g. hygo")
12368
12443
  }
12369
12444
  },
12370
12445
  async ({ project }) => {
@@ -12382,9 +12457,9 @@ function registerSupportTools(server) {
12382
12457
  title: "My Bug Reports",
12383
12458
  description: "List bug reports you've filed, scoped to your license. Shows status (open/triaged/fixed/closed), severity, and fixed_version so you know when to update.",
12384
12459
  inputSchema: {
12385
- status: z90.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("all").describe("Filter by status. Default: all"),
12386
- limit: z90.number().min(1).max(500).default(25).describe("Max results per page (1-500)"),
12387
- offset: z90.number().min(0).default(0).describe("Number of results to skip for pagination. Use next_offset from a prior response.")
12460
+ status: z91.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("all").describe("Filter by status. Default: all"),
12461
+ limit: z91.number().min(1).max(500).default(25).describe("Max results per page (1-500)"),
12462
+ offset: z91.number().min(0).default(0).describe("Number of results to skip for pagination. Use next_offset from a prior response.")
12388
12463
  }
12389
12464
  },
12390
12465
  async ({ status: status2, limit, offset }) => {
@@ -12454,9 +12529,9 @@ function registerSupportTools(server) {
12454
12529
  title: "My Feature Requests",
12455
12530
  description: "List feature requests you've filed, scoped to your license. Shows status (open/planned/in_progress/shipped/closed), priority, and shipped_version so you know when to update.",
12456
12531
  inputSchema: {
12457
- status: z90.enum(["all", "open", "planned", "in_progress", "shipped", "closed", "wontdo"]).default("all").describe("Filter by status. Default: all"),
12458
- limit: z90.number().min(1).max(500).default(25).describe("Max results per page (1-500)"),
12459
- offset: z90.number().min(0).default(0).describe("Number of results to skip for pagination. Use next_offset from a prior response.")
12532
+ status: z91.enum(["all", "open", "planned", "in_progress", "shipped", "closed", "wontdo"]).default("all").describe("Filter by status. Default: all"),
12533
+ limit: z91.number().min(1).max(500).default(25).describe("Max results per page (1-500)"),
12534
+ offset: z91.number().min(0).default(0).describe("Number of results to skip for pagination. Use next_offset from a prior response.")
12460
12535
  }
12461
12536
  },
12462
12537
  async ({ status: status2, limit, offset }) => {
@@ -12527,8 +12602,8 @@ function registerSupportTools(server) {
12527
12602
  title: "My Reviews",
12528
12603
  description: "List reviews you've filed, scoped to your license. Shows status (open/in_review/approved/merged/closed/rejected), priority, and resolution.",
12529
12604
  inputSchema: {
12530
- status: z90.enum(["all", "open", "in_review", "approved", "merged", "closed", "rejected"]).default("all").describe("Filter by status. Default: all"),
12531
- limit: z90.number().min(1).max(50).default(25).describe("Max results")
12605
+ status: z91.enum(["all", "open", "in_review", "approved", "merged", "closed", "rejected"]).default("all").describe("Filter by status. Default: all"),
12606
+ limit: z91.number().min(1).max(50).default(25).describe("Max results")
12532
12607
  }
12533
12608
  },
12534
12609
  async ({ status: status2, limit }) => {
@@ -12602,7 +12677,7 @@ import { existsSync as existsSync8 } from "fs";
12602
12677
  import { dirname, join as join3, parse as pathParse } from "path";
12603
12678
  import { fileURLToPath as fileURLToPath2 } from "url";
12604
12679
  import { promisify as promisify2 } from "util";
12605
- import { z as z91 } from "zod";
12680
+ import { z as z92 } from "zod";
12606
12681
  function findPackageRoot() {
12607
12682
  let dir = dirname(fileURLToPath2(import.meta.url));
12608
12683
  const { root } = pathParse(dir);
@@ -12678,12 +12753,12 @@ function registerCliParityTools(server) {
12678
12753
  title: "Doctor",
12679
12754
  description: "Run exe-os doctor audit. Defaults to read-only diagnostics; optional dry-run/fix flags mirror CLI.",
12680
12755
  inputSchema: {
12681
- agent: z91.string().optional(),
12682
- project: z91.string().optional(),
12683
- verbose: z91.boolean().default(false),
12684
- conflicts: z91.boolean().default(false),
12685
- dry_run: z91.boolean().default(false),
12686
- fix: z91.boolean().default(false)
12756
+ agent: z92.string().optional(),
12757
+ project: z92.string().optional(),
12758
+ verbose: z92.boolean().default(false),
12759
+ conflicts: z92.boolean().default(false),
12760
+ dry_run: z92.boolean().default(false),
12761
+ fix: z92.boolean().default(false)
12687
12762
  }
12688
12763
  }, async ({ agent, project, verbose, conflicts, dry_run, fix }) => {
12689
12764
  const args = [];
@@ -12700,9 +12775,9 @@ function registerCliParityTools(server) {
12700
12775
  title: "Rename Employee",
12701
12776
  description: "Rename an employee using the same path as `exe-os rename <old> <new>`. Use for customer roster/identity renames.",
12702
12777
  inputSchema: {
12703
- old_name: z91.string().min(1),
12704
- new_name: z91.string().min(1),
12705
- dry_run: z91.boolean().default(false)
12778
+ old_name: z92.string().min(1),
12779
+ new_name: z92.string().min(1),
12780
+ dry_run: z92.boolean().default(false)
12706
12781
  }
12707
12782
  }, async ({ old_name, new_name, dry_run }) => {
12708
12783
  if (dry_run) {
@@ -12715,7 +12790,7 @@ function registerCliParityTools(server) {
12715
12790
  server.registerTool("status_brief", {
12716
12791
  title: "Status Brief",
12717
12792
  description: "Return current employee/tmux status. Mirrors `exe-status` and supports optional deep view for one employee.",
12718
- inputSchema: { employee: z91.string().optional() }
12793
+ inputSchema: { employee: z92.string().optional() }
12719
12794
  }, async ({ employee }) => {
12720
12795
  const text5 = await status(employee);
12721
12796
  return result2(text5, { ok: true, employee: employee ?? null });
@@ -12723,7 +12798,7 @@ function registerCliParityTools(server) {
12723
12798
  server.registerTool("pending_work_summary", {
12724
12799
  title: "Pending Work Summary",
12725
12800
  description: "Return pending reviews, messages, and notifications using the same summaries as the CLI tools.",
12726
- inputSchema: { agent: z91.string().optional() }
12801
+ inputSchema: { agent: z92.string().optional() }
12727
12802
  }, async ({ agent }) => {
12728
12803
  const settled = await Promise.allSettled([
12729
12804
  runDistScript("exe-pending-reviews", [], 3e4),
@@ -12759,7 +12834,7 @@ function registerCliParityTools(server) {
12759
12834
  server.registerTool("key_rotation_preflight", {
12760
12835
  title: "Key Rotation Preflight",
12761
12836
  description: "Dry-run key rotation/update preflight. No destructive changes.",
12762
- inputSchema: { mode: z91.enum(["rotate", "update"]).default("rotate") }
12837
+ inputSchema: { mode: z92.enum(["rotate", "update"]).default("rotate") }
12763
12838
  }, async ({ mode }) => {
12764
12839
  const out = await runCommand("exe-os", ["key", mode, "--dry-run"], 6e4);
12765
12840
  return result2(out.text, { ok: out.ok, command: out.command, mode }, !out.ok);
@@ -12785,11 +12860,11 @@ function registerCliParityTools(server) {
12785
12860
  title: "Stack Update Check",
12786
12861
  description: "Plan/check a customer stack update without applying Docker changes. Mirrors `exe-os stack-update --check`.",
12787
12862
  inputSchema: {
12788
- target: z91.string().optional(),
12789
- manifest: z91.string().optional(),
12790
- compose_file: z91.string().optional(),
12791
- env_file: z91.string().optional(),
12792
- deployment_persona: z91.enum(["customer", "askexe-control-plane"]).default("customer")
12863
+ target: z92.string().optional(),
12864
+ manifest: z92.string().optional(),
12865
+ compose_file: z92.string().optional(),
12866
+ env_file: z92.string().optional(),
12867
+ deployment_persona: z92.enum(["customer", "askexe-control-plane"]).default("customer")
12793
12868
  }
12794
12869
  }, async ({ target, manifest, compose_file, env_file, deployment_persona }) => {
12795
12870
  const args = ["stack-update", "--check", "--deployment-persona", deployment_persona];
@@ -12808,7 +12883,7 @@ function registerCliParityTools(server) {
12808
12883
  const out = await runCommand("exe-os", ["cloud", "status"], 45e3);
12809
12884
  let healthSection = "";
12810
12885
  try {
12811
- const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-NWYJEIZS.js");
12886
+ const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-ULVVOIPL.js");
12812
12887
  const h = await getRetrievalHealth2();
12813
12888
  const lines = [
12814
12889
  "",
@@ -12843,7 +12918,7 @@ function registerCliParityTools(server) {
12843
12918
  }
12844
12919
 
12845
12920
  // src/mcp/tools/code-context.ts
12846
- import { z as z92 } from "zod";
12921
+ import { z as z93 } from "zod";
12847
12922
  function errorResult10(text5) {
12848
12923
  return { content: [{ type: "text", text: text5 }], isError: true };
12849
12924
  }
@@ -12855,20 +12930,20 @@ function registerCodeContext(server) {
12855
12930
  title: "Code Context",
12856
12931
  description: "Persistent codebase context engine with semantic vector search. One consolidated tool to avoid MCP bloat. Actions: index (structural only), index_embed (structural + vector embeddings), search (semantic+lexical hybrid), trace, blast_radius, stats. Search uses RRF fusion of embeddings (cosine similarity) + lexical scoring. Falls back to lexical if daemon unavailable or embeddings are off.",
12857
12932
  inputSchema: {
12858
- action: z92.enum(["index", "index_embed", "search", "trace", "blast_radius", "stats"]).describe("Code context operation. index_embed = index + generate embeddings for semantic search."),
12859
- project_root: z92.string().optional().describe("Repository root. Defaults to current working directory."),
12860
- query: z92.string().optional().describe("Natural language search query (e.g. 'authentication logic', 'database migration'). Semantic search finds conceptual matches, not just keywords."),
12861
- symbol: z92.string().optional().describe("Symbol/function/class/type name for trace or blast_radius"),
12862
- file_path: z92.string().optional().describe("File path for blast_radius"),
12863
- force: z92.boolean().optional().describe("Force rebuild before answering"),
12864
- limit: z92.coerce.number().int().min(1).max(100).optional().describe("Max results"),
12865
- offset: z92.coerce.number().int().min(0).optional().describe("Search pagination offset"),
12866
- refresh_index: z92.boolean().optional().describe("Refresh/rebuild index before searching"),
12867
- languages: z92.array(z92.string()).optional().describe('Language filters, e.g. ["python", "typescript"]'),
12868
- paths: z92.array(z92.string()).optional().describe("Path/glob filters"),
12869
- depth: z92.coerce.number().int().min(1).max(5).optional().describe("Dependent traversal depth for blast_radius"),
12870
- max_files: z92.coerce.number().int().min(1).max(1e4).optional().describe("Max code files to index"),
12871
- lexical_only: z92.boolean().optional().describe("Force lexical-only search (skip vector similarity). Default: false \u2014 uses semantic hybrid search.")
12933
+ action: z93.enum(["index", "index_embed", "search", "trace", "blast_radius", "stats"]).describe("Code context operation. index_embed = index + generate embeddings for semantic search."),
12934
+ project_root: z93.string().optional().describe("Repository root. Defaults to current working directory."),
12935
+ query: z93.string().optional().describe("Natural language search query (e.g. 'authentication logic', 'database migration'). Semantic search finds conceptual matches, not just keywords."),
12936
+ symbol: z93.string().optional().describe("Symbol/function/class/type name for trace or blast_radius"),
12937
+ file_path: z93.string().optional().describe("File path for blast_radius"),
12938
+ force: z93.boolean().optional().describe("Force rebuild before answering"),
12939
+ limit: z93.coerce.number().int().min(1).max(100).optional().describe("Max results"),
12940
+ offset: z93.coerce.number().int().min(0).optional().describe("Search pagination offset"),
12941
+ refresh_index: z93.boolean().optional().describe("Refresh/rebuild index before searching"),
12942
+ languages: z93.array(z93.string()).optional().describe('Language filters, e.g. ["python", "typescript"]'),
12943
+ paths: z93.array(z93.string()).optional().describe("Path/glob filters"),
12944
+ depth: z93.coerce.number().int().min(1).max(5).optional().describe("Dependent traversal depth for blast_radius"),
12945
+ max_files: z93.coerce.number().int().min(1).max(1e4).optional().describe("Max code files to index"),
12946
+ lexical_only: z93.boolean().optional().describe("Force lexical-only search (skip vector similarity). Default: false \u2014 uses semantic hybrid search.")
12872
12947
  }
12873
12948
  }, async ({ action, project_root, query, symbol, file_path, force, limit, offset, refresh_index, languages, paths, depth, max_files, lexical_only }) => {
12874
12949
  const opts = { projectRoot: project_root, force, maxFiles: max_files };
@@ -12876,7 +12951,7 @@ function registerCodeContext(server) {
12876
12951
  const index = buildCodeContextIndex(opts);
12877
12952
  let graphExtract;
12878
12953
  try {
12879
- const { autoExtractGraphEntities } = await import("./graph-auto-extract-HFXDXJC3.js");
12954
+ const { autoExtractGraphEntities } = await import("./graph-auto-extract-AJZUV3PO.js");
12880
12955
  graphExtract = await autoExtractGraphEntities(opts.projectRoot);
12881
12956
  } catch {
12882
12957
  }
@@ -12951,13 +13026,13 @@ function registerCodeContext(server) {
12951
13026
  }
12952
13027
 
12953
13028
  // src/mcp/tools/support-inbox.ts
12954
- import { z as z93 } from "zod";
13029
+ import { z as z94 } from "zod";
12955
13030
  import { readFileSync as readFileSync7 } from "fs";
12956
13031
  import { join as join4 } from "path";
12957
13032
  import { homedir as homedir4 } from "os";
12958
13033
  var DEFAULT_ENDPOINT = "https://api.askexe.com/admin/support/bug-reports";
12959
13034
  var DEFAULT_OWNER_ENDPOINT = "https://api.askexe.com/v1/support/bug-reports";
12960
- var STATUS3 = z93.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
13035
+ var STATUS3 = z94.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
12961
13036
  function adminToken() {
12962
13037
  if (process.env.ASKEXE_SUPPORT_ADMIN_TOKEN) return process.env.ASKEXE_SUPPORT_ADMIN_TOKEN;
12963
13038
  if (process.env.EXE_SUPPORT_ADMIN_TOKEN) return process.env.EXE_SUPPORT_ADMIN_TOKEN;
@@ -13064,9 +13139,9 @@ function registerListBugReports(server) {
13064
13139
  title: "List Bug Reports",
13065
13140
  description: "AskExe-internal only: list incoming customer bug reports from the support inbox.",
13066
13141
  inputSchema: {
13067
- status: z93.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("open"),
13068
- severity: z93.enum(["p0", "p1", "p2", "p3"]).optional(),
13069
- limit: z93.number().int().min(1).max(100).default(25)
13142
+ status: z94.enum(["all", "open", "triaged", "fixed", "closed", "wontfix"]).default("open"),
13143
+ severity: z94.enum(["p0", "p1", "p2", "p3"]).optional(),
13144
+ limit: z94.number().int().min(1).max(100).default(25)
13070
13145
  }
13071
13146
  },
13072
13147
  async ({ status: status2, severity, limit }) => {
@@ -13096,7 +13171,7 @@ function registerGetBugReport(server) {
13096
13171
  {
13097
13172
  title: "Get Bug Report",
13098
13173
  description: "AskExe-internal only: fetch one customer bug report with full markdown payload and comments thread.",
13099
- inputSchema: { id: z93.string().min(8) }
13174
+ inputSchema: { id: z94.string().min(8) }
13100
13175
  },
13101
13176
  async ({ id }) => {
13102
13177
  const data = await requestJson(`${endpoint()}/${encodeURIComponent(id)}`);
@@ -13113,8 +13188,8 @@ function registerAddBugReportComment(server) {
13113
13188
  title: "Add Bug Report Comment",
13114
13189
  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.",
13115
13190
  inputSchema: {
13116
- id: z93.string().min(8),
13117
- comment: z93.string().min(1).describe("Comment text to append to the bug report thread")
13191
+ id: z94.string().min(8),
13192
+ comment: z94.string().min(1).describe("Comment text to append to the bug report thread")
13118
13193
  }
13119
13194
  },
13120
13195
  async ({ id, comment }) => {
@@ -13132,7 +13207,7 @@ function registerGetBugReportComments(server) {
13132
13207
  {
13133
13208
  title: "Get Bug Report Comments",
13134
13209
  description: "AskExe-internal only: list the comments thread on a bug report (GET /comments).",
13135
- inputSchema: { id: z93.string().min(8) }
13210
+ inputSchema: { id: z94.string().min(8) }
13136
13211
  },
13137
13212
  async ({ id }) => {
13138
13213
  const data = await commentRequestJson(id);
@@ -13147,26 +13222,27 @@ function registerTriageBugReport(server) {
13147
13222
  title: "Triage Bug Report",
13148
13223
  description: "AskExe-internal only: update bug report status and link task/commit/release metadata.",
13149
13224
  inputSchema: {
13150
- id: z93.string().min(8),
13225
+ id: z94.string().min(8),
13151
13226
  status: STATUS3.optional(),
13152
- triage_notes: z93.string().optional(),
13153
- add_note: z93.string().optional().describe("Append a timestamped progress note without changing status or replacing triage_notes"),
13154
- linked_task_id: z93.string().optional(),
13155
- linked_commit: z93.string().optional(),
13156
- fixed_version: z93.string().optional()
13227
+ triage_notes: z94.string().optional(),
13228
+ add_note: z94.string().optional().describe("Append a timestamped progress note without changing status or replacing triage_notes"),
13229
+ linked_task_id: z94.string().optional(),
13230
+ linked_commit: z94.string().optional(),
13231
+ fixed_version: z94.string().optional(),
13232
+ product: z94.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")
13157
13233
  }
13158
13234
  },
13159
- async ({ id, status: status2, triage_notes, add_note, linked_task_id, linked_commit, fixed_version }) => {
13235
+ async ({ id, status: status2, triage_notes, add_note, linked_task_id, linked_commit, fixed_version, product }) => {
13160
13236
  const effectiveStatus = fixed_version && !status2 ? "closed" : status2;
13161
13237
  const data = await requestJson(`${endpoint()}/${encodeURIComponent(id)}`, {
13162
13238
  method: "PATCH",
13163
- body: JSON.stringify({ status: effectiveStatus, triage_notes, add_note, linked_task_id, linked_commit, fixed_version })
13239
+ body: JSON.stringify({ status: effectiveStatus, triage_notes, add_note, linked_task_id, linked_commit, fixed_version, product })
13164
13240
  });
13165
13241
  return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
13166
13242
  }
13167
13243
  );
13168
13244
  }
13169
- var FEATURE_STATUS = z93.enum(["open", "planned", "in_progress", "shipped", "closed", "wontdo"]);
13245
+ var FEATURE_STATUS = z94.enum(["open", "planned", "in_progress", "shipped", "closed", "wontdo"]);
13170
13246
  function featureEndpoint() {
13171
13247
  return endpoint().replace(/\/bug-reports\/?$/, "/feature-requests");
13172
13248
  }
@@ -13177,9 +13253,9 @@ function registerListFeatureRequests(server) {
13177
13253
  title: "List Feature Requests",
13178
13254
  description: "AskExe-internal only: list incoming customer feature requests from the support inbox.",
13179
13255
  inputSchema: {
13180
- status: z93.enum(["all", "open", "planned", "in_progress", "shipped", "closed", "wontdo"]).default("open"),
13181
- priority: z93.enum(["p0", "p1", "p2", "p3"]).optional(),
13182
- limit: z93.number().int().min(1).max(100).default(25)
13256
+ status: z94.enum(["all", "open", "planned", "in_progress", "shipped", "closed", "wontdo"]).default("open"),
13257
+ priority: z94.enum(["p0", "p1", "p2", "p3"]).optional(),
13258
+ limit: z94.number().int().min(1).max(100).default(25)
13183
13259
  }
13184
13260
  },
13185
13261
  async ({ status: status2, priority, limit }) => {
@@ -13198,7 +13274,7 @@ function registerGetFeatureRequest(server) {
13198
13274
  {
13199
13275
  title: "Get Feature Request",
13200
13276
  description: "AskExe-internal only: fetch one customer feature request with full payload.",
13201
- inputSchema: { id: z93.string().min(8) }
13277
+ inputSchema: { id: z94.string().min(8) }
13202
13278
  },
13203
13279
  async ({ id }) => {
13204
13280
  const data = await requestJson(`${featureEndpoint()}/${encodeURIComponent(id)}`);
@@ -13213,12 +13289,12 @@ function registerTriageFeatureRequest(server) {
13213
13289
  title: "Triage Feature Request",
13214
13290
  description: "AskExe-internal only: update feature request status, response notes, and version metadata.",
13215
13291
  inputSchema: {
13216
- id: z93.string().min(8),
13292
+ id: z94.string().min(8),
13217
13293
  status: FEATURE_STATUS.optional(),
13218
- response_notes: z93.string().optional(),
13219
- add_note: z93.string().optional().describe("Append a timestamped progress note without changing status or replacing response_notes"),
13220
- target_version: z93.string().optional(),
13221
- shipped_version: z93.string().optional()
13294
+ response_notes: z94.string().optional(),
13295
+ add_note: z94.string().optional().describe("Append a timestamped progress note without changing status or replacing response_notes"),
13296
+ target_version: z94.string().optional(),
13297
+ shipped_version: z94.string().optional()
13222
13298
  }
13223
13299
  },
13224
13300
  async ({ id, status: status2, response_notes, add_note, target_version, shipped_version }) => {
@@ -13231,7 +13307,7 @@ function registerTriageFeatureRequest(server) {
13231
13307
  }
13232
13308
  );
13233
13309
  }
13234
- var REVIEW_STATUS = z93.enum(["open", "in_review", "approved", "merged", "closed", "rejected"]);
13310
+ var REVIEW_STATUS = z94.enum(["open", "in_review", "approved", "merged", "closed", "rejected"]);
13235
13311
  function reviewEndpoint() {
13236
13312
  return endpoint().replace(/\/bug-reports\/?$/, "/reviews");
13237
13313
  }
@@ -13242,9 +13318,9 @@ function registerListReviews(server) {
13242
13318
  title: "List Reviews",
13243
13319
  description: "AskExe-internal only: list incoming review requests from the support inbox.",
13244
13320
  inputSchema: {
13245
- status: z93.enum(["all", "open", "in_review", "approved", "merged", "closed", "rejected"]).default("open"),
13246
- priority: z93.enum(["p0", "p1", "p2", "p3"]).optional(),
13247
- limit: z93.number().int().min(1).max(100).default(25)
13321
+ status: z94.enum(["all", "open", "in_review", "approved", "merged", "closed", "rejected"]).default("open"),
13322
+ priority: z94.enum(["p0", "p1", "p2", "p3"]).optional(),
13323
+ limit: z94.number().int().min(1).max(100).default(25)
13248
13324
  }
13249
13325
  },
13250
13326
  async ({ status: status2, priority, limit }) => {
@@ -13263,7 +13339,7 @@ function registerGetReview(server) {
13263
13339
  {
13264
13340
  title: "Get Review",
13265
13341
  description: "AskExe-internal only: fetch one review with full payload.",
13266
- inputSchema: { id: z93.string().min(8) }
13342
+ inputSchema: { id: z94.string().min(8) }
13267
13343
  },
13268
13344
  async ({ id }) => {
13269
13345
  const data = await requestJson(`${reviewEndpoint()}/${encodeURIComponent(id)}`);
@@ -13278,12 +13354,12 @@ function registerTriageReview(server) {
13278
13354
  title: "Triage Review",
13279
13355
  description: "AskExe-internal only: update review status, response notes, and resolution.",
13280
13356
  inputSchema: {
13281
- id: z93.string().min(8),
13357
+ id: z94.string().min(8),
13282
13358
  status: REVIEW_STATUS.optional(),
13283
- response_notes: z93.string().optional(),
13284
- add_note: z93.string().optional().describe("Append a timestamped progress note without changing status or replacing response_notes"),
13285
- resolution: z93.string().optional(),
13286
- pr_url: z93.string().optional()
13359
+ response_notes: z94.string().optional(),
13360
+ add_note: z94.string().optional().describe("Append a timestamped progress note without changing status or replacing response_notes"),
13361
+ resolution: z94.string().optional(),
13362
+ pr_url: z94.string().optional()
13287
13363
  }
13288
13364
  },
13289
13365
  async ({ id, status: status2, response_notes, add_note, resolution, pr_url }) => {
@@ -13297,7 +13373,7 @@ function registerTriageReview(server) {
13297
13373
  }
13298
13374
 
13299
13375
  // src/mcp/tools/decision.ts
13300
- import { z as z94 } from "zod";
13376
+ import { z as z95 } from "zod";
13301
13377
  function buildHandlers6() {
13302
13378
  const tools = /* @__PURE__ */ new Map();
13303
13379
  const fake = {
@@ -13321,12 +13397,12 @@ function registerDecision(server) {
13321
13397
  title: "Decision",
13322
13398
  description: "Store or retrieve authoritative decisions. Actions: store (persist a decision by domain), get (look up a decision by domain/query).",
13323
13399
  inputSchema: {
13324
- action: z94.enum(["store", "get"]).describe("Decision operation"),
13325
- domain: z94.string().optional().describe("Decision domain (e.g. 'architecture', 'hiring')"),
13326
- decision: z94.string().optional().describe("Decision text for action=store"),
13327
- rationale: z94.string().optional().describe("Why this decision was made (action=store)"),
13328
- query: z94.string().optional().describe("Search query for action=get"),
13329
- limit: z94.coerce.number().optional().describe("Max results for action=get")
13400
+ action: z95.enum(["store", "get"]).describe("Decision operation"),
13401
+ domain: z95.string().optional().describe("Decision domain (e.g. 'architecture', 'hiring')"),
13402
+ decision: z95.string().optional().describe("Decision text for action=store"),
13403
+ rationale: z95.string().optional().describe("Why this decision was made (action=store)"),
13404
+ query: z95.string().optional().describe("Search query for action=get"),
13405
+ limit: z95.coerce.number().optional().describe("Max results for action=get")
13330
13406
  }
13331
13407
  },
13332
13408
  async (input, extra) => {
@@ -13342,7 +13418,7 @@ function registerDecision(server) {
13342
13418
  }
13343
13419
 
13344
13420
  // src/mcp/tools/session.ts
13345
- import { z as z95 } from "zod";
13421
+ import { z as z96 } from "zod";
13346
13422
  function buildHandlers7() {
13347
13423
  const tools = /* @__PURE__ */ new Map();
13348
13424
  const fake = {
@@ -13390,17 +13466,17 @@ function registerSession(server) {
13390
13466
  title: "Session",
13391
13467
  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).",
13392
13468
  inputSchema: {
13393
- action: z95.enum(["events", "last_response", "set_mode", "get_mode"]).describe("Session operation"),
13394
- session_id: z95.string().optional().describe("Session ID for action=events"),
13395
- limit: z95.coerce.number().optional().describe("Max events for action=events"),
13469
+ action: z96.enum(["events", "last_response", "set_mode", "get_mode"]).describe("Session operation"),
13470
+ session_id: z96.string().optional().describe("Session ID for action=events"),
13471
+ limit: z96.coerce.number().optional().describe("Max events for action=events"),
13396
13472
  // set_mode params
13397
- mode: z95.enum(["explore", "task"]).optional().describe(
13473
+ mode: z96.enum(["explore", "task"]).optional().describe(
13398
13474
  "Mode for action=set_mode. 'explore' = divergent, no deliverable, nudges suppressed. 'task' = default convergent behaviour (resets any active explore session)."
13399
13475
  ),
13400
- duration_minutes: z95.number().optional().describe(
13476
+ duration_minutes: z96.number().optional().describe(
13401
13477
  `How long to stay in explore mode in minutes (action=set_mode, mode=explore). Default: ${DEFAULT_EXPLORE_DURATION_MS / 6e4} minutes (1 hour).`
13402
13478
  ),
13403
- notes: z95.string().optional().describe("Optional notes about this explore session (action=set_mode)")
13479
+ notes: z96.string().optional().describe("Optional notes about this explore session (action=set_mode)")
13404
13480
  }
13405
13481
  },
13406
13482
  async (input, extra) => {
@@ -13465,14 +13541,14 @@ All active explore sessions (${active.length}):
13465
13541
  }
13466
13542
 
13467
13543
  // src/mcp/tools/support-consolidated.ts
13468
- import { z as z97 } from "zod";
13544
+ import { z as z98 } from "zod";
13469
13545
 
13470
13546
  // src/mcp/tools/create-review.ts
13471
- import { z as z96 } from "zod";
13547
+ import { z as z97 } from "zod";
13472
13548
  import crypto6 from "crypto";
13473
13549
  import { mkdir as mkdir4, writeFile as writeFile6 } from "fs/promises";
13474
13550
  import path17 from "path";
13475
- var PRIORITY2 = z96.enum(["p0", "p1", "p2", "p3"]);
13551
+ var PRIORITY2 = z97.enum(["p0", "p1", "p2", "p3"]);
13476
13552
  function slugify3(input) {
13477
13553
  return input.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 80) || "review";
13478
13554
  }
@@ -13538,15 +13614,15 @@ function registerCreateReview(server) {
13538
13614
  title: "Create Review",
13539
13615
  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.",
13540
13616
  inputSchema: {
13541
- title: z96.string().min(3).describe("Short descriptive title"),
13542
- description: z96.string().optional().describe("What needs review and why"),
13617
+ title: z97.string().min(3).describe("Short descriptive title"),
13618
+ description: z97.string().optional().describe("What needs review and why"),
13543
13619
  priority: PRIORITY2.default("p1").describe("p0 critical -> p3 low"),
13544
- source: z96.string().optional().describe("Source: self-improve, manual, ci, etc."),
13545
- pr_url: z96.string().optional().describe("PR URL if applicable"),
13546
- product: z96.string().optional().describe("Product: exe-os (default), exe-create, exe-wiki, exe-gateway, exe-crm, exe-build"),
13547
- package_version: z96.string().optional().describe("Installed package version"),
13548
- project_name: z96.string().optional().describe("Project/customer context"),
13549
- send_upstream: z96.boolean().default(false).describe("Attempt to POST to configured AskExe support endpoint (disabled by default \u2014 review route not yet live)")
13620
+ source: z97.string().optional().describe("Source: self-improve, manual, ci, etc."),
13621
+ pr_url: z97.string().optional().describe("PR URL if applicable"),
13622
+ product: z97.string().optional().describe("Product: exe-os (default), exe-create, exe-wiki, exe-gateway, exe-crm, exe-build"),
13623
+ package_version: z97.string().optional().describe("Installed package version"),
13624
+ project_name: z97.string().optional().describe("Project/customer context"),
13625
+ send_upstream: z97.boolean().default(false).describe("Attempt to POST to configured AskExe support endpoint (disabled by default \u2014 review route not yet live)")
13550
13626
  }
13551
13627
  },
13552
13628
  async ({
@@ -13702,7 +13778,7 @@ function registerSupportConsolidated(server) {
13702
13778
  title: "Support",
13703
13779
  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.",
13704
13780
  inputSchema: {
13705
- action: z97.enum([
13781
+ action: z98.enum([
13706
13782
  "create_bug",
13707
13783
  "create_feature",
13708
13784
  "create_review",
@@ -13725,40 +13801,40 @@ function registerSupportConsolidated(server) {
13725
13801
  "health",
13726
13802
  "test"
13727
13803
  ]).describe("Support operation"),
13728
- title: z97.string().optional().describe("Bug/feature title"),
13729
- description: z97.string().optional().describe("Bug/feature description"),
13730
- steps_to_reproduce: z97.string().optional().describe("Steps to reproduce (bugs)"),
13731
- expected_behavior: z97.string().optional().describe("Expected behavior (bugs)"),
13732
- actual_behavior: z97.string().optional().describe("Actual behavior (bugs)"),
13733
- severity: z97.string().optional().describe("Severity: p0/p1/p2/p3"),
13734
- product: z97.string().optional().describe("Product: exe-os (default), exe-create, exe-wiki, exe-gateway, exe-crm, exe-build"),
13735
- use_case: z97.string().optional().describe("Use case (features)"),
13736
- proposed_solution: z97.string().optional().describe("Proposed solution (features)"),
13737
- priority: z97.string().optional().describe("Priority (features)"),
13738
- on_behalf_of_email: z97.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)"),
13739
- id: z97.string().optional().describe("Bug/feature ID for get/triage/add_comment/get_comments"),
13740
- comment: z97.string().optional().describe("Comment text to append to a bug report thread (add_comment)"),
13741
- status: z97.string().optional().describe("Filter by status"),
13742
- classification: z97.string().optional().describe("Triage classification"),
13743
- resolution: z97.string().optional().describe("Triage resolution"),
13744
- notes: z97.string().optional().describe("Triage notes (mapped to triage_notes for bug/feature triage)"),
13745
- triage_notes: z97.string().optional().describe("Triage notes (legacy field name)"),
13746
- linked_task_id: z97.string().optional().describe("Linked task ID for triage"),
13747
- linked_commit: z97.string().optional().describe("Linked commit hash for triage"),
13748
- fixed_version: z97.string().optional().describe("Version that fixes this bug"),
13749
- shipped_version: z97.string().optional().describe("Version that ships this feature (features only)"),
13750
- add_evidence: z97.string().optional().describe("Owner self-service: additional evidence (logs, repro, stack traces) for update_bug"),
13751
- reopen_request: z97.boolean().optional().describe("Owner self-service: request a reopen on a recurring fixed bug (update_bug)"),
13752
- reopen_reason: z97.string().optional().describe("Owner self-service: why the bug should be reopened (update_bug)"),
13753
- attachments: z97.array(z97.object({
13754
- filename: z97.string().min(1).describe("Filename for the attachment"),
13755
- content: z97.string().min(1).describe("File content \u2014 plain text")
13804
+ title: z98.string().optional().describe("Bug/feature title"),
13805
+ description: z98.string().optional().describe("Bug/feature description"),
13806
+ steps_to_reproduce: z98.string().optional().describe("Steps to reproduce (bugs)"),
13807
+ expected_behavior: z98.string().optional().describe("Expected behavior (bugs)"),
13808
+ actual_behavior: z98.string().optional().describe("Actual behavior (bugs)"),
13809
+ severity: z98.string().optional().describe("Severity: p0/p1/p2/p3"),
13810
+ 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"),
13811
+ use_case: z98.string().optional().describe("Use case (features)"),
13812
+ proposed_solution: z98.string().optional().describe("Proposed solution (features)"),
13813
+ priority: z98.string().optional().describe("Priority (features)"),
13814
+ 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)"),
13815
+ id: z98.string().optional().describe("Bug/feature ID for get/triage/add_comment/get_comments"),
13816
+ comment: z98.string().optional().describe("Comment text to append to a bug report thread (add_comment)"),
13817
+ status: z98.string().optional().describe("Filter by status"),
13818
+ classification: z98.string().optional().describe("Triage classification"),
13819
+ resolution: z98.string().optional().describe("Triage resolution"),
13820
+ notes: z98.string().optional().describe("Triage notes (mapped to triage_notes for bug/feature triage)"),
13821
+ triage_notes: z98.string().optional().describe("Triage notes (legacy field name)"),
13822
+ linked_task_id: z98.string().optional().describe("Linked task ID for triage"),
13823
+ linked_commit: z98.string().optional().describe("Linked commit hash for triage"),
13824
+ fixed_version: z98.string().optional().describe("Version that fixes this bug"),
13825
+ shipped_version: z98.string().optional().describe("Version that ships this feature (features only)"),
13826
+ add_evidence: z98.string().optional().describe("Owner self-service: additional evidence (logs, repro, stack traces) for update_bug"),
13827
+ reopen_request: z98.boolean().optional().describe("Owner self-service: request a reopen on a recurring fixed bug (update_bug)"),
13828
+ reopen_reason: z98.string().optional().describe("Owner self-service: why the bug should be reopened (update_bug)"),
13829
+ attachments: z98.array(z98.object({
13830
+ filename: z98.string().min(1).describe("Filename for the attachment"),
13831
+ content: z98.string().min(1).describe("File content \u2014 plain text")
13756
13832
  })).optional().describe("File attachments for bug reports / feature requests (diffs, logs, config snippets)"),
13757
- source: z97.string().optional().describe("Review source: self-improve, manual, ci"),
13758
- pr_url: z97.string().optional().describe("PR URL (reviews)"),
13759
- review_resolution: z97.string().optional().describe("Resolution text (reviews)"),
13760
- limit: z97.coerce.number().optional().describe("Max results per page (up to 500)"),
13761
- offset: z97.coerce.number().optional().describe("Number of results to skip for pagination (list_my_bugs/list_my_features). Use next_offset from a prior response.")
13833
+ source: z98.string().optional().describe("Review source: self-improve, manual, ci"),
13834
+ pr_url: z98.string().optional().describe("PR URL (reviews)"),
13835
+ review_resolution: z98.string().optional().describe("Resolution text (reviews)"),
13836
+ limit: z98.coerce.number().optional().describe("Max results per page (up to 500)"),
13837
+ 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.")
13762
13838
  }
13763
13839
  },
13764
13840
  async (input, extra) => {
@@ -13844,7 +13920,7 @@ function registerSupportConsolidated(server) {
13844
13920
  }
13845
13921
 
13846
13922
  // src/mcp/tools/diagnostics.ts
13847
- import { z as z98 } from "zod";
13923
+ import { z as z99 } from "zod";
13848
13924
  function buildHandlers9() {
13849
13925
  const tools = /* @__PURE__ */ new Map();
13850
13926
  const fake = {
@@ -13865,21 +13941,21 @@ function registerDiagnostics(server) {
13865
13941
  title: "Diagnostics",
13866
13942
  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).`,
13867
13943
  inputSchema: {
13868
- action: z98.string().describe(`Diagnostic operation: ${toolNames.join(", ")}`),
13944
+ action: z99.string().describe(`Diagnostic operation: ${toolNames.join(", ")}`),
13869
13945
  // Pass-through params used by various sub-tools
13870
- agent_id: z98.string().optional().describe("Agent to probe (drift). Defaults to all agents."),
13871
- name: z98.string().optional().describe("Employee name (rename_employee)"),
13872
- new_name: z98.string().optional().describe("New employee name (rename_employee)"),
13873
- query: z98.string().optional().describe("Search/filter query, or natural language for tool_search"),
13874
- format: z98.string().optional().describe("Output format"),
13875
- limit: z98.coerce.number().int().min(1).max(100).optional().describe("Max results for tool_search (default 20)"),
13876
- from_agent_id: z98.string().optional().describe("Source agent ID to merge from (merge_agent_memories)"),
13877
- to_agent_id: z98.string().optional().describe("Target agent ID to merge into (merge_agent_memories)"),
13878
- dry_run: z98.boolean().optional().default(true).describe("Preview mode \u2014 show count without changing (merge_agent_memories). Default: true"),
13946
+ agent_id: z99.string().optional().describe("Agent to probe (drift). Defaults to all agents."),
13947
+ name: z99.string().optional().describe("Employee name (rename_employee)"),
13948
+ new_name: z99.string().optional().describe("New employee name (rename_employee)"),
13949
+ query: z99.string().optional().describe("Search/filter query, or natural language for tool_search"),
13950
+ format: z99.string().optional().describe("Output format"),
13951
+ limit: z99.coerce.number().int().min(1).max(100).optional().describe("Max results for tool_search (default 20)"),
13952
+ from_agent_id: z99.string().optional().describe("Source agent ID to merge from (merge_agent_memories)"),
13953
+ to_agent_id: z99.string().optional().describe("Target agent ID to merge into (merge_agent_memories)"),
13954
+ dry_run: z99.boolean().optional().default(true).describe("Preview mode \u2014 show count without changing (merge_agent_memories). Default: true"),
13879
13955
  // Steward params (absorbed from steward tool)
13880
- operation: z98.string().optional().describe("Operation name for steward_check/steward_override"),
13881
- target: z98.string().optional().describe("Target resource for steward_check/steward_override"),
13882
- reason: z98.string().optional().describe("Override reason for steward_override")
13956
+ operation: z99.string().optional().describe("Operation name for steward_check/steward_override"),
13957
+ target: z99.string().optional().describe("Target resource for steward_check/steward_override"),
13958
+ reason: z99.string().optional().describe("Override reason for steward_override")
13883
13959
  }
13884
13960
  },
13885
13961
  async (input, extra) => {
@@ -14044,7 +14120,7 @@ async function handleMergeAgentMemories(input) {
14044
14120
  }
14045
14121
  async function handleSpawnFailures() {
14046
14122
  try {
14047
- const { getOrchestrationMetrics } = await import("./orchestration-events-SKESCF4F.js");
14123
+ const { getOrchestrationMetrics } = await import("./orchestration-events-O5P5NEKS.js");
14048
14124
  const metrics = await getOrchestrationMetrics();
14049
14125
  const c = metrics.counts;
14050
14126
  const attempted = c.tmuxSpawnAttempted;
@@ -14146,7 +14222,7 @@ async function handleOrchestrationHealth() {
14146
14222
  async function handleWorkMap() {
14147
14223
  try {
14148
14224
  const { getAgentLivenessReport } = await import("./agent-heartbeat-I5UPGXAU.js");
14149
- const { classifyRole } = await import("./session-kill-telemetry-VQ4JWWTI.js");
14225
+ const { classifyRole } = await import("./session-kill-telemetry-IBNCJSI7.js");
14150
14226
  const { buildSessionDeathSummary } = await import("./orchestration-health-read-EJWVUARG.js");
14151
14227
  const { getPaneCwd } = await import("./lib/tmux-status.js");
14152
14228
  const live = getAgentLivenessReport();
@@ -14281,7 +14357,7 @@ async function handleDrift(input) {
14281
14357
  }
14282
14358
  async function handleSteward(action, input) {
14283
14359
  const gate = new StewardGate();
14284
- const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-XIPGXSQA.js");
14360
+ const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-SHM4QSRJ.js");
14285
14361
  const inputAgent = input.agent_id;
14286
14362
  const operation = input.operation;
14287
14363
  const target = input.target;
@@ -14329,7 +14405,7 @@ async function handleSteward(action, input) {
14329
14405
  }
14330
14406
 
14331
14407
  // src/mcp/tools/dreaming.ts
14332
- import { z as z99 } from "zod";
14408
+ import { z as z100 } from "zod";
14333
14409
  function registerDreaming(server) {
14334
14410
  server.registerTool(
14335
14411
  "dreaming",
@@ -14337,10 +14413,10 @@ function registerDreaming(server) {
14337
14413
  title: "Dreaming",
14338
14414
  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).",
14339
14415
  inputSchema: {
14340
- action: z99.enum(["run", "status", "history"]).describe("Action to perform"),
14341
- agent_id: z99.string().optional().describe("Agent to analyze. Defaults to calling agent."),
14342
- hours: z99.coerce.number().min(1).max(720).optional().describe("Lookback window in hours (run). Default 24."),
14343
- limit: z99.coerce.number().int().min(1).max(50).optional().describe("Max results for history. Default 10.")
14416
+ action: z100.enum(["run", "status", "history"]).describe("Action to perform"),
14417
+ agent_id: z100.string().optional().describe("Agent to analyze. Defaults to calling agent."),
14418
+ hours: z100.coerce.number().min(1).max(720).optional().describe("Lookback window in hours (run). Default 24."),
14419
+ limit: z100.coerce.number().int().min(1).max(50).optional().describe("Max results for history. Default 10.")
14344
14420
  }
14345
14421
  },
14346
14422
  async ({ action, agent_id, hours, limit }) => {
@@ -14463,7 +14539,7 @@ ${String(row.raw_text)}`
14463
14539
  }
14464
14540
 
14465
14541
  // src/mcp/tools/steward.ts
14466
- import { z as z100 } from "zod";
14542
+ import { z as z101 } from "zod";
14467
14543
  function errorResult11(text5) {
14468
14544
  return { content: [{ type: "text", text: text5 }], isError: true };
14469
14545
  }
@@ -14475,12 +14551,12 @@ function registerSteward(server) {
14475
14551
  title: "Steward Identity Gate",
14476
14552
  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.",
14477
14553
  inputSchema: {
14478
- action: z100.enum(["check", "audit_log", "override"]).describe("Steward operation to perform"),
14479
- agent: z100.string().optional().describe("Agent to check (defaults to calling agent for action=check)"),
14480
- operation: z100.string().optional().describe("Operation name (required for check/override)"),
14481
- target: z100.string().optional().describe("Target resource (required for check/override)"),
14482
- reason: z100.string().optional().describe("Override reason (required for action=override)"),
14483
- limit: z100.number().optional().describe("Max audit entries to return (default: 50)")
14554
+ action: z101.enum(["check", "audit_log", "override"]).describe("Steward operation to perform"),
14555
+ agent: z101.string().optional().describe("Agent to check (defaults to calling agent for action=check)"),
14556
+ operation: z101.string().optional().describe("Operation name (required for check/override)"),
14557
+ target: z101.string().optional().describe("Target resource (required for check/override)"),
14558
+ reason: z101.string().optional().describe("Override reason (required for action=override)"),
14559
+ limit: z101.number().optional().describe("Max audit entries to return (default: 50)")
14484
14560
  }
14485
14561
  },
14486
14562
  async (input) => {
@@ -14563,7 +14639,7 @@ function registerSteward(server) {
14563
14639
  }
14564
14640
 
14565
14641
  // src/mcp/tools/resonance.ts
14566
- import { z as z101 } from "zod";
14642
+ import { z as z102 } from "zod";
14567
14643
  function text4(content, isError = false) {
14568
14644
  return { content: [{ type: "text", text: content }], ...isError ? { isError: true } : {} };
14569
14645
  }
@@ -14572,14 +14648,14 @@ function registerResonance(server) {
14572
14648
  title: "Resonance Network",
14573
14649
  description: "Co-activation network queries. Actions: hot_pairs (top co-activated memory pairs), neighbors (co-activation neighbors for a specific memory).",
14574
14650
  inputSchema: {
14575
- action: z101.enum(["hot_pairs", "neighbors"]).describe("Resonance query type"),
14576
- memory_id: z101.string().optional().describe("Memory ID for neighbors action"),
14577
- entity_id: z101.string().optional().describe("Deprecated alias for memory_id on neighbors action"),
14578
- limit: z101.number().optional().describe("Max results (default 20)")
14651
+ action: z102.enum(["hot_pairs", "neighbors"]).describe("Resonance query type"),
14652
+ memory_id: z102.string().optional().describe("Memory ID for neighbors action"),
14653
+ entity_id: z102.string().optional().describe("Deprecated alias for memory_id on neighbors action"),
14654
+ limit: z102.number().optional().describe("Max results (default 20)")
14579
14655
  }
14580
14656
  }, async ({ action, memory_id, entity_id, limit }) => {
14581
14657
  try {
14582
- const { getHotPairs, getCoActivationNeighbors } = await import("./co-activation-BQRXOZN2.js");
14658
+ const { getHotPairs, getCoActivationNeighbors } = await import("./co-activation-K44LGZ7A.js");
14583
14659
  if (action === "hot_pairs") {
14584
14660
  const pairs = await getHotPairs(limit ?? 20);
14585
14661
  if (pairs.length === 0) return text4("No co-activation data yet. Pairs are recorded as memories are accessed together in searches.");