@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,731 @@
1
+ import {
2
+ MultiAgentOrchestrator
3
+ } from "./chunk-LXXBEI4A.js";
4
+ import {
5
+ createQuietRenderer,
6
+ createTerminalRenderer,
7
+ renderAgentEvents
8
+ } from "./chunk-YZFZDJWZ.js";
9
+ import {
10
+ checkDangerousPatterns,
11
+ hasCriticalPattern
12
+ } from "./chunk-CMCYL2JC.js";
13
+ import {
14
+ checkPathSafety,
15
+ checkReadPathSafety,
16
+ containsPathTraversal
17
+ } from "./chunk-NGVOA6ZQ.js";
18
+ import {
19
+ ContextManager,
20
+ agentLoop,
21
+ compactMessages,
22
+ createContextManager,
23
+ createDenialTrackingState,
24
+ estimateTokens,
25
+ getContextLimit,
26
+ needsCompaction,
27
+ recordDenial,
28
+ recordSuccess,
29
+ shouldFallbackToAsk
30
+ } from "./chunk-UAMWGUBX.js";
31
+ import {
32
+ ToolRegistry,
33
+ partitionTools,
34
+ zodToJsonSchema
35
+ } from "./chunk-JRLNE3T2.js";
36
+ import {
37
+ EMPLOYEE_PERMISSIONS,
38
+ checkPermission,
39
+ createPermissionsFromPreset,
40
+ createRestrictedPermissions
41
+ } from "./chunk-2O2UKMUE.js";
42
+ import {
43
+ PERMISSION_PRESETS,
44
+ evaluatePermission,
45
+ getPresetByRole,
46
+ matchInputPattern,
47
+ matchToolPattern
48
+ } from "./chunk-HF25XPZE.js";
49
+ import {
50
+ composeHooks,
51
+ createDefaultHooks
52
+ } from "./chunk-O377P7GM.js";
53
+ import {
54
+ StateBus,
55
+ orgBus
56
+ } from "./chunk-MP2AFCGL.js";
57
+ import {
58
+ __export
59
+ } from "./chunk-MLKGABMK.js";
60
+
61
+ // src/runtime/index.ts
62
+ var runtime_exports = {};
63
+ __export(runtime_exports, {
64
+ ContextManager: () => ContextManager,
65
+ EMPLOYEE_PERMISSIONS: () => EMPLOYEE_PERMISSIONS,
66
+ IPCServer: () => IPCServer,
67
+ MultiAgentOrchestrator: () => MultiAgentOrchestrator,
68
+ PERMISSION_PRESETS: () => PERMISSION_PRESETS,
69
+ SessionManager: () => SessionManager,
70
+ StateBus: () => StateBus,
71
+ ToolRegistry: () => ToolRegistry,
72
+ agentLoop: () => agentLoop,
73
+ checkDangerousPatterns: () => checkDangerousPatterns,
74
+ checkGitSafety: () => checkGitSafety,
75
+ checkPathSafety: () => checkPathSafety,
76
+ checkPermission: () => checkPermission,
77
+ checkReadPathSafety: () => checkReadPathSafety,
78
+ compactMessages: () => compactMessages,
79
+ composeHooks: () => composeHooks,
80
+ containsPathTraversal: () => containsPathTraversal,
81
+ createContextManager: () => createContextManager,
82
+ createDefaultHooks: () => createDefaultHooks,
83
+ createDenialTrackingState: () => createDenialTrackingState,
84
+ createPermissionsFromPreset: () => createPermissionsFromPreset,
85
+ createQuietRenderer: () => createQuietRenderer,
86
+ createRestrictedPermissions: () => createRestrictedPermissions,
87
+ createTerminalRenderer: () => createTerminalRenderer,
88
+ estimateTokens: () => estimateTokens,
89
+ evaluatePermission: () => evaluatePermission,
90
+ getContextLimit: () => getContextLimit,
91
+ getPresetByRole: () => getPresetByRole,
92
+ hasCriticalPattern: () => hasCriticalPattern,
93
+ matchInputPattern: () => matchInputPattern,
94
+ matchToolPattern: () => matchToolPattern,
95
+ needsCompaction: () => needsCompaction,
96
+ orgBus: () => orgBus,
97
+ partitionTools: () => partitionTools,
98
+ recordDenial: () => recordDenial,
99
+ recordSuccess: () => recordSuccess,
100
+ renderAgentEvents: () => renderAgentEvents,
101
+ shouldFallbackToAsk: () => shouldFallbackToAsk,
102
+ targetsMainBranch: () => targetsMainBranch,
103
+ zodToJsonSchema: () => zodToJsonSchema
104
+ });
105
+
106
+ // src/runtime/git-safety.ts
107
+ var GIT_DANGEROUS_PATTERNS = [
108
+ // Force push to main/master — critical (must be before general force push)
109
+ {
110
+ regex: /\bgit\s+push\s+.*(?:--force(?:-with-lease)?|-f)\b.*\b(main|master)\b/,
111
+ severity: "critical",
112
+ reason: "Force push to main/master \u2014 this can destroy shared history"
113
+ },
114
+ // Force push (any branch)
115
+ {
116
+ regex: /\bgit\s+push\s+.*--force(?:-with-lease)?\b/,
117
+ severity: "warning",
118
+ reason: "Force push can overwrite remote history"
119
+ },
120
+ {
121
+ regex: /\bgit\s+push\s+-f\b/,
122
+ severity: "warning",
123
+ reason: "Force push (-f) can overwrite remote history"
124
+ },
125
+ // Hard reset
126
+ {
127
+ regex: /\bgit\s+reset\s+--hard\b/,
128
+ severity: "warning",
129
+ reason: "Hard reset discards all uncommitted changes permanently"
130
+ },
131
+ // Clean with force
132
+ {
133
+ regex: /\bgit\s+clean\s+(?:-[a-zA-Z]*f|.*--force\b)/,
134
+ severity: "warning",
135
+ reason: "Git clean -f permanently removes untracked files"
136
+ },
137
+ // Delete branch with force
138
+ {
139
+ regex: /\bgit\s+branch\s+-D\b/,
140
+ severity: "warning",
141
+ reason: "Force delete branch (uppercase -D) skips merge check"
142
+ },
143
+ // Checkout . (discard all changes)
144
+ {
145
+ regex: /\bgit\s+checkout\s+\.\s*$/,
146
+ severity: "warning",
147
+ reason: "Discards all uncommitted changes in working directory"
148
+ },
149
+ // Restore . (discard all changes)
150
+ {
151
+ regex: /\bgit\s+restore\s+\.\s*$/,
152
+ severity: "warning",
153
+ reason: "Restores all files, discarding uncommitted changes"
154
+ },
155
+ // No-verify (skip hooks)
156
+ {
157
+ regex: /\bgit\s+(commit|push)\s+.*--no-verify\b/,
158
+ severity: "warning",
159
+ reason: "Skipping git hooks (--no-verify) bypasses safety checks"
160
+ },
161
+ // Rebase with drop
162
+ {
163
+ regex: /\bgit\s+rebase\s+-i\b/,
164
+ severity: "warning",
165
+ reason: "Interactive rebase can rewrite commit history"
166
+ },
167
+ // Amend published commits
168
+ {
169
+ regex: /\bgit\s+commit\s+.*--amend\b/,
170
+ severity: "warning",
171
+ reason: "Amending commits rewrites history \u2014 dangerous if already pushed"
172
+ }
173
+ ];
174
+ function checkGitSafety(command) {
175
+ for (const pattern of GIT_DANGEROUS_PATTERNS) {
176
+ if (pattern.regex.test(command)) {
177
+ return {
178
+ safe: false,
179
+ severity: pattern.severity,
180
+ reason: pattern.reason
181
+ };
182
+ }
183
+ }
184
+ return { safe: true, severity: "info" };
185
+ }
186
+ function targetsMainBranch(command) {
187
+ return /\b(main|master)\b/.test(command) && /\bgit\s+(push|rebase|reset)\b/.test(command);
188
+ }
189
+
190
+ // src/runtime/session-manager.ts
191
+ import { randomUUID as randomUUID2 } from "crypto";
192
+
193
+ // src/runtime/exe-hooks.ts
194
+ import { randomUUID } from "crypto";
195
+ function createExeOSHooks(config) {
196
+ let sessionRegistered = false;
197
+ return {
198
+ async onSessionStart(context) {
199
+ try {
200
+ const { initStore } = await import("./lib/store.js");
201
+ await initStore();
202
+ } catch (err) {
203
+ process.stderr.write(
204
+ `[exe-hooks] store init failed: ${err instanceof Error ? err.message : String(err)}
205
+ `
206
+ );
207
+ }
208
+ try {
209
+ const { listBehaviors } = await import("./behaviors-WIUTIJF6.js");
210
+ const behaviors = await listBehaviors(config.agentId, config.projectName, 12);
211
+ if (behaviors.length > 0) {
212
+ process.stderr.write(
213
+ `[exe-hooks] Loaded ${behaviors.length} behaviors for ${config.agentId}
214
+ `
215
+ );
216
+ }
217
+ } catch (err) {
218
+ process.stderr.write(
219
+ `[exe-hooks] behavior load failed: ${err instanceof Error ? err.message : String(err)}
220
+ `
221
+ );
222
+ }
223
+ try {
224
+ const { registerSession } = await import("./lib/session-registry.js");
225
+ registerSession({
226
+ windowName: `api-${config.agentId}-${Date.now()}`,
227
+ agentId: config.agentId,
228
+ projectDir: context.cwd,
229
+ parentExe: null,
230
+ pid: process.pid,
231
+ registeredAt: context.startedAt
232
+ });
233
+ sessionRegistered = true;
234
+ } catch (err) {
235
+ process.stderr.write(
236
+ `[exe-hooks] session register failed: ${err instanceof Error ? err.message : String(err)}
237
+ `
238
+ );
239
+ }
240
+ },
241
+ async afterToolUse(block, result, _context) {
242
+ if (block.type !== "tool_use") return;
243
+ const toolName = block.name ?? "unknown";
244
+ const ALLOWED_RE = /^(Bash|Edit|Write|Read|Glob|Grep|Agent|mcp__.*)$/;
245
+ if (!ALLOWED_RE.test(toolName)) return;
246
+ try {
247
+ const { extractSemanticText } = await import("./content-extractor-EYRVGD6O.js");
248
+ const { writeMemory } = await import("./lib/store.js");
249
+ const toolInput = block.input ?? {};
250
+ const toolResponse = result.isError ? { error: result.content } : { output: result.content };
251
+ const rawText = extractSemanticText(toolName, toolInput, toolResponse);
252
+ await writeMemory({
253
+ id: randomUUID(),
254
+ agent_id: config.agentId,
255
+ agent_role: "employee",
256
+ session_id: `api-${config.agentId}`,
257
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
258
+ tool_name: toolName,
259
+ project_name: config.projectName,
260
+ has_error: result.isError ?? false,
261
+ raw_text: rawText,
262
+ vector: null
263
+ });
264
+ } catch (err) {
265
+ process.stderr.write(
266
+ `[exe-hooks] memory ingest failed for ${toolName}: ${err instanceof Error ? err.message : String(err)}
267
+ `
268
+ );
269
+ }
270
+ },
271
+ async onSessionEnd(_context, summary) {
272
+ try {
273
+ const { writeMemory } = await import("./lib/store.js");
274
+ await writeMemory({
275
+ id: randomUUID(),
276
+ agent_id: config.agentId,
277
+ agent_role: "employee",
278
+ session_id: `api-${config.agentId}`,
279
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
280
+ tool_name: "SessionEnd",
281
+ project_name: config.projectName,
282
+ has_error: false,
283
+ raw_text: [
284
+ "CONTEXT CHECKPOINT [auto:session-end]",
285
+ `Agent: ${config.agentId}`,
286
+ `Project: ${config.projectName}`,
287
+ `Time: ${(/* @__PURE__ */ new Date()).toISOString()}`,
288
+ "",
289
+ "## Runtime Summary",
290
+ summary || "Session ended. No runtime summary was provided."
291
+ ].join("\n"),
292
+ vector: null,
293
+ importance: 8,
294
+ memory_type: "checkpoint"
295
+ });
296
+ } catch (err) {
297
+ process.stderr.write(
298
+ `[exe-hooks] session summary store failed: ${err instanceof Error ? err.message : String(err)}
299
+ `
300
+ );
301
+ }
302
+ if (sessionRegistered) {
303
+ try {
304
+ const { pruneStaleSessions } = await import("./lib/session-registry.js");
305
+ pruneStaleSessions();
306
+ } catch {
307
+ }
308
+ }
309
+ },
310
+ async onError(error, _context) {
311
+ try {
312
+ const { classifyError } = await import("./lib/error-detector.js");
313
+ const classification = classifyError(error.message);
314
+ process.stderr.write(
315
+ `[exe-hooks] Error (${classification}): ${error.message.slice(0, 100)}
316
+ `
317
+ );
318
+ } catch {
319
+ }
320
+ },
321
+ async onPostCompact(removedMessages, _injectedSummary) {
322
+ process.stderr.write(
323
+ `[exe-hooks] Post-compact: ${removedMessages} messages removed for ${config.agentId}
324
+ `
325
+ );
326
+ },
327
+ async onSubagentStop(_reason) {
328
+ try {
329
+ const { getClient } = await import("./lib/database.js");
330
+ const { sessionScopeFilter } = await import("./task-scope-YV2WPKRD.js");
331
+ const client = getClient();
332
+ const ehScope = sessionScopeFilter();
333
+ const tasks = await client.execute({
334
+ sql: `SELECT title, status FROM tasks
335
+ WHERE assigned_to = ? AND status IN ('open', 'in_progress')${ehScope.sql}
336
+ LIMIT 5`,
337
+ args: [config.agentId, ...ehScope.args]
338
+ });
339
+ if (tasks.rows.length > 0) {
340
+ const titles = tasks.rows.map((r) => `"${String(r.title)}" (${String(r.status)})`).join(", ");
341
+ return {
342
+ block: true,
343
+ message: `Cannot stop: ${tasks.rows.length} uncompleted task(s): ${titles}. Complete or mark blocked first.`
344
+ };
345
+ }
346
+ } catch {
347
+ }
348
+ return { block: false };
349
+ },
350
+ async onNotification(message) {
351
+ try {
352
+ const { getClient } = await import("./lib/database.js");
353
+ const client = getClient();
354
+ await client.execute({
355
+ sql: `INSERT OR IGNORE INTO notifications (id, type, source_agent, message, task_file, created_at, read)
356
+ VALUES (?, 'system', ?, ?, NULL, ?, 0)`,
357
+ args: [randomUUID(), config.agentId, message.slice(0, 500), (/* @__PURE__ */ new Date()).toISOString()]
358
+ });
359
+ } catch {
360
+ }
361
+ },
362
+ async onPermissionRequest(toolName) {
363
+ const readOnlyTools = /^(Read|Glob|Grep)$/;
364
+ if (readOnlyTools.test(toolName)) {
365
+ return { autoApprove: true };
366
+ }
367
+ return { autoApprove: false };
368
+ },
369
+ async onTaskAssigned(event) {
370
+ try {
371
+ const { writeMemory } = await import("./lib/store.js");
372
+ await writeMemory({
373
+ id: randomUUID(),
374
+ agent_id: config.agentId,
375
+ agent_role: "employee",
376
+ session_id: `api-${config.agentId}`,
377
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
378
+ tool_name: "TaskAssigned",
379
+ project_name: event.projectName,
380
+ has_error: false,
381
+ raw_text: `Task assigned: "${event.title}" [${event.priority}] by ${event.assignedBy}`,
382
+ vector: null
383
+ });
384
+ } catch (err) {
385
+ process.stderr.write(
386
+ `[exe-hooks] task-assigned memory failed: ${err instanceof Error ? err.message : String(err)}
387
+ `
388
+ );
389
+ }
390
+ },
391
+ async onReviewReceived(event) {
392
+ try {
393
+ const { writeMemory } = await import("./lib/store.js");
394
+ await writeMemory({
395
+ id: randomUUID(),
396
+ agent_id: config.agentId,
397
+ agent_role: "employee",
398
+ session_id: `api-${config.agentId}`,
399
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
400
+ tool_name: "ReviewReceived",
401
+ project_name: config.projectName,
402
+ has_error: false,
403
+ raw_text: `Review received for "${event.taskTitle}" from ${event.reviewer}: ${event.result}`,
404
+ vector: null
405
+ });
406
+ } catch (err) {
407
+ process.stderr.write(
408
+ `[exe-hooks] review-received memory failed: ${err instanceof Error ? err.message : String(err)}
409
+ `
410
+ );
411
+ }
412
+ },
413
+ async onContextPressure(event) {
414
+ process.stderr.write(
415
+ `[exe-hooks] Context pressure: ${event.percentUsed}% (${event.threshold}% threshold) for ${config.agentId}
416
+ `
417
+ );
418
+ if (event.threshold >= 90) {
419
+ try {
420
+ const { writeMemory, flushBatch } = await import("./lib/store.js");
421
+ const { getClient } = await import("./lib/database.js");
422
+ const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-YV2WPKRD.js");
423
+ const client = getClient();
424
+ const cpScope = cpScopeFilter();
425
+ const tasks = await client.execute({
426
+ sql: `SELECT title, status, task_file FROM tasks
427
+ WHERE assigned_to = ? AND status IN ('open', 'in_progress')${cpScope.sql}
428
+ ORDER BY priority ASC LIMIT 10`,
429
+ args: [config.agentId, ...cpScope.args]
430
+ });
431
+ if (tasks.rows.length > 0) {
432
+ const taskList = tasks.rows.map((r) => `- [${String(r.status)}] ${String(r.title)} (${String(r.task_file)})`).join("\n");
433
+ await writeMemory({
434
+ id: randomUUID(),
435
+ agent_id: config.agentId,
436
+ agent_role: "employee",
437
+ session_id: `api-${config.agentId}`,
438
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
439
+ tool_name: "auto-checkpoint",
440
+ project_name: config.projectName,
441
+ has_error: false,
442
+ raw_text: `CONTEXT CHECKPOINT [${event.percentUsed}% pressure]: Open tasks:
443
+ ${taskList}`,
444
+ vector: null
445
+ });
446
+ await flushBatch();
447
+ }
448
+ } catch {
449
+ }
450
+ }
451
+ },
452
+ async onCrossAgentMessage(event) {
453
+ process.stderr.write(
454
+ `[exe-hooks] Message from ${event.fromAgent}: ${event.message.slice(0, 100)}
455
+ `
456
+ );
457
+ try {
458
+ const { writeMemory } = await import("./lib/store.js");
459
+ await writeMemory({
460
+ id: randomUUID(),
461
+ agent_id: config.agentId,
462
+ agent_role: "employee",
463
+ session_id: `api-${config.agentId}`,
464
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
465
+ tool_name: "CrossAgentMessage",
466
+ project_name: config.projectName,
467
+ has_error: false,
468
+ raw_text: `Message from ${event.fromAgent}: ${event.message}`,
469
+ vector: null
470
+ });
471
+ } catch (err) {
472
+ process.stderr.write(
473
+ `[exe-hooks] cross-agent memory failed: ${err instanceof Error ? err.message : String(err)}
474
+ `
475
+ );
476
+ }
477
+ }
478
+ };
479
+ }
480
+
481
+ // src/runtime/session-manager.ts
482
+ var SessionManager = class {
483
+ sessions = /* @__PURE__ */ new Map();
484
+ eventHandlers = /* @__PURE__ */ new Set();
485
+ /** Start a new agent session for an employee */
486
+ startSession(employeeId, config) {
487
+ const sessionId = randomUUID2();
488
+ const abortController = new AbortController();
489
+ const session = {
490
+ info: {
491
+ sessionId,
492
+ employeeId,
493
+ model: config.model,
494
+ provider: config.provider.name,
495
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
496
+ status: "active",
497
+ messageCount: 0
498
+ },
499
+ config: { ...config, abortController },
500
+ history: [],
501
+ abortController,
502
+ processing: false
503
+ };
504
+ this.sessions.set(sessionId, session);
505
+ orgBus.emit({
506
+ type: "session_started",
507
+ sessionId,
508
+ employee: employeeId,
509
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
510
+ });
511
+ return sessionId;
512
+ }
513
+ /** Stop a session */
514
+ stopSession(sessionId) {
515
+ const session = this.sessions.get(sessionId);
516
+ if (!session) return;
517
+ session.abortController.abort();
518
+ session.info.status = "stopped";
519
+ orgBus.emit({
520
+ type: "session_ended",
521
+ sessionId,
522
+ employee: session.info.employeeId,
523
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
524
+ });
525
+ }
526
+ /** Send a message to an active session */
527
+ async sendMessage(sessionId, text) {
528
+ const session = this.sessions.get(sessionId);
529
+ if (!session || session.info.status !== "active") return;
530
+ if (session.processing) return;
531
+ session.processing = true;
532
+ session.info.messageCount++;
533
+ orgBus.emit({
534
+ type: "employee_status",
535
+ employee: session.info.employeeId,
536
+ status: "working",
537
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
538
+ });
539
+ try {
540
+ const events = agentLoop(text, session.history, session.config);
541
+ for await (const event of events) {
542
+ for (const handler of this.eventHandlers) {
543
+ try {
544
+ handler(sessionId, event);
545
+ } catch {
546
+ }
547
+ }
548
+ if (event.type === "text") {
549
+ }
550
+ }
551
+ } catch (err) {
552
+ for (const handler of this.eventHandlers) {
553
+ try {
554
+ handler(sessionId, {
555
+ type: "error",
556
+ error: err instanceof Error ? err : new Error(String(err))
557
+ });
558
+ } catch {
559
+ }
560
+ }
561
+ } finally {
562
+ session.processing = false;
563
+ orgBus.emit({
564
+ type: "employee_status",
565
+ employee: session.info.employeeId,
566
+ status: "idle",
567
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
568
+ });
569
+ }
570
+ session.history.push({ role: "user", content: text });
571
+ }
572
+ /** Get all active sessions */
573
+ getActiveSessions() {
574
+ return [...this.sessions.values()].filter((s) => s.info.status === "active").map((s) => ({ ...s.info }));
575
+ }
576
+ /** Get all sessions (including stopped) */
577
+ getAllSessions() {
578
+ return [...this.sessions.values()].map((s) => ({ ...s.info }));
579
+ }
580
+ /** Get a specific session */
581
+ getSession(sessionId) {
582
+ return this.sessions.get(sessionId)?.info;
583
+ }
584
+ /** Subscribe to events from all sessions */
585
+ onEvent(handler) {
586
+ this.eventHandlers.add(handler);
587
+ }
588
+ /** Unsubscribe */
589
+ offEvent(handler) {
590
+ this.eventHandlers.delete(handler);
591
+ }
592
+ /** Start a session with ExeOS hooks wired in */
593
+ startExeOSSession(employeeId, config, hookConfig) {
594
+ const exeHooks = createExeOSHooks(hookConfig);
595
+ const composedConfig = {
596
+ ...config,
597
+ hooks: composeHooks(exeHooks, config.hooks)
598
+ };
599
+ return this.startSession(employeeId, composedConfig);
600
+ }
601
+ /** Stop all sessions */
602
+ stopAll() {
603
+ for (const sessionId of this.sessions.keys()) {
604
+ this.stopSession(sessionId);
605
+ }
606
+ }
607
+ };
608
+
609
+ // src/runtime/ipc.ts
610
+ import { createServer } from "http";
611
+ import { WebSocketServer, WebSocket } from "ws";
612
+ var PERMISSION_TIMEOUT_MS = 6e4;
613
+ var IPCServer = class {
614
+ httpServer = null;
615
+ wss = null;
616
+ clients = /* @__PURE__ */ new Set();
617
+ commandHandler = null;
618
+ pendingPermissions = /* @__PURE__ */ new Map();
619
+ /** Start the WebSocket server */
620
+ async start(port) {
621
+ return new Promise((resolve, reject) => {
622
+ this.httpServer = createServer();
623
+ this.wss = new WebSocketServer({ server: this.httpServer });
624
+ this.wss.on("connection", (ws) => {
625
+ this.clients.add(ws);
626
+ ws.on("close", () => this.clients.delete(ws));
627
+ ws.on("message", (data) => {
628
+ try {
629
+ const cmd = JSON.parse(data.toString());
630
+ if (cmd.type === "permission_response") {
631
+ this.resolvePermission(cmd.toolCallId, cmd.decision);
632
+ return;
633
+ }
634
+ if (this.commandHandler) {
635
+ this.commandHandler(cmd, (resp) => {
636
+ if (ws.readyState === WebSocket.OPEN) {
637
+ ws.send(JSON.stringify(resp));
638
+ }
639
+ });
640
+ }
641
+ } catch {
642
+ if (ws.readyState === WebSocket.OPEN) {
643
+ ws.send(JSON.stringify({ type: "error", message: "Invalid command" }));
644
+ }
645
+ }
646
+ });
647
+ });
648
+ this.httpServer.listen(port, () => {
649
+ resolve();
650
+ });
651
+ this.httpServer.on("error", reject);
652
+ });
653
+ }
654
+ /** Stop the server */
655
+ async stop() {
656
+ for (const [, pending] of this.pendingPermissions) {
657
+ clearTimeout(pending.timer);
658
+ pending.resolve("deny");
659
+ }
660
+ this.pendingPermissions.clear();
661
+ for (const client of this.clients) {
662
+ client.close();
663
+ }
664
+ this.clients.clear();
665
+ if (this.wss) {
666
+ this.wss.close();
667
+ this.wss = null;
668
+ }
669
+ if (this.httpServer) {
670
+ await new Promise((resolve) => {
671
+ this.httpServer.close(() => resolve());
672
+ });
673
+ this.httpServer = null;
674
+ }
675
+ }
676
+ /** Broadcast an agent event to all connected clients */
677
+ broadcastEvent(sessionId, event) {
678
+ const message = JSON.stringify({ type: "event", sessionId, event });
679
+ for (const client of this.clients) {
680
+ if (client.readyState === WebSocket.OPEN) {
681
+ client.send(message);
682
+ }
683
+ }
684
+ }
685
+ /** Register a command handler */
686
+ onCommand(handler) {
687
+ this.commandHandler = handler;
688
+ }
689
+ /**
690
+ * Request permission from a connected client.
691
+ * Broadcasts a permission_request event and waits for a permission_response command.
692
+ * Auto-denies after 60s timeout if no response is received.
693
+ */
694
+ requestPermission(sessionId, req) {
695
+ return new Promise((resolve) => {
696
+ const timer = setTimeout(() => {
697
+ this.pendingPermissions.delete(req.id);
698
+ resolve("deny");
699
+ }, PERMISSION_TIMEOUT_MS);
700
+ this.pendingPermissions.set(req.id, { resolve, timer });
701
+ this.broadcastEvent(sessionId, {
702
+ type: "permission_request",
703
+ name: req.name,
704
+ id: req.id,
705
+ description: req.description,
706
+ filePath: req.filePath
707
+ });
708
+ });
709
+ }
710
+ /** Resolve a pending permission request with the user's decision */
711
+ resolvePermission(toolCallId, decision) {
712
+ const pending = this.pendingPermissions.get(toolCallId);
713
+ if (pending) {
714
+ clearTimeout(pending.timer);
715
+ this.pendingPermissions.delete(toolCallId);
716
+ pending.resolve(decision);
717
+ }
718
+ }
719
+ /** Get connected client count */
720
+ get clientCount() {
721
+ return this.clients.size;
722
+ }
723
+ };
724
+
725
+ export {
726
+ checkGitSafety,
727
+ targetsMainBranch,
728
+ SessionManager,
729
+ IPCServer,
730
+ runtime_exports
731
+ };