@askexenow/exe-os 0.9.384 → 0.9.387
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/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-F5V4E4UL.js → active-agent-B2RK62MI.js} +4 -4
- package/dist/{active-agent-YTBB4ZQM.js → active-agent-I3JL4NRS.js} +4 -4
- package/dist/{agent-defs-generator-7TFISIJQ.js → agent-defs-generator-JZF6ZPCY.js} +2 -2
- package/dist/{agentic-ontology-XVTUVV7W.js → agentic-ontology-Y23IUPRF.js} +1 -1
- package/dist/{backfill-metadata-J6MXIDCW.js → backfill-metadata-5YPOOBT6.js} +6 -6
- package/dist/{backup-verify-6DVBQMDP.js → backup-verify-7M5WDE64.js} +1 -1
- package/dist/{behavior-injection-XDA7ZCYN.js → behavior-injection-4AOTSXRV.js} +9 -9
- package/dist/{behavior-promotion-4VLQ7LXK.js → behavior-promotion-YXJNIY4N.js} +8 -8
- package/dist/{behaviors-SCCZP7RZ.js → behaviors-7RRWAZE2.js} +7 -7
- package/dist/bin/agentic-ontology-backfill.js +7 -7
- package/dist/bin/agentic-reflection-backfill.js +8 -8
- package/dist/bin/agentic-semantic-label.js +7 -7
- package/dist/bin/backfill-conversations.js +6 -6
- package/dist/bin/backfill-responses.js +6 -6
- package/dist/bin/backfill-vectors.js +6 -6
- package/dist/bin/bulk-sync-postgres.js +12 -12
- package/dist/bin/cc-doctor.js +9 -9
- package/dist/bin/cleanup-stale-review-tasks.js +37 -27
- package/dist/bin/cli.js +21 -21
- package/dist/bin/customer-readiness.js +55 -25
- package/dist/bin/deferred-daemon-restart.js +87 -87
- package/dist/bin/exe-agent-config.js +2 -2
- package/dist/bin/exe-agent.js +5 -5
- package/dist/bin/exe-assign.js +7 -7
- package/dist/bin/exe-boot.js +36 -36
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cicd.js +19 -8
- package/dist/bin/exe-cloud.js +13 -13
- package/dist/bin/exe-config-dump.js +2 -2
- package/dist/bin/exe-dispatch.js +16 -16
- package/dist/bin/exe-doctor.js +6 -6
- package/dist/bin/exe-export-behaviors.js +11 -11
- package/dist/bin/exe-forget.js +9 -9
- package/dist/bin/exe-gateway.js +8 -8
- package/dist/bin/exe-grant.js +1 -1
- package/dist/bin/exe-healthcheck.js +9 -9
- package/dist/bin/exe-heartbeat.js +21 -21
- package/dist/bin/exe-kill.js +20 -20
- package/dist/bin/exe-launch-agent.js +26 -26
- package/dist/bin/exe-mcp.js +5 -5
- package/dist/bin/exe-memory-reads.js +6 -6
- package/dist/bin/exe-new-employee.js +8 -8
- package/dist/bin/exe-os-mcp-proxy.js +5 -5
- package/dist/bin/exe-pending-messages.js +16 -16
- package/dist/bin/exe-pending-notifications.js +15 -15
- package/dist/bin/exe-pending-reviews.js +16 -16
- package/dist/bin/exe-preflight.js +1 -1
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +51 -49
- package/dist/bin/exe-search.js +8 -8
- package/dist/bin/exe-session-cleanup.js +21 -21
- package/dist/bin/exe-settings.js +12 -12
- package/dist/bin/exe-start-codex.js +17 -17
- package/dist/bin/exe-start-opencode.js +15 -15
- package/dist/bin/exe-status.js +17 -17
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +4 -4
- package/dist/bin/exe-verify-running-images.js +1 -1
- package/dist/bin/git-sweep.js +17 -17
- package/dist/bin/graph-backfill.js +7 -7
- package/dist/bin/graph-export.js +7 -7
- package/dist/bin/hooks-cli.js +1 -1
- package/dist/bin/import-history.js +11 -11
- package/dist/bin/install.js +89 -89
- package/dist/bin/intercom-check.js +5 -5
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +4 -4
- package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
- package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
- package/dist/bin/pre-build-guard.js +55 -16
- package/dist/bin/prune-orphan-chunks.js +41 -7
- package/dist/bin/reconcile-backlog.js +5 -3
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/repair-document-chunks.js +6 -6
- package/dist/bin/scan-tasks.js +16 -16
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +6 -6
- package/dist/bin/stack-update.js +203 -34
- package/dist/bin/verify-stack.js +2 -2
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-Q7LGQ3AO.js → boot-generation-VOFY43WG.js} +3 -3
- package/dist/{boot-review-sections-G5774FR5.js → boot-review-sections-WLYE6NUR.js} +14 -14
- package/dist/build-manifest.json +910 -910
- package/dist/{capability-cards-I3RHCF4F.js → capability-cards-2OBIKKX4.js} +2 -2
- package/dist/{capacity-monitor-7I7GDONU.js → capacity-monitor-IBFXHWPY.js} +16 -16
- package/dist/{catchup-brief-3T5PARIR.js → catchup-brief-GO6WLIT5.js} +21 -21
- package/dist/{chunk-OBBO6EJR.js → chunk-2ARLSZG4.js} +1 -1
- package/dist/{chunk-C5ISP5FO.js → chunk-2BKJAOO4.js} +11 -1
- package/dist/{chunk-MOANZQXF.js → chunk-2BWLCCHH.js} +1 -1
- package/dist/{chunk-GL47M7NY.js → chunk-2GUT5CWI.js} +74 -10
- package/dist/{chunk-VHHX4UCP.js → chunk-2XCUUS4V.js} +1 -1
- package/dist/{chunk-EOTZSAQL.js → chunk-37TRRK2Y.js} +1 -1
- package/dist/{chunk-RDWIKDMY.js → chunk-3EBK6P4M.js} +8 -20
- package/dist/{chunk-VF2KRROX.js → chunk-3MF6WQ4C.js} +1 -1
- package/dist/{chunk-EUGEFBGV.js → chunk-3UY535CJ.js} +3 -3
- package/dist/{chunk-JA3Y5TV6.js → chunk-4K6GSRSY.js} +36 -8
- package/dist/{chunk-I5XIW2BP.js → chunk-4LGKDHPX.js} +6 -6
- package/dist/{chunk-4AAMFWJT.js → chunk-4LYN5YNO.js} +2 -2
- package/dist/{chunk-R3CZWFFC.js → chunk-54FUOVUF.js} +9 -3
- package/dist/{chunk-XUZK23V7.js → chunk-5R23LRUP.js} +2 -2
- package/dist/{chunk-TNS63ATU.js → chunk-5SPQBSKC.js} +81 -13
- package/dist/{chunk-YRQ26MNP.js → chunk-64KFPFTH.js} +2 -2
- package/dist/{chunk-JFTUAV4J.js → chunk-6EUXAOZQ.js} +1 -1
- package/dist/{chunk-SDYWZRPN.js → chunk-6LU7ZXES.js} +1 -1
- package/dist/{chunk-VLBHZ6TF.js → chunk-6N6RGS7J.js} +2 -2
- package/dist/{chunk-2FKU4ZEO.js → chunk-6NS3DX36.js} +9 -9
- package/dist/{chunk-P2UY34XE.js → chunk-7MYX6M72.js} +4 -4
- package/dist/{chunk-E7C2WNR5.js → chunk-7NBSOBWJ.js} +4 -4
- package/dist/{chunk-AHESD3KW.js → chunk-AEEW4PCH.js} +1 -1
- package/dist/{chunk-MPZ2AVNS.js → chunk-AHVXVA46.js} +1 -1
- package/dist/{chunk-KXYKSLW4.js → chunk-AOQDY7HP.js} +186 -29
- package/dist/{chunk-AGC2V7JS.js → chunk-B6CBN6EF.js} +1 -1
- package/dist/{chunk-C5HUMAA7.js → chunk-B7WVYLAQ.js} +67 -15
- package/dist/{chunk-QFAFKEB5.js → chunk-BFOLGB4D.js} +184 -45
- package/dist/{chunk-T5FEAQES.js → chunk-BKYIWS2X.js} +1 -1
- package/dist/{chunk-E3ZM32LF.js → chunk-CDBII52V.js} +11 -2
- package/dist/{chunk-ALRHGEAJ.js → chunk-CI5R7QV7.js} +1 -1
- package/dist/{chunk-P3QQ52QK.js → chunk-CWWJEMJ5.js} +2 -2
- package/dist/{chunk-PL4CFSQ7.js → chunk-DI4DONAA.js} +1 -1
- package/dist/{chunk-ZOTTYCP5.js → chunk-ETUNXGX7.js} +3 -3
- package/dist/{chunk-3B6FLNLV.js → chunk-EZH2LGJX.js} +1 -1
- package/dist/{chunk-LKTN22L6.js → chunk-FH7WKTVF.js} +21 -17
- package/dist/{chunk-LR5O2XWZ.js → chunk-FHSMIHLQ.js} +5 -5
- package/dist/{chunk-D3LXVAIQ.js → chunk-GD4OC5TP.js} +237 -74
- package/dist/{chunk-R5E7WNAC.js → chunk-GFBEIPLT.js} +3 -3
- package/dist/{chunk-NF5FOSLD.js → chunk-GGPYYM2R.js} +1 -1
- package/dist/{chunk-MROSARM5.js → chunk-GIO43XOP.js} +1 -1
- package/dist/{chunk-VOVFUKEB.js → chunk-GMKDUWTJ.js} +1 -1
- package/dist/{chunk-46VSBDUW.js → chunk-GN23NAD6.js} +2 -2
- package/dist/{chunk-P4PIZOL2.js → chunk-GXSDFCON.js} +3 -3
- package/dist/{chunk-MKM6D7JM.js → chunk-H274T3MD.js} +42 -5
- package/dist/{chunk-P2VVMGMI.js → chunk-H2N47OFR.js} +17 -9
- package/dist/{chunk-RB3J2WYQ.js → chunk-HIYGHRLV.js} +1 -1
- package/dist/{chunk-MC4IM2CC.js → chunk-HQFATN5L.js} +4 -4
- package/dist/{chunk-S26CV7BE.js → chunk-HTGSVQJP.js} +2 -2
- package/dist/{chunk-FVLNNNH6.js → chunk-I4HK2DHC.js} +2 -2
- package/dist/{chunk-APL7HUE3.js → chunk-I6FI4VPQ.js} +182 -28
- package/dist/{chunk-XEBKIWI7.js → chunk-IE4IHF5U.js} +7 -7
- package/dist/{chunk-BPVFZ6Q4.js → chunk-IOIBJY5D.js} +2 -2
- package/dist/{chunk-6YDY6ZTD.js → chunk-IWRCPC65.js} +3 -3
- package/dist/{chunk-HA63SH5W.js → chunk-IWY2OGQG.js} +1 -1
- package/dist/{chunk-DYVLEMKS.js → chunk-JAUIIIWQ.js} +1 -1
- package/dist/{chunk-PLII76NJ.js → chunk-JBUCA4OX.js} +33 -6
- package/dist/{chunk-EGOEB42T.js → chunk-JIIWN637.js} +3 -3
- package/dist/{chunk-JFJP6ATJ.js → chunk-JKVITSQE.js} +1 -1
- package/dist/{chunk-W6BZ4UGA.js → chunk-JORQ5EUU.js} +1 -1
- package/dist/{chunk-PWC3C5ME.js → chunk-JW4K6FJA.js} +4 -4
- package/dist/{chunk-VF3BZOZK.js → chunk-JY6IU2XF.js} +1 -1
- package/dist/{chunk-RVO5O5SR.js → chunk-KVH7IVG6.js} +6 -6
- package/dist/{chunk-3OX34OC3.js → chunk-LPMIQZDB.js} +6 -6
- package/dist/{chunk-W3KPQE7H.js → chunk-LSPNZX4H.js} +3 -3
- package/dist/{chunk-EYMFVITZ.js → chunk-MCEUIG26.js} +1 -1
- package/dist/{chunk-4YNA3CM6.js → chunk-MEVMJZST.js} +230 -56
- package/dist/{chunk-7J2ZQ4XN.js → chunk-MGWAAKNL.js} +1 -1
- package/dist/{chunk-3RGTLZNO.js → chunk-MMHKSDG3.js} +12 -12
- package/dist/{chunk-LSNBTGW4.js → chunk-N5STNP44.js} +1 -1
- package/dist/{chunk-IGJMS7C5.js → chunk-NBRYSWMU.js} +2 -2
- package/dist/{chunk-ZBPZDADW.js → chunk-NHUI52BC.js} +3 -3
- package/dist/{chunk-NYLJQ2M2.js → chunk-NPJDYPEW.js} +4 -4
- package/dist/{chunk-JJTPPAZY.js → chunk-NR3NACEK.js} +397 -225
- package/dist/{chunk-MUCNYSJP.js → chunk-NRLJOV7M.js} +32 -4
- package/dist/{chunk-L63V25HS.js → chunk-O6H2WG4X.js} +3 -3
- package/dist/{chunk-VJEJ7JNB.js → chunk-OFCTRALK.js} +1 -1
- package/dist/{chunk-ZT4LFTUJ.js → chunk-OH5D7YAO.js} +1 -1
- package/dist/{chunk-6BJCDWSM.js → chunk-OH6B7ICF.js} +1 -1
- package/dist/{chunk-PUBA5B4M.js → chunk-OKQCTYLW.js} +13 -9
- package/dist/{chunk-B7AMNZTC.js → chunk-OKVEJAZM.js} +2 -2
- package/dist/{chunk-CH7BUBP3.js → chunk-OONTCDVO.js} +3 -2
- package/dist/{chunk-NVFNADTX.js → chunk-OP376ITX.js} +3 -3
- package/dist/{chunk-JDDM6C57.js → chunk-ORHX5E7L.js} +1 -1
- package/dist/{chunk-FMIYFHLE.js → chunk-OT5XROGM.js} +2 -2
- package/dist/{chunk-KTKIFXIP.js → chunk-OYDTMTRC.js} +1 -1
- package/dist/{chunk-XSUALA32.js → chunk-PHH6LI6T.js} +2 -2
- package/dist/{chunk-KILR4FBR.js → chunk-PIDFJGTO.js} +3 -3
- package/dist/{chunk-YLFCH3VA.js → chunk-Q7QD323J.js} +97 -26
- package/dist/{chunk-P4XLIPB7.js → chunk-QCMOD4Y4.js} +1 -1
- package/dist/{chunk-72V3S44T.js → chunk-QSYY4R6R.js} +24 -9
- package/dist/{chunk-F4BBMIPG.js → chunk-RBFPPNXS.js} +2 -2
- package/dist/{chunk-GSLFH4AI.js → chunk-RO5V6HOB.js} +3 -3
- package/dist/{chunk-L3VUW5M4.js → chunk-RSDDZSEG.js} +1 -1
- package/dist/{chunk-CYCIX7AW.js → chunk-RSONCRBT.js} +2 -2
- package/dist/{chunk-LFUBEHFW.js → chunk-RT57D7C4.js} +39 -1
- package/dist/{chunk-UXN4BICC.js → chunk-RVRM6KW5.js} +1 -1
- package/dist/{chunk-PRDDPQLC.js → chunk-RWN2YDZ4.js} +4 -4
- package/dist/{chunk-3SUPEE6H.js → chunk-S4YBVRQW.js} +3 -3
- package/dist/{chunk-MB47DRF5.js → chunk-S6X2K77B.js} +2 -2
- package/dist/{chunk-7UHZBVP3.js → chunk-TU63ZMMS.js} +60 -24
- package/dist/{chunk-ELCRJGCH.js → chunk-TXCK3FV2.js} +2 -2
- package/dist/{chunk-RZN2LEAK.js → chunk-UQUFBENW.js} +3 -3
- package/dist/{chunk-2PZTMSMG.js → chunk-UTCTAAI5.js} +5 -5
- package/dist/{chunk-YLB365YX.js → chunk-UTJN3XEG.js} +3 -3
- package/dist/{chunk-QNZ4562V.js → chunk-VA47XBUX.js} +1 -1
- package/dist/{chunk-AZSTIAVL.js → chunk-VBPYYJPC.js} +1 -1
- package/dist/{chunk-CHIUS5QB.js → chunk-WN4RLIQA.js} +3 -3
- package/dist/{chunk-CM7N5MBY.js → chunk-XDU6WLTZ.js} +5 -5
- package/dist/{chunk-LFBLQE2P.js → chunk-Y42HGHXW.js} +1 -1
- package/dist/{chunk-P3UX5EH4.js → chunk-YGSWRRFH.js} +3 -3
- package/dist/{chunk-FHIFTSPL.js → chunk-YZ3I3PYP.js} +7 -2
- package/dist/{chunk-UX2EO653.js → chunk-Z2RU4QH5.js} +1 -1
- package/dist/{chunk-UOPCVFVR.js → chunk-ZAUHCQYK.js} +11 -11
- package/dist/{chunk-ELEGH4DX.js → chunk-ZUGQPYUY.js} +51 -4
- package/dist/{cleanup-graph-garbage-VQAJ2RBT.js → cleanup-graph-garbage-2XC5QBRR.js} +8 -8
- package/dist/{cloud-sync-command-J7NEFUY7.js → cloud-sync-command-VFH5JQWR.js} +2 -2
- package/dist/{cloud-sync-db-init-KWEMNMGA.js → cloud-sync-db-init-BZPNGF57.js} +1 -1
- package/dist/{cloud-sync-shutdown-P63AUTUI.js → cloud-sync-shutdown-6NSOC423.js} +2 -2
- package/dist/{co-activation-7IHRPBZN.js → co-activation-FJRUJYTD.js} +2 -2
- package/dist/{co-occurrence-R5AG4OAU.js → co-occurrence-BT3MOXL7.js} +6 -6
- package/dist/{content-extractor-ZLXC6GNR.js → content-extractor-OGXETBOX.js} +2 -2
- package/dist/{conversation-entity-extractor-7FRKLLBD.js → conversation-entity-extractor-QNSSPQWA.js} +4 -4
- package/dist/conversations-retention-XTBFJBUM.js +166 -0
- package/dist/{crdt-sync-IFRZOEIS.js → crdt-sync-CGMV77SA.js} +1 -1
- package/dist/{crm-webhook-L2S63ASV.js → crm-webhook-P75KIKIW.js} +2 -2
- package/dist/{cto-delegation-gate-3WU7OHX7.js → cto-delegation-gate-MZFADWVI.js} +15 -15
- package/dist/{daemon-orchestration-3VQYKLOR.js → daemon-orchestration-JSG2HFW2.js} +23 -19
- package/dist/{doc-graph-extractor-YIR5E7OF.js → doc-graph-extractor-GT37KT2Q.js} +6 -6
- package/dist/{documents-QEHPTYIY.js → documents-HA2MACFK.js} +7 -7
- package/dist/{dreaming-LNFE7DTN.js → dreaming-B6IMGYKE.js} +19 -19
- package/dist/{employee-boot-brief-ZTXDYNWM.js → employee-boot-brief-WULO5JFD.js} +23 -23
- package/dist/{entity-boost-R5N6JWXD.js → entity-boost-DLWE2J6N.js} +1 -1
- package/dist/{exe-drift-WYSJVZFO.js → exe-drift-ORK26KWM.js} +3 -3
- package/dist/{exe-export-GOLNAEAV.js → exe-export-EESPIBX6.js} +8 -8
- package/dist/{exe-import-U4BSI6OH.js → exe-import-SJZRARKE.js} +8 -8
- package/dist/{exe-key-V42G3NGO.js → exe-key-ZRJ7J4KH.js} +87 -87
- package/dist/{exe-org-U4GLQ6OP.js → exe-org-BIPZMGIH.js} +67 -36
- package/dist/{exe-snapshot-U7ONBYNY.js → exe-snapshot-RC33YE4G.js} +21 -21
- package/dist/{fast-db-init-W3NGKAEU.js → fast-db-init-LSDW3AP3.js} +1 -1
- package/dist/{founder-context-ZSIBRVDM.js → founder-context-TVJUSBFS.js} +2 -2
- package/dist/{founder-monitor-envelope-L3IWZLFY.js → founder-monitor-envelope-VMQPVKCN.js} +1 -1
- package/dist/gateway/index.js +9 -9
- package/dist/{git-staleness-OF24QXFZ.js → git-staleness-ZU45ORBY.js} +2 -2
- package/dist/{global-procedures-WSIOWO43.js → global-procedures-TSKWM4YS.js} +3 -3
- package/dist/{graph-auto-extract-IEVVN3L3.js → graph-auto-extract-6TKT5DXT.js} +6 -6
- package/dist/{graph-query-JDZWAVCU.js → graph-query-WGVVDQIA.js} +1 -1
- package/dist/{graph-rag-BKAD2XQA.js → graph-rag-E75K54QT.js} +4 -4
- package/dist/{hook-integrity-TPWDGX2M.js → hook-integrity-33F4OTV6.js} +1 -1
- package/dist/{hook-prefetch-FD6VGJJA.js → hook-prefetch-ZSB2IAIW.js} +16 -16
- package/dist/hooks/bug-report-worker.js +19 -19
- package/dist/hooks/codex-stop-task-finalizer.js +21 -21
- package/dist/hooks/commit-complete.js +19 -19
- package/dist/hooks/error-recall.js +11 -11
- package/dist/hooks/exe-heartbeat-hook.js +5 -5
- package/dist/hooks/ingest-worker.js +8 -8
- package/dist/hooks/ingest.js +14 -14
- 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 +12 -12
- package/dist/hooks/pre-compact.js +19 -19
- package/dist/hooks/pre-tool-use.js +2 -2
- package/dist/hooks/prompt-submit.js +35 -35
- package/dist/hooks/session-end.js +23 -23
- package/dist/hooks/session-start.js +26 -18
- package/dist/hooks/stop.js +22 -22
- package/dist/hooks/subagent-stop.js +22 -22
- package/dist/hooks/summary-worker.js +22 -22
- package/dist/index.js +25 -25
- package/dist/{installer-OTI5SA43.js → installer-PS2GWVJU.js} +7 -7
- package/dist/{installer-SRJGE4GU.js → installer-VE4Y7EYQ.js} +7 -7
- package/dist/{installer-NMOBSEZ2.js → installer-VTNQNGSP.js} +7 -7
- package/dist/{intercom-queue-4FFXCBHO.js → intercom-queue-GIE6URPU.js} +14 -14
- package/dist/lib/cloud-sync.js +14 -12
- package/dist/lib/consolidation.js +8 -8
- package/dist/lib/database.js +2 -2
- package/dist/lib/db-backup.js +1 -1
- package/dist/lib/db-write-worker-client.js +1 -1
- package/dist/lib/db-write-worker.js +11 -7
- package/dist/lib/db.js +2 -2
- package/dist/lib/delivery-truth.js +5 -1
- package/dist/lib/device-registry.js +1 -1
- package/dist/lib/employee-templates.js +4 -4
- package/dist/lib/employees.js +2 -2
- package/dist/lib/exe-daemon.js +90 -88
- package/dist/lib/hybrid-search.js +8 -8
- package/dist/lib/identity.js +2 -2
- package/dist/lib/license.js +8 -4
- package/dist/lib/messaging.js +15 -15
- package/dist/lib/post-tool-memory.js +6 -6
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +3 -3
- package/dist/lib/schedules.js +7 -7
- package/dist/lib/session-registry.js +4 -4
- package/dist/lib/skill-learning.js +8 -8
- package/dist/lib/status-brief.js +2 -2
- package/dist/lib/store.js +6 -6
- package/dist/lib/task-router.js +3 -3
- package/dist/lib/tasks.js +16 -16
- package/dist/lib/tmux-routing.js +14 -14
- package/dist/lib/tmux-status.js +3 -1
- package/dist/lib/token-spend.js +3 -3
- package/dist/{license-gate-R4JWTWM4.js → license-gate-JOBLFMWY.js} +3 -3
- package/dist/{license-recheck-3MBJ4IJX.js → license-recheck-BZ32WRVP.js} +1 -1
- package/dist/{license-sync-BVSG3WMW.js → license-sync-AXGGCZSG.js} +119 -8
- package/dist/{local-secret-inventory-JWNBHZZ4.js → local-secret-inventory-MJT7NJLY.js} +2 -2
- package/dist/mcp/register-tools.js +86 -86
- package/dist/mcp/server.js +86 -86
- 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 +19 -19
- package/dist/mcp/tools/deactivate-behavior.js +10 -10
- package/dist/mcp/tools/list-reminders.js +4 -4
- package/dist/mcp/tools/list-tasks.js +19 -19
- package/dist/mcp/tools/send-message.js +18 -18
- package/dist/mcp/tools/update-task.js +17 -17
- package/dist/{mcp-child-registry-TIZERM7O.js → mcp-child-registry-5VUG5ATZ.js} +1 -1
- package/dist/{mcp-http-config-VUMSFWFH.js → mcp-http-config-KC732KUS.js} +5 -5
- package/dist/{mcp-session-identity-DZHWEJRV.js → mcp-session-identity-BL4MEFRI.js} +14 -14
- package/dist/{memory-cards-JVXTMSAT.js → memory-cards-VY5SUEOT.js} +6 -6
- package/dist/{memory-graph-extractor-PPBJMYFJ.js → memory-graph-extractor-KUAYIBYB.js} +7 -7
- package/dist/{memory-poisoning-defense-K5Q74XQ4.js → memory-poisoning-defense-VLLYEI7P.js} +2 -2
- package/dist/{memory-pressure-watchdog-YMJH5CSA.js → memory-pressure-watchdog-Y2WUPNXY.js} +15 -15
- package/dist/{memory-reflection-7BZWIHRE.js → memory-reflection-DZRRYMWH.js} +6 -6
- package/dist/{notification-ledger-XRAXL5OI.js → notification-ledger-VQKLAZMN.js} +15 -15
- package/dist/{notifications-JE3PX55X.js → notifications-NBCKXUKB.js} +14 -14
- package/dist/{orchestration-events-JCQ5F5IJ.js → orchestration-events-UE4RLVWY.js} +3 -3
- package/dist/{orchestrator-X65INDTR.js → orchestrator-YCS6W4OS.js} +16 -16
- package/dist/{org-brief-session-3PQ22UIX.js → org-brief-session-JQHHCCGX.js} +7 -7
- package/dist/{org-consent-policy-VGELJ7K7.js → org-consent-policy-DWGDWXMB.js} +1 -1
- package/dist/{org-join-6TO5ZYUZ.js → org-join-OFD63DUX.js} +3 -3
- package/dist/{org-key-admin-XHYVRRAZ.js → org-key-admin-DFLTIXHU.js} +4 -4
- package/dist/{org-membership-Y7T2BS57.js → org-membership-CLP2LDI5.js} +1 -1
- package/dist/{org-partner-config-OP4NEUNF.js → org-partner-config-3SEWKDDO.js} +2 -2
- package/dist/{org-partner-runtime-YNVUNT2R.js → org-partner-runtime-RC3MYK6L.js} +7 -7
- package/dist/{org-row-visibility-JBBXNYXD.js → org-row-visibility-H4CNVBW3.js} +1 -1
- package/dist/{pipeline-router-EIBB7QNG.js → pipeline-router-7GDTJB5E.js} +3 -3
- package/dist/{plan-limits-MEWXYLEN.js → plan-limits-GCSBJJRA.js} +5 -5
- package/dist/{pre-tool-use-impl-C6KJY22W.js → pre-tool-use-impl-DYGSDG3M.js} +91 -57
- package/dist/{project-name-UYORSNGE.js → project-name-RHWUY3AE.js} +3 -3
- package/dist/{projection-worker-WYFDWS57.js → projection-worker-6CDL4N2W.js} +2 -2
- package/dist/{prospective-memory-E6XBQFJA.js → prospective-memory-JDURSUXI.js} +2 -2
- package/dist/{push-notifications-M7YU63FY.js → push-notifications-MP3T4GH4.js} +15 -15
- package/dist/{reproject-worktree-memories-B5XMGJSD.js → reproject-worktree-memories-WTXQLSLM.js} +14 -14
- package/dist/{reranker-SRA4BR7N.js → reranker-FRNSY3NG.js} +1 -1
- package/dist/{retrieval-health-P2JPZUPV.js → retrieval-health-EXFGOVKR.js} +1 -1
- package/dist/{review-polling-KQPN7IQE.js → review-polling-BFXFQOMG.js} +15 -15
- package/dist/runtime/index.js +18 -18
- package/dist/{session-events-6LDDKKY3.js → session-events-SKRFRHCQ.js} +15 -15
- package/dist/{session-kill-telemetry-5DSRGWCL.js → session-kill-telemetry-HP3FHU55.js} +15 -15
- package/dist/{session-scope-XG5R3P3D.js → session-scope-4U36PKCC.js} +14 -14
- package/dist/{setup-wizard-7QFLZIKT.js → setup-wizard-KHU7Y623.js} +1 -1
- package/dist/{skill-refinement-I5RMAHSC.js → skill-refinement-YWHALWL4.js} +3 -3
- package/dist/{stack-generate-manifest-AKMZ3AUX.js → stack-generate-manifest-L44KUZ62.js} +6 -6
- package/dist/{stack-promote-34CE2HHF.js → stack-promote-RW7WAQHA.js} +6 -6
- package/dist/{stack-release-5PGWV5D4.js → stack-release-7RU2SH65.js} +131 -25
- package/dist/{stack-update-ZQQ5YYPJ.js → stack-update-AJD3FZ4U.js} +5 -5
- package/dist/{steward-gate-AQJ6KT2C.js → steward-gate-Y4QFNWED.js} +3 -3
- package/dist/{subagent-brief-injection-3GU7YAWY.js → subagent-brief-injection-ADDSO74U.js} +26 -26
- package/dist/{subagent-spawn-ledger-52I66CLW.js → subagent-spawn-ledger-OI23OT4I.js} +1 -1
- package/dist/{support-inbox-NY5TB3FN.js → support-inbox-LSCNMSCF.js} +10 -10
- package/dist/{support-outbox-KNI3FR3G.js → support-outbox-MOZSZTI6.js} +2 -2
- package/dist/{task-enforcement-CAA6D2MH.js → task-enforcement-W2WDBAIR.js} +15 -15
- package/dist/{task-request-inbox-QBZVU66E.js → task-request-inbox-4F3VB2B4.js} +1 -1
- package/dist/{task-scope-NHXB4ZRN.js → task-scope-VRVAHE23.js} +20 -14
- package/dist/{tasks-crud-JHSWL5NM.js → tasks-crud-JHADSQ4R.js} +14 -14
- package/dist/{tasks-notify-7PBE4U7T.js → tasks-notify-KSJORZOP.js} +15 -15
- package/dist/{tasks-review-PPPVEE62.js → tasks-review-CBHI5OT7.js} +16 -14
- package/dist/{telemetry-upload-YU2VRNHX.js → telemetry-upload-LRM4CG5G.js} +7 -7
- package/dist/{token-budget-QCMWKG3K.js → token-budget-IIZGO4PI.js} +3 -3
- package/dist/{tool-telemetry-LTOIC64I.js → tool-telemetry-4U4CP4O6.js} +1 -1
- package/dist/tui/App.js +47 -25
- package/dist/{tui-data-NDBXD6U7.js → tui-data-QGL5G67O.js} +18 -18
- package/dist/{update-support-BMJM4NG7.js → update-support-NSJLA64L.js} +13 -13
- package/dist/{whatsapp-QQLDAHUX.js → whatsapp-LLGB5RMQ.js} +1 -1
- package/dist/{wiki-acl-W6WDCVCP.js → wiki-acl-PIYYQZZX.js} +1 -1
- package/dist/{work-claims-6DM32MGO.js → work-claims-3YIDXG3Q.js} +3 -3
- package/dist/{work-state-heartbeat-HG7D4AWJ.js → work-state-heartbeat-PFULN6VV.js} +1 -1
- package/dist/{workflow-engine-ZWC6CCXE.js → workflow-engine-XMMWRP4D.js} +2 -2
- package/dist/{worktree-EMQCPGFE.js → worktree-WILU76HY.js} +4 -4
- package/dist/{worktree-sweep-XVUJZBXV.js → worktree-sweep-6ZGHXF3A.js} +5 -5
- package/package.json +7 -5
- package/release-notes.json +15 -37
- package/stack.release.json +11 -11
- package/dist/conversations-retention-C4BLKFEL.js +0 -54
- /package/dist/{chunk-GIRD7O5X.js → chunk-B7ACMQ2K.js} +0 -0
- /package/dist/{chunk-U2D6PJ5T.js → chunk-DOKN63TW.js} +0 -0
- /package/dist/{chunk-AJK2PVQW.js → chunk-F47NNIP3.js} +0 -0
- /package/dist/{chunk-VROK4X2L.js → chunk-GXQPJA76.js} +0 -0
- /package/dist/{chunk-TKAU7IJ2.js → chunk-GY2KEOVK.js} +0 -0
- /package/dist/{chunk-DN3ZR3UE.js → chunk-IVQGBWJI.js} +0 -0
- /package/dist/{chunk-JRIH6I7D.js → chunk-NQ3ZAYJL.js} +0 -0
- /package/dist/{chunk-XDVOGDBC.js → chunk-P2XGESMD.js} +0 -0
- /package/dist/{chunk-AWWDKF22.js → chunk-XK7JO45D.js} +0 -0
- /package/dist/{chunk-DZN7SDY2.js → chunk-YBD3O77S.js} +0 -0
- /package/dist/{chunk-M4XY4JRK.js → chunk-YKTJBFWH.js} +0 -0
- /package/dist/{core-memory-O6D5UC3T.js → core-memory-EWFVZB2X.js} +0 -0
- /package/dist/{memory-isolation-EBFFC6HF.js → memory-isolation-N3QQAF27.js} +0 -0
- /package/dist/{oauth-server-ZKBUHDFI.js → oauth-server-GTRPZOXH.js} +0 -0
- /package/dist/{project-boot-VEYFCCSL.js → project-boot-BDMMGYZG.js} +0 -0
package/dist/bin/stack-update.js
CHANGED
|
@@ -32,29 +32,29 @@ import {
|
|
|
32
32
|
serviceSelectionPath,
|
|
33
33
|
verifyManifestImagesAvailable,
|
|
34
34
|
warnUnmanagedManifestServices
|
|
35
|
-
} from "../chunk-
|
|
35
|
+
} from "../chunk-NHUI52BC.js";
|
|
36
36
|
import "../chunk-EC5H53YD.js";
|
|
37
37
|
import {
|
|
38
38
|
runVerifyStack
|
|
39
|
-
} from "../chunk-
|
|
39
|
+
} from "../chunk-B6CBN6EF.js";
|
|
40
40
|
import {
|
|
41
41
|
assertPreflightGate,
|
|
42
42
|
runPreflightOnManifest
|
|
43
|
-
} from "../chunk-
|
|
44
|
-
import "../chunk-
|
|
43
|
+
} from "../chunk-JBUCA4OX.js";
|
|
44
|
+
import "../chunk-B7WVYLAQ.js";
|
|
45
45
|
import {
|
|
46
46
|
preDeployBackup
|
|
47
47
|
} from "../chunk-5DMAMQNU.js";
|
|
48
48
|
import {
|
|
49
49
|
logResult,
|
|
50
50
|
runHealthGate
|
|
51
|
-
} from "../chunk-
|
|
51
|
+
} from "../chunk-AEEW4PCH.js";
|
|
52
52
|
import "../chunk-L25OAFOU.js";
|
|
53
|
-
import "../chunk-
|
|
53
|
+
import "../chunk-RT57D7C4.js";
|
|
54
54
|
import "../chunk-FTZET5YX.js";
|
|
55
|
-
import "../chunk-
|
|
55
|
+
import "../chunk-5SPQBSKC.js";
|
|
56
56
|
import "../chunk-A7XLR3K7.js";
|
|
57
|
-
import "../chunk-
|
|
57
|
+
import "../chunk-YBD3O77S.js";
|
|
58
58
|
import {
|
|
59
59
|
SYSTEMD_DAEMON_UNIT,
|
|
60
60
|
SYSTEMD_WATCHDOG_UNIT
|
|
@@ -251,6 +251,27 @@ function checkGoTrueSecurity(envContent) {
|
|
|
251
251
|
}
|
|
252
252
|
return { check: "gotrue_security", status: "pass", message: "GoTrue auth settings are secure" };
|
|
253
253
|
}
|
|
254
|
+
function smtpConfigFindings({
|
|
255
|
+
smtpUser,
|
|
256
|
+
smtpPass,
|
|
257
|
+
smtpFrom,
|
|
258
|
+
smtpPortRaw,
|
|
259
|
+
credentialsAlreadyChecked = false
|
|
260
|
+
}) {
|
|
261
|
+
const findings = [];
|
|
262
|
+
if (!credentialsAlreadyChecked) {
|
|
263
|
+
if (smtpUser === "") findings.push("SMTP_USER is empty \u2014 GoTrue cannot authenticate to the SMTP server");
|
|
264
|
+
if (smtpPass === "") findings.push("SMTP_PASS is empty \u2014 GoTrue cannot authenticate to the SMTP server");
|
|
265
|
+
}
|
|
266
|
+
if (smtpFrom === "") findings.push("SMTP_FROM is empty \u2014 GoTrue needs a sender address");
|
|
267
|
+
const portNum = Number(smtpPortRaw);
|
|
268
|
+
if (smtpPortRaw !== "" && (!Number.isInteger(portNum) || portNum <= 0 || portNum > 65535)) {
|
|
269
|
+
findings.push(`SMTP_PORT="${smtpPortRaw}" is not a valid port`);
|
|
270
|
+
} else if (![25, 465, 587, 2525].includes(portNum)) {
|
|
271
|
+
findings.push(`SMTP_PORT=${portNum} is unusual (typical: 587 STARTTLS / 465 implicit TLS / 25) \u2014 confirm the provider expects it`);
|
|
272
|
+
}
|
|
273
|
+
return findings;
|
|
274
|
+
}
|
|
254
275
|
function checkSmtpRecovery(envContent) {
|
|
255
276
|
const env = parseEnvFile(envContent);
|
|
256
277
|
const autoconfirm = env.get("GOTRUE_MAILER_AUTOCONFIRM");
|
|
@@ -260,7 +281,15 @@ function checkSmtpRecovery(envContent) {
|
|
|
260
281
|
const smtpFrom = (env.get("SMTP_FROM") ?? env.get("GOTRUE_SMTP_ADMIN_EMAIL") ?? "").trim();
|
|
261
282
|
const smtpPortRaw = (env.get("SMTP_PORT") ?? env.get("GOTRUE_SMTP_PORT") ?? "587").trim();
|
|
262
283
|
if (autoconfirm === "true") {
|
|
263
|
-
|
|
284
|
+
if (smtpHost === "") {
|
|
285
|
+
return { check: "smtp_recovery", status: "pass", message: "GOTRUE_MAILER_AUTOCONFIRM=true and no SMTP host configured \u2014 auth email flows disabled by design" };
|
|
286
|
+
}
|
|
287
|
+
const findings = smtpConfigFindings({ smtpUser, smtpPass, smtpFrom, smtpPortRaw });
|
|
288
|
+
return {
|
|
289
|
+
check: "smtp_recovery",
|
|
290
|
+
status: "warn",
|
|
291
|
+
message: "GOTRUE_MAILER_AUTOCONFIRM=true while SMTP_HOST is set \u2014 these contradict: email flows are disabled, yet an SMTP server is configured. This is intentional on an invite-only stack; on a stack that was switched from --no-email to SMTP it means recovery mail is off and nobody was told. " + (findings.length > 0 ? `The SMTP config here is ALSO incomplete: ${findings.join("; ")}. Fix those before setting GOTRUE_MAILER_AUTOCONFIRM=false.` : "The SMTP config itself looks complete, so setting GOTRUE_MAILER_AUTOCONFIRM=false would enable recovery mail.")
|
|
292
|
+
};
|
|
264
293
|
}
|
|
265
294
|
if (smtpHost === "") {
|
|
266
295
|
return {
|
|
@@ -280,14 +309,7 @@ function checkSmtpRecovery(envContent) {
|
|
|
280
309
|
message: `SMTP_HOST is set but ${missingCreds.join(" and ")} ${isPlural ? "are" : "is"} empty \u2014 GoTrue cannot authenticate to the SMTP server, so recovery/signup emails will SILENTLY never send. Set ${missingCreds.join(", ")} in .env (or GOTRUE_MAILER_AUTOCONFIRM=true to disable email flows).`
|
|
281
310
|
};
|
|
282
311
|
}
|
|
283
|
-
const warns =
|
|
284
|
-
if (smtpFrom === "") warns.push("SMTP_FROM is empty \u2014 GoTrue needs a sender address");
|
|
285
|
-
const portNum = Number(smtpPortRaw);
|
|
286
|
-
if (smtpPortRaw !== "" && (!Number.isInteger(portNum) || portNum <= 0 || portNum > 65535)) {
|
|
287
|
-
warns.push(`SMTP_PORT="${smtpPortRaw}" is not a valid port`);
|
|
288
|
-
} else if (![25, 465, 587, 2525].includes(portNum)) {
|
|
289
|
-
warns.push(`SMTP_PORT=${portNum} is unusual (typical: 587 STARTTLS / 465 implicit TLS / 25) \u2014 confirm the provider expects it`);
|
|
290
|
-
}
|
|
312
|
+
const warns = smtpConfigFindings({ smtpUser, smtpPass, smtpFrom, smtpPortRaw, credentialsAlreadyChecked: true });
|
|
291
313
|
if (warns.length > 0) {
|
|
292
314
|
return { check: "smtp_recovery", status: "warn", message: `SMTP host + credentials are set, but: ${warns.join("; ")}.` };
|
|
293
315
|
}
|
|
@@ -707,17 +729,101 @@ function collectPendingImageMovements(rendered, deployed, servicesToRecreate) {
|
|
|
707
729
|
}
|
|
708
730
|
return movements.sort((a, b) => a.service.localeCompare(b.service));
|
|
709
731
|
}
|
|
710
|
-
function collectRenderedEnvDrift(
|
|
711
|
-
const
|
|
712
|
-
const live = parseComposeServiceEnvKeys(liveConfigJson);
|
|
732
|
+
function collectRenderedEnvDrift(intendedConfigJson, deployed) {
|
|
733
|
+
const intended = parseComposeServiceEnvKeys(intendedConfigJson);
|
|
713
734
|
const drift = [];
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
if (!
|
|
717
|
-
const
|
|
735
|
+
const unverified = [];
|
|
736
|
+
for (const [service, keys] of intended) {
|
|
737
|
+
if (!deployed.deployedServices.has(service)) continue;
|
|
738
|
+
const containerKeys = deployed.envKeys.get(service);
|
|
739
|
+
if (!containerKeys) {
|
|
740
|
+
unverified.push(service);
|
|
741
|
+
continue;
|
|
742
|
+
}
|
|
743
|
+
const missingKeys = [...keys].filter((k) => !containerKeys.has(k)).sort();
|
|
718
744
|
if (missingKeys.length > 0) drift.push({ service, missingKeys });
|
|
719
745
|
}
|
|
720
|
-
return
|
|
746
|
+
return {
|
|
747
|
+
drift: drift.sort((a, b) => a.service.localeCompare(b.service)),
|
|
748
|
+
unverified: unverified.sort()
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
var DEPLOYED_ENV_INSPECT_FORMAT = '{{index .Config.Labels "com.docker.compose.service"}} {{json .Config.Env}}';
|
|
752
|
+
function deployedEnvInspectArgs(containerIds) {
|
|
753
|
+
return ["inspect", "--format", DEPLOYED_ENV_INSPECT_FORMAT, ...containerIds];
|
|
754
|
+
}
|
|
755
|
+
function parseDeployedContainerIds(stdout) {
|
|
756
|
+
const ids = /* @__PURE__ */ new Map();
|
|
757
|
+
for (const line of stdout.split("\n")) {
|
|
758
|
+
const trimmed = line.trim();
|
|
759
|
+
if (!trimmed) continue;
|
|
760
|
+
try {
|
|
761
|
+
const parsed = JSON.parse(trimmed);
|
|
762
|
+
for (const entry of Array.isArray(parsed) ? parsed : [parsed]) {
|
|
763
|
+
const row = entry;
|
|
764
|
+
if (row?.Service && row.ID) ids.set(row.Service, row.ID);
|
|
765
|
+
}
|
|
766
|
+
} catch {
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
return ids;
|
|
770
|
+
}
|
|
771
|
+
function parseDeployedServices(stdout) {
|
|
772
|
+
const services = /* @__PURE__ */ new Set();
|
|
773
|
+
for (const line of stdout.split("\n")) {
|
|
774
|
+
const trimmed = line.trim();
|
|
775
|
+
if (!trimmed) continue;
|
|
776
|
+
try {
|
|
777
|
+
const parsed = JSON.parse(trimmed);
|
|
778
|
+
for (const entry of Array.isArray(parsed) ? parsed : [parsed]) {
|
|
779
|
+
const row = entry;
|
|
780
|
+
if (row?.Service) services.add(row.Service);
|
|
781
|
+
}
|
|
782
|
+
} catch {
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
return services;
|
|
786
|
+
}
|
|
787
|
+
function parseContainerEnvKeys(stdout) {
|
|
788
|
+
const out = /* @__PURE__ */ new Map();
|
|
789
|
+
for (const line of stdout.split("\n")) {
|
|
790
|
+
const trimmed = line.trim();
|
|
791
|
+
if (!trimmed) continue;
|
|
792
|
+
const tab = trimmed.indexOf(" ");
|
|
793
|
+
if (tab === -1) continue;
|
|
794
|
+
const service = trimmed.slice(0, tab).trim();
|
|
795
|
+
if (!service) continue;
|
|
796
|
+
let entries;
|
|
797
|
+
try {
|
|
798
|
+
entries = JSON.parse(trimmed.slice(tab + 1));
|
|
799
|
+
} catch {
|
|
800
|
+
continue;
|
|
801
|
+
}
|
|
802
|
+
if (!Array.isArray(entries)) continue;
|
|
803
|
+
const keys = /* @__PURE__ */ new Set();
|
|
804
|
+
for (const entry of entries) keys.add(String(entry).split("=")[0]);
|
|
805
|
+
out.set(service, keys);
|
|
806
|
+
}
|
|
807
|
+
return out;
|
|
808
|
+
}
|
|
809
|
+
function readDeployedServiceEnv(capture, psStdout) {
|
|
810
|
+
const deployedServices = parseDeployedServices(psStdout);
|
|
811
|
+
const ids = parseDeployedContainerIds(psStdout);
|
|
812
|
+
if (ids.size === 0) return { deployedServices, envKeys: /* @__PURE__ */ new Map() };
|
|
813
|
+
let inspected = /* @__PURE__ */ new Map();
|
|
814
|
+
try {
|
|
815
|
+
inspected = parseContainerEnvKeys(capture(deployedEnvInspectArgs([...ids.values()])));
|
|
816
|
+
} catch (err) {
|
|
817
|
+
console.warn(
|
|
818
|
+
`[stack-config-update] \u26A0 Could not read container environments (${err instanceof Error ? err.message : String(err)}) \u2014 the rendered-env check is UNVERIFIED this run.`
|
|
819
|
+
);
|
|
820
|
+
}
|
|
821
|
+
const envKeys = /* @__PURE__ */ new Map();
|
|
822
|
+
for (const service of deployedServices) {
|
|
823
|
+
const keys = inspected.get(service);
|
|
824
|
+
if (keys) envKeys.set(service, keys);
|
|
825
|
+
}
|
|
826
|
+
return { deployedServices, envKeys };
|
|
721
827
|
}
|
|
722
828
|
function parseComposeServiceEnvKeys(configJson) {
|
|
723
829
|
const out = /* @__PURE__ */ new Map();
|
|
@@ -831,6 +937,12 @@ Set them in ${envFile}, then re-run.`
|
|
|
831
937
|
);
|
|
832
938
|
}
|
|
833
939
|
}
|
|
940
|
+
var STACK_VERSION_SOURCE_LABEL = {
|
|
941
|
+
"target-flag": "--target (operator-supplied)",
|
|
942
|
+
"lock-file": ".exe-stack-lock.json (what the updater last committed)",
|
|
943
|
+
"env-file": "STACK_VERSION in the stack .env",
|
|
944
|
+
"manifest-latest": "the manifest's LATEST release \u2014 no deployed version resolved"
|
|
945
|
+
};
|
|
834
946
|
function defaultComposeCapture(args) {
|
|
835
947
|
const result = spawnSync2("docker", args, { encoding: "utf8", timeout: 12e4 });
|
|
836
948
|
if (result.status !== 0) {
|
|
@@ -851,7 +963,7 @@ async function runStackConfigUpdate(options) {
|
|
|
851
963
|
`Config-only delivery aborted: this mode UPDATES an existing install, and ${!existsSync2(options.composeFile) ? options.composeFile : options.envFile} does not exist. Run a normal stack update to install.`
|
|
852
964
|
);
|
|
853
965
|
}
|
|
854
|
-
const { release, stackVersion } = await resolveSignedRelease(options);
|
|
966
|
+
const { release, stackVersion, stackVersionSource } = await resolveSignedRelease(options);
|
|
855
967
|
const stagedComposeRaw = readFileSync2(templatePath, "utf8");
|
|
856
968
|
const stagedAssetDigests = collectConfigAssetDigests(path2.dirname(templatePath));
|
|
857
969
|
assertStagedConfigMatchesManifest({
|
|
@@ -893,8 +1005,34 @@ async function runStackConfigUpdate(options) {
|
|
|
893
1005
|
});
|
|
894
1006
|
const composeChanged = stagedComposeRaw !== currentComposeRaw;
|
|
895
1007
|
if (!composeChanged && assetChanges.length === 0) {
|
|
896
|
-
|
|
897
|
-
|
|
1008
|
+
const envVerdict = collectRenderedEnvDrift(
|
|
1009
|
+
beforeConfigJson,
|
|
1010
|
+
readDeployedServiceEnv(capture, capture([...composeArgs, ...DEPLOYED_IMAGE_PS_ARGS]))
|
|
1011
|
+
);
|
|
1012
|
+
console.log(
|
|
1013
|
+
"[stack-config-update] Host compose template and config assets already match the packaged config \u2014 nothing to DELIVER. That is a statement about FILES ON DISK."
|
|
1014
|
+
);
|
|
1015
|
+
for (const d of envVerdict.drift) {
|
|
1016
|
+
console.warn(
|
|
1017
|
+
`[stack-config-update] \u26A0 CONTAINER DRIFT: ${d.service} is RUNNING without env key(s) the current config renders: ${d.missingKeys.join(", ")}. The files are current; the container is not. Recreate that service \u2014 config-only delivery has nothing to write here.`
|
|
1018
|
+
);
|
|
1019
|
+
}
|
|
1020
|
+
if (envVerdict.unverified.length > 0) {
|
|
1021
|
+
console.warn(
|
|
1022
|
+
`[stack-config-update] \u26A0 UNVERIFIED: the container environment could not be read for ${envVerdict.unverified.join(", ")}, so "already current" is asserted about files alone for them.`
|
|
1023
|
+
);
|
|
1024
|
+
}
|
|
1025
|
+
return {
|
|
1026
|
+
status: "no-change",
|
|
1027
|
+
stackVersion,
|
|
1028
|
+
stackVersionSource,
|
|
1029
|
+
changed: [],
|
|
1030
|
+
added: [],
|
|
1031
|
+
removed: [],
|
|
1032
|
+
envDrift: envVerdict.drift,
|
|
1033
|
+
envUnverified: envVerdict.unverified,
|
|
1034
|
+
assets: []
|
|
1035
|
+
};
|
|
898
1036
|
}
|
|
899
1037
|
console.log(`[stack-config-update] Compose template: ${composeChanged ? "REFRESH" : "already current"}`);
|
|
900
1038
|
if (assetChanges.length > 0) {
|
|
@@ -925,12 +1063,13 @@ async function runStackConfigUpdate(options) {
|
|
|
925
1063
|
beforeHashes,
|
|
926
1064
|
parseComposeConfigHashes(capture([...scratchArgs, "config", "--hash=*"]))
|
|
927
1065
|
);
|
|
928
|
-
const
|
|
1066
|
+
const psJson = capture([...composeArgs, ...DEPLOYED_IMAGE_PS_ARGS]);
|
|
1067
|
+
const envVerdict = collectRenderedEnvDrift(afterConfigJson, readDeployedServiceEnv(capture, psJson));
|
|
929
1068
|
const assetServices = assetChanges.length > 0 ? servicesMountingPaths(afterConfigJson, configDir, assetChanges.map((a) => a.rel)) : [];
|
|
930
1069
|
const wouldRecreate = [.../* @__PURE__ */ new Set([...changeSet.changed, ...assetServices])].sort();
|
|
931
1070
|
const pending = collectPendingImageMovements(
|
|
932
1071
|
parseComposeImages(afterConfigJson),
|
|
933
|
-
parseDeployedImages(
|
|
1072
|
+
parseDeployedImages(psJson),
|
|
934
1073
|
wouldRecreate
|
|
935
1074
|
);
|
|
936
1075
|
console.log("[stack-config-update] DRY RUN \u2014 nothing written, no container touched.");
|
|
@@ -940,7 +1079,16 @@ async function runStackConfigUpdate(options) {
|
|
|
940
1079
|
console.log(` services added by the template: ${changeSet.added.join(", ") || "none"}`);
|
|
941
1080
|
console.log(` services no longer in the template: ${changeSet.removed.join(", ") || "none"}`);
|
|
942
1081
|
console.log(` services recreated for a changed asset: ${assetServices.join(", ") || "none"}`);
|
|
943
|
-
for (const d of
|
|
1082
|
+
for (const d of envVerdict.drift) {
|
|
1083
|
+
console.log(
|
|
1084
|
+
` env keys the ${d.service} CONTAINER is missing and this config renders: ${d.missingKeys.join(", ")}`
|
|
1085
|
+
);
|
|
1086
|
+
}
|
|
1087
|
+
if (envVerdict.unverified.length > 0) {
|
|
1088
|
+
console.log(
|
|
1089
|
+
` \u26A0 UNVERIFIED \u2014 container environment unreadable for: ${envVerdict.unverified.join(", ")}. No rendered-env verdict was reached for those services; this is NOT "no drift".`
|
|
1090
|
+
);
|
|
1091
|
+
}
|
|
944
1092
|
if (assetChanges.length > 0 && assetServices.length === 0) {
|
|
945
1093
|
console.log(" \u26A0 assets would be delivered that NO service mounts \u2014 they would not be served.");
|
|
946
1094
|
}
|
|
@@ -956,10 +1104,12 @@ async function runStackConfigUpdate(options) {
|
|
|
956
1104
|
// for a PENDING movement exactly as it does for a rendered one.
|
|
957
1105
|
status: movements.length > 0 || pending.length > 0 ? "aborted" : "no-change",
|
|
958
1106
|
stackVersion,
|
|
1107
|
+
stackVersionSource,
|
|
959
1108
|
changed: wouldRecreate,
|
|
960
1109
|
added: changeSet.added,
|
|
961
1110
|
removed: changeSet.removed,
|
|
962
|
-
envDrift,
|
|
1111
|
+
envDrift: envVerdict.drift,
|
|
1112
|
+
envUnverified: envVerdict.unverified,
|
|
963
1113
|
assets: assetChanges
|
|
964
1114
|
};
|
|
965
1115
|
} finally {
|
|
@@ -990,20 +1140,26 @@ async function resolveSignedRelease(options) {
|
|
|
990
1140
|
);
|
|
991
1141
|
reportStackManifestSource(loaded);
|
|
992
1142
|
const lockFile = options.lockFile ?? path2.join(path2.dirname(options.envFile), ".exe-stack-lock.json");
|
|
993
|
-
const
|
|
1143
|
+
const lockVersion = readCurrentStackVersion(lockFile);
|
|
1144
|
+
const envVersion = lockVersion ? void 0 : readEnvValue(readFileSync2(options.envFile, "utf8"), "STACK_VERSION");
|
|
1145
|
+
const deployedVersion = lockVersion ?? envVersion;
|
|
994
1146
|
if (!options.targetVersion && !deployedVersion) {
|
|
995
1147
|
console.warn(
|
|
996
1148
|
`[stack-config-update] \u26A0 Could not determine the DEPLOYED stack version: ${lockFile} records none and ${options.envFile} carries no STACK_VERSION. Falling back to the manifest's latest release (${loaded.manifest.latest}) \u2014 its config digests and the deploy audit will describe THAT release, not necessarily what this host runs. Pass --target to name the deployed version.`
|
|
997
1149
|
);
|
|
998
1150
|
}
|
|
999
1151
|
const stackVersion = options.targetVersion ?? deployedVersion ?? loaded.manifest.latest;
|
|
1152
|
+
const stackVersionSource = options.targetVersion ? "target-flag" : lockVersion ? "lock-file" : envVersion ? "env-file" : "manifest-latest";
|
|
1153
|
+
console.log(
|
|
1154
|
+
`[stack-config-update] Deployed stack version ${stackVersion} \u2014 source: ${STACK_VERSION_SOURCE_LABEL[stackVersionSource]}` + (stackVersionSource === "target-flag" ? "." : ". UNVERIFIED against the running containers: nothing stamps a deployed stack version on a container, so this is a claim about a FILE.")
|
|
1155
|
+
);
|
|
1000
1156
|
const release = loaded.manifest.stacks[stackVersion];
|
|
1001
1157
|
if (!release) {
|
|
1002
1158
|
console.warn(
|
|
1003
1159
|
`[stack-config-update] The signed manifest has no release entry for the deployed version ${stackVersion}; config provenance cannot be checked against it.`
|
|
1004
1160
|
);
|
|
1005
1161
|
}
|
|
1006
|
-
return { manifest: loaded.manifest, release, stackVersion };
|
|
1162
|
+
return { manifest: loaded.manifest, release, stackVersion, stackVersionSource };
|
|
1007
1163
|
}
|
|
1008
1164
|
function readEnvValue(envRaw, key) {
|
|
1009
1165
|
for (const line of envRaw.split("\n")) {
|
|
@@ -1474,6 +1630,19 @@ async function main(args = process.argv.slice(2)) {
|
|
|
1474
1630
|
}
|
|
1475
1631
|
const result2 = await runStackConfigUpdate(configOnlyOptionsFromCli(opts, readOnly));
|
|
1476
1632
|
console.log(`[stack-config-update] ${result2.status} \u2014 ${result2.changed.length} service(s) recreated, ${result2.assets.length} asset(s) delivered.`);
|
|
1633
|
+
for (const d of result2.envDrift) {
|
|
1634
|
+
console.log(
|
|
1635
|
+
`[stack-config-update] \u26A0 CONTAINER DRIFT \u2014 ${d.service} is running without env key(s) this config renders: ${d.missingKeys.join(", ")}`
|
|
1636
|
+
);
|
|
1637
|
+
}
|
|
1638
|
+
if (result2.envUnverified.length > 0) {
|
|
1639
|
+
console.log(
|
|
1640
|
+
`[stack-config-update] \u26A0 UNVERIFIED \u2014 no container env verdict for ${result2.envUnverified.join(", ")}. This is NOT "no drift".`
|
|
1641
|
+
);
|
|
1642
|
+
}
|
|
1643
|
+
console.log(
|
|
1644
|
+
`[stack-config-update] Deployed version ${result2.stackVersion} claimed from ${STACK_VERSION_SOURCE_LABEL[result2.stackVersionSource]}.`
|
|
1645
|
+
);
|
|
1477
1646
|
return;
|
|
1478
1647
|
}
|
|
1479
1648
|
let usingPackagedCheckTemplates = false;
|
package/dist/bin/verify-stack.js
CHANGED
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
checkSsoSessionContract,
|
|
8
8
|
parseComposeServiceNames,
|
|
9
9
|
runVerifyStack
|
|
10
|
-
} from "../chunk-
|
|
11
|
-
import "../chunk-
|
|
10
|
+
} from "../chunk-B6CBN6EF.js";
|
|
11
|
+
import "../chunk-RT57D7C4.js";
|
|
12
12
|
import "../chunk-FTZET5YX.js";
|
|
13
13
|
import "../chunk-6Y4B3QF6.js";
|
|
14
14
|
import "../chunk-MLKGABMK.js";
|
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
bumpBootGeneration,
|
|
4
4
|
getBootGeneration,
|
|
5
5
|
getCachedBootGeneration
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-6EUXAOZQ.js";
|
|
7
|
+
import "./chunk-2GUT5CWI.js";
|
|
8
8
|
import "./chunk-BBMTVAE3.js";
|
|
9
9
|
import "./chunk-TKDITWDN.js";
|
|
10
10
|
import "./chunk-5YEUPUV4.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-QSYY4R6R.js";
|
|
12
12
|
import "./chunk-YYB5PMTK.js";
|
|
13
13
|
import "./chunk-L5CGXEZC.js";
|
|
14
14
|
import "./chunk-QH5ZQ5SJ.js";
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import {
|
|
2
2
|
queryTaskRows
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-TU63ZMMS.js";
|
|
4
|
+
import "./chunk-OH6B7ICF.js";
|
|
5
|
+
import "./chunk-ORHX5E7L.js";
|
|
6
6
|
import "./chunk-ZKGWHT56.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-VA47XBUX.js";
|
|
8
8
|
import "./chunk-WT4RI36X.js";
|
|
9
9
|
import "./chunk-E23LNUWJ.js";
|
|
10
10
|
import "./chunk-TDF2XKLK.js";
|
|
11
11
|
import "./chunk-EIKATSE4.js";
|
|
12
12
|
import "./chunk-MJCSEIFI.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-CI5R7QV7.js";
|
|
14
|
+
import "./chunk-OKQCTYLW.js";
|
|
15
15
|
import "./chunk-VI4ATC6I.js";
|
|
16
16
|
import "./chunk-A27Q27CT.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-N5STNP44.js";
|
|
18
18
|
import "./chunk-T5SM4RXY.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-OFCTRALK.js";
|
|
20
20
|
import "./chunk-L5EPGGDP.js";
|
|
21
21
|
import "./chunk-AM7S2TY6.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-IOIBJY5D.js";
|
|
23
23
|
import "./chunk-CVYC6DUW.js";
|
|
24
24
|
import "./chunk-ANVHWV2X.js";
|
|
25
25
|
import "./chunk-HME6ITKV.js";
|
|
@@ -31,25 +31,25 @@ import "./chunk-NLEW62VC.js";
|
|
|
31
31
|
import "./chunk-IMYGYIAI.js";
|
|
32
32
|
import "./chunk-3DAEZILW.js";
|
|
33
33
|
import "./chunk-DRTJCG6B.js";
|
|
34
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-Z2RU4QH5.js";
|
|
35
35
|
import "./chunk-HYZV25LY.js";
|
|
36
36
|
import "./chunk-GJV3WDWM.js";
|
|
37
37
|
import "./chunk-MP2AFCGL.js";
|
|
38
38
|
import "./chunk-YRUZK2QA.js";
|
|
39
|
-
import "./chunk-
|
|
39
|
+
import "./chunk-2GUT5CWI.js";
|
|
40
40
|
import "./chunk-BBMTVAE3.js";
|
|
41
41
|
import "./chunk-TKDITWDN.js";
|
|
42
42
|
import "./chunk-5YEUPUV4.js";
|
|
43
|
-
import "./chunk-
|
|
43
|
+
import "./chunk-QSYY4R6R.js";
|
|
44
44
|
import "./chunk-YYB5PMTK.js";
|
|
45
45
|
import "./chunk-L5CGXEZC.js";
|
|
46
46
|
import "./chunk-QH5ZQ5SJ.js";
|
|
47
47
|
import "./chunk-ZQEJ4IX2.js";
|
|
48
48
|
import "./chunk-FXU7JOXK.js";
|
|
49
49
|
import "./chunk-WNBZJSQT.js";
|
|
50
|
-
import "./chunk-
|
|
50
|
+
import "./chunk-5SPQBSKC.js";
|
|
51
51
|
import "./chunk-A7XLR3K7.js";
|
|
52
|
-
import "./chunk-
|
|
52
|
+
import "./chunk-YBD3O77S.js";
|
|
53
53
|
import "./chunk-A7JYF4RG.js";
|
|
54
54
|
import "./chunk-ARX6TAGN.js";
|
|
55
55
|
import "./chunk-MMS2HBRT.js";
|