@askexenow/exe-os 0.9.255 → 0.9.259

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 (272) hide show
  1. package/deploy/compose/.env.customer.example +13 -13
  2. package/deploy/compose/.env.example +8 -8
  3. package/deploy/compose/docker-compose.yml +18 -18
  4. package/deploy/compose/generate-env.ts +22 -18
  5. package/deploy/compose/init-db.sql +221 -20
  6. package/deploy/stack-manifests/v0.9.json +1207 -1136
  7. package/dist/{active-agent-DTZ6VJIR.js → active-agent-IGZXTTV4.js} +3 -3
  8. package/dist/{active-agent-7QNK5CJZ.js → active-agent-OYUXMTHS.js} +3 -3
  9. package/dist/{agentic-ontology-UZK33N6I.js → agentic-ontology-5WT23SLZ.js} +1 -1
  10. package/dist/{backfill-metadata-R7PNZ5TX.js → backfill-metadata-EG52U3GF.js} +4 -4
  11. package/dist/{behaviors-G6QHSQBN.js → behaviors-2TZCFJLU.js} +3 -3
  12. package/dist/bin/age-ontology-load.js +2 -2
  13. package/dist/bin/agentic-ontology-backfill.js +5 -5
  14. package/dist/bin/agentic-reflection-backfill.js +6 -6
  15. package/dist/bin/agentic-semantic-label.js +5 -5
  16. package/dist/bin/backfill-conversations.js +6 -5
  17. package/dist/bin/backfill-responses.js +6 -5
  18. package/dist/bin/backfill-vectors.js +7 -6
  19. package/dist/bin/bulk-sync-postgres.js +6 -6
  20. package/dist/bin/cleanup-stale-review-tasks.js +9 -9
  21. package/dist/bin/cli.js +17 -17
  22. package/dist/bin/deferred-daemon-restart.js +4 -1
  23. package/dist/bin/exe-agent-config.js +2 -2
  24. package/dist/bin/exe-agent.js +4 -4
  25. package/dist/bin/exe-assign.js +8 -7
  26. package/dist/bin/exe-boot.js +16 -16
  27. package/dist/bin/exe-call.js +4 -4
  28. package/dist/bin/exe-cloud.js +4 -4
  29. package/dist/bin/exe-dispatch.js +9 -9
  30. package/dist/bin/exe-doctor.js +1 -1
  31. package/dist/bin/exe-export-behaviors.js +7 -7
  32. package/dist/bin/exe-forget.js +6 -6
  33. package/dist/bin/exe-gateway.js +9 -9
  34. package/dist/bin/exe-heartbeat.js +9 -9
  35. package/dist/bin/exe-kill.js +12 -12
  36. package/dist/bin/exe-launch-agent.js +16 -16
  37. package/dist/bin/exe-new-employee.js +6 -6
  38. package/dist/bin/exe-pending-messages.js +11 -10
  39. package/dist/bin/exe-pending-notifications.js +9 -9
  40. package/dist/bin/exe-pending-reviews.js +11 -9
  41. package/dist/bin/exe-rename.js +4 -4
  42. package/dist/bin/exe-review.js +11 -11
  43. package/dist/bin/exe-search.js +5 -5
  44. package/dist/bin/exe-session-cleanup.js +14 -14
  45. package/dist/bin/exe-settings.js +4 -4
  46. package/dist/bin/exe-start-codex.js +11 -11
  47. package/dist/bin/exe-start-opencode.js +8 -8
  48. package/dist/bin/exe-status.js +10 -10
  49. package/dist/bin/exe-support.js +3 -1
  50. package/dist/bin/exe-team.js +3 -3
  51. package/dist/bin/git-sweep.js +71 -11
  52. package/dist/bin/graph-backfill.js +4 -4
  53. package/dist/bin/graph-export.js +5 -5
  54. package/dist/bin/graph-layer-benchmark.js +7 -7
  55. package/dist/bin/import-history.js +7 -7
  56. package/dist/bin/install.js +12 -9
  57. package/dist/bin/intercom-check.js +4 -4
  58. package/dist/bin/mcp-sessions.js +2 -2
  59. package/dist/bin/orchestration-metrics.js +4 -4
  60. package/dist/bin/postgres-agentic-reflection-backfill.js +7 -7
  61. package/dist/bin/postgres-agentic-semantic-backfill.js +7 -7
  62. package/dist/bin/scan-tasks.js +9 -9
  63. package/dist/bin/setup.js +1 -1
  64. package/dist/bin/shard-migrate.js +4 -4
  65. package/dist/bin/stack-update.js +20 -3
  66. package/dist/bin/vps-health-gate.js +1 -1
  67. package/dist/{capacity-monitor-QMKII67L.js → capacity-monitor-CTFWWTCR.js} +10 -10
  68. package/dist/{catchup-brief-CNISNLV7.js → catchup-brief-UML47LXI.js} +11 -11
  69. package/dist/{chunk-QP4FHME2.js → chunk-235ZCOYB.js} +18 -6
  70. package/dist/{chunk-2NEQQCRC.js → chunk-25JAXHON.js} +1 -1
  71. package/dist/{chunk-MU6ESLYL.js → chunk-2PFNATXD.js} +1 -1
  72. package/dist/chunk-2XZ6X3PJ.js +13 -0
  73. package/dist/chunk-3XX3CDKF.js +9 -0
  74. package/dist/{chunk-ZTB6E2ZL.js → chunk-4FGTT26Q.js} +1 -1
  75. package/dist/{chunk-YYSQAM4W.js → chunk-4TYAHVDI.js} +8 -8
  76. package/dist/{chunk-2QKNXGII.js → chunk-4VECWOUO.js} +2 -2
  77. package/dist/{chunk-YXMXP45V.js → chunk-57C3MZPQ.js} +2 -2
  78. package/dist/{chunk-FTNNNAMH.js → chunk-5JYCTIQD.js} +1 -1
  79. package/dist/{chunk-CS267UMH.js → chunk-5LDTCWYX.js} +79 -19
  80. package/dist/{chunk-FQVITYVF.js → chunk-6D2IZ5MB.js} +2 -2
  81. package/dist/{chunk-ZG3HADWE.js → chunk-7UJRF4WF.js} +1 -1
  82. package/dist/{chunk-JFVITKXI.js → chunk-A2UPDE3J.js} +1 -1
  83. package/dist/{chunk-KOCQAMAM.js → chunk-ANYOAZCZ.js} +238 -5
  84. package/dist/{chunk-PSQNT5DS.js → chunk-AQS2B3HC.js} +8 -8
  85. package/dist/{chunk-ABNALOLM.js → chunk-BGEXTWGR.js} +3 -3
  86. package/dist/{chunk-LPK5JPME.js → chunk-BPZL5YOM.js} +1 -1
  87. package/dist/{chunk-RLDOG7DI.js → chunk-C6SSCNOC.js} +2516 -2289
  88. package/dist/{chunk-JGEGEOVP.js → chunk-COKTAJUZ.js} +1 -1
  89. package/dist/{chunk-MRZE5IOP.js → chunk-CXOX7TRG.js} +1 -1
  90. package/dist/{chunk-6LFFIEDM.js → chunk-DU64OESH.js} +1 -1
  91. package/dist/{chunk-LYIUESG2.js → chunk-DYURFBPS.js} +10 -10
  92. package/dist/{chunk-X3SS45PO.js → chunk-FPXZY3FY.js} +1 -1
  93. package/dist/{chunk-TVTRMINO.js → chunk-FUGZF7VR.js} +1 -1
  94. package/dist/{chunk-O7SFCX5B.js → chunk-GB4FI66P.js} +2 -2
  95. package/dist/{chunk-VGWQBI76.js → chunk-GBR4MAAK.js} +1 -1
  96. package/dist/chunk-GH4LVBQM.js +371 -0
  97. package/dist/{chunk-AIXZ5O7U.js → chunk-GIHMDOSK.js} +1 -1
  98. package/dist/{chunk-RDCE652I.js → chunk-HDWVXSGO.js} +1 -1
  99. package/dist/{chunk-RF54NGPJ.js → chunk-IJ7R3MXE.js} +3 -5
  100. package/dist/{chunk-R7FBOZT5.js → chunk-ISL3NSVX.js} +1 -1
  101. package/dist/{chunk-5B2AEXVA.js → chunk-IVSRRIRG.js} +1 -1
  102. package/dist/{chunk-SD2R3SEA.js → chunk-J3YNCJ4A.js} +1 -1
  103. package/dist/{chunk-5IZYSS3M.js → chunk-JE4C74EE.js} +4 -4
  104. package/dist/{chunk-VRVHIVUE.js → chunk-KSR2PNRW.js} +2 -2
  105. package/dist/{chunk-LL2ARYTZ.js → chunk-L3PY4NFQ.js} +1 -1
  106. package/dist/{chunk-VFATLVRX.js → chunk-L5VPUOB6.js} +1 -1
  107. package/dist/{chunk-3VLFVOM7.js → chunk-LRKJGSNH.js} +2 -2
  108. package/dist/{chunk-4FT3SQAS.js → chunk-LVY74L2J.js} +2 -2
  109. package/dist/{chunk-X4T7LR2X.js → chunk-M7PZFYHE.js} +2 -2
  110. package/dist/{chunk-CIX64N7D.js → chunk-MGTVPIEZ.js} +1 -1
  111. package/dist/{chunk-MXCBORCC.js → chunk-MKTEGZ37.js} +3 -3
  112. package/dist/chunk-MMRUBN3I.js +36 -0
  113. package/dist/{chunk-4MONXPWR.js → chunk-MPXLF7TA.js} +1 -1
  114. package/dist/{chunk-6QMXKKFD.js → chunk-N27CTUFU.js} +1 -1
  115. package/dist/{chunk-YDHPC4PX.js → chunk-N4ES27RI.js} +3 -3
  116. package/dist/{chunk-WIRJ574R.js → chunk-NGQQRGLP.js} +2 -2
  117. package/dist/{chunk-AQOCHSIR.js → chunk-OCJ5GZKV.js} +4 -4
  118. package/dist/{chunk-O477L4LV.js → chunk-OSPS5N2I.js} +1 -1
  119. package/dist/{chunk-5WEH43HH.js → chunk-PQHA6X6Y.js} +1 -1
  120. package/dist/{chunk-DJYIBHN5.js → chunk-PQQTSNXS.js} +3 -3
  121. package/dist/{chunk-LGFB67MY.js → chunk-Q3GLQDZI.js} +1 -1
  122. package/dist/{chunk-7GR7VBBW.js → chunk-QUC27OCW.js} +1 -1
  123. package/dist/{chunk-5NBOFYJG.js → chunk-QYNFWFFH.js} +4 -4
  124. package/dist/{chunk-X7I6NLIA.js → chunk-T2EUNNUX.js} +5 -5
  125. package/dist/{chunk-VRWOLLKN.js → chunk-T4NFOOPB.js} +2 -2
  126. package/dist/{chunk-2YJSDJEH.js → chunk-TZPHTI5Q.js} +1 -1
  127. package/dist/{chunk-CQSFIQGN.js → chunk-UOZ5KUNN.js} +1 -1
  128. package/dist/{chunk-5R4R743Q.js → chunk-V2UVWYHO.js} +17 -15
  129. package/dist/{chunk-VKCZ3OGM.js → chunk-VD676VIC.js} +4 -4
  130. package/dist/{chunk-USLVSLQ5.js → chunk-VDCPKJUQ.js} +1 -1
  131. package/dist/{chunk-Y7NMPQXZ.js → chunk-VLX6AHTD.js} +8 -8
  132. package/dist/{chunk-ITPIBVSG.js → chunk-WMZTSHNX.js} +83 -1
  133. package/dist/{chunk-5U7WB4YG.js → chunk-WVBZ3QBR.js} +2 -2
  134. package/dist/{chunk-3EMZZZNU.js → chunk-X2RKYKTP.js} +1 -1
  135. package/dist/{chunk-XTIHYH64.js → chunk-YY2BCIAP.js} +2 -2
  136. package/dist/{chunk-Z6GHDYQI.js → chunk-Z2AEOVEZ.js} +30 -6
  137. package/dist/{chunk-PHTRZQR4.js → chunk-ZBDAFYDD.js} +4 -4
  138. package/dist/{chunk-E4CCKWZN.js → chunk-ZKFTDL4M.js} +1 -1
  139. package/dist/{co-activation-AIVMI5U2.js → co-activation-UNVL5JCP.js} +2 -2
  140. package/dist/{co-occurrence-L6QOQTJB.js → co-occurrence-ETAVWYVE.js} +2 -2
  141. package/dist/{code-context-index-DYHYVJHX.js → code-context-index-DCQYAYA2.js} +3 -2
  142. package/dist/{crdt-sync-YBMDPFNT.js → crdt-sync-AH7N6QOE.js} +1 -1
  143. package/dist/{crm-webhook-QO3ZESKR.js → crm-webhook-R6546T3Y.js} +2 -2
  144. package/dist/{cto-delegation-gate-UFPVFLIW.js → cto-delegation-gate-VB4TMZ3I.js} +8 -8
  145. package/dist/{daemon-orchestration-6XAISQ7B.js → daemon-orchestration-YAJKIL6Q.js} +12 -12
  146. package/dist/{db-backup-7UMCTS44.js → db-backup-2RG6VHT7.js} +11 -3
  147. package/dist/{dreaming-FJ75QVGZ.js → dreaming-WMBTSXGD.js} +9 -9
  148. package/dist/{exe-drift-OH3WV2ZQ.js → exe-drift-MQZGYHEN.js} +3 -3
  149. package/dist/{exe-export-UYKYNVBU.js → exe-export-E4BDIHOC.js} +5 -5
  150. package/dist/{exe-import-Q4FNSMLJ.js → exe-import-IWAD4HN6.js} +5 -5
  151. package/dist/{exe-key-22LOIIUX.js → exe-key-L2RV7XJX.js} +2 -2
  152. package/dist/{exe-snapshot-J7CL6QEL.js → exe-snapshot-IOGN4ARV.js} +12 -12
  153. package/dist/{fast-db-init-QXGL2PKQ.js → fast-db-init-GCY3F74H.js} +1 -1
  154. package/dist/gateway/index.js +8 -8
  155. package/dist/{git-staleness-YVWDCFIE.js → git-staleness-BQIFNZIU.js} +2 -2
  156. package/dist/{git-task-sweep-RRCOTTIS.js → git-task-sweep-GSKS6WKR.js} +9 -9
  157. package/dist/{global-procedures-FCGWAFES.js → global-procedures-3DJUA5OX.js} +3 -3
  158. package/dist/{graph-auto-extract-RUQC5IIS.js → graph-auto-extract-2I44WRDY.js} +2 -2
  159. package/dist/hooks/bug-report-worker.js +11 -11
  160. package/dist/hooks/codex-stop-task-finalizer.js +11 -11
  161. package/dist/hooks/commit-complete.js +11 -11
  162. package/dist/hooks/error-recall.js +6 -6
  163. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  164. package/dist/hooks/ingest-worker.js +3 -2
  165. package/dist/hooks/ingest.js +6 -6
  166. package/dist/hooks/instructions-loaded.js +4 -4
  167. package/dist/hooks/manifest.json +20 -20
  168. package/dist/hooks/notification.js +4 -4
  169. package/dist/hooks/post-compact.js +10 -10
  170. package/dist/hooks/post-tool-combined.js +6 -6
  171. package/dist/hooks/pre-compact.js +14 -13
  172. package/dist/hooks/pre-tool-use.js +14 -14
  173. package/dist/hooks/prompt-submit.js +22 -22
  174. package/dist/hooks/session-end.js +19 -18
  175. package/dist/hooks/session-start.js +11 -11
  176. package/dist/hooks/stop.js +70 -17
  177. package/dist/hooks/subagent-stop.js +10 -10
  178. package/dist/hooks/summary-worker.js +17 -16
  179. package/dist/index.js +17 -17
  180. package/dist/{installer-7SMJC3SX.js → installer-6MQCAHUG.js} +5 -5
  181. package/dist/{installer-GFZVC43I.js → installer-TCMPFSSP.js} +5 -5
  182. package/dist/{installer-34DCTB5B.js → installer-ZY2BKTEO.js} +5 -5
  183. package/dist/lib/cloud-sync.js +4 -4
  184. package/dist/lib/consolidation.js +5 -5
  185. package/dist/lib/database.js +2 -2
  186. package/dist/lib/db-daemon-client.js +58 -13
  187. package/dist/lib/db.js +2 -2
  188. package/dist/lib/embedder.js +3 -2
  189. package/dist/lib/employee-templates.js +4 -4
  190. package/dist/lib/employees.js +2 -2
  191. package/dist/lib/exe-daemon-client.js +2 -1
  192. package/dist/lib/exe-daemon.js +255 -104
  193. package/dist/lib/hybrid-search.js +5 -5
  194. package/dist/lib/identity.js +2 -2
  195. package/dist/lib/messaging.js +9 -9
  196. package/dist/lib/reminders.js +3 -3
  197. package/dist/lib/schedules.js +5 -5
  198. package/dist/lib/session-registry.js +4 -4
  199. package/dist/lib/skill-learning.js +4 -4
  200. package/dist/lib/store.js +4 -4
  201. package/dist/lib/task-router.js +3 -3
  202. package/dist/lib/tasks.js +10 -10
  203. package/dist/lib/tmux-routing.js +8 -8
  204. package/dist/lib/token-spend.js +3 -3
  205. package/dist/mcp/register-tools.js +59 -56
  206. package/dist/mcp/server.js +60 -57
  207. package/dist/mcp/tools/complete-reminder.js +4 -4
  208. package/dist/mcp/tools/create-reminder.js +4 -4
  209. package/dist/mcp/tools/create-task.js +12 -12
  210. package/dist/mcp/tools/deactivate-behavior.js +5 -5
  211. package/dist/mcp/tools/list-reminders.js +4 -4
  212. package/dist/mcp/tools/list-tasks.js +12 -12
  213. package/dist/mcp/tools/send-message.js +11 -11
  214. package/dist/mcp/tools/update-task.js +11 -11
  215. package/dist/{mcp-http-config-MZMHKMJC.js → mcp-http-config-VUDZ3D5D.js} +3 -3
  216. package/dist/{memory-cards-3SFXU6IP.js → memory-cards-ZOOPC2WF.js} +2 -2
  217. package/dist/{memory-graph-extractor-T57YQQCW.js → memory-graph-extractor-RRQMUBMI.js} +3 -3
  218. package/dist/{memory-poisoning-defense-O53AHMTZ.js → memory-poisoning-defense-UQMNLG6H.js} +2 -2
  219. package/dist/{memory-queue-client-ITWQIFSD.js → memory-queue-client-TPQDAA4D.js} +3 -2
  220. package/dist/{memory-reflection-YPP2JC2S.js → memory-reflection-GSGXAGXV.js} +2 -2
  221. package/dist/{notifications-BETWD6EK.js → notifications-ZKGLZVCU.js} +8 -8
  222. package/dist/{orchestration-events-A5D52NXX.js → orchestration-events-7RMWC5SS.js} +3 -3
  223. package/dist/{orchestrator-X564XCWC.js → orchestrator-A6MX2OHA.js} +10 -10
  224. package/dist/{pipeline-router-RVHLL7UA.js → pipeline-router-6ZBYJD2U.js} +3 -3
  225. package/dist/{plan-limits-ANAVC6PM.js → plan-limits-4XH4A7IA.js} +3 -3
  226. package/dist/{project-boot-ENMCAL7G.js → project-boot-7ZEIDWUG.js} +3 -2
  227. package/dist/{projection-worker-O3HBG5QK.js → projection-worker-YKKBNQZT.js} +130 -51
  228. package/dist/{reranker-SRJL4IWB.js → reranker-DN2A3H6O.js} +1 -1
  229. package/dist/{review-polling-5JTTHHEO.js → review-polling-PK3CY4NI.js} +9 -9
  230. package/dist/runtime/index.js +11 -11
  231. package/dist/{session-events-RCSYHQQ2.js → session-events-IYU6FYHH.js} +9 -9
  232. package/dist/{session-kill-telemetry-AL3H4ELS.js → session-kill-telemetry-G2VV4CAH.js} +3 -3
  233. package/dist/{session-scope-ZB4SR3AX.js → session-scope-DHTVH3D4.js} +8 -8
  234. package/dist/{setup-wizard-HXTADFXI.js → setup-wizard-IA5ISHQ2.js} +1 -1
  235. package/dist/{skill-refinement-TT4VDYYW.js → skill-refinement-6PBAFLWP.js} +2 -2
  236. package/dist/{stack-release-7WDKQOCO.js → stack-release-NW7MV3WV.js} +41 -11
  237. package/dist/{stack-update-F4CQWMGV.js → stack-update-5SM62R3O.js} +3 -1
  238. package/dist/{steward-gate-HSV67KLF.js → steward-gate-EQV6CZKY.js} +3 -3
  239. package/dist/support-outbox-SZVLHHZG.js +295 -0
  240. package/dist/{task-enforcement-A6AZTYAN.js → task-enforcement-2LS5DOXK.js} +8 -8
  241. package/dist/{task-scope-XKNAY5S7.js → task-scope-AKF3CSWO.js} +8 -8
  242. package/dist/{tasks-crud-F732BVOE.js → tasks-crud-KOIA5SAH.js} +8 -8
  243. package/dist/{tasks-notify-LJ65U7DF.js → tasks-notify-7ZTE4ZQM.js} +9 -9
  244. package/dist/{tasks-review-Y5F4HRAR.js → tasks-review-VMMMAK2Y.js} +8 -8
  245. package/dist/{telemetry-upload-HVYO6FL3.js → telemetry-upload-YLW4NAUF.js} +15 -8
  246. package/dist/{token-budget-VODGJYKX.js → token-budget-NA4OLFNP.js} +2 -2
  247. package/dist/{tool-capability-index-PZWWVABO.js → tool-capability-index-C73KVY5O.js} +1 -1
  248. package/dist/{tool-telemetry-5BSTF3P6.js → tool-telemetry-OVI5KL4S.js} +1 -1
  249. package/dist/tui/App.js +16 -16
  250. package/dist/{tui-data-EHJWRNRZ.js → tui-data-5NT24CC5.js} +8 -8
  251. package/dist/{worker-gate-4AS4K7G4.js → worker-gate-AQLJUQ5G.js} +1 -1
  252. package/dist/{workflow-engine-BXGNFNUW.js → workflow-engine-TRGGUNIZ.js} +2 -2
  253. package/dist/{worktree-3N5BPITS.js → worktree-NK7GZNEA.js} +4 -4
  254. package/dist/worktree-sweep-5XVZCH6A.js +18 -0
  255. package/package.json +3 -2
  256. package/release-notes.json +32 -33
  257. package/stack.release.json +48 -48
  258. package/dist/prediction-log-DOEOHDHS.js +0 -120
  259. package/dist/support-outbox-KEJ73I3F.js +0 -206
  260. /package/dist/{chunk-AWVDA2FL.js → chunk-2H3FVAN3.js} +0 -0
  261. /package/dist/{chunk-VPHOOQLR.js → chunk-3GHTBVZO.js} +0 -0
  262. /package/dist/{chunk-CCPCIW4Z.js → chunk-BBPRL2MP.js} +0 -0
  263. /package/dist/{chunk-X2E6W3DB.js → chunk-BRSI3FD6.js} +0 -0
  264. /package/dist/{chunk-Y2FVN7CX.js → chunk-EYLQRPHF.js} +0 -0
  265. /package/dist/{chunk-4S5TEBXD.js → chunk-H6QJT5O5.js} +0 -0
  266. /package/dist/{chunk-FCII2MMI.js → chunk-J5CAYOJU.js} +0 -0
  267. /package/dist/{chunk-LY2DYTDL.js → chunk-RFJESVEL.js} +0 -0
  268. /package/dist/{chunk-GBHQ5TXO.js → chunk-UOOCGJUE.js} +0 -0
  269. /package/dist/{core-memory-WFP2L52F.js → core-memory-VZFTGOFE.js} +0 -0
  270. /package/dist/{entity-boost-RTYXAOWV.js → entity-boost-OAB2PZQP.js} +0 -0
  271. /package/dist/{message-queue-client-2CACBUA4.js → message-queue-client-YTKTHAYO.js} +0 -0
  272. /package/dist/{wiki-acl-MS7QLQCR.js → wiki-acl-UCPOROPR.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-5U7WB4YG.js";
4
- import "./chunk-ITPIBVSG.js";
3
+ } from "./chunk-WVBZ3QBR.js";
4
+ import "./chunk-WMZTSHNX.js";
5
5
  import "./chunk-FXU7JOXK.js";
