@askexenow/exe-os 0.9.336 → 0.9.338

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 (285) hide show
  1. package/dist/{active-agent-IM37G7MO.js → active-agent-EC6M7KTX.js} +3 -3
  2. package/dist/{active-agent-W5TKWMYT.js → active-agent-WHIUCHLA.js} +3 -3
  3. package/dist/{agentic-ontology-FG4YCUZG.js → agentic-ontology-RNSXGXW4.js} +1 -1
  4. package/dist/{backfill-metadata-AFXONF76.js → backfill-metadata-MFY6BHKE.js} +4 -4
  5. package/dist/{behaviors-EHEN4II7.js → behaviors-HLZUJSMP.js} +5 -5
  6. package/dist/bin/agentic-ontology-backfill.js +5 -5
  7. package/dist/bin/agentic-reflection-backfill.js +6 -6
  8. package/dist/bin/agentic-semantic-label.js +5 -5
  9. package/dist/bin/backfill-conversations.js +4 -4
  10. package/dist/bin/backfill-responses.js +4 -4
  11. package/dist/bin/backfill-vectors.js +5 -5
  12. package/dist/bin/bulk-sync-postgres.js +12 -10
  13. package/dist/bin/cc-doctor.js +4 -4
  14. package/dist/bin/cleanup-stale-review-tasks.js +14 -14
  15. package/dist/bin/cli.js +19 -16
  16. package/dist/bin/deferred-daemon-restart.js +71 -69
  17. package/dist/bin/exe-agent-config.js +3 -3
  18. package/dist/bin/exe-agent.js +14 -14
  19. package/dist/bin/exe-assign.js +5 -5
  20. package/dist/bin/exe-boot.js +24 -24
  21. package/dist/bin/exe-call.js +4 -4
  22. package/dist/bin/exe-cloud.js +12 -10
  23. package/dist/bin/exe-config-dump.js +3 -3
  24. package/dist/bin/exe-dispatch.js +14 -14
  25. package/dist/bin/exe-doctor.js +4 -4
  26. package/dist/bin/exe-export-behaviors.js +7 -7
  27. package/dist/bin/exe-forget.js +6 -6
  28. package/dist/bin/exe-gateway.js +7 -7
  29. package/dist/bin/exe-grant.js +126 -0
  30. package/dist/bin/exe-healthcheck.js +4 -4
  31. package/dist/bin/exe-heartbeat.js +14 -14
  32. package/dist/bin/exe-kill.js +17 -17
  33. package/dist/bin/exe-launch-agent.js +22 -22
  34. package/dist/bin/exe-new-employee.js +8 -8
  35. package/dist/bin/exe-pending-messages.js +15 -15
  36. package/dist/bin/exe-pending-notifications.js +14 -14
  37. package/dist/bin/exe-pending-reviews.js +14 -14
  38. package/dist/bin/exe-rename.js +4 -4
  39. package/dist/bin/exe-review.js +16 -16
  40. package/dist/bin/exe-search.js +5 -5
  41. package/dist/bin/exe-session-cleanup.js +18 -18
  42. package/dist/bin/exe-settings.js +13 -11
  43. package/dist/bin/exe-start-codex.js +12 -12
  44. package/dist/bin/exe-start-opencode.js +8 -8
  45. package/dist/bin/exe-status.js +15 -15
  46. package/dist/bin/exe-support.js +3 -3
  47. package/dist/bin/exe-team.js +3 -3
  48. package/dist/bin/git-sweep.js +15 -15
  49. package/dist/bin/graph-backfill.js +6 -6
  50. package/dist/bin/graph-export.js +5 -5
  51. package/dist/bin/import-history.js +9 -9
  52. package/dist/bin/install.js +73 -71
  53. package/dist/bin/intercom-check.js +4 -4
  54. package/dist/bin/mcp-sessions.js +2 -2
  55. package/dist/bin/orchestration-metrics.js +4 -4
  56. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  57. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  58. package/dist/bin/registry-proxy.js +1 -1
  59. package/dist/bin/scan-tasks.js +14 -14
  60. package/dist/bin/setup.js +1 -1
  61. package/dist/bin/shard-migrate.js +4 -4
  62. package/dist/bin/stack-update.js +7 -7
  63. package/dist/bin/vps-health-gate.js +1 -1
  64. package/dist/{branch-hygiene-55TKIWAZ.js → branch-hygiene-R5NVTRAY.js} +17 -15
  65. package/dist/{capability-cards-DUM76MEW.js → capability-cards-YOKVMMOL.js} +2 -2
  66. package/dist/{capacity-monitor-XY6TLPQR.js → capacity-monitor-S54IOWRL.js} +15 -15
  67. package/dist/{catchup-brief-JGRVXTBF.js → catchup-brief-S35QLMG3.js} +17 -17
  68. package/dist/{chunk-EVWJQBCW.js → chunk-2HZY3ECT.js} +5 -5
  69. package/dist/{chunk-5M7RPT2V.js → chunk-2SG2UGCH.js} +4 -4
  70. package/dist/{chunk-6E5DEC2D.js → chunk-3OBWSCJN.js} +11 -11
  71. package/dist/{chunk-VVFWJU3D.js → chunk-4IYSBPX3.js} +1 -1
  72. package/dist/{chunk-7JM2LGHO.js → chunk-52KNOQMK.js} +3 -3
  73. package/dist/{chunk-NCS7UNML.js → chunk-542EWGY3.js} +7 -7
  74. package/dist/{chunk-XUOSKPVP.js → chunk-65SVQELL.js} +1 -1
  75. package/dist/{chunk-S7LMZ6VM.js → chunk-6HBURYON.js} +1 -1
  76. package/dist/{chunk-UPH5EY5F.js → chunk-6IRVGOUL.js} +1 -1
  77. package/dist/{chunk-2DJTSJWW.js → chunk-6M36JFFD.js} +3 -3
  78. package/dist/{chunk-QWWGMK4Y.js → chunk-6MRWJMI5.js} +1 -1
  79. package/dist/{chunk-6ND3MBX7.js → chunk-7EA7LYW4.js} +2 -2
  80. package/dist/{chunk-5OM6Z22T.js → chunk-7WDXEKUL.js} +3 -3
  81. package/dist/{chunk-OMU7HDKI.js → chunk-AOO77BDE.js} +1 -1
  82. package/dist/{chunk-O2RF5NGI.js → chunk-AVKXCSBI.js} +1 -1
  83. package/dist/{chunk-JGHVEDZG.js → chunk-B2GLEEGY.js} +1 -1
  84. package/dist/chunk-B75BOKEI.js +193 -0
  85. package/dist/{chunk-SKFA42EO.js → chunk-B76TSEP3.js} +1 -1
  86. package/dist/{chunk-ELOJZIVD.js → chunk-BPC5LZ6Y.js} +1 -1
  87. package/dist/{chunk-DUSZ2ZQE.js → chunk-BU2QQWBQ.js} +1 -1
  88. package/dist/{chunk-B6QRDKL3.js → chunk-DADMPMYX.js} +1 -1
  89. package/dist/{chunk-5TWCO22U.js → chunk-DILD54TU.js} +46 -13
  90. package/dist/{chunk-YBVKLDT3.js → chunk-DZ6OQM67.js} +1 -1
  91. package/dist/{chunk-SGLZZJWX.js → chunk-EIF2LQHZ.js} +1 -1
  92. package/dist/{chunk-XYKCPHWT.js → chunk-FNZR3B7U.js} +1 -1
  93. package/dist/{chunk-X7BGMYZS.js → chunk-FUIIVSW6.js} +1 -1
  94. package/dist/{chunk-EFFE6UVN.js → chunk-GN45PBWI.js} +2 -2
  95. package/dist/{chunk-XGQU34XA.js → chunk-H2L4PHGH.js} +2 -2
  96. package/dist/{chunk-YOZJWU2I.js → chunk-H37HHX3E.js} +9 -9
  97. package/dist/{chunk-XZHA3WO2.js → chunk-HEPR6QTL.js} +4 -4
  98. package/dist/{chunk-YDTW2KYM.js → chunk-I3XKO3KQ.js} +1 -1
  99. package/dist/{chunk-W33EMSZB.js → chunk-I7Z6KTGF.js} +5 -5
  100. package/dist/{chunk-AMBCXARR.js → chunk-ISD7ZD45.js} +140 -140
  101. package/dist/chunk-JCBKARSK.js +113 -0
  102. package/dist/{chunk-2AWXDWUB.js → chunk-K5WFKEXQ.js} +67 -78
  103. package/dist/{chunk-BE7NKEGL.js → chunk-KCC5A7YL.js} +5 -5
  104. package/dist/{chunk-EGCYJ4LJ.js → chunk-KMBEL7VB.js} +1 -1
  105. package/dist/{chunk-FYPSGPYS.js → chunk-KTY7I7UH.js} +1 -1
  106. package/dist/{chunk-U5QPEYCA.js → chunk-LMZISHSJ.js} +13 -13
  107. package/dist/{chunk-AVOP32R7.js → chunk-LTVCRHHD.js} +4 -4
  108. package/dist/{chunk-6F2DZQQS.js → chunk-MQRFKSLI.js} +3 -3
  109. package/dist/{chunk-BF252PDD.js → chunk-MW2GJJ53.js} +2 -2
  110. package/dist/{chunk-K4SSTJHJ.js → chunk-N5I7RL3I.js} +1 -1
  111. package/dist/{chunk-CMZLULTW.js → chunk-OFX5B2S7.js} +1 -1
  112. package/dist/{chunk-FHOI6AFU.js → chunk-OJTJYEMX.js} +3 -3
  113. package/dist/{chunk-FQ55TZWJ.js → chunk-PAEXYFMY.js} +1 -1
  114. package/dist/{chunk-ROAUSSJI.js → chunk-PLRIJALF.js} +160 -34
  115. package/dist/{chunk-RIOJ7RWQ.js → chunk-Q7L6G6KV.js} +2 -2
  116. package/dist/{chunk-DUBZDAXS.js → chunk-QBTWXDFK.js} +9 -9
  117. package/dist/{chunk-Z6MVHWJF.js → chunk-QFPTDSY2.js} +1 -1
  118. package/dist/{chunk-4ZH65EXT.js → chunk-QXSBB26A.js} +1 -1
  119. package/dist/{chunk-UE7SPA54.js → chunk-QZLIZAS7.js} +2 -2
  120. package/dist/{chunk-LAVL2OMB.js → chunk-R44Z32O2.js} +3 -3
  121. package/dist/{chunk-QAD4YR57.js → chunk-RDTZTLVQ.js} +20 -11
  122. package/dist/{chunk-RQ3EUVVT.js → chunk-RLRT2BVM.js} +1 -1
  123. package/dist/chunk-RNAYCUNM.js +271 -0
  124. package/dist/{chunk-XDIYCXMJ.js → chunk-RRWDYOQS.js} +1 -1
  125. package/dist/{chunk-MZ222PUT.js → chunk-T4KZ2Z2N.js} +3 -3
  126. package/dist/{chunk-HDALYSEP.js → chunk-TLYAEISW.js} +2 -2
  127. package/dist/{chunk-QIJEW462.js → chunk-UIV2WPBT.js} +1 -13
  128. package/dist/{chunk-AVFMDS5Z.js → chunk-UPWE5NOG.js} +2 -2
  129. package/dist/{chunk-C5KHGDWX.js → chunk-UXBD22CD.js} +1 -1
  130. package/dist/{chunk-U3WSLO2R.js → chunk-VJHUVFIW.js} +3 -3
  131. package/dist/{chunk-SEEMHG5A.js → chunk-WYLV4S6A.js} +3 -3
  132. package/dist/{chunk-EVV2G3CW.js → chunk-X425OEYF.js} +4 -4
  133. package/dist/{chunk-RLY3O2F7.js → chunk-X7H3HMFH.js} +3 -3
  134. package/dist/{chunk-P6OW236E.js → chunk-XACL67CS.js} +1 -1
  135. package/dist/{chunk-IIEKPBKB.js → chunk-XCTGRD4S.js} +175 -11
  136. package/dist/{chunk-MS6F63JW.js → chunk-XJI7Z6LZ.js} +1 -1
  137. package/dist/{chunk-JGKV5DLX.js → chunk-XUKPALWT.js} +3 -3
  138. package/dist/{chunk-FUX5ZEB3.js → chunk-XWHE4LZK.js} +1 -1
  139. package/dist/{chunk-4E7DFDVQ.js → chunk-YE7NH53A.js} +1 -1
  140. package/dist/{chunk-N2JXHW4E.js → chunk-ZIVEA3NB.js} +1 -1
  141. package/dist/{cleanup-graph-garbage-MKSRWINB.js → cleanup-graph-garbage-KUABW6LS.js} +6 -6
  142. package/dist/{co-activation-W7QBHSUR.js → co-activation-XMPHKGHR.js} +2 -2
  143. package/dist/{co-occurrence-C5YW5JZ6.js → co-occurrence-SHKSJ6CV.js} +4 -4
  144. package/dist/{conversation-entity-extractor-FPAMTL3C.js → conversation-entity-extractor-D3EFTLT4.js} +2 -2
  145. package/dist/{crdt-sync-OTFYRPW2.js → crdt-sync-UJELKSNX.js} +1 -1
  146. package/dist/{crm-webhook-5WHYZW6K.js → crm-webhook-HHNBS7LY.js} +2 -2
  147. package/dist/{cto-delegation-gate-U2AEMPQD.js → cto-delegation-gate-DXNF5HVW.js} +13 -13
  148. package/dist/{daemon-orchestration-DIT3JLV7.js → daemon-orchestration-7QB6QOXT.js} +29 -17
  149. package/dist/{db-backup-CXNB2ZAG.js → db-backup-DLD4QZBO.js} +1 -1
  150. package/dist/{doc-graph-extractor-SDH4QDWF.js → doc-graph-extractor-3TRLGD7M.js} +4 -4
  151. package/dist/{documents-WBKAVVMO.js → documents-FHIBU7KJ.js} +5 -5
  152. package/dist/{dreaming-M23FLJDE.js → dreaming-OMFUEUCQ.js} +14 -14
  153. package/dist/{exe-drift-AZGPQH73.js → exe-drift-KY2KHZEL.js} +3 -3
  154. package/dist/{exe-export-523RIUSC.js → exe-export-SP6G3QF6.js} +6 -6
  155. package/dist/{exe-import-CCF76ZK7.js → exe-import-KJU7FBVQ.js} +6 -6
  156. package/dist/{exe-key-5ADXQDJY.js → exe-key-RWGMIHK7.js} +71 -69
  157. package/dist/{exe-snapshot-NQMKIQQO.js → exe-snapshot-ZNPGUKRZ.js} +17 -17
  158. package/dist/{fast-db-init-YDAY7TVI.js → fast-db-init-QQB6IVWV.js} +1 -1
  159. package/dist/{founder-context-CTNPSPVO.js → founder-context-PQR3BUS7.js} +2 -2
  160. package/dist/gateway/index.js +11 -11
  161. package/dist/{git-staleness-FIPWVHRJ.js → git-staleness-UGB5J3K7.js} +2 -2
  162. package/dist/{global-procedures-YT2RDNUD.js → global-procedures-R7KRREEK.js} +3 -3
  163. package/dist/{graph-auto-extract-T63GAUZF.js → graph-auto-extract-LKIQ57PL.js} +4 -4
  164. package/dist/{graph-rag-WAK2BRJH.js → graph-rag-JZZAB7PC.js} +2 -2
  165. package/dist/hooks/bug-report-worker.js +16 -16
  166. package/dist/hooks/codex-stop-task-finalizer.js +16 -16
  167. package/dist/hooks/commit-complete.js +16 -16
  168. package/dist/hooks/error-recall.js +6 -6
  169. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  170. package/dist/hooks/ingest.js +6 -6
  171. package/dist/hooks/instructions-loaded.js +4 -4
  172. package/dist/hooks/manifest.json +19 -19
  173. package/dist/hooks/notification.js +4 -4
  174. package/dist/hooks/post-compact.js +15 -15
  175. package/dist/hooks/post-tool-combined.js +7 -7
  176. package/dist/hooks/pre-compact.js +16 -16
  177. package/dist/hooks/pre-tool-use.js +19 -19
  178. package/dist/hooks/prompt-submit.js +30 -30
  179. package/dist/hooks/session-end.js +20 -20
  180. package/dist/hooks/session-start.js +12 -12
  181. package/dist/hooks/stop.js +19 -19
  182. package/dist/hooks/subagent-stop.js +15 -15
  183. package/dist/hooks/summary-worker.js +19 -19
  184. package/dist/index.js +25 -25
  185. package/dist/{installer-UEPVZPFE.js → installer-MNPXDLGG.js} +6 -6
  186. package/dist/{installer-EGY5GPB7.js → installer-MZWWBXM6.js} +9 -9
  187. package/dist/{installer-MHVZ4RJU.js → installer-SB2N5NKH.js} +9 -9
  188. package/dist/{intercom-queue-NQFQZXQP.js → intercom-queue-VU2G6F5R.js} +15 -13
  189. package/dist/lib/agent-config.js +1 -1
  190. package/dist/lib/cloud-sync.js +12 -10
  191. package/dist/lib/consolidation.js +7 -7
  192. package/dist/lib/crypto.js +5 -1
  193. package/dist/lib/database.js +2 -2
  194. package/dist/lib/db.js +2 -2
  195. package/dist/lib/device-registry.js +1 -1
  196. package/dist/lib/employee-templates.js +4 -4
  197. package/dist/lib/employees.js +2 -2
  198. package/dist/lib/exe-daemon.js +330 -103
  199. package/dist/lib/hybrid-search.js +5 -5
  200. package/dist/lib/identity.js +2 -2
  201. package/dist/lib/license.js +2 -2
  202. package/dist/lib/messaging.js +14 -14
  203. package/dist/lib/registry-proxy.js +1 -1
  204. package/dist/lib/reminders.js +3 -3
  205. package/dist/lib/schedules.js +5 -5
  206. package/dist/lib/session-registry.js +4 -4
  207. package/dist/lib/skill-learning.js +6 -6
  208. package/dist/lib/store.js +4 -4
  209. package/dist/lib/task-router.js +3 -3
  210. package/dist/lib/tasks.js +15 -15
  211. package/dist/lib/tmux-routing.js +13 -13
  212. package/dist/lib/token-spend.js +3 -3
  213. package/dist/{license-gate-WCBZ4EBB.js → license-gate-BYDMFMFT.js} +3 -3
  214. package/dist/{license-sync-N63ORPQY.js → license-sync-N3RNYVP2.js} +2 -2
  215. package/dist/mcp/register-tools.js +70 -68
  216. package/dist/mcp/server.js +73 -71
  217. package/dist/mcp/tools/complete-reminder.js +4 -4
  218. package/dist/mcp/tools/create-reminder.js +4 -4
  219. package/dist/mcp/tools/create-task.js +17 -17
  220. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  221. package/dist/mcp/tools/list-reminders.js +4 -4
  222. package/dist/mcp/tools/list-tasks.js +17 -17
  223. package/dist/mcp/tools/send-message.js +16 -16
  224. package/dist/mcp/tools/update-task.js +16 -16
  225. package/dist/{mcp-http-config-I2XKM6Y6.js → mcp-http-config-EMAVS2JI.js} +3 -3
  226. package/dist/{memory-cards-LJLITM2D.js → memory-cards-TQRLZI4D.js} +4 -4
  227. package/dist/{memory-graph-extractor-WIK2X7NW.js → memory-graph-extractor-IWGNVAFU.js} +5 -5
  228. package/dist/{memory-poisoning-defense-K5ZYLCBS.js → memory-poisoning-defense-T4ITBGSG.js} +2 -2
  229. package/dist/{memory-pressure-watchdog-GAIU4DFY.js → memory-pressure-watchdog-RRIAXPXQ.js} +14 -14
  230. package/dist/{memory-reflection-ERYZ6SJH.js → memory-reflection-6N4J2FL7.js} +2 -2
  231. package/dist/monitor-grants-RZOVSYVO.js +27 -0
  232. package/dist/monitor-identity-MOXISYNG.js +34 -0
  233. package/dist/{notifications-A43CXO7Q.js → notifications-KONB3C62.js} +13 -13
  234. package/dist/{orchestration-events-CRVRCTHR.js → orchestration-events-5SIJOE4H.js} +3 -3
  235. package/dist/{orchestrator-65ZCLW5C.js → orchestrator-DUUX7FQV.js} +15 -15
  236. package/dist/{pipeline-router-VZUIXWWJ.js → pipeline-router-O6HU7DKH.js} +3 -3
  237. package/dist/{plan-limits-QNY6FVQQ.js → plan-limits-GRNBOBB3.js} +5 -5
  238. package/dist/{projection-worker-EASTW4IP.js → projection-worker-ZVOFHTXT.js} +2 -2
  239. package/dist/{prospective-memory-T7Z67MF7.js → prospective-memory-W6S67LZZ.js} +2 -2
  240. package/dist/{reranker-2S766AWB.js → reranker-6UQSZVV2.js} +1 -1
  241. package/dist/{retrieval-health-HQ6JHDTD.js → retrieval-health-TWHKYCRK.js} +1 -1
  242. package/dist/{review-polling-4R7EPAHG.js → review-polling-PCMD5BFN.js} +14 -14
  243. package/dist/runtime/index.js +21 -21
  244. package/dist/{session-events-ZPPOVRDJ.js → session-events-3LCVQEL7.js} +14 -14
  245. package/dist/{session-kill-telemetry-BEAPGQEF.js → session-kill-telemetry-CZSPN5V6.js} +14 -14
  246. package/dist/{session-scope-B6Y2VP75.js → session-scope-CFHVSVAQ.js} +13 -13
  247. package/dist/{setup-wizard-X6HICSAF.js → setup-wizard-CJZMM43G.js} +1 -1
  248. package/dist/{skill-refinement-XYACEWES.js → skill-refinement-74T6VDFM.js} +3 -3
  249. package/dist/{stack-release-3AF7TQ5N.js → stack-release-XXMV7SPX.js} +40 -3
  250. package/dist/{stack-update-4JALV4DZ.js → stack-update-E2TKHHSQ.js} +3 -3
  251. package/dist/{steward-gate-WGP4QWXQ.js → steward-gate-WT7WXQIE.js} +3 -3
  252. package/dist/{task-enforcement-WFHEKFC3.js → task-enforcement-VI7L43DC.js} +14 -14
  253. package/dist/{task-scope-VMYGYVCH.js → task-scope-CQEG5SSJ.js} +13 -13
  254. package/dist/{tasks-crud-ELQ2JSRG.js → tasks-crud-UGK5A25L.js} +13 -13
  255. package/dist/{tasks-notify-R6KGKW5R.js → tasks-notify-SMLDFBWM.js} +14 -14
  256. package/dist/{tasks-review-E3YTGOFJ.js → tasks-review-JKBRACII.js} +13 -13
  257. package/dist/{telemetry-upload-RDJX4ZFD.js → telemetry-upload-7LBYGPCB.js} +7 -7
  258. package/dist/{token-budget-XZVEGHCT.js → token-budget-QBRJR4M5.js} +3 -3
  259. package/dist/{tool-telemetry-OQ423YOE.js → tool-telemetry-ULIDUK3P.js} +1 -1
  260. package/dist/tui/App.js +21 -21
  261. package/dist/{tui-data-7UMFG6GY.js → tui-data-NPTGKT37.js} +13 -13
  262. package/dist/{worker-gate-QENGURPJ.js → worker-gate-MXUQUG4M.js} +1 -1
  263. package/dist/{workflow-engine-HUSIWUSV.js → workflow-engine-EWCOLD47.js} +2 -2
  264. package/dist/{worktree-EZ3EZUOV.js → worktree-GVF2I5FP.js} +4 -4
  265. package/dist/{worktree-sweep-O2UXISLE.js → worktree-sweep-ZAG3V24E.js} +5 -5
  266. package/package.json +4 -3
  267. package/release-notes.json +28 -20
  268. package/dist/chunk-LO6L5ADL.js +0 -76
  269. package/dist/{chunk-DFJVHZ6Z.js → chunk-5Z5NATNS.js} +0 -0
  270. package/dist/{chunk-7UMCQQWS.js → chunk-A4DVMPYB.js} +3 -3
  271. /package/dist/{chunk-5KCRWAWF.js → chunk-ATOU6CYR.js} +0 -0
  272. /package/dist/{chunk-KK64O2G4.js → chunk-D3QASX2W.js} +0 -0
  273. /package/dist/{chunk-GOAPKDWS.js → chunk-HHIBOU3P.js} +0 -0
  274. /package/dist/{chunk-F6VD2OWU.js → chunk-IYB2NIW3.js} +0 -0
  275. /package/dist/{chunk-XETUG5DN.js → chunk-KTPG4XKI.js} +0 -0
  276. /package/dist/{chunk-LUO2MYQH.js → chunk-NQBRGXYR.js} +0 -0
  277. /package/dist/{chunk-IO3Z2JBX.js → chunk-QLFRCA6I.js} +0 -0
  278. /package/dist/{chunk-HHFQRC3F.js → chunk-TNJRWUCE.js} +0 -0
  279. /package/dist/{chunk-JIE4ZUMV.js → chunk-UFAXZ2PY.js} +0 -0
  280. /package/dist/{chunk-TBRNCEV4.js → chunk-UNVHIH7N.js} +0 -0
  281. /package/dist/{chunk-OG5CXUHI.js → chunk-Z7OZP3ET.js} +0 -0
  282. /package/dist/{core-memory-V2Q5G7CJ.js → core-memory-VO5ZIBKH.js} +0 -0
  283. /package/dist/{oauth-server-MLE5MGQO.js → oauth-server-ROQFOEMM.js} +0 -0
  284. /package/dist/{project-boot-27QXVGY3.js → project-boot-SD7GM24K.js} +0 -0
  285. /package/dist/{wiki-acl-NZMJUJGL.js → wiki-acl-JA5UCQZ4.js} +0 -0
