@askexenow/exe-os 0.9.227 → 0.9.229

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 (446) hide show
  1. package/dist/active-agent-GJDG4CAW.js +24 -0
  2. package/dist/active-agent-WOP3ZHLN.js +25 -0
  3. package/dist/agent-context-ZPDQOAD2.js +9 -0
  4. package/dist/agent-heartbeat-AWTVGE4C.js +60 -0
  5. package/dist/agent-loop-7UM2ENGU.js +10 -0
  6. package/dist/agentic-ontology-ASORFII6.js +25 -0
  7. package/dist/asana-JN2UF47A.js +129 -0
  8. package/dist/assets/ghostty.conf +83 -0
  9. package/dist/assets/statusline-command.sh +44 -0
  10. package/dist/assets/tmux.conf +56 -0
  11. package/dist/assets/wezterm.lua +68 -0
  12. package/dist/backfill-metadata-JRWUECUS.js +596 -0
  13. package/dist/background-jobs-VTOMOTNA.js +25 -0
  14. package/dist/bash-XA65M6T6.js +8 -0
  15. package/dist/behaviors-36T3O2DC.js +24 -0
  16. package/dist/bin/age-ontology-load.js +85 -0
  17. package/dist/bin/agentic-ontology-backfill.js +84 -0
  18. package/dist/bin/agentic-reflection-backfill.js +45 -0
  19. package/dist/bin/agentic-semantic-label.js +193 -0
  20. package/dist/bin/backfill-conversations.js +399 -0
  21. package/dist/bin/backfill-responses.js +227 -0
  22. package/dist/bin/backfill-vectors.js +149 -0
  23. package/dist/bin/bulk-sync-postgres.js +92 -0
  24. package/dist/bin/cc-doctor.js +51 -0
  25. package/dist/bin/cleanup-stale-review-tasks.js +139 -0
  26. package/dist/bin/cli.js +1076 -0
  27. package/dist/bin/customer-readiness.js +389 -0
  28. package/dist/bin/deferred-daemon-restart.js +123 -0
  29. package/dist/bin/exe-agent-config.js +87 -0
  30. package/dist/bin/exe-agent.js +190 -0
  31. package/dist/bin/exe-assign.js +93 -0
  32. package/dist/bin/exe-boot.js +1114 -0
  33. package/dist/bin/exe-call.js +127 -0
  34. package/dist/bin/exe-cloud.js +484 -0
  35. package/dist/bin/exe-dispatch.js +72 -0
  36. package/dist/bin/exe-doctor.js +48 -0
  37. package/dist/bin/exe-export-behaviors.js +48 -0
  38. package/dist/bin/exe-forget.js +204 -0
  39. package/dist/bin/exe-gateway.js +1137 -0
  40. package/dist/bin/exe-healthcheck.js +14 -0
  41. package/dist/bin/exe-heartbeat.js +233 -0
  42. package/dist/bin/exe-kill.js +126 -0
  43. package/dist/bin/exe-launch-agent.js +678 -0
  44. package/dist/bin/exe-new-employee.js +160 -0
  45. package/dist/bin/exe-pending-messages.js +60 -0
  46. package/dist/bin/exe-pending-notifications.js +107 -0
  47. package/dist/bin/exe-pending-reviews.js +81 -0
  48. package/dist/bin/exe-rename.js +219 -0
  49. package/dist/bin/exe-repo-drift.js +95 -0
  50. package/dist/bin/exe-review.js +251 -0
  51. package/dist/bin/exe-search.js +65 -0
  52. package/dist/bin/exe-session-cleanup.js +331 -0
  53. package/dist/bin/exe-settings.js +364 -0
  54. package/dist/bin/exe-start-codex.js +404 -0
  55. package/dist/bin/exe-start-opencode.js +233 -0
  56. package/dist/bin/exe-start.sh +194 -0
  57. package/dist/bin/exe-status.js +34 -0
  58. package/dist/bin/exe-support.js +17 -0
  59. package/dist/bin/exe-team.js +83 -0
  60. package/dist/bin/generate-hook-manifest.js +30 -0
  61. package/dist/bin/git-sweep.js +74 -0
  62. package/dist/bin/graph-backfill.js +78 -0
  63. package/dist/bin/graph-export.js +66 -0
  64. package/dist/bin/graph-layer-benchmark.js +113 -0
  65. package/dist/bin/import-history.js +84 -0
  66. package/dist/bin/install-launchd.js +41 -0
  67. package/dist/bin/install.js +422 -0
  68. package/dist/bin/intercom-check.js +137 -0
  69. package/dist/bin/list-providers.js +128 -0
  70. package/dist/bin/mcp-sessions.js +194 -0
  71. package/dist/bin/orchestration-metrics.js +61 -0
  72. package/dist/bin/postgres-agentic-reflection-backfill.js +123 -0
  73. package/dist/bin/postgres-agentic-semantic-backfill.js +126 -0
  74. package/dist/bin/pre-build-guard.js +98 -0
  75. package/dist/bin/pre-publish.js +224 -0
  76. package/dist/bin/registry-proxy.js +44 -0
  77. package/dist/bin/scan-tasks.js +265 -0
  78. package/dist/bin/setup.js +19 -0
  79. package/dist/bin/shard-migrate.js +162 -0
  80. package/dist/bin/stack-update.js +372 -0
  81. package/dist/bin/update.js +354 -0
  82. package/dist/bin/verify-stack.js +389 -0
  83. package/dist/bin/vps-backup.js +170 -0
  84. package/dist/bin/vps-health-gate.js +232 -0
  85. package/dist/branding-I2TDZFUH.js +97 -0
  86. package/dist/browser-sanitizer-MRSSEJZE.js +229 -0
  87. package/dist/browser-session-store-RF45DSJR.js +232 -0
  88. package/dist/capacity-monitor-HZPAFQZH.js +48 -0
  89. package/dist/catchup-brief-CDG4KD5Y.js +150 -0
  90. package/dist/chunk-26PUEPOY.js +290 -0
  91. package/dist/chunk-2VZ6SY2R.js +142 -0
  92. package/dist/chunk-36DAY227.js +297 -0
  93. package/dist/chunk-3A5BZETG.js +463 -0
  94. package/dist/chunk-3DQ3IPPO.js +50 -0
  95. package/dist/chunk-3JP3FY33.js +258 -0
  96. package/dist/chunk-3MK3R5E6.js +85 -0
  97. package/dist/chunk-46SQTBQW.js +207 -0
  98. package/dist/chunk-4JERP7NT.js +132 -0
  99. package/dist/chunk-557C2IGL.js +0 -0
  100. package/dist/chunk-5BS5ELMC.js +85 -0
  101. package/dist/chunk-5NFBE376.js +391 -0
  102. package/dist/chunk-6A7P74QV.js +53 -0
  103. package/dist/chunk-6KFICEAT.js +20 -0
  104. package/dist/chunk-6MP5NOOR.js +151 -0
  105. package/dist/chunk-6Y4B3QF6.js +19 -0
  106. package/dist/chunk-7BPKHR4O.js +171 -0
  107. package/dist/chunk-7DNX45WB.js +244 -0
  108. package/dist/chunk-7EZCYO76.js +128 -0
  109. package/dist/chunk-7NNXBDOO.js +541 -0
  110. package/dist/chunk-ADJXHBEU.js +667 -0
  111. package/dist/chunk-AHMUF6RO.js +147 -0
  112. package/dist/chunk-AJWFPKQS.js +573 -0
  113. package/dist/chunk-AVE2B4DQ.js +140 -0
  114. package/dist/chunk-AZSCW64F.js +190 -0
  115. package/dist/chunk-BZAQ4UG7.js +614 -0
  116. package/dist/chunk-CHCA3ZM2.js +167 -0
  117. package/dist/chunk-CHT3THVG.js +240 -0
  118. package/dist/chunk-CLGB3FGL.js +48 -0
  119. package/dist/chunk-CQDSTBKT.js +1919 -0
  120. package/dist/chunk-CTFKTUYN.js +627 -0
  121. package/dist/chunk-CVYC6DUW.js +78 -0
  122. package/dist/chunk-CX6GL3ZJ.js +274 -0
  123. package/dist/chunk-D4IVTUNN.js +377 -0
  124. package/dist/chunk-DGOGCPYU.js +390 -0
  125. package/dist/chunk-DKRTWILB.js +81 -0
  126. package/dist/chunk-DLXTKVBO.js +183 -0
  127. package/dist/chunk-E6ORBQHP.js +225 -0
  128. package/dist/chunk-ECGTESAP.js +236 -0
  129. package/dist/chunk-ECQBG62Y.js +363 -0
  130. package/dist/chunk-ECSNSHZ7.js +431 -0
  131. package/dist/chunk-EEAKFEEA.js +221 -0
  132. package/dist/chunk-EGWPJQRQ.js +159 -0
  133. package/dist/chunk-EHKIJPVX.js +30 -0
  134. package/dist/chunk-EIT6J37V.js +119 -0
  135. package/dist/chunk-EQSQ4HBW.js +9 -0
  136. package/dist/chunk-ETSREHYC.js +55 -0
  137. package/dist/chunk-F2GUJW5O.js +1090 -0
  138. package/dist/chunk-F7LU65PQ.js +33 -0
  139. package/dist/chunk-FF62UWIJ.js +90 -0
  140. package/dist/chunk-FIPU4BDF.js +123 -0
  141. package/dist/chunk-FLSASUV3.js +177 -0
  142. package/dist/chunk-FWFFZGSC.js +94 -0
  143. package/dist/chunk-FXU7JOXK.js +6 -0
  144. package/dist/chunk-G4LLKD4Z.js +147 -0
  145. package/dist/chunk-GFCQJZTO.js +1051 -0
  146. package/dist/chunk-GGV3PFUW.js +41 -0
  147. package/dist/chunk-GJV3WDWM.js +14 -0
  148. package/dist/chunk-GKM7RYN3.js +1020 -0
  149. package/dist/chunk-GNHN5HRQ.js +40 -0
  150. package/dist/chunk-GP6G6EQI.js +632 -0
  151. package/dist/chunk-GUMRIUI5.js +63 -0
  152. package/dist/chunk-GVP5U4WL.js +113 -0
  153. package/dist/chunk-HF25XPZE.js +83 -0
  154. package/dist/chunk-HFJNYSTQ.js +1088 -0
  155. package/dist/chunk-HO5SBL4B.js +97 -0
  156. package/dist/chunk-HOKOOBDL.js +52 -0
  157. package/dist/chunk-HQMEOIUJ.js +69 -0
  158. package/dist/chunk-HTCBLSIB.js +813 -0
  159. package/dist/chunk-HYZV25LY.js +34 -0
  160. package/dist/chunk-I2CDSGQW.js +280 -0
  161. package/dist/chunk-I7AW4237.js +251 -0
  162. package/dist/chunk-IKTMX6N7.js +495 -0
  163. package/dist/chunk-IQT43SDJ.js +357 -0
  164. package/dist/chunk-IW53DAYO.js +210 -0
  165. package/dist/chunk-JBKA7F5V.js +2017 -0
  166. package/dist/chunk-JJNXFW7M.js +330 -0
  167. package/dist/chunk-JKGAJAM7.js +214 -0
  168. package/dist/chunk-JQ6TLNIV.js +133 -0
  169. package/dist/chunk-JSH5MAMM.js +284 -0
  170. package/dist/chunk-KCUYRZSX.js +72 -0
  171. package/dist/chunk-KH5Y6RR4.js +360 -0
  172. package/dist/chunk-L24HYX62.js +498 -0
  173. package/dist/chunk-L3TB7CC3.js +170 -0
  174. package/dist/chunk-LHOIY5LQ.js +58 -0
  175. package/dist/chunk-LWVZLTMD.js +412 -0
  176. package/dist/chunk-LYH5HE24.js +73 -0
  177. package/dist/chunk-M37HYGAG.js +346 -0
  178. package/dist/chunk-MJXEOKIW.js +54 -0
  179. package/dist/chunk-MKVFPQH2.js +1051 -0
  180. package/dist/chunk-MLXJ5EZG.js +90 -0
  181. package/dist/chunk-MP2AFCGL.js +53 -0
  182. package/dist/chunk-MSCB4ACU.js +356 -0
  183. package/dist/chunk-MVW62NIZ.js +20 -0
  184. package/dist/chunk-MZIGUUDQ.js +42 -0
  185. package/dist/chunk-N5RRQOAC.js +134 -0
  186. package/dist/chunk-NFB4N53K.js +159 -0
  187. package/dist/chunk-NGP6LSV2.js +25 -0
  188. package/dist/chunk-NGVOA6ZQ.js +84 -0
  189. package/dist/chunk-NRFVWJHP.js +575 -0
  190. package/dist/chunk-NUVDSQNY.js +1345 -0
  191. package/dist/chunk-O377P7GM.js +100 -0
  192. package/dist/chunk-OE6SYHTC.js +157 -0
  193. package/dist/chunk-OHPRXEUA.js +75 -0
  194. package/dist/chunk-OI6MVDSY.js +33 -0
  195. package/dist/chunk-ONKIWA3R.js +249 -0
  196. package/dist/chunk-OPU3NYOO.js +55 -0
  197. package/dist/chunk-ORCCI2VV.js +140 -0
  198. package/dist/chunk-OSMMWGJ2.js +204 -0
  199. package/dist/chunk-OYNKIAVW.js +181 -0
  200. package/dist/chunk-PRKVT4KN.js +90 -0
  201. package/dist/chunk-PW2YH2ZR.js +403 -0
  202. package/dist/chunk-PWMMIGVQ.js +332 -0
  203. package/dist/chunk-Q3V7K4ME.js +149 -0
  204. package/dist/chunk-Q5GUJUDW.js +348 -0
  205. package/dist/chunk-Q7RGLXQO.js +574 -0
  206. package/dist/chunk-Q7XA3SQ4.js +13097 -0
  207. package/dist/chunk-QGGH7LOU.js +93 -0
  208. package/dist/chunk-QHIGMP2M.js +237 -0
  209. package/dist/chunk-QI4IXJN7.js +132 -0
  210. package/dist/chunk-R2E4TV5V.js +56 -0
  211. package/dist/chunk-R4WMF32C.js +81 -0
  212. package/dist/chunk-R5U7XKVJ.js +16 -0
  213. package/dist/chunk-RJT7H2KR.js +349 -0
  214. package/dist/chunk-RMPAMMYW.js +70 -0
  215. package/dist/chunk-RTXGUKY3.js +731 -0
  216. package/dist/chunk-SH45SJQW.js +0 -0
  217. package/dist/chunk-SUNYJ6YE.js +204 -0
  218. package/dist/chunk-SVXDCELZ.js +163 -0
  219. package/dist/chunk-TMEE7AT7.js +72 -0
  220. package/dist/chunk-TNTFEWU5.js +361 -0
  221. package/dist/chunk-TOQZO2XX.js +76 -0
  222. package/dist/chunk-UBMGUX6T.js +3753 -0
  223. package/dist/chunk-UJOSFVWG.js +3511 -0
  224. package/dist/chunk-UPSZ2VKV.js +197 -0
  225. package/dist/chunk-UV4ZHXUP.js +38 -0
  226. package/dist/chunk-UWISNP4U.js +1073 -0
  227. package/dist/chunk-V3QAAU2U.js +129 -0
  228. package/dist/chunk-V4TZI6EO.js +60 -0
  229. package/dist/chunk-W6TC6A73.js +77 -0
  230. package/dist/chunk-WA67SFFZ.js +227 -0
  231. package/dist/chunk-WWPX2LLP.js +262 -0
  232. package/dist/chunk-WZ2RVKRO.js +121 -0
  233. package/dist/chunk-X2Z5GT3V.js +118 -0
  234. package/dist/chunk-X3AVWFWW.js +294 -0
  235. package/dist/chunk-XEKO37NM.js +43 -0
  236. package/dist/chunk-YADYM2DE.js +42 -0
  237. package/dist/chunk-YCTCKUZE.js +128 -0
  238. package/dist/chunk-YGAAZN3E.js +47 -0
  239. package/dist/chunk-YKIPAQZG.js +333 -0
  240. package/dist/chunk-YSU7JB7H.js +0 -0
  241. package/dist/chunk-YZFZDJWZ.js +107 -0
  242. package/dist/chunk-YZKJLGWL.js +169 -0
  243. package/dist/chunk-Z3TT2SVJ.js +135 -0
  244. package/dist/chunk-Z3ZCLTP7.js +382 -0
  245. package/dist/chunk-ZVSG2KKG.js +106 -0
  246. package/dist/co-activation-AJZTQHI3.js +71 -0
  247. package/dist/co-occurrence-FGEJIMMV.js +73 -0
  248. package/dist/code-context-index-KHUYATRB.js +29 -0
  249. package/dist/content-extractor-CUJOBFBU.js +9 -0
  250. package/dist/conversation-entity-extractor-TW4W57K4.js +114 -0
  251. package/dist/conversation-wiki-populator-GNFRTS7X.js +105 -0
  252. package/dist/core-memory-R7QBLN4C.js +110 -0
  253. package/dist/crdt-sync-K25AKQAD.js +33 -0
  254. package/dist/crm-bridge-NG5WJMGF.js +19 -0
  255. package/dist/crm-webhook-3ODT32F7.js +10 -0
  256. package/dist/cto-delegation-gate-4XDMTK6H.js +205 -0
  257. package/dist/daemon-auth-WFQMMNSD.js +13 -0
  258. package/dist/daemon-orchestration-5I7RLXCP.js +133 -0
  259. package/dist/daemon-protocol-4FUHT5NH.js +17 -0
  260. package/dist/db-backup-MSQKO6M5.js +25 -0
  261. package/dist/devtools-J4QYYO7U.js +8 -0
  262. package/dist/discord-7UHIZNJ3.js +7 -0
  263. package/dist/dispatch-ack-RMVFHO4I.js +13 -0
  264. package/dist/dreaming-UL7T5ZXA.js +12 -0
  265. package/dist/email-T6PQUUY6.js +137 -0
  266. package/dist/entity-boost-7MB2IYAE.js +332 -0
  267. package/dist/exe-drift-2KHRPBUK.js +67 -0
  268. package/dist/exe-export-UZN6EFOR.js +72 -0
  269. package/dist/exe-import-OSM3U36A.js +75 -0
  270. package/dist/exe-key-OG35WPBA.js +573 -0
  271. package/dist/exe-org-JRBBON5H.js +73 -0
  272. package/dist/exe-snapshot-7TQIN7XI.js +145 -0
  273. package/dist/factory-UQSRMKJW.js +67 -0
  274. package/dist/fast-db-init-4VXDSFUY.js +7 -0
  275. package/dist/file-edit-YORRFENG.js +8 -0
  276. package/dist/file-read-RMQFDE5L.js +8 -0
  277. package/dist/file-write-VO4MQW5Y.js +8 -0
  278. package/dist/founder-context-3N6BMG7B.js +96 -0
  279. package/dist/gateway/index.js +148 -0
  280. package/dist/gateway-client-V7NH35Q2.js +11 -0
  281. package/dist/git-staleness-JW57ZGEJ.js +109 -0
  282. package/dist/git-task-sweep-HYAPIM44.js +39 -0
  283. package/dist/glob-2LXRC3F5.js +7 -0
  284. package/dist/global-procedures-NY3W7L5Q.js +19 -0
  285. package/dist/graph-auto-extract-5GZ34NXS.js +161 -0
  286. package/dist/graph-query-YZ4RZEIL.js +26 -0
  287. package/dist/graph-rag-S5SBJW5J.js +29 -0
  288. package/dist/grep-OY7KCRLQ.js +7 -0
  289. package/dist/hook-integrity-OKSYTGVP.js +89 -0
  290. package/dist/hooks/bug-report-worker.js +179 -0
  291. package/dist/hooks/codex-stop-task-finalizer.js +258 -0
  292. package/dist/hooks/commit-complete.js +162 -0
  293. package/dist/hooks/error-recall.js +129 -0
  294. package/dist/hooks/exe-heartbeat-hook.js +78 -0
  295. package/dist/hooks/ingest-worker.js +51 -0
  296. package/dist/hooks/ingest.js +491 -0
  297. package/dist/hooks/instructions-loaded.js +119 -0
  298. package/dist/hooks/manifest.json +25 -0
  299. package/dist/hooks/notification.js +67 -0
  300. package/dist/hooks/post-compact.js +138 -0
  301. package/dist/hooks/post-tool-combined.js +152 -0
  302. package/dist/hooks/pre-compact.js +159 -0
  303. package/dist/hooks/pre-tool-use.js +512 -0
  304. package/dist/hooks/prompt-submit.js +699 -0
  305. package/dist/hooks/session-end.js +482 -0
  306. package/dist/hooks/session-start.js +362 -0
  307. package/dist/hooks/stop.js +332 -0
  308. package/dist/hooks/subagent-stop.js +85 -0
  309. package/dist/hooks/summary-worker.js +298 -0
  310. package/dist/hooks-RPTZV5KX.js +9 -0
  311. package/dist/imessage-CE5USLTI.js +7 -0
  312. package/dist/index.js +60 -0
  313. package/dist/installer-GMIVB2JS.js +341 -0
  314. package/dist/installer-OBYQ6O3C.js +295 -0
  315. package/dist/installer-UAMA6ZVH.js +37 -0
  316. package/dist/intercom-queue-USIXVVJQ.js +17 -0
  317. package/dist/key-backup-status-TVFMMWTT.js +39 -0
  318. package/dist/keyword-extractor-OGQRRVTB.js +11 -0
  319. package/dist/lib/agent-config.js +30 -0
  320. package/dist/lib/cloud-sync.js +103 -0
  321. package/dist/lib/cloudflare-dns.js +13 -0
  322. package/dist/lib/config.js +32 -0
  323. package/dist/lib/consolidation.js +38 -0
  324. package/dist/lib/crypto.js +13 -0
  325. package/dist/lib/database.js +31 -0
  326. package/dist/lib/db-daemon-client.js +141 -0
  327. package/dist/lib/db.js +31 -0
  328. package/dist/lib/device-registry.js +70 -0
  329. package/dist/lib/embed-worker.js +165 -0
  330. package/dist/lib/embedder.js +19 -0
  331. package/dist/lib/employee-templates.js +34 -0
  332. package/dist/lib/employees.js +63 -0
  333. package/dist/lib/error-detector.js +16 -0
  334. package/dist/lib/exe-daemon-client.js +25 -0
  335. package/dist/lib/exe-daemon.js +4454 -0
  336. package/dist/lib/file-grep.js +242 -0
  337. package/dist/lib/hybrid-search.js +28 -0
  338. package/dist/lib/identity-templates.js +650 -0
  339. package/dist/lib/identity.js +19 -0
  340. package/dist/lib/keychain.js +17 -0
  341. package/dist/lib/license.js +35 -0
  342. package/dist/lib/messaging.js +59 -0
  343. package/dist/lib/post-tool-memory.js +13 -0
  344. package/dist/lib/registry-proxy.js +15 -0
  345. package/dist/lib/reminders.js +16 -0
  346. package/dist/lib/runtime-table.js +9 -0
  347. package/dist/lib/schedules.js +24 -0
  348. package/dist/lib/session-registry.js +21 -0
  349. package/dist/lib/session-wrappers.js +7 -0
  350. package/dist/lib/skill-learning.js +29 -0
  351. package/dist/lib/status-brief.js +7 -0
  352. package/dist/lib/store.js +43 -0
  353. package/dist/lib/task-router.js +22 -0
  354. package/dist/lib/tasks.js +66 -0
  355. package/dist/lib/tmux-routing.js +70 -0
  356. package/dist/lib/tmux-status.js +29 -0
  357. package/dist/lib/tmux-transport.js +7 -0
  358. package/dist/lib/token-spend.js +12 -0
  359. package/dist/lib/transport.js +10 -0
  360. package/dist/lib/ws-auth.js +11 -0
  361. package/dist/lib/ws-client.js +190 -0
  362. package/dist/license-gate-7QVCYARF.js +14 -0
  363. package/dist/mcp/register-tools.js +102 -0
  364. package/dist/mcp/server.js +370 -0
  365. package/dist/mcp/tools/complete-reminder.js +13 -0
  366. package/dist/mcp/tools/create-reminder.js +13 -0
  367. package/dist/mcp/tools/create-task.js +34 -0
  368. package/dist/mcp/tools/deactivate-behavior.js +16 -0
  369. package/dist/mcp/tools/list-reminders.js +13 -0
  370. package/dist/mcp/tools/list-tasks.js +33 -0
  371. package/dist/mcp/tools/send-message.js +33 -0
  372. package/dist/mcp/tools/update-task.js +32 -0
  373. package/dist/mcp-diagnostics-5T5OZ52S.js +200 -0
  374. package/dist/mcp-disconnect-tracker-VINUVEZJ.js +79 -0
  375. package/dist/mcp-http-config-YPF4WGU5.js +26 -0
  376. package/dist/memory-cards-XHZEOX7Q.js +173 -0
  377. package/dist/memory-graph-extractor-J3K7B4GC.js +16 -0
  378. package/dist/memory-poisoning-defense-I76FGNHK.js +224 -0
  379. package/dist/memory-queue-WEVFXPZO.js +19 -0
  380. package/dist/memory-queue-client-5XBHYAQR.js +15 -0
  381. package/dist/memory-reflection-YJGI6IDI.js +237 -0
  382. package/dist/message-queue-client-FUKX43JD.js +92 -0
  383. package/dist/notifications-H4F77BYT.js +44 -0
  384. package/dist/oauth-server-CCZPDTZJ.js +437 -0
  385. package/dist/orchestration-events-LXVPJL6S.js +24 -0
  386. package/dist/orchestration-phase-HXRKMZXM.js +23 -0
  387. package/dist/orchestrator-HXUZ6LYM.js +32 -0
  388. package/dist/permission-presets-UPVLJWZD.js +25 -0
  389. package/dist/permissions-C4EMHPDD.js +14 -0
  390. package/dist/pg-ssl-GD3332YS.js +7 -0
  391. package/dist/pipeline-router-QRJQWMFF.js +12 -0
  392. package/dist/plan-limits-NFQVRHS5.js +25 -0
  393. package/dist/prediction-log-C2BD3AHR.js +120 -0
  394. package/dist/preferences-5ARPMYE7.js +10 -0
  395. package/dist/preflight-TZOGLBZU.js +287 -0
  396. package/dist/project-boot-JIGOSGCN.js +254 -0
  397. package/dist/project-name-4SKOH2UO.js +10 -0
  398. package/dist/projection-worker-JZQTL4NU.js +877 -0
  399. package/dist/push-notifications-3GNJ5SZS.js +15 -0
  400. package/dist/reranker-U6DEAT4S.js +19 -0
  401. package/dist/review-gate-I66GDXNR.js +120 -0
  402. package/dist/review-polling-W2S3XAAU.js +123 -0
  403. package/dist/runtime/index.js +129 -0
  404. package/dist/self-query-router-QMK5ZSZR.js +188 -0
  405. package/dist/session-events-MNWHGZY5.js +35 -0
  406. package/dist/session-kill-telemetry-JHSI7D3F.js +28 -0
  407. package/dist/session-scope-SMT225X3.js +85 -0
  408. package/dist/setup-wizard-RBUTEZB2.js +12 -0
  409. package/dist/shard-manager-ON2WWCRM.js +29 -0
  410. package/dist/signal-KF2LIO7Y.js +7 -0
  411. package/dist/signal-paths-5ZTWCBUX.js +19 -0
  412. package/dist/skill-refinement-LKJHUW2U.js +156 -0
  413. package/dist/slack-JRDUD5Z7.js +7 -0
  414. package/dist/stack-update-ZIMV4OEQ.js +50 -0
  415. package/dist/steward-gate-6IKH335D.js +12 -0
  416. package/dist/support-outbox-HIJVUDA2.js +206 -0
  417. package/dist/task-enforcement-UIEWTA6H.js +292 -0
  418. package/dist/task-scanner-5OQBNC2N.js +11 -0
  419. package/dist/task-scope-DNQURKOQ.js +34 -0
  420. package/dist/tasks-crud-CLAYZZ4O.js +76 -0
  421. package/dist/tasks-review-OHR2P4QE.js +46 -0
  422. package/dist/telegram-COCYUCT7.js +7 -0
  423. package/dist/telemetry-QKWQKAUC.js +9 -0
  424. package/dist/telemetry-upload-APVDPCEV.js +609 -0
  425. package/dist/token-budget-6IQNYKLR.js +83 -0
  426. package/dist/tool-capability-index-UUNF7VPA.js +10 -0
  427. package/dist/tool-gates-6A6LE4DZ.js +14 -0
  428. package/dist/tool-gates-RNWEH5IK.js +13 -0
  429. package/dist/tool-registry-KL24CAFR.js +11 -0
  430. package/dist/tool-telemetry-SJSIL5M5.js +17 -0
  431. package/dist/tui/App.js +10223 -0
  432. package/dist/tui-data-L6XG4Z52.js +161 -0
  433. package/dist/typed-messages-53Q7L3LB.js +17 -0
  434. package/dist/update-check-5IL5I3E2.js +11 -0
  435. package/dist/webhook-VXGIH7PN.js +96 -0
  436. package/dist/webhook-pipe-4WPFGGFD.js +114 -0
  437. package/dist/whatsapp-PSMKCDS7.js +9 -0
  438. package/dist/whatsapp-accounts-4OKWFRWL.js +15 -0
  439. package/dist/whatsapp-config-ZG5LX4O4.js +125 -0
  440. package/dist/wiki-acl-XCT6QQGP.js +111 -0
  441. package/dist/wiki-client-KE622HKY.js +157 -0
  442. package/dist/worker-gate-GFKXZ6V5.js +21 -0
  443. package/dist/workflow-engine-6HTKI2ZE.js +28 -0
  444. package/dist/working-memory-Z3EB3FW6.js +77 -0
  445. package/dist/worktree-BO7QQ32T.js +25 -0
  446. package/package.json +1 -1