6
6
  import "./chunk-VXIMSRTO.js";
7
7
  import "./chunk-LYH5HE24.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ToolCapabilityIndex,
3
3
  getToolCapabilityIndex
4
- } from "./chunk-CCPCIW4Z.js";
4
+ } from "./chunk-BBPRL2MP.js";
5
5
  import "./chunk-FXU7JOXK.js";
6
6
  import "./chunk-MLKGABMK.js";
7
7
  export {
@@ -5,7 +5,7 @@ import {
5
5
  startToolTelemetryFlush,
6
6
  stopToolTelemetryFlush,
7
7
  wrapServerWithTelemetry
8
- } from "./chunk-4S5TEBXD.js";
8
+ } from "./chunk-H6QJT5O5.js";
9
9
  import "./chunk-MLKGABMK.js";
10
10
  export {
11
11
  getToolUsageStats,
package/dist/tui/App.js CHANGED
@@ -1,36 +1,36 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getSessionPrompt
4
- } from "../chunk-X3SS45PO.js";
5
- import "../chunk-FTNNNAMH.js";
4
+ } from "../chunk-FPXZY3FY.js";
5
+ import "../chunk-5JYCTIQD.js";
6
6
  import "../chunk-K77WC6HA.js";
7
7
  import {
8
8
  sessionScopeFilter
9
- } from "../chunk-CS267UMH.js";
10
- import "../chunk-6LFFIEDM.js";
9
+ } from "../chunk-5LDTCWYX.js";
10
+ import "../chunk-DU64OESH.js";
11
11
  import "../chunk-5CHYEKMH.js";
