@askexenow/exe-os 0.9.280 → 0.9.281

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 (436) hide show
  1. package/deploy/compose/.env.customer.example +1 -1
  2. package/deploy/compose/.env.default +2 -1
  3. package/deploy/compose/.env.example +1 -1
  4. package/deploy/compose/docker-compose.yml +74 -13
  5. package/deploy/compose/erp-nginx/nginx.conf +52 -0
  6. package/deploy/compose/generate-env.ts +1 -1
  7. package/deploy/compose/init-db.sql +13 -2
  8. package/deploy/stack-manifests/v0.9.json +11 -31
  9. package/dist/active-agent-6ZBHGHXF.js +26 -0
  10. package/dist/active-agent-E23SCYER.js +27 -0
  11. package/dist/active-agent-KMZT44S4.js +26 -0
  12. package/dist/active-agent-LFFTVROM.js +27 -0
  13. package/dist/agentic-ontology-PCZB5HV5.js +25 -0
  14. package/dist/agentic-ontology-PGGJN2ES.js +25 -0
  15. package/dist/assets/tmux.conf +2 -0
  16. package/dist/backfill-metadata-KQ4FEVUR.js +599 -0
  17. package/dist/backfill-metadata-Y3YWCHKJ.js +599 -0
  18. package/dist/behaviors-H4DZECKL.js +39 -0
  19. package/dist/behaviors-WIUTIJF6.js +39 -0
  20. package/dist/bin/agentic-ontology-backfill.js +5 -5
  21. package/dist/bin/agentic-reflection-backfill.js +6 -6
  22. package/dist/bin/agentic-semantic-label.js +5 -5
  23. package/dist/bin/backfill-conversations.js +4 -4
  24. package/dist/bin/backfill-responses.js +4 -4
  25. package/dist/bin/backfill-vectors.js +5 -5
  26. package/dist/bin/bulk-sync-postgres.js +7 -7
  27. package/dist/bin/cc-doctor.js +4 -4
  28. package/dist/bin/cleanup-stale-review-tasks.js +10 -10
  29. package/dist/bin/cli.js +15 -15
  30. package/dist/bin/exe-agent-config.js +2 -2
  31. package/dist/bin/exe-agent.js +4 -4
  32. package/dist/bin/exe-assign.js +5 -5
  33. package/dist/bin/exe-boot.js +17 -17
  34. package/dist/bin/exe-call.js +4 -4
  35. package/dist/bin/exe-cloud.js +5 -5
  36. package/dist/bin/exe-dispatch.js +10 -10
  37. package/dist/bin/exe-doctor.js +1 -1
  38. package/dist/bin/exe-export-behaviors.js +7 -7
  39. package/dist/bin/exe-forget.js +6 -6
  40. package/dist/bin/exe-gateway.js +7 -7
  41. package/dist/bin/exe-healthcheck.js +4 -4
  42. package/dist/bin/exe-heartbeat.js +10 -10
  43. package/dist/bin/exe-kill.js +13 -13
  44. package/dist/bin/exe-launch-agent.js +17 -17
  45. package/dist/bin/exe-new-employee.js +7 -7
  46. package/dist/bin/exe-pending-messages.js +11 -11
  47. package/dist/bin/exe-pending-notifications.js +10 -10
  48. package/dist/bin/exe-pending-reviews.js +10 -10
  49. package/dist/bin/exe-rename.js +4 -4
  50. package/dist/bin/exe-review.js +12 -12
  51. package/dist/bin/exe-search.js +5 -5
  52. package/dist/bin/exe-session-cleanup.js +15 -15
  53. package/dist/bin/exe-settings.js +5 -5
  54. package/dist/bin/exe-start-codex.js +11 -11
  55. package/dist/bin/exe-start-opencode.js +8 -8
  56. package/dist/bin/exe-status.js +11 -11
  57. package/dist/bin/exe-support.js +2 -2
  58. package/dist/bin/exe-team.js +3 -3
  59. package/dist/bin/exe-watchdog.js +17 -2
  60. package/dist/bin/git-sweep.js +11 -11
  61. package/dist/bin/graph-backfill.js +4 -4
  62. package/dist/bin/graph-export.js +5 -5
  63. package/dist/bin/import-history.js +7 -7
  64. package/dist/bin/install.js +8 -7
  65. package/dist/bin/intercom-check.js +4 -4
  66. package/dist/bin/mcp-sessions.js +2 -2
  67. package/dist/bin/orchestration-metrics.js +4 -4
  68. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  69. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  70. package/dist/bin/scan-tasks.js +10 -10
  71. package/dist/bin/setup.js +1 -1
  72. package/dist/bin/shard-migrate.js +4 -4
  73. package/dist/bin/stack-update.js +3 -3
  74. package/dist/bin/vps-health-gate.js +1 -1
  75. package/dist/capability-cards-F22XWGLB.js +88 -0
  76. package/dist/capability-cards-KCKITXXZ.js +88 -0
  77. package/dist/capacity-monitor-CHXGKVEO.js +50 -0
  78. package/dist/capacity-monitor-L3M5KB6T.js +50 -0
  79. package/dist/catchup-brief-BVZANLRZ.js +154 -0
  80. package/dist/catchup-brief-LDUGMC7S.js +154 -0
  81. package/dist/catchup-brief-NZDLL7SA.js +154 -0
  82. package/dist/catchup-brief-OOIXVGBA.js +154 -0
  83. package/dist/catchup-brief-UPXHDYTB.js +154 -0
  84. package/dist/chunk-2BI3FQKL.js +1876 -0
  85. package/dist/chunk-2CJUQGHH.js +362 -0
  86. package/dist/chunk-2EVYBMBJ.js +128 -0
  87. package/dist/chunk-2NQOZOXG.js +2113 -0
  88. package/dist/chunk-2QK5E3LB.js +128 -0
  89. package/dist/chunk-2VTCG4ZU.js +1352 -0
  90. package/dist/chunk-2YGI36DV.js +1119 -0
  91. package/dist/chunk-32BQN2QN.js +185 -0
  92. package/dist/chunk-33JMO4UV.js +157 -0
  93. package/dist/chunk-3DZAYLXY.js +377 -0
  94. package/dist/chunk-3MGBE7GR.js +76 -0
  95. package/dist/chunk-3MTV4FJL.js +271 -0
  96. package/dist/chunk-3NN7VQ27.js +1352 -0
  97. package/dist/chunk-4533HNOG.js +70 -0
  98. package/dist/chunk-456UW3MT.js +731 -0
  99. package/dist/chunk-4AU56XV2.js +58 -0
  100. package/dist/chunk-4MRP6EBR.js +280 -0
  101. package/dist/chunk-4MRWW52U.js +14219 -0
  102. package/dist/chunk-4WWECNAY.js +50 -0
  103. package/dist/chunk-4ZJDDR6L.js +171 -0
  104. package/dist/chunk-522EOPM6.js +382 -0
  105. package/dist/chunk-52UDAVZE.js +3208 -0
  106. package/dist/chunk-5FAMUB4X.js +204 -0
  107. package/dist/chunk-5PGZJQUI.js +58 -0
  108. package/dist/chunk-67TZJXNZ.js +262 -0
  109. package/dist/chunk-6FEZ7GN2.js +123 -0
  110. package/dist/chunk-6MOGND7S.js +14219 -0
  111. package/dist/chunk-6TRSVY7L.js +181 -0
  112. package/dist/chunk-6WCS7ZNK.js +85 -0
  113. package/dist/chunk-6WRYDREW.js +539 -0
  114. package/dist/chunk-72UA2FB3.js +181 -0
  115. package/dist/chunk-77DMFEOL.js +30 -0
  116. package/dist/chunk-7COXVQ5W.js +214 -0
  117. package/dist/chunk-7HLWBYH7.js +60 -0
  118. package/dist/chunk-ALSTZCWT.js +204 -0
  119. package/dist/chunk-ARUTDXZX.js +280 -0
  120. package/dist/chunk-AU47B4QY.js +129 -0
  121. package/dist/chunk-AXOREWVL.js +836 -0
  122. package/dist/chunk-B5MNC54V.js +127 -0
  123. package/dist/chunk-B74VSMKX.js +1350 -0
  124. package/dist/chunk-BHWLH44J.js +362 -0
  125. package/dist/chunk-BUPZ3HD2.js +85 -0
  126. package/dist/chunk-BWVLMA53.js +2113 -0
  127. package/dist/chunk-C5WLBKMJ.js +50 -0
  128. package/dist/chunk-C62T6R2A.js +97 -0
  129. package/dist/chunk-CV5KBAIK.js +33 -0
  130. package/dist/chunk-DAYSDWXA.js +1068 -0
  131. package/dist/chunk-DI4URIUB.js +227 -0
  132. package/dist/chunk-DNTCYFJ6.js +76 -0
  133. package/dist/chunk-DPDRRS7T.js +103 -0
  134. package/dist/chunk-DT3EV6CW.js +103 -0
  135. package/dist/chunk-DX45HDWY.js +1076 -0
  136. package/dist/chunk-E72BD6MG.js +284 -0
  137. package/dist/chunk-EAPUSVKS.js +375 -0
  138. package/dist/chunk-EFUANRRT.js +85 -0
  139. package/dist/chunk-EG2SCT5R.js +1352 -0
  140. package/dist/chunk-EJD2JU77.js +58 -0
  141. package/dist/chunk-EMXYUAVP.js +81 -0
  142. package/dist/chunk-ENM2TAAM.js +14219 -0
  143. package/dist/chunk-EPDRTPVP.js +1876 -0
  144. package/dist/chunk-EW6XDHID.js +221 -0
  145. package/dist/chunk-EYEGSAWZ.js +1094 -0
  146. package/dist/chunk-F6L33PAQ.js +231 -0
  147. package/dist/chunk-FC2SCTVE.js +38 -0
  148. package/dist/chunk-FSRKIZGZ.js +630 -0
  149. package/dist/chunk-FTG7I5CB.js +81 -0
  150. package/dist/chunk-GVFRLWX7.js +30 -0
  151. package/dist/chunk-H3XMZOWW.js +1119 -0
  152. package/dist/chunk-HAKXE6LN.js +123 -0
  153. package/dist/chunk-HLP3ZDTW.js +448 -0
  154. package/dist/chunk-HOYWKQAA.js +510 -0
  155. package/dist/chunk-HWDD64IW.js +712 -0
  156. package/dist/chunk-HWMCULHY.js +127 -0
  157. package/dist/chunk-HZZHRZPK.js +210 -0
  158. package/dist/chunk-ICRWTYNW.js +103 -0
  159. package/dist/chunk-J5MWPC33.js +167 -0
  160. package/dist/chunk-JBXANNNB.js +70 -0
  161. package/dist/chunk-JPBMIYWF.js +1352 -0
  162. package/dist/chunk-JY6EXBFI.js +373 -0
  163. package/dist/chunk-JZLIBXI7.js +14219 -0
  164. package/dist/chunk-JZPTKXJ6.js +668 -0
  165. package/dist/chunk-KEYMA4ZP.js +510 -0
  166. package/dist/chunk-KHGNN6GL.js +2078 -0
  167. package/dist/chunk-KVLB2PD6.js +97 -0
  168. package/dist/chunk-L3YBRBKL.js +1076 -0
  169. package/dist/chunk-L7VZ32NA.js +89 -0
  170. package/dist/chunk-LEHLADW4.js +221 -0
  171. package/dist/chunk-LPD4HILQ.js +262 -0
  172. package/dist/chunk-LSJ3ADDI.js +51 -0
  173. package/dist/chunk-LUMS2MAS.js +58 -0
  174. package/dist/chunk-LV4SEC6C.js +394 -0
  175. package/dist/chunk-LXXBEI4A.js +284 -0
  176. package/dist/chunk-M4NPCAIH.js +456 -0
  177. package/dist/chunk-MFJ62LQ5.js +157 -0
  178. package/dist/chunk-MGEZNKOD.js +836 -0
  179. package/dist/chunk-MJ7X5IBW.js +227 -0
  180. package/dist/chunk-MLGRWCY4.js +54 -0
  181. package/dist/chunk-MQZX57IY.js +348 -0
  182. package/dist/chunk-MY7MFF6J.js +103 -0
  183. package/dist/chunk-MYA2X5OY.js +185 -0
  184. package/dist/chunk-MYEABW5Z.js +630 -0
  185. package/dist/chunk-MZ2TDCAL.js +402 -0
  186. package/dist/chunk-NF3FRB7Z.js +271 -0
  187. package/dist/chunk-NXYIFEPV.js +539 -0
  188. package/dist/chunk-O2GVE5B5.js +58 -0
  189. package/dist/chunk-O5GUCDR2.js +456 -0
  190. package/dist/chunk-OBZNRECA.js +128 -0
  191. package/dist/chunk-OMZ2RLJG.js +214 -0
  192. package/dist/chunk-ORDHJRWN.js +299 -0
  193. package/dist/chunk-OSPIJMCD.js +210 -0
  194. package/dist/chunk-OUGWEH4J.js +240 -0
  195. package/dist/chunk-OV5MJQGC.js +1876 -0
  196. package/dist/chunk-PC635OAG.js +4318 -0
  197. package/dist/chunk-PH46R4J6.js +348 -0
  198. package/dist/chunk-PJP2EP7P.js +394 -0
  199. package/dist/chunk-PODFWH3V.js +333 -0
  200. package/dist/chunk-PPWH3SHR.js +1068 -0
  201. package/dist/chunk-PWPJK7KB.js +4318 -0
  202. package/dist/chunk-PXONZVG4.js +377 -0
  203. package/dist/chunk-QAOGJRZD.js +369 -0
  204. package/dist/chunk-QC3LAEI7.js +197 -0
  205. package/dist/chunk-QDWQDUWI.js +668 -0
  206. package/dist/chunk-QKJFD6BH.js +1350 -0
  207. package/dist/chunk-QNYVJGFM.js +345 -0
  208. package/dist/chunk-QQF3XGQ5.js +14219 -0
  209. package/dist/chunk-QRPFQNI3.js +150 -0
  210. package/dist/chunk-QSSU5XWD.js +731 -0
  211. package/dist/chunk-QXZAGVAV.js +2078 -0
  212. package/dist/chunk-RA54MW64.js +244 -0
  213. package/dist/chunk-RF7PUWXI.js +197 -0
  214. package/dist/chunk-S3INDYSO.js +244 -0
  215. package/dist/chunk-SLQVTHH5.js +369 -0
  216. package/dist/chunk-SY2B74KL.js +345 -0
  217. package/dist/chunk-T6QPXXXW.js +712 -0
  218. package/dist/chunk-TO5M5YCT.js +41 -0
  219. package/dist/chunk-TQ4VXUAF.js +129 -0
  220. package/dist/chunk-UAB7RQC4.js +41 -0
  221. package/dist/chunk-UMEIBDYW.js +97 -0
  222. package/dist/chunk-UXW5TB7Y.js +240 -0
  223. package/dist/chunk-VB2N5WOX.js +150 -0
  224. package/dist/chunk-VLZEMRG3.js +167 -0
  225. package/dist/chunk-VM3V6VK7.js +230 -0
  226. package/dist/chunk-VMCGKBHB.js +1352 -0
  227. package/dist/chunk-VNIYZAR5.js +128 -0
  228. package/dist/chunk-VYV4KOD2.js +85 -0
  229. package/dist/chunk-W4SRJBAT.js +171 -0
  230. package/dist/chunk-W5W3LZ3Q.js +54 -0
  231. package/dist/chunk-WDNZEOM3.js +38 -0
  232. package/dist/chunk-WUKEXVOR.js +3208 -0
  233. package/dist/chunk-X3Z35Q6L.js +373 -0
  234. package/dist/chunk-X4VOU6BQ.js +382 -0
  235. package/dist/chunk-X6EEVSVG.js +290 -0
  236. package/dist/chunk-XFHGWGNB.js +1094 -0
  237. package/dist/chunk-XKOLRWYA.js +33 -0
  238. package/dist/chunk-XMMIL3UD.js +402 -0
  239. package/dist/chunk-XWILC6VA.js +290 -0
  240. package/dist/chunk-Y4OQCX4C.js +97 -0
  241. package/dist/chunk-Y67VYYOA.js +231 -0
  242. package/dist/chunk-YGQCQTQH.js +230 -0
  243. package/dist/chunk-YGWFBN5A.js +299 -0
  244. package/dist/chunk-YMKUXZIG.js +379 -0
  245. package/dist/chunk-YOMLMT7E.js +230 -0
  246. package/dist/chunk-YPESIZOB.js +14219 -0
  247. package/dist/chunk-Z2CGCIU2.js +89 -0
  248. package/dist/chunk-ZLAWNHQR.js +448 -0
  249. package/dist/chunk-ZME5UQSN.js +333 -0
  250. package/dist/co-activation-NUEQYXE5.js +73 -0
  251. package/dist/co-activation-ZG5HLBCZ.js +73 -0
  252. package/dist/co-occurrence-7S5KWQB2.js +94 -0
  253. package/dist/co-occurrence-X5SWDXT2.js +94 -0
  254. package/dist/core-memory-GOPBRGGZ.js +110 -0
  255. package/dist/core-memory-XLCU6L5M.js +110 -0
  256. package/dist/crdt-sync-EPKHPGRZ.js +33 -0
  257. package/dist/crdt-sync-UIQJ5U7T.js +33 -0
  258. package/dist/crm-webhook-MKN23JNU.js +10 -0
  259. package/dist/crm-webhook-SM63BPXO.js +10 -0
  260. package/dist/cto-delegation-gate-PQY5TOVZ.js +279 -0
  261. package/dist/cto-delegation-gate-V5VVUR3G.js +279 -0
  262. package/dist/daemon-orchestration-C7AAS67Q.js +138 -0
  263. package/dist/daemon-orchestration-OBCAJB2H.js +138 -0
  264. package/dist/db-backup-F7VP4QRH.js +33 -0
  265. package/dist/db-backup-KVYC57W7.js +33 -0
  266. package/dist/doc-graph-extractor-H2ETEINP.js +132 -0
  267. package/dist/doc-graph-extractor-PCUZEYCH.js +132 -0
  268. package/dist/dreaming-4OZXSLE3.js +33 -0
  269. package/dist/dreaming-Z2RYEYNT.js +33 -0
  270. package/dist/exe-drift-GEWNIK7A.js +69 -0
  271. package/dist/exe-drift-XCGH7AFO.js +69 -0
  272. package/dist/exe-export-7DKAU5IP.js +75 -0
  273. package/dist/exe-export-BCHH6OE6.js +75 -0
  274. package/dist/exe-import-PDRIZVYF.js +78 -0
  275. package/dist/exe-import-ZCKUDFKL.js +78 -0
  276. package/dist/exe-key-FUWLLI3U.js +580 -0
  277. package/dist/exe-key-RKKNVUMP.js +580 -0
  278. package/dist/exe-snapshot-G4I5FQMK.js +337 -0
  279. package/dist/exe-snapshot-GWU7QTZK.js +337 -0
  280. package/dist/fast-db-init-6QG6YQNT.js +7 -0
  281. package/dist/fast-db-init-X2QDQUA4.js +7 -0
  282. package/dist/founder-context-TOMNUBGJ.js +96 -0
  283. package/dist/founder-context-UU3V6MAS.js +96 -0
  284. package/dist/gateway/index.js +8 -8
  285. package/dist/git-staleness-FEPFMZKF.js +111 -0
  286. package/dist/git-staleness-HYVYLCW3.js +111 -0
  287. package/dist/git-task-sweep-IRV52JIM.js +41 -0
  288. package/dist/git-task-sweep-T6BSM3GS.js +41 -0
  289. package/dist/global-procedures-3AURRMKO.js +21 -0
  290. package/dist/global-procedures-JPCYBZYC.js +21 -0
  291. package/dist/graph-auto-extract-OC3AOSMW.js +182 -0
  292. package/dist/graph-auto-extract-PVDYEJBY.js +182 -0
  293. package/dist/hooks/bug-report-worker.js +12 -12
  294. package/dist/hooks/codex-stop-task-finalizer.js +12 -12
  295. package/dist/hooks/commit-complete.js +12 -12
  296. package/dist/hooks/error-recall.js +6 -6
  297. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  298. package/dist/hooks/ingest.js +6 -6
  299. package/dist/hooks/instructions-loaded.js +4 -4
  300. package/dist/hooks/manifest.json +19 -19
  301. package/dist/hooks/notification.js +4 -4
  302. package/dist/hooks/post-compact.js +11 -11
  303. package/dist/hooks/post-tool-combined.js +5 -5
  304. package/dist/hooks/pre-compact.js +12 -12
  305. package/dist/hooks/pre-tool-use.js +15 -15
  306. package/dist/hooks/prompt-submit.js +22 -22
  307. package/dist/hooks/session-end.js +16 -16
  308. package/dist/hooks/session-start.js +10 -10
  309. package/dist/hooks/stop.js +15 -15
  310. package/dist/hooks/subagent-stop.js +11 -11
  311. package/dist/hooks/summary-worker.js +15 -15
  312. package/dist/index.js +18 -18
  313. package/dist/installer-72XXLBRP.js +39 -0
  314. package/dist/installer-HDXG2BZN.js +343 -0
  315. package/dist/installer-JALMKPCS.js +297 -0
  316. package/dist/installer-Q46SNNLU.js +39 -0
  317. package/dist/installer-W7PIPRCX.js +343 -0
  318. package/dist/installer-Z7WQEOS7.js +297 -0
  319. package/dist/lib/cloud-sync.js +5 -5
  320. package/dist/lib/consolidation.js +5 -5
  321. package/dist/lib/database.js +2 -2
  322. package/dist/lib/db.js +2 -2
  323. package/dist/lib/employee-templates.js +4 -4
  324. package/dist/lib/employees.js +2 -2
  325. package/dist/lib/exe-daemon.js +45 -41
  326. package/dist/lib/hybrid-search.js +5 -5
  327. package/dist/lib/identity.js +2 -2
  328. package/dist/lib/license.js +1 -1
  329. package/dist/lib/messaging.js +10 -10
  330. package/dist/lib/reminders.js +3 -3
  331. package/dist/lib/schedules.js +5 -5
  332. package/dist/lib/session-registry.js +4 -4
  333. package/dist/lib/skill-learning.js +6 -6
  334. package/dist/lib/store.js +4 -4
  335. package/dist/lib/task-router.js +3 -3
  336. package/dist/lib/tasks.js +11 -11
  337. package/dist/lib/tmux-routing.js +9 -9
  338. package/dist/lib/token-spend.js +3 -3
  339. package/dist/license-gate-7JZCHOAG.js +14 -0
  340. package/dist/license-gate-OP4SKL4P.js +14 -0
  341. package/dist/mcp/register-tools.js +58 -58
  342. package/dist/mcp/server.js +59 -59
  343. package/dist/mcp/tools/complete-reminder.js +4 -4
  344. package/dist/mcp/tools/create-reminder.js +4 -4
  345. package/dist/mcp/tools/create-task.js +13 -13
  346. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  347. package/dist/mcp/tools/list-reminders.js +4 -4
  348. package/dist/mcp/tools/list-tasks.js +13 -13
  349. package/dist/mcp/tools/send-message.js +12 -12
  350. package/dist/mcp/tools/update-task.js +12 -12
  351. package/dist/mcp-health-VULNT722.js +17 -0
  352. package/dist/mcp-health-WDOB6XUB.js +19 -0
  353. package/dist/mcp-http-config-2OZ7N74D.js +28 -0
  354. package/dist/mcp-http-config-4VXA5K73.js +28 -0
  355. package/dist/memory-cards-2K6QRZU6.js +179 -0
  356. package/dist/memory-cards-KSJF5OH2.js +179 -0
  357. package/dist/memory-graph-extractor-IJD5HWYT.js +21 -0
  358. package/dist/memory-graph-extractor-O4GAXOK5.js +21 -0
  359. package/dist/memory-poisoning-defense-2JRPWT5V.js +223 -0
  360. package/dist/memory-poisoning-defense-DH4A25NU.js +223 -0
  361. package/dist/memory-reflection-ISY2BBDB.js +243 -0
  362. package/dist/memory-reflection-Z5AQRR6H.js +243 -0
  363. package/dist/notifications-2VSWK2UJ.js +46 -0
  364. package/dist/notifications-4S253VQM.js +46 -0
  365. package/dist/oauth-server-D7D4574D.js +437 -0
  366. package/dist/oauth-server-MACN54SJ.js +437 -0
  367. package/dist/orchestration-events-BGP5RYQI.js +26 -0
  368. package/dist/orchestration-events-MDXUEVRZ.js +26 -0
  369. package/dist/orchestrator-DHK7RSSH.js +34 -0
  370. package/dist/orchestrator-R75WHQVA.js +34 -0
  371. package/dist/pipeline-router-4WUKQQEC.js +14 -0
  372. package/dist/pipeline-router-GWB2XK2Q.js +14 -0
  373. package/dist/plan-limits-NNJRAESF.js +27 -0
  374. package/dist/plan-limits-YTQW4UR4.js +27 -0
  375. package/dist/project-boot-46GZJTEX.js +299 -0
  376. package/dist/project-boot-PPHBBGIF.js +299 -0
  377. package/dist/projection-worker-UPAWXI7P.js +1034 -0
  378. package/dist/projection-worker-ZIKDYBW5.js +1034 -0
  379. package/dist/reranker-5ZBP2RRN.js +19 -0
  380. package/dist/reranker-E2MQIMJL.js +19 -0
  381. package/dist/reranker-GLSDJT3V.js +19 -0
  382. package/dist/reranker-LBBXWNOD.js +19 -0
  383. package/dist/reranker-XZ2EF4OH.js +19 -0
  384. package/dist/retrieval-health-JYRKPSII.js +7 -0
  385. package/dist/retrieval-health-OUV25J6S.js +7 -0
  386. package/dist/retrieval-health-U73JUAZL.js +7 -0
  387. package/dist/retrieval-health-WSZ7TYFF.js +7 -0
  388. package/dist/review-polling-62JV55ZT.js +125 -0
  389. package/dist/review-polling-CJXLWFWK.js +125 -0
  390. package/dist/runtime/index.js +12 -12
  391. package/dist/session-events-2ADD54VI.js +37 -0
  392. package/dist/session-events-QIJVBSKS.js +37 -0
  393. package/dist/session-kill-telemetry-HS6HD2YE.js +30 -0
  394. package/dist/session-kill-telemetry-MRT5FVSM.js +30 -0
  395. package/dist/session-scope-7ICYPC33.js +87 -0
  396. package/dist/session-scope-KMXD6EE6.js +87 -0
  397. package/dist/setup-wizard-B6GIT7YC.js +12 -0
  398. package/dist/setup-wizard-JUIJ4UZO.js +12 -0
  399. package/dist/skill-refinement-HIOX4VMC.js +158 -0
  400. package/dist/skill-refinement-T7JXRYUW.js +158 -0
  401. package/dist/stack-update-5KE6BZKQ.js +74 -0
  402. package/dist/stack-update-OP2RHP7N.js +74 -0
  403. package/dist/stack-update-VGCWDJEE.js +74 -0
  404. package/dist/steward-gate-L22WE3SY.js +14 -0
  405. package/dist/steward-gate-YKD2LUWN.js +14 -0
  406. package/dist/task-enforcement-5AOKXTY4.js +439 -0
  407. package/dist/task-enforcement-VO3YEGIO.js +439 -0
  408. package/dist/task-scope-YV2WPKRD.js +36 -0
  409. package/dist/task-scope-ZSXDZBRE.js +36 -0
  410. package/dist/tasks-crud-C6KADACT.js +78 -0
  411. package/dist/tasks-crud-NV6JEWGL.js +78 -0
  412. package/dist/tasks-notify-E22HSN6O.js +39 -0
  413. package/dist/tasks-notify-RPSEQ4WV.js +39 -0
  414. package/dist/tasks-review-V4ZLXOAZ.js +48 -0
  415. package/dist/tasks-review-ZVRI73JE.js +48 -0
  416. package/dist/telemetry-upload-LXUH7SKI.js +740 -0
  417. package/dist/telemetry-upload-TCDAZTUQ.js +740 -0
  418. package/dist/token-budget-OFBEZJTA.js +85 -0
  419. package/dist/token-budget-WAN57V6S.js +85 -0
  420. package/dist/tool-telemetry-UA3N32PK.js +17 -0
  421. package/dist/tool-telemetry-XXZJ35RR.js +17 -0
  422. package/dist/tui/App.js +17 -17
  423. package/dist/tui-data-46QLCJUE.js +259 -0
  424. package/dist/tui-data-ZDB7BLP2.js +259 -0
  425. package/dist/wiki-acl-HHSIBPF3.js +111 -0
  426. package/dist/wiki-acl-O65GZ2ZF.js +111 -0
  427. package/dist/worker-gate-27I4GAEZ.js +21 -0
  428. package/dist/worker-gate-DXU4HEPY.js +21 -0
  429. package/dist/workflow-engine-63EOEJ5Q.js +28 -0
  430. package/dist/workflow-engine-C6F2RMPN.js +28 -0
  431. package/dist/worktree-SFKKOMFD.js +27 -0
  432. package/dist/worktree-SVCE3S7X.js +27 -0
  433. package/dist/worktree-sweep-S3JHJTVP.js +20 -0
  434. package/dist/worktree-sweep-U3TIQ7WL.js +20 -0
  435. package/package.json +1 -1
  436. package/release-notes.json +88 -26