@@ -1,30 +1,30 @@
1
1
  import {
2
2
  lightweightSearch
3
- } from "./chunk-DUBZDAXS.js";
3
+ } from "./chunk-QBTWXDFK.js";
4
4
  import "./chunk-AB4PAQYK.js";
5
- import "./chunk-YOZJWU2I.js";
5
+ import "./chunk-H37HHX3E.js";
6
6
  import "./chunk-CHCA3ZM2.js";
7
7
  import "./chunk-OTVEIJUQ.js";
8
- import "./chunk-GOAPKDWS.js";
8
+ import "./chunk-HHIBOU3P.js";
9
9
  import "./chunk-Y25OJWOQ.js";
10
10
  import {
11
11
  sessionScopeFilter,
12
12
  strictSessionScopeFilter
13
- } from "./chunk-ROAUSSJI.js";
14
- import "./chunk-CMZLULTW.js";
15
- import "./chunk-SKFA42EO.js";
16
- import "./chunk-RQ3EUVVT.js";
13
+ } from "./chunk-PLRIJALF.js";
14
+ import "./chunk-OFX5B2S7.js";
15
+ import "./chunk-B76TSEP3.js";
16
+ import "./chunk-RLRT2BVM.js";
17
+ import "./chunk-4JERP7NT.js";
17
18
  import "./chunk-EIKATSE4.js";