12
12
  import "../chunk-4JERP7NT.js";
13
- import "../chunk-SD2R3SEA.js";
13
+ import "../chunk-J3YNCJ4A.js";
14
14
  import "../chunk-MVW62NIZ.js";
15
15
  import "../chunk-OYNKIAVW.js";
16
16
  import "../chunk-CX6GL3ZJ.js";
17
- import "../chunk-USLVSLQ5.js";
17
+ import "../chunk-VDCPKJUQ.js";
18
18
  import "../chunk-XJUUWHVN.js";
19
19
  import "../chunk-NGP6LSV2.js";
20
- import "../chunk-VFATLVRX.js";
20
+ import "../chunk-L5VPUOB6.js";
21
21
  import "../chunk-CVYC6DUW.js";
22
22
  import "../chunk-OPU3NYOO.js";
23
23
  import "../chunk-GJV3WDWM.js";
24
24
  import {
25
25
  orgBus
26
26
  } from "../chunk-MP2AFCGL.js";
27
- import "../chunk-R7FBOZT5.js";
27
+ import "../chunk-ISL3NSVX.js";
28
28
  import "../chunk-HYZV25LY.js";
29
29
  import {
30
30
  DEFAULT_COORDINATOR_TEMPLATE_NAME,
31
31
  isCoordinatorName
32
- } from "../chunk-5U7WB4YG.js";
33
- import "../chunk-ITPIBVSG.js";
32
+ } from "../chunk-WVBZ3QBR.js";
33
+ import "../chunk-WMZTSHNX.js";
34
34
  import "../chunk-FXU7JOXK.js";
