@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,389 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/bin/customer-readiness.ts
4
+ import { readFileSync, existsSync } from "fs";
5
+ import { execSync } from "child_process";
6
+ import path from "path";
7
+ import { fileURLToPath } from "url";
8
+ var __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ var ROOT = path.resolve(__dirname, "../..");
10
+ var pass = 0;
11
+ var fail = 0;
12
+ function test(name, fn) {
13
+ try {
14
+ const result = fn();
15
+ if (result === true || result === "pass") {
16
+ console.log(` \x1B[32m\u2713\x1B[0m ${name}`);
17
+ pass++;
18
+ } else {
19
+ console.log(` \x1B[31m\u2717\x1B[0m ${name}: ${result}`);
20
+ fail++;
21
+ }
22
+ } catch (err) {
23
+ console.log(` \x1B[31m\u2717\x1B[0m ${name}: ${err instanceof Error ? err.message : String(err)}`);
24
+ fail++;
25
+ }
26
+ }
27
+ function readSrc(relPath) {
28
+ return readFileSync(path.join(ROOT, relPath), "utf8");
29
+ }
30
+ console.log("\n\x1B[1mCustomer Readiness Gate\x1B[0m\n");
31
+ test("Mode 1 detection \u2014 bare exe-os shows guidance, not TUI", () => {
32
+ const cli = readSrc("src/bin/cli.ts");
33
+ if (!cli.includes("Mode 1 detected")) return "cli.ts missing Mode 1 detection";
34
+ if (!cli.includes("hasClaudeCode")) return "cli.ts missing Claude Code check";
35
+ return true;
36
+ });
37
+ test("Review orphans \u2014 no createTaskCore in review generation", () => {
38
+ const review = readSrc("src/lib/tasks-review.ts");
39
+ if (review.includes("createTaskCore(")) return "createTaskCore still called \u2014 will create orphan tasks";
40
+ return true;
41
+ });
42
+ test("Cloud sync \u2014 sqlSafe() protects all cloudPull functions", () => {
43
+ const sync = readSrc("src/lib/cloud-sync.ts");
44
+ if (!sync.includes("function sqlSafe")) return "sqlSafe() helper missing";
45
+ const count = (sync.match(/sqlSafe\(/g) || []).length;
46
+ if (count < 20) return `Only ${count} sqlSafe() usages (expected 20+)`;
47
+ return true;
48
+ });
49
+ test("Session scoping \u2014 task-scope.ts helper exists", () => {
50
+ if (!existsSync(path.join(ROOT, "src/lib/task-scope.ts"))) return "task-scope.ts missing";
51
+ const scope = readSrc("src/lib/task-scope.ts");
52
+ if (!scope.includes("sessionScopeFilter")) return "sessionScopeFilter not exported";
53
+ return true;
54
+ });
55
+ test("Session scoping \u2014 all task query files import scope helper", () => {
56
+ const taskFiles = execSync(
57
+ `grep -rl "FROM tasks" src/ --include="*.ts" --include="*.tsx"`,
58
+ { encoding: "utf8", cwd: ROOT }
59
+ ).trim().split("\n").filter(Boolean);
60
+ const exempt = ["close-task.ts", "tasks-review.ts", "tasks.ts", "cloud-sync.ts", "task-scope.ts", "database.ts"];
61
+ const unscoped = [];
62
+ for (const f of taskFiles) {
63
+ const basename = path.basename(f);
64
+ if (exempt.some((e) => basename === e)) continue;
65
+ const content = readFileSync(path.join(ROOT, f), "utf8");
66
+ if (!content.includes("task-scope") && !content.includes("sessionScopeFilter") && !content.includes("intentionally unscoped")) {
67
+ unscoped.push(f);
68
+ }
69
+ }
70
+ if (unscoped.length > 0) return `${unscoped.length} files missing scope: ${unscoped.slice(0, 3).join(", ")}`;
71
+ return true;
72
+ });
73
+ test("No unscoped task queries \u2014 all task queries have session scope or PK guard", () => {
74
+ let rawOutput;
75
+ try {
76
+ rawOutput = execSync(
77
+ `grep -rn -B5 -A5 "FROM.*tasks\\|UPDATE.*tasks" src/ --include="*.ts" | grep -v tasks-crud.ts | grep -v "__tests__" | grep -v ".test." | grep -v "customer-readiness" | grep -v "task-scope.ts"`,
78
+ { encoding: "utf8", cwd: ROOT }
79
+ ).trim();
80
+ } catch {
81
+ return true;
82
+ }
83
+ if (!rawOutput) return true;
84
+ const blocks = rawOutput.split(/^--$/m);
85
+ const unscoped = [];
86
+ for (const block of blocks) {
87
+ const blockLower = block.toLowerCase();
88
+ const hasScope = blockLower.includes("scope.sql") || blockLower.includes("sessionscopefilter") || blockLower.includes("strictsessionscopefilter") || blockLower.includes("session_scope") || blockLower.includes("intentionally unscoped") || blockLower.includes("audited 2026") || blockLower.includes("querytaskrows");
89
+ const isSafe = hasScope || /where\s+id\s*=\s*\?/.test(blockLower) || // PK lookup by full UUID
90
+ /where\s+task_file\s*=\s*\?/.test(blockLower) || // task_file exact match
91
+ /select\s+count\s*\(\s*\*\s*\)/.test(blockLower) || // COUNT(*) stats
92
+ /assigned_to\s*=\s*\?.*where\s+id/.test(blockLower) || // UPDATE by PK
93
+ /parent_task_id\s*=\s*\?/.test(blockLower) || // Cascade by parent PK
94
+ /blocked_by\s*=\s*\w+\.id/.test(blockLower) || // JOIN on PK (auto-unblock)
95
+ /project_name\s*=\s*'/.test(blockLower) || // Migration: hardcoded project rename
96
+ /device_id\s*is\s*null/.test(blockLower) || // Migration: backfill device_id
97
+ /status\s*=\s*'completed'/.test(blockLower) || // Migration: status rename
98
+ /status\s*=\s*'done'.*result\s*is\s*not\s*null/.test(blockLower) || // Migration: bulk close
99
+ blockLower.includes("conditions.join") || // Dynamic WHERE builder (git-task-sweep)
100
+ blockLower.includes("exe-rename") || // Rename is intentionally global
101
+ blockLower.includes("cleanup-stale") || // One-time legacy cleanup script
102
+ blockLower.includes("title like") || // Cascade cleanup by title pattern
103
+ blockLower.includes("assigned_to is null");
104
+ if (!isSafe) {
105
+ const queryLine = block.split("\n").find(
106
+ (l) => /FROM.*tasks|UPDATE.*tasks/i.test(l) && !l.trim().startsWith("//") && !l.trim().startsWith("*")
107
+ );
108
+ if (queryLine) {
109
+ const match = queryLine.match(/^([^:]+):(\d+)/);
110
+ if (match) unscoped.push(`${match[1]}:${match[2]}`);
111
+ }
112
+ }
113
+ }
114
+ const unique = [...new Set(unscoped)];
115
+ if (unique.length > 0) {
116
+ return `${unique.length} unscoped task quer${unique.length === 1 ? "y" : "ies"}: ${unique.slice(0, 5).join(", ")}${unique.length > 5 ? ` (+${unique.length - 5} more)` : ""}`;
117
+ }
118
+ return true;
119
+ });
120
+ test("Platform procedures \u2014 shipped as code (not DB only)", () => {
121
+ const procs = readSrc("src/lib/platform-procedures.ts");
122
+ const count = (procs.match(/title:/g) || []).length;
123
+ if (count < 13) return `Only ${count} procedures (expected 13+)`;
124
+ if (!procs.includes("PLATFORM_PROCEDURE_TITLES")) return "Missing dedup set";
125
+ return true;
126
+ });
127
+ test("Platform procedures \u2014 customer procedures stay in DB", () => {
128
+ const global = readSrc("src/lib/global-procedures.ts");
129
+ if (!global.includes("PLATFORM_PROCEDURE_TITLES")) return "Not filtering platform titles from DB";
130
+ if (!global.includes("_platformCache")) return "No platform cache";
131
+ if (!global.includes("_customerCache")) return "No customer cache separation";
132
+ return true;
133
+ });
134
+ test("Backfill exclusive lock \u2014 only 1 backfill at a time", () => {
135
+ const gate = readSrc("src/lib/worker-gate.ts");
136
+ if (!gate.includes("tryAcquireBackfillLock")) return "Missing backfill lock";
137
+ if (!gate.includes("backfill.lock")) return "Missing lockfile path";
138
+ const bf = readSrc("src/bin/backfill-vectors.ts");
139
+ if (!bf.includes("tryAcquireBackfillLock")) return "backfill-vectors.ts not using lock";
140
+ return true;
141
+ });
142
+ test("Daemon restart \u2014 uses SIGKILL + kills orphans", () => {
143
+ const orchestrator = readSrc("src/lib/daemon-restart-orchestrator.ts");
144
+ if (!orchestrator.includes("SIGKILL")) return "Still using SIGTERM";
145
+ if (!orchestrator.includes("pgrep")) return "No orphan kill via pgrep";
146
+ return true;
147
+ });
148
+ test("License self-heal \u2014 update mirrors cloud.apiKey to license.key", () => {
149
+ const update = readSrc("src/bin/update.ts");
150
+ if (!update.includes("mirrorLicenseKey")) return "update.ts missing license self-heal";
151
+ return true;
152
+ });
153
+ test("Golden path \u2014 orchestration model documented", () => {
154
+ if (!existsSync(path.join(ROOT, ".planning/ARCHITECTURE.md"))) return "ARCHITECTURE.md missing";
155
+ const arch = readFileSync(path.join(ROOT, ".planning/ARCHITECTURE.md"), "utf8");
156
+ if (!arch.includes("Orchestration Model")) return "Golden path section missing";
157
+ if (!arch.includes("create_task") || !arch.includes("Dispatch")) return "Dispatch rule missing";
158
+ return true;
159
+ });
160
+ test("No hardcoded 'yoshi'/'mari' in runtime task routing", () => {
161
+ const router = readSrc("src/lib/task-router.ts");
162
+ if (router.includes('"yoshi"') || router.includes("'yoshi'")) return "Hardcoded 'yoshi' in task-router.ts";
163
+ if (router.includes('"mari"') || router.includes("'mari'")) return "Hardcoded 'mari' in task-router.ts";
164
+ return true;
165
+ });
166
+ test("No hardcoded agent name\u2192role map in exe-new-employee", () => {
167
+ const newEmp = readSrc("src/bin/exe-new-employee.ts");
168
+ if (newEmp.includes("yoshi: ") && newEmp.includes('"cto"')) return "Hardcoded name\u2192role map still in exe-new-employee.ts";
169
+ return true;
170
+ });
171
+ test("No hardcoded 'exe' coordinator in SQL WHERE clauses", () => {
172
+ const sqlFiles = [
173
+ "src/runtime/orchestrator.ts",
174
+ "src/bin/exe-boot.ts",
175
+ "src/lib/review-polling.ts",
176
+ "src/bin/exe-heartbeat.ts",
177
+ "src/tui/hooks/useOrchestrator.ts"
178
+ ];
179
+ const violations = [];
180
+ for (const f of sqlFiles) {
181
+ const content = readSrc(f);
182
+ const lines = content.split("\n");
183
+ for (let i = 0; i < lines.length; i++) {
184
+ const line = lines[i];
185
+ if (line.match(/=\s*'exe'/)) {
186
+ violations.push(`${f}:${i + 1}`);
187
+ }
188
+ }
189
+ }
190
+ if (violations.length > 0) return `Hardcoded 'exe' in SQL: ${violations.join(", ")}`;
191
+ return true;
192
+ });
193
+ test("Build output \u2014 referenced standalone dist/bin scripts are explicit tsup entries", () => {
194
+ const pkg = JSON.parse(readSrc("package.json"));
195
+ const tsup = readSrc("tsup.config.ts");
196
+ const commandDocs = execSync(
197
+ `grep -Rho "dist/bin/[A-Za-z0-9._-]*.js" src/commands package.json 2>/dev/null || true`,
198
+ { encoding: "utf8", cwd: ROOT }
199
+ ).trim().split("\n").filter(Boolean);
200
+ const refs = /* @__PURE__ */ new Set();
201
+ for (const value of Object.values(pkg.bin ?? {})) {
202
+ const match = value.match(/dist\/bin\/([^\/]+)\.js$/);
203
+ if (match?.[1]) refs.add(match[1]);
204
+ }
205
+ for (const script of Object.values(pkg.scripts ?? {})) {
206
+ for (const match of script.matchAll(/dist\/bin\/([A-Za-z0-9._-]+)\.js/g)) {
207
+ if (match[1]) refs.add(match[1]);
208
+ }
209
+ }
210
+ for (const ref of commandDocs) {
211
+ const match = ref.match(/dist\/bin\/([A-Za-z0-9._-]+)\.js$/);
212
+ if (match?.[1]) refs.add(match[1]);
213
+ }
214
+ const missing = [...refs].filter((name) => !tsup.includes(`"bin/${name}"`));
215
+ if (missing.length > 0) return `Missing tsup bin entries: ${missing.join(", ")}`;
216
+ return true;
217
+ });
218
+ test("Providers \u2014 active code imports lib/providers, not gateway/providers", () => {
219
+ const hits = execSync(
220
+ `grep -R "gateway/providers" -n src --include="*.ts" --include="*.tsx" || true`,
221
+ { encoding: "utf8", cwd: ROOT }
222
+ ).trim().split("\n").filter(Boolean).filter((line) => !line.includes("src/gateway/providers/") && !line.includes("src/bin/customer-readiness.ts"));
223
+ if (hits.length > 0) return `Deprecated provider imports: ${hits.slice(0, 3).join("; ")}`;
224
+ return true;
225
+ });
226
+ test("Support intake \u2014 customer CLI smoke test is routed", () => {
227
+ const cli = readSrc("src/bin/cli.ts");
228
+ const support = readSrc("src/bin/exe-support.ts");
229
+ const tsup = readSrc("tsup.config.ts");
230
+ const mcpTools = readSrc("src/mcp/tools/support.ts");
231
+ const registry = readSrc("src/mcp/register-tools.ts");
232
+ if (!cli.includes('args[0] === "support"')) return "exe-os support route missing";
233
+ if (!support.includes("support health") || !support.includes("support test")) return "support CLI missing health/test commands";
234
+ if (!tsup.includes('"bin/exe-support"')) return "exe-support missing from build entries";
235
+ if (!mcpTools.includes("support_health") || !mcpTools.includes("support_test")) return "support MCP tools missing";
236
+ if (!registry.includes("registerSupportTools")) return "support MCP tools not registered";
237
+ return true;
238
+ });
239
+ test("Support intake \u2014 API health route and cloud-sync license fallback exist", () => {
240
+ const api = readSrc("api-router/src/index.ts");
241
+ const supportRoutes = readSrc("api-router/src/support-routes.ts");
242
+ const wrangler = readSrc("api-router/wrangler.toml");
243
+ if (!api.includes("/v1/support/health")) return "support health route missing";
244
+ if (!supportRoutes.includes("handleSupportHealth")) return "handleSupportHealth missing";
245
+ if (!supportRoutes.includes("env.CLOUD_SYNC.fetch")) return "cloud-sync service binding fallback missing";
246
+ if (!wrangler.includes('binding = "CLOUD_SYNC"')) return "CLOUD_SYNC service binding missing";
247
+ return true;
248
+ });
249
+ test("CLI/MCP parity \u2014 customer ops wrappers are registered", () => {
250
+ const registry = readSrc("src/mcp/register-tools.ts");
251
+ const gates = readSrc("src/lib/tool-gates.ts");
252
+ const parity = readSrc("src/mcp/tools/cli-parity.ts");
253
+ const requiredTools = [
254
+ "healthcheck",
255
+ "doctor",
256
+ "rename_employee",
257
+ "status_brief",
258
+ "pending_work_summary",
259
+ "key_status",
260
+ "key_rotation_preflight",
261
+ "check_update",
262
+ "stack_update_check",
263
+ "cloud_status"
264
+ ];
265
+ if (!registry.includes("registerCliParityTools")) return "CLI parity tools not registered";
266
+ if (!gates.includes("registerCliParityTools")) return "CLI parity tools missing role gate";
267
+ for (const tool of requiredTools) {
268
+ if (!parity.includes(`"${tool}"`)) return `Missing MCP wrapper: ${tool}`;
269
+ }
270
+ return true;
271
+ });
272
+ test("Platform procedures \u2014 all MCP tool actions documented", () => {
273
+ const procs = readSrc("src/lib/platform-procedures.ts");
274
+ const requiredActions = {
275
+ memory: ["recall", "ask_team", "store", "commit", "search", "session_context", "get_by_id", "consolidate", "cardinality", "supersede"],
276
+ task: ["create", "list", "get", "update", "close", "checkpoint", "resume"],
277
+ graph: ["query_relationships", "entity_neighbors", "hot_entities", "stats", "export", "merge_entities", "similar_trajectories"],
278
+ identity: ["get", "update"],
279
+ behavior: ["store", "list", "deactivate"],
280
+ support: ["create_bug", "create_feature", "health", "triage_bug"],
281
+ message: ["send", "acknowledge"],
282
+ reminder: ["create", "list", "complete"],
283
+ session: ["events", "last_response"],
284
+ wiki: ["list", "get"],
285
+ document: ["ingest", "list", "purge", "set_importance", "rerank"],
286
+ diagnostics: ["healthcheck", "doctor", "status_brief", "check_update", "cloud_status", "pending_work_summary", "rename_employee", "tool_search", "drift"],
287
+ config: ["list_employees", "set_agent_config", "agent_spend", "daemon_health", "license_status", "cloud_sync", "memory_audit", "run_consolidation", "worker_gate", "auto_wake_status", "orchestration_phase", "company_procedure", "global_procedure", "create_trigger", "list_triggers", "export_orchestration", "import_orchestration"]
288
+ };
289
+ const requiredParams = [
290
+ "as_of",
291
+ // bi-temporal recall
292
+ "kind",
293
+ // memory type filter
294
+ "retrieval_mode",
295
+ // typed retrieval filtering
296
+ "procedure_for",
297
+ // procedure domain tag
298
+ "spawn_runtime",
299
+ // per-task runtime override
300
+ "spawn_model",
301
+ // per-task model override
302
+ "blocked_by",
303
+ // task dependency
304
+ "parent_task_id",
305
+ // subtask hierarchy
306
+ "complexity",
307
+ // task complexity level
308
+ "budget_tokens",
309
+ // token budget cap
310
+ "worker_gate",
311
+ // spawn slot check
312
+ "cloud_action"
313
+ // nested cloud sync actions
314
+ ];
315
+ const missing = [];
316
+ for (const [domain, actions] of Object.entries(requiredActions)) {
317
+ for (const action of actions) {
318
+ if (!procs.includes(action)) {
319
+ missing.push(`${domain}.${action}`);
320
+ }
321
+ }
322
+ }
323
+ for (const param of requiredParams) {
324
+ if (!procs.includes(param)) {
325
+ missing.push(`param:${param}`);
326
+ }
327
+ }
328
+ if (missing.length > 0) {
329
+ return `${missing.length} undocumented in procedures: ${missing.slice(0, 5).join(", ")}${missing.length > 5 ? ` (+${missing.length - 5} more)` : ""}`;
330
+ }
331
+ return true;
332
+ });
333
+ test("Build output \u2014 all URL-based dynamic imports have matching tsup entry points", () => {
334
+ const tsup = readSrc("tsup.config.ts");
335
+ const srcFiles = execSync(
336
+ `find src -name "*.ts" -not -path "*/node_modules/*" 2>/dev/null || true`,
337
+ { encoding: "utf8", cwd: ROOT }
338
+ ).trim().split("\n").filter(Boolean);
339
+ const missing = [];
340
+ for (const file of srcFiles) {
341
+ if (file.includes("customer-readiness")) continue;
342
+ const content = readSrc(file);
343
+ const urlImports = content.matchAll(/new URL\(\s*["'](\.\.?\/[^"'*]+\.js)["']\s*,\s*import\.meta\.url\s*\)/g);
344
+ for (const match of urlImports) {
345
+ const relPath = match[1];
346
+ if (relPath.includes("package.json")) continue;
347
+ const srcDir = path.dirname(file);
348
+ const resolved = path.normalize(path.join(srcDir, relPath));
349
+ const distKey = resolved.replace(/^src\//, "").replace(/\.js$/, "");
350
+ if (distKey.includes("..")) continue;
351
+ if (!tsup.includes(`"${distKey}"`)) {
352
+ missing.push(`${file} \u2192 ${relPath} (needs tsup entry: "${distKey}")`);
353
+ }
354
+ }
355
+ }
356
+ if (missing.length > 0) {
357
+ return `Dynamic imports without tsup entries will crash at runtime:
358
+ ${missing.join("\n ")}`;
359
+ }
360
+ return true;
361
+ });
362
+ test("Build output \u2014 every tsup entry point has a corresponding dist/ file", () => {
363
+ const tsup = readSrc("tsup.config.ts");
364
+ const entryPattern = /"([^"]+)":\s*"src\//g;
365
+ const entries = [];
366
+ for (const match of tsup.matchAll(entryPattern)) {
367
+ if (match[1]) entries.push(match[1]);
368
+ }
369
+ const missing = [];
370
+ for (const entry of entries) {
371
+ const distPath = path.join(ROOT, "dist", entry + ".js");
372
+ if (!existsSync(distPath)) {
373
+ missing.push(`dist/${entry}.js`);
374
+ }
375
+ }
376
+ if (missing.length > 0) {
377
+ return `Missing dist files (build incomplete): ${missing.join(", ")}`;
378
+ }
379
+ return true;
380
+ });
381
+ console.log(`
382
+ \x1B[1m${pass + fail} tests: ${pass} passed, ${fail} failed\x1B[0m
383
+ `);
384
+ if (fail > 0) {
385
+ console.log("\x1B[31mCustomer readiness gate FAILED \u2014 do not publish.\x1B[0m\n");
386
+ process.exit(1);
387
+ } else {
388
+ console.log("\x1B[32mCustomer readiness gate PASSED \u2014 safe to publish.\x1B[0m\n");
389
+ }
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ requestDeployRestart
4
+ } from "../chunk-PWMMIGVQ.js";
5
+ import "../chunk-R5U7XKVJ.js";
6
+
7
+ // src/bin/deferred-daemon-restart.ts
8
+ import { existsSync, openSync, closeSync, writeFileSync, unlinkSync } from "fs";
9
+ import { spawn, execSync } from "child_process";
10
+ import path from "path";
11
+ import os from "os";
12
+ var EXE_DIR = path.join(os.homedir(), ".exe-os");
13
+ var DAEMON_PORT = 48739;
14
+ var DEFERRED_RESTART_PID_PATH = path.join(EXE_DIR, "deferred-restart.pid");
15
+ try {
16
+ writeFileSync(DEFERRED_RESTART_PID_PATH, String(process.pid));
17
+ } catch {
18
+ }
19
+ function cleanupPid() {
20
+ try {
21
+ unlinkSync(DEFERRED_RESTART_PID_PATH);
22
+ } catch {
23
+ }
24
+ }
25
+ process.on("exit", cleanupPid);
26
+ process.on("SIGTERM", () => {
27
+ cleanupPid();
28
+ process.exit(0);
29
+ });
30
+ process.on("SIGINT", () => {
31
+ cleanupPid();
32
+ process.exit(0);
33
+ });
34
+ var DELAY_MS = parseInt(process.env.EXE_DEFERRED_DELAY_MS ?? "3000", 10);
35
+ await new Promise((resolve) => setTimeout(resolve, DELAY_MS));
36
+ process.stderr.write("[deferred-restart] Starting daemon restart...\n");
37
+ var result = requestDeployRestart("deploy-deferred");
38
+ if (!result.ok) {
39
+ process.stderr.write(`[deferred-restart] Kill phase skipped: ${result.skipped}
40
+ `);
41
+ }
42
+ try {
43
+ const launchdCheck = execSync("launchctl list com.askexe.exed 2>/dev/null", { encoding: "utf8", timeout: 3e3 });
44
+ if (launchdCheck.includes("com.askexe.exed")) {
45
+ process.stderr.write("[deferred-restart] launchd manages daemon \u2014 it will auto-restart. Done.\n");
46
+ process.exit(0);
47
+ }
48
+ } catch {
49
+ }
50
+ var totalGB = os.totalmem() / (1024 * 1024 * 1024);
51
+ function resolvePackageRoot() {
52
+ let dir = path.dirname(new URL(import.meta.url).pathname);
53
+ for (let i = 0; i < 5; i++) {
54
+ if (existsSync(path.join(dir, "package.json"))) return dir;
55
+ dir = path.dirname(dir);
56
+ }
57
+ try {
58
+ const globalRoot = execSync("npm root -g", { encoding: "utf8", timeout: 5e3 }).trim();
59
+ const pkgDir = path.join(globalRoot, "@askexenow", "exe-os");
60
+ if (existsSync(path.join(pkgDir, "package.json"))) return pkgDir;
61
+ } catch {
62
+ }
63
+ throw new Error("Cannot find exe-os package root");
64
+ }
65
+ try {
66
+ const pkgRoot = resolvePackageRoot();
67
+ const daemonPath = path.join(pkgRoot, "dist", "lib", "exe-daemon.js");
68
+ if (!existsSync(daemonPath)) {
69
+ process.stderr.write(`[deferred-restart] daemon not found at ${daemonPath}
70
+ `);
71
+ process.exit(1);
72
+ }
73
+ const logPath = path.join(EXE_DIR, "exed.log");
74
+ const pidPath = path.join(EXE_DIR, "exed.pid");
75
+ const sockPath = path.join(EXE_DIR, "exed.sock");
76
+ let stderrFd = "ignore";
77
+ try {
78
+ stderrFd = openSync(logPath, "a");
79
+ } catch {
80
+ }
81
+ const heapCapMB = totalGB <= 8 ? 256 : Math.min(Math.max(2048, Math.round(totalGB * 0.25 * 1024)), 6144);
82
+ const child = spawn(process.execPath, [`--max-old-space-size=${heapCapMB}`, daemonPath], {
83
+ detached: true,
84
+ stdio: ["ignore", "ignore", stderrFd],
85
+ env: {
86
+ ...process.env,
87
+ EXE_DAEMON_SOCK: sockPath,
88
+ EXE_DAEMON_PID: pidPath
89
+ }
90
+ });
91
+ child.unref();
92
+ if (typeof stderrFd === "number") {
93
+ try {
94
+ closeSync(stderrFd);
95
+ } catch {
96
+ }
97
+ }
98
+ let daemonHealthy = false;
99
+ for (let attempt = 1; attempt <= 10; attempt++) {
100
+ await new Promise((r) => setTimeout(r, 1e3));
101
+ try {
102
+ const healthResp = execSync(
103
+ `curl -sf http://127.0.0.1:${DAEMON_PORT}/health 2>/dev/null`,
104
+ { encoding: "utf8", timeout: 3e3 }
105
+ );
106
+ if (healthResp.includes("ok") || healthResp.includes("healthy")) {
107
+ daemonHealthy = true;
108
+ break;
109
+ }
110
+ } catch {
111
+ }
112
+ }
113
+ if (daemonHealthy) {
114
+ process.stderr.write("[deferred-restart] Daemon restarted and healthy\n");
115
+ } else {
116
+ process.stderr.write("[deferred-restart] Daemon spawned but health check pending\n");
117
+ }
118
+ } catch (err) {
119
+ process.stderr.write(`[deferred-restart] Failed: ${err instanceof Error ? err.message : String(err)}
120
+ `);
121
+ process.exit(1);
122
+ }
123
+ process.exit(0);
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ DEFAULT_MODELS,
4
+ KNOWN_RUNTIMES,
5
+ clearAgentRuntime,
6
+ getAgentRuntime,
7
+ loadAgentConfig,
8
+ setAgentRuntime
9
+ } from "../chunk-GVP5U4WL.js";
10
+ import {
11
+ DEFAULT_RUNTIME
12
+ } from "../chunk-NGP6LSV2.js";
13
+ import {
14
+ loadEmployeesSync
15
+ } from "../chunk-UJOSFVWG.js";
16
+ import "../chunk-QHIGMP2M.js";
17
+ import "../chunk-FXU7JOXK.js";
18
+ import "../chunk-TNTFEWU5.js";
19
+ import "../chunk-LYH5HE24.js";
20
+ import "../chunk-R5U7XKVJ.js";
21
+
22
+ // src/bin/exe-agent-config.ts
23
+ function showAll() {
24
+ const config = loadAgentConfig();
25
+ let employees = [];
26
+ try {
27
+ employees = loadEmployeesSync();
28
+ } catch {
29
+ process.stderr.write("Warning: could not load employee roster\n");
30
+ }
31
+ if (employees.length === 0) {
32
+ console.log("No employees in roster.");
33
+ return;
34
+ }
35
+ console.log("");
36
+ console.log("Agent Runtime Configuration");
37
+ console.log("\u2550".repeat(65));
38
+ console.log(
39
+ "Agent".padEnd(10) + "Role".padEnd(22) + "Runtime".padEnd(12) + "Model"
40
+ );
41
+ console.log("\u2500".repeat(65));
42
+ for (const emp of employees) {
43
+ const entry = config[emp.name];
44
+ const runtime = entry?.runtime ?? DEFAULT_RUNTIME;
45
+ const model = entry?.model ?? DEFAULT_MODELS[DEFAULT_RUNTIME];
46
+ const configured = entry ? "" : " (default)";
47
+ const role = (emp.role ?? "").length > 20 ? (emp.role ?? "").slice(0, 18) + ".." : emp.role ?? "";
48
+ console.log(
49
+ emp.name.padEnd(10) + role.padEnd(22) + runtime.padEnd(12) + model + configured
50
+ );
51
+ }
52
+ console.log("\u2500".repeat(65));
53
+ console.log("");
54
+ console.log("Available runtimes:");
55
+ for (const [rt, models] of Object.entries(KNOWN_RUNTIMES)) {
56
+ console.log(` ${rt}: ${models.join(", ")}`);
57
+ }
58
+ console.log("");
59
+ }
60
+ function main() {
61
+ const args = process.argv.slice(2);
62
+ if (args.length === 0) {
63
+ showAll();
64
+ return;
65
+ }
66
+ const agentId = args[0];
67
+ if (args[1] === "--clear") {
68
+ clearAgentRuntime(agentId);
69
+ console.log(`Cleared config for ${agentId} \u2014 will use defaults.`);
70
+ return;
71
+ }
72
+ if (args.length < 3) {
73
+ const rt = getAgentRuntime(agentId);
74
+ console.log(`${agentId}: runtime=${rt.runtime} model=${rt.model}`);
75
+ return;
76
+ }
77
+ const runtime = args[1];
78
+ const model = args[2];
79
+ const result = setAgentRuntime(agentId, runtime, model);
80
+ if (!result.ok) {
81
+ process.stderr.write(`Error: ${result.error}
82
+ `);
83
+ process.exit(1);
84
+ }
85
+ console.log(`Set ${agentId} \u2192 runtime=${runtime} model=${model}`);
86
+ }
87
+ main();