@askexenow/exe-os 0.9.302 → 0.9.310

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 (311) hide show
  1. package/deploy/compose/.env.example +8 -2
  2. package/deploy/compose/README.md +7 -3
  3. package/deploy/compose/add-routes.sh +107 -0
  4. package/deploy/compose/docker-compose.yml +91 -18
  5. package/deploy/compose/gateway-watchdog.sh +223 -0
  6. package/deploy/compose/generate-env.ts +16 -4
  7. package/deploy/compose/setup.sh +7 -8
  8. package/deploy/stack-manifests/v0.9.json +125 -4
  9. package/dist/{active-agent-ODI6GGVD.js → active-agent-ORX47ZKW.js} +4 -3
  10. package/dist/{active-agent-GGQAP4QE.js → active-agent-S5T2YMOR.js} +4 -3
  11. package/dist/{agentic-ontology-M7T72M6V.js → agentic-ontology-6KBAXLSJ.js} +1 -1
  12. package/dist/{backfill-metadata-GSZP2BEW.js → backfill-metadata-FV7GX6AS.js} +5 -4
  13. package/dist/{behaviors-JM6KFSXL.js → behaviors-47CPEKJ7.js} +6 -5
  14. package/dist/bin/agentic-ontology-backfill.js +6 -5
  15. package/dist/bin/agentic-reflection-backfill.js +7 -6
  16. package/dist/bin/agentic-semantic-label.js +6 -5
  17. package/dist/bin/backfill-conversations.js +8 -7
  18. package/dist/bin/backfill-responses.js +8 -7
  19. package/dist/bin/backfill-vectors.js +10 -9
  20. package/dist/bin/bulk-sync-postgres.js +14 -13
  21. package/dist/bin/cc-doctor.js +5 -4
  22. package/dist/bin/cleanup-stale-review-tasks.js +13 -12
  23. package/dist/bin/cli.js +20 -17
  24. package/dist/bin/deferred-daemon-restart.js +4 -4
  25. package/dist/bin/exe-agent-config.js +3 -2
  26. package/dist/bin/exe-agent.js +12 -11
  27. package/dist/bin/exe-assign.js +10 -9
  28. package/dist/bin/exe-boot.js +21 -20
  29. package/dist/bin/exe-call.js +5 -4
  30. package/dist/bin/exe-cloud.js +14 -13
  31. package/dist/bin/exe-config-dump.js +525 -0
  32. package/dist/bin/exe-dispatch.js +13 -12
  33. package/dist/bin/exe-doctor.js +2 -2
  34. package/dist/bin/exe-export-behaviors.js +8 -7
  35. package/dist/bin/exe-forget.js +7 -6
  36. package/dist/bin/exe-gateway.js +22 -11
  37. package/dist/bin/exe-healthcheck.js +7 -4
  38. package/dist/bin/exe-heartbeat.js +13 -12
  39. package/dist/bin/exe-kill.js +16 -15
  40. package/dist/bin/exe-launch-agent.js +41 -25
  41. package/dist/bin/exe-new-employee.js +9 -8
  42. package/dist/bin/exe-pending-messages.js +14 -13
  43. package/dist/bin/exe-pending-notifications.js +13 -12
  44. package/dist/bin/exe-pending-reviews.js +13 -12
  45. package/dist/bin/exe-preflight.js +108 -0
  46. package/dist/bin/exe-rename.js +5 -4
  47. package/dist/bin/exe-review.js +15 -14
  48. package/dist/bin/exe-search-quality.js +282 -0
  49. package/dist/bin/exe-search.js +6 -5
  50. package/dist/bin/exe-session-cleanup.js +18 -17
  51. package/dist/bin/exe-settings.js +15 -14
  52. package/dist/bin/exe-start-codex.js +13 -12
  53. package/dist/bin/exe-start-opencode.js +9 -8
  54. package/dist/bin/exe-status.js +14 -13
  55. package/dist/bin/exe-support.js +4 -4
  56. package/dist/bin/exe-team.js +4 -3
  57. package/dist/bin/exe-timers.js +237 -0
  58. package/dist/bin/git-sweep.js +14 -13
  59. package/dist/bin/graph-backfill.js +7 -6
  60. package/dist/bin/graph-export.js +6 -5
  61. package/dist/bin/import-history.js +10 -9
  62. package/dist/bin/install-launchd.js +5 -2
  63. package/dist/bin/install.js +16 -15
  64. package/dist/bin/intercom-check.js +4 -4
  65. package/dist/bin/mcp-sessions.js +2 -2
  66. package/dist/bin/orchestration-metrics.js +5 -4
  67. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  68. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  69. package/dist/bin/prune-orphan-chunks.js +43 -10
  70. package/dist/bin/scan-tasks.js +13 -12
  71. package/dist/bin/setup.js +1 -1
  72. package/dist/bin/shard-migrate.js +5 -4
  73. package/dist/bin/stack-update.js +30 -5
  74. package/dist/bin/vps-health-gate.js +1 -1
  75. package/dist/{capability-cards-BCTFKT4G.js → capability-cards-WQVY7WSS.js} +3 -2
  76. package/dist/{capacity-monitor-B4S3XEDO.js → capacity-monitor-BUKYPSWR.js} +14 -13
  77. package/dist/{catchup-brief-I35KHK62.js → catchup-brief-X5IVQAOH.js} +16 -15
  78. package/dist/{chunk-74TUYU5A.js → chunk-255DIG4B.js} +1 -1
  79. package/dist/{chunk-CXKR5Z5F.js → chunk-2EJ636HI.js} +4 -0
  80. package/dist/{chunk-ST3X3YMZ.js → chunk-2NGPZCWX.js} +4 -4
  81. package/dist/{chunk-LD2JKEJT.js → chunk-2NVEKSSP.js} +7 -7
  82. package/dist/{chunk-V6P7TPPA.js → chunk-2UVN2NBN.js} +148 -2
  83. package/dist/{chunk-OZRO37JW.js → chunk-3KH6GXXX.js} +2 -2
  84. package/dist/{chunk-IMJNYREY.js → chunk-43R2GILO.js} +1 -1
  85. package/dist/{chunk-6X2YNVLB.js → chunk-4BANMHJ5.js} +3 -3
  86. package/dist/{chunk-QNJPDIWY.js → chunk-4L4R6AQJ.js} +1 -1
  87. package/dist/{chunk-QWLPAEG5.js → chunk-4Q5VNQTV.js} +3 -3
  88. package/dist/{chunk-VLSYKMCJ.js → chunk-4RJJ5FJ2.js} +14 -2
  89. package/dist/{chunk-4AN6KMVG.js → chunk-5DPE7B7K.js} +1 -1
  90. package/dist/{chunk-H7ZNSQ2E.js → chunk-62UZWGFX.js} +2 -2
  91. package/dist/{chunk-ZQ2QHGWE.js → chunk-66JPZELX.js} +20 -24
  92. package/dist/{chunk-BUGMW7YF.js → chunk-6LNSZADA.js} +11 -11
  93. package/dist/{chunk-PBCRUNIK.js → chunk-6OD2RVIA.js} +492 -157
  94. package/dist/chunk-7ODTYODO.js +350 -0
  95. package/dist/{chunk-5YL4Y27D.js → chunk-7WDIGRSO.js} +1 -1
  96. package/dist/{chunk-WIL6LXNG.js → chunk-AC6DKMVS.js} +1 -1
  97. package/dist/{chunk-HZEAAKCR.js → chunk-B2J3BBJC.js} +3 -3
  98. package/dist/{chunk-LE7CDIOA.js → chunk-BUOMSIXH.js} +1 -1
  99. package/dist/{chunk-XKGNKH6V.js → chunk-DFUCFLZH.js} +1 -1
  100. package/dist/{chunk-U724Z3S3.js → chunk-DKHBMIVE.js} +100 -37
  101. package/dist/{chunk-MY36XDUK.js → chunk-DNFU56ZS.js} +1 -1
  102. package/dist/{chunk-GSWGOGP5.js → chunk-EOS7VPVT.js} +5 -5
  103. package/dist/{chunk-P33JVGSP.js → chunk-FM7XZDZI.js} +1 -1
  104. package/dist/chunk-G6EJKYK3.js +33 -0
  105. package/dist/{chunk-OMCNFTSI.js → chunk-GMZMBLHT.js} +1 -1
  106. package/dist/{chunk-4LZ54YGA.js → chunk-GSY6HL3T.js} +5 -5
  107. package/dist/{chunk-OVKNFTCL.js → chunk-HED6D5KR.js} +132 -21
  108. package/dist/{chunk-ALH6QLYF.js → chunk-HQODUV3G.js} +2 -2
  109. package/dist/{chunk-US64UR5O.js → chunk-IIHE3FNC.js} +3 -3
  110. package/dist/{chunk-H2ISTRWU.js → chunk-IRIPGGGL.js} +1 -1
  111. package/dist/{chunk-Z3EXECOX.js → chunk-ISILDO7P.js} +1 -1
  112. package/dist/{chunk-6ERZFDBS.js → chunk-IZPO6IOZ.js} +1 -1
  113. package/dist/{chunk-W65Z4SJS.js → chunk-J3QZPDNH.js} +1 -1
  114. package/dist/{chunk-3IJCP6ZH.js → chunk-JDYO76PI.js} +1 -1
  115. package/dist/{chunk-ORNKGGFX.js → chunk-JNARUXDC.js} +1 -1
  116. package/dist/{chunk-VME3UH4D.js → chunk-JV225JBX.js} +1 -1
  117. package/dist/{chunk-EI7PBUIA.js → chunk-JZW5AOWI.js} +1 -1
  118. package/dist/{chunk-TLOILHSL.js → chunk-K7KBAJQL.js} +36 -18
  119. package/dist/{chunk-RHMWSUJB.js → chunk-KAVUTP5G.js} +2 -2
  120. package/dist/{chunk-7FNELLMX.js → chunk-KPVVTHPK.js} +8 -8
  121. package/dist/{chunk-35U72CD2.js → chunk-KSMITUGY.js} +3 -3
  122. package/dist/{chunk-D6UICP3C.js → chunk-LMX7UKGX.js} +81 -3
  123. package/dist/{chunk-7ZWC5HVG.js → chunk-MTIJ2NXY.js} +1 -1
  124. package/dist/{chunk-KVHPBQV4.js → chunk-NCC3F6GM.js} +1 -1
  125. package/dist/{chunk-AYMSIV7X.js → chunk-NIZQ3CIS.js} +1 -1
  126. package/dist/{chunk-LTI2DLHY.js → chunk-OBJXZII2.js} +2 -2
  127. package/dist/{chunk-WHOT5NZ7.js → chunk-OR3TAZL3.js} +14 -2
  128. package/dist/{chunk-RQUHAXMM.js → chunk-PHFPIUWU.js} +2 -0
  129. package/dist/{chunk-N76VTMMF.js → chunk-PMEOSD6S.js} +2 -2
  130. package/dist/{chunk-TCJEFW5V.js → chunk-PPXQE7AS.js} +4 -4
  131. package/dist/{chunk-KHZQVLNZ.js → chunk-QE7UVQDP.js} +46 -0
  132. package/dist/{chunk-SXJACGQ5.js → chunk-QEGXNJGR.js} +4 -4
  133. package/dist/{chunk-W3E4VEEJ.js → chunk-RPBTYQKJ.js} +1 -1
  134. package/dist/chunk-RQ7OVXUZ.js +81 -0
  135. package/dist/{chunk-7L2EV3XX.js → chunk-RVXWGPD3.js} +39 -6
  136. package/dist/{chunk-YNALY3SX.js → chunk-RZJ6DXVE.js} +1 -1
  137. package/dist/{chunk-P3SIFDES.js → chunk-SCYWCWKY.js} +16 -4
  138. package/dist/{chunk-7I43GVER.js → chunk-SOT23KWW.js} +3 -3
  139. package/dist/{chunk-T62GAN7I.js → chunk-SPOXL7HF.js} +7 -7
  140. package/dist/{chunk-3YJMI422.js → chunk-TN2YCFQE.js} +4 -4
  141. package/dist/{chunk-YMSWCERY.js → chunk-U63BZI2B.js} +3 -3
  142. package/dist/{chunk-KA5RK5HZ.js → chunk-V42BSVX6.js} +2 -2
  143. package/dist/{chunk-PJTRAFL4.js → chunk-V4BW5HFQ.js} +3 -3
  144. package/dist/{chunk-4FG6IX7U.js → chunk-VFSYVQX4.js} +1 -1
  145. package/dist/chunk-VQRTO7IS.js +290 -0
  146. package/dist/{chunk-OR7J7TIA.js → chunk-VT6P7FV4.js} +1 -1
  147. package/dist/{chunk-BEIYF4NS.js → chunk-W2J2RF5N.js} +3 -3
  148. package/dist/{chunk-Y5ASPRP7.js → chunk-WBJXJ2R4.js} +17 -13
  149. package/dist/chunk-WCGNCH3Q.js +72 -0
  150. package/dist/{chunk-2LJDLQNO.js → chunk-WJ2PZGRV.js} +1 -1
  151. package/dist/{chunk-AAPPSMPH.js → chunk-WZBUKC5N.js} +1 -1
  152. package/dist/{chunk-RO7EXVSJ.js → chunk-X4AFBL4N.js} +1 -1
  153. package/dist/{chunk-BR74NYEF.js → chunk-XV5HRIXG.js} +5 -5
  154. package/dist/chunk-XXJRZ75E.js +43 -0
  155. package/dist/{chunk-VDHUHXFF.js → chunk-XYG722JW.js} +2 -2
  156. package/dist/{chunk-MM7SWUQ4.js → chunk-YB7U4WTY.js} +4 -4
  157. package/dist/{chunk-RMRZXPUU.js → chunk-Z6H6Y4BS.js} +1 -1
  158. package/dist/{token-budget-UMHRRDBT.js → chunk-ZOVHXTGC.js} +2 -9
  159. package/dist/{chunk-HNLBHP6P.js → chunk-ZZXADKAP.js} +3 -3
  160. package/dist/{co-activation-OKAHEMPE.js → co-activation-WN25AJOC.js} +3 -2
  161. package/dist/{co-occurrence-IHSPB53O.js → co-occurrence-YP2Q3OEA.js} +5 -4
  162. package/dist/{code-context-index-KGY4LKCA.js → code-context-index-ZWONKBKX.js} +4 -4
  163. package/dist/{conversation-entity-extractor-KXJSHRGJ.js → conversation-entity-extractor-KYOBXNID.js} +2 -2
  164. package/dist/{crdt-sync-K2G3C6XY.js → crdt-sync-ZFIFL2QM.js} +1 -1
  165. package/dist/{crm-webhook-ERZSQ3CW.js → crm-webhook-DGPHULOO.js} +2 -2
  166. package/dist/{cto-delegation-gate-ZCJ53LBQ.js → cto-delegation-gate-OF2A3TSS.js} +12 -11
  167. package/dist/daemon-auth-N6P2MZAV.js +17 -0
  168. package/dist/{daemon-orchestration-V6HALVDS.js → daemon-orchestration-G4RRTPP7.js} +16 -15
  169. package/dist/daemon-ready-signal-3L2MJT7C.js +13 -0
  170. package/dist/{db-backup-VZHSFUVA.js → db-backup-EORG4LBO.js} +1 -1
  171. package/dist/{doc-graph-extractor-LQ2IFND2.js → doc-graph-extractor-APZS3DFD.js} +5 -4
  172. package/dist/{dreaming-QAKUASYV.js → dreaming-Q4E3WBGY.js} +13 -12
  173. package/dist/{exe-drift-H3UWNFFY.js → exe-drift-CI5R6GUT.js} +4 -3
  174. package/dist/{exe-export-MN5D4JMT.js → exe-export-HQIQASIT.js} +7 -6
  175. package/dist/{exe-import-IFFMEVD7.js → exe-import-ULZK56WC.js} +7 -6
  176. package/dist/{exe-key-RSZC72QK.js → exe-key-ILNSBGRN.js} +5 -4
  177. package/dist/{exe-snapshot-I622MPLS.js → exe-snapshot-RUZTWZOF.js} +16 -15
  178. package/dist/{factory-CTFAGZUA.js → factory-YHQZ6RZZ.js} +14 -6
  179. package/dist/{fast-db-init-QEFVT7Q3.js → fast-db-init-KNJRL7T3.js} +1 -1
  180. package/dist/{founder-context-3SOKEW76.js → founder-context-QCTMEK66.js} +2 -2
  181. package/dist/gateway/index.js +12 -11
  182. package/dist/{git-staleness-E7RPQA5U.js → git-staleness-KIA5YI4H.js} +3 -2
  183. package/dist/{git-task-sweep-D3A2C5BW.js → git-task-sweep-WH6QE7HL.js} +13 -12
  184. package/dist/{global-procedures-POG4V6IK.js → global-procedures-SYZZCGDS.js} +4 -3
  185. package/dist/{graph-auto-extract-E7KALNWA.js → graph-auto-extract-J2TIWZEE.js} +5 -4
  186. package/dist/{graph-rag-3RZN7JR3.js → graph-rag-HITZZ63L.js} +2 -2
  187. package/dist/hooks/bug-report-worker.js +15 -14
  188. package/dist/hooks/codex-stop-task-finalizer.js +15 -14
  189. package/dist/hooks/commit-complete.js +15 -14
  190. package/dist/hooks/error-recall.js +8 -7
  191. package/dist/hooks/exe-heartbeat-hook.js +4 -3
  192. package/dist/hooks/ingest-worker.js +4 -4
  193. package/dist/hooks/ingest.js +8 -7
  194. package/dist/hooks/instructions-loaded.js +5 -4
  195. package/dist/hooks/manifest.json +20 -20
  196. package/dist/hooks/notification.js +5 -4
  197. package/dist/hooks/post-compact.js +14 -13
  198. package/dist/hooks/post-tool-combined.js +7 -7
  199. package/dist/hooks/pre-compact.js +19 -18
  200. package/dist/hooks/pre-tool-use.js +18 -17
  201. package/dist/hooks/prompt-submit.js +28 -27
  202. package/dist/hooks/session-end.js +24 -23
  203. package/dist/hooks/session-start.js +46 -22
  204. package/dist/hooks/stop.js +22 -21
  205. package/dist/hooks/subagent-stop.js +14 -13
  206. package/dist/hooks/summary-worker.js +22 -21
  207. package/dist/index.js +25 -23
  208. package/dist/{installer-IXUX73JN.js → installer-3NB3IBHF.js} +10 -9
  209. package/dist/{installer-RCUPPZ7Y.js → installer-IIJFCTMH.js} +10 -9
  210. package/dist/{installer-HDD6OH5Z.js → installer-PSDYMGN7.js} +7 -6
  211. package/dist/lib/cloud-sync.js +14 -13
  212. package/dist/lib/consolidation.js +8 -7
  213. package/dist/lib/database.js +3 -2
  214. package/dist/lib/db-daemon-client.js +4 -4
  215. package/dist/lib/db.js +3 -2
  216. package/dist/lib/device-registry.js +3 -1
  217. package/dist/lib/embedder.js +4 -4
  218. package/dist/lib/employee-templates.js +5 -4
  219. package/dist/lib/employees.js +3 -2
  220. package/dist/lib/exe-daemon-client.js +3 -3
  221. package/dist/lib/exe-daemon.js +256 -406
  222. package/dist/lib/hybrid-search.js +6 -5
  223. package/dist/lib/identity.js +3 -2
  224. package/dist/lib/license.js +2 -2
  225. package/dist/lib/messaging.js +13 -12
  226. package/dist/lib/reminders.js +4 -3
  227. package/dist/lib/schedules.js +6 -5
  228. package/dist/lib/session-registry.js +5 -4
  229. package/dist/lib/skill-learning.js +7 -6
  230. package/dist/lib/store.js +7 -4
  231. package/dist/lib/task-router.js +4 -3
  232. package/dist/lib/tasks.js +14 -13
  233. package/dist/lib/tmux-routing.js +16 -11
  234. package/dist/lib/token-spend.js +4 -3
  235. package/dist/{license-gate-V2UCK4KJ.js → license-gate-7SDHCJUO.js} +3 -3
  236. package/dist/mcp/register-tools.js +74 -73
  237. package/dist/mcp/server.js +97 -79
  238. package/dist/mcp/tools/complete-reminder.js +5 -4
  239. package/dist/mcp/tools/create-reminder.js +5 -4
  240. package/dist/mcp/tools/create-task.js +16 -15
  241. package/dist/mcp/tools/deactivate-behavior.js +8 -7
  242. package/dist/mcp/tools/list-reminders.js +5 -4
  243. package/dist/mcp/tools/list-tasks.js +16 -15
  244. package/dist/mcp/tools/send-message.js +15 -14
  245. package/dist/mcp/tools/update-task.js +15 -14
  246. package/dist/{mcp-http-config-7LFFPNGV.js → mcp-http-config-QSOVFXHW.js} +4 -3
  247. package/dist/mcp-tool-surface-CSPFXL3F.js +15 -0
  248. package/dist/{memory-cards-BGI6MJRN.js → memory-cards-II67WFL2.js} +3 -2
  249. package/dist/{memory-graph-extractor-DTRRNWHZ.js → memory-graph-extractor-PM4Q2KJG.js} +6 -5
  250. package/dist/{memory-poisoning-defense-MOCWJK6S.js → memory-poisoning-defense-ECXSX7HK.js} +3 -2
  251. package/dist/{memory-queue-client-DD4E5SIZ.js → memory-queue-client-HLURQEV6.js} +4 -4
  252. package/dist/{memory-reflection-UKKTGZYR.js → memory-reflection-PXF6YFDU.js} +3 -2
  253. package/dist/{notifications-AMJ2K3MM.js → notifications-UP7WQGG4.js} +12 -11
  254. package/dist/{orchestration-events-MB4QVHTD.js → orchestration-events-PZLLPCKY.js} +4 -3
  255. package/dist/orchestration-health-read-EJWVUARG.js +191 -0
  256. package/dist/{orchestrator-M7DJH6TN.js → orchestrator-PUT45J4O.js} +14 -13
  257. package/dist/{pipeline-router-4LT5YG5P.js → pipeline-router-5CRWKESM.js} +4 -3
  258. package/dist/{plan-limits-ENS7OJWP.js → plan-limits-SH2NDFNX.js} +6 -5
  259. package/dist/{project-boot-6W5JPGSB.js → project-boot-2TCPDZ4S.js} +25 -1
  260. package/dist/{projection-worker-WWXZK7QD.js → projection-worker-HWY37MNC.js} +2 -2
  261. package/dist/{prospective-memory-VNGLPMS6.js → prospective-memory-FQSVMCGG.js} +3 -2
  262. package/dist/{reranker-6XBS55FA.js → reranker-AALRMGMM.js} +1 -1
  263. package/dist/{retrieval-health-ATX5TIQ2.js → retrieval-health-PNWJSJNG.js} +1 -1
  264. package/dist/{review-polling-E4ALHTQE.js → review-polling-65JZUE3T.js} +13 -12
  265. package/dist/runtime/index.js +24 -22
  266. package/dist/{session-events-3J6APMKN.js → session-events-EJ3OSAA6.js} +13 -12
  267. package/dist/session-kill-telemetry-3HGM7SNQ.js +63 -0
  268. package/dist/{session-scope-E54VIYTJ.js → session-scope-JGDYAMJO.js} +12 -11
  269. package/dist/{setup-wizard-XV736U5D.js → setup-wizard-44LMFM2C.js} +1 -1
  270. package/dist/shared-rate-limit-store-QZPQEVE2.js +80 -0
  271. package/dist/{skill-refinement-FTURVWFN.js → skill-refinement-DUOO6B7V.js} +3 -2
  272. package/dist/{stack-release-JZVTSBJJ.js → stack-release-XYMKU7NT.js} +53 -4
  273. package/dist/{stack-update-BIK2QHOE.js → stack-update-XHQJRJEP.js} +5 -3
  274. package/dist/{steward-gate-YGU4VXPP.js → steward-gate-6NWRDLX2.js} +4 -3
  275. package/dist/{task-enforcement-GY3VTY6L.js → task-enforcement-UOULTGFB.js} +12 -11
  276. package/dist/{task-scope-PYOK7OQ6.js → task-scope-P5STKYAC.js} +12 -11
  277. package/dist/{tasks-crud-HLJEJ2UU.js → tasks-crud-24HMTULR.js} +12 -11
  278. package/dist/{tasks-notify-NGS3DWUJ.js → tasks-notify-LAIU7UUI.js} +13 -12
  279. package/dist/{tasks-review-BP5V2X34.js → tasks-review-AFJAU2DY.js} +12 -11
  280. package/dist/{telemetry-upload-AXYPFAPS.js → telemetry-upload-DWFGC2XJ.js} +8 -7
  281. package/dist/token-budget-4RFZKWGH.js +16 -0
  282. package/dist/{tool-capability-index-RHPVMMDD.js → tool-capability-index-ZEXBWKUZ.js} +1 -1
  283. package/dist/{tool-telemetry-BLSVABFJ.js → tool-telemetry-BS5JXM5M.js} +1 -1
  284. package/dist/tui/App.js +21 -20
  285. package/dist/{tui-data-EYPOFYLS.js → tui-data-UNO5B7PU.js} +12 -11
  286. package/dist/{worker-gate-SMFOBMMX.js → worker-gate-C6CTTYMD.js} +1 -1
  287. package/dist/{workflow-engine-TDJZ3TXB.js → workflow-engine-4W2KYCDV.js} +2 -2
  288. package/dist/{worktree-XISIYRM4.js → worktree-2CXY6NEB.js} +5 -4
  289. package/dist/{worktree-sweep-AS6GAR6X.js → worktree-sweep-K3CJFSUL.js} +6 -5
  290. package/package.json +9 -4
  291. package/release-notes.json +17 -88
  292. package/stack.release.json +51 -4
  293. package/dist/chunk-PHOQAVTK.js +0 -42
  294. package/dist/daemon-auth-BK7ON5ZH.js +0 -13
  295. package/dist/session-kill-telemetry-KOAHLRBT.js +0 -31
  296. package/dist/{chunk-XDE5IGBX.js → chunk-2NS3QRMJ.js} +0 -0
  297. package/dist/{chunk-JTMKRUX6.js → chunk-A2YZG4AD.js} +0 -0
  298. package/dist/{chunk-UZATXREL.js → chunk-AE74NOE6.js} +0 -0
  299. package/dist/{chunk-LUGWK6QB.js → chunk-FF5DA4XP.js} +3 -3
  300. /package/dist/{chunk-BGOMFGSW.js → chunk-GWPICNSO.js} +0 -0
  301. /package/dist/{chunk-NLHUA3YB.js → chunk-I3DPCSDG.js} +0 -0
  302. /package/dist/{chunk-YM3367VC.js → chunk-J3SR5MGG.js} +0 -0
  303. /package/dist/{chunk-FKFVNV7X.js → chunk-K4BKJJ4F.js} +0 -0
  304. /package/dist/{chunk-PTDBHQX7.js → chunk-MQCTK6EF.js} +0 -0
  305. /package/dist/{chunk-GBV5PV5T.js → chunk-QNXM2HXW.js} +0 -0
  306. /package/dist/{chunk-GZSG2ZOX.js → chunk-YUBTHJVV.js} +0 -0
  307. /package/dist/{core-memory-4OM7LR77.js → core-memory-OC5ITKKV.js} +0 -0
  308. /package/dist/{entity-boost-SFHIRXT5.js → entity-boost-NF3LE6OJ.js} +0 -0
  309. /package/dist/{message-queue-client-QTC3VHJT.js → message-queue-client-4VDU6BZY.js} +0 -0
  310. /package/dist/{oauth-server-BPN55EJM.js → oauth-server-EWUL7DMD.js} +0 -0
  311. /package/dist/{wiki-acl-45SIGG4O.js → wiki-acl-CONNF6ES.js} +0 -0
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  exportBehaviorsForAgent
4
- } from "../chunk-XKGNKH6V.js";
5
- import "../chunk-N76VTMMF.js";
4
+ } from "../chunk-DFUCFLZH.js";
5
+ import "../chunk-PMEOSD6S.js";
6
6
  import {
7
7
  disposeStore,
8
8
  initStore
9
- } from "../chunk-Y5ASPRP7.js";
9
+ } from "../chunk-WBJXJ2R4.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-OTVEIJUQ.js";
12
- import "../chunk-PTDBHQX7.js";
12
+ import "../chunk-MQCTK6EF.js";
13
13
  import "../chunk-Y25OJWOQ.js";
