@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
@@ -88,6 +88,24 @@ function buildRepoConfigs() {
88
88
  releaseWorkflow: "release-stack-image.yml",
89
89
  simpleTag: true,
90
90
  defaultBranch: "master"
91
+ },
92
+ {
93
+ serviceKey: "monitor-hub",
94
+ ghRepo: "AskExe/exe-monitor",
95
+ localPath: resolveRepoPath("exe-monitor"),
96
+ imageName: "update.askexe.com/askexe/exe-monitor-hub",
97
+ releaseWorkflow: "release-stack-image.yml",
98
+ simpleTag: true,
99
+ defaultBranch: "main"
100
+ },
101
+ {
102
+ serviceKey: "monitor-agent",
103
+ ghRepo: "AskExe/exe-monitor",
104
+ localPath: resolveRepoPath("exe-monitor"),
105
+ imageName: "update.askexe.com/askexe/exe-monitor-agent",
106
+ releaseWorkflow: "release-stack-image.yml",
107
+ simpleTag: true,
108
+ defaultBranch: "main"
91
109
  }
92
110
  ];
93
111
  }
@@ -391,9 +409,9 @@ async function verifyImages(changes, ciStatuses, dryRun) {
391
409
  if (ghcrCheck.ok) {
392
410
  result.ghcr = "ok";
393
411
  } else if (ghcrCheck.status === 401 || ghcrCheck.status === 403) {
394
- result.ghcr = "ok";
395
- result.detail = `GHCR auth insufficient (${ghcrCheck.status}) but CI passed \u2014 trusting CI`;
396
- log("warn", `GHCR auth returned ${ghcrCheck.status} for ${shortName}:${tag} \u2014 trusting CI success`);
412
+ result.ghcr = "error";
413
+ result.detail = `GHCR auth failed (${ghcrCheck.status}) \u2014 cannot verify image. Fix gh auth or GHCR_TOKEN.`;
414
+ log("fail", `GHCR auth returned ${ghcrCheck.status} for ${shortName}:${tag} \u2014 cannot verify, treating as error`);
397
415
  } else {
398
416
  result.ghcr = "missing";
399
417
  result.detail = `GHCR returned ${ghcrCheck.status} for ${ghcrRepo}:${tag}`;
@@ -435,7 +453,7 @@ function printImageVerification(results) {
435
453
  }
436
454
  console.log("");
437
455
  }
438
- function updateStackManifest(changes, ciStatuses, dryRun) {
456
+ function updateStackManifest(changes, ciStatuses, dryRun, imageResults) {
439
457
  const manifest = JSON.parse(readFileSync(MANIFEST_PATH, "utf8"));
440
458
  const currentLatest = manifest.latest;
441
459
  const currentParts = currentLatest.split(".").map(Number);
@@ -453,7 +471,9 @@ function updateStackManifest(changes, ciStatuses, dryRun) {
453
471
  successfulChanges.push(change);
454
472
  const svc = services[change.repo.serviceKey];
455
473
  if (svc) {
456
- svc.image = `${change.repo.imageName}:v${change.newVersion}`;
474
+ const imageTag = `${change.repo.imageName}:v${change.newVersion}`;
475
+ const imgResult = imageResults?.find((r) => r.repo.serviceKey === change.repo.serviceKey);
476
+ svc.image = imgResult?.digest ? `${imageTag}@${imgResult.digest}` : imageTag;
457
477
  }
458
478
  }
459
479
  }
@@ -642,18 +662,28 @@ async function runStackRelease(flags) {
642
662
  log("warn", "Image verification skipped (--skip-image-verify)");
643
663
  } else {
644
664
  imageResults = await verifyImages(changes, ciStatuses, flags.dryRun);
645
- const missing = imageResults.filter((r) => r.ghcr === "missing" && r.proxy !== "ok");
646
- if (missing.length > 0 && !flags.dryRun) {
647
- for (const m of missing) {
648
- log("fail", `${shortImageName(m.repo.imageName)}:${m.tag} not found on GHCR or proxy \u2014 cannot release`);
665
+ const failed = imageResults.filter((r) => (r.ghcr === "missing" || r.ghcr === "error") && r.proxy !== "ok");
666
+ if (failed.length > 0 && !flags.dryRun) {
667
+ for (const m of failed) {
668
+ log("fail", `${shortImageName(m.repo.imageName)}:${m.tag} \u2014 GHCR status: ${m.ghcr}, proxy: ${m.proxy} \u2014 cannot release`);
649
669
  }
650
- log("fail", "Aborting: images missing. Fix CI or use --skip-image-verify to override.");
670
+ log("fail", "Aborting: images not verified. Fix GHCR auth/CI or use --skip-image-verify to override.");
651
671
  process.exit(1);
652
672
  }
673
+ const pending = imageResults.filter((r) => r.proxy === "pending");
674
+ if (pending.length > 0) {
675
+ for (const p of pending) {
676
+ log("warn", `${shortImageName(p.repo.imageName)}:${p.tag} \u2014 proxy cache pending`);
677
+ }
678
+ if (!flags.dryRun) {
679
+ log("fail", "Aborting: proxy cache not ready for all images. Wait for proxy propagation or use --skip-image-verify.");
680
+ process.exit(1);
681
+ }
682
+ }
653
683
  printImageVerification(imageResults);
654
684
  }
655
685
  log("info", "Updating stack manifest...");
656
- const newStackVersion = updateStackManifest(changes, ciStatuses, flags.dryRun);
686
+ const newStackVersion = updateStackManifest(changes, ciStatuses, flags.dryRun, imageResults);
657
687
  const exeOsChange = changes.find((c) => c.repo.serviceKey === "exe-os");
658
688
  await commitAndTagExeOs(newStackVersion, exeOsChange, flags.dryRun);
659
689
  printSummary(changes, ciStatuses, newStackVersion, flags.dryRun);
@@ -9,6 +9,7 @@ import {
9
9
  createStackUpdatePlan,
10
10
  defaultStackPaths,
11
11
  findLatestBackupEnvFile,
12
+ hardenHost,
12
13
  listAvailableVersions,
13
14
  loadStackManifest,
14
15
  pairMonitorAgent,
@@ -20,7 +21,7 @@ import {
20
21
  runStackUpdate,
21
22
  verifyReleaseHealth,
22
23
  verifyStackManifestSignature
23
- } from "./chunk-KOCQAMAM.js";
24
+ } from "./chunk-ANYOAZCZ.js";
24
25
  import "./chunk-MOZ2YQ54.js";
25
26
  import "./chunk-VXIMSRTO.js";
26
27
  import "./chunk-LYH5HE24.js";
@@ -36,6 +37,7 @@ export {
36
37
  createStackUpdatePlan,
37
38
  defaultStackPaths,
38
39
  findLatestBackupEnvFile,
40
+ hardenHost,
39
41
  listAvailableVersions,
40
42
  loadStackManifest,
41
43
  pairMonitorAgent,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  StewardGate
3
- } from "./chunk-AIXZ5O7U.js";
4
- import "./chunk-5U7WB4YG.js";
5
- import "./chunk-ITPIBVSG.js";
3
+ } from "./chunk-GIHMDOSK.js";
4
+ import "./chunk-WVBZ3QBR.js";
5
+ import "./chunk-WMZTSHNX.js";
6
6
  import "./chunk-FXU7JOXK.js";
7
7
  import "./chunk-VXIMSRTO.js";
8
8
  import "./chunk-LYH5HE24.js";
@@ -0,0 +1,295 @@
1
+ import {
2
+ SUPPORT_REPORT_SENT_MARKER,
3
+ markSupportReportSentSync
4
+ } from "./chunk-MMRUBN3I.js";
5
+ import "./chunk-MLKGABMK.js";
6
+
7
+ // src/lib/support-outbox.ts
8
+ import { readdirSync, readFileSync, writeFileSync, existsSync } from "fs";
9
+ import path from "path";
10
+ import os from "os";
11
+ var EXE_DIR = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? path.join(os.homedir(), ".exe-os");
12
+ var BUG_DIR = path.join(EXE_DIR, "bug-reports");
13
+ var FEATURE_DIR = path.join(EXE_DIR, "feature-requests");
14
+ var SKIPPED_MARKER = "upstream_skipped: ttl_expired";
15
+ var TTL_MS = 7 * 24 * 60 * 60 * 1e3;
16
+ var BUG_ENDPOINT = "https://api.askexe.com/v1/support/bug-reports";
17
+ var FEATURE_ENDPOINT = "https://api.askexe.com/v1/support/feature-requests";
18
+ var DEFAULT_MAX_PER_FLUSH = 3;
19
+ var consecutiveFailures = 0;
20
+ var lastFailureTime = 0;
21
+ var MAX_BACKOFF_S = 300;
22
+ var sentIds = /* @__PURE__ */ new Set();
23
+ function loadConfigFile() {
24
+ try {
25
+ const configPath = path.join(EXE_DIR, "config.json");
26
+ return JSON.parse(readFileSync(configPath, "utf-8"));
27
+ } catch {
28
+ return void 0;
29
+ }
30
+ }
31
+ function loadLicenseKey() {
32
+ const config = loadConfigFile();
33
+ const cloud = config?.cloud;
34
+ const license = config?.license;
35
+ return cloud?.apiKey || license?.key || readTrimmed(path.join(EXE_DIR, "license.key"));
36
+ }
37
+ function loadLicenseToken() {
38
+ try {
39
+ const raw = JSON.parse(readFileSync(path.join(EXE_DIR, "license-cache.json"), "utf-8"));
40
+ return typeof raw.token === "string" && raw.token.trim() ? raw.token.trim() : void 0;
41
+ } catch {
42
+ return void 0;
43
+ }
44
+ }
45
+ function loadSupportAdminToken() {
46
+ const config = loadConfigFile();
47
+ const support = config?.support;
48
+ return process.env.ASKEXE_SUPPORT_ADMIN_TOKEN || process.env.EXE_SUPPORT_ADMIN_TOKEN || support?.adminToken || support?.admin_token;
49
+ }
50
+ function readTrimmed(filePath) {
51
+ try {
52
+ const value = readFileSync(filePath, "utf-8").trim();
53
+ return value || void 0;
54
+ } catch {
55
+ return void 0;
56
+ }
57
+ }
58
+ function extractField(content, field) {
59
+ const match = content.match(new RegExp(`^${field}:\\s*(.+)$`, "m"));
60
+ return match?.[1]?.trim();
61
+ }
62
+ function extractSection(content, heading) {
63
+ const escaped = heading.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
64
+ const match = content.match(new RegExp(`(?:^|\\n)##\\s+${escaped}\\s*\\n([\\s\\S]*?)(?=\\n##\\s+|\\s*$)`));
65
+ return match?.[1]?.trim() || void 0;
66
+ }
67
+ function firstMeaningfulParagraph(content) {
68
+ const stripped = content.replace(/^#\s+.*$/gm, "").replace(/^[a-z_]+:\s+.*$/gim, "").trim();
69
+ return stripped.split(/\n{2,}/).map((part) => part.trim()).find(Boolean) ?? content.slice(0, 2e3);
70
+ }
71
+ function normalizeSeverity(value, fallback = "p2") {
72
+ const raw = value?.trim().toLowerCase();
73
+ if (!raw) return fallback;
74
+ if (["p0", "p1", "p2", "p3"].includes(raw)) return raw;
75
+ if (["critical", "blocker", "urgent"].includes(raw)) return "p0";
76
+ if (["high", "major"].includes(raw)) return "p1";
77
+ if (["medium", "normal"].includes(raw)) return "p2";
78
+ if (["low", "minor", "trivial"].includes(raw)) return "p3";
79
+ return fallback;
80
+ }
81
+ function normalizeClassification(value) {
82
+ const raw = value?.trim().toLowerCase();
83
+ if (["upstream_bug", "customer_customization", "emergency_hotfix", "unclear"].includes(raw ?? "")) return raw;
84
+ if (raw?.includes("custom")) return "customer_customization";
85
+ if (raw?.includes("hotfix")) return "emergency_hotfix";
86
+ if (raw?.includes("bug") || raw?.includes("defect")) return "upstream_bug";
87
+ return "unclear";
88
+ }
89
+ function normalizeFeatureCategory(value) {
90
+ const raw = value?.trim().toLowerCase();
91
+ if (["upstream_feature", "local_customization", "integration", "unclear"].includes(raw ?? "")) return raw;
92
+ if (raw?.includes("custom")) return "local_customization";
93
+ if (raw?.includes("integrat")) return "integration";
94
+ if (raw?.includes("feature") || raw?.includes("enhancement") || raw?.includes("platform")) return "upstream_feature";
95
+ return "unclear";
96
+ }
97
+ function linesFromSection(value) {
98
+ if (!value) return void 0;
99
+ const lines = value.split(/\r?\n/).map((line) => line.replace(/^[-*]\s+/, "").replace(/^\d+\.\s+/, "").trim()).filter(Boolean);
100
+ return lines.length ? lines : void 0;
101
+ }
102
+ function shouldBackoff() {
103
+ if (consecutiveFailures === 0) return false;
104
+ const backoffMs = Math.min(Math.pow(2, consecutiveFailures), MAX_BACKOFF_S) * 1e3;
105
+ return Date.now() - lastFailureTime < backoffMs;
106
+ }
107
+ function onNetworkSuccess() {
108
+ consecutiveFailures = 0;
109
+ }
110
+ function onNetworkFailure() {
111
+ consecutiveFailures++;
112
+ lastFailureTime = Date.now();
113
+ }
114
+ function isTtlExpired(content) {
115
+ const createdAt = extractField(content, "created_at");
116
+ if (!createdAt) return false;
117
+ try {
118
+ const created = new Date(createdAt).getTime();
119
+ if (isNaN(created)) return false;
120
+ return Date.now() - created > TTL_MS;
121
+ } catch {
122
+ return false;
123
+ }
124
+ }
125
+ async function flushDir(dir, endpoint, kind, licenseKey, licenseToken, adminToken, maxPerFlush) {
126
+ let sent = 0;
127
+ let errors = 0;
128
+ let skipped = 0;
129
+ if (!existsSync(dir)) return { sent, errors, skipped };
130
+ let files;
131
+ try {
132
+ files = readdirSync(dir).filter((f) => f.endsWith(".md")).sort().reverse();
133
+ } catch {
134
+ return { sent, errors, skipped };
135
+ }
136
+ if (files.length === 0) return { sent, errors, skipped };
137
+ for (const file of files) {
138
+ if (sent >= maxPerFlush) break;
139
+ if (shouldBackoff()) break;
140
+ const filePath = path.join(dir, file);
141
+ let content;
142
+ try {
143
+ content = readFileSync(filePath, "utf-8");
144
+ } catch {
145
+ skipped++;
146
+ continue;
147
+ }
148
+ if (content.includes(SUPPORT_REPORT_SENT_MARKER)) {
149
+ skipped++;
150
+ continue;
151
+ }
152
+ if (content.includes(SKIPPED_MARKER)) {
153
+ skipped++;
154
+ continue;
155
+ }
156
+ const id = extractField(content, "id") ?? file.replace(".md", "");
157
+ if (sentIds.has(id)) {
158
+ skipped++;
159
+ continue;
160
+ }
161
+ if (isTtlExpired(content)) {
162
+ try {
163
+ writeFileSync(filePath, content + `
164
+ ${SKIPPED_MARKER}
165
+ `);
166
+ } catch {
167
+ }
168
+ skipped++;
169
+ continue;
170
+ }
171
+ let payload;
172
+ if (kind === "bug") {
173
+ const titleMatch = content.match(/^#\s*(.+)$/m);
174
+ const severityMatch = content.match(/^severity:\s*(.+)$/m);
175
+ payload = {
176
+ id,
177
+ title: titleMatch?.[1]?.trim() ?? file,
178
+ classification: normalizeClassification(extractField(content, "classification")),
179
+ severity: normalizeSeverity(severityMatch?.[1]?.trim()),
180
+ summary: extractSection(content, "Summary") ?? extractSection(content, "Description") ?? firstMeaningfulParagraph(content),
181
+ customer_impact: extractSection(content, "Customer impact"),
182
+ reproduction_steps: linesFromSection(extractSection(content, "Reproduction steps")),
183
+ expected: extractSection(content, "Expected behavior") ?? extractField(content, "expected"),
184
+ actual: extractSection(content, "Actual behavior") ?? extractField(content, "actual"),
185
+ workaround: extractSection(content, "Workaround"),
186
+ markdown: content,
187
+ source: "outbox-flusher",
188
+ package_version: extractField(content, "package_version") ?? process.env.npm_package_version ?? "unknown",
189
+ project_name: extractField(content, "project_name") ?? extractField(content, "project"),
190
+ agent_id: extractField(content, "filed_by"),
191
+ agent_role: "outbox-flusher",
192
+ report_path: filePath
193
+ };
194
+ } else {
195
+ const titleMatch = content.match(/^#\s*Feature Request\s*[—–-]\s*(.+)$/m);
196
+ payload = {
197
+ id,
198
+ title: titleMatch?.[1]?.trim() ?? extractField(content, "title") ?? file,
199
+ category: normalizeFeatureCategory(extractField(content, "category")),
200
+ priority: normalizeSeverity(extractField(content, "priority")),
201
+ product: extractField(content, "product") ?? "exe-os",
202
+ description: extractSection(content, "Description") ?? firstMeaningfulParagraph(content),
203
+ use_case: extractSection(content, "Use Case"),
204
+ current_workaround: extractSection(content, "Current Workaround"),
205
+ proposed_solution: extractSection(content, "Proposed Solution"),
206
+ business_impact: extractSection(content, "Business Impact"),
207
+ source: "outbox-flusher",
208
+ package_version: extractField(content, "package_version") ?? process.env.npm_package_version ?? "unknown",
209
+ project_name: extractField(content, "project_name") ?? extractField(content, "project"),
210
+ agent_id: extractField(content, "filed_by"),
211
+ agent_role: "outbox-flusher"
212
+ };
213
+ }
214
+ try {
215
+ const resp = await fetch(endpoint, {
216
+ method: "POST",
217
+ headers: {
218
+ "content-type": "application/json",
219
+ ...licenseKey ? { "x-exe-license-key": licenseKey } : {},
220
+ ...licenseToken ? { "x-exe-license-token": licenseToken } : {},
221
+ ...adminToken ? { "x-askexe-admin-token": adminToken } : {}
222
+ },
223
+ body: JSON.stringify(payload),
224
+ signal: AbortSignal.timeout(5e3)
225
+ });
226
+ if (resp.ok || resp.status === 409) {
227
+ markSupportReportSentSync(filePath);
228
+ sentIds.add(id);
229
+ onNetworkSuccess();
230
+ sent++;
231
+ } else {
232
+ onNetworkFailure();
233
+ errors++;
234
+ }
235
+ } catch {
236
+ onNetworkFailure();
237
+ errors++;
238
+ break;
239
+ }
240
+ }
241
+ return { sent, errors, skipped };
242
+ }
243
+ async function flushSupportOutbox(opts) {
244
+ const maxPerFlush = opts?.maxPerFlush ?? DEFAULT_MAX_PER_FLUSH;
245
+ const licenseKey = loadLicenseKey();
246
+ const licenseToken = loadLicenseToken();
247
+ const adminToken = loadSupportAdminToken();
248
+ const [bugs, features] = await Promise.all([
249
+ flushDir(BUG_DIR, BUG_ENDPOINT, "bug", licenseKey, licenseToken, adminToken, maxPerFlush),
250
+ flushDir(FEATURE_DIR, FEATURE_ENDPOINT, "feature", licenseKey, licenseToken, adminToken, maxPerFlush)
251
+ ]);
252
+ return {
253
+ bugsSent: bugs.sent,
254
+ featuresSent: features.sent,
255
+ errors: bugs.errors + features.errors,
256
+ skipped: bugs.skipped + features.skipped
257
+ };
258
+ }
259
+ async function getOutboxStatus() {
260
+ return {
261
+ bugReports: scanDir(BUG_DIR),
262
+ featureRequests: scanDir(FEATURE_DIR)
263
+ };
264
+ }
265
+ function scanDir(dir) {
266
+ if (!existsSync(dir)) return { total: 0, unsent: 0 };
267
+ let files;
268
+ try {
269
+ files = readdirSync(dir).filter((f) => f.endsWith(".md"));
270
+ } catch {
271
+ return { total: 0, unsent: 0 };
272
+ }
273
+ let unsent = 0;
274
+ let oldest;
275
+ for (const file of files) {
276
+ try {
277
+ const content = readFileSync(path.join(dir, file), "utf-8");
278
+ if (!content.includes(SUPPORT_REPORT_SENT_MARKER) && !content.includes(SKIPPED_MARKER)) {
279
+ unsent++;
280
+ const createdAt = extractField(content, "created_at");
281
+ if (createdAt && (!oldest || createdAt < oldest)) {
282
+ oldest = createdAt;
283
+ }
284
+ }
285
+ } catch {
286
+ unsent++;
287
+ }
288
+ }
289
+ return { total: files.length, unsent, oldest };
290
+ }
291
+ export {
292
+ flushSupportOutbox as flushBugReportOutbox,
293
+ flushSupportOutbox,
294
+ getOutboxStatus
295
+ };
@@ -1,28 +1,28 @@
1
1
  import {
2
2
  sendIntercom,
3
3
  updateTaskStatus
4
- } from "./chunk-CS267UMH.js";
5
- import "./chunk-6LFFIEDM.js";
4
+ } from "./chunk-5LDTCWYX.js";
5
+ import "./chunk-DU64OESH.js";
6
6
  import "./chunk-5CHYEKMH.js";
7
7
  import "./chunk-4JERP7NT.js";
8
- import "./chunk-SD2R3SEA.js";
8
+ import "./chunk-J3YNCJ4A.js";
9
9
  import "./chunk-MVW62NIZ.js";
10
10
  import "./chunk-OYNKIAVW.js";
11
11
  import "./chunk-CX6GL3ZJ.js";
12
12
  import {
13
13
  recordOrchestrationEventBestEffort
14
- } from "./chunk-USLVSLQ5.js";
14
+ } from "./chunk-VDCPKJUQ.js";
15
15
  import "./chunk-XJUUWHVN.js";
16
16
  import "./chunk-NGP6LSV2.js";
17
- import "./chunk-VFATLVRX.js";
17
+ import "./chunk-L5VPUOB6.js";
18
18
  import "./chunk-CVYC6DUW.js";
19
19
  import "./chunk-OPU3NYOO.js";
20
20
  import "./chunk-GJV3WDWM.js";
21
21
  import "./chunk-MP2AFCGL.js";
22
- import "./chunk-R7FBOZT5.js";
22
+ import "./chunk-ISL3NSVX.js";
23
23
  import "./chunk-HYZV25LY.js";
24
- import "./chunk-5U7WB4YG.js";
25
- import "./chunk-ITPIBVSG.js";
24
+ import "./chunk-WVBZ3QBR.js";
25
+ import "./chunk-WMZTSHNX.js";
26
26
  import "./chunk-FXU7JOXK.js";
27
27
  import "./chunk-MOZ2YQ54.js";
28
28
  import "./chunk-VXIMSRTO.js";
@@ -2,26 +2,26 @@ import {
2
2
  getCurrentSessionScope,
3
3
  sessionScopeFilter,
4
4
  strictSessionScopeFilter
5
- } from "./chunk-CS267UMH.js";
6
- import "./chunk-6LFFIEDM.js";
5
+ } from "./chunk-5LDTCWYX.js";
6
+ import "./chunk-DU64OESH.js";
7
7
  import "./chunk-5CHYEKMH.js";
8
8
  import "./chunk-4JERP7NT.js";
9
- import "./chunk-SD2R3SEA.js";
9
+ import "./chunk-J3YNCJ4A.js";
10
10
  import "./chunk-MVW62NIZ.js";
11
11
  import "./chunk-OYNKIAVW.js";
12
12
  import "./chunk-CX6GL3ZJ.js";
13
- import "./chunk-USLVSLQ5.js";
13
+ import "./chunk-VDCPKJUQ.js";
14
14
  import "./chunk-XJUUWHVN.js";
15
15
  import "./chunk-NGP6LSV2.js";
16
- import "./chunk-VFATLVRX.js";
16
+ import "./chunk-L5VPUOB6.js";
17
17
  import "./chunk-CVYC6DUW.js";
18
18
  import "./chunk-OPU3NYOO.js";
19
19
  import "./chunk-GJV3WDWM.js";
20
20
  import "./chunk-MP2AFCGL.js";
21
- import "./chunk-R7FBOZT5.js";
21
+ import "./chunk-ISL3NSVX.js";
22
22
  import "./chunk-HYZV25LY.js";
23
- import "./chunk-5U7WB4YG.js";
24
- import "./chunk-ITPIBVSG.js";
23
+ import "./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";
@@ -23,26 +23,26 @@ import {
23
23
  slugify,
24
24
  updateTaskStatus,
25
25
  writeCheckpoint
26
- } from "./chunk-CS267UMH.js";
27
- import "./chunk-6LFFIEDM.js";
26
+ } from "./chunk-5LDTCWYX.js";
27
+ import "./chunk-DU64OESH.js";
28
28
  import "./chunk-5CHYEKMH.js";
29
29
  import "./chunk-4JERP7NT.js";
30
- import "./chunk-SD2R3SEA.js";
30
+ import "./chunk-J3YNCJ4A.js";
31
31
  import "./chunk-MVW62NIZ.js";
32
32
  import "./chunk-OYNKIAVW.js";
33
33
  import "./chunk-CX6GL3ZJ.js";
34
- import "./chunk-USLVSLQ5.js";
34
+ import "./chunk-VDCPKJUQ.js";
35
35
  import "./chunk-XJUUWHVN.js";
36
36
  import "./chunk-NGP6LSV2.js";
37
- import "./chunk-VFATLVRX.js";
37
+ import "./chunk-L5VPUOB6.js";
38
38
  import "./chunk-CVYC6DUW.js";
39
39
  import "./chunk-OPU3NYOO.js";
40
40
  import "./chunk-GJV3WDWM.js";
41
41
  import "./chunk-MP2AFCGL.js";
42
- import "./chunk-R7FBOZT5.js";
42
+ import "./chunk-ISL3NSVX.js";
43
43
  import "./chunk-HYZV25LY.js";
44
- import "./chunk-5U7WB4YG.js";
45
- import "./chunk-ITPIBVSG.js";
44
+ import "./chunk-WVBZ3QBR.js";
45
+ import "./chunk-WMZTSHNX.js";
46
46
  import "./chunk-FXU7JOXK.js";
47
47
  import "./chunk-MOZ2YQ54.js";
48
48
  import "./chunk-VXIMSRTO.js";
@@ -3,27 +3,27 @@ import {
3
3
  markTaskNotificationsRead,
4
4
  notifyTaskDone,
5
5
  verifyDispatch
6
- } from "./chunk-AQOCHSIR.js";
7
- import "./chunk-CS267UMH.js";
8
- import "./chunk-6LFFIEDM.js";
6
+ } from "./chunk-OCJ5GZKV.js";
7
+ import "./chunk-5LDTCWYX.js";
8
+ import "./chunk-DU64OESH.js";
9
9
  import "./chunk-5CHYEKMH.js";
10
10
  import "./chunk-4JERP7NT.js";
11
- import "./chunk-SD2R3SEA.js";
11
+ import "./chunk-J3YNCJ4A.js";
12
12
  import "./chunk-MVW62NIZ.js";
13
13
  import "./chunk-OYNKIAVW.js";
14
14
  import "./chunk-CX6GL3ZJ.js";
15
- import "./chunk-USLVSLQ5.js";
15
+ import "./chunk-VDCPKJUQ.js";
16
16
  import "./chunk-XJUUWHVN.js";
17
17
  import "./chunk-NGP6LSV2.js";
18
- import "./chunk-VFATLVRX.js";
18
+ import "./chunk-L5VPUOB6.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-R7FBOZT5.js";
23
+ import "./chunk-ISL3NSVX.js";
24
24
  import "./chunk-HYZV25LY.js";
25
- import "./chunk-5U7WB4YG.js";
26
- import "./chunk-ITPIBVSG.js";
25
+ import "./chunk-WVBZ3QBR.js";
26
+ import "./chunk-WMZTSHNX.js";
27
27
  import "./chunk-FXU7JOXK.js";
28
28
  import "./chunk-MOZ2YQ54.js";
29
29
  import "./chunk-VXIMSRTO.js";
@@ -8,26 +8,26 @@ import {
8
8
  getReviewChecklist,
9
9
  isStale,
10
10
  listPendingReviews
11
- } from "./chunk-CS267UMH.js";
12
- import "./chunk-6LFFIEDM.js";
11
+ } from "./chunk-5LDTCWYX.js";
12
+ import "./chunk-DU64OESH.js";
13
13
  import "./chunk-5CHYEKMH.js";