35
35
  import "../chunk-MOZ2YQ54.js";
36
36
  import "../chunk-VXIMSRTO.js";
@@ -7402,7 +7402,7 @@ function useOrchestrator(enabled = true) {
7402
7402
  let cancelled = false;
7403
7403
  async function init() {
7404
7404
  try {
7405
- const { MultiAgentOrchestrator } = await import("../orchestrator-X564XCWC.js");
7405
+ const { MultiAgentOrchestrator } = await import("../orchestrator-A6MX2OHA.js");
7406
7406
  const { getCoordinatorName, isCoordinatorRole, loadEmployees } = await import("../lib/employees.js");
7407
7407
  const { isExeSession } = await import("../lib/tmux-routing.js");
7408
7408
  const { listTmuxSessions, inTmux } = await import("../lib/tmux-status.js");
@@ -7443,7 +7443,7 @@ function useOrchestrator(enabled = true) {
7443
7443
  setTotalInProgress(health.totalInProgress);
7444
7444
  try {
7445
7445
  const { getClient } = await import("../lib/database.js");
7446
- const { sessionScopeFilter: sessionScopeFilter2 } = await import("../task-scope-XKNAY5S7.js");
7446
+ const { sessionScopeFilter: sessionScopeFilter2 } = await import("../task-scope-AKF3CSWO.js");
7447
7447
  const client = getClient();
7448
7448
  const uoScope = sessionScopeFilter2();
7449
7449
  const result = await client.execute({
@@ -7475,7 +7475,7 @@ function useOrchestrator(enabled = true) {
7475
7475
  const spawnSession = useCallback5(
7476
7476
  async (agentId) => {
7477
7477
  try {
7478
- const { createTaskCore } = await import("../tasks-crud-F732BVOE.js");
7478
+ const { createTaskCore } = await import("../tasks-crud-KOIA5SAH.js");
7479
7479
  const { ensureEmployee } = await import("../lib/tmux-routing.js");
7480
7480
  const { getCoordinatorName } = await import("../lib/employees.js");
7481
7481
  await createTaskCore({
@@ -8097,7 +8097,7 @@ function TasksView({ onBack }) {
8097
8097
  const { withTrace } = await import("../telemetry-43X3GT3R.js");
8098
8098
  return withTrace("tui.tasks.loadTasks", async () => {
8099
8099
  try {
8100
- const { loadTaskList } = await import("../tui-data-EHJWRNRZ.js");
8100
+ const { loadTaskList } = await import("../tui-data-5NT24CC5.js");
8101
8101
  const tasks = await loadTaskList();
8102
8102
  setAllTasks(
8103
8103
  tasks.map((task) => ({
@@ -8930,7 +8930,7 @@ function TeamView({ onBack, onViewSessions }) {
8930
8930
  let projectsByEmployee = /* @__PURE__ */ new Map();
8931
8931
  let currentTaskByEmployee = /* @__PURE__ */ new Map();
8932
8932
  try {
8933
- const { loadTeamBadgeCounts, loadTeamDetailMetrics } = await import("../tui-data-EHJWRNRZ.js");
8933
+ const { loadTeamBadgeCounts, loadTeamDetailMetrics } = await import("../tui-data-5NT24CC5.js");
8934
8934
  setBadgeInFlight(true);
8935
8935
  const badgeCountsPromise = loadTeamBadgeCounts();
8936
8936
  const detailsPromise = loadTeamDetailMetrics(roster.map((emp) => emp.name));
@@ -9296,7 +9296,7 @@ function WikiView({ onBack }) {
9296
9296
  }
9297
9297
  setSearchLoading(true);
9298
9298
  try {
9299
- const { searchWikiMemoryRows } = await import("../tui-data-EHJWRNRZ.js");
9299
+ const { searchWikiMemoryRows } = await import("../tui-data-5NT24CC5.js");
9300
9300
  setSearchResults(await searchWikiMemoryRows(query));
9301
9301
  } catch {
9302
9302
  setSearchResults([]);
@@ -1,27 +1,27 @@
1
1
  import {
2
2
  sessionScopeFilter
3
- } from "./chunk-CS267UMH.js";
4
- import "./chunk-6LFFIEDM.js";
3
+ } from "./chunk-5LDTCWYX.js";
4
+ import "./chunk-DU64OESH.js";
5
5
  import "./chunk-5CHYEKMH.js";
6
6
  import "./chunk-4JERP7NT.js";
7
- import "./chunk-SD2R3SEA.js";
7
+ import "./chunk-J3YNCJ4A.js";
8
8
  import "./chunk-MVW62NIZ.js";
9
9
  import "./chunk-OYNKIAVW.js";
10
10
  import "./chunk-CX6GL3ZJ.js";
11
- import "./chunk-USLVSLQ5.js";
11
+ import "./chunk-VDCPKJUQ.js";
12
12
  import "./chunk-XJUUWHVN.js";
13
13
  import "./chunk-NGP6LSV2.js";
14
- import "./chunk-VFATLVRX.js";
14
+ import "./chunk-L5VPUOB6.js";
15
15
  import "./chunk-CVYC6DUW.js";
16
16
  import "./chunk-OPU3NYOO.js";
17
17
  import "./chunk-GJV3WDWM.js";
18
18
  import "./chunk-MP2AFCGL.js";
19
- import "./chunk-R7FBOZT5.js";
19
+ import "./chunk-ISL3NSVX.js";
20
20
  import "./chunk-HYZV25LY.js";
21
21
  import {
22
22
  getClient
23
- } from "./chunk-5U7WB4YG.js";
24
- import "./chunk-ITPIBVSG.js";
23
+ } from "./chunk-WVBZ3QBR.js";
24
+ import "./chunk-WMZTSHNX.js";
25
25
  import "./chunk-FXU7JOXK.js";
26
26
  import "./chunk-MOZ2YQ54.js";
27
27
  import "./chunk-VXIMSRTO.js";
@@ -6,7 +6,7 @@ import {
6
6
  releaseBackfillLock,
7
7
  tryAcquireBackfillLock,
8
8
  tryAcquireWorkerSlot
9
- } from "./chunk-RDCE652I.js";
9
+ } from "./chunk-HDWVXSGO.js";
10
10
  import "./chunk-VXIMSRTO.js";
11
11
  import "./chunk-LYH5HE24.js";
12
12
  import "./chunk-MLKGABMK.js";
@@ -10,8 +10,8 @@ import {
10
10
  persistWorkflows,
11
11
  runWorkflow,
12
12
  startWorkflow
13
- } from "./chunk-MU6ESLYL.js";
14
- import "./chunk-VPHOOQLR.js";
13
+ } from "./chunk-2PFNATXD.js";
14
+ import "./chunk-3GHTBVZO.js";
15
15
  import "./chunk-MLKGABMK.js";
16
16
  export {
17
17
  advanceWorkflow,
@@ -6,10 +6,10 @@ import {
6
6
  isWorktreeDirty,
7
7
  worktreeBranch,
8
8
  worktreePath
9
- } from "./chunk-6LFFIEDM.js";
10
- import "./chunk-USLVSLQ5.js";
11
- import "./chunk-5U7WB4YG.js";
12
- import "./chunk-ITPIBVSG.js";
9
+ } from "./chunk-DU64OESH.js";
10
+ import "./chunk-VDCPKJUQ.js";
11
+ import "./chunk-WVBZ3QBR.js";
12
+ import "./chunk-WMZTSHNX.js";
13
13
  import "./chunk-FXU7JOXK.js";
14
14
  import "./chunk-VXIMSRTO.js";
15
15
  import "./chunk-LYH5HE24.js";
@@ -0,0 +1,18 @@
1
+ import {
2
+ cleanupAgentWorktree,
3
+ discoverRepoPaths,
4
+ sweepWorktrees
5
+ } from "./chunk-GH4LVBQM.js";
6
+ import "./chunk-DU64OESH.js";
7
+ import "./chunk-VDCPKJUQ.js";
8
+ import "./chunk-WVBZ3QBR.js";
9
+ import "./chunk-WMZTSHNX.js";
10
+ import "./chunk-FXU7JOXK.js";
11
+ import "./chunk-VXIMSRTO.js";
12
+ import "./chunk-LYH5HE24.js";
13
+ import "./chunk-MLKGABMK.js";
14
+ export {
15
+ cleanupAgentWorktree,
16
+ discoverRepoPaths,
17
+ sweepWorktrees
18
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.255",
3
+ "version": "0.9.259",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -92,7 +92,8 @@
92
92
  "prepublishOnly": "npm run typecheck && npm run build && npm run guard:esm-require && node dist/bin/customer-readiness.js && node dist/bin/pre-publish.js",
93
93
  "test:publish": "npx vitest run --maxWorkers=4 --exclude 'tests/tui/**' --exclude 'tests/lib/tmux-routing.test.ts' --exclude 'tests/lib/intercom-routing.test.ts' --exclude 'tests/gateway/**' --exclude 'tests/installer/setup-wizard.test.ts' --exclude 'tests/mcp/ingest-document.test.ts' --exclude 'tests/lib/hybrid-search.test.ts' --exclude 'tests/lib/worker-gate.test.ts'",
94
94
  "benchmark:longmemeval": "npx tsx tests/benchmarks/longmemeval.ts",
95
- "guard:esm-require": "node scripts/check-no-runtime-require.mjs"
95
+ "guard:esm-require": "node scripts/check-no-runtime-require.mjs",
96
+ "test:stack-sim": "node scripts/stack-sim.mjs"
96
97
  },
97
98
  "dependencies": {
98
99
  "@anthropic-ai/sdk": "^0.95.2",
@@ -1,65 +1,64 @@
1
1
  {
2
- "current": "0.9.255",
2
+ "current": "0.9.259",
3
3
  "notes": {
4
- "0.9.255": {
5
- "version": "0.9.255",
6
- "date": "2026-06-09",
7
- "features": [],
8
- "fixes": [
9
- "image verification trusts CI success when GHCR returns 401/403"
4
+ "0.9.259": {
5
+ "version": "0.9.259",
6
+ "date": "2026-06-10",
7
+ "features": [
8
+ "GoTrue JWT auth for dashboard (Gap #32)"
10
9
  ],
10
+ "fixes": [],
11
11
  "security": [],
12
- "other": [],
12
+ "other": [
13
+ "release exe-os 0.9.259"
14
+ ],
13
15
  "migration_notes": []
14
16
  },
15
- "0.9.252": {
16
- "version": "0.9.252",
17
- "date": "2026-06-09",
17
+ "0.9.258": {
18
+ "version": "0.9.258",
19
+ "date": "2026-06-10",
18
20
  "features": [],
19
21
  "fixes": [
20
- "filter stack-release chores from release notes"
22
+ "align filtered.conversations init schema with projection-worker source_ref dedup",
23
+ "keep projection-worker empty-queue test compatible with startup schema self-heal"
21
24
  ],
22
25
  "security": [],
23
26
  "other": [],
24
- "migration_notes": []
27
+ "migration_notes": [
28
+ "Fresh stack DBs now create filtered.conversations.source_ref with UNIQUE(platform, source_ref); existing stacks self-heal on projection-worker startup."
29
+ ]
25
30
  },
26
- "0.9.250": {
27
- "version": "0.9.250",
31
+ "0.9.256": {
32
+ "version": "0.9.256",
28
33
  "date": "2026-06-09",
29
34
  "features": [],
30
- "fixes": [
31
- "create schema in daemon polling init",
32
- "keep release-note generation idempotent"
33
- ],
35
+ "fixes": [],
34
36
  "security": [],
35
- "other": [],
37
+ "other": [
38
+ "bump v0.9.256 — all images verified on GHCR"
39
+ ],
36
40
  "migration_notes": []
37
41
  },
38
- "0.9.249": {
39
- "version": "0.9.249",
42
+ "0.9.255": {
43
+ "version": "0.9.255",
40
44
  "date": "2026-06-09",
41
45
  "features": [],
42
46
  "fixes": [
43
- "gateway.json bootstrap in setup.sh prevent empty config on fresh deploy"
47
+ "image verification trusts CI success when GHCR returns 401/403"
44
48
  ],
45
49
  "security": [],
46
- "other": [
47
- "bump v0.9.249 release notes",
48
- "cover gateway config bootstrap in setup"
49
- ],
50
+ "other": [],
50
51
  "migration_notes": []
51
52
  },
52
- "0.9.248": {
53
- "version": "0.9.248",
53
+ "0.9.252": {
54
+ "version": "0.9.252",
54
55
  "date": "2026-06-09",
55
56
  "features": [],
56
57
  "fixes": [
57
- "CRDT default OFF, lid-close recovery, MCP session over-count"
58
+ "filter stack-release chores from release notes"
58
59
  ],
59
60
  "security": [],
60
- "other": [
61
- "cover MCP autoreconnect warning suppression"
62
- ],
61
+ "other": [],
63
62
  "migration_notes": []
64
63
  }
65
64
  }
@@ -1,51 +1,51 @@
1
1
  {
2
- "$schema": "https://updates.askexe.com/schemas/stack.release.schema.json",
3
- "schemaVersion": 1,
4
- "repo": "AskExe/exe-os",
5
- "service": "exe-os",
6
- "packageName": "@askexenow/exe-os",
7
- "version": "0.9.255",
8
- "image": "ghcr.io/askexe/exe-os:v0.9.255",
9
- "imageEnv": "EXE_OS_IMAGE_TAG",
10
- "stackParticipation": {
11
- "required": true,
12
- "compatibleStack": ">=0.9.0 <1.0.0",
13
- "health": [
14
- {
15
- "type": "http",
16
- "url": "http://127.0.0.1:8765/health"
17
- }
18
- ],
19
- "smokeTests": [
20
- {
21
- "name": "exe healthcheck",
22
- "command": "exe-os healthcheck"
23
- },
24
- {
25
- "name": "mcp startup",
26
- "command": "node dist/mcp/server.js --help",
27
- "optional": true
28
- }
29
- ],
30
- "migrations": {
31
- "command": "npm run build",
32
- "rollback": "Restore previous EXE_OS_IMAGE_TAG and restart exe-os; local SQLCipher memory data is not overwritten by updates."
33
- },
34
- "config": {
35
- "envExample": "deploy/compose/.env.example",
36
- "requiredEnv": [
37
- "EXE_OS_IMAGE_TAG",
38
- "EXED_MCP_TOKEN",
39
- "EXED_DEVICE_ID"
40
- ]
41
- },
42
- "breakingChanges": [],
43
- "dataSovereignty": "Customer-local memory/tasks/behaviors stay in SQLCipher/local storage. Updates must not overwrite roster, identity, behavior, or local memory files.",
44
- "releaseLine": "v0.9 private/customer pilot; v1.0 is public-beta stable.",
45
- "highGhostStack": "0.9.9",
46
- "deploymentScope": "customer"
2
+ "$schema": "https://updates.askexe.com/schemas/stack.release.schema.json",
3
+ "schemaVersion": 1,
4
+ "repo": "AskExe/exe-os",
5
+ "service": "exe-os",
6
+ "packageName": "@askexenow/exe-os",
7
+ "version": "0.9.258",
8
+ "image": "ghcr.io/askexe/exe-os:v0.9.258",
9
+ "imageEnv": "EXE_OS_IMAGE_TAG",
10
+ "stackParticipation": {
11
+ "required": true,
12
+ "compatibleStack": ">=0.9.0 <1.0.0",
13
+ "health": [
14
+ {
15
+ "type": "http",
16
+ "url": "http://127.0.0.1:8765/health"
17
+ }
18
+ ],
19
+ "smokeTests": [
20
+ {
21
+ "name": "exe healthcheck",
22
+ "command": "exe-os healthcheck"
23
+ },
24
+ {
25
+ "name": "mcp startup",
26
+ "command": "node dist/mcp/server.js --help",
27
+ "optional": true
28
+ }
29
+ ],
30
+ "migrations": {
31
+ "command": "npm run build",
32
+ "rollback": "Restore previous EXE_OS_IMAGE_TAG and restart exe-os; local SQLCipher memory data is not overwritten by updates."
47
33
  },
48
- "deploymentScope": "customer",
34
+ "config": {
35
+ "envExample": "deploy/compose/.env.example",
36
+ "requiredEnv": [
37
+ "EXE_OS_IMAGE_TAG",
38
+ "EXED_MCP_TOKEN",
39
+ "EXED_DEVICE_ID"
40
+ ]
41
+ },
42
+ "breakingChanges": [],
43
+ "dataSovereignty": "Customer-local memory/tasks/behaviors stay in SQLCipher/local storage. Updates must not overwrite roster, identity, behavior, or local memory files.",
44
+ "releaseLine": "v0.9 private/customer pilot; v1.0 is public-beta stable.",
49
45
  "highGhostStack": "0.9.9",
50
- "sourceVersion": "0.9.255"
51
- }
46
+ "deploymentScope": "customer"
47
+ },
48
+ "deploymentScope": "customer",
49
+ "highGhostStack": "0.9.9",
50
+ "sourceVersion": "0.9.258"
51
+ }
@@ -1,120 +0,0 @@
1
- import {
2
- EXE_AI_DIR
3
- } from "./chunk-VXIMSRTO.js";
4
- import "./chunk-LYH5HE24.js";
5
- import "./chunk-MLKGABMK.js";
6
-
7
- // src/lib/prediction-log.ts
8
- import { randomUUID } from "crypto";
9
- import { appendFileSync, readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
10
- import path from "path";
11
- var LOG_PATH = path.join(EXE_AI_DIR, "prediction-log.jsonl");
12
- function ensureDir() {
13
- const dir = path.dirname(LOG_PATH);
14
- if (!existsSync(dir)) {
15
- mkdirSync(dir, { recursive: true });
16
- }
17
- }
18
- function logPrediction(agentId, prediction, confidence) {
19
- if (confidence < 0 || confidence > 1) {
20
- throw new Error(`Confidence must be between 0 and 1, got ${confidence}`);
21
- }
22
- const entry = {
23
- id: randomUUID(),
24
- agent_id: agentId,
25
- prediction,
26
- confidence: Math.round(confidence * 100) / 100,
27
- // 2 decimal places
28
- created_at: (/* @__PURE__ */ new Date()).toISOString()
29
- };
30
- ensureDir();
31
- appendFileSync(LOG_PATH, JSON.stringify(entry) + "\n", "utf-8");
32
- return entry;
33
- }
34
- function resolvePrediction(id, outcome, note) {
35
- const predictions = readAllPredictions();
36
- const idx = predictions.findIndex((p) => p.id === id);
37
- if (idx === -1) {
38
- throw new Error(`Prediction not found: ${id}`);
39
- }
40
- const existing = predictions[idx];
41
- const updated = {
42
- ...existing,
43
- resolved_at: (/* @__PURE__ */ new Date()).toISOString(),
44
- outcome,
45
- resolution_note: note
46
- };
47
- predictions[idx] = updated;
48
- ensureDir();
49
- const content = predictions.map((p) => JSON.stringify(p)).join("\n") + "\n";
50
- writeFileSync(LOG_PATH, content, "utf-8");
51
- return updated;
52
- }
53
- function getPredictions(opts) {
54
- let predictions = readAllPredictions();
55
- if (opts?.agentId) {
56
- predictions = predictions.filter((p) => p.agent_id === opts.agentId);
57
- }
58
- if (opts?.unresolved) {
59
- predictions = predictions.filter((p) => !p.outcome);
60
- }
61
- predictions.reverse();
62
- if (opts?.limit && opts.limit > 0) {
63
- predictions = predictions.slice(0, opts.limit);
64
- }
65
- return predictions;
66
- }
67
- function getCalibrationStats(agentId) {
68
- let predictions = readAllPredictions();
69
- if (agentId) {
70
- predictions = predictions.filter((p) => p.agent_id === agentId);
71
- }
72
- const resolved = predictions.filter((p) => p.outcome != null);
73
- const bucketRanges = [
74
- [0, 0.2],
75
- [0.2, 0.4],
76
- [0.4, 0.6],
77
- [0.6, 0.8],
78
- [0.8, 1]
79
- ];
80
- const buckets = bucketRanges.map(([lo, hi]) => {
81
- const inBucket = resolved.filter((p) => {
82
- if (lo === 0) return p.confidence >= lo && p.confidence <= hi;
83
- return p.confidence > lo && p.confidence <= hi;
84
- });
85
- const correct = inBucket.filter((p) => p.outcome === "correct").length;
86
- const partial = inBucket.filter((p) => p.outcome === "partial").length;
87
- const actual = correct + partial * 0.5;
88
- return {
89
- confidenceRange: [lo, hi],
90
- predicted: inBucket.length,
91
- actual,
92
- accuracy: inBucket.length > 0 ? Math.round(actual / inBucket.length * 100) / 100 : 0
93
- };
94
- });
95
- const totalCorrect = resolved.filter((p) => p.outcome === "correct").length + resolved.filter((p) => p.outcome === "partial").length * 0.5;
96
- return {
97
- buckets,
98
- totalPredictions: predictions.length,
99
- resolvedPredictions: resolved.length,
100
- overallAccuracy: resolved.length > 0 ? Math.round(totalCorrect / resolved.length * 100) / 100 : 0
101
- };
102
- }
103
- function readAllPredictions() {
104
- if (!existsSync(LOG_PATH)) return [];
105
- const content = readFileSync(LOG_PATH, "utf-8").trim();
106
- if (!content) return [];
107
- return content.split("\n").filter((line) => line.trim()).map((line) => {
108
- try {
109
- return JSON.parse(line);
110
- } catch {
111
- return null;
112
- }
113
- }).filter((p) => p !== null);
114
- }
115
- export {
116
- getCalibrationStats,
117
- getPredictions,
118
- logPrediction,
119
- resolvePrediction
120
- };