18
19
  import "./chunk-E23LNUWJ.js";
19
- import "./chunk-4JERP7NT.js";
20
- import "./chunk-QIJEW462.js";
20
+ import "./chunk-UIV2WPBT.js";
21
21
  import "./chunk-SSTLTIF3.js";
22
22
  import "./chunk-RMOBQ6A5.js";
23
23
  import "./chunk-54QCG45Y.js";
24
- import "./chunk-X7BGMYZS.js";
25
- import "./chunk-XUOSKPVP.js";
24
+ import "./chunk-FUIIVSW6.js";
25
+ import "./chunk-65SVQELL.js";
26
26
  import "./chunk-NGP6LSV2.js";
27
- import "./chunk-BF252PDD.js";
27
+ import "./chunk-MW2GJJ53.js";
28
28
  import "./chunk-CVYC6DUW.js";
29
29
  import "./chunk-2233TQCA.js";
30
30
  import "./chunk-HCJCW7X4.js";
@@ -38,16 +38,16 @@ import "./chunk-GJV3WDWM.js";
38
38
  import "./chunk-MP2AFCGL.js";
39
39
  import {
40
40
  getClient
41
- } from "./chunk-XZHA3WO2.js";
41
+ } from "./chunk-HEPR6QTL.js";
42
42
  import "./chunk-2I23RPSI.js";
