@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.
- package/deploy/compose/.env.customer.example +13 -13
- package/deploy/compose/.env.example +8 -8
- package/deploy/compose/docker-compose.yml +18 -18
- package/deploy/compose/generate-env.ts +22 -18
- package/deploy/compose/init-db.sql +221 -20
- package/deploy/stack-manifests/v0.9.json +1207 -1136
- package/dist/{active-agent-DTZ6VJIR.js → active-agent-IGZXTTV4.js} +3 -3
- package/dist/{active-agent-7QNK5CJZ.js → active-agent-OYUXMTHS.js} +3 -3
- package/dist/{agentic-ontology-UZK33N6I.js → agentic-ontology-5WT23SLZ.js} +1 -1
- package/dist/{backfill-metadata-R7PNZ5TX.js → backfill-metadata-EG52U3GF.js} +4 -4
- package/dist/{behaviors-G6QHSQBN.js → behaviors-2TZCFJLU.js} +3 -3
- package/dist/bin/age-ontology-load.js +2 -2
- package/dist/bin/agentic-ontology-backfill.js +5 -5
- package/dist/bin/agentic-reflection-backfill.js +6 -6
- package/dist/bin/agentic-semantic-label.js +5 -5
- package/dist/bin/backfill-conversations.js +6 -5
- package/dist/bin/backfill-responses.js +6 -5
- package/dist/bin/backfill-vectors.js +7 -6
- package/dist/bin/bulk-sync-postgres.js +6 -6
- package/dist/bin/cleanup-stale-review-tasks.js +9 -9
- package/dist/bin/cli.js +17 -17
- package/dist/bin/deferred-daemon-restart.js +4 -1
- package/dist/bin/exe-agent-config.js +2 -2
- package/dist/bin/exe-agent.js +4 -4
- package/dist/bin/exe-assign.js +8 -7
- package/dist/bin/exe-boot.js +16 -16
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cloud.js +4 -4
- package/dist/bin/exe-dispatch.js +9 -9
- package/dist/bin/exe-doctor.js +1 -1
- package/dist/bin/exe-export-behaviors.js +7 -7
- package/dist/bin/exe-forget.js +6 -6
- package/dist/bin/exe-gateway.js +9 -9
- package/dist/bin/exe-heartbeat.js +9 -9
- package/dist/bin/exe-kill.js +12 -12
- package/dist/bin/exe-launch-agent.js +16 -16
- package/dist/bin/exe-new-employee.js +6 -6
- package/dist/bin/exe-pending-messages.js +11 -10
- package/dist/bin/exe-pending-notifications.js +9 -9
- package/dist/bin/exe-pending-reviews.js +11 -9
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +11 -11
- package/dist/bin/exe-search.js +5 -5
- package/dist/bin/exe-session-cleanup.js +14 -14
- package/dist/bin/exe-settings.js +4 -4
- package/dist/bin/exe-start-codex.js +11 -11
- package/dist/bin/exe-start-opencode.js +8 -8
- package/dist/bin/exe-status.js +10 -10
- package/dist/bin/exe-support.js +3 -1
- package/dist/bin/exe-team.js +3 -3
- package/dist/bin/git-sweep.js +71 -11
- package/dist/bin/graph-backfill.js +4 -4
- package/dist/bin/graph-export.js +5 -5
- package/dist/bin/graph-layer-benchmark.js +7 -7
- package/dist/bin/import-history.js +7 -7
- package/dist/bin/install.js +12 -9
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +4 -4
- package/dist/bin/postgres-agentic-reflection-backfill.js +7 -7
- package/dist/bin/postgres-agentic-semantic-backfill.js +7 -7
- package/dist/bin/scan-tasks.js +9 -9
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +4 -4
- package/dist/bin/stack-update.js +20 -3
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{capacity-monitor-QMKII67L.js → capacity-monitor-CTFWWTCR.js} +10 -10
- package/dist/{catchup-brief-CNISNLV7.js → catchup-brief-UML47LXI.js} +11 -11
- package/dist/{chunk-QP4FHME2.js → chunk-235ZCOYB.js} +18 -6
- package/dist/{chunk-2NEQQCRC.js → chunk-25JAXHON.js} +1 -1
- package/dist/{chunk-MU6ESLYL.js → chunk-2PFNATXD.js} +1 -1
- package/dist/chunk-2XZ6X3PJ.js +13 -0
- package/dist/chunk-3XX3CDKF.js +9 -0
- package/dist/{chunk-ZTB6E2ZL.js → chunk-4FGTT26Q.js} +1 -1
- package/dist/{chunk-YYSQAM4W.js → chunk-4TYAHVDI.js} +8 -8
- package/dist/{chunk-2QKNXGII.js → chunk-4VECWOUO.js} +2 -2
- package/dist/{chunk-YXMXP45V.js → chunk-57C3MZPQ.js} +2 -2
- package/dist/{chunk-FTNNNAMH.js → chunk-5JYCTIQD.js} +1 -1
- package/dist/{chunk-CS267UMH.js → chunk-5LDTCWYX.js} +79 -19
- package/dist/{chunk-FQVITYVF.js → chunk-6D2IZ5MB.js} +2 -2
- package/dist/{chunk-ZG3HADWE.js → chunk-7UJRF4WF.js} +1 -1
- package/dist/{chunk-JFVITKXI.js → chunk-A2UPDE3J.js} +1 -1
- package/dist/{chunk-KOCQAMAM.js → chunk-ANYOAZCZ.js} +238 -5
- package/dist/{chunk-PSQNT5DS.js → chunk-AQS2B3HC.js} +8 -8
- package/dist/{chunk-ABNALOLM.js → chunk-BGEXTWGR.js} +3 -3
- package/dist/{chunk-LPK5JPME.js → chunk-BPZL5YOM.js} +1 -1
- package/dist/{chunk-RLDOG7DI.js → chunk-C6SSCNOC.js} +2516 -2289
- package/dist/{chunk-JGEGEOVP.js → chunk-COKTAJUZ.js} +1 -1
- package/dist/{chunk-MRZE5IOP.js → chunk-CXOX7TRG.js} +1 -1
- package/dist/{chunk-6LFFIEDM.js → chunk-DU64OESH.js} +1 -1
- package/dist/{chunk-LYIUESG2.js → chunk-DYURFBPS.js} +10 -10
- package/dist/{chunk-X3SS45PO.js → chunk-FPXZY3FY.js} +1 -1
- package/dist/{chunk-TVTRMINO.js → chunk-FUGZF7VR.js} +1 -1
- package/dist/{chunk-O7SFCX5B.js → chunk-GB4FI66P.js} +2 -2
- package/dist/{chunk-VGWQBI76.js → chunk-GBR4MAAK.js} +1 -1
- package/dist/chunk-GH4LVBQM.js +371 -0
- package/dist/{chunk-AIXZ5O7U.js → chunk-GIHMDOSK.js} +1 -1
- package/dist/{chunk-RDCE652I.js → chunk-HDWVXSGO.js} +1 -1
- package/dist/{chunk-RF54NGPJ.js → chunk-IJ7R3MXE.js} +3 -5
- package/dist/{chunk-R7FBOZT5.js → chunk-ISL3NSVX.js} +1 -1
- package/dist/{chunk-5B2AEXVA.js → chunk-IVSRRIRG.js} +1 -1
- package/dist/{chunk-SD2R3SEA.js → chunk-J3YNCJ4A.js} +1 -1
- package/dist/{chunk-5IZYSS3M.js → chunk-JE4C74EE.js} +4 -4
- package/dist/{chunk-VRVHIVUE.js → chunk-KSR2PNRW.js} +2 -2
- package/dist/{chunk-LL2ARYTZ.js → chunk-L3PY4NFQ.js} +1 -1
- package/dist/{chunk-VFATLVRX.js → chunk-L5VPUOB6.js} +1 -1
- package/dist/{chunk-3VLFVOM7.js → chunk-LRKJGSNH.js} +2 -2
- package/dist/{chunk-4FT3SQAS.js → chunk-LVY74L2J.js} +2 -2
- package/dist/{chunk-X4T7LR2X.js → chunk-M7PZFYHE.js} +2 -2
- package/dist/{chunk-CIX64N7D.js → chunk-MGTVPIEZ.js} +1 -1
- package/dist/{chunk-MXCBORCC.js → chunk-MKTEGZ37.js} +3 -3
- package/dist/chunk-MMRUBN3I.js +36 -0
- package/dist/{chunk-4MONXPWR.js → chunk-MPXLF7TA.js} +1 -1
- package/dist/{chunk-6QMXKKFD.js → chunk-N27CTUFU.js} +1 -1
- package/dist/{chunk-YDHPC4PX.js → chunk-N4ES27RI.js} +3 -3
- package/dist/{chunk-WIRJ574R.js → chunk-NGQQRGLP.js} +2 -2
- package/dist/{chunk-AQOCHSIR.js → chunk-OCJ5GZKV.js} +4 -4
- package/dist/{chunk-O477L4LV.js → chunk-OSPS5N2I.js} +1 -1
- package/dist/{chunk-5WEH43HH.js → chunk-PQHA6X6Y.js} +1 -1
- package/dist/{chunk-DJYIBHN5.js → chunk-PQQTSNXS.js} +3 -3
- package/dist/{chunk-LGFB67MY.js → chunk-Q3GLQDZI.js} +1 -1
- package/dist/{chunk-7GR7VBBW.js → chunk-QUC27OCW.js} +1 -1
- package/dist/{chunk-5NBOFYJG.js → chunk-QYNFWFFH.js} +4 -4
- package/dist/{chunk-X7I6NLIA.js → chunk-T2EUNNUX.js} +5 -5
- package/dist/{chunk-VRWOLLKN.js → chunk-T4NFOOPB.js} +2 -2
- package/dist/{chunk-2YJSDJEH.js → chunk-TZPHTI5Q.js} +1 -1
- package/dist/{chunk-CQSFIQGN.js → chunk-UOZ5KUNN.js} +1 -1
- package/dist/{chunk-5R4R743Q.js → chunk-V2UVWYHO.js} +17 -15
- package/dist/{chunk-VKCZ3OGM.js → chunk-VD676VIC.js} +4 -4
- package/dist/{chunk-USLVSLQ5.js → chunk-VDCPKJUQ.js} +1 -1
- package/dist/{chunk-Y7NMPQXZ.js → chunk-VLX6AHTD.js} +8 -8
- package/dist/{chunk-ITPIBVSG.js → chunk-WMZTSHNX.js} +83 -1
- package/dist/{chunk-5U7WB4YG.js → chunk-WVBZ3QBR.js} +2 -2
- package/dist/{chunk-3EMZZZNU.js → chunk-X2RKYKTP.js} +1 -1
- package/dist/{chunk-XTIHYH64.js → chunk-YY2BCIAP.js} +2 -2
- package/dist/{chunk-Z6GHDYQI.js → chunk-Z2AEOVEZ.js} +30 -6
- package/dist/{chunk-PHTRZQR4.js → chunk-ZBDAFYDD.js} +4 -4
- package/dist/{chunk-E4CCKWZN.js → chunk-ZKFTDL4M.js} +1 -1
- package/dist/{co-activation-AIVMI5U2.js → co-activation-UNVL5JCP.js} +2 -2
- package/dist/{co-occurrence-L6QOQTJB.js → co-occurrence-ETAVWYVE.js} +2 -2
- package/dist/{code-context-index-DYHYVJHX.js → code-context-index-DCQYAYA2.js} +3 -2
- package/dist/{crdt-sync-YBMDPFNT.js → crdt-sync-AH7N6QOE.js} +1 -1
- package/dist/{crm-webhook-QO3ZESKR.js → crm-webhook-R6546T3Y.js} +2 -2
- package/dist/{cto-delegation-gate-UFPVFLIW.js → cto-delegation-gate-VB4TMZ3I.js} +8 -8
- package/dist/{daemon-orchestration-6XAISQ7B.js → daemon-orchestration-YAJKIL6Q.js} +12 -12
- package/dist/{db-backup-7UMCTS44.js → db-backup-2RG6VHT7.js} +11 -3
- package/dist/{dreaming-FJ75QVGZ.js → dreaming-WMBTSXGD.js} +9 -9
- package/dist/{exe-drift-OH3WV2ZQ.js → exe-drift-MQZGYHEN.js} +3 -3
- package/dist/{exe-export-UYKYNVBU.js → exe-export-E4BDIHOC.js} +5 -5
- package/dist/{exe-import-Q4FNSMLJ.js → exe-import-IWAD4HN6.js} +5 -5
- package/dist/{exe-key-22LOIIUX.js → exe-key-L2RV7XJX.js} +2 -2
- package/dist/{exe-snapshot-J7CL6QEL.js → exe-snapshot-IOGN4ARV.js} +12 -12
- package/dist/{fast-db-init-QXGL2PKQ.js → fast-db-init-GCY3F74H.js} +1 -1
- package/dist/gateway/index.js +8 -8
- package/dist/{git-staleness-YVWDCFIE.js → git-staleness-BQIFNZIU.js} +2 -2
- package/dist/{git-task-sweep-RRCOTTIS.js → git-task-sweep-GSKS6WKR.js} +9 -9
- package/dist/{global-procedures-FCGWAFES.js → global-procedures-3DJUA5OX.js} +3 -3
- package/dist/{graph-auto-extract-RUQC5IIS.js → graph-auto-extract-2I44WRDY.js} +2 -2
- package/dist/hooks/bug-report-worker.js +11 -11
- package/dist/hooks/codex-stop-task-finalizer.js +11 -11
- package/dist/hooks/commit-complete.js +11 -11
- package/dist/hooks/error-recall.js +6 -6
- package/dist/hooks/exe-heartbeat-hook.js +3 -3
- package/dist/hooks/ingest-worker.js +3 -2
- package/dist/hooks/ingest.js +6 -6
- package/dist/hooks/instructions-loaded.js +4 -4
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +4 -4
- package/dist/hooks/post-compact.js +10 -10
- package/dist/hooks/post-tool-combined.js +6 -6
- package/dist/hooks/pre-compact.js +14 -13
- package/dist/hooks/pre-tool-use.js +14 -14
- package/dist/hooks/prompt-submit.js +22 -22
- package/dist/hooks/session-end.js +19 -18
- package/dist/hooks/session-start.js +11 -11
- package/dist/hooks/stop.js +70 -17
- package/dist/hooks/subagent-stop.js +10 -10
- package/dist/hooks/summary-worker.js +17 -16
- package/dist/index.js +17 -17
- package/dist/{installer-7SMJC3SX.js → installer-6MQCAHUG.js} +5 -5
- package/dist/{installer-GFZVC43I.js → installer-TCMPFSSP.js} +5 -5
- package/dist/{installer-34DCTB5B.js → installer-ZY2BKTEO.js} +5 -5
- package/dist/lib/cloud-sync.js +4 -4
- package/dist/lib/consolidation.js +5 -5
- package/dist/lib/database.js +2 -2
- package/dist/lib/db-daemon-client.js +58 -13
- package/dist/lib/db.js +2 -2
- package/dist/lib/embedder.js +3 -2
- package/dist/lib/employee-templates.js +4 -4
- package/dist/lib/employees.js +2 -2
- package/dist/lib/exe-daemon-client.js +2 -1
- package/dist/lib/exe-daemon.js +255 -104
- package/dist/lib/hybrid-search.js +5 -5
- package/dist/lib/identity.js +2 -2
- package/dist/lib/messaging.js +9 -9
- package/dist/lib/reminders.js +3 -3
- package/dist/lib/schedules.js +5 -5
- package/dist/lib/session-registry.js +4 -4
- package/dist/lib/skill-learning.js +4 -4
- package/dist/lib/store.js +4 -4
- package/dist/lib/task-router.js +3 -3
- package/dist/lib/tasks.js +10 -10
- package/dist/lib/tmux-routing.js +8 -8
- package/dist/lib/token-spend.js +3 -3
- package/dist/mcp/register-tools.js +59 -56
- package/dist/mcp/server.js +60 -57
- package/dist/mcp/tools/complete-reminder.js +4 -4
- package/dist/mcp/tools/create-reminder.js +4 -4
- package/dist/mcp/tools/create-task.js +12 -12
- package/dist/mcp/tools/deactivate-behavior.js +5 -5
- package/dist/mcp/tools/list-reminders.js +4 -4
- package/dist/mcp/tools/list-tasks.js +12 -12
- package/dist/mcp/tools/send-message.js +11 -11
- package/dist/mcp/tools/update-task.js +11 -11
- package/dist/{mcp-http-config-MZMHKMJC.js → mcp-http-config-VUDZ3D5D.js} +3 -3
- package/dist/{memory-cards-3SFXU6IP.js → memory-cards-ZOOPC2WF.js} +2 -2
- package/dist/{memory-graph-extractor-T57YQQCW.js → memory-graph-extractor-RRQMUBMI.js} +3 -3
- package/dist/{memory-poisoning-defense-O53AHMTZ.js → memory-poisoning-defense-UQMNLG6H.js} +2 -2
- package/dist/{memory-queue-client-ITWQIFSD.js → memory-queue-client-TPQDAA4D.js} +3 -2
- package/dist/{memory-reflection-YPP2JC2S.js → memory-reflection-GSGXAGXV.js} +2 -2
- package/dist/{notifications-BETWD6EK.js → notifications-ZKGLZVCU.js} +8 -8
- package/dist/{orchestration-events-A5D52NXX.js → orchestration-events-7RMWC5SS.js} +3 -3
- package/dist/{orchestrator-X564XCWC.js → orchestrator-A6MX2OHA.js} +10 -10
- package/dist/{pipeline-router-RVHLL7UA.js → pipeline-router-6ZBYJD2U.js} +3 -3
- package/dist/{plan-limits-ANAVC6PM.js → plan-limits-4XH4A7IA.js} +3 -3
- package/dist/{project-boot-ENMCAL7G.js → project-boot-7ZEIDWUG.js} +3 -2
- package/dist/{projection-worker-O3HBG5QK.js → projection-worker-YKKBNQZT.js} +130 -51
- package/dist/{reranker-SRJL4IWB.js → reranker-DN2A3H6O.js} +1 -1
- package/dist/{review-polling-5JTTHHEO.js → review-polling-PK3CY4NI.js} +9 -9
- package/dist/runtime/index.js +11 -11
- package/dist/{session-events-RCSYHQQ2.js → session-events-IYU6FYHH.js} +9 -9
- package/dist/{session-kill-telemetry-AL3H4ELS.js → session-kill-telemetry-G2VV4CAH.js} +3 -3
- package/dist/{session-scope-ZB4SR3AX.js → session-scope-DHTVH3D4.js} +8 -8
- package/dist/{setup-wizard-HXTADFXI.js → setup-wizard-IA5ISHQ2.js} +1 -1
- package/dist/{skill-refinement-TT4VDYYW.js → skill-refinement-6PBAFLWP.js} +2 -2
- package/dist/{stack-release-7WDKQOCO.js → stack-release-NW7MV3WV.js} +41 -11
- package/dist/{stack-update-F4CQWMGV.js → stack-update-5SM62R3O.js} +3 -1
- package/dist/{steward-gate-HSV67KLF.js → steward-gate-EQV6CZKY.js} +3 -3
- package/dist/support-outbox-SZVLHHZG.js +295 -0
- package/dist/{task-enforcement-A6AZTYAN.js → task-enforcement-2LS5DOXK.js} +8 -8
- package/dist/{task-scope-XKNAY5S7.js → task-scope-AKF3CSWO.js} +8 -8
- package/dist/{tasks-crud-F732BVOE.js → tasks-crud-KOIA5SAH.js} +8 -8
- package/dist/{tasks-notify-LJ65U7DF.js → tasks-notify-7ZTE4ZQM.js} +9 -9
- package/dist/{tasks-review-Y5F4HRAR.js → tasks-review-VMMMAK2Y.js} +8 -8
- package/dist/{telemetry-upload-HVYO6FL3.js → telemetry-upload-YLW4NAUF.js} +15 -8
- package/dist/{token-budget-VODGJYKX.js → token-budget-NA4OLFNP.js} +2 -2
- package/dist/{tool-capability-index-PZWWVABO.js → tool-capability-index-C73KVY5O.js} +1 -1
- package/dist/{tool-telemetry-5BSTF3P6.js → tool-telemetry-OVI5KL4S.js} +1 -1
- package/dist/tui/App.js +16 -16
- package/dist/{tui-data-EHJWRNRZ.js → tui-data-5NT24CC5.js} +8 -8
- package/dist/{worker-gate-4AS4K7G4.js → worker-gate-AQLJUQ5G.js} +1 -1
- package/dist/{workflow-engine-BXGNFNUW.js → workflow-engine-TRGGUNIZ.js} +2 -2
- package/dist/{worktree-3N5BPITS.js → worktree-NK7GZNEA.js} +4 -4
- package/dist/worktree-sweep-5XVZCH6A.js +18 -0
- package/package.json +3 -2
- package/release-notes.json +32 -33
- package/stack.release.json +48 -48
- package/dist/prediction-log-DOEOHDHS.js +0 -120
- package/dist/support-outbox-KEJ73I3F.js +0 -206
- /package/dist/{chunk-AWVDA2FL.js → chunk-2H3FVAN3.js} +0 -0
- /package/dist/{chunk-VPHOOQLR.js → chunk-3GHTBVZO.js} +0 -0
- /package/dist/{chunk-CCPCIW4Z.js → chunk-BBPRL2MP.js} +0 -0
- /package/dist/{chunk-X2E6W3DB.js → chunk-BRSI3FD6.js} +0 -0
- /package/dist/{chunk-Y2FVN7CX.js → chunk-EYLQRPHF.js} +0 -0
- /package/dist/{chunk-4S5TEBXD.js → chunk-H6QJT5O5.js} +0 -0
- /package/dist/{chunk-FCII2MMI.js → chunk-J5CAYOJU.js} +0 -0
- /package/dist/{chunk-LY2DYTDL.js → chunk-RFJESVEL.js} +0 -0
- /package/dist/{chunk-GBHQ5TXO.js → chunk-UOOCGJUE.js} +0 -0
- /package/dist/{core-memory-WFP2L52F.js → core-memory-VZFTGOFE.js} +0 -0
- /package/dist/{entity-boost-RTYXAOWV.js → entity-boost-OAB2PZQP.js} +0 -0
- /package/dist/{message-queue-client-2CACBUA4.js → message-queue-client-YTKTHAYO.js} +0 -0
- /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 = "
|
|
395
|
-
result.detail = `GHCR auth
|
|
396
|
-
log("
|
|
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
|
-
|
|
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
|
|
646
|
-
if (
|
|
647
|
-
for (const m of
|
|
648
|
-
log("fail", `${shortImageName(m.repo.imageName)}:${m.tag}
|
|
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
|
|
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-
|
|
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-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
14
|
+
} from "./chunk-VDCPKJUQ.js";
|
|
15
15
|
import "./chunk-XJUUWHVN.js";
|
|
16
16
|
import "./chunk-NGP6LSV2.js";
|
|
17
|
-
import "./chunk-
|
|
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-
|
|
22
|
+
import "./chunk-ISL3NSVX.js";
|
|
23
23
|
import "./chunk-HYZV25LY.js";
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
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-
|
|
6
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
13
|
+
import "./chunk-VDCPKJUQ.js";
|
|
14
14
|
import "./chunk-XJUUWHVN.js";
|
|
15
15
|
import "./chunk-NGP6LSV2.js";
|
|
16
|
-
import "./chunk-
|
|
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-
|
|
21
|
+
import "./chunk-ISL3NSVX.js";
|
|
22
22
|
import "./chunk-HYZV25LY.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
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-
|
|
27
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
34
|
+
import "./chunk-VDCPKJUQ.js";
|
|
35
35
|
import "./chunk-XJUUWHVN.js";
|
|
36
36
|
import "./chunk-NGP6LSV2.js";
|
|
37
|
-
import "./chunk-
|
|
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-
|
|
42
|
+
import "./chunk-ISL3NSVX.js";
|
|
43
43
|
import "./chunk-HYZV25LY.js";
|
|
44
|
-
import "./chunk-
|
|
45
|
-
import "./chunk-
|
|
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-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
15
|
+
import "./chunk-VDCPKJUQ.js";
|
|
16
16
|
import "./chunk-XJUUWHVN.js";
|
|
17
17
|
import "./chunk-NGP6LSV2.js";
|
|
18
|
-
import "./chunk-
|
|
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-
|
|
23
|
+
import "./chunk-ISL3NSVX.js";
|
|
24
24
|
import "./chunk-HYZV25LY.js";
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
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-
|
|
12
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
19
|
+
import "./chunk-VDCPKJUQ.js";
|
|
20
20
|
import "./chunk-XJUUWHVN.js";
|
|
21
21
|
import "./chunk-NGP6LSV2.js";
|
|
22
|
-
import "./chunk-
|
|
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-
|
|
27
|
+
import "./chunk-ISL3NSVX.js";
|
|
28
28
|
import "./chunk-HYZV25LY.js";
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
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-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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,
|
|
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)
|
|
715
|
+
if (!response.ok) return `failed: HTTP ${response.status}`;
|
|
709
716
|
return "sent";
|
|
710
717
|
};
|
|
711
718
|
const retried = await drainOutbox(doSend);
|