@@ -0,0 +1,33 @@
1
+ // src/lib/secret-redaction.ts
2
+ var SECRET_PATTERNS = [
3
+ { name: "openai_key", pattern: /\bsk-[A-Za-z0-9_-]{20,}\b/g },
4
+ { name: "anthropic_key", pattern: /\bsk-ant-[A-Za-z0-9_-]{20,}\b/g },
5
+ { name: "exe_license_key", pattern: /\bexe_sk_[A-Za-z0-9_-]{8,}\b/g },
6
+ { name: "aws_access_key", pattern: /\bAKIA[0-9A-Z]{16}\b/g },
7
+ { name: "github_token", pattern: /\bgh[pousr]_[A-Za-z0-9_]{30,}\b/g },
8
+ { name: "bearer_token", pattern: /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}\b/gi },
9
+ { name: "jwt", pattern: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g },
10
+ { name: "private_key", pattern: /-----BEGIN (?:OPENSSH|RSA|DSA|EC|PGP)? ?PRIVATE KEY-----[\s\S]*?-----END (?:OPENSSH|RSA|DSA|EC|PGP)? ?PRIVATE KEY-----/g },
11
+ { name: "db_url_password", pattern: /\b(postgres(?:ql)?|mysql|mongodb|redis):\/\/([^:\s/@]+):([^@\s]+)@/gi },
12
+ { name: "assignment_secret", pattern: /\b(api[_-]?key|secret|token|password|passwd|pwd|private[_-]?key|access[_-]?key)\s*[:=]\s*(['\"]?)[^\s'"]{8,}\2/gi },
13
+ { name: "env_secret", pattern: /\b[A-Z0-9_]*(?:API_KEY|SECRET|TOKEN|PASSWORD|PASSWD|PRIVATE_KEY|ACCESS_KEY)[A-Z0-9_]*\s*=\s*['\"]?[^'"\s]{8,}/g },
14
+ { name: "recovery_phrase", pattern: /\b(?:[a-z]{3,12}\s+){23}[a-z]{3,12}\b/gi }
15
+ ];
16
+ function redactSecrets(input) {
17
+ let text = input;
18
+ let redactedCount = 0;
19
+ for (const { name, pattern } of SECRET_PATTERNS) {
20
+ text = text.replace(pattern, (_match, ...args) => {
21
+ redactedCount++;
22
+ if (name === "db_url_password" && typeof args[0] === "string" && typeof args[1] === "string") {
23
+ return `${args[0]}://${args[1]}:[REDACTED:${name}]@`;
24
+ }
25
+ return `[REDACTED:${name}]`;
26
+ });
27
+ }
28
+ return { text, redactedCount };
29
+ }
30
+
31
+ export {
32
+ redactSecrets
33
+ };
@@ -0,0 +1,90 @@
1
+ import {
2
+ loadEmployeesSync
3
+ } from "./chunk-UJOSFVWG.js";
4
+
5
+ // src/adapters/mcp-http-config.ts
6
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
7
+ import { randomBytes } from "crypto";
8
+ import { execFileSync } from "child_process";
9
+ import path from "path";
10
+ import os from "os";
11
+ var DEFAULT_MCP_HTTP_PORT = "48739";
12
+ function resolveDefaultAgentId() {
13
+ if (process.env.AGENT_ID && process.env.AGENT_ID !== "default") return process.env.AGENT_ID;
14
+ try {
15
+ const coo = loadEmployeesSync().find((e) => e.role === "COO");
16
+ if (coo) return coo.name;
17
+ } catch {
18
+ }
19
+ return "exe";
20
+ }
21
+ var DEFAULT_MCP_HTTP_AGENT_ID = resolveDefaultAgentId();
22
+ var DEFAULT_MCP_HTTP_AGENT_ROLE = "COO";
23
+ function mcpHttpPort() {
24
+ return process.env.EXE_MCP_PORT || DEFAULT_MCP_HTTP_PORT;
25
+ }
26
+ function mcpHttpUrl() {
27
+ return `http://127.0.0.1:${mcpHttpPort()}/mcp`;
28
+ }
29
+ function readOrCreateDaemonToken(homeDir = os.homedir()) {
30
+ const exeDir = path.join(homeDir, ".exe-os");
31
+ const tokenPath = path.join(exeDir, "exed.token");
32
+ if (existsSync(tokenPath)) {
33
+ try {
34
+ const token2 = readFileSync(tokenPath, "utf-8").trim();
35
+ if (/^[a-f0-9]{64}$/i.test(token2)) return token2;
36
+ } catch {
37
+ }
38
+ }
39
+ const token = randomBytes(32).toString("hex");
40
+ mkdirSync(exeDir, { recursive: true });
41
+ writeFileSync(tokenPath, `${token}
42
+ `, "utf-8");
43
+ try {
44
+ chmodSync(tokenPath, 384);
45
+ } catch {
46
+ }
47
+ return token;
48
+ }
49
+ function buildMcpHttpHeaders(homeDir = os.homedir(), opts = {}) {
50
+ const agentId = opts.useShellPlaceholders ? "${AGENT_ID:-exe}" : opts.agentId ?? DEFAULT_MCP_HTTP_AGENT_ID;
51
+ const agentRole = opts.useShellPlaceholders ? "${AGENT_ROLE:-COO}" : opts.agentRole ?? DEFAULT_MCP_HTTP_AGENT_ROLE;
52
+ let sessionName = process.env.EXE_SESSION_NAME ?? "";
53
+ if (!sessionName && !opts.useShellPlaceholders) {
54
+ try {
55
+ const tmuxSession = execFileSync("tmux", ["display-message", "-p", "#{session_name}"], {
56
+ encoding: "utf8",
57
+ timeout: 2e3
58
+ }).trim();
59
+ if (tmuxSession) sessionName = tmuxSession;
60
+ } catch {
61
+ }
62
+ }
63
+ const headers = {
64
+ Authorization: `Bearer ${readOrCreateDaemonToken(homeDir)}`,
65
+ "X-Agent-Id": agentId,
66
+ "X-Agent-Role": agentRole
67
+ };
68
+ if (sessionName && !opts.useShellPlaceholders) headers["X-Exe-Session"] = sessionName;
69
+ return headers;
70
+ }
71
+ function buildClaudeHttpMcpEntry(homeDir = os.homedir()) {
72
+ const entry = {
73
+ type: "http",
74
+ url: mcpHttpUrl(),
75
+ headers: buildMcpHttpHeaders(homeDir, { useShellPlaceholders: true })
76
+ };
77
+ delete entry.headers["X-Exe-Session"];
78
+ return entry;
79
+ }
80
+
81
+ export {
82
+ DEFAULT_MCP_HTTP_PORT,
83
+ DEFAULT_MCP_HTTP_AGENT_ID,
84
+ DEFAULT_MCP_HTTP_AGENT_ROLE,
85
+ mcpHttpPort,
86
+ mcpHttpUrl,
87
+ readOrCreateDaemonToken,
88
+ buildMcpHttpHeaders,
89
+ buildClaudeHttpMcpEntry
90
+ };
@@ -0,0 +1,123 @@
1
+ import {
2
+ getClient
3
+ } from "./chunk-UJOSFVWG.js";
4
+
5
+ // src/lib/session-kill-telemetry.ts
6
+ import crypto from "crypto";
7
+ import { appendFileSync } from "fs";
8
+ import path from "path";
9
+ import os from "os";
10
+ var KILL_FILE_LOG = path.join(os.homedir(), ".exe-os", "logs", "session-kills.jsonl");
11
+ var TOKENS_PER_IDLE_MINUTE = 50;
12
+ async function recordSessionKill(input) {
13
+ const killedAt = (/* @__PURE__ */ new Date()).toISOString();
14
+ const id = crypto.randomUUID();
15
+ try {
16
+ const logEntry = JSON.stringify({
17
+ id,
18
+ timestamp: killedAt,
19
+ session: input.sessionName,
20
+ agent: input.agentId,
21
+ reason: input.reason,
22
+ ticksIdle: input.ticksIdle ?? null,
23
+ tokensSaved: input.estimatedTokensSaved ?? null
24
+ });
25
+ appendFileSync(KILL_FILE_LOG, logEntry + "\n");
26
+ } catch {
27
+ process.stderr.write(
28
+ `[session-kill-telemetry] file log write failed for ${input.sessionName}
29
+ `
30
+ );
31
+ }
32
+ try {
33
+ const client = getClient();
34
+ await client.execute({
35
+ sql: `INSERT INTO session_kills
36
+ (id, session_name, agent_id, killed_at, reason,
37
+ ticks_idle, estimated_tokens_saved)
38
+ VALUES (?, ?, ?, ?, ?, ?, ?)`,
39
+ args: [
40
+ id,
41
+ input.sessionName,
42
+ input.agentId,
43
+ killedAt,
44
+ input.reason,
45
+ input.ticksIdle ?? null,
46
+ input.estimatedTokensSaved ?? null
47
+ ]
48
+ });
49
+ } catch (err) {
50
+ process.stderr.write(
51
+ `[session-kill-telemetry] DB write failed: ${err instanceof Error ? err.message : String(err)}
52
+ `
53
+ );
54
+ }
55
+ }
56
+ async function countKillsSince(sinceISO) {
57
+ try {
58
+ const client = getClient();
59
+ const result = await client.execute({
60
+ sql: `SELECT COUNT(*) AS n FROM session_kills WHERE killed_at >= ?`,
61
+ args: [sinceISO]
62
+ });
63
+ const row = result.rows[0];
64
+ return row ? Number(row.n) : 0;
65
+ } catch {
66
+ return 0;
67
+ }
68
+ }
69
+ var IDLE_KILL_STREAK_META_KEY = "idle_kill_suspect_streak";
70
+ var IDLE_KILL_SUSPECT_DAY_THRESHOLD = 3;
71
+ var IDLE_KILL_MIN_LIVE_SESSIONS = 5;
72
+ function parseStreakState(raw) {
73
+ if (!raw) return { lastDate: null, streak: 0 };
74
+ try {
75
+ const parsed = JSON.parse(raw);
76
+ return {
77
+ lastDate: typeof parsed.lastDate === "string" ? parsed.lastDate : null,
78
+ streak: typeof parsed.streak === "number" ? parsed.streak : 0
79
+ };
80
+ } catch {
81
+ return { lastDate: null, streak: 0 };
82
+ }
83
+ }
84
+ function nextStreakState(prev, qualifiesToday, todayDate) {
85
+ if (!qualifiesToday) return { lastDate: todayDate, streak: 0 };
86
+ if (prev.lastDate === todayDate) return prev;
87
+ return { lastDate: todayDate, streak: prev.streak + 1 };
88
+ }
89
+ function computeIdleKillSuspectStreak(prev, killsToday, liveSessions, todayDate) {
90
+ const qualifies = killsToday === 0 && liveSessions >= IDLE_KILL_MIN_LIVE_SESSIONS;
91
+ const state = nextStreakState(prev, qualifies, todayDate);
92
+ return {
93
+ state,
94
+ suspect: state.streak >= IDLE_KILL_SUSPECT_DAY_THRESHOLD
95
+ };
96
+ }
97
+ async function sumTokensSavedSince(sinceISO) {
98
+ try {
99
+ const client = getClient();
100
+ const result = await client.execute({
101
+ sql: `SELECT COALESCE(SUM(estimated_tokens_saved), 0) AS total
102
+ FROM session_kills
103
+ WHERE killed_at >= ?`,
104
+ args: [sinceISO]
105
+ });
106
+ const row = result.rows[0];
107
+ return row ? Number(row.total) : 0;
108
+ } catch {
109
+ return 0;
110
+ }
111
+ }
112
+
113
+ export {
114
+ TOKENS_PER_IDLE_MINUTE,
115
+ recordSessionKill,
116
+ countKillsSince,
117
+ IDLE_KILL_STREAK_META_KEY,
118
+ IDLE_KILL_SUSPECT_DAY_THRESHOLD,
119
+ IDLE_KILL_MIN_LIVE_SESSIONS,
120
+ parseStreakState,
121
+ computeIdleKillSuspectStreak,
122
+ sumTokensSavedSince
123
+ };
@@ -0,0 +1,177 @@
1
+ // src/gateway/adapters/imessage.ts
2
+ import { execFile } from "child_process";
3
+ import { promisify } from "util";
4
+ import os from "os";
5
+ import path from "path";
6
+ var execFileAsync = promisify(execFile);
7
+ var POLL_INTERVAL_MS = 5e3;
8
+ var MESSAGES_DB_PATH = path.join(
9
+ process.env.HOME ?? os.homedir(),
10
+ "Library/Messages/chat.db"
11
+ );
12
+ var IMessageAdapter = class {
13
+ platform = "imessage";
14
+ messageHandler = null;
15
+ connected = false;
16
+ pollTimer = null;
17
+ lastMessageRowId = 0;
18
+ async connect(_config) {
19
+ if (process.platform !== "darwin") {
20
+ throw new Error("iMessage adapter is macOS only");
21
+ }
22
+ try {
23
+ await execFileAsync("osascript", [
24
+ "-e",
25
+ 'tell application "Messages" to get name'
26
+ ]);
27
+ } catch (err) {
28
+ throw new Error(
29
+ `iMessage: cannot access Messages.app \u2014 grant Full Disk Access. ${err instanceof Error ? err.message : ""}`
30
+ );
31
+ }
32
+ try {
33
+ const { createClient } = await import("@libsql/client");
34
+ const db = createClient({ url: `file:${MESSAGES_DB_PATH}` });
35
+ const result = await db.execute("SELECT MAX(ROWID) as max_id FROM message");
36
+ this.lastMessageRowId = Number(result.rows[0]?.max_id) || 0;
37
+ db.close();
38
+ } catch {
39
+ }
40
+ this.connected = true;
41
+ console.log("[imessage] Connected via AppleScript bridge");
42
+ this.pollTimer = setInterval(() => {
43
+ void this.pollMessages();
44
+ }, POLL_INTERVAL_MS);
45
+ }
46
+ async disconnect() {
47
+ if (this.pollTimer) {
48
+ clearInterval(this.pollTimer);
49
+ this.pollTimer = null;
50
+ }
51
+ this.connected = false;
52
+ }
53
+ onMessage(handler) {
54
+ this.messageHandler = handler;
55
+ }
56
+ async sendText(channelId, text, _options) {
57
+ if (!this.connected) throw new Error("iMessage not connected");
58
+ const sanitizeForAppleScript = (s) => s.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, "").replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\r?\n/g, "\\n");
59
+ const escapedText = sanitizeForAppleScript(text);
60
+ const escapedId = sanitizeForAppleScript(channelId);
61
+ if (!/^[+\d@.\w-]+$/.test(channelId)) {
62
+ throw new Error(`iMessage: invalid channelId format: ${channelId.slice(0, 50)}`);
63
+ }
64
+ const script = `
65
+ tell application "Messages"
66
+ set targetService to 1st service whose service type = iMessage
67
+ set targetBuddy to buddy "${escapedId}" of targetService
68
+ send "${escapedText}" to targetBuddy
69
+ end tell
70
+ `;
71
+ try {
72
+ await execFileAsync("osascript", ["-e", script]);
73
+ } catch (err) {
74
+ throw new Error(
75
+ `iMessage send failed: ${err instanceof Error ? err.message : String(err)}`
76
+ );
77
+ }
78
+ }
79
+ async sendTyping(_channelId) {
80
+ }
81
+ async healthCheck() {
82
+ if (process.platform !== "darwin") return { connected: false };
83
+ const start = Date.now();
84
+ try {
85
+ await execFileAsync("osascript", [
86
+ "-e",
87
+ 'tell application "Messages" to get name'
88
+ ]);
89
+ return { connected: true, latencyMs: Date.now() - start };
90
+ } catch {
91
+ return { connected: false };
92
+ }
93
+ }
94
+ /** Inject a message payload from webhook server */
95
+ async injectMessage(rawPayload) {
96
+ if (!this.messageHandler) return;
97
+ const msg = rawPayload;
98
+ if (msg.is_from_me) return;
99
+ const senderId = msg.handle_id ?? msg.sender ?? msg.from ?? "";
100
+ const isGroup = msg.is_group ?? !!msg.group_name;
101
+ const channelId = msg.chat_id != null ? String(msg.chat_id) : senderId;
102
+ const normalized = {
103
+ messageId: msg.guid ?? msg.id ?? String(Date.now()),
104
+ platform: "imessage",
105
+ senderId,
106
+ senderPhone: senderId.startsWith("+") ? senderId : void 0,
107
+ senderEmail: senderId.includes("@") ? senderId : void 0,
108
+ channelId,
109
+ chatType: isGroup ? "group" : "direct",
110
+ text: msg.text ?? "",
111
+ timestamp: msg.timestamp ? new Date(msg.timestamp).toISOString() : (/* @__PURE__ */ new Date()).toISOString(),
112
+ raw: rawPayload
113
+ };
114
+ try {
115
+ await this.messageHandler(normalized);
116
+ } catch (err) {
117
+ console.error("[imessage] injectMessage handler error:", err);
118
+ }
119
+ }
120
+ async pollMessages() {
121
+ if (!this.messageHandler) return;
122
+ try {
123
+ const { createClient } = await import("@libsql/client");
124
+ const db = createClient({ url: `file:${MESSAGES_DB_PATH}` });
125
+ const result = await db.execute({
126
+ sql: `SELECT
127
+ m.ROWID, m.text, m.date, m.is_from_me,
128
+ h.id as handle_id, h.uncanonicalized_id,
129
+ c.chat_identifier, c.display_name
130
+ FROM message m
131
+ LEFT JOIN handle h ON m.handle_id = h.ROWID
132
+ LEFT JOIN chat_message_join cmj ON m.ROWID = cmj.message_id
133
+ LEFT JOIN chat c ON cmj.chat_id = c.ROWID
134
+ WHERE m.ROWID > ? AND m.is_from_me = 0 AND m.text IS NOT NULL
135
+ ORDER BY m.ROWID ASC
136
+ LIMIT 50`,
137
+ args: [this.lastMessageRowId]
138
+ });
139
+ db.close();
140
+ for (const row of result.rows) {
141
+ const rowId = Number(row.ROWID);
142
+ if (rowId > this.lastMessageRowId) {
143
+ this.lastMessageRowId = rowId;
144
+ }
145
+ const macEpoch = (/* @__PURE__ */ new Date("2001-01-01T00:00:00Z")).getTime();
146
+ const timestamp = new Date(
147
+ macEpoch + Number(row.date) / 1e6
148
+ ).toISOString();
149
+ const senderId = row.handle_id ?? row.uncanonicalized_id ?? "";
150
+ const isGroup = (row.chat_identifier ?? "").includes(";");
151
+ const normalized = {
152
+ messageId: String(rowId),
153
+ platform: "imessage",
154
+ senderId,
155
+ senderPhone: senderId.startsWith("+") ? senderId : void 0,
156
+ senderEmail: senderId.includes("@") ? senderId : void 0,
157
+ channelId: row.chat_identifier ?? senderId,
158
+ chatType: isGroup ? "group" : "direct",
159
+ text: row.text ?? "",
160
+ timestamp,
161
+ raw: row
162
+ };
163
+ try {
164
+ await this.messageHandler(normalized);
165
+ } catch (err) {
166
+ console.error("[imessage] Message handler error:", err);
167
+ }
168
+ }
169
+ } catch (err) {
170
+ console.error("[imessage] Poll error:", err instanceof Error ? err.message : err);
171
+ }
172
+ }
173
+ };
174
+
175
+ export {
176
+ IMessageAdapter
177
+ };
@@ -0,0 +1,94 @@
1
+ // src/lib/providers/ollama.ts
2
+ import { randomUUID } from "crypto";
3
+ var OllamaProvider = class {
4
+ name;
5
+ defaultModel;
6
+ host;
7
+ constructor(name, config = {}) {
8
+ this.name = name;
9
+ this.host = (config.host ?? "http://localhost:11434").replace(/\/+$/, "");
10
+ this.defaultModel = config.defaultModel ?? "qwen3:14b";
11
+ }
12
+ async createMessage(params) {
13
+ const messages = [
14
+ { role: "system", content: params.system }
15
+ ];
16
+ for (const msg of params.messages) {
17
+ if (typeof msg.content === "string") {
18
+ messages.push({ role: msg.role, content: msg.content });
19
+ } else {
20
+ const text = msg.content.filter((b) => b.type === "text").map((b) => b.text).join("\n");
21
+ messages.push({ role: msg.role, content: text });
22
+ }
23
+ }
24
+ const tools = params.tools?.map((t) => ({
25
+ type: "function",
26
+ function: {
27
+ name: t.name,
28
+ description: t.description,
29
+ parameters: t.inputSchema
30
+ }
31
+ }));
32
+ const body = {
33
+ model: params.model || this.defaultModel,
34
+ messages,
35
+ stream: false,
36
+ options: { num_predict: params.maxTokens }
37
+ };
38
+ if (tools?.length) body.tools = tools;
39
+ const res = await fetch(`${this.host}/api/chat`, {
40
+ method: "POST",
41
+ headers: { "Content-Type": "application/json" },
42
+ body: JSON.stringify(body),
43
+ signal: AbortSignal.timeout(3e4)
44
+ });
45
+ if (!res.ok) {
46
+ throw new Error(`Ollama API error: ${res.status} ${await res.text()}`);
47
+ }
48
+ const data = await res.json();
49
+ return this.normalizeResponse(data);
50
+ }
51
+ async healthCheck() {
52
+ const start = Date.now();
53
+ try {
54
+ const res = await fetch(`${this.host}/api/tags`, {
55
+ signal: AbortSignal.timeout(5e3)
56
+ });
57
+ return { available: res.ok, latencyMs: Date.now() - start };
58
+ } catch {
59
+ return { available: false };
60
+ }
61
+ }
62
+ normalizeResponse(data) {
63
+ const content = [];
64
+ if (data.message.content) {
65
+ content.push({ type: "text", text: data.message.content });
66
+ }
67
+ if (data.message.tool_calls) {
68
+ for (const call of data.message.tool_calls) {
69
+ content.push({
70
+ type: "tool_use",
71
+ id: randomUUID(),
72
+ name: call.function.name,
73
+ input: call.function.arguments
74
+ });
75
+ }
76
+ }
77
+ if (content.length === 0) {
78
+ content.push({ type: "text", text: "" });
79
+ }
80
+ const hasToolUse = content.some((b) => b.type === "tool_use");
81
+ return {
82
+ content,
83
+ stopReason: hasToolUse ? "tool_use" : "end_turn",
84
+ usage: {
85
+ inputTokens: data.prompt_eval_count ?? 0,
86
+ outputTokens: data.eval_count ?? 0
87
+ }
88
+ };
89
+ }
90
+ };
91
+
92
+ export {
93
+ OllamaProvider
94
+ };
@@ -0,0 +1,6 @@
1
+ // src/types/memory.ts
2
+ var EMBEDDING_DIM = 1024;
3
+
4
+ export {
5
+ EMBEDDING_DIM
6
+ };
@@ -0,0 +1,147 @@
1
+ import {
2
+ recordOrchestrationEventBestEffort
3
+ } from "./chunk-CTFKTUYN.js";
4
+
5
+ // src/lib/session-registry.ts
6
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
7
+ import { execSync } from "child_process";
8
+ import path from "path";
9
+ import os from "os";
10
+ var REGISTRY_PATH = path.join(os.homedir(), ".exe-os", "session-registry.json");
11
+ function registerSession(entry) {
12
+ const dir = path.dirname(REGISTRY_PATH);
13
+ if (!existsSync(dir)) {
14
+ mkdirSync(dir, { recursive: true });
15
+ }
16
+ const sessions = listSessions();
17
+ const idx = sessions.findIndex((s) => s.windowName === entry.windowName);
18
+ if (idx >= 0) {
19
+ sessions[idx] = entry;
20
+ } else {
21
+ sessions.push(entry);
22
+ }
23
+ writeFileSync(REGISTRY_PATH, JSON.stringify(sessions, null, 2));
24
+ recordOrchestrationEventBestEffort({
25
+ eventType: "registry.registered",
26
+ source: "session-registry.registerSession",
27
+ agentId: entry.agentId,
28
+ sessionScope: entry.parentExe,
29
+ tmuxSession: entry.windowName,
30
+ payload: { hasProjectDir: Boolean(entry.projectDir) }
31
+ });
32
+ }
33
+ function refreshSessionProject(windowName, projectDir) {
34
+ const sessions = listSessions();
35
+ const entry = sessions.find((s) => s.windowName === windowName);
36
+ if (!entry || entry.projectDir === projectDir) return;
37
+ entry.projectDir = projectDir;
38
+ try {
39
+ writeFileSync(REGISTRY_PATH, JSON.stringify(sessions, null, 2));
40
+ } catch {
41
+ }
42
+ }
43
+ function listSessions() {
44
+ try {
45
+ const raw = readFileSync(REGISTRY_PATH, "utf8");
46
+ return JSON.parse(raw);
47
+ } catch {
48
+ return [];
49
+ }
50
+ }
51
+ function pruneStaleSessions() {
52
+ const sessions = listSessions();
53
+ if (sessions.length === 0) return 0;
54
+ let liveSessions = [];
55
+ try {
56
+ liveSessions = execSync("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
57
+ encoding: "utf8"
58
+ }).trim().split("\n").filter(Boolean);
59
+ } catch {
60
+ return 0;
61
+ }
62
+ const liveSet = new Set(liveSessions);
63
+ const alive = sessions.filter((s) => liveSet.has(s.windowName));
64
+ const staleSessions = sessions.filter((s) => !liveSet.has(s.windowName));
65
+ if (staleSessions.length > 0) {
66
+ recordOrchestrationEventBestEffort({
67
+ eventType: "registry.missing_tmux",
68
+ source: "session-registry.pruneStaleSessions",
69
+ severity: "warn",
70
+ attempt: staleSessions.length,
71
+ payload: {
72
+ count: staleSessions.length,
73
+ examples: staleSessions.slice(0, 5).map((s) => s.windowName)
74
+ }
75
+ });
76
+ }
77
+ const pruned = sessions.length - alive.length;
78
+ if (pruned > 0) {
79
+ writeFileSync(REGISTRY_PATH, JSON.stringify(alive, null, 2));
80
+ }
81
+ return pruned;
82
+ }
83
+ function checkSessionRegistryConsistency(liveSessionsOverride) {
84
+ const sessions = listSessions();
85
+ const result = { missingTmux: 0, missingRegistry: 0 };
86
+ let liveSessions = liveSessionsOverride;
87
+ if (!liveSessions) {
88
+ try {
89
+ liveSessions = execSync("tmux list-sessions -F '#{session_name}' 2>/dev/null", {
90
+ encoding: "utf8"
91
+ }).trim().split("\n").filter(Boolean);
92
+ } catch {
93
+ return result;
94
+ }
95
+ }
96
+ const liveSet = new Set(liveSessions);
97
+ const registeredSet = new Set(sessions.map((s) => s.windowName));
98
+ const missingTmuxExamples = [];
99
+ const missingRegistryExamples = [];
100
+ for (const entry of sessions) {
101
+ if (liveSet.has(entry.windowName)) continue;
102
+ result.missingTmux++;
103
+ if (missingTmuxExamples.length < 5) missingTmuxExamples.push(entry.windowName);
104
+ }
105
+ for (const live of liveSessions) {
106
+ if (registeredSet.has(live)) continue;
107
+ if (!looksLikeExeOsSession(live)) continue;
108
+ result.missingRegistry++;
109
+ if (missingRegistryExamples.length < 5) missingRegistryExamples.push(live);
110
+ }
111
+ if (result.missingTmux > 0) {
112
+ recordOrchestrationEventBestEffort({
113
+ eventType: "registry.missing_tmux",
114
+ source: "session-registry.checkSessionRegistryConsistency",
115
+ severity: "warn",
116
+ attempt: result.missingTmux,
117
+ payload: {
118
+ count: result.missingTmux,
119
+ examples: missingTmuxExamples
120
+ }
121
+ });
122
+ }
123
+ if (result.missingRegistry > 0) {
124
+ recordOrchestrationEventBestEffort({
125
+ eventType: "registry.missing_entry",
126
+ source: "session-registry.checkSessionRegistryConsistency",
127
+ severity: "warn",
128
+ attempt: result.missingRegistry,
129
+ payload: {
130
+ count: result.missingRegistry,
131
+ examples: missingRegistryExamples
132
+ }
133
+ });
134
+ }
135
+ return result;
136
+ }
137
+ function looksLikeExeOsSession(sessionName) {
138
+ return /^exe\d*$/.test(sessionName) || /-exe\d*$/.test(sessionName);
139
+ }
140
+
141
+ export {
142
+ registerSession,
143
+ refreshSessionProject,
144
+ listSessions,
145
+ pruneStaleSessions,
146
+ checkSessionRegistryConsistency
147
+ };