14
14
  import "./chunk-4JERP7NT.js";
15
- import "./chunk-SD2R3SEA.js";
15
+ import "./chunk-J3YNCJ4A.js";
16
16
  import "./chunk-MVW62NIZ.js";
17
17
  import "./chunk-OYNKIAVW.js";
18
18
  import "./chunk-CX6GL3ZJ.js";
19
- import "./chunk-USLVSLQ5.js";
19
+ import "./chunk-VDCPKJUQ.js";
20
20
  import "./chunk-XJUUWHVN.js";
21
21
  import "./chunk-NGP6LSV2.js";
22
- import "./chunk-VFATLVRX.js";
22
+ import "./chunk-L5VPUOB6.js";
23
23
  import "./chunk-CVYC6DUW.js";
24
24
  import "./chunk-OPU3NYOO.js";
25
25
  import "./chunk-GJV3WDWM.js";
26
26
  import "./chunk-MP2AFCGL.js";
27
- import "./chunk-R7FBOZT5.js";
27
+ import "./chunk-ISL3NSVX.js";
28
28
  import "./chunk-HYZV25LY.js";
29
- import "./chunk-5U7WB4YG.js";
30
- import "./chunk-ITPIBVSG.js";
29
+ import "./chunk-WVBZ3QBR.js";
30
+ import "./chunk-WMZTSHNX.js";
31
31
  import "./chunk-FXU7JOXK.js";