43
- import "./chunk-5KCRWAWF.js";
43
+ import "./chunk-ATOU6CYR.js";
44
44
  import "./chunk-PNQDP3OA.js";
45
45
  import "./chunk-H73TUI4Y.js";
46
46
  import "./chunk-7HLWBYH7.js";
47
47
  import "./chunk-FXU7JOXK.js";
48
48
  import "./chunk-Z42MXYWW.js";
49
- import "./chunk-P6OW236E.js";
50
- import "./chunk-DFJVHZ6Z.js";
49
+ import "./chunk-XACL67CS.js";
50
+ import "./chunk-5Z5NATNS.js";
51
51
  import "./chunk-7Y5UDEVM.js";
52
52
  import "./chunk-SHIICYJW.js";
53
53
  import "./chunk-MLKGABMK.js";
@@ -156,7 +156,7 @@ ${msgLines}`);
156
156
  } catch {
157
157
  }
158
158
  try {
159
- const { getPendingProspective, markSurfaced } = await import("./prospective-memory-T7Z67MF7.js");
159
+ const { getPendingProspective, markSurfaced } = await import("./prospective-memory-W6S67LZZ.js");
160
160
  const due = await getPendingProspective(agentId, { projectName, limit: 5 });
161
161
  if (due.length > 0) {
162
162
  const now = Date.now();
@@ -1,7 +1,10 @@
1
+ import {
2
+ IMessageAdapter
3
+ } from "./chunk-2SRG3B3D.js";
1
4
  import {
2
5
  createCRMWebhookHandler,
3
6
  parseTwentyWebhook
4
- } from "./chunk-QWWGMK4Y.js";
7
+ } from "./chunk-6MRWJMI5.js";
5
8
  import {
6
9
  WhatsAppAdapter
7
10
  } from "./chunk-ECSNSHZ7.js";
@@ -17,9 +20,6 @@ import {
17
20
  import {
18
21
  SlackAdapter
19
22
  } from "./chunk-ORCCI2VV.js";
20
- import {
21
- IMessageAdapter
22
- } from "./chunk-2SRG3B3D.js";
23
23
  import {
24
24
  BotRegistry,
25
25
  BotRuntime,
@@ -42,7 +42,7 @@ import {
42
42
  retryWithBackoff,
43
43
  routeMessage,
44
44
  validateGatewayConfig
45
- } from "./chunk-6ND3MBX7.js";
45
+ } from "./chunk-7EA7LYW4.js";
46
46
  import {
47
47
  OllamaProvider
48
48
  } from "./chunk-FWFFZGSC.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  deactivateBehavior
3
- } from "./chunk-HDALYSEP.js";
3
+ } from "./chunk-TLYAEISW.js";
4
4
  import {
5
5
  getActiveAgent
6
- } from "./chunk-YBVKLDT3.js";
6
+ } from "./chunk-DZ6OQM67.js";
7
7
  import {
8
8
  canCoordinate,
9
9
  getClient
10
- } from "./chunk-XZHA3WO2.js";
10
+ } from "./chunk-HEPR6QTL.js";
11
11
 
12
12
  // src/mcp/tools/deactivate-behavior.ts
13
13
  import { z } from "zod";
@@ -24,7 +24,7 @@ function registerDeactivateBehavior(server) {
24
24
  async ({ behavior_id }) => {
25
25
  const caller = getActiveAgent();
26
26
  try {
27
- const { StewardGate } = await import("./steward-gate-WGP4QWXQ.js");
27
+ const { StewardGate } = await import("./steward-gate-WT7WXQIE.js");
28
28
  const steward = new StewardGate();
29
29
  const gateDecision = await steward.checkAuthority(caller.agentId || "unknown", "deactivate_behavior", behavior_id);
30
30
  if (!gateDecision.allowed) {
@@ -1,23 +1,23 @@
1
- import {
2
- createTokenBudgetMiddleware
3
- } from "./chunk-XDIYCXMJ.js";
4
1
  import {
5
2
  MultiAgentOrchestrator
6
- } from "./chunk-7JM2LGHO.js";
3
+ } from "./chunk-52KNOQMK.js";
4
+ import {
5
+ createTokenBudgetMiddleware
6
+ } from "./chunk-RRWDYOQS.js";
7
7
  import {
8
8
  createQuietRenderer,
9
9
  createTerminalRenderer,
10
10
  renderAgentEvents
11
11
  } from "./chunk-YZFZDJWZ.js";
12
+ import {
13
+ checkDangerousPatterns,
14
+ hasCriticalPattern
15
+ } from "./chunk-CMCYL2JC.js";
12
16
  import {
13
17
  checkPathSafety,
14
18
  checkReadPathSafety,
15
19
  containsPathTraversal
16
20
  } from "./chunk-NGVOA6ZQ.js";
17
- import {
18
- checkDangerousPatterns,
19
- hasCriticalPattern
20
- } from "./chunk-CMCYL2JC.js";
21
21
  import {
22
22
  ContextManager,
23
23
  agentLoop,
@@ -209,7 +209,7 @@ function createExeOSHooks(config) {
209
209
  );
210
210
  }
211
211
  try {
212
- const { listBehaviors } = await import("./behaviors-EHEN4II7.js");
212
+ const { listBehaviors } = await import("./behaviors-HLZUJSMP.js");
213
213
  const behaviors = await listBehaviors(config.agentId, config.projectName, 12);
214
214
  if (behaviors.length > 0) {
215
215
  process.stderr.write(
@@ -330,7 +330,7 @@ function createExeOSHooks(config) {
330
330
  async onSubagentStop(_reason) {
331
331
  try {
332
332
  const { getClient } = await import("./lib/database.js");
333
- const { sessionScopeFilter } = await import("./task-scope-VMYGYVCH.js");
333
+ const { sessionScopeFilter } = await import("./task-scope-CQEG5SSJ.js");
334
334
  const client = getClient();
335
335
  const ehScope = sessionScopeFilter();
336
336
  const tasks = await client.execute({
@@ -422,7 +422,7 @@ function createExeOSHooks(config) {
422
422
  try {
423
423
  const { writeMemory, flushBatch } = await import("./lib/store.js");
424
424
  const { getClient } = await import("./lib/database.js");
425
- const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-VMYGYVCH.js");
425
+ const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-CQEG5SSJ.js");
426
426
  const client = getClient();
427
427
  const cpScope = cpScopeFilter();
428
428
  const tasks = await client.execute({
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isCoordinatorRole
3
- } from "./chunk-XZHA3WO2.js";
3
+ } from "./chunk-HEPR6QTL.js";
4
4
 
5
5
  // src/lib/task-router.ts
6
6
  import { randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  routeTask
3
- } from "./chunk-VVFWJU3D.js";
3
+ } from "./chunk-4IYSBPX3.js";
4
4
  import {
5
5
  createTaskCore,
6
6
  employeeSessionName,
@@ -9,11 +9,11 @@ import {
9
9
  isEmployeeAlive,
10
10
  sessionScopeFilter,
11
11
  updateTaskStatus
12
- } from "./chunk-ROAUSSJI.js";
12
+ } from "./chunk-PLRIJALF.js";
13
13
  import {
14
14
  DEFAULT_COORDINATOR_TEMPLATE_NAME,
15
15
  getCoordinatorName
16
- } from "./chunk-XZHA3WO2.js";
16
+ } from "./chunk-HEPR6QTL.js";
17
17
 
18
18
  // src/runtime/orchestrator.ts
19
19
  var STALE_THRESHOLD_MS = 2 * 60 * 60 * 1e3;
@@ -2,7 +2,7 @@ import {
2
2
  dispatchTaskToEmployee,
3
3
  markTaskNotificationsRead,
4
4
  notifyTaskDone
5
- } from "./chunk-W33EMSZB.js";
5
+ } from "./chunk-I7Z6KTGF.js";
6
6
  import {
7
7
  cleanupReviewFile,
8
8
  createTaskCore,
@@ -11,7 +11,7 @@ import {
11
11
  sessionScopeFilter,
12
12
  updateTaskStatus,
13
13
  writeNotification
14
- } from "./chunk-ROAUSSJI.js";
14
+ } from "./chunk-PLRIJALF.js";
15
15
  import {
16
16
  orgBus
17
17
  } from "./chunk-MP2AFCGL.js";
@@ -19,7 +19,7 @@ import {
19
19
  getClient,
20
20
  getCoordinatorName,
21
21
  isCoordinatorName
22
- } from "./chunk-XZHA3WO2.js";
22
+ } from "./chunk-HEPR6QTL.js";
23
23
  import {
24
24
  EXE_AI_DIR
25
25
  } from "./chunk-7Y5UDEVM.js";
@@ -61,7 +61,7 @@ async function cascadeUnblock(taskId, baseDir, now) {
61
61
  }
62
62
  if (unblockedRows.rows.length > 0 && !process.env.VITEST) {
63
63
  try {
64
- const { dispatchTaskToEmployee: dispatchTaskToEmployee2 } = await import("./tasks-notify-R6KGKW5R.js");
64
+ const { dispatchTaskToEmployee: dispatchTaskToEmployee2 } = await import("./tasks-notify-SMLDFBWM.js");
65
65
  const dispatched = /* @__PURE__ */ new Set();
66
66
  for (const ur of unblockedRows.rows) {
67
67
  const assignee = String(ur.assigned_to);
@@ -86,7 +86,7 @@ async function cascadeUnblock(taskId, baseDir, now) {
86
86
  }
87
87
  } catch {
88
88
  try {
89
- const { queueIntercom } = await import("./intercom-queue-NQFQZXQP.js");
89
+ const { queueIntercom } = await import("./intercom-queue-VU2G6F5R.js");
90
90
  const dispatched = /* @__PURE__ */ new Set();
91
91
  for (const ur of unblockedRows.rows) {
92
92
  const assignee = String(ur.assigned_to);
@@ -289,7 +289,7 @@ async function updateTask(input) {
289
289
  try {
290
290
  process.stderr.write(`[tasks] EVENT: tmux delivery failed for reviewer="${reviewer}". Queueing for daemon delivery.