14
14
  import {
15
15
  RUNTIME_TABLE
@@ -18,10 +18,11 @@ import "../chunk-MP2AFCGL.js";
18
18
  import {
19
19
  baseAgentName,
20
20
  loadEmployeesSync
21
- } from "../chunk-P3SIFDES.js";
21
+ } from "../chunk-SCYWCWKY.js";
22
22
  import "../chunk-2I23RPSI.js";
23
- import "../chunk-BGOMFGSW.js";
23
+ import "../chunk-GWPICNSO.js";
24
24
  import "../chunk-PNQDP3OA.js";
25
+ import "../chunk-VQRTO7IS.js";
25
26
  import "../chunk-7HLWBYH7.js";
26
27
  import "../chunk-FXU7JOXK.js";
27
28
  import "../chunk-Z42MXYWW.js";
@@ -223,7 +224,7 @@ async function main() {
223
224
  await initStore();
224
225
  behaviorsPath = await exportBehaviorsForAgent(baseAgent, "");
225
226
  try {
226
- const { loadGlobalProcedures, getGlobalProceduresBlock } = await import("../global-procedures-POG4V6IK.js");
227
+ const { loadGlobalProcedures, getGlobalProceduresBlock } = await import("../global-procedures-SYZZCGDS.js");
227
228
  await loadGlobalProcedures();
228
229
  const block = getGlobalProceduresBlock();
229
230
  if (block) globalProcedures = block;
@@ -272,8 +273,8 @@ async function main() {
272
273
  let codexProfileName = null;
273
274
  if (exeSessionName) {
274
275
  try {
275
- const { readOrCreateDaemonToken } = await import("../mcp-http-config-7LFFPNGV.js");
276
- const { mcpHttpUrl } = await import("../mcp-http-config-7LFFPNGV.js");
276
+ const { readOrCreateDaemonToken } = await import("../mcp-http-config-QSOVFXHW.js");
277
+ const { mcpHttpUrl } = await import("../mcp-http-config-QSOVFXHW.js");
277
278
  const token = readOrCreateDaemonToken();
278
279
  const profileContent = [
279
280
  `# Auto-generated per-session MCP config for ${memoryAgent} in ${exeSessionName}`,
@@ -302,12 +303,12 @@ async function main() {
302
303
  }
303
304
  }
304
305
  try {
305
- const { writeActiveAgent } = await import("../active-agent-GGQAP4QE.js");
306
+ const { writeActiveAgent } = await import("../active-agent-S5T2YMOR.js");
306
307
  writeActiveAgent(memoryAgent, empRole);
307
308
  } catch {
308
309
  }
309
310
  try {
310
- const { verifyCodexHooks, runCodexInstaller } = await import("../installer-RCUPPZ7Y.js");
311
+ const { verifyCodexHooks, runCodexInstaller } = await import("../installer-IIJFCTMH.js");
311
312
  if (!verifyCodexHooks()) {
312
313
  process.stderr.write("[exe-start-codex] hooks missing \u2014 registering now\n");
313
314
  await runCodexInstaller();
@@ -325,7 +326,7 @@ async function main() {
325
326
  `);
326
327
  if (WORKTREE_ROLES.has(empRole)) {
327
328
  try {
328
- const { ensureWorktree, parseInstanceLabel } = await import("../worktree-XISIYRM4.js");
329
+ const { ensureWorktree, parseInstanceLabel } = await import("../worktree-2CXY6NEB.js");
329
330
  const { base, instance } = parseInstanceLabel(worktreeName);
330
331
  worktreePath = ensureWorktree(process.cwd(), base, instance);
331
332
  if (worktreePath) {
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  exportBehaviorsForAgent
4
- } from "../chunk-XKGNKH6V.js";
5
- import "../chunk-N76VTMMF.js";
4
+ } from "../chunk-DFUCFLZH.js";
5
+ import "../chunk-PMEOSD6S.js";
6
6
  import {
7
7
  disposeStore,
8
8
  initStore
9
- } from "../chunk-Y5ASPRP7.js";
9
+ } from "../chunk-WBJXJ2R4.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-OTVEIJUQ.js";
12
- import "../chunk-PTDBHQX7.js";
12
+ import "../chunk-MQCTK6EF.js";
13
13
  import "../chunk-Y25OJWOQ.js";
14
14
  import {
15
15
  RUNTIME_TABLE
@@ -18,10 +18,11 @@ import "../chunk-MP2AFCGL.js";
18
18
  import {
19
19
  baseAgentName,
20
20
  loadEmployeesSync
21
- } from "../chunk-P3SIFDES.js";
21
+ } from "../chunk-SCYWCWKY.js";
22
22
  import "../chunk-2I23RPSI.js";
23
- import "../chunk-BGOMFGSW.js";
23
+ import "../chunk-GWPICNSO.js";
24
24
  import "../chunk-PNQDP3OA.js";
25
+ import "../chunk-VQRTO7IS.js";
25
26
  import "../chunk-7HLWBYH7.js";
26
27
  import "../chunk-FXU7JOXK.js";
27
28
  import "../chunk-Z42MXYWW.js";
@@ -180,12 +181,12 @@ async function main() {
180
181
  })();
181
182
  process.env.AGENT_ROLE = empRole;
182
183
  try {
183
- const { writeActiveAgent } = await import("../active-agent-GGQAP4QE.js");
184
+ const { writeActiveAgent } = await import("../active-agent-S5T2YMOR.js");
184
185
  writeActiveAgent(memoryAgent, empRole);
185
186
  } catch {
186
187
  }
187
188
  try {
188
- const { verifyOpenCodeHooks, runOpenCodeInstaller } = await import("../installer-IXUX73JN.js");
189
+ const { verifyOpenCodeHooks, runOpenCodeInstaller } = await import("../installer-3NB3IBHF.js");
189
190
  if (!verifyOpenCodeHooks()) {
190
191
  process.stderr.write("[exe-start-opencode] hooks missing \u2014 registering now\n");
191
192
  await runOpenCodeInstaller();
@@ -1,35 +1,36 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  status
4
- } from "../chunk-YMSWCERY.js";
5
- import "../chunk-KHZQVLNZ.js";
6
- import "../chunk-OVKNFTCL.js";
7
- import "../chunk-YNALY3SX.js";
4
+ } from "../chunk-U63BZI2B.js";
5
+ import "../chunk-QE7UVQDP.js";
6
+ import "../chunk-HED6D5KR.js";
7
+ import "../chunk-RZJ6DXVE.js";
8
8
  import "../chunk-4JERP7NT.js";
9
9
  import "../chunk-4FVVJ7ME.js";
10
10
  import "../chunk-E23LNUWJ.js";
11
- import "../chunk-2LJDLQNO.js";
11
+ import "../chunk-WJ2PZGRV.js";
12
+ import "../chunk-SSTLTIF3.js";
12
13
  import "../chunk-KOO3J5PV.js";
13
14
  import "../chunk-22TVSRQQ.js";
14
- import "../chunk-SSTLTIF3.js";
15
- import "../chunk-WHOT5NZ7.js";
15
+ import "../chunk-OR3TAZL3.js";
16
16
  import "../chunk-QB5JOGPK.js";
17
17
  import "../chunk-NGP6LSV2.js";
18
- import "../chunk-VDHUHXFF.js";
18
+ import "../chunk-XYG722JW.js";
19
19
  import "../chunk-CVYC6DUW.js";
20
20
  import "../chunk-OPU3NYOO.js";
21
21
  import "../chunk-GJV3WDWM.js";
22
22
  import "../chunk-MP2AFCGL.js";
23
- import "../chunk-AYMSIV7X.js";
23
+ import "../chunk-NIZQ3CIS.js";
24
24
  import "../chunk-HYZV25LY.js";
25
- import "../chunk-P3SIFDES.js";
25
+ import "../chunk-SCYWCWKY.js";
26
26
  import "../chunk-2I23RPSI.js";
27
- import "../chunk-BGOMFGSW.js";
27
+ import "../chunk-GWPICNSO.js";
28
28
  import "../chunk-PNQDP3OA.js";
29
+ import "../chunk-VQRTO7IS.js";
29
30
  import "../chunk-7HLWBYH7.js";
30
31
  import "../chunk-FXU7JOXK.js";
31
- import "../chunk-VME3UH4D.js";
32
- import "../chunk-CXKR5Z5F.js";
32
+ import "../chunk-JV225JBX.js";
33
+ import "../chunk-2EJ636HI.js";
33
34
  import "../chunk-DFIOOK5R.js";
34
35
  import "../chunk-65DBIEM2.js";
35
36
  import "../chunk-6Y4B3QF6.js";
@@ -4,11 +4,11 @@ import {
4
4
  main,
5
5
  runHealth,
6
6
  runTest
7
- } from "../chunk-MM7SWUQ4.js";
8
- import "../chunk-2XZ6X3PJ.js";
7
+ } from "../chunk-YB7U4WTY.js";
9
8
  import "../chunk-MMRUBN3I.js";
10
- import "../chunk-VME3UH4D.js";
11
- import "../chunk-CXKR5Z5F.js";
9
+ import "../chunk-2XZ6X3PJ.js";
10
+ import "../chunk-JV225JBX.js";
11
+ import "../chunk-2EJ636HI.js";
12
12
  import "../chunk-DFIOOK5R.js";
13
13
  import "../chunk-65DBIEM2.js";
14
14
  import "../chunk-MLKGABMK.js";
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-KHZQVLNZ.js";
4
+ } from "../chunk-QE7UVQDP.js";
5
5
  import {
6
6
  getClient,
7
7
  loadEmployees
8
- } from "../chunk-P3SIFDES.js";
8
+ } from "../chunk-SCYWCWKY.js";
9
9
  import "../chunk-2I23RPSI.js";
10
- import "../chunk-BGOMFGSW.js";
10
+ import "../chunk-GWPICNSO.js";
11
11
  import "../chunk-PNQDP3OA.js";
12
+ import "../chunk-VQRTO7IS.js";
12
13
  import "../chunk-7HLWBYH7.js";
13
14
  import "../chunk-FXU7JOXK.js";
14
15
  import "../chunk-DFIOOK5R.js";
@@ -0,0 +1,237 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ isMainModule
4
+ } from "../chunk-6Y4B3QF6.js";
5
+ import "../chunk-MLKGABMK.js";
6
+
7
+ // src/bin/exe-timers.ts
8
+ import { existsSync, readFileSync, statSync, openSync, readSync, closeSync } from "fs";
9
+ import path from "path";
10
+ import os from "os";
11
+ function logDir() {
12
+ return path.join(os.homedir(), ".exe-os", "logs");
13
+ }
14
+ function logPaths(baseName) {
15
+ const dir = logDir();
16
+ return [path.join(dir, baseName), path.join(dir, `${baseName}.1`)];
17
+ }
18
+ function readRecords(files, maxBytes) {
19
+ const records = [];
20
+ for (const file of files) {
21
+ try {
22
+ if (!existsSync(file)) continue;
23
+ const size = statSync(file).size;
24
+ let raw;
25
+ if (size > maxBytes) {
26
+ const buf = Buffer.alloc(maxBytes);
27
+ const fd = openSync(file, "r");
28
+ try {
29
+ readSync(fd, buf, 0, maxBytes, size - maxBytes);
30
+ } finally {
31
+ closeSync(fd);
32
+ }
33
+ raw = buf.toString("utf8");
34
+ const nl = raw.indexOf("\n");
35
+ if (nl >= 0) raw = raw.slice(nl + 1);
36
+ } else {
37
+ raw = readFileSync(file, "utf8");
38
+ }
39
+ for (const line of raw.split("\n")) {
40
+ const trimmed = line.trim();
41
+ if (!trimmed) continue;
42
+ try {
43
+ const rec = JSON.parse(trimmed);
44
+ if (rec && typeof rec === "object") records.push(rec);
45
+ } catch {
46
+ }
47
+ }
48
+ } catch {
49
+ }
50
+ }
51
+ return records;
52
+ }
53
+ function p95(values) {
54
+ if (values.length === 0) return 0;
55
+ const sorted = [...values].sort((a, b) => a - b);
56
+ const idx = Math.min(sorted.length - 1, Math.ceil(sorted.length * 0.95) - 1);
57
+ return sorted[Math.max(0, idx)] ?? 0;
58
+ }
59
+ function median(values) {
60
+ if (values.length === 0) return 0;
61
+ const sorted = [...values].sort((a, b) => a - b);
62
+ const mid = Math.floor(sorted.length / 2);
63
+ return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
64
+ }
65
+ function classify(maxMs, p95Ms) {
66
+ if (maxMs >= 5e3) return "blocked";
67
+ if (maxMs >= 500 || p95Ms >= 500) return "slow";
68
+ return "healthy";
69
+ }
70
+ function buildTimerReport(opts = {}) {
71
+ const maxBytes = opts.maxBytesPerFile ?? 4 * 1024 * 1024;
72
+ const healthFiles = logPaths("daemon-health.log");
73
+ const sources = healthFiles.filter((f) => existsSync(f));
74
+ const records = readRecords(healthFiles, maxBytes);
75
+ const bySamples = /* @__PURE__ */ new Map();
76
+ let oldestMs = null;
77
+ let newestMs = null;
78
+ for (const rec of records) {
79
+ if (rec.event !== "process_stats") continue;
80
+ const data = rec.data;
81
+ if (!data) continue;
82
+ const type = data.type;
83
+ if (type !== "timer_duration" && type !== "timer_slow") continue;
84
+ const timer = typeof data.timer === "string" ? data.timer : null;
85
+ const durationMs = typeof data.durationMs === "number" ? data.durationMs : null;
86
+ if (timer === null || durationMs === null || !Number.isFinite(durationMs)) continue;
87
+ let atMs = null;
88
+ if (typeof rec.ts === "string") {
89
+ const parsed = Date.parse(rec.ts);
90
+ if (Number.isFinite(parsed)) {
91
+ atMs = parsed;
92
+ oldestMs = oldestMs === null ? parsed : Math.min(oldestMs, parsed);
93
+ newestMs = newestMs === null ? parsed : Math.max(newestMs, parsed);
94
+ }
95
+ }
96
+ const arr = bySamples.get(timer) ?? [];
97
+ arr.push({ durationMs, atMs });
98
+ bySamples.set(timer, arr);
99
+ }
100
+ const timers = [...bySamples.entries()].map(([timer, samples]) => {
101
+ const durations = samples.map((s) => s.durationMs);
102
+ const sum = durations.reduce((a, b) => a + b, 0);
103
+ const avgMs = Math.round(sum / durations.length);
104
+ const maxMs = Math.max(...durations);
105
+ const p95Ms = p95(durations);
106
+ const stamped = samples.filter((s) => s.atMs !== null).sort((a, b) => a.atMs - b.atMs);
107
+ const lastAtMs = stamped.length > 0 ? stamped[stamped.length - 1].atMs : null;
108
+ const lastMs = stamped.length > 0 ? stamped[stamped.length - 1].durationMs : samples[samples.length - 1].durationMs;
109
+ let cadenceMs = null;
110
+ if (stamped.length >= 2) {
111
+ const gaps = [];
112
+ for (let i = 1; i < stamped.length; i++) {
113
+ const gap = stamped[i].atMs - stamped[i - 1].atMs;
114
+ if (gap > 0) gaps.push(gap);
115
+ }
116
+ if (gaps.length > 0) cadenceMs = Math.round(median(gaps));
117
+ }
118
+ const nextRunMs = lastAtMs !== null && cadenceMs !== null ? lastAtMs + cadenceMs : null;
119
+ return {
120
+ timer,
121
+ samples: samples.length,
122
+ lastMs,
123
+ avgMs,
124
+ maxMs,
125
+ p95Ms,
126
+ lastAtMs,
127
+ cadenceMs,
128
+ nextRunMs,
129
+ status: classify(maxMs, p95Ms)
130
+ };
131
+ });
132
+ const rank = { blocked: 0, slow: 1, healthy: 2 };
133
+ timers.sort((a, b) => rank[a.status] - rank[b.status] || b.maxMs - a.maxMs || a.timer.localeCompare(b.timer));
134
+ return {
135
+ logsFound: sources.length > 0,
136
+ sources,
137
+ timers,
138
+ window: { oldestMs, newestMs }
139
+ };
140
+ }
141
+ function ms(n) {
142
+ if (n >= 1e3) return `${(n / 1e3).toFixed(1)}s`;
143
+ return `${Math.round(n)}ms`;
144
+ }
145
+ function shortClock(epochMs) {
146
+ if (epochMs === null) return "\u2014";
147
+ return new Date(epochMs).toISOString().replace("T", " ").slice(0, 16);
148
+ }
149
+ function nextRunLabel(nextRunMs, now) {
150
+ if (nextRunMs === null) return "\u2014";
151
+ const delta = nextRunMs - now;
152
+ if (delta <= 0) return "due";
153
+ if (delta < 6e4) return `in ${Math.round(delta / 1e3)}s`;
154
+ if (delta < 36e5) return `in ${Math.round(delta / 6e4)}m`;
155
+ return `in ${(delta / 36e5).toFixed(1)}h`;
156
+ }
157
+ function statusIndicator(status) {
158
+ return status === "blocked" ? "\u{1F534}" : status === "slow" ? "\u{1F7E0}" : "\u{1F7E2}";
159
+ }
160
+ function formatTimerReport(report, now = Date.now()) {
161
+ const lines = [];
162
+ lines.push("");
163
+ lines.push("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
164
+ lines.push("\u2551 Timer Health Dashboard \u2551");
165
+ lines.push("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
166
+ lines.push("");
167
+ if (!report.logsFound) {
168
+ lines.push("\u{1F7E2} No daemon health log found.");
169
+ lines.push(" ~/.exe-os/logs/daemon-health.log has no timer data yet");
170
+ lines.push(" (fresh install, or the daemon has not run any background timers).");
171
+ lines.push("");
172
+ return lines.join("\n");
173
+ }
174
+ if (report.timers.length === 0) {
175
+ lines.push("\u{1F7E2} No timer durations recorded yet (no background ticks observed).");
176
+ lines.push("");
177
+ return lines.join("\n");
178
+ }
179
+ if (report.window.oldestMs !== null && report.window.newestMs !== null) {
180
+ lines.push(`Window: ${shortClock(report.window.oldestMs)} \u2192 ${shortClock(report.window.newestMs)}`);
181
+ lines.push("");
182
+ }
183
+ const head = ` ${"timer".padEnd(24)} ${"last".padStart(8)} ${"avg".padStart(8)} ${"max".padStart(8)} ${"p95".padStart(8)} ${"next run".padEnd(16)} status`;
184
+ lines.push(head);
185
+ lines.push(" " + "\u2500".repeat(head.length - 3));
186
+ for (const t of report.timers) {
187
+ const next = nextRunLabel(t.nextRunMs, now);
188
+ lines.push(
189
+ `${statusIndicator(t.status)} ${t.timer.padEnd(24)} ${ms(t.lastMs).padStart(8)} ${ms(t.avgMs).padStart(8)} ${ms(t.maxMs).padStart(8)} ${ms(t.p95Ms).padStart(8)} ${next.padEnd(16)} ${t.status} (${t.samples})`
190
+ );
191
+ }
192
+ lines.push("");
193
+ const blocked = report.timers.filter((t) => t.status === "blocked").length;
194
+ const slow = report.timers.filter((t) => t.status === "slow").length;
195
+ const overall = blocked > 0 ? "\u{1F534}" : slow > 0 ? "\u{1F7E0}" : "\u{1F7E2}";
196
+ lines.push(`${overall} ${report.timers.length} timer(s): ${blocked} blocked, ${slow} slow, ${report.timers.length - blocked - slow} healthy`);
197
+ lines.push("");
198
+ return lines.join("\n");
199
+ }
200
+ function main() {
201
+ const args = process.argv.slice(2);
202
+ if (args.includes("--help") || args.includes("-h")) {
203
+ process.stdout.write(
204
+ [
205
+ "exe-timers \u2014 daemon timer health dashboard (read-only)",
206
+ "",
207
+ "Usage:",
208
+ " exe-timers Print the per-timer health table",
209
+ " exe-timers --json Emit the report as JSON",
210
+ "",
211
+ "Reads ~/.exe-os/logs/daemon-health.log timer_duration/timer_slow records.",
212
+ ""
213
+ ].join("\n") + "\n"
214
+ );
215
+ return;
216
+ }
217
+ const report = buildTimerReport();
218
+ if (args.includes("--json")) {
219
+ process.stdout.write(JSON.stringify(report, null, 2) + "\n");
220
+ return;
221
+ }
222
+ process.stdout.write(formatTimerReport(report) + "\n");
223
+ }
224
+ if (isMainModule(import.meta.url)) {
225
+ try {
226
+ main();
227
+ process.exit(0);
228
+ } catch (err) {
229
+ process.stderr.write(`[exe-timers] FATAL: ${err instanceof Error ? err.message : String(err)}
230
+ `);
231
+ process.exit(1);
232
+ }
233
+ }
234
+ export {
235
+ buildTimerReport,
236
+ formatTimerReport
237
+ };
@@ -1,37 +1,38 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  sweepWorktrees
4
- } from "../chunk-7ZWC5HVG.js";
4
+ } from "../chunk-MTIJ2NXY.js";
5
5
  import {
6
6
  sweepTasks
7
- } from "../chunk-H7ZNSQ2E.js";
8
- import "../chunk-OVKNFTCL.js";
9
- import "../chunk-YNALY3SX.js";
7
+ } from "../chunk-62UZWGFX.js";
8
+ import "../chunk-HED6D5KR.js";
9
+ import "../chunk-RZJ6DXVE.js";
10
10
  import "../chunk-4JERP7NT.js";
11
11
  import "../chunk-4FVVJ7ME.js";
12
12
  import "../chunk-E23LNUWJ.js";
13
- import "../chunk-2LJDLQNO.js";
13
+ import "../chunk-WJ2PZGRV.js";
14
+ import "../chunk-SSTLTIF3.js";
14
15
  import "../chunk-KOO3J5PV.js";
15
16
  import "../chunk-22TVSRQQ.js";
16
- import "../chunk-SSTLTIF3.js";
17
- import "../chunk-WHOT5NZ7.js";
17
+ import "../chunk-OR3TAZL3.js";
18
18
  import "../chunk-QB5JOGPK.js";
19
19
  import "../chunk-NGP6LSV2.js";
20
- import "../chunk-VDHUHXFF.js";
20
+ import "../chunk-XYG722JW.js";
21
21
  import "../chunk-CVYC6DUW.js";
22
22
  import "../chunk-OPU3NYOO.js";
23
23
  import "../chunk-GJV3WDWM.js";
24
24
  import "../chunk-MP2AFCGL.js";
25
- import "../chunk-AYMSIV7X.js";
25
+ import "../chunk-NIZQ3CIS.js";
26
26
  import "../chunk-HYZV25LY.js";
27
- import "../chunk-P3SIFDES.js";
27
+ import "../chunk-SCYWCWKY.js";
28
28
  import "../chunk-2I23RPSI.js";
29
- import "../chunk-BGOMFGSW.js";
29
+ import "../chunk-GWPICNSO.js";
30
30
  import "../chunk-PNQDP3OA.js";
31
+ import "../chunk-VQRTO7IS.js";
31
32
  import "../chunk-7HLWBYH7.js";
32
33
  import "../chunk-FXU7JOXK.js";
33
- import "../chunk-VME3UH4D.js";
34
- import "../chunk-CXKR5Z5F.js";
34
+ import "../chunk-JV225JBX.js";
35
+ import "../chunk-2EJ636HI.js";
35
36
  import "../chunk-DFIOOK5R.js";
36
37
  import "../chunk-65DBIEM2.js";
37
38
  import "../chunk-MLKGABMK.js";
@@ -5,24 +5,25 @@ import {
5
5
  } from "../chunk-S6HVQF27.js";
6
6
  import {
7
7
  extractBatch
8
- } from "../chunk-LUGWK6QB.js";
9
- import "../chunk-GUMRIUI5.js";
8
+ } from "../chunk-FF5DA4XP.js";
10
9
  import "../chunk-I7AW4237.js";
10
+ import "../chunk-GUMRIUI5.js";
11
11
  import {
12
12
  disposeStore,
13
13
  initStore
14
- } from "../chunk-Y5ASPRP7.js";
14
+ } from "../chunk-WBJXJ2R4.js";
15
15
  import "../chunk-CHCA3ZM2.js";
16
16
  import "../chunk-OTVEIJUQ.js";
17
- import "../chunk-PTDBHQX7.js";
17
+ import "../chunk-MQCTK6EF.js";
18
18
  import "../chunk-Y25OJWOQ.js";
19
19
  import "../chunk-MP2AFCGL.js";
20
20
  import {
21
21
  getClient
22
- } from "../chunk-P3SIFDES.js";
22
+ } from "../chunk-SCYWCWKY.js";
23
23
  import "../chunk-2I23RPSI.js";
24
- import "../chunk-BGOMFGSW.js";
24
+ import "../chunk-GWPICNSO.js";
25
25
  import "../chunk-PNQDP3OA.js";
26
+ import "../chunk-VQRTO7IS.js";
26
27
  import "../chunk-7HLWBYH7.js";
27
28
  import "../chunk-FXU7JOXK.js";
28
29
  import "../chunk-Z42MXYWW.js";
@@ -5,21 +5,22 @@ import {
5
5
  } from "../chunk-3OEVDGIY.js";
6
6
  import {
7
7
  fastDbInit
8
- } from "../chunk-KHZQVLNZ.js";
8
+ } from "../chunk-QE7UVQDP.js";
9
9
  import {
10
10
  disposeStore
11
- } from "../chunk-Y5ASPRP7.js";
11
+ } from "../chunk-WBJXJ2R4.js";
12
12
  import "../chunk-CHCA3ZM2.js";
13
13
  import "../chunk-OTVEIJUQ.js";
14
- import "../chunk-PTDBHQX7.js";
14
+ import "../chunk-MQCTK6EF.js";
15
15
  import "../chunk-Y25OJWOQ.js";
16
16
  import "../chunk-MP2AFCGL.js";
17
17
  import {
18
18
  getClient
19
- } from "../chunk-P3SIFDES.js";
19
+ } from "../chunk-SCYWCWKY.js";
20
20
  import "../chunk-2I23RPSI.js";
21
- import "../chunk-BGOMFGSW.js";
21
+ import "../chunk-GWPICNSO.js";
22
22
  import "../chunk-PNQDP3OA.js";
23
+ import "../chunk-VQRTO7IS.js";
23
24
  import "../chunk-7HLWBYH7.js";
24
25
  import "../chunk-FXU7JOXK.js";
25
26
  import "../chunk-Z42MXYWW.js";
@@ -1,24 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  registerImportConversations
4
- } from "../chunk-PJTRAFL4.js";
5
- import "../chunk-HNLBHP6P.js";
6
- import "../chunk-LUGWK6QB.js";
7
- import "../chunk-GUMRIUI5.js";
4
+ } from "../chunk-V4BW5HFQ.js";
5
+ import "../chunk-ZZXADKAP.js";
6
+ import "../chunk-FF5DA4XP.js";
8
7
  import "../chunk-I7AW4237.js";
9
- import "../chunk-Y5ASPRP7.js";
8
+ import "../chunk-GUMRIUI5.js";
9
+ import "../chunk-WBJXJ2R4.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-OTVEIJUQ.js";
12
- import "../chunk-PTDBHQX7.js";
13
- import "../chunk-LE7CDIOA.js";
12
+ import "../chunk-MQCTK6EF.js";
13
+ import "../chunk-BUOMSIXH.js";
14
14
  import "../chunk-Y25OJWOQ.js";
15
15
  import "../chunk-CVYC6DUW.js";
16
16
  import "../chunk-GJV3WDWM.js";
17
17
  import "../chunk-MP2AFCGL.js";
18
- import "../chunk-P3SIFDES.js";
18
+ import "../chunk-SCYWCWKY.js";
19
19
  import "../chunk-2I23RPSI.js";
20
- import "../chunk-BGOMFGSW.js";
20
+ import "../chunk-GWPICNSO.js";
21
21
  import "../chunk-PNQDP3OA.js";
22
+ import "../chunk-VQRTO7IS.js";
22
23
  import "../chunk-7HLWBYH7.js";
23
24
  import "../chunk-FXU7JOXK.js";
24
25
  import "../chunk-Z42MXYWW.js";
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ enforceCanonicalHeapCap,
3
4
  mergeUserEnvVars,
4
5
  parseAnthropicKeyFromSystemdUnit,
5
6
  parseEnvVarsFromPlist,
@@ -8,11 +9,13 @@ import {
8
9
  resolveAnthropicKeyEnvBlock,
9
10
  resolveAnthropicKeySystemdLine,
10
11
  resolveAnthropicKeyValue
11
- } from "../chunk-VLSYKMCJ.js";
12
- import "../chunk-RQUHAXMM.js";
12
+ } from "../chunk-4RJJ5FJ2.js";
13
+ import "../chunk-7XGDTKHX.js";
14
+ import "../chunk-PHFPIUWU.js";
13
15
  import "../chunk-6Y4B3QF6.js";
14
16
  import "../chunk-MLKGABMK.js";
15
17
  export {
18
+ enforceCanonicalHeapCap,
16
19
  mergeUserEnvVars,
17
20
  parseAnthropicKeyFromSystemdUnit,
18
21
  parseEnvVarsFromPlist,