32
32
  import "./chunk-MOZ2YQ54.js";
33
33
  import "./chunk-VXIMSRTO.js";
@@ -1,8 +1,11 @@
1
+ import {
2
+ supportAdminHeaders
3
+ } from "./chunk-2XZ6X3PJ.js";
1
4
  import {
2
5
  getOrchestrationMetrics
3
- } from "./chunk-USLVSLQ5.js";
4
- import "./chunk-5U7WB4YG.js";
5
- import "./chunk-ITPIBVSG.js";
6
+ } from "./chunk-VDCPKJUQ.js";
7
+ import "./chunk-WVBZ3QBR.js";
8
+ import "./chunk-WMZTSHNX.js";
6
9
  import "./chunk-FXU7JOXK.js";
7
10
  import {
8
11
  loadLicense,
@@ -390,14 +393,14 @@ async function buildTelemetryPayload(sinceHours = 24) {
390
393
  }
391
394
  let toolUsage;
392
395
  try {
393
- const { getToolUsageSummary } = await import("./tool-telemetry-5BSTF3P6.js");
396
+ const { getToolUsageSummary } = await import("./tool-telemetry-OVI5KL4S.js");
394
397
  const summary = getToolUsageSummary();
395
398
  if (Object.keys(summary).length > 0) toolUsage = summary;
396
399
  } catch {
397
400
  }
398
401
  let calibration;
399
402
  try {
400
- const { DreamingEngine } = await import("./dreaming-FJ75QVGZ.js");
403
+ const { DreamingEngine } = await import("./dreaming-WMBTSXGD.js");
401
404
  const engine = new DreamingEngine();
402
405
  const cal = await engine.computeCalibration("*", sinceHours);
403
406
  if (cal.assertions.total > 0 || cal.estimation.total > 0) {
@@ -634,13 +637,16 @@ async function drainOutbox(sendFn) {
634
637
  const { readFileSync: readFileSync2, readdirSync, unlinkSync } = await import("fs");
635
638
  const dir = await getOutboxDir();
636
639
  const files = readdirSync(dir).filter((f) => f.endsWith(".json")).sort();
637
- for (const file of files.slice(0, 5)) {
640
+ for (const file of files.slice(0, 2)) {
638
641
  try {
639
642
  const payload = JSON.parse(readFileSync2(join(dir, file), "utf-8"));
640
643
  const result = await sendFn(payload);
641
644
  if (result === "sent") {
642
645
  unlinkSync(join(dir, file));
643
646
  sent++;
647
+ if (files.length > 1) await new Promise((r) => setTimeout(r, 1e4));
648
+ } else if (result.includes("429") || result.includes("rate")) {
649
+ break;
644
650
  }
645
651
  } catch {
646
652
  }
@@ -700,12 +706,13 @@ async function sendTelemetryUpstream(payload) {
700
706
  "content-type": "application/json",
701
707
  ...token ? { authorization: `Bearer ${token}` } : {},
702
708
  ...licenseKey ? { "x-exe-license-key": licenseKey } : {},
703
- ...licenseToken ? { "x-exe-license-token": licenseToken } : {}
709
+ ...licenseToken ? { "x-exe-license-token": licenseToken } : {},
710
+ ...supportAdminHeaders(config)
704
711
  },
705
712
  body: JSON.stringify(p),
706
713
  signal: AbortSignal.timeout(15e3)
707
714
  });
708
- if (!response.ok) throw new Error(`HTTP ${response.status}`);
715
+ if (!response.ok) return `failed: HTTP ${response.status}`;
709
716
  return "sent";
710
717
  };
711
718
  const retried = await drainOutbox(doSend);