291
291
  `);
292
- const { queueIntercom } = await import("./intercom-queue-NQFQZXQP.js");
292
+ const { queueIntercom } = await import("./intercom-queue-VU2G6F5R.js");
293
293
  const { resolveExeSession } = await import("./lib/tmux-routing.js");
294
294
  const exeSession = row.session_scope ? String(row.session_scope) : resolveExeSession();
295
295
  if (exeSession) {
@@ -333,7 +333,7 @@ async function updateTask(input) {
333
333
  await markTaskNotificationsRead(taskFile);
334
334
  if (isCompletionReviewTransition && !isCoordinator && row.reviewer) {
335
335
  try {
336
- const { writeNotification: writeNotification2 } = await import("./notifications-A43CXO7Q.js");
336
+ const { writeNotification: writeNotification2 } = await import("./notifications-KONB3C62.js");
337
337
  const reviewer = String(row.reviewer);
338
338
  await writeNotification2({
339
339
  agentId: reviewer,
@@ -17,7 +17,7 @@ var AGENT_CONFIG_PATH = path.join(EXE_AI_DIR, "agent-config.json");
17
17
  var KNOWN_RUNTIMES = {
18
18
  claude: ["claude-opus-4.8", "claude-opus-4.8-1m", "claude-opus-4.6", "claude-sonnet-4.8", "claude-sonnet-4.6", "claude-haiku-4.5", "claude-fable-5"],
19
19
  codex: ["gpt-5.4", "gpt-5.5", "gpt-5.3-codex-spark", "o3", "o4-mini"],
20
- opencode: ["anthropic/claude-opus-4-8", "anthropic/claude-sonnet-4-8", "anthropic/claude-sonnet-4-6", "openai/gpt-5.4", "google/gemini-2.5-pro", "deepseek/deepseek-r3", "minimax/minimax-m2.5"]
20
+ opencode: ["anthropic/claude-opus-4-8", "anthropic/claude-sonnet-4-8", "anthropic/claude-sonnet-4-6", "openai/gpt-5.4", "google/gemini-2.5-pro", "deepseek/deepseek-r3", "minimax/minimax-m2.5", "xai/grok-4", "xai/grok-3", "xai/grok-2-latest", "xai/grok-2-1212", "xai/grok-beta"]
21
21
  };
22
22
  var RETIRED_MODELS = {
23
23
  "claude-sonnet-4": "claude-sonnet-4.6",
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  loadLicense,
10
10
  readCachedLicenseToken
11
- } from "./chunk-P6OW236E.js";
11
+ } from "./chunk-XACL67CS.js";
12
12
  import {
13
13
  EXE_AI_DIR,
14
14
  loadConfig
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createReminder
3
- } from "./chunk-EGCYJ4LJ.js";
3
+ } from "./chunk-KMBEL7VB.js";
4
4
 
5
5
  // src/mcp/tools/create-reminder.ts
6
6
  import { z } from "zod";
@@ -4,10 +4,10 @@ import {
4
4
  import {
5
5
  reserveVersions,
6
6
  vectorToBlob
7
- } from "./chunk-YOZJWU2I.js";
7
+ } from "./chunk-H37HHX3E.js";
8
8
  import {
9
9
  getClient
10
- } from "./chunk-XZHA3WO2.js";
10
+ } from "./chunk-HEPR6QTL.js";
11
11
 
12
12
  // src/lib/documents.ts
13
13
  import crypto from "crypto";
@@ -270,7 +270,7 @@ async function ingestDocument(input) {
270
270
  await client.batch([documentStmt, ...chunkStmts], "write");
271
271
  const embedded = vectors.filter((v) => v !== null).length;
272
272
  const originalTexts = input.chunks.map((c) => c.text);
273
- import("./doc-graph-extractor-SDH4QDWF.js").then(
273
+ import("./doc-graph-extractor-3TRLGD7M.js").then(
274
274
  ({ extractAndStoreDocumentGraph }) => extractAndStoreDocumentGraph(documentId, originalTexts)
275
275
  ).catch((err) => {
276
276
  process.stderr.write(
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  processCRMEvent
3
- } from "./chunk-XETUG5DN.js";
3
+ } from "./chunk-KTPG4XKI.js";
4
4
 
5
5
  // src/gateway/adapters/crm-webhook.ts
6
6
  function parseTwentyWebhook(payload) {
@@ -2,10 +2,10 @@ import {
2
2
  listWorkflowDefinitions,
3
3
  runWorkflow,
4
4
  startWorkflow
5
- } from "./chunk-4ZH65EXT.js";
5
+ } from "./chunk-QXSBB26A.js";
6
6
  import {
7
7
  ingest
8
- } from "./chunk-5OM6Z22T.js";
8
+ } from "./chunk-7WDXEKUL.js";
9
9
  import {
10
10
  initCRMBridge
11
11
  } from "./chunk-ML4S5SHZ.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-XZHA3WO2.js";
3
+ } from "./chunk-HEPR6QTL.js";
4
4
 
5
5
  // src/lib/pipeline-router.ts
6
6
  import crypto from "crypto";
@@ -140,8 +140,8 @@ Agent response: ${agentResponse}` : ""
140
140
  }
