@askexenow/exe-os 0.9.410 → 0.9.412
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/delivery/catalog.json +29 -38
- package/deploy/compose/.env.customer.example +5 -5
- package/deploy/compose/.env.default +4 -4
- package/deploy/compose/.env.example +5 -5
- package/deploy/compose/docker-compose.yml +1 -1
- package/deploy/stack-manifests/v0.9.json +263 -2
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-2ELFTYNT.js → active-agent-3YCLS7GB.js} +4 -4
- package/dist/{active-agent-SS4SRXYZ.js → active-agent-MHWQDMML.js} +4 -4
- package/dist/{agent-defs-generator-6S2BSYCP.js → agent-defs-generator-DNXMO34I.js} +4 -4
- package/dist/{agentic-ontology-TJOAUAPD.js → agentic-ontology-RA6CMND6.js} +1 -1
- package/dist/{artifact-backup-STQQZDZ5.js → artifact-backup-EETHNFFP.js} +3 -3
- package/dist/{backfill-metadata-I2FVENKJ.js → backfill-metadata-WYT257VG.js} +7 -7
- package/dist/backup-verify-AG54CYGR.js +62 -0
- package/dist/{behavior-injection-CTSIKHTH.js → behavior-injection-G7GAUHGO.js} +10 -10
- package/dist/{behavior-promotion-NZMTTFHK.js → behavior-promotion-I2DIUFUR.js} +9 -9
- package/dist/{behaviors-RUNSC5WI.js → behaviors-SKVKPCRW.js} +8 -8
- package/dist/bin/agentic-ontology-backfill.js +8 -8
- package/dist/bin/agentic-reflection-backfill.js +9 -9
- package/dist/bin/agentic-semantic-label.js +8 -8
- package/dist/bin/backfill-conversations.js +7 -7
- package/dist/bin/backfill-responses.js +7 -7
- package/dist/bin/backfill-vectors.js +7 -7
- package/dist/bin/bulk-sync-postgres.js +16 -16
- package/dist/bin/cc-doctor.js +8 -8
- package/dist/bin/cleanup-stale-review-tasks.js +13 -13
- package/dist/bin/cli.js +24 -24
- package/dist/bin/deferred-daemon-restart.js +95 -95
- package/dist/bin/exe-actions.js +1 -1
- package/dist/bin/exe-agent-config.js +3 -3
- package/dist/bin/exe-agent.js +15 -15
- package/dist/bin/exe-assign.js +8 -8
- package/dist/bin/exe-boot.js +35 -35
- package/dist/bin/exe-call.js +9 -9
- package/dist/bin/exe-cloud.js +17 -17
- package/dist/bin/exe-config-dump.js +3 -3
- package/dist/bin/exe-dispatch.js +14 -14
- package/dist/bin/exe-doctor.js +5 -5
- package/dist/bin/exe-export-behaviors.js +12 -12
- package/dist/bin/exe-forget.js +10 -10
- package/dist/bin/exe-gateway.js +9 -9
- package/dist/bin/exe-grant.js +6 -6
- package/dist/bin/exe-healthcheck.js +8 -8
- package/dist/bin/exe-heartbeat.js +19 -19
- package/dist/bin/exe-kill.js +18 -18
- package/dist/bin/exe-launch-agent.js +75 -36
- package/dist/bin/exe-mcp.js +5 -5
- package/dist/bin/exe-memory-reads.js +7 -7
- package/dist/bin/exe-new-employee.js +11 -11
- package/dist/bin/exe-os-mcp-proxy.js +5 -5
- package/dist/bin/exe-pending-messages.js +14 -14
- package/dist/bin/exe-pending-notifications.js +13 -13
- package/dist/bin/exe-pending-reviews.js +14 -14
- package/dist/bin/exe-rename.js +7 -7
- package/dist/bin/exe-review.js +17 -17
- package/dist/bin/exe-search.js +9 -9
- package/dist/bin/exe-session-cleanup.js +18 -18
- package/dist/bin/exe-settings.js +16 -16
- package/dist/bin/exe-start-codex.js +37 -19
- package/dist/bin/exe-start-opencode.js +35 -17
- package/dist/bin/exe-status.js +15 -15
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +5 -5
- package/dist/bin/git-sweep.js +15 -15
- package/dist/bin/graph-backfill.js +8 -8
- package/dist/bin/graph-export.js +8 -8
- package/dist/bin/hooks-cli.js +1 -1
- package/dist/bin/import-history.js +11 -11
- package/dist/bin/install.js +97 -97
- package/dist/bin/intercom-check.js +5 -5
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +5 -5
- package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
- package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/reconcile-backlog.js +2 -2
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/repair-document-chunks.js +7 -7
- package/dist/bin/scan-tasks.js +14 -14
- package/dist/bin/setup.js +2 -2
- package/dist/bin/shard-migrate.js +8 -8
- package/dist/bin/stack-update.js +41 -16
- package/dist/bin/verify-stack.js +1 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-4W4CDJSX.js → boot-generation-RPJVFAQJ.js} +4 -4
- package/dist/{boot-review-sections-HJN25GMU.js → boot-review-sections-FOPPZTJI.js} +12 -12
- package/dist/{bug-landed-reconciler-GGQU6G2L.js → bug-landed-reconciler-FN5KPBRK.js} +6 -6
- package/dist/build-info.json +3 -3
- package/dist/build-manifest.json +936 -926
- package/dist/{capability-cards-EV7VHL3W.js → capability-cards-YQWBEG7A.js} +3 -3
- package/dist/{capacity-monitor-YO3WRSRY.js → capacity-monitor-7SMEJHYG.js} +14 -14
- package/dist/{catchup-brief-4XFFW3H2.js → catchup-brief-IBQ26LEB.js} +19 -19
- package/dist/{chunk-YJ7MCZSY.js → chunk-27NG2NTG.js} +2 -2
- package/dist/{chunk-2AXJRXA6.js → chunk-2BOLFLAU.js} +4 -2
- package/dist/{chunk-AGXV5HLA.js → chunk-2EYVXUGA.js} +4 -4
- package/dist/{chunk-2YZZR2BW.js → chunk-2YFMBXUU.js} +4 -4
- package/dist/{chunk-ZBXZFOIF.js → chunk-2YGBJHC2.js} +3 -3
- package/dist/{chunk-I35OMCL3.js → chunk-353XF4LU.js} +2 -2
- package/dist/{chunk-UF5BDAF6.js → chunk-3DXAJVXE.js} +6 -6
- package/dist/{chunk-AEOB4JCJ.js → chunk-3GGMHSY2.js} +3 -3
- package/dist/{chunk-K6XWIJN7.js → chunk-3N24FV22.js} +1 -1
- package/dist/{chunk-7WCYJXOF.js → chunk-47YGEM4N.js} +1 -1
- package/dist/{chunk-NVM3SKJ4.js → chunk-4CN3EE6U.js} +27 -21
- package/dist/{chunk-IQCC6WFI.js → chunk-4J77TCTX.js} +1 -1
- package/dist/{chunk-H5H2LGVE.js → chunk-5BWDUUMH.js} +3 -3
- package/dist/{chunk-O5RKAXCG.js → chunk-5DLZJ3MY.js} +1 -1
- package/dist/{chunk-E3ZO4EL3.js → chunk-5ZMNFSHV.js} +1 -1
- package/dist/{chunk-7QFRZT4H.js → chunk-657I6PUF.js} +3 -3
- package/dist/{chunk-IXRYS5X3.js → chunk-6777GNWI.js} +1 -1
- package/dist/{chunk-4THJIDJE.js → chunk-6BD6JYR2.js} +1 -1
- package/dist/{chunk-JTXXLNYD.js → chunk-6DMURUBY.js} +4 -4
- package/dist/{chunk-47UBJKS3.js → chunk-6HJF7IA3.js} +168 -205
- package/dist/{chunk-PONGX3YG.js → chunk-6J2J3VJS.js} +10 -10
- package/dist/{chunk-XBCIRNNU.js → chunk-6PXFF6IV.js} +1 -1
- package/dist/{chunk-DWK5HEKY.js → chunk-7HLAYQRG.js} +4 -4
- package/dist/{chunk-RWM6TZH6.js → chunk-7KPZQ65I.js} +3 -3
- package/dist/{chunk-BPXWWD7P.js → chunk-7PDZBPGW.js} +1 -1
- package/dist/{chunk-2K7IKLBL.js → chunk-7SHU5MOD.js} +1 -1
- package/dist/{chunk-APKEGWFB.js → chunk-A5I2GYVQ.js} +3 -3
- package/dist/{chunk-X4V5ZLNX.js → chunk-A75TAU2I.js} +628 -4
- package/dist/{chunk-T7W75LII.js → chunk-BE3UETW6.js} +3 -3
- package/dist/{chunk-575FWHQJ.js → chunk-BG6RAOCJ.js} +63 -9
- package/dist/{chunk-YSDSQRE2.js → chunk-BIPTWAEO.js} +1 -1
- package/dist/{chunk-FYKEL2L6.js → chunk-BLTXAUP6.js} +2 -2
- package/dist/{chunk-ASA2UJDH.js → chunk-CFFSHBQF.js} +1 -1
- package/dist/{chunk-XCKTCOK3.js → chunk-CJ6CS2IH.js} +5 -5
- package/dist/{chunk-V7AID6MC.js → chunk-CRW63CDI.js} +1 -1
- package/dist/{chunk-B34RSIUP.js → chunk-CWHTUNJX.js} +2 -2
- package/dist/{chunk-HKAWEIB2.js → chunk-D6NZNUVH.js} +1 -1
- package/dist/{chunk-CEHGXPMO.js → chunk-DHLJZDWI.js} +4 -4
- package/dist/{chunk-FCX2XHIC.js → chunk-DWRULKB3.js} +2 -2
- package/dist/{chunk-KNEEOZWN.js → chunk-EOWJXCYC.js} +25 -7
- package/dist/{chunk-5BWN6A5E.js → chunk-EWDBWOCX.js} +1 -1
- package/dist/{chunk-IUAW7FVX.js → chunk-FPF2PJFK.js} +3 -3
- package/dist/{chunk-B55U5BKF.js → chunk-FSXMKIDO.js} +1 -1
- package/dist/{chunk-2A556FNI.js → chunk-FUDXITKX.js} +1 -1
- package/dist/{chunk-FZT7CBXB.js → chunk-FYV2CTKP.js} +1 -1
- package/dist/{chunk-R2ZHPVF2.js → chunk-GATAYYAF.js} +3 -3
- package/dist/{chunk-CKRZBQ2K.js → chunk-GHYHNHDL.js} +1 -1
- package/dist/{chunk-IHBYJG7N.js → chunk-GL5ZG72X.js} +1 -1
- package/dist/{chunk-WSYIQKZ6.js → chunk-GM4UEZDE.js} +20 -20
- package/dist/{chunk-QKHQTHE6.js → chunk-GZVFHFO3.js} +10 -135
- package/dist/{chunk-XC2KAJK4.js → chunk-HA6BIZ6L.js} +5 -5
- package/dist/chunk-HDQAVAV6.js +248 -0
- package/dist/{chunk-5Q64Q5ZD.js → chunk-HDV2V25K.js} +1 -1
- package/dist/{chunk-26CY4EAR.js → chunk-HTFM7ZDD.js} +2 -2
- package/dist/{chunk-NUEDA2US.js → chunk-HUHR5CKJ.js} +4 -4
- package/dist/{chunk-BIHPY7JW.js → chunk-IC2AONBH.js} +9 -9
- package/dist/{chunk-2YK5HP2B.js → chunk-IHAXXDBH.js} +3 -3
- package/dist/{chunk-5JHIAGZY.js → chunk-IPUDXR67.js} +1 -1
- package/dist/{chunk-BBTNF72N.js → chunk-J6U4ZR77.js} +2 -2
- package/dist/{chunk-2OIVIPU7.js → chunk-JAIZCE6W.js} +3 -3
- package/dist/{chunk-WLV27PAO.js → chunk-JGBYZTWH.js} +1 -1
- package/dist/{chunk-4XY33GRO.js → chunk-JJZZXEAN.js} +3 -3
- package/dist/{chunk-3UEDFBDE.js → chunk-JNULO6I5.js} +3 -3
- package/dist/{chunk-JZ23D5YF.js → chunk-JTJP4JK7.js} +3 -3
- package/dist/{chunk-JDZNGC4O.js → chunk-JW5NUXPN.js} +11 -11
- package/dist/{chunk-GGT6Y5AN.js → chunk-K2HIXAIF.js} +12 -12
- package/dist/{chunk-NYV4A5IG.js → chunk-KEDZRQI3.js} +2 -2
- package/dist/{chunk-S2DTXCV6.js → chunk-KN5GAVCG.js} +2 -2
- package/dist/{chunk-LBEBSXZA.js → chunk-L5JFVK5T.js} +4 -4
- package/dist/{chunk-HNJLAMD3.js → chunk-LBSCOP25.js} +1 -1
- package/dist/{chunk-FOZSHNET.js → chunk-LLZUL7M2.js} +1 -1
- package/dist/{chunk-53GNYXNR.js → chunk-LQGLGSBY.js} +2 -2
- package/dist/{chunk-X2EBM5BQ.js → chunk-LSHUX7P4.js} +16 -16
- package/dist/{chunk-AWTLUJZL.js → chunk-M6AX64J2.js} +2 -2
- package/dist/{chunk-7RVTQXST.js → chunk-M6SUJLNP.js} +2 -2
- package/dist/{chunk-OUUNFTS4.js → chunk-MZNLQC6W.js} +1 -1
- package/dist/{chunk-PCF4QMJS.js → chunk-N7POJZJT.js} +10 -10
- package/dist/{chunk-2CG3LHI6.js → chunk-NCNT2C2P.js} +2 -2
- package/dist/{chunk-R3N5BCMM.js → chunk-O3BLL6MY.js} +1 -1
- package/dist/{chunk-SLG3T26A.js → chunk-O6KQAJCC.js} +3 -3
- package/dist/{chunk-2WOHFX4Z.js → chunk-OHHZNNUD.js} +1 -1
- package/dist/{chunk-HWP3WCLC.js → chunk-OPG237ZQ.js} +154 -50
- package/dist/{chunk-2LJ2GZEE.js → chunk-PDQGR5LZ.js} +1 -1
- package/dist/{chunk-UBTKHJCB.js → chunk-PTF5TB6O.js} +6 -6
- package/dist/{chunk-5F3E57TQ.js → chunk-PYXXL7N7.js} +1 -1
- package/dist/{chunk-HLNRLXUS.js → chunk-Q6KUBP6R.js} +5 -5
- package/dist/{chunk-AGY2KUQ6.js → chunk-QJWLQXR7.js} +1 -1
- package/dist/{chunk-ZEDLED43.js → chunk-QOFQY7BJ.js} +1 -1
- package/dist/{chunk-6T5RC3L4.js → chunk-QSW5DHMZ.js} +1 -1
- package/dist/{chunk-54Q7M2AG.js → chunk-QV26G2BF.js} +1 -1
- package/dist/{chunk-5WNZGNQL.js → chunk-RHHEYC6H.js} +3 -3
- package/dist/{chunk-K464YYT5.js → chunk-RHJOTGEU.js} +1 -1
- package/dist/{chunk-LZS2B2JT.js → chunk-RIKFXHLE.js} +247 -31
- package/dist/{chunk-6TOV7UVU.js → chunk-RJIH7JXM.js} +4 -4
- package/dist/{chunk-2Q2U3NB2.js → chunk-RMC2A6EE.js} +1 -1
- package/dist/{chunk-FUEKSCTN.js → chunk-RYMXD2NT.js} +1 -1
- package/dist/{chunk-MNWN3SQ3.js → chunk-RYYFFCJG.js} +1 -1
- package/dist/{chunk-E2346GKI.js → chunk-SINIRUYZ.js} +101 -9
- package/dist/{chunk-22XJWSWN.js → chunk-SXUABANK.js} +3 -3
- package/dist/{backup-verify-AOTKX5DA.js → chunk-T3AM52YT.js} +345 -89
- package/dist/{chunk-LCXWQVOD.js → chunk-TCBWHLKH.js} +4 -4
- package/dist/{chunk-YWZGDFAL.js → chunk-TS4LSNRI.js} +2 -2
- package/dist/{chunk-J6RTX7XT.js → chunk-TVWYMOZ4.js} +1 -1
- package/dist/{chunk-3WNDI5KT.js → chunk-VAHQOIQY.js} +1 -1
- package/dist/{chunk-QH2V67NX.js → chunk-VBYSAQJD.js} +1 -1
- package/dist/{chunk-MQD3JJCO.js → chunk-VQQPYI4X.js} +1 -1
- package/dist/{chunk-XJQGS4IM.js → chunk-VS7V5HNO.js} +1 -1
- package/dist/{chunk-CPC75PXE.js → chunk-W3ABSZ6G.js} +2 -2
- package/dist/{chunk-SUGAHHVR.js → chunk-W7VKGB42.js} +1 -1
- package/dist/{chunk-UG3YOQAC.js → chunk-X2ZHCNNB.js} +5 -5
- package/dist/{chunk-YC6SZFVD.js → chunk-X4FHT6ST.js} +5 -5
- package/dist/{chunk-RXICR3D7.js → chunk-XC5OASHV.js} +1 -1
- package/dist/{chunk-TU5Y5ZNC.js → chunk-XDOCXKHW.js} +58 -1
- package/dist/{chunk-DLHE4PCM.js → chunk-XEAZJXMZ.js} +4 -4
- package/dist/{chunk-XMMWBLQK.js → chunk-XQ7BIVLI.js} +6 -6
- package/dist/{chunk-FRJICRED.js → chunk-Z3LGAFMG.js} +1 -1
- package/dist/{chunk-HCBISGUU.js → chunk-ZJ6AMC4Y.js} +7 -7
- package/dist/{chunk-AEEAQZ3E.js → chunk-ZZR2WRNW.js} +4 -4
- package/dist/{cleanup-graph-garbage-N7FTWU6C.js → cleanup-graph-garbage-SYGPMPUM.js} +8 -8
- package/dist/{cli-shutdown-NCBQTN7G.js → cli-shutdown-JI7CASE4.js} +1 -1
- package/dist/{cloud-sync-command-UL7GNN3J.js → cloud-sync-command-ZV3P5FP6.js} +2 -2
- package/dist/{cloud-sync-db-init-ASM7ZXBH.js → cloud-sync-db-init-RQIHWKV4.js} +1 -1
- package/dist/{cloud-sync-shutdown-HER4ISBU.js → cloud-sync-shutdown-V2N7VLD3.js} +3 -3
- package/dist/{co-activation-V5XXR327.js → co-activation-SRE6DIRX.js} +3 -3
- package/dist/{co-occurrence-MKZ6YWSQ.js → co-occurrence-F5TMSEQZ.js} +6 -6
- package/dist/{consent-passphrase-YI3J4UEL.js → consent-passphrase-MWZRHJRC.js} +2 -2
- package/dist/{conversation-entity-extractor-66G7ROQ3.js → conversation-entity-extractor-XMOUHGMT.js} +3 -3
- package/dist/{crdt-sync-Z62SWOKD.js → crdt-sync-FXEKABM7.js} +4 -4
- package/dist/{crm-webhook-6GBACWJX.js → crm-webhook-D6IJOPRQ.js} +2 -2
- package/dist/{cto-delegation-gate-FUKPBFCM.js → cto-delegation-gate-BU3JRCYN.js} +12 -12
- package/dist/{daemon-orchestration-O3QPSJEP.js → daemon-orchestration-K4NKFYXO.js} +19 -19
- package/dist/{destructive-data-guard-JDUJ2ULM.js → destructive-data-guard-3TGAAE7K.js} +77 -23
- package/dist/{doc-graph-extractor-BBPKLIVM.js → doc-graph-extractor-TVK2NGAR.js} +6 -6
- package/dist/{documents-NILTWYSQ.js → documents-MDZ4VB5X.js} +8 -8
- package/dist/{dreaming-KMDGPIFY.js → dreaming-L24PSS35.js} +17 -17
- package/dist/{employee-boot-brief-KSH3MWIF.js → employee-boot-brief-GQVL3FQC.js} +21 -21
- package/dist/{entity-boost-XETN7C2S.js → entity-boost-OMFA5QCG.js} +1 -1
- package/dist/{exe-drift-SFD7SHXC.js → exe-drift-JDDG3OPT.js} +4 -4
- package/dist/{exe-export-NHWKEZL4.js → exe-export-EEGIE3JP.js} +10 -10
- package/dist/{exe-import-SPI5HJBU.js → exe-import-UJNC5Q2L.js} +10 -10
- package/dist/{exe-key-TY5LFUEM.js → exe-key-TYEY4W4E.js} +95 -95
- package/dist/{exe-org-LVQLXA7C.js → exe-org-B3ICTTEV.js} +32 -32
- package/dist/{exe-snapshot-WH2DSRZW.js → exe-snapshot-VBFBONYN.js} +20 -20
- package/dist/{fast-db-init-UN225WS7.js → fast-db-init-TFRTK6EH.js} +1 -1
- package/dist/{founder-context-DVHSVBM5.js → founder-context-3X4QUWKD.js} +2 -2
- package/dist/{founder-monitor-envelope-HMPPUBUT.js → founder-monitor-envelope-54UNZNY4.js} +4 -4
- package/dist/gateway/index.js +14 -14
- package/dist/{gateway-client-TXHCHOVM.js → gateway-client-OUDO5GGV.js} +1 -1
- package/dist/{git-staleness-CUVLXQOJ.js → git-staleness-73YZ5PGU.js} +3 -3
- package/dist/{global-procedures-T5W3S6OU.js → global-procedures-PYNE2BQG.js} +20 -6
- package/dist/{graph-auto-extract-S7OIZXYP.js → graph-auto-extract-PGUMEEQB.js} +6 -6
- package/dist/{graph-query-CRIH4DXF.js → graph-query-7YA3YNKL.js} +1 -1
- package/dist/{graph-rag-LH34CEGC.js → graph-rag-UWOTK4AQ.js} +3 -3
- package/dist/{hook-integrity-TSJYZFZ6.js → hook-integrity-6MNEPT6W.js} +1 -1
- package/dist/{hook-prefetch-SNW5DFCZ.js → hook-prefetch-JOF6YZSR.js} +13 -13
- package/dist/hooks/bug-report-worker.js +17 -17
- package/dist/hooks/codex-stop-task-finalizer.js +19 -19
- package/dist/hooks/commit-complete.js +16 -16
- package/dist/hooks/error-recall.js +11 -11
- package/dist/hooks/exe-heartbeat-hook.js +5 -5
- package/dist/hooks/ingest-worker.js +15 -15
- package/dist/hooks/ingest.js +13 -13
- package/dist/hooks/instructions-loaded.js +7 -7
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +6 -6
- package/dist/hooks/post-compact.js +5 -5
- package/dist/hooks/post-tool-combined.js +13 -13
- package/dist/hooks/pre-compact.js +16 -16
- package/dist/hooks/pre-tool-use.js +2 -2
- package/dist/hooks/prompt-submit.js +34 -34
- package/dist/hooks/session-end.js +21 -21
- package/dist/hooks/session-start.js +18 -18
- package/dist/hooks/stop.js +19 -19
- package/dist/hooks/subagent-stop.js +18 -18
- package/dist/hooks/summary-worker.js +20 -20
- package/dist/index.js +26 -26
- package/dist/{installer-4IVP2PTX.js → installer-34XZ7JMW.js} +6 -6
- package/dist/{installer-UFRZHMX5.js → installer-356RMQ2K.js} +6 -6
- package/dist/{installer-CJWNUASI.js → installer-7TN36Z7T.js} +112 -28
- package/dist/{intercom-queue-II6RRK3J.js → intercom-queue-ZJ3MNULM.js} +12 -12
- package/dist/lib/backup-verify-worker.js +157 -0
- package/dist/lib/cloud-sync.js +16 -20
- package/dist/lib/consolidation.js +9 -9
- package/dist/lib/crypto.js +3 -3
- package/dist/lib/database.js +3 -3
- package/dist/lib/db-backup.js +7 -3
- package/dist/lib/db-write-worker.js +3 -3
- package/dist/lib/db.js +3 -3
- package/dist/lib/device-registry.js +1 -1
- package/dist/lib/employee-templates.js +7 -7
- package/dist/lib/employees.js +3 -3
- package/dist/lib/exe-daemon.js +89 -84
- package/dist/lib/hybrid-search.js +9 -9
- package/dist/lib/identity.js +3 -3
- package/dist/lib/keychain.js +1 -1
- package/dist/lib/license.js +2 -2
- package/dist/lib/messaging.js +13 -13
- package/dist/lib/post-tool-memory.js +13 -13
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +4 -4
- package/dist/lib/schedules.js +8 -8
- package/dist/lib/session-registry.js +5 -5
- package/dist/lib/skill-learning.js +9 -9
- package/dist/lib/store.js +7 -7
- package/dist/lib/task-router.js +4 -4
- package/dist/lib/tasks.js +14 -14
- package/dist/lib/tmux-routing.js +12 -12
- package/dist/lib/token-spend.js +4 -4
- package/dist/lib/ws-client.js +1 -1
- package/dist/{license-gate-M7EDJLAA.js → license-gate-4BXUTHLB.js} +3 -3
- package/dist/{license-recheck-DLTOHAH2.js → license-recheck-QFPUKISQ.js} +1 -1
- package/dist/{license-sync-YTDCUN3S.js → license-sync-FDEDT4AC.js} +2 -2
- package/dist/mcp/register-tools.js +94 -94
- package/dist/mcp/server.js +97 -97
- package/dist/mcp/tools/complete-reminder.js +5 -5
- package/dist/mcp/tools/create-reminder.js +5 -5
- package/dist/mcp/tools/create-task.js +16 -16
- package/dist/mcp/tools/deactivate-behavior.js +10 -10
- package/dist/mcp/tools/list-reminders.js +5 -5
- package/dist/mcp/tools/list-tasks.js +16 -16
- package/dist/mcp/tools/send-message.js +15 -15
- package/dist/mcp/tools/update-task.js +15 -15
- package/dist/{mcp-http-config-652YK3CI.js → mcp-http-config-GKP5QGAO.js} +5 -5
- package/dist/{mcp-session-identity-6QGXD52Y.js → mcp-session-identity-JHAGRB7B.js} +12 -12
- package/dist/{memory-cards-FOPSLULE.js → memory-cards-O377ETAM.js} +7 -7
- package/dist/{memory-graph-extractor-7G3CIGN7.js → memory-graph-extractor-4KJCCUOP.js} +7 -7
- package/dist/{memory-maintenance-5XIGUPYL.js → memory-maintenance-RR5UPRW3.js} +1 -1
- package/dist/{memory-poisoning-defense-MI7Y5XBP.js → memory-poisoning-defense-Y5TTKGOP.js} +3 -3
- package/dist/{memory-pressure-watchdog-SPIDPGU2.js → memory-pressure-watchdog-NGXTI4HR.js} +13 -13
- package/dist/{memory-reflection-DVAT4QKS.js → memory-reflection-EXNHRZL7.js} +7 -7
- package/dist/{memory-write-repository-YC7HJTV5.js → memory-write-repository-S4TX7WQB.js} +1 -1
- package/dist/{monitor-grants-3A77O6XK.js → monitor-grants-57Q4NL25.js} +3 -3
- package/dist/{monitor-identity-BTFFMFEX.js → monitor-identity-3FQ52SYU.js} +2 -2
- package/dist/{notification-ledger-AV5242RM.js → notification-ledger-O6KQYYGK.js} +13 -13
- package/dist/{notifications-75FVPJLY.js → notifications-6FCQCJ4P.js} +12 -12
- package/dist/{orchestration-events-ARGZU6KS.js → orchestration-events-2Z2BMMA5.js} +4 -4
- package/dist/{orchestrator-TCXZMLSB.js → orchestrator-AGOSKPHD.js} +14 -14
- package/dist/{org-brief-session-B455POUI.js → org-brief-session-WJHZVXXJ.js} +15 -15
- package/dist/{org-consent-policy-7K5H6FOB.js → org-consent-policy-X43UGTHI.js} +5 -5
- package/dist/{org-join-ETR5KO27.js → org-join-M3UTBMHC.js} +9 -9
- package/dist/{org-key-admin-IRC6H3TL.js → org-key-admin-AA2DRHB2.js} +11 -11
- package/dist/{org-key-epoch-EG4YQ47A.js → org-key-epoch-Z5UIVUHT.js} +5 -5
- package/dist/{org-key-pin-GLQEU3P3.js → org-key-pin-FE6YHEZ3.js} +3 -3
- package/dist/{org-membership-JC5YVU6N.js → org-membership-3J2MIGE4.js} +4 -4
- package/dist/{org-partner-config-QFSVGHEA.js → org-partner-config-5HATZYG4.js} +8 -8
- package/dist/{org-partner-runtime-7AD7WY3Y.js → org-partner-runtime-UI35IHUC.js} +15 -15
- package/dist/{org-row-visibility-AXZKVOA6.js → org-row-visibility-TRJERVYP.js} +1 -1
- package/dist/{pipeline-router-2KY4X6PO.js → pipeline-router-EKQ6D7ZA.js} +4 -4
- package/dist/{plan-limits-PG6HG2DT.js → plan-limits-3BGHIHX6.js} +6 -6
- package/dist/{platform-procedures-QP3W2NLH.js → platform-procedures-RXW46WNY.js} +1 -1
- package/dist/{pre-tool-use-impl-45B4NFIF.js → pre-tool-use-impl-7BT5TJVM.js} +28 -28
- package/dist/{project-name-LHYHR4VN.js → project-name-PGJGUEJY.js} +4 -4
- package/dist/{projection-worker-POT2AOR5.js → projection-worker-3GEVFPAI.js} +2 -2
- package/dist/{prospective-memory-ECXSAEAW.js → prospective-memory-GEN7CN7H.js} +3 -3
- package/dist/{push-notifications-W3UNHDC5.js → push-notifications-QW4BWRC7.js} +13 -13
- package/dist/{reproject-worktree-memories-PIXMJBHG.js → reproject-worktree-memories-DIULBEBD.js} +12 -12
- package/dist/{reranker-ZBPYIRBB.js → reranker-LQ6OPJOI.js} +1 -1
- package/dist/{retrieval-health-42MFLOEP.js → retrieval-health-XDFYFEOP.js} +1 -1
- package/dist/{review-polling-V4CSK4TZ.js → review-polling-ED33YLFT.js} +13 -13
- package/dist/runtime/index.js +20 -20
- package/dist/{session-events-C3NUY6MR.js → session-events-7IJGTBVH.js} +13 -13
- package/dist/{session-kill-telemetry-ZOSAIYU2.js → session-kill-telemetry-RUTEARJ3.js} +13 -13
- package/dist/{session-scope-BZALGKYZ.js → session-scope-SSYA64L3.js} +12 -12
- package/dist/{setup-wizard-DNA2UT4J.js → setup-wizard-XD7FZVLJ.js} +2 -2
- package/dist/{shard-manager-NG4SXV7L.js → shard-manager-FH5JZRSE.js} +2 -2
- package/dist/{skill-refinement-Y3M7XBRE.js → skill-refinement-UHD4E6GV.js} +4 -4
- package/dist/{skill-retrieval-XDY352AS.js → skill-retrieval-F6PAJ3I5.js} +11 -11
- package/dist/{skill-usage-QOLIJQJC.js → skill-usage-2MBTF7Y4.js} +4 -4
- package/dist/{stack-generate-manifest-VFHCOLAD.js → stack-generate-manifest-MVJDTU4F.js} +13 -37
- package/dist/{stack-promote-24BY6AXF.js → stack-promote-BMGEY6SQ.js} +4 -4
- package/dist/{stack-release-AXH7ZIOR.js → stack-release-64UJ6Y4W.js} +17 -34
- package/dist/{stack-update-7ET7S3ED.js → stack-update-EBATTQPP.js} +5 -3
- package/dist/{steward-gate-2MUESY3V.js → steward-gate-EWG2BHYQ.js} +4 -4
- package/dist/{subagent-brief-injection-6PM3WMMR.js → subagent-brief-injection-YZGSWUEY.js} +23 -23
- package/dist/{support-bug-actions-WWKDXT74.js → support-bug-actions-RU6WZ3UV.js} +3 -3
- package/dist/{support-inbox-AN44HIOG.js → support-inbox-A3S52SPS.js} +12 -12
- package/dist/{task-enforcement-QO7RXYK2.js → task-enforcement-LVAS55AR.js} +13 -13
- package/dist/{task-request-inbox-RXAT2QJF.js → task-request-inbox-2TN4ZUH2.js} +5 -5
- package/dist/{task-scope-4EKZBTTM.js → task-scope-NLKUVCP5.js} +12 -12
- package/dist/{tasks-crud-MB7WXGPW.js → tasks-crud-NQDPLHNZ.js} +12 -12
- package/dist/{tasks-notify-BCWO7AP6.js → tasks-notify-BDM2NEHP.js} +13 -13
- package/dist/{tasks-review-HXHYA76X.js → tasks-review-3G7CAW2O.js} +12 -12
- package/dist/{telemetry-upload-Q7DLE5I3.js → telemetry-upload-6DR6AL3V.js} +8 -8
- package/dist/{token-budget-EL6BEBDP.js → token-budget-KNC2WGR7.js} +4 -4
- package/dist/{tool-telemetry-SNWF4WDH.js → tool-telemetry-I3SEU5M5.js} +1 -1
- package/dist/tui/App.js +23 -23
- package/dist/{tui-data-ZMSBEPJT.js → tui-data-KJDWP4CB.js} +16 -16
- package/dist/{update-support-QY7WALUZ.js → update-support-UYDYMHVR.js} +11 -11
- package/dist/{whatsapp-NCZ43BB3.js → whatsapp-5EMPZHF5.js} +2 -2
- package/dist/{wiki-acl-3L7BRJUV.js → wiki-acl-M7BTQJBZ.js} +1 -1
- package/dist/{work-claims-XQXT2VWJ.js → work-claims-5CFMZTML.js} +4 -4
- package/dist/{work-state-heartbeat-GAIQ7M73.js → work-state-heartbeat-7IA2DZ2E.js} +1 -1
- package/dist/{workflow-engine-FCOOI5M6.js → workflow-engine-S5JOE2YR.js} +2 -2
- package/dist/{worktree-GS4ODQ4C.js → worktree-7V4ZMF3D.js} +5 -5
- package/dist/{worktree-sweep-6LMC7H5Y.js → worktree-sweep-34MXJ7S6.js} +6 -6
- package/package.json +2 -1
- package/release-notes.json +21 -25
- package/stack.release.json +5 -5
- package/dist/chunk-WZPD4QSE.js +0 -113
- /package/dist/{chunk-IKJUZ3VO.js → chunk-542FBM5U.js} +0 -0
- /package/dist/{chunk-XJDSTA2C.js → chunk-6D2O5SAH.js} +0 -0
- /package/dist/{chunk-FDQXQBBC.js → chunk-6NRZLVK3.js} +0 -0
- /package/dist/{chunk-XDWIJBTY.js → chunk-CFO47VW4.js} +0 -0
- /package/dist/{chunk-R6H2IRCF.js → chunk-EULAP6L6.js} +0 -0
- /package/dist/{chunk-LK6OG47X.js → chunk-FYSKQPTE.js} +0 -0
- /package/dist/{chunk-LAWI42NC.js → chunk-J4B4M5PH.js} +0 -0
- /package/dist/{chunk-AC36VWNB.js → chunk-J635FA7T.js} +0 -0
- /package/dist/{chunk-UQKGV6SX.js → chunk-MOBZTIJQ.js} +0 -0
- /package/dist/{chunk-7ZP2PAW3.js → chunk-N45FAI6D.js} +0 -0
- /package/dist/{chunk-ZQS4S4AX.js → chunk-QDSNEGJE.js} +0 -0
- /package/dist/{chunk-CS4SHHLY.js → chunk-SKSXROKP.js} +0 -0
- /package/dist/{chunk-JXGOO53U.js → chunk-YVWXI2HM.js} +0 -0
- /package/dist/{core-memory-3TZV3ZDW.js → core-memory-PZEO3OWH.js} +0 -0
- /package/dist/{memory-isolation-TE4AOMQX.js → memory-isolation-MFNT2ITE.js} +0 -0
- /package/dist/{oauth-server-CWQ6EBGQ.js → oauth-server-CBGEWD6H.js} +0 -0
- /package/dist/{project-boot-MX2FNKTJ.js → project-boot-VESAYDIH.js} +0 -0
|
@@ -19,10 +19,10 @@ import {
|
|
|
19
19
|
} from "./chunk-RT57D7C4.js";
|
|
20
20
|
import {
|
|
21
21
|
loadLicense
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-EOWJXCYC.js";
|
|
23
23
|
|
|
24
24
|
// src/lib/stack-update.ts
|
|
25
|
-
import { execFileSync, spawnSync as spawnSync2 } from "child_process";
|
|
25
|
+
import { execFileSync as execFileSync2, spawnSync as spawnSync2 } from "child_process";
|
|
26
26
|
import { createHash, createVerify, randomBytes, verify as verifySignature } from "crypto";
|
|
27
27
|
import { chmodSync, closeSync, copyFileSync, existsSync, lstatSync, mkdirSync, openSync, realpathSync, readdirSync, readFileSync, renameSync, rmSync, statSync, unlinkSync, utimesSync, writeFileSync } from "fs";
|
|
28
28
|
import http from "http";
|
|
@@ -32,6 +32,183 @@ import path from "path";
|
|
|
32
32
|
import { fileURLToPath } from "url";
|
|
33
33
|
import { parseDocument as parseYamlDocument } from "yaml";
|
|
34
34
|
|
|
35
|
+
// src/lib/stack-worker-migration.ts
|
|
36
|
+
import { isScalar, parseDocument } from "yaml";
|
|
37
|
+
var LEGACY_IMAGE = "${EXE_OS_WORKER_IMAGE_TAG:-ghcr.io/askexe/exe-os-worker:v0.9.311}";
|
|
38
|
+
var DISABLED_IMAGE = "${EXE_OS_WORKER_IMAGE_TAG:-}";
|
|
39
|
+
var WORKER = "exe-os-worker";
|
|
40
|
+
function planLegacyWorkerMigration(input) {
|
|
41
|
+
const unchanged = { raw: input.composeRaw, changed: false };
|
|
42
|
+
if (!input.composeRaw.includes(LEGACY_IMAGE)) return unchanged;
|
|
43
|
+
const doc = parseDocument(input.composeRaw, { uniqueKeys: true });
|
|
44
|
+
if (doc.errors.length) throw new Error("Cannot inspect legacy worker migration: invalid Compose YAML");
|
|
45
|
+
const image = doc.getIn(["services", WORKER, "image"], true);
|
|
46
|
+
if (!isScalar(image) || image.value !== LEGACY_IMAGE) return unchanged;
|
|
47
|
+
const refuse = (reason) => {
|
|
48
|
+
throw new Error(`Cannot migrate the legacy embeddings worker: ${reason}. Keep the signed-manifest and digest checks enabled.`);
|
|
49
|
+
};
|
|
50
|
+
const worker = doc.getIn(["services", WORKER]);
|
|
51
|
+
const definition = worker.toJSON();
|
|
52
|
+
if (definition.extends || !Array.isArray(definition.profiles) || definition.profiles.length !== 1 || definition.profiles[0] !== "embeddings") {
|
|
53
|
+
refuse("the worker is not the shipped embeddings-only service");
|
|
54
|
+
}
|
|
55
|
+
const processEnv = input.processEnv ?? process.env;
|
|
56
|
+
const unquote = (value) => value.trim().replace(/\s+#.*$/, "").replace(/^(["'])(.*)\1$/, "$2").trim();
|
|
57
|
+
for (const value of [input.env.get("COMPOSE_PROFILES") ?? "", processEnv.COMPOSE_PROFILES ?? ""]) {
|
|
58
|
+
const profiles = unquote(value).split(",").map((profile) => profile.trim()).filter(Boolean);
|
|
59
|
+
if (profiles.some((profile) => !/^(?:[a-zA-Z0-9][a-zA-Z0-9_.-]*|\*)$/.test(profile))) {
|
|
60
|
+
refuse("enabled profiles could not be determined");
|
|
61
|
+
}
|
|
62
|
+
if (profiles.includes("embeddings") || profiles.includes("*")) refuse("embeddings are enabled");
|
|
63
|
+
}
|
|
64
|
+
if ([input.env.get("EXE_OS_WORKER_IMAGE_TAG") ?? "", processEnv.EXE_OS_WORKER_IMAGE_TAG ?? ""].some((value) => unquote(value))) {
|
|
65
|
+
refuse("an explicit worker image is configured; it must be covered by a signed release");
|
|
66
|
+
}
|
|
67
|
+
if (input.hostServicesUnavailable) refuse("the host's running services could not be observed");
|
|
68
|
+
if (input.hostServices.includes(WORKER)) refuse("the worker exists on the host");
|
|
69
|
+
if (input.overrideRaw) {
|
|
70
|
+
const override = parseDocument(input.overrideRaw, { uniqueKeys: true });
|
|
71
|
+
if (override.errors.length) refuse("the customer override could not be inspected");
|
|
72
|
+
if (override.hasIn(["services", WORKER])) refuse("the customer override defines the worker");
|
|
73
|
+
}
|
|
74
|
+
const targetComposeRaw = typeof input.targetComposeRaw === "function" ? input.targetComposeRaw() : input.targetComposeRaw;
|
|
75
|
+
if (!targetComposeRaw) refuse("the packaged replacement template is missing");
|
|
76
|
+
const target = parseDocument(targetComposeRaw, { uniqueKeys: true });
|
|
77
|
+
if (target.errors.length || target.getIn(["services", WORKER, "image"]) !== DISABLED_IMAGE) {
|
|
78
|
+
refuse("the packaged replacement does not contain the current disabled worker slot");
|
|
79
|
+
}
|
|
80
|
+
if (!image.range) refuse("the legacy image location is unavailable");
|
|
81
|
+
return {
|
|
82
|
+
raw: input.composeRaw.slice(0, image.range[0]) + JSON.stringify(DISABLED_IMAGE) + input.composeRaw.slice(image.range[1]),
|
|
83
|
+
changed: true
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// src/lib/monitor-rollback.ts
|
|
88
|
+
import { execFileSync } from "child_process";
|
|
89
|
+
var LEGACY_HUB_DIGEST = "sha256:1af31893cc8b1e51892be7d7705fa6c6b3108af8366b1fa8da2879d8ae21ec88";
|
|
90
|
+
var runDocker = (args) => execFileSync("docker", args, {
|
|
91
|
+
encoding: "utf8",
|
|
92
|
+
timeout: 12e4,
|
|
93
|
+
maxBuffer: 1024 * 1024
|
|
94
|
+
});
|
|
95
|
+
function restoreLegacyMonitorOwnership(composeArgs, run = runDocker) {
|
|
96
|
+
const configured = JSON.parse(
|
|
97
|
+
run([...composeArgs, "config", "--format", "json"])
|
|
98
|
+
).services?.["exe-monitor-hub"];
|
|
99
|
+
if (!configured || typeof configured.image !== "string" || !configured.image.trim())
|
|
100
|
+
return false;
|
|
101
|
+
if (configured.user != null && String(configured.user).trim() && !["65532", "65532:65532"].includes(String(configured.user)))
|
|
102
|
+
return false;
|
|
103
|
+
const ids = run([...composeArgs, "ps", "--all", "--quiet", "exe-monitor-hub"]).trim().split(/\s+/).filter(Boolean);
|
|
104
|
+
if (ids.length === 0) return false;
|
|
105
|
+
if (ids.length !== 1 || !/^[a-f0-9]{12,64}$/.test(ids[0])) {
|
|
106
|
+
throw new Error("Cannot attribute the installed monitor container safely");
|
|
107
|
+
}
|
|
108
|
+
const image = JSON.parse(run(["image", "inspect", configured.image]))[0];
|
|
109
|
+
if (!image?.RepoDigests?.some(
|
|
110
|
+
(ref) => ref.endsWith("@" + LEGACY_HUB_DIGEST)
|
|
111
|
+
))
|
|
112
|
+
return false;
|
|
113
|
+
if (image.Config?.User !== "65532:65532")
|
|
114
|
+
throw new Error(
|
|
115
|
+
"Legacy monitor runtime identity differs from its verified artifact"
|
|
116
|
+
);
|
|
117
|
+
const hub = JSON.parse(run(["inspect", ids[0]]))[0];
|
|
118
|
+
if (typeof hub?.Id !== "string" || !hub.Id.startsWith(ids[0]))
|
|
119
|
+
throw new Error("Monitor observation changed before recovery");
|
|
120
|
+
const project = hub?.Config?.Labels?.["com.docker.compose.project"];
|
|
121
|
+
const mount = hub?.Mounts?.find(
|
|
122
|
+
(m) => m.Destination === "/app/exe-monitor_data"
|
|
123
|
+
);
|
|
124
|
+
if (!project || hub.Config.Labels["com.docker.compose.service"] !== "exe-monitor-hub" || mount?.Type !== "volume" || typeof mount.Name !== "string" || !/^[A-Za-z0-9][A-Za-z0-9_.-]*$/.test(mount.Name)) {
|
|
125
|
+
throw new Error(
|
|
126
|
+
"Legacy monitor recovery requires its managed named data volume"
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
const volume = JSON.parse(run(["volume", "inspect", mount.Name]))[0];
|
|
130
|
+
if (volume?.Name !== mount.Name || volume.Labels?.["com.docker.compose.project"] !== project || volume.Labels["com.docker.compose.volume"] !== "monitor_hub_data") {
|
|
131
|
+
throw new Error(
|
|
132
|
+
"Legacy monitor data-volume ownership is not attributable to this stack"
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
const db = JSON.parse(run(["inspect", "exe-db"]))[0];
|
|
136
|
+
if (db?.Config?.Labels?.["com.docker.compose.project"] !== project || db.Config.Labels["com.docker.compose.service"] !== "exe-db" || !/^sha256:[a-f0-9]{64}$/.test(db.Image)) {
|
|
137
|
+
throw new Error(
|
|
138
|
+
"Legacy monitor recovery requires this stack's immutable database helper image"
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
let helper = JSON.parse(run(["image", "inspect", db.Image]))[0];
|
|
142
|
+
let helperId = db.Image;
|
|
143
|
+
if (!helper?.Os || !helper?.Architecture) {
|
|
144
|
+
const descriptor = db.ImageManifestDescriptor;
|
|
145
|
+
const platform = descriptor?.platform;
|
|
146
|
+
if (!/^sha256:[a-f0-9]{64}$/.test(descriptor?.digest ?? "") || platform?.os !== "linux" || !["amd64", "arm64"].includes(platform.architecture))
|
|
147
|
+
throw new Error("Cannot resolve native recovery helper platform");
|
|
148
|
+
helper = JSON.parse(
|
|
149
|
+
run([
|
|
150
|
+
"image",
|
|
151
|
+
"inspect",
|
|
152
|
+
"--platform",
|
|
153
|
+
`linux/${platform.architecture}`,
|
|
154
|
+
db.Image
|
|
155
|
+
])
|
|
156
|
+
)[0];
|
|
157
|
+
helperId = descriptor.digest;
|
|
158
|
+
if (helper?.Architecture !== platform.architecture)
|
|
159
|
+
throw new Error("Recovery helper differs from the running DB platform");
|
|
160
|
+
}
|
|
161
|
+
if (helper?.Id !== helperId || helper.Os !== "linux" || !["amd64", "arm64"].includes(helper.Architecture)) {
|
|
162
|
+
throw new Error("Legacy monitor recovery helper metadata is inconsistent");
|
|
163
|
+
}
|
|
164
|
+
const base = [
|
|
165
|
+
"run",
|
|
166
|
+
"--rm",
|
|
167
|
+
"--network",
|
|
168
|
+
"none",
|
|
169
|
+
"--read-only",
|
|
170
|
+
"--user",
|
|
171
|
+
"0:0",
|
|
172
|
+
"--platform",
|
|
173
|
+
`linux/${helper.Architecture}`,
|
|
174
|
+
"--label",
|
|
175
|
+
`com.askexe.monitor-recovery=${project}`
|
|
176
|
+
];
|
|
177
|
+
const owner = run([
|
|
178
|
+
...base,
|
|
179
|
+
"--entrypoint",
|
|
180
|
+
"stat",
|
|
181
|
+
"--mount",
|
|
182
|
+
`type=volume,src=${mount.Name},dst=/recovery,readonly`,
|
|
183
|
+
db.Image,
|
|
184
|
+
"-c",
|
|
185
|
+
"%u:%g",
|
|
186
|
+
"/recovery"
|
|
187
|
+
]).trim();
|
|
188
|
+
if (owner === "65532:65532") return false;
|
|
189
|
+
if (!/^\d+:\d+$/.test(owner))
|
|
190
|
+
throw new Error("Cannot observe legacy monitor data ownership safely");
|
|
191
|
+
run([...composeArgs, "stop", "--timeout", "10", "exe-monitor-hub"]);
|
|
192
|
+
run([
|
|
193
|
+
...base,
|
|
194
|
+
"--cap-drop",
|
|
195
|
+
"ALL",
|
|
196
|
+
"--cap-add",
|
|
197
|
+
"CHOWN",
|
|
198
|
+
"--cap-add",
|
|
199
|
+
"DAC_OVERRIDE",
|
|
200
|
+
"--entrypoint",
|
|
201
|
+
"chown",
|
|
202
|
+
"--mount",
|
|
203
|
+
`type=volume,src=${mount.Name},dst=/recovery`,
|
|
204
|
+
db.Image,
|
|
205
|
+
"-Rh",
|
|
206
|
+
"65532:65532",
|
|
207
|
+
"/recovery"
|
|
208
|
+
]);
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
|
|
35
212
|
// src/lib/askexe-image-prefixes.ts
|
|
36
213
|
var ASKEXE_IMAGE_PREFIXES = ["ghcr.io/askexe/", "update.askexe.com/askexe/"];
|
|
37
214
|
function isAskExeHostedImageRef(trimmedImage) {
|
|
@@ -1292,6 +1469,11 @@ async function rollbackStackUpdate(options) {
|
|
|
1292
1469
|
if (options.retainCompose && !(scopedServiceNames.length === 1 && lockData?.services)) {
|
|
1293
1470
|
throw new Error("--retain-compose rollback refused an unscoped restart; restore the selected service from backup manually");
|
|
1294
1471
|
}
|
|
1472
|
+
if (!options.exec && (scopedServiceNames.length === 0 || scopedServiceNames.includes("monitorHub"))) {
|
|
1473
|
+
if (restoreLegacyMonitorOwnership(composeArgs)) {
|
|
1474
|
+
console.log("[stack-update] Restored legacy monitor data ownership before rollback restart");
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1295
1477
|
if (scopedServiceNames.length > 0 && lockData?.services) {
|
|
1296
1478
|
const scopedComposeServices = scopedComposeImageServices(
|
|
1297
1479
|
scopedServiceNames.map((serviceName) => lockData.services[serviceName]?.composeService ?? serviceName),
|
|
@@ -1936,6 +2118,7 @@ var MONITOR_IMAGE_TAG_ENV = {
|
|
|
1936
2118
|
monitorHub: "MONITOR_HUB_IMAGE_TAG",
|
|
1937
2119
|
monitorAgent: "MONITOR_AGENT_IMAGE_TAG"
|
|
1938
2120
|
};
|
|
2121
|
+
var OBSERVED_ROOT_AGENT_DIGEST = "sha256:29fbd445f79484df04f000603e4ff445e76f0380f86d687a0033e3a0ef7d1b7a";
|
|
1939
2122
|
var STOCK_BESZEL_MONITOR_VERSIONS = /* @__PURE__ */ new Set(["0.9.5"]);
|
|
1940
2123
|
function monitorImageVersion(imageRef) {
|
|
1941
2124
|
const noDigest = imageRef.split("@")[0] ?? imageRef;
|
|
@@ -1950,6 +2133,7 @@ function isStockBeszelMonitorImage(imageRef) {
|
|
|
1950
2133
|
return version !== void 0 && STOCK_BESZEL_MONITOR_VERSIONS.has(version);
|
|
1951
2134
|
}
|
|
1952
2135
|
function monitorHealthBinForImage(serviceKey, imageRef) {
|
|
2136
|
+
if (serviceKey === "monitorAgent" && imageRef.endsWith(`@${OBSERVED_ROOT_AGENT_DIGEST}`)) return "/agent";
|
|
1953
2137
|
const stock = isStockBeszelMonitorImage(imageRef);
|
|
1954
2138
|
if (serviceKey === "monitorHub") return stock ? "/beszel" : "/app/beszel";
|
|
1955
2139
|
return stock ? "/agent" : "/app/beszel-agent";
|
|
@@ -2202,14 +2386,17 @@ function collectImageAvailabilityIssues(plan) {
|
|
|
2202
2386
|
try {
|
|
2203
2387
|
const result = spawnSync2("docker", ["manifest", "inspect", manifestInspectRef(image), "--verbose"], {
|
|
2204
2388
|
stdio: ["ignore", "pipe", "pipe"],
|
|
2205
|
-
|
|
2389
|
+
// Multi-platform official images can require dozens of child-manifest
|
|
2390
|
+
// requests through the proxy. A valid Redis index took 68s in the
|
|
2391
|
+
// legacy-upgrade rehearsal; 30s misreported it as an absent image.
|
|
2392
|
+
timeout: 12e4
|
|
2206
2393
|
});
|
|
2207
2394
|
if (result.status === 0) {
|
|
2208
2395
|
inspected = true;
|
|
2209
2396
|
inspectOutput = result.stdout?.toString() ?? "";
|
|
2210
2397
|
break;
|
|
2211
2398
|
}
|
|
2212
|
-
lastStderr = result.stderr?.toString().trim()
|
|
2399
|
+
lastStderr = result.error?.message || result.stderr?.toString().trim() || "manifest inspection failed";
|
|
2213
2400
|
if (attempt < maxAttempts) {
|
|
2214
2401
|
const delayMs = baseDelayMs * Math.pow(2, attempt - 1);
|
|
2215
2402
|
console.log(
|
|
@@ -2232,13 +2419,14 @@ function collectImageAvailabilityIssues(plan) {
|
|
|
2232
2419
|
try {
|
|
2233
2420
|
const parsed = JSON.parse(inspectOutput);
|
|
2234
2421
|
const manifests = Array.isArray(parsed) ? parsed : [parsed];
|
|
2422
|
+
const platformOf = (m) => m.platform ?? m.Descriptor?.platform;
|
|
2235
2423
|
const hasAmd64 = manifests.some((m) => {
|
|
2236
|
-
const platform = m
|
|
2424
|
+
const platform = platformOf(m);
|
|
2237
2425
|
return platform?.architecture === "amd64" && platform?.os === "linux";
|
|
2238
2426
|
});
|
|
2239
|
-
if (!hasAmd64 && manifests.
|
|
2427
|
+
if (!hasAmd64 && manifests.some((m) => platformOf(m))) {
|
|
2240
2428
|
const platforms = manifests.map((m) => {
|
|
2241
|
-
const p = m
|
|
2429
|
+
const p = platformOf(m);
|
|
2242
2430
|
return `${p?.os ?? "?"}/${p?.architecture ?? "?"}`;
|
|
2243
2431
|
}).join(", ");
|
|
2244
2432
|
issues.push({
|
|
@@ -3904,6 +4092,9 @@ async function runStackUpdate(options) {
|
|
|
3904
4092
|
return withStackUpdateOperationLock(options.envFile, () => runStackUpdateUnlocked(options));
|
|
3905
4093
|
}
|
|
3906
4094
|
async function runStackUpdateUnlocked(options) {
|
|
4095
|
+
if (options.rollback && (options.dryRun || options.verifyImages)) {
|
|
4096
|
+
throw new Error("Rollback cannot be combined with a read-only preview; no rollback was performed.");
|
|
4097
|
+
}
|
|
3907
4098
|
const exec = options.exec ?? defaultExec;
|
|
3908
4099
|
const now = options.now ?? (() => /* @__PURE__ */ new Date());
|
|
3909
4100
|
const phaseDurations = [];
|
|
@@ -3925,17 +4116,17 @@ async function runStackUpdateUnlocked(options) {
|
|
|
3925
4116
|
};
|
|
3926
4117
|
if (options.rollback) return rollbackStackUpdate(options);
|
|
3927
4118
|
let preBootstrapBackup;
|
|
3928
|
-
if (!options.dryRun && existsSync(options.envFile)) {
|
|
4119
|
+
if (!options.dryRun && !options.verifyImages && existsSync(options.envFile)) {
|
|
3929
4120
|
const preBootstrapEnvRaw = readFileSync(options.envFile, "utf8");
|
|
3930
4121
|
preBootstrapBackup = backupStackConfig(path.dirname(options.envFile), options.composeFile, preBootstrapEnvRaw, now);
|
|
3931
4122
|
}
|
|
3932
|
-
if (options.bootstrap !== false) {
|
|
4123
|
+
if (options.bootstrap !== false && !options.dryRun && !options.verifyImages) {
|
|
3933
4124
|
const report = bootstrapStackHost({ ...options, installDocker: options.installDocker ?? !!options.yes });
|
|
3934
4125
|
if (!options.dryRun) assertHostReadyForApply(report);
|
|
3935
4126
|
}
|
|
3936
4127
|
assertBindMountsExist(path.dirname(options.envFile));
|
|
3937
4128
|
warnLegacyDaemonVolume(options.volumeExists);
|
|
3938
|
-
if (!options.dryRun) {
|
|
4129
|
+
if (!options.dryRun && !options.verifyImages) {
|
|
3939
4130
|
try {
|
|
3940
4131
|
const endPhase = startPhase("preflight");
|
|
3941
4132
|
if (!options.preflight) {
|
|
@@ -3962,7 +4153,7 @@ async function runStackUpdateUnlocked(options) {
|
|
|
3962
4153
|
const hubUrl = options.monitorHubUrl || parseEnv(readFileSync(options.envFile, "utf8")).get("MONITOR_HUB_URL") || "";
|
|
3963
4154
|
const pairLicense = options.licenseKey || process.env.EXE_LICENSE_KEY || loadLicense() || "";
|
|
3964
4155
|
const pairDomain = options.domain || process.env.EXE_STACK_DOMAIN || process.env.CUSTOMER_DOMAIN || "";
|
|
3965
|
-
if (!options.retainCompose && hubUrl && pairLicense && pairDomain) {
|
|
4156
|
+
if (!options.dryRun && !options.verifyImages && !options.retainCompose && hubUrl && pairLicense && pairDomain) {
|
|
3966
4157
|
const envBefore = readFileSync(options.envFile, "utf8");
|
|
3967
4158
|
const parsedEnvBefore = parseEnv(envBefore);
|
|
3968
4159
|
const monitorToken = parsedEnvBefore.get("MONITOR_AGENT_TOKEN") ?? "";
|
|
@@ -3990,6 +4181,7 @@ async function runStackUpdateUnlocked(options) {
|
|
|
3990
4181
|
);
|
|
3991
4182
|
reportStackManifestSource(manifestLoad);
|
|
3992
4183
|
const manifest = manifestLoad.manifest;
|
|
4184
|
+
let previewServiceSelection;
|
|
3993
4185
|
if (options.addService || options.removeService) {
|
|
3994
4186
|
const effectiveVersion = options.targetVersion ?? manifest.latest;
|
|
3995
4187
|
const manifestRelease = manifest.stacks[effectiveVersion];
|
|
@@ -4013,11 +4205,16 @@ async function runStackUpdateUnlocked(options) {
|
|
|
4013
4205
|
currentServices.delete(options.removeService);
|
|
4014
4206
|
console.log(`[stack-update] Removed service: ${options.removeService}`);
|
|
4015
4207
|
}
|
|
4016
|
-
|
|
4017
|
-
|
|
4208
|
+
if (options.dryRun || options.verifyImages) {
|
|
4209
|
+
previewServiceSelection = runScopedServiceSelection([...currentServices], now);
|
|
4210
|
+
console.log(`[stack-update] Planned service selection (not saved): ${[...currentServices].join(", ")}`);
|
|
4211
|
+
} else {
|
|
4212
|
+
saveServiceSelection(options.envFile, [...currentServices]);
|
|
4213
|
+
console.log(`[stack-update] Saved service selection: ${[...currentServices].join(", ")}`);
|
|
4214
|
+
}
|
|
4018
4215
|
}
|
|
4019
4216
|
const isRunScoped = Boolean(options.services && options.services.length > 0);
|
|
4020
|
-
const serviceSelection = isRunScoped ? runScopedServiceSelection(options.services, now) : loadServiceSelection(options.envFile);
|
|
4217
|
+
const serviceSelection = isRunScoped ? runScopedServiceSelection(options.services, now) : previewServiceSelection ?? loadServiceSelection(options.envFile);
|
|
4021
4218
|
if (isRunScoped) {
|
|
4022
4219
|
console.log(
|
|
4023
4220
|
`[stack-update] Service scope for THIS RUN ONLY: ${options.services.join(", ")} (the managed set in ${serviceSelectionPath(options.envFile)} is unchanged)`
|
|
@@ -4094,7 +4291,22 @@ ${lines.join("\n")}`
|
|
|
4094
4291
|
`[stack-update] Synced monitor healthcheck bin path(s) into the deploy environment: ${[...processHealthBins.pinned, ...processHealthBins.cleared].join(", ")}`
|
|
4095
4292
|
);
|
|
4096
4293
|
}
|
|
4097
|
-
|
|
4294
|
+
const hostState = listHostComposeServices(
|
|
4295
|
+
composeArgsForStack(options.composeFile, options.envFile),
|
|
4296
|
+
options.composePsCapture ?? defaultComposePsCapture
|
|
4297
|
+
);
|
|
4298
|
+
const overrideFile = composeOverrideFileFor(options.composeFile);
|
|
4299
|
+
const workerMigration = options.retainCompose ? { raw: composeRaw, changed: false } : planLegacyWorkerMigration({
|
|
4300
|
+
composeRaw,
|
|
4301
|
+
targetComposeRaw: stagedCompose.templateFound ? stagedCompose.raw : null,
|
|
4302
|
+
env: parseEnv(plannedEnvRaw),
|
|
4303
|
+
hostServices: hostState.services,
|
|
4304
|
+
hostServicesUnavailable: hostState.unavailable,
|
|
4305
|
+
overrideRaw: existsSync(overrideFile) ? readFileSync(overrideFile, "utf8") : null
|
|
4306
|
+
});
|
|
4307
|
+
const composeRawForGate = workerMigration.raw;
|
|
4308
|
+
if (workerMigration.changed) console.log("[stack-update] Planned configuration migration: clear the unused legacy embeddings-worker image default.");
|
|
4309
|
+
assertProductionDeployGate(plan, plannedEnvRaw, composeRawForGate, {
|
|
4098
4310
|
breakGlassReason: options.breakGlassReason,
|
|
4099
4311
|
breakGlassAuditFile: options.breakGlassAuditFile,
|
|
4100
4312
|
strictDigest: options.strictDigest,
|
|
@@ -4139,14 +4351,10 @@ ${lines.join("\n")}`
|
|
|
4139
4351
|
);
|
|
4140
4352
|
}
|
|
4141
4353
|
}
|
|
4142
|
-
const hostState = listHostComposeServices(
|
|
4143
|
-
composeArgsForStack(options.composeFile, options.envFile),
|
|
4144
|
-
options.composePsCapture ?? defaultComposePsCapture
|
|
4145
|
-
);
|
|
4146
4354
|
assertSignedManifestDeliveryGate({
|
|
4147
4355
|
release: manifest.stacks[plan.targetVersion],
|
|
4148
4356
|
targetVersion: plan.targetVersion,
|
|
4149
|
-
composeRaw,
|
|
4357
|
+
composeRaw: composeRawForGate,
|
|
4150
4358
|
envRaw: plannedEnvRaw,
|
|
4151
4359
|
hostServices: hostState.services,
|
|
4152
4360
|
hostServicesUnavailable: hostState.unavailable,
|
|
@@ -4263,7 +4471,9 @@ ${lines.join("\n")}`
|
|
|
4263
4471
|
}
|
|
4264
4472
|
};
|
|
4265
4473
|
const containersRunning = plan.changes.length === 0 ? (options.stackContainersRunning ?? areStackContainersRunning)(options.composeFile, options.envFile) : true;
|
|
4266
|
-
|
|
4474
|
+
const managedTargetPlan = isRunScoped ? createStackUpdatePlan(manifest, envRaw, effectiveTargetVersion, void 0, loadServiceSelection(options.envFile), composeRaw) : fullTargetPlan;
|
|
4475
|
+
const versionOnlyUpgrade = Boolean(options.targetVersion && previousVersion && previousVersion !== plan.targetVersion && managedTargetPlan.changes.length === 0);
|
|
4476
|
+
if (options.dryRun || !options.resume && plan.changes.length === 0 && containersRunning && !versionOnlyUpgrade && !workerMigration.changed) {
|
|
4267
4477
|
const ssoOutcome = skipSsoEdgeReconcileForRetainScope ? { attempted: false, delivered: true } : await reconcileSsoEdge({ apply: !options.dryRun });
|
|
4268
4478
|
if (!options.dryRun && !ssoOutcome.delivered) {
|
|
4269
4479
|
throw new Error(
|
|
@@ -4341,6 +4551,7 @@ ${lines.join("\n")}`
|
|
|
4341
4551
|
}
|
|
4342
4552
|
} catch (err) {
|
|
4343
4553
|
if (options.retainCompose) throw err;
|
|
4554
|
+
if (workerMigration.changed) throw new Error(`Could not install the validated legacy worker migration: ${err instanceof Error ? err.message : String(err)}`);
|
|
4344
4555
|
const reason = err instanceof Error ? err.message : String(err);
|
|
4345
4556
|
console.warn(`[stack-update] Could not refresh docker-compose.yml (${reason}); using existing compose.`);
|
|
4346
4557
|
}
|
|
@@ -5292,25 +5503,28 @@ function listHostComposeServices(composeArgs, capture = defaultComposePsCapture)
|
|
|
5292
5503
|
if (trimmed.startsWith("[")) {
|
|
5293
5504
|
try {
|
|
5294
5505
|
const parsed = JSON.parse(trimmed);
|
|
5295
|
-
if (Array.isArray(parsed))
|
|
5506
|
+
if (!Array.isArray(parsed)) return { services: [], unavailable: true };
|
|
5507
|
+
records.push(...parsed);
|
|
5296
5508
|
} catch {
|
|
5509
|
+
return { services: [], unavailable: true };
|
|
5297
5510
|
}
|
|
5298
|
-
}
|
|
5299
|
-
if (records.length === 0) {
|
|
5511
|
+
} else {
|
|
5300
5512
|
for (const line of trimmed.split("\n")) {
|
|
5301
5513
|
const l = line.trim();
|
|
5302
5514
|
if (!l) continue;
|
|
5303
5515
|
try {
|
|
5304
5516
|
records.push(JSON.parse(l));
|
|
5305
5517
|
} catch {
|
|
5518
|
+
return { services: [], unavailable: true };
|
|
5306
5519
|
}
|
|
5307
5520
|
}
|
|
5308
5521
|
}
|
|
5309
|
-
if (records.length === 0) return { services: [], unavailable: true };
|
|
5310
5522
|
const services = /* @__PURE__ */ new Set();
|
|
5311
5523
|
for (const obj of records) {
|
|
5312
|
-
|
|
5313
|
-
|
|
5524
|
+
if (!obj || typeof obj !== "object" || Array.isArray(obj) || typeof obj.Service !== "string" || !obj.Service.trim()) {
|
|
5525
|
+
return { services: [], unavailable: true };
|
|
5526
|
+
}
|
|
5527
|
+
services.add(obj.Service.trim());
|
|
5314
5528
|
}
|
|
5315
5529
|
return { services: [...services], unavailable: false };
|
|
5316
5530
|
}
|
|
@@ -5663,16 +5877,16 @@ function httpStatus(urlString, hostHeader) {
|
|
|
5663
5877
|
});
|
|
5664
5878
|
}
|
|
5665
5879
|
function defaultExec(cmd, args, opts) {
|
|
5666
|
-
|
|
5880
|
+
execFileSync2(cmd, args, { stdio: "inherit", cwd: opts?.cwd });
|
|
5667
5881
|
}
|
|
5668
5882
|
function defaultDockerLogin(creds) {
|
|
5669
|
-
|
|
5883
|
+
execFileSync2("docker", ["login", creds.registry, "-u", creds.username, "--password-stdin"], {
|
|
5670
5884
|
input: creds.password,
|
|
5671
5885
|
stdio: ["pipe", "inherit", "inherit"]
|
|
5672
5886
|
});
|
|
5673
5887
|
}
|
|
5674
5888
|
function defaultDockerLogout(registry) {
|
|
5675
|
-
|
|
5889
|
+
execFileSync2("docker", ["logout", registry], { stdio: "ignore" });
|
|
5676
5890
|
}
|
|
5677
5891
|
async function defaultFetchText(ref, authToken) {
|
|
5678
5892
|
const res = await fetch(ref, {
|
|
@@ -5895,7 +6109,7 @@ function removeDanglingVolumes(volumes, scope) {
|
|
|
5895
6109
|
continue;
|
|
5896
6110
|
}
|
|
5897
6111
|
try {
|
|
5898
|
-
|
|
6112
|
+
execFileSync2("docker", ["volume", "rm", vol.name], {
|
|
5899
6113
|
stdio: ["pipe", "pipe", "pipe"],
|
|
5900
6114
|
timeout: 3e4
|
|
5901
6115
|
});
|
|
@@ -5963,6 +6177,7 @@ export {
|
|
|
5963
6177
|
retainedCompletedDependencies,
|
|
5964
6178
|
retainedContainerIsHealthy,
|
|
5965
6179
|
assessRetainedHealthBefore,
|
|
6180
|
+
planLegacyWorkerMigration,
|
|
5966
6181
|
resolveServiceHealthTimeout,
|
|
5967
6182
|
serviceSelectionPath,
|
|
5968
6183
|
loadServiceSelection,
|
|
@@ -6042,6 +6257,7 @@ export {
|
|
|
6042
6257
|
assertRolloutStageAllowed,
|
|
6043
6258
|
assertBreakingChangesAllowed,
|
|
6044
6259
|
verifyManifestImagesAvailable,
|
|
6260
|
+
readStagedComposeTemplate,
|
|
6045
6261
|
assertRetainedComposePlan,
|
|
6046
6262
|
verifyPreDeployImages,
|
|
6047
6263
|
collectImageProvenanceIssues,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
sendMessage
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7KPZQ65I.js";
|
|
4
4
|
import {
|
|
5
5
|
getActiveAgent
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GL5ZG72X.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveExeSession
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GM4UEZDE.js";
|
|
10
10
|
import {
|
|
11
11
|
getDispatcherSession
|
|
12
12
|
} from "./chunk-PCV52RYM.js";
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
getCoordinatorName,
|
|
18
18
|
isCoordinatorName
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-L5JFVK5T.js";
|
|
20
20
|
|
|
21
21
|
// src/mcp/tools/send-message.ts
|
|
22
22
|
import { z } from "zod";
|