@@ -0,0 +1,437 @@
1
+ import "./chunk-MLKGABMK.js";
2
+
3
+ // src/lib/oauth-server.ts
4
+ import { createHash, randomBytes } from "crypto";
5
+ import { existsSync, readFileSync } from "fs";
6
+ import path from "path";
7
+ import os from "os";
8
+ var EXE_AI_DIR = process.env.EXE_OS_DIR ?? path.join(os.homedir(), ".exe-os");
9
+ var ACCESS_TOKEN_TTL_MS = 60 * 60 * 1e3;
10
+ var REFRESH_TOKEN_TTL_MS = 30 * 24 * 60 * 60 * 1e3;
11
+ var AUTH_CODE_TTL_MS = 5 * 60 * 1e3;
12
+ var MAX_CLIENTS = 100;
13
+ var MAX_TOKENS = 500;
14
+ var clients = /* @__PURE__ */ new Map();
15
+ var authCodes = /* @__PURE__ */ new Map();
16
+ var accessTokens = /* @__PURE__ */ new Map();
17
+ var refreshTokens = /* @__PURE__ */ new Map();
18
+ function generateId() {
19
+ return randomBytes(16).toString("hex");
20
+ }
21
+ function generateToken() {
22
+ return randomBytes(32).toString("hex");
23
+ }
24
+ function sha256(input) {
25
+ return createHash("sha256").update(input).digest("base64url");
26
+ }
27
+ function parseBody(req) {
28
+ return new Promise((resolve, reject) => {
29
+ const chunks = [];
30
+ req.on("data", (chunk) => chunks.push(chunk));
31
+ req.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
32
+ req.on("error", reject);
33
+ setTimeout(() => reject(new Error("Body read timeout")), 5e3);
34
+ });
35
+ }
36
+ function parseUrlEncoded(body) {
37
+ const result = {};
38
+ for (const pair of body.split("&")) {
39
+ const [key, value] = pair.split("=");
40
+ if (key) result[decodeURIComponent(key)] = decodeURIComponent(value ?? "");
41
+ }
42
+ return result;
43
+ }
44
+ function jsonResponse(res, status, body) {
45
+ const json = JSON.stringify(body);
46
+ res.writeHead(status, {
47
+ "Content-Type": "application/json",
48
+ "Cache-Control": "no-store",
49
+ "Pragma": "no-cache"
50
+ });
51
+ res.end(json);
52
+ }
53
+ function evictExpired(map) {
54
+ const now = Date.now();
55
+ for (const [key, val] of map) {
56
+ if (val.expires_at < now) map.delete(key);
57
+ }
58
+ }
59
+ function loadLicenseKey() {
60
+ const keyPath = path.join(EXE_AI_DIR, "license.key");
61
+ if (!existsSync(keyPath)) return null;
62
+ try {
63
+ const key = readFileSync(keyPath, "utf-8").trim();
64
+ return key.startsWith("exe_sk_") ? key : null;
65
+ } catch {
66
+ return null;
67
+ }
68
+ }
69
+ function handleProtectedResourceMetadata(res, port) {
70
+ jsonResponse(res, 200, {
71
+ resource: `http://127.0.0.1:${port}/mcp`,
72
+ authorization_servers: [`http://127.0.0.1:${port}`],
73
+ scopes_supported: ["mcp"],
74
+ bearer_methods_supported: ["header"],
75
+ resource_name: "exe-os"
76
+ });
77
+ }
78
+ function handleAuthServerMetadata(res, port) {
79
+ const base = `http://127.0.0.1:${port}`;
80
+ jsonResponse(res, 200, {
81
+ issuer: base,
82
+ authorization_endpoint: `${base}/authorize`,
83
+ token_endpoint: `${base}/token`,
84
+ registration_endpoint: `${base}/register`,
85
+ response_types_supported: ["code"],
86
+ grant_types_supported: ["authorization_code", "refresh_token"],
87
+ token_endpoint_auth_methods_supported: ["client_secret_post", "none"],
88
+ code_challenge_methods_supported: ["S256"],
89
+ scopes_supported: ["mcp"]
90
+ });
91
+ }
92
+ async function handleRegister(req, res) {
93
+ if (req.method !== "POST") {
94
+ jsonResponse(res, 405, { error: "method_not_allowed" });
95
+ return;
96
+ }
97
+ if (clients.size > MAX_CLIENTS) {
98
+ const oldest = [...clients.entries()].sort((a, b) => a[1].registered_at - b[1].registered_at);
99
+ for (let i = 0; i < oldest.length - MAX_CLIENTS / 2; i++) {
100
+ clients.delete(oldest[i][0]);
101
+ }
102
+ }
103
+ try {
104
+ const body = await parseBody(req);
105
+ const metadata = JSON.parse(body);
106
+ const clientId = generateId();
107
+ const clientSecret = metadata.token_endpoint_auth_method === "none" ? void 0 : generateToken();
108
+ const client = {
109
+ client_id: clientId,
110
+ client_secret: clientSecret,
111
+ redirect_uris: metadata.redirect_uris ?? [],
112
+ client_name: metadata.client_name,
113
+ registered_at: Date.now()
114
+ };
115
+ clients.set(clientId, client);
116
+ jsonResponse(res, 201, {
117
+ client_id: clientId,
118
+ client_secret: clientSecret,
119
+ client_id_issued_at: Math.floor(Date.now() / 1e3),
120
+ redirect_uris: client.redirect_uris,
121
+ client_name: client.client_name,
122
+ token_endpoint_auth_method: clientSecret ? "client_secret_post" : "none",
123
+ grant_types: metadata.grant_types ?? ["authorization_code", "refresh_token"],
124
+ response_types: metadata.response_types ?? ["code"]
125
+ });
126
+ } catch {
127
+ jsonResponse(res, 400, { error: "invalid_client_metadata" });
128
+ }
129
+ }
130
+ async function handleAuthorize(req, res, url) {
131
+ const clientId = url.searchParams.get("client_id");
132
+ const redirectUri = url.searchParams.get("redirect_uri");
133
+ const responseType = url.searchParams.get("response_type");
134
+ const codeChallenge = url.searchParams.get("code_challenge");
135
+ const codeChallengeMethod = url.searchParams.get("code_challenge_method");
136
+ const state = url.searchParams.get("state");
137
+ const scope = url.searchParams.get("scope");
138
+ if (!clientId || !redirectUri || responseType !== "code" || !codeChallenge) {
139
+ jsonResponse(res, 400, { error: "invalid_request", error_description: "Missing required OAuth parameters" });
140
+ return;
141
+ }
142
+ const client = clients.get(clientId);
143
+ if (!client) {
144
+ jsonResponse(res, 400, { error: "invalid_client", error_description: "Unknown client_id" });
145
+ return;
146
+ }
147
+ if (req.method === "POST") {
148
+ const body = await parseBody(req);
149
+ const params = parseUrlEncoded(body);
150
+ const licenseKey = params.license_key;
151
+ if (!licenseKey || !licenseKey.startsWith("exe_sk_")) {
152
+ serveAuthForm(res, url, "Invalid license key. Must start with exe_sk_");
153
+ return;
154
+ }
155
+ let licensePlan = "free";
156
+ let licenseEmail = "";
157
+ try {
158
+ const { validateLicense } = await import("./lib/license.js");
159
+ const license = await validateLicense(licenseKey);
160
+ if (!license.valid) {
161
+ serveAuthForm(res, url, "License key is invalid or expired.");
162
+ return;
163
+ }
164
+ licensePlan = license.plan;
165
+ licenseEmail = license.email ?? "";
166
+ } catch {
167
+ serveAuthForm(res, url, "Could not validate license. Check your internet connection.");
168
+ return;
169
+ }
170
+ return issueAuthCode(res, {
171
+ clientId,
172
+ redirectUri,
173
+ codeChallenge,
174
+ codeChallengeMethod: codeChallengeMethod ?? "S256",
175
+ state,
176
+ scope,
177
+ licensePlan,
178
+ licenseEmail
179
+ });
180
+ }
181
+ const existingKey = loadLicenseKey();
182
+ if (existingKey) {
183
+ let licensePlan = "free";
184
+ let licenseEmail = "";
185
+ try {
186
+ const { checkLicense } = await import("./lib/license.js");
187
+ const license = await checkLicense();
188
+ if (license.valid) {
189
+ licensePlan = license.plan;
190
+ licenseEmail = license.email ?? "";
191
+ return issueAuthCode(res, {
192
+ clientId,
193
+ redirectUri,
194
+ codeChallenge,
195
+ codeChallengeMethod: codeChallengeMethod ?? "S256",
196
+ state,
197
+ scope,
198
+ licensePlan,
199
+ licenseEmail
200
+ });
201
+ }
202
+ } catch {
203
+ }
204
+ }
205
+ serveAuthForm(res, url, null);
206
+ }
207
+ function issueAuthCode(res, params) {
208
+ evictExpired(authCodes);
209
+ const code = generateToken();
210
+ authCodes.set(code, {
211
+ code,
212
+ client_id: params.clientId,
213
+ redirect_uri: params.redirectUri,
214
+ code_challenge: params.codeChallenge,
215
+ code_challenge_method: params.codeChallengeMethod,
216
+ state: params.state ?? void 0,
217
+ scope: params.scope ?? void 0,
218
+ license_plan: params.licensePlan,
219
+ license_email: params.licenseEmail,
220
+ expires_at: Date.now() + AUTH_CODE_TTL_MS,
221
+ used: false
222
+ });
223
+ const redirectUrl = new URL(params.redirectUri);
224
+ redirectUrl.searchParams.set("code", code);
225
+ if (params.state) redirectUrl.searchParams.set("state", params.state);
226
+ res.writeHead(302, { Location: redirectUrl.toString() });
227
+ res.end();
228
+ }
229
+ function serveAuthForm(res, url, errorMsg) {
230
+ const error = errorMsg ? `<p style="color:#ef4444;margin-bottom:16px">${errorMsg}</p>` : "";
231
+ const html = `<!DOCTYPE html>
232
+ <html>
233
+ <head>
234
+ <title>Exe OS \u2014 License Authorization</title>
235
+ <meta charset="utf-8">
236
+ <style>
237
+ body { font-family: -apple-system, system-ui, sans-serif; background: #0F0E1A; color: #E0E0E0; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; }
238
+ .card { background: #1A1A2E; border: 1px solid #2A2A3E; border-radius: 12px; padding: 32px; max-width: 420px; width: 100%; }
239
+ h1 { color: #F5D76E; font-size: 20px; margin: 0 0 8px; }
240
+ p { color: #888; font-size: 14px; line-height: 1.5; margin: 0 0 20px; }
241
+ label { display: block; color: #AAA; font-size: 13px; margin-bottom: 6px; }
242
+ input { width: 100%; padding: 10px 12px; background: #0F0E1A; border: 1px solid #2A2A3E; border-radius: 6px; color: #E0E0E0; font-size: 14px; box-sizing: border-box; }
243
+ input:focus { border-color: #F5D76E; outline: none; }
244
+ button { width: 100%; padding: 10px; background: #F5D76E; color: #0F0E1A; border: none; border-radius: 6px; font-size: 14px; font-weight: 600; cursor: pointer; margin-top: 16px; }
245
+ button:hover { background: #E5C75E; }
246
+ </style>
247
+ </head>
248
+ <body>
249
+ <div class="card">
250
+ <h1>Exe OS</h1>
251
+ <p>Enter your license key to authorize MCP access.</p>
252
+ ${error}
253
+ <form method="POST" action="/authorize?${url.searchParams.toString()}">
254
+ <label for="license_key">License Key</label>
255
+ <input type="text" id="license_key" name="license_key" placeholder="exe_sk_..." autofocus required>
256
+ <button type="submit">Authorize</button>
257
+ </form>
258
+ </div>
259
+ </body>
260
+ </html>`;
261
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
262
+ res.end(html);
263
+ }
264
+ async function handleToken(req, res) {
265
+ if (req.method !== "POST") {
266
+ jsonResponse(res, 405, { error: "method_not_allowed" });
267
+ return;
268
+ }
269
+ const body = await parseBody(req);
270
+ let params;
271
+ const contentType = req.headers["content-type"] ?? "";
272
+ if (contentType.includes("application/json")) {
273
+ try {
274
+ params = JSON.parse(body);
275
+ } catch {
276
+ jsonResponse(res, 400, { error: "invalid_request" });
277
+ return;
278
+ }
279
+ } else {
280
+ params = parseUrlEncoded(body);
281
+ }
282
+ const grantType = params.grant_type;
283
+ if (grantType === "authorization_code") {
284
+ return handleAuthCodeExchange(params, res);
285
+ } else if (grantType === "refresh_token") {
286
+ return handleRefreshToken(params, res);
287
+ } else {
288
+ jsonResponse(res, 400, { error: "unsupported_grant_type" });
289
+ }
290
+ }
291
+ function handleAuthCodeExchange(params, res) {
292
+ const code = params.code;
293
+ const codeVerifier = params.code_verifier;
294
+ const clientId = params.client_id;
295
+ if (!code || !codeVerifier || !clientId) {
296
+ jsonResponse(res, 400, { error: "invalid_request", error_description: "Missing code, code_verifier, or client_id" });
297
+ return;
298
+ }
299
+ evictExpired(authCodes);
300
+ const authCode = authCodes.get(code);
301
+ if (!authCode) {
302
+ jsonResponse(res, 400, { error: "invalid_grant", error_description: "Unknown or expired authorization code" });
303
+ return;
304
+ }
305
+ if (authCode.used) {
306
+ authCodes.delete(code);
307
+ jsonResponse(res, 400, { error: "invalid_grant", error_description: "Authorization code already used" });
308
+ return;
309
+ }
310
+ if (authCode.client_id !== clientId) {
311
+ jsonResponse(res, 400, { error: "invalid_grant", error_description: "Client ID mismatch" });
312
+ return;
313
+ }
314
+ const expectedChallenge = sha256(codeVerifier);
315
+ if (expectedChallenge !== authCode.code_challenge) {
316
+ jsonResponse(res, 400, { error: "invalid_grant", error_description: "PKCE verification failed" });
317
+ return;
318
+ }
319
+ authCode.used = true;
320
+ evictExpired(accessTokens);
321
+ evictExpired(refreshTokens);
322
+ if (accessTokens.size > MAX_TOKENS) {
323
+ const oldest = [...accessTokens.entries()].sort((a, b) => a[1].expires_at - b[1].expires_at);
324
+ for (let i = 0; i < oldest.length - MAX_TOKENS / 2; i++) {
325
+ accessTokens.delete(oldest[i][0]);
326
+ }
327
+ }
328
+ const accessToken = generateToken();
329
+ const refreshToken = generateToken();
330
+ accessTokens.set(accessToken, {
331
+ token: accessToken,
332
+ client_id: clientId,
333
+ scope: authCode.scope ?? "mcp",
334
+ license_plan: authCode.license_plan,
335
+ license_email: authCode.license_email,
336
+ expires_at: Date.now() + ACCESS_TOKEN_TTL_MS
337
+ });
338
+ refreshTokens.set(refreshToken, {
339
+ token: refreshToken,
340
+ client_id: clientId,
341
+ scope: authCode.scope ?? "mcp",
342
+ license_plan: authCode.license_plan,
343
+ license_email: authCode.license_email,
344
+ expires_at: Date.now() + REFRESH_TOKEN_TTL_MS
345
+ });
346
+ jsonResponse(res, 200, {
347
+ access_token: accessToken,
348
+ token_type: "Bearer",
349
+ expires_in: Math.floor(ACCESS_TOKEN_TTL_MS / 1e3),
350
+ refresh_token: refreshToken,
351
+ scope: authCode.scope ?? "mcp"
352
+ });
353
+ }
354
+ function handleRefreshToken(params, res) {
355
+ const token = params.refresh_token;
356
+ const clientId = params.client_id;
357
+ if (!token) {
358
+ jsonResponse(res, 400, { error: "invalid_request", error_description: "Missing refresh_token" });
359
+ return;
360
+ }
361
+ evictExpired(refreshTokens);
362
+ const rt = refreshTokens.get(token);
363
+ if (!rt) {
364
+ jsonResponse(res, 400, { error: "invalid_grant", error_description: "Unknown or expired refresh token" });
365
+ return;
366
+ }
367
+ if (clientId && rt.client_id !== clientId) {
368
+ jsonResponse(res, 400, { error: "invalid_grant", error_description: "Client ID mismatch" });
369
+ return;
370
+ }
371
+ refreshTokens.delete(token);
372
+ const newAccessToken = generateToken();
373
+ const newRefreshToken = generateToken();
374
+ accessTokens.set(newAccessToken, {
375
+ token: newAccessToken,
376
+ client_id: rt.client_id,
377
+ scope: rt.scope,
378
+ license_plan: rt.license_plan,
379
+ license_email: rt.license_email,
380
+ expires_at: Date.now() + ACCESS_TOKEN_TTL_MS
381
+ });
382
+ refreshTokens.set(newRefreshToken, {
383
+ token: newRefreshToken,
384
+ client_id: rt.client_id,
385
+ scope: rt.scope,
386
+ license_plan: rt.license_plan,
387
+ license_email: rt.license_email,
388
+ expires_at: Date.now() + REFRESH_TOKEN_TTL_MS
389
+ });
390
+ jsonResponse(res, 200, {
391
+ access_token: newAccessToken,
392
+ token_type: "Bearer",
393
+ expires_in: Math.floor(ACCESS_TOKEN_TTL_MS / 1e3),
394
+ refresh_token: newRefreshToken,
395
+ scope: rt.scope
396
+ });
397
+ }
398
+ function verifyAccessToken(token) {
399
+ evictExpired(accessTokens);
400
+ const at = accessTokens.get(token);
401
+ if (!at) return { valid: false };
402
+ return {
403
+ valid: true,
404
+ client_id: at.client_id,
405
+ scope: at.scope,
406
+ license_plan: at.license_plan,
407
+ license_email: at.license_email
408
+ };
409
+ }
410
+ async function handleOAuthRoute(req, res, url, port) {
411
+ const p = url.pathname;
412
+ if (p === "/.well-known/oauth-protected-resource" || p === "/.well-known/oauth-protected-resource/mcp") {
413
+ handleProtectedResourceMetadata(res, port);
414
+ return true;
415
+ }
416
+ if (p === "/.well-known/oauth-authorization-server") {
417
+ handleAuthServerMetadata(res, port);
418
+ return true;
419
+ }
420
+ if (p === "/register") {
421
+ await handleRegister(req, res);
422
+ return true;
423
+ }
424
+ if (p === "/authorize") {
425
+ await handleAuthorize(req, res, url);
426
+ return true;
427
+ }
428
+ if (p === "/token") {
429
+ await handleToken(req, res);
430
+ return true;
431
+ }
432
+ return false;
433
+ }
434
+ export {
435
+ handleOAuthRoute,
436
+ verifyAccessToken
437
+ };