141
141
  async function sinkEntityExtraction(msg, agentResponse, agentName) {
142
142
  try {
143
- const { extractFromConversation } = await import("./conversation-entity-extractor-FPAMTL3C.js");
144
- const { storeExtraction } = await import("./graph-rag-WAK2BRJH.js");
143
+ const { extractFromConversation } = await import("./conversation-entity-extractor-D3EFTLT4.js");
144
+ const { storeExtraction } = await import("./graph-rag-JZZAB7PC.js");
145
145
  if ((msg.text?.length ?? 0) < 20) return false;
146
146
  if (msg.isHistorical) return false;
147
147
  const extraction = await extractFromConversation(msg, agentResponse, agentName);
@@ -2,7 +2,7 @@ import {
2
2
  getClient,
3
3
  isCoordinatorName,
4
4
  loadEmployeesSync
5
- } from "./chunk-XZHA3WO2.js";
5
+ } from "./chunk-HEPR6QTL.js";
6
6
 
7
7
  // src/lib/steward-gate.ts
8
8
  import crypto from "crypto";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-X2FHTDIU.js";
4
4
  import {
5
5
  loadEmployeesSync
6
- } from "./chunk-XZHA3WO2.js";
6
+ } from "./chunk-HEPR6QTL.js";
7
7
 
8
8
  // src/adapters/mcp-http-config.ts
9
9
  import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-WCGNCH3Q.js";
4
4
  import {
5
5
  registerAllTools
6
- } from "./chunk-AMBCXARR.js";
6
+ } from "./chunk-ISD7ZD45.js";
7
7
 
8
8
  // src/mcp/mcp-surface-hash.ts
9
9
  function computeMcpSurfaceHash() {
@@ -0,0 +1,193 @@
1
+ import {
2
+ isValidX25519Recipient,
3
+ pubKeyHash
4
+ } from "./chunk-JCBKARSK.js";
5
+ import {
6
+ EXE_AI_DIR
7
+ } from "./chunk-7Y5UDEVM.js";
8
+
9
+ // src/lib/monitor-grants.ts
10
+ import crypto from "crypto";
11
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync } from "fs";
12
+ import path from "path";
13
+ var GRANTS_MAC_HKDF_INFO = "exe-os-monitor-grants-mac-v1";
14
+ var _macKey = null;
15
+ var _warnedUnverified = false;
16
+ var _warnedActiveMonitoring = false;
17
+ function primeGrantsMacKey(masterKey) {
18
+ if (masterKey.length !== 32) {
19
+ throw new Error(`Master key must be 32 bytes, got ${masterKey.length}`);
20
+ }
21
+ _macKey = Buffer.from(crypto.hkdfSync("sha256", masterKey, "", GRANTS_MAC_HKDF_INFO, 32));
22
+ }
23
+ function isGrantsMacPrimed() {
24
+ return _macKey !== null;
25
+ }
26
+ function dataDir() {
27
+ return process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
28
+ }
29
+ function grantsPath() {
30
+ return path.join(dataDir(), "monitor-grants.json");
31
+ }
32
+ function macMessage(grants) {
33
+ return Buffer.from(JSON.stringify(grants), "utf8");
34
+ }
35
+ function computeMac(grants) {
36
+ if (!_macKey) throw new Error("Grants MAC key not primed");
37
+ return crypto.createHmac("sha256", _macKey).update(macMessage(grants)).digest("hex");
38
+ }
39
+ function warnUnverifiedOnce(reason) {
40
+ if (_warnedUnverified) return;
41
+ _warnedUnverified = true;
42
+ process.stderr.write(
43
+ `[exe-os] \u26A0 monitor-grants.json ${reason} \u2014 refusing to honor it. Monitoring is treated as OFF. If you did not expect this, your grants file may have been tampered with; re-add trusted grants with \`exe-os grant add\`.
44
+ `
45
+ );
46
+ }
47
+ function isWellFormedGrant(g) {
48
+ if (typeof g !== "object" || g === null) return false;
49
+ const r = g;
50
+ if (typeof r.owner_pub_b64 !== "string") return false;
51
+ if (typeof r.grant_id !== "string") return false;
52
+ if (typeof r.added_at !== "string") return false;
53
+ if (!(r.revoked_at === null || typeof r.revoked_at === "string")) return false;
54
+ if (!(r.label === void 0 || typeof r.label === "string")) return false;
55
+ return true;
56
+ }
57
+ function loadFile() {
58
+ const p = grantsPath();
59
+ if (!existsSync(p)) return { version: 1, grants: [] };
60
+ let raw;
61
+ try {
62
+ raw = JSON.parse(readFileSync(p, "utf8"));
63
+ } catch {
64
+ warnUnverifiedOnce("is unreadable/corrupt");
65
+ return { version: 1, grants: [] };
66
+ }
67
+ if (!raw || !Array.isArray(raw.grants)) return { version: 1, grants: [] };
68
+ if (!raw.grants.every(isWellFormedGrant)) {
69
+ warnUnverifiedOnce("contains a malformed grant entry");
70
+ return { version: 1, grants: [] };
71
+ }
72
+ const grants = raw.grants;
73
+ if (!_macKey) {
74
+ warnUnverifiedOnce("cannot be integrity-verified (encryption key unavailable)");
75
+ return { version: 1, grants: [] };
76
+ }
77
+ if (typeof raw.mac !== "string") {
78
+ warnUnverifiedOnce("is missing its integrity MAC");
79
+ return { version: 1, grants: [] };
80
+ }
81
+ const expected = computeMac(grants);
82
+ const got = raw.mac;
83
+ const a = Buffer.from(expected, "hex");
84
+ const b = Buffer.from(got, "hex");
85
+ if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
86
+ warnUnverifiedOnce("has an invalid integrity MAC");
87
+ return { version: 1, grants: [] };
88
+ }
89
+ return { version: 1, grants };
90
+ }
91
+ function saveFile(grants) {
92
+ if (!_macKey) {
93
+ throw new Error(
94
+ "Cannot write monitoring grants: encryption key not available to sign the grants file. Run this from a device where `exe-os` can read the master key."
95
+ );
96
+ }
97
+ const dir = dataDir();
98
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true, mode: 448 });
99
+ const p = grantsPath();
100
+ const tmp = `${p}.tmp`;
101
+ const file = { version: 1, grants, mac: computeMac(grants) };
102
+ writeFileSync(tmp, JSON.stringify(file, null, 2) + "\n", { mode: 384 });
103
+ renameSync(tmp, p);
104
+ }
105
+ function assertValidPub(ownerPubB64) {
106
+ let buf;
107
+ try {
108
+ buf = Buffer.from(ownerPubB64, "base64");
109
+ } catch {
110
+ throw new Error("owner public key is not valid base64");
111
+ }
112
+ if (buf.length !== 32) {
113
+ throw new Error(`owner public key must decode to 32 bytes, got ${buf.length}`);
114
+ }
115
+ if (!isValidX25519Recipient(buf)) {
116
+ throw new Error("owner public key is not a valid X25519 point (rejected low-order/degenerate key)");
117
+ }
118
+ return buf;
119
+ }
120
+ function listGrants() {
121
+ return loadFile().grants.slice().sort((a, b) => b.added_at.localeCompare(a.added_at));
122
+ }
123
+ function addGrant(ownerPubB64, label) {
124
+ const pub = assertValidPub(ownerPubB64);
125
+ const canonical = pub.toString("base64");
126
+ const grants = loadFile().grants;
127
+ const existing = grants.find(
128
+ (g) => g.revoked_at === null && Buffer.from(g.owner_pub_b64, "base64").toString("base64") === canonical
129
+ );
130
+ if (existing) return { grant_id: existing.grant_id, created: false };
131
+ const grant = {
132
+ grant_id: crypto.randomBytes(8).toString("hex"),
133
+ owner_pub_b64: canonical,
134
+ added_at: (/* @__PURE__ */ new Date()).toISOString(),
135
+ revoked_at: null,
136
+ ...label ? { label } : {}
137
+ };
138
+ grants.push(grant);
139
+ saveFile(grants);
140
+ return { grant_id: grant.grant_id, created: true };
141
+ }
142
+ function revokeGrant(grantIdOrOwnerPub) {
143
+ const grants = loadFile().grants;
144
+ let canonical = null;
145
+ try {
146
+ const buf = Buffer.from(grantIdOrOwnerPub, "base64");
147
+ if (buf.length === 32) canonical = buf.toString("base64");
148
+ } catch {
149
+ }
150
+ let revoked = 0;
151
+ const now = (/* @__PURE__ */ new Date()).toISOString();
152
+ for (const g of grants) {
153
+ if (g.revoked_at !== null) continue;
154
+ const matchesId = g.grant_id === grantIdOrOwnerPub;
155
+ const matchesPub = canonical !== null && g.owner_pub_b64 === canonical;
156
+ if (matchesId || matchesPub) {
157
+ g.revoked_at = now;
158
+ revoked++;
159
+ }
160
+ }
161
+ if (revoked > 0) saveFile(grants);
162
+ return revoked;
163
+ }
164
+ function activeRecipientPubKeys() {
165
+ return loadFile().grants.filter((g) => g.revoked_at === null).map((g) => Buffer.from(g.owner_pub_b64, "base64")).filter((buf) => buf.length === 32);
166
+ }
167
+ function warnActiveMonitoringOnce(recipientPubKeys) {
168
+ if (_warnedActiveMonitoring || recipientPubKeys.length === 0) return;
169
+ _warnedActiveMonitoring = true;
170
+ const hashes = recipientPubKeys.map((p) => pubKeyHash(p).toString("hex")).join(", ");
171
+ process.stderr.write(
172
+ `[exe-os] \u26A0 ${recipientPubKeys.length} active monitoring recipient(s) \u2014 your memories are being encrypted to external key(s): ${hashes}
173
+ [exe-os] Review or revoke with: exe-os grant list
174
+ `
175
+ );
176
+ }
177
+ function _resetGrantsStateForTest() {
178
+ _macKey = null;
179
+ _warnedUnverified = false;
180
+ _warnedActiveMonitoring = false;
181
+ }
182
+
183
+ export {
184
+ primeGrantsMacKey,
185
+ isGrantsMacPrimed,
186
+ grantsPath,
187
+ listGrants,
188
+ addGrant,
189
+ revokeGrant,
190
+ activeRecipientPubKeys,
191
+ warnActiveMonitoringOnce,
192
+ _resetGrantsStateForTest
193
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  recordOrchestrationEventBestEffort
3
- } from "./chunk-X7BGMYZS.js";
3
+ } from "./chunk-FUIIVSW6.js";
4
4
 
5
5
  // src/lib/worktree.ts
6
6
  import { execSync } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-XZHA3WO2.js";
3
+ } from "./chunk-HEPR6QTL.js";
4
4
  import {
5
5
  loadConfigSync
6
6
  } from "./chunk-7Y5UDEVM.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listReminders
3
- } from "./chunk-EGCYJ4LJ.js";
3
+ } from "./chunk-KMBEL7VB.js";
4
4
 
5
5
  // src/mcp/tools/list-reminders.ts
6
6
  import { z } from "zod";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  checkLicense,
3
3
  loadLicense
4
- } from "./chunk-P6OW236E.js";
4
+ } from "./chunk-XACL67CS.js";
5
5
 
6
6
  // src/lib/license-gate.ts
7
7
  var _cachedLicense = null;