@askexenow/exe-os 0.9.365 → 0.9.368
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deploy/compose/.env.askexe-control-plane.example +3 -1
- package/deploy/compose/.env.customer.example +6 -2
- package/deploy/compose/.env.example +8 -2
- package/deploy/compose/docker-compose.yml +21 -2
- package/deploy/compose/generate-env.ts +21 -1
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-MGF7J3HB.js → active-agent-6WNC756A.js} +3 -3
- package/dist/{active-agent-C6DPH43L.js → active-agent-RDTJGZHP.js} +3 -3
- package/dist/{agent-defs-generator-X7TVMPVB.js → agent-defs-generator-M5AUL3WM.js} +2 -2
- package/dist/agent-heartbeat-CQPGJIFF.js +13 -0
- package/dist/{agent-loop-E7RZCFDB.js → agent-loop-FOK2IRZQ.js} +1 -1
- package/dist/{agentic-ontology-CARDCG37.js → agentic-ontology-ZJBRYETW.js} +1 -1
- package/dist/{backfill-metadata-ANCJA6LA.js → backfill-metadata-Q4X23XLR.js} +5 -5
- package/dist/{backup-verify-F7BHVEF7.js → backup-verify-UKLX6IEK.js} +1 -1
- package/dist/behavior-injection-C3HEKSJY.js +60 -0
- package/dist/{behaviors-R2IE3PEN.js → behaviors-UCMAREU3.js} +8 -6
- package/dist/bin/agentic-ontology-backfill.js +6 -6
- package/dist/bin/agentic-reflection-backfill.js +7 -7
- package/dist/bin/agentic-semantic-label.js +6 -6
- package/dist/bin/backfill-conversations.js +5 -5
- package/dist/bin/backfill-responses.js +5 -5
- package/dist/bin/backfill-vectors.js +6 -6
- package/dist/bin/bulk-sync-postgres.js +10 -10
- package/dist/bin/cc-doctor.js +5 -5
- package/dist/bin/cleanup-stale-review-tasks.js +15 -14
- package/dist/bin/cli.js +20 -20
- package/dist/bin/deferred-daemon-restart.js +88 -83
- package/dist/bin/exe-agent-config.js +2 -2
- package/dist/bin/exe-agent.js +252 -14
- package/dist/bin/exe-assign.js +6 -6
- package/dist/bin/exe-boot.js +33 -31
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cloud.js +11 -11
- package/dist/bin/exe-config-dump.js +2 -2
- package/dist/bin/exe-dispatch.js +16 -15
- package/dist/bin/exe-doctor.js +6 -6
- package/dist/bin/exe-export-behaviors.js +10 -8
- package/dist/bin/exe-forget.js +7 -7
- package/dist/bin/exe-gateway.js +7 -7
- package/dist/bin/exe-healthcheck.js +5 -5
- package/dist/bin/exe-heartbeat.js +18 -17
- package/dist/bin/exe-kill.js +19 -18
- package/dist/bin/exe-launch-agent.js +25 -23
- package/dist/bin/exe-mcp.js +3 -3
- package/dist/bin/exe-memory-reads.js +5 -5
- package/dist/bin/exe-new-employee.js +8 -8
- package/dist/bin/exe-os-mcp-proxy.js +3 -3
- package/dist/bin/exe-pending-messages.js +16 -15
- package/dist/bin/exe-pending-notifications.js +15 -14
- package/dist/bin/exe-pending-reviews.js +15 -14
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +18 -17
- package/dist/bin/exe-search.js +6 -6
- package/dist/bin/exe-session-cleanup.js +20 -18
- package/dist/bin/exe-settings.js +10 -10
- package/dist/bin/exe-start-codex.js +81 -19
- package/dist/bin/exe-start-opencode.js +11 -9
- package/dist/bin/exe-status.js +17 -16
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +4 -4
- package/dist/bin/exe-verify-running-images.js +123 -4
- package/dist/bin/exe-watchdog.js +44 -3
- package/dist/bin/git-sweep.js +25 -15
- package/dist/bin/graph-backfill.js +7 -7
- package/dist/bin/graph-export.js +6 -6
- package/dist/bin/import-history.js +10 -10
- package/dist/bin/install.js +90 -85
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +4 -4
- package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
- package/dist/bin/reconcile-backlog.js +47 -6
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/scan-tasks.js +15 -14
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +5 -5
- package/dist/bin/stack-update.js +35 -6
- package/dist/bin/verify-stack.js +11 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-X45BSVZY.js → boot-generation-7H7Y4KC2.js} +3 -3
- package/dist/{boot-review-sections-OBVRXXSF.js → boot-review-sections-4AGCECCP.js} +14 -13
- package/dist/build-manifest.json +910 -845
- package/dist/{capability-cards-57FURUMR.js → capability-cards-6KAC5D2Z.js} +2 -2
- package/dist/{capacity-monitor-QEL62JDO.js → capacity-monitor-J2Y4SFLA.js} +16 -15
- package/dist/{catchup-brief-PMXTCASA.js → catchup-brief-F2HKF2CU.js} +19 -18
- package/dist/{chunk-5CBGH6RA.js → chunk-2AS6FG6C.js} +3 -3
- package/dist/{chunk-TO6TB75E.js → chunk-2UBMXN4D.js} +2 -2
- package/dist/{chunk-J6I7X272.js → chunk-2UGU3V63.js} +1 -1
- package/dist/{chunk-45EQTS7B.js → chunk-34BMZTWV.js} +1 -1
- package/dist/{chunk-JYFYIGYK.js → chunk-4DGIOK6T.js} +1 -1
- package/dist/{chunk-T6S45OLV.js → chunk-4GVJIMMK.js} +12 -6
- package/dist/{chunk-IXEFO6HD.js → chunk-4L732DE5.js} +3 -3
- package/dist/{chunk-MXEIZUXG.js → chunk-4RRMZJLG.js} +1 -1
- package/dist/{chunk-3JNVB5LG.js → chunk-5IVLOOJR.js} +1 -1
- package/dist/chunk-5YKNEL3W.js +356 -0
- package/dist/{chunk-EMZHB767.js → chunk-6EXOW5ZA.js} +9 -9
- package/dist/{chunk-6Q263OZE.js → chunk-6P7DVFKA.js} +1 -1
- package/dist/{chunk-ZDUO6QBH.js → chunk-6UZ3DEQI.js} +1 -1
- package/dist/{chunk-DJK45U7B.js → chunk-72JZQ7EV.js} +1 -1
- package/dist/{chunk-22YQBVMO.js → chunk-72QUZX6J.js} +4 -4
- package/dist/{chunk-DYWGIPVP.js → chunk-AAL6CDMQ.js} +7 -7
- package/dist/{chunk-E6ORBQHP.js → chunk-AAMGHW5W.js} +1 -0
- package/dist/{chunk-EJ4522YM.js → chunk-AJGX4Z34.js} +1 -1
- package/dist/{chunk-M7EES2KM.js → chunk-BEPO36MW.js} +3 -3
- package/dist/{chunk-WR75WUEP.js → chunk-BFL3UB77.js} +1 -1
- package/dist/{chunk-NV6A5HDN.js → chunk-BFPQXPN3.js} +1 -1
- package/dist/{chunk-VGE6IHZB.js → chunk-BJKC6ZJU.js} +110 -86
- package/dist/{chunk-R7RM766N.js → chunk-BLNSUBP3.js} +3 -3
- package/dist/{chunk-52TIQJEQ.js → chunk-BNDHQGOY.js} +1 -1
- package/dist/{chunk-QYJANQWC.js → chunk-BPQWRR4H.js} +2 -2
- package/dist/{chunk-ANPE3TT3.js → chunk-BTGR55GX.js} +3 -3
- package/dist/chunk-BTSWFMEH.js +14 -0
- package/dist/{chunk-OPNROU5B.js → chunk-C4IJ5IS5.js} +1 -1
- package/dist/{chunk-BEHLIRRJ.js → chunk-C5FOA5GO.js} +14 -3
- package/dist/{chunk-EHHMNKOA.js → chunk-CSBD7QLZ.js} +1 -1
- package/dist/{chunk-EKVTRI3N.js → chunk-CU2OUUSV.js} +27 -6
- package/dist/{chunk-P47MPWNU.js → chunk-CXHRNESJ.js} +1 -1
- package/dist/{chunk-F2S3M5MB.js → chunk-DRMGPZSC.js} +2 -2
- package/dist/{chunk-KRUYQFSH.js → chunk-DYPKSVB7.js} +5 -5
- package/dist/{chunk-KSVLBATT.js → chunk-E5QQZDQN.js} +53 -0
- package/dist/{chunk-ODBRU6BF.js → chunk-EDB3LXBQ.js} +1542 -984
- package/dist/{chunk-IIZITKBV.js → chunk-EDRXCUEP.js} +4 -4
- package/dist/{chunk-4QKKLK3C.js → chunk-ELY5WBZX.js} +10 -10
- package/dist/{chunk-MPQXQ5IE.js → chunk-EZUSIF66.js} +1 -1
- package/dist/{chunk-DEFSN2FQ.js → chunk-FHYX64H3.js} +3 -3
- package/dist/{chunk-YMJOLEPE.js → chunk-FSALI4B7.js} +4 -4
- package/dist/{chunk-6GQYPJPG.js → chunk-FWKTZURC.js} +8 -8
- package/dist/{chunk-EWZYFG5Q.js → chunk-FWVPGXHD.js} +5 -5
- package/dist/{chunk-DWAQOEXL.js → chunk-GILYOIMP.js} +2 -2
- package/dist/{chunk-RZIKSE6N.js → chunk-GP3J3AOT.js} +4 -4
- package/dist/{chunk-LHOKWZKL.js → chunk-H6J7N3BZ.js} +1 -1
- package/dist/{chunk-EVPBYX2Z.js → chunk-HQSUXAB4.js} +1 -1
- package/dist/{chunk-IM2I7OOS.js → chunk-HTLJHSN4.js} +1 -1
- package/dist/{chunk-JUOZLXLH.js → chunk-HXV3DGL7.js} +1 -1
- package/dist/{chunk-OFGFRT5J.js → chunk-IEE6X6R2.js} +1 -1
- package/dist/{chunk-SP37DONS.js → chunk-IKRIUEIF.js} +1 -1
- package/dist/{chunk-RHX6MNWY.js → chunk-J44774XC.js} +1 -1
- package/dist/{chunk-7C4FUNVO.js → chunk-J77ZIMH5.js} +5 -5
- package/dist/{chunk-NO3M2AFM.js → chunk-JDPV7W2L.js} +1 -1
- package/dist/{chunk-FXPAUDCZ.js → chunk-KGPWS4KE.js} +1 -1
- package/dist/{chunk-L3TB7CC3.js → chunk-KM6XSFHP.js} +12 -2
- package/dist/{chunk-ZEKCHV43.js → chunk-KWQ7RHYD.js} +4 -4
- package/dist/{chunk-QFIVK3G5.js → chunk-KYVIV54Y.js} +1 -1
- package/dist/chunk-KZXMP6JG.js +319 -0
- package/dist/{chunk-AGQAGOQN.js → chunk-LJWCK2DR.js} +9 -9
- package/dist/{chunk-O2MEBF23.js → chunk-MCXYNYZI.js} +30 -2
- package/dist/{chunk-L2VZBPJJ.js → chunk-MWEIBVBS.js} +13 -1
- package/dist/{chunk-RVWALVDT.js → chunk-MXP27XTP.js} +2 -2
- package/dist/{chunk-DQ5KHWFD.js → chunk-N3CGSO3S.js} +1 -1
- package/dist/{chunk-ZNEBZCZR.js → chunk-NNXPIJRB.js} +1 -1
- package/dist/{chunk-MZJBUAC3.js → chunk-NWE3CFX7.js} +4 -4
- package/dist/{chunk-BRLS5OLZ.js → chunk-OBESOWFJ.js} +35 -4
- package/dist/{chunk-5KLQCGI5.js → chunk-OL3QP3AU.js} +171 -1
- package/dist/{chunk-ESTR7QUP.js → chunk-P3PAD6AA.js} +1 -1
- package/dist/{chunk-2FYIMTQE.js → chunk-PGF5I7EV.js} +2 -2
- package/dist/{agent-heartbeat-I5UPGXAU.js → chunk-PHUHIVD5.js} +4 -5
- package/dist/{chunk-C3UAQ3JG.js → chunk-PVWM2WMM.js} +1 -1
- package/dist/{chunk-EWCEUO65.js → chunk-QCSAYYL6.js} +1 -1
- package/dist/{chunk-SBAU735L.js → chunk-QE5KWKVU.js} +27 -6
- package/dist/{chunk-LZKYVMBY.js → chunk-QKZEUCTS.js} +2 -2
- package/dist/{chunk-POPRJKAY.js → chunk-QS6HI4B6.js} +6 -0
- package/dist/{chunk-JNVQGLPX.js → chunk-QT6CNCXO.js} +3 -3
- package/dist/{chunk-J4U5Z7VX.js → chunk-QZYYCPNL.js} +4 -4
- package/dist/{chunk-RD4E5G3B.js → chunk-RDIZSXXD.js} +1 -1
- package/dist/{chunk-2RQT7TED.js → chunk-RFWOXKVL.js} +55 -3
- package/dist/chunk-S2YTU74T.js +76 -0
- package/dist/{chunk-X6A2VWVJ.js → chunk-TP7BFVQP.js} +2 -2
- package/dist/{chunk-CKG6CVKI.js → chunk-TTJWPV4G.js} +1 -1
- package/dist/chunk-TX3Q2GIL.js +97 -0
- package/dist/{chunk-Q7BU5Q6I.js → chunk-UATT6BNO.js} +3 -3
- package/dist/{chunk-PPGPCWRC.js → chunk-UVM5ZXO2.js} +4 -4
- package/dist/{chunk-BATQKSLI.js → chunk-V7E37GE3.js} +2 -2
- package/dist/{chunk-U373MEF5.js → chunk-VD3CVNGB.js} +3 -3
- package/dist/{chunk-ZSZPMUNX.js → chunk-VIW62NN5.js} +126 -7
- package/dist/{chunk-EPNWEOOE.js → chunk-VTOO5UB3.js} +10 -10
- package/dist/chunk-W5MCOZTW.js +304 -0
- package/dist/{chunk-2ESB5SDP.js → chunk-WJOJWRN5.js} +139 -33
- package/dist/{chunk-CPILYY2K.js → chunk-X4MRVNR3.js} +1 -1
- package/dist/{chunk-EPDNWY5P.js → chunk-XBTQPQN7.js} +1 -1
- package/dist/{behavior-injection-XQ4B7DCF.js → chunk-XOTDAKJL.js} +24 -38
- package/dist/{chunk-ORNCMRIX.js → chunk-Y4AYNLXU.js} +31 -37
- package/dist/{chunk-WYLFDSIE.js → chunk-YGPJ7VSJ.js} +48 -10
- package/dist/{chunk-ZRKEUCUZ.js → chunk-ZR3VMM3X.js} +12 -10
- package/dist/{chunk-JITNFE4W.js → chunk-ZWONQU5S.js} +1 -1
- package/dist/{cleanup-graph-garbage-CAA625RJ.js → cleanup-graph-garbage-FBSQI33K.js} +8 -8
- package/dist/{cloud-sync-command-DBB7WRHL.js → cloud-sync-command-NHGVDTLM.js} +11 -3
- package/dist/{cloud-sync-db-init-V7IB23W5.js → cloud-sync-db-init-I75VOTXC.js} +1 -1
- package/dist/{cloud-sync-shutdown-2D3B73CJ.js → cloud-sync-shutdown-JGOFGGET.js} +2 -2
- package/dist/{cloud-sync-state-5DFKLWNB.js → cloud-sync-state-QF3TMMJ4.js} +3 -1
- package/dist/{co-activation-JVN7EBS6.js → co-activation-AE5L2SJV.js} +2 -2
- package/dist/{co-occurrence-526PTFGT.js → co-occurrence-O65D4SCN.js} +6 -6
- package/dist/codex-consolidation-PPXNBXCV.js +96 -0
- package/dist/{conversation-entity-extractor-JO56DB2E.js → conversation-entity-extractor-LFIDTD2O.js} +4 -4
- package/dist/{crdt-sync-LIJLZKFE.js → crdt-sync-NRWDBRSE.js} +1 -1
- package/dist/{crm-webhook-55F7Y6D2.js → crm-webhook-XOQGX6DV.js} +2 -2
- package/dist/{cto-delegation-gate-QIYV4KFO.js → cto-delegation-gate-ZGOAXQI2.js} +14 -13
- package/dist/{daemon-orchestration-Q3GJA2JJ.js → daemon-orchestration-ZMQWYYDT.js} +19 -18
- package/dist/dispatch-intent-journal-VV6HMZC4.js +17 -0
- package/dist/{doc-graph-extractor-P46R4QME.js → doc-graph-extractor-6C5JBKPP.js} +6 -6
- package/dist/{documents-7KFEREWO.js → documents-FKSQGSO4.js} +6 -6
- package/dist/{dreaming-JMUXBAPU.js → dreaming-IB3H6NDZ.js} +18 -17
- package/dist/{employee-boot-brief-HN63D2BY.js → employee-boot-brief-5YRTUEJH.js} +25 -21
- package/dist/{exe-drift-7J7GX7DP.js → exe-drift-CUWUYX3O.js} +3 -3
- package/dist/{exe-export-KJ7B2OBU.js → exe-export-XWENYJNM.js} +7 -7
- package/dist/{exe-import-HPZDWKGE.js → exe-import-OWOMRF2S.js} +7 -7
- package/dist/{exe-key-2PREP464.js → exe-key-P356FGK5.js} +88 -83
- package/dist/{exe-org-VEIISATF.js → exe-org-UKIVF3KE.js} +8 -8
- package/dist/{exe-snapshot-JXQFLUKA.js → exe-snapshot-AZI2WW5Y.js} +19 -18
- package/dist/{fast-db-init-SCXJXOYX.js → fast-db-init-FPAPF3GB.js} +1 -1
- package/dist/{founder-context-U2SZPLYV.js → founder-context-QTQ6V3B5.js} +2 -2
- package/dist/gateway/index.js +11 -11
- package/dist/{git-staleness-S4NDR7NX.js → git-staleness-6ACWLV5Q.js} +2 -2
- package/dist/{global-procedures-ZOFTOXIR.js → global-procedures-RXIKBVLZ.js} +3 -3
- package/dist/{graph-auto-extract-CLVTSUSB.js → graph-auto-extract-Q4A4QMOF.js} +6 -6
- package/dist/{graph-rag-LSJLWGXV.js → graph-rag-RLRQMY54.js} +4 -4
- package/dist/{hook-integrity-SGTKBL6W.js → hook-integrity-3X2JRLBM.js} +1 -1
- package/dist/{hook-prefetch-BDSLB6F4.js → hook-prefetch-DU44UZQP.js} +15 -14
- package/dist/hooks/bug-report-worker.js +19 -18
- package/dist/hooks/codex-stop-task-finalizer.js +20 -19
- package/dist/hooks/commit-complete.js +35 -19
- package/dist/hooks/error-recall.js +8 -8
- package/dist/hooks/exe-heartbeat-hook.js +4 -4
- package/dist/hooks/ingest-worker.js +2 -2
- package/dist/hooks/ingest.js +11 -11
- package/dist/hooks/instructions-loaded.js +5 -5
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +5 -5
- package/dist/hooks/post-compact.js +4 -4
- package/dist/hooks/post-tool-combined.js +12 -12
- package/dist/hooks/pre-compact.js +18 -17
- package/dist/hooks/pre-tool-use.js +86 -34
- package/dist/hooks/prompt-submit.js +36 -31
- package/dist/hooks/session-end.js +114 -100
- package/dist/hooks/session-start.js +16 -16
- package/dist/hooks/stop.js +83 -20
- package/dist/hooks/subagent-stop.js +19 -18
- package/dist/hooks/summary-worker.js +23 -22
- package/dist/index.js +27 -26
- package/dist/{installer-RC2JCKSE.js → installer-B7QYQE56.js} +8 -6
- package/dist/{installer-EA7T3PBD.js → installer-EXR25DDG.js} +6 -6
- package/dist/{installer-KCEM4RCG.js → installer-TOPA7673.js} +152 -8
- package/dist/{intercom-queue-6DZPHHQ2.js → intercom-queue-BZ4M3L4S.js} +14 -13
- package/dist/lib/cloud-sync.js +10 -10
- 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.js +3 -3
- package/dist/lib/db.js +2 -2
- package/dist/lib/delivery-truth.js +25 -0
- 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 +185 -79
- package/dist/lib/hybrid-search.js +6 -6
- package/dist/lib/identity.js +2 -2
- package/dist/lib/license.js +2 -2
- package/dist/lib/messaging.js +15 -14
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +3 -3
- package/dist/lib/schedules.js +6 -6
- package/dist/lib/session-registry.js +4 -4
- package/dist/lib/skill-learning.js +7 -7
- package/dist/lib/status-brief.js +2 -1
- package/dist/lib/store.js +5 -5
- package/dist/lib/task-router.js +3 -3
- package/dist/lib/tasks.js +16 -15
- package/dist/lib/tmux-routing.js +14 -13
- package/dist/lib/token-spend.js +3 -3
- package/dist/{license-gate-HMSMUIAU.js → license-gate-YTIOLKVV.js} +3 -3
- package/dist/{license-sync-FBCMPC4J.js → license-sync-5VE5OSTV.js} +2 -2
- package/dist/mcp/register-tools.js +87 -82
- package/dist/mcp/server.js +90 -85
- 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 +26 -23
- package/dist/mcp/tools/deactivate-behavior.js +8 -8
- package/dist/mcp/tools/list-reminders.js +4 -4
- package/dist/mcp/tools/list-tasks.js +18 -17
- package/dist/mcp/tools/send-message.js +17 -16
- package/dist/mcp/tools/update-task.js +17 -16
- package/dist/{mcp-http-config-YKJN52HG.js → mcp-http-config-XUNRIGQH.js} +3 -3
- package/dist/{mcp-session-identity-QLUVYWPR.js → mcp-session-identity-4UIG7KLK.js} +14 -13
- package/dist/{memory-cards-K2OSX4AW.js → memory-cards-R74YU4CO.js} +5 -5
- package/dist/{memory-graph-extractor-YLTSKLSY.js → memory-graph-extractor-3B4QJUXI.js} +7 -7
- package/dist/{memory-poisoning-defense-IPO4ADRL.js → memory-poisoning-defense-OAKFL5O2.js} +2 -2
- package/dist/{memory-pressure-watchdog-ZI3TH2OF.js → memory-pressure-watchdog-FFC2CHFJ.js} +15 -14
- package/dist/{memory-reflection-ZKVRU3NT.js → memory-reflection-5IJ6RE2J.js} +2 -2
- package/dist/{notification-ledger-4REL6M3T.js → notification-ledger-P5XBUYKO.js} +17 -15
- package/dist/{notifications-UXJUAP3C.js → notifications-LLCCHRYV.js} +14 -13
- package/dist/{orchestration-events-GMRGGBMN.js → orchestration-events-VBGCIQSS.js} +3 -3
- package/dist/{orchestrator-5TV75HDJ.js → orchestrator-EB3SCTAJ.js} +16 -15
- package/dist/{org-brief-session-7AZZEO3F.js → org-brief-session-GDCDKBFF.js} +6 -6
- package/dist/{org-consent-policy-XT6UZENB.js → org-consent-policy-HCD42NBN.js} +2 -2
- package/dist/{org-partner-runtime-WLZAZJIY.js → org-partner-runtime-TPVKFR6E.js} +6 -6
- package/dist/{org-row-visibility-A5XM4MVO.js → org-row-visibility-ZZLOPZLH.js} +1 -1
- package/dist/{pipeline-router-UEVXDUHR.js → pipeline-router-3JTL2KF6.js} +3 -3
- package/dist/{plan-limits-QEP32X4W.js → plan-limits-MTHRP4WY.js} +5 -5
- package/dist/{projection-worker-GMRC6SBH.js → projection-worker-FLASNERC.js} +2 -2
- package/dist/{prospective-memory-QLHSAPSG.js → prospective-memory-HI3WUY4U.js} +2 -2
- package/dist/{push-notifications-GKRPXOGI.js → push-notifications-DFSR6P7V.js} +15 -14
- package/dist/{reranker-GB4VEMUV.js → reranker-XHBKUDGG.js} +1 -1
- package/dist/{retrieval-health-QIBPBGN6.js → retrieval-health-NYKSDS6M.js} +1 -1
- package/dist/{review-polling-MU47NQ2N.js → review-polling-UAV6DZIZ.js} +15 -14
- package/dist/runtime/index.js +23 -22
- package/dist/{session-events-YMQ3VGBJ.js → session-events-YCYPLWPG.js} +15 -14
- package/dist/{session-kill-telemetry-VGPKE57M.js → session-kill-telemetry-UEJTHL65.js} +15 -14
- package/dist/{session-scope-P46KAHXQ.js → session-scope-LXDW7LJJ.js} +14 -13
- package/dist/{setup-wizard-BRNHSJ4U.js → setup-wizard-OVJQYUUL.js} +1 -1
- package/dist/{skill-refinement-NLYDSFEH.js → skill-refinement-EWRJID73.js} +3 -3
- package/dist/{stack-promote-NHFTNIM2.js → stack-promote-4IJM36OG.js} +5 -4
- package/dist/{stack-release-AQVKZUS7.js → stack-release-BAIRY65H.js} +5 -4
- package/dist/{stack-update-LLX5KT7G.js → stack-update-VDM5WXRS.js} +10 -3
- package/dist/stalled-dispatch-escalation-MHLYH2PT.js +80 -0
- package/dist/{steward-gate-JKHYFAHA.js → steward-gate-Y4N2XY3R.js} +3 -3
- package/dist/{subagent-brief-injection-VDVOHDOU.js → subagent-brief-injection-7A6JEVTP.js} +22 -20
- package/dist/{support-inbox-S6YO5YZU.js → support-inbox-LT4WJECQ.js} +4 -3
- package/dist/{task-enforcement-LXW45H5Z.js → task-enforcement-WOIZ5TLK.js} +15 -14
- package/dist/{task-request-inbox-UCSKDC3R.js → task-request-inbox-D65BPUKZ.js} +2 -2
- package/dist/{task-scope-GDLFE26E.js → task-scope-PQ67YRWP.js} +18 -16
- package/dist/{tasks-crud-W7VGWRUV.js → tasks-crud-TJNMUKKH.js} +14 -13
- package/dist/{tasks-notify-CT7NWCS4.js → tasks-notify-7UVC3VGI.js} +15 -14
- package/dist/{tasks-review-WCSKOUFW.js → tasks-review-WDWYISZ2.js} +14 -13
- package/dist/{telemetry-upload-FK5WKXVB.js → telemetry-upload-6LBGRJUE.js} +7 -7
- package/dist/{token-budget-GBNGSIU3.js → token-budget-XO5XW6DL.js} +3 -3
- package/dist/{tool-gates-3IC7DK4R.js → tool-gates-2OZY3GZM.js} +1 -1
- package/dist/{tool-gates-GXSYBVK4.js → tool-gates-7PLIOLAL.js} +1 -1
- package/dist/{tool-telemetry-VKMRS6MP.js → tool-telemetry-ZL6TTZWG.js} +1 -1
- package/dist/tui/App.js +23 -22
- package/dist/{tui-data-FTPV2XBQ.js → tui-data-UK7ZPKN4.js} +14 -13
- package/dist/{update-support-J6UWPUOC.js → update-support-BGL5KAZO.js} +12 -12
- package/dist/work-claims-XZL2DKQ3.js +53 -0
- package/dist/{work-state-heartbeat-4LDF6DSM.js → work-state-heartbeat-267YQ75U.js} +1 -1
- package/dist/{worker-gate-35VZINZG.js → worker-gate-RUM6MLIR.js} +1 -1
- package/dist/{workflow-engine-4DA6RSHI.js → workflow-engine-YQHGHKSJ.js} +2 -2
- package/dist/{worktree-H3YFJ3NU.js → worktree-3FO6EQ4G.js} +4 -4
- package/dist/{worktree-sweep-4EDLLQ2E.js → worktree-sweep-X7MUEEQS.js} +5 -5
- package/package.json +7 -2
- package/release-notes.json +93 -81
- /package/dist/{chunk-7Y6AQWVT.js → chunk-4AN2PWUK.js} +0 -0
- /package/dist/{chunk-7DMCAGSC.js → chunk-5U4UJGTW.js} +0 -0
- /package/dist/{chunk-3THNS2T7.js → chunk-EYIX6JU7.js} +0 -0
- /package/dist/{chunk-QYECRPGD.js → chunk-FDA45THL.js} +0 -0
- /package/dist/{chunk-MBBFL2SP.js → chunk-GIO4VU4J.js} +0 -0
- /package/dist/{chunk-LKYGSJ2E.js → chunk-I76LRCNA.js} +0 -0
- /package/dist/{chunk-UY6HRDB2.js → chunk-LBWEAQ6Z.js} +0 -0
- /package/dist/{chunk-VS4LPG66.js → chunk-MQ5RUHNZ.js} +0 -0
- /package/dist/{chunk-G2EAYH4U.js → chunk-PFCE4AXQ.js} +0 -0
- /package/dist/{chunk-3NBWARKC.js → chunk-SXAERZL2.js} +0 -0
- /package/dist/{chunk-BY7WWPRM.js → chunk-TKTQRSSD.js} +0 -0
- /package/dist/{chunk-JRPYLUXH.js → chunk-U2AZUMBZ.js} +0 -0
- /package/dist/{chunk-CMBF5WCL.js → chunk-W6FVADZS.js} +0 -0
- /package/dist/{core-memory-CMPPHJN5.js → core-memory-W5ZHHBRR.js} +0 -0
- /package/dist/{memory-isolation-ZB5S5HCO.js → memory-isolation-ZE7EDBO4.js} +0 -0
- /package/dist/{oauth-server-NP7KGF7N.js → oauth-server-3HG62YYJ.js} +0 -0
- /package/dist/{project-boot-LEZSK3W7.js → project-boot-3OAWKYLO.js} +0 -0
- /package/dist/{wiki-acl-5DKOWOIH.js → wiki-acl-FQV4E6M4.js} +0 -0
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
exportBehaviorsForAgent
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-C5FOA5GO.js";
|
|
5
|
+
import "../chunk-XOTDAKJL.js";
|
|
6
|
+
import "../chunk-MCXYNYZI.js";
|
|
6
7
|
import "../chunk-VMJ2UH4S.js";
|
|
7
8
|
import "../chunk-QGGH7LOU.js";
|
|
8
9
|
import {
|
|
9
10
|
disposeStore,
|
|
10
11
|
initStore
|
|
11
|
-
} from "../chunk-
|
|
12
|
-
import "../chunk-
|
|
12
|
+
} from "../chunk-ELY5WBZX.js";
|
|
13
|
+
import "../chunk-FDA45THL.js";
|
|
13
14
|
import "../chunk-CHCA3ZM2.js";
|
|
14
15
|
import "../chunk-OTVEIJUQ.js";
|
|
15
|
-
import "../chunk-
|
|
16
|
+
import "../chunk-5U4UJGTW.js";
|
|
16
17
|
import "../chunk-5MOYSU5A.js";
|
|
17
18
|
import "../chunk-4QCFFW2H.js";
|
|
18
19
|
import "../chunk-76CJBM36.js";
|
|
@@ -20,6 +21,7 @@ import {
|
|
|
20
21
|
clearTerminalLauncherFailure,
|
|
21
22
|
writeTerminalLauncherFailure
|
|
22
23
|
} from "../chunk-AJIXH5JF.js";
|
|
24
|
+
import "../chunk-PVWM2WMM.js";
|
|
23
25
|
import {
|
|
24
26
|
CODEX_CHATGPT_UNSUPPORTED_MODELS,
|
|
25
27
|
assertCodexModelForAuth,
|
|
@@ -35,11 +37,11 @@ import "../chunk-MP2AFCGL.js";
|
|
|
35
37
|
import {
|
|
36
38
|
baseAgentName,
|
|
37
39
|
loadEmployeesSync
|
|
38
|
-
} from "../chunk-
|
|
40
|
+
} from "../chunk-OBESOWFJ.js";
|
|
39
41
|
import "../chunk-TKDITWDN.js";
|
|
40
42
|
import "../chunk-BBMTVAE3.js";
|
|
41
43
|
import "../chunk-5YEUPUV4.js";
|
|
42
|
-
import "../chunk-
|
|
44
|
+
import "../chunk-JDPV7W2L.js";
|
|
43
45
|
import "../chunk-YYB5PMTK.js";
|
|
44
46
|
import "../chunk-NJFJWQNN.js";
|
|
45
47
|
import "../chunk-V3W3SATA.js";
|
|
@@ -106,6 +108,14 @@ or a JSON-RPC error mentioning "session expired" or "not found", the daemon was
|
|
|
106
108
|
restarted. Your MCP client should auto-reinitialize. If it doesn't, call mcp_ping()
|
|
107
109
|
which forces a fresh connection. If mcp_ping also fails, tell the user: "MCP daemon
|
|
108
110
|
was restarted. Run /mcp to reconnect."
|
|
111
|
+
|
|
112
|
+
SESSION CLOSEOUT \u2014 MANDATORY, Codex has no SessionEnd hook: Unlike Claude Code,
|
|
113
|
+
Codex does not fire a session-end event, so nothing consolidates your session
|
|
114
|
+
automatically \u2014 no dreaming cycle, no pattern promotion, no "where I left off"
|
|
115
|
+
summary for your next boot. Before you finish a session, YOU MUST call
|
|
116
|
+
config(action="closeout") yourself to consolidate it. If you are running low on
|
|
117
|
+
context or are about to stop for any other reason, call config(action="closeout")
|
|
118
|
+
then, before you stop \u2014 do not wait until the very last message.
|
|
109
119
|
`;
|
|
110
120
|
var CODEX_AUTONOMOUS_BOOT_PROMPT = `You are an AI employee with exe-os consolidated MCP tools: task, memory, behavior, message, identity, decision, session, and mcp_ping. DO NOT ask for confirmation \u2014 work autonomously. If task/memory are not visible in the initial tool list, first call tool_search with query "exe-os task memory MCP consolidated" because Codex may defer MCP tools behind discovery; only tell the user to run 'exe-os codex' if discovery fails or returns no exe-os task/memory tools. Immediately: 1) Call task with action="list" to see your assigned tasks. 2) Call task with action="get" on the highest priority open task. 3) Call memory with action="recall" before starting work. 4) Start working on the task. 5) When done, call task with action="update", status="done", and a result summary. 6) Call memory with action="store" to persist important findings. 7) Check task with action="list" again for the next task. 8) If NO open tasks remain, wait 30 seconds then check task(action="list") ONE more time \u2014 a new task may have been dispatched while you were completing the previous one. If still empty after the recheck, say 'All tasks complete. Standing by.' and STOP.`;
|
|
111
121
|
function buildCodexBootPrompt(_detectedProject) {
|
|
@@ -227,8 +237,37 @@ function writePromptFile(agent, identity, behaviorsPath, globalProcedures) {
|
|
|
227
237
|
writeFileSync(outPath, prompt, "utf-8");
|
|
228
238
|
return outPath;
|
|
229
239
|
}
|
|
230
|
-
var
|
|
231
|
-
var
|
|
240
|
+
var CODEX_PINNED_SANDBOX_MODE = "workspace-write";
|
|
241
|
+
var CODEX_PINNED_APPROVAL_POLICY = "never";
|
|
242
|
+
var CODEX_APPROVAL_FLAG_PREFERENCE = ["--ask-for-approval", "--approval-policy"];
|
|
243
|
+
var CODEX_SANDBOX_FLAG_PREFERENCE = ["--sandbox"];
|
|
244
|
+
function parseCodexSupportedFlags(helpText) {
|
|
245
|
+
const flags = /* @__PURE__ */ new Set();
|
|
246
|
+
for (const match of helpText.matchAll(/(?<![\w-])--[a-z0-9][a-z0-9-]*/g)) {
|
|
247
|
+
flags.add(match[0]);
|
|
248
|
+
}
|
|
249
|
+
return flags;
|
|
250
|
+
}
|
|
251
|
+
function buildCodexConstraintArgs(supported, preference, configKey, value) {
|
|
252
|
+
const flag = preference.find((f) => supported.has(f));
|
|
253
|
+
return flag ? [flag, value] : ["-c", `${configKey}=${JSON.stringify(value)}`];
|
|
254
|
+
}
|
|
255
|
+
var cachedCodexExecFlags = null;
|
|
256
|
+
function detectCodexExecFlags(binary) {
|
|
257
|
+
if (cachedCodexExecFlags) return cachedCodexExecFlags;
|
|
258
|
+
let help = "";
|
|
259
|
+
try {
|
|
260
|
+
const probe = spawnSync(binary, ["exec", "--help"], {
|
|
261
|
+
encoding: "utf-8",
|
|
262
|
+
timeout: 1e4
|
|
263
|
+
});
|
|
264
|
+
help = `${probe.stdout ?? ""}
|
|
265
|
+
${probe.stderr ?? ""}`;
|
|
266
|
+
} catch {
|
|
267
|
+
}
|
|
268
|
+
cachedCodexExecFlags = parseCodexSupportedFlags(help);
|
|
269
|
+
return cachedCodexExecFlags;
|
|
270
|
+
}
|
|
232
271
|
function sanitizeCodexPassthroughArgs(passthrough) {
|
|
233
272
|
const sanitized = [];
|
|
234
273
|
for (let i = 0; i < passthrough.length; i++) {
|
|
@@ -236,26 +275,44 @@ function sanitizeCodexPassthroughArgs(passthrough) {
|
|
|
236
275
|
if (arg === "--dangerously-bypass-approvals-and-sandbox" || arg === "--full-auto") {
|
|
237
276
|
continue;
|
|
238
277
|
}
|
|
239
|
-
if (arg === "--sandbox" || arg === "-s" || arg === "--approval-policy") {
|
|
278
|
+
if (arg === "--sandbox" || arg === "-s" || arg === "--approval-policy" || arg === "--ask-for-approval" || arg === "-a") {
|
|
240
279
|
i++;
|
|
241
280
|
continue;
|
|
242
281
|
}
|
|
243
|
-
if (arg.startsWith("--sandbox=") || arg.startsWith("-s=") || arg.startsWith("--approval-policy=")) {
|
|
282
|
+
if (arg.startsWith("--sandbox=") || arg.startsWith("-s=") || arg.startsWith("--approval-policy=") || arg.startsWith("--ask-for-approval=") || arg.startsWith("-a=")) {
|
|
244
283
|
continue;
|
|
245
284
|
}
|
|
285
|
+
if (arg === "-c" || arg === "--config") {
|
|
286
|
+
const next = passthrough[i + 1];
|
|
287
|
+
if (next && /^(sandbox_mode|approval_policy)\s*=/.test(next)) {
|
|
288
|
+
i++;
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
246
292
|
sanitized.push(arg);
|
|
247
293
|
}
|
|
248
294
|
return sanitized;
|
|
249
295
|
}
|
|
250
296
|
function buildCodexLaunchArgs(input) {
|
|
297
|
+
const supported = input.supportedExecFlags ?? detectCodexExecFlags(CODEX.binary);
|
|
251
298
|
const args = [
|
|
252
299
|
"exec",
|
|
253
300
|
"-m",
|
|
254
301
|
input.effectiveModel,
|
|
255
302
|
"-c",
|
|
256
303
|
`model=${JSON.stringify(input.effectiveModel)}`,
|
|
257
|
-
...
|
|
258
|
-
|
|
304
|
+
...buildCodexConstraintArgs(
|
|
305
|
+
supported,
|
|
306
|
+
CODEX_SANDBOX_FLAG_PREFERENCE,
|
|
307
|
+
"sandbox_mode",
|
|
308
|
+
CODEX_PINNED_SANDBOX_MODE
|
|
309
|
+
),
|
|
310
|
+
...buildCodexConstraintArgs(
|
|
311
|
+
supported,
|
|
312
|
+
CODEX_APPROVAL_FLAG_PREFERENCE,
|
|
313
|
+
"approval_policy",
|
|
314
|
+
CODEX_PINNED_APPROVAL_POLICY
|
|
315
|
+
),
|
|
259
316
|
"--color",
|
|
260
317
|
"never",
|
|
261
318
|
...sanitizeCodexPassthroughArgs(input.passthrough)
|
|
@@ -517,7 +574,7 @@ async function main() {
|
|
|
517
574
|
await initStore();
|
|
518
575
|
behaviorsPath = await exportBehaviorsForAgent(baseAgent, "");
|
|
519
576
|
try {
|
|
520
|
-
const { loadGlobalProcedures, getGlobalProceduresBlock } = await import("../global-procedures-
|
|
577
|
+
const { loadGlobalProcedures, getGlobalProceduresBlock } = await import("../global-procedures-RXIKBVLZ.js");
|
|
521
578
|
await loadGlobalProcedures();
|
|
522
579
|
const block = getGlobalProceduresBlock();
|
|
523
580
|
if (block) globalProcedures = block;
|
|
@@ -567,8 +624,8 @@ async function main() {
|
|
|
567
624
|
let codexProfileName = null;
|
|
568
625
|
if (exeSessionName) {
|
|
569
626
|
try {
|
|
570
|
-
const { readOrCreateDaemonToken } = await import("../mcp-http-config-
|
|
571
|
-
const { mcpHttpUrl } = await import("../mcp-http-config-
|
|
627
|
+
const { readOrCreateDaemonToken } = await import("../mcp-http-config-XUNRIGQH.js");
|
|
628
|
+
const { mcpHttpUrl } = await import("../mcp-http-config-XUNRIGQH.js");
|
|
572
629
|
const token = readOrCreateDaemonToken();
|
|
573
630
|
const profileContent = buildCodexMcpProfileContent({
|
|
574
631
|
agentId: codexIdentity.memoryAgent,
|
|
@@ -598,12 +655,12 @@ async function main() {
|
|
|
598
655
|
}
|
|
599
656
|
}
|
|
600
657
|
try {
|
|
601
|
-
const { writeActiveAgent } = await import("../active-agent-
|
|
658
|
+
const { writeActiveAgent } = await import("../active-agent-RDTJGZHP.js");
|
|
602
659
|
writeActiveAgent(memoryAgent, empRole);
|
|
603
660
|
} catch {
|
|
604
661
|
}
|
|
605
662
|
try {
|
|
606
|
-
const { verifyCodexHooks, runCodexInstaller } = await import("../installer-
|
|
663
|
+
const { verifyCodexHooks, runCodexInstaller } = await import("../installer-TOPA7673.js");
|
|
607
664
|
if (!verifyCodexHooks()) {
|
|
608
665
|
process.stderr.write("[exe-start-codex] hooks missing \u2014 registering now\n");
|
|
609
666
|
await runCodexInstaller();
|
|
@@ -621,7 +678,7 @@ async function main() {
|
|
|
621
678
|
`);
|
|
622
679
|
if (WORKTREE_ROLES.has(empRole)) {
|
|
623
680
|
try {
|
|
624
|
-
const { ensureWorktree, parseInstanceLabel } = await import("../worktree-
|
|
681
|
+
const { ensureWorktree, parseInstanceLabel } = await import("../worktree-3FO6EQ4G.js");
|
|
625
682
|
const { base, instance } = parseInstanceLabel(worktreeName);
|
|
626
683
|
worktreePath = ensureWorktree(process.cwd(), base, instance);
|
|
627
684
|
if (worktreePath) {
|
|
@@ -699,12 +756,17 @@ if (!process.env.VITEST) {
|
|
|
699
756
|
export {
|
|
700
757
|
CODEX_AUTONOMOUS_BOOT_PROMPT,
|
|
701
758
|
CODEX_BOOT_INSTRUCTIONS,
|
|
759
|
+
CODEX_PINNED_APPROVAL_POLICY,
|
|
760
|
+
CODEX_PINNED_SANDBOX_MODE,
|
|
702
761
|
buildCodexBootPrompt,
|
|
762
|
+
buildCodexConstraintArgs,
|
|
703
763
|
buildCodexLaunchArgs,
|
|
704
764
|
buildCodexMcpProfileContent,
|
|
765
|
+
detectCodexExecFlags,
|
|
705
766
|
detectCodexModelNotSupported,
|
|
706
767
|
launchCodex,
|
|
707
768
|
loadIdentity,
|
|
769
|
+
parseCodexSupportedFlags,
|
|
708
770
|
readCodexUserConfig,
|
|
709
771
|
resolveCodexMcpIdentity,
|
|
710
772
|
resolveEffectiveCodexModel,
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
exportBehaviorsForAgent
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-C5FOA5GO.js";
|
|
5
|
+
import "../chunk-XOTDAKJL.js";
|
|
6
|
+
import "../chunk-MCXYNYZI.js";
|
|
6
7
|
import "../chunk-VMJ2UH4S.js";
|
|
7
8
|
import "../chunk-QGGH7LOU.js";
|
|
8
9
|
import {
|
|
9
10
|
disposeStore,
|
|
10
11
|
initStore
|
|
11
|
-
} from "../chunk-
|
|
12
|
-
import "../chunk-
|
|
12
|
+
} from "../chunk-ELY5WBZX.js";
|
|
13
|
+
import "../chunk-FDA45THL.js";
|
|
13
14
|
import "../chunk-CHCA3ZM2.js";
|
|
14
15
|
import "../chunk-OTVEIJUQ.js";
|
|
15
|
-
import "../chunk-
|
|
16
|
+
import "../chunk-5U4UJGTW.js";
|
|
16
17
|
import "../chunk-5MOYSU5A.js";
|
|
17
18
|
import "../chunk-4QCFFW2H.js";
|
|
18
19
|
import "../chunk-76CJBM36.js";
|
|
20
|
+
import "../chunk-PVWM2WMM.js";
|
|
19
21
|
import "../chunk-BNHAZ65R.js";
|
|
20
22
|
import "../chunk-RIECV7SR.js";
|
|
21
23
|
import "../chunk-LNOS24GV.js";
|
|
@@ -24,11 +26,11 @@ import "../chunk-MP2AFCGL.js";
|
|
|
24
26
|
import {
|
|
25
27
|
baseAgentName,
|
|
26
28
|
loadEmployeesSync
|
|
27
|
-
} from "../chunk-
|
|
29
|
+
} from "../chunk-OBESOWFJ.js";
|
|
28
30
|
import "../chunk-TKDITWDN.js";
|
|
29
31
|
import "../chunk-BBMTVAE3.js";
|
|
30
32
|
import "../chunk-5YEUPUV4.js";
|
|
31
|
-
import "../chunk-
|
|
33
|
+
import "../chunk-JDPV7W2L.js";
|
|
32
34
|
import "../chunk-YYB5PMTK.js";
|
|
33
35
|
import "../chunk-NJFJWQNN.js";
|
|
34
36
|
import "../chunk-V3W3SATA.js";
|
|
@@ -196,12 +198,12 @@ async function main() {
|
|
|
196
198
|
})();
|
|
197
199
|
process.env.AGENT_ROLE = empRole;
|
|
198
200
|
try {
|
|
199
|
-
const { writeActiveAgent } = await import("../active-agent-
|
|
201
|
+
const { writeActiveAgent } = await import("../active-agent-RDTJGZHP.js");
|
|
200
202
|
writeActiveAgent(memoryAgent, empRole);
|
|
201
203
|
} catch {
|
|
202
204
|
}
|
|
203
205
|
try {
|
|
204
|
-
const { verifyOpenCodeHooks, runOpenCodeInstaller } = await import("../installer-
|
|
206
|
+
const { verifyOpenCodeHooks, runOpenCodeInstaller } = await import("../installer-EXR25DDG.js");
|
|
205
207
|
if (!verifyOpenCodeHooks()) {
|
|
206
208
|
process.stderr.write("[exe-start-opencode] hooks missing \u2014 registering now\n");
|
|
207
209
|
await runOpenCodeInstaller();
|
package/dist/bin/exe-status.js
CHANGED
|
@@ -1,28 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
status
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-GP3J3AOT.js";
|
|
5
|
+
import "../chunk-GIO4VU4J.js";
|
|
6
|
+
import "../chunk-I76LRCNA.js";
|
|
7
|
+
import "../chunk-Y4AYNLXU.js";
|
|
8
|
+
import "../chunk-BTSWFMEH.js";
|
|
9
|
+
import "../chunk-P3PAD6AA.js";
|
|
10
|
+
import "../chunk-KGPWS4KE.js";
|
|
11
|
+
import "../chunk-KYVIV54Y.js";
|
|
11
12
|
import "../chunk-WT4RI36X.js";
|
|
12
|
-
import "../chunk-C3UAQ3JG.js";
|
|
13
13
|
import "../chunk-KI5PFRG6.js";
|
|
14
|
+
import "../chunk-QAEWWYHL.js";
|
|
14
15
|
import "../chunk-EIKATSE4.js";
|
|
15
16
|
import "../chunk-E23LNUWJ.js";
|
|
16
|
-
import "../chunk-
|
|
17
|
-
import "../chunk-EHHMNKOA.js";
|
|
17
|
+
import "../chunk-CSBD7QLZ.js";
|
|
18
18
|
import "../chunk-GBNB4EWD.js";
|
|
19
19
|
import "../chunk-UXLO7VHX.js";
|
|
20
20
|
import "../chunk-DSOQUQTV.js";
|
|
21
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-BFL3UB77.js";
|
|
22
22
|
import "../chunk-AJIXH5JF.js";
|
|
23
|
+
import "../chunk-PVWM2WMM.js";
|
|
23
24
|
import "../chunk-XTWHNLGD.js";
|
|
24
25
|
import "../chunk-AM7S2TY6.js";
|
|
25
|
-
import "../chunk-
|
|
26
|
+
import "../chunk-PGF5I7EV.js";
|
|
26
27
|
import "../chunk-CVYC6DUW.js";
|
|
27
28
|
import "../chunk-ZVTKWWLV.js";
|
|
28
29
|
import "../chunk-CDUB5Q6J.js";
|
|
@@ -34,20 +35,20 @@ import "../chunk-W2IRQJ6R.js";
|
|
|
34
35
|
import "../chunk-HYZV25LY.js";
|
|
35
36
|
import "../chunk-GJV3WDWM.js";
|
|
36
37
|
import "../chunk-MP2AFCGL.js";
|
|
37
|
-
import "../chunk-
|
|
38
|
+
import "../chunk-OBESOWFJ.js";
|
|
38
39
|
import "../chunk-TKDITWDN.js";
|
|
39
40
|
import "../chunk-BBMTVAE3.js";
|
|
40
41
|
import "../chunk-5YEUPUV4.js";
|
|
41
|
-
import "../chunk-
|
|
42
|
+
import "../chunk-JDPV7W2L.js";
|
|
42
43
|
import "../chunk-YYB5PMTK.js";
|
|
43
44
|
import "../chunk-NJFJWQNN.js";
|
|
44
45
|
import "../chunk-V3W3SATA.js";
|
|
45
46
|
import "../chunk-JY5GAZYC.js";
|
|
46
47
|
import "../chunk-FXU7JOXK.js";
|
|
47
48
|
import "../chunk-WNBZJSQT.js";
|
|
48
|
-
import "../chunk-
|
|
49
|
+
import "../chunk-6UZ3DEQI.js";
|
|
49
50
|
import "../chunk-A7XLR3K7.js";
|
|
50
|
-
import "../chunk-
|
|
51
|
+
import "../chunk-MQ5RUHNZ.js";
|
|
51
52
|
import "../chunk-QILQ5FCG.js";
|
|
52
53
|
import "../chunk-ARX6TAGN.js";
|
|
53
54
|
import "../chunk-QMSEL5YS.js";
|
package/dist/bin/exe-support.js
CHANGED
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
main,
|
|
5
5
|
runHealth,
|
|
6
6
|
runTest
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-4GVJIMMK.js";
|
|
8
8
|
import "../chunk-MMRUBN3I.js";
|
|
9
9
|
import "../chunk-2XZ6X3PJ.js";
|
|
10
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-6UZ3DEQI.js";
|
|
11
11
|
import "../chunk-A7XLR3K7.js";
|
|
12
|
-
import "../chunk-
|
|
12
|
+
import "../chunk-MQ5RUHNZ.js";
|
|
13
13
|
import "../chunk-QMSEL5YS.js";
|
|
14
14
|
import "../chunk-HSGBZSCA.js";
|
|
15
15
|
import "../chunk-JKKZGDLP.js";
|
package/dist/bin/exe-team.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
shutdownCli
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-GIO4VU4J.js";
|
|
5
5
|
import {
|
|
6
6
|
fastDbInit
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-I76LRCNA.js";
|
|
8
8
|
import {
|
|
9
9
|
getClient,
|
|
10
10
|
loadEmployees
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-OBESOWFJ.js";
|
|
12
12
|
import "../chunk-TKDITWDN.js";
|
|
13
13
|
import "../chunk-BBMTVAE3.js";
|
|
14
14
|
import "../chunk-5YEUPUV4.js";
|
|
15
|
-
import "../chunk-
|
|
15
|
+
import "../chunk-JDPV7W2L.js";
|
|
16
16
|
import "../chunk-YYB5PMTK.js";
|
|
17
17
|
import "../chunk-NJFJWQNN.js";
|
|
18
18
|
import "../chunk-V3W3SATA.js";
|
|
@@ -7,6 +7,12 @@ import {
|
|
|
7
7
|
isFirstPartyImage,
|
|
8
8
|
normalizeVersion
|
|
9
9
|
} from "../chunk-L25OAFOU.js";
|
|
10
|
+
import {
|
|
11
|
+
compareLiveArtifacts,
|
|
12
|
+
declaredArtifactsFromManifest,
|
|
13
|
+
deliveryStateOf,
|
|
14
|
+
parseDigest
|
|
15
|
+
} from "../chunk-W5MCOZTW.js";
|
|
10
16
|
import "../chunk-MLKGABMK.js";
|
|
11
17
|
|
|
12
18
|
// src/bin/exe-verify-running-images.ts
|
|
@@ -93,6 +99,82 @@ function inspectContainer(name) {
|
|
|
93
99
|
labels: { [VERSION_LABEL]: clean(version), [REVISION_LABEL]: clean(revision) }
|
|
94
100
|
};
|
|
95
101
|
}
|
|
102
|
+
function resolveRunningRef(containerName, configuredImage) {
|
|
103
|
+
const imageId = run("docker", ["inspect", containerName, "--format", "{{ .Image }}"]);
|
|
104
|
+
if (imageId.status !== 0) return configuredImage;
|
|
105
|
+
const id = imageId.stdout.trim();
|
|
106
|
+
if (!id) return configuredImage;
|
|
107
|
+
const digests = run("docker", ["inspect", id, "--format", "{{ json .RepoDigests }}"]);
|
|
108
|
+
if (digests.status !== 0) return configuredImage;
|
|
109
|
+
let list = [];
|
|
110
|
+
try {
|
|
111
|
+
const parsed = JSON.parse(digests.stdout.trim() || "[]");
|
|
112
|
+
if (Array.isArray(parsed)) list = parsed.filter((x) => typeof x === "string");
|
|
113
|
+
} catch {
|
|
114
|
+
return configuredImage;
|
|
115
|
+
}
|
|
116
|
+
if (list.length === 0) return configuredImage;
|
|
117
|
+
const configuredRepo = (configuredImage.split("@")[0] ?? "").replace(/:[^/:]+$/, "");
|
|
118
|
+
return list.find((d) => d.startsWith(`${configuredRepo}@`)) ?? list[0] ?? configuredImage;
|
|
119
|
+
}
|
|
120
|
+
function groupRunningArtifacts(entries) {
|
|
121
|
+
const byRef = /* @__PURE__ */ new Map();
|
|
122
|
+
for (const e of entries) {
|
|
123
|
+
const existing = byRef.get(e.ref);
|
|
124
|
+
if (existing) {
|
|
125
|
+
existing.containers.push(e.container);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
byRef.set(e.ref, { containers: [e.container], ref: e.ref, digest: parseDigest(e.ref) });
|
|
129
|
+
}
|
|
130
|
+
return [...byRef.values()];
|
|
131
|
+
}
|
|
132
|
+
function loadManifest(explicitPath) {
|
|
133
|
+
const candidates = explicitPath ? [explicitPath] : DEFAULT_MANIFESTS;
|
|
134
|
+
for (const candidate of candidates) {
|
|
135
|
+
if (!existsSync(candidate)) continue;
|
|
136
|
+
try {
|
|
137
|
+
return { manifest: JSON.parse(readFileSync(candidate, "utf8")), path: candidate };
|
|
138
|
+
} catch {
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return void 0;
|
|
142
|
+
}
|
|
143
|
+
function loadDeclared(explicitPath) {
|
|
144
|
+
const loaded = loadManifest(explicitPath);
|
|
145
|
+
if (!loaded) return { declared: [], source: "no manifest found" };
|
|
146
|
+
try {
|
|
147
|
+
return { declared: declaredArtifactsFromManifest(loaded.manifest), source: loaded.path };
|
|
148
|
+
} catch {
|
|
149
|
+
return { declared: [], source: `${loaded.path} (unreadable stacks)` };
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
var VERDICT_ICON = {
|
|
153
|
+
agrees: "\u{1F7E2}",
|
|
154
|
+
disagrees: "\u{1F534}",
|
|
155
|
+
undeclared: "\u{1F7E0}",
|
|
156
|
+
"unknown-provenance": "\u{1F7E0}",
|
|
157
|
+
"not-running": "\u{1F7E0}"
|
|
158
|
+
};
|
|
159
|
+
function printLiveState(report) {
|
|
160
|
+
console.log(
|
|
161
|
+
`
|
|
162
|
+
What is live \u2014 ${report.inventory.runningArtifacts} running artifact(s) vs ${report.inventory.declaredArtifacts} declared (${report.inventory.source})
|
|
163
|
+
`
|
|
164
|
+
);
|
|
165
|
+
for (const e of report.entries) {
|
|
166
|
+
const icon = VERDICT_ICON[e.verdict] ?? "?";
|
|
167
|
+
console.log(` ${icon} ${e.service.padEnd(22)} ${e.verdict}`);
|
|
168
|
+
if (e.running) console.log(` running ${e.running.digest ?? e.running.ref} [${e.running.containers.join(", ")}]`);
|
|
169
|
+
if (e.declared) console.log(` declared ${e.declared.digest ?? e.declared.ref}`);
|
|
170
|
+
if (e.verdict !== "agrees") console.log(` ${e.detail}`);
|
|
171
|
+
}
|
|
172
|
+
console.log(
|
|
173
|
+
`
|
|
174
|
+
agrees: ${report.counts.agrees} disagrees: ${report.counts.disagrees} undeclared: ${report.counts.undeclared} unknown-provenance: ${report.counts["unknown-provenance"]} not-running: ${report.counts["not-running"]}
|
|
175
|
+
`
|
|
176
|
+
);
|
|
177
|
+
}
|
|
96
178
|
function loadKnownVersions(explicitPath) {
|
|
97
179
|
const candidates = explicitPath ? [explicitPath] : DEFAULT_MANIFESTS;
|
|
98
180
|
for (const candidate of candidates) {
|
|
@@ -118,8 +200,33 @@ function main(argv) {
|
|
|
118
200
|
const containers = names.map(inspectContainer).filter((c) => c !== void 0);
|
|
119
201
|
const knownVersions = loadKnownVersions(manifestPath);
|
|
120
202
|
const findings = findRunningImageIssues(containers, knownVersions);
|
|
203
|
+
const { declared, source } = loadDeclared(manifestPath);
|
|
204
|
+
const running = groupRunningArtifacts(
|
|
205
|
+
containers.map((c) => ({ container: c.name, ref: resolveRunningRef(c.name, c.image) }))
|
|
206
|
+
);
|
|
207
|
+
const liveState = compareLiveArtifacts(running, declared, {
|
|
208
|
+
source,
|
|
209
|
+
// A declared service with nothing running it is real information on a full
|
|
210
|
+
// stack host, and pure noise on a subset install. Reported only when the
|
|
211
|
+
// manifest was actually readable, and always as a finding the reader can
|
|
212
|
+
// dismiss — see limitation 4 in delivery-truth.ts.
|
|
213
|
+
reportNotRunning: declared.length > 0
|
|
214
|
+
});
|
|
121
215
|
if (json) {
|
|
122
|
-
console.log(
|
|
216
|
+
console.log(
|
|
217
|
+
JSON.stringify(
|
|
218
|
+
{
|
|
219
|
+
ok: findings.length === 0 && liveState.findings.length === 0,
|
|
220
|
+
checked: containers.length,
|
|
221
|
+
findings,
|
|
222
|
+
liveState,
|
|
223
|
+
// The contract the bug/task close gates should consume (#690/#694).
|
|
224
|
+
delivery: deliveryStateOf(liveState)
|
|
225
|
+
},
|
|
226
|
+
null,
|
|
227
|
+
2
|
|
228
|
+
)
|
|
229
|
+
);
|
|
123
230
|
} else {
|
|
124
231
|
console.log(`Running-image version assertion \u2014 inspected ${containers.length} container(s)`);
|
|
125
232
|
if (knownVersions.size === 0) {
|
|
@@ -131,15 +238,27 @@ function main(argv) {
|
|
|
131
238
|
for (const f of findings) {
|
|
132
239
|
console.error(` \u{1F534} [${f.kind}] ${f.message}`);
|
|
133
240
|
}
|
|
241
|
+
if (declared.length === 0) {
|
|
242
|
+
console.log(" \u26A0\uFE0F no declared artifacts readable \u2014 live-vs-declared comparison SKIPPED (this is not a pass)");
|
|
243
|
+
} else {
|
|
244
|
+
printLiveState(liveState);
|
|
245
|
+
}
|
|
134
246
|
}
|
|
135
|
-
|
|
247
|
+
const enforceable = liveState.findings.filter((f) => f.verdict !== "not-running");
|
|
248
|
+
const total = findings.length + enforceable.length;
|
|
249
|
+
if (total === 0) return 0;
|
|
136
250
|
if (!enforce) {
|
|
137
251
|
console.error(
|
|
138
|
-
`::warning::${findings.length} running-image finding(s) \u2014 WARN-first, not failing. Pass --enforce (or EXE_VERIFY_RUNNING_IMAGES_ENFORCE=1) to fail closed.`
|
|
252
|
+
`::warning::${findings.length} running-image finding(s) and ${liveState.findings.length} live-vs-declared finding(s) \u2014 WARN-first, not failing. Pass --enforce (or EXE_VERIFY_RUNNING_IMAGES_ENFORCE=1) to fail closed.`
|
|
139
253
|
);
|
|
140
254
|
return 0;
|
|
141
255
|
}
|
|
142
|
-
|
|
256
|
+
for (const f of enforceable) {
|
|
257
|
+
console.error(`::error::[${f.verdict}] ${f.service}: ${f.detail}`);
|
|
258
|
+
}
|
|
259
|
+
console.error(
|
|
260
|
+
`::error::${total} finding(s): ${findings.length} container(s) do not resolve to a known release; ${enforceable.length} artifact(s) are not the artifact the signed manifest pins.`
|
|
261
|
+
);
|
|
143
262
|
return 1;
|
|
144
263
|
}
|
|
145
264
|
process.exit(main(process.argv));
|
package/dist/bin/exe-watchdog.js
CHANGED
|
@@ -47,6 +47,9 @@ function daemonSockPath() {
|
|
|
47
47
|
function restartMarkerPath() {
|
|
48
48
|
return join(exeDir(), "last-daemon-restart");
|
|
49
49
|
}
|
|
50
|
+
function suppressionCountersPath() {
|
|
51
|
+
return join(exeDir(), "watchdog-suppressions.json");
|
|
52
|
+
}
|
|
50
53
|
function watchdogLogDir() {
|
|
51
54
|
return join(exeDir(), "logs");
|
|
52
55
|
}
|
|
@@ -340,6 +343,38 @@ async function awaitSuccessor(killedPid) {
|
|
|
340
343
|
await sleep(SUCCESSOR_POLL_MS);
|
|
341
344
|
}
|
|
342
345
|
}
|
|
346
|
+
function emptySuppressionCounters() {
|
|
347
|
+
return { total: {}, lastAt: {}, lastDetail: {} };
|
|
348
|
+
}
|
|
349
|
+
function readSuppressionCounters(file = suppressionCountersPath()) {
|
|
350
|
+
try {
|
|
351
|
+
const parsed = JSON.parse(readFileSync(file, "utf8"));
|
|
352
|
+
if (!parsed || typeof parsed !== "object") return emptySuppressionCounters();
|
|
353
|
+
const raw = parsed;
|
|
354
|
+
const obj = (v) => v && typeof v === "object" && !Array.isArray(v) ? v : {};
|
|
355
|
+
const total = {};
|
|
356
|
+
for (const [k, v] of Object.entries(obj(raw.total))) {
|
|
357
|
+
if (typeof v === "number" && Number.isFinite(v)) total[k] = v;
|
|
358
|
+
}
|
|
359
|
+
return { total, lastAt: { ...obj(raw.lastAt) }, lastDetail: { ...obj(raw.lastDetail) } };
|
|
360
|
+
} catch {
|
|
361
|
+
return emptySuppressionCounters();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
function recordSuppression(reason, detail, file = suppressionCountersPath(), nowIso = (/* @__PURE__ */ new Date()).toISOString()) {
|
|
365
|
+
const counters = readSuppressionCounters(file);
|
|
366
|
+
const next = (counters.total[reason] ?? 0) + 1;
|
|
367
|
+
counters.total[reason] = next;
|
|
368
|
+
counters.lastAt[reason] = nowIso;
|
|
369
|
+
counters.lastDetail[reason] = detail;
|
|
370
|
+
try {
|
|
371
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
372
|
+
writeFileSync(file, JSON.stringify(counters, null, 2));
|
|
373
|
+
} catch (err) {
|
|
374
|
+
log(`[watchdog] WARNING: could not persist suppression counter: ${err instanceof Error ? err.message : String(err)}`);
|
|
375
|
+
}
|
|
376
|
+
return next;
|
|
377
|
+
}
|
|
343
378
|
function cleanupStaleFiles() {
|
|
344
379
|
try {
|
|
345
380
|
if (existsSync(daemonPidPath())) unlinkSync(daemonPidPath());
|
|
@@ -546,19 +581,22 @@ async function tick() {
|
|
|
546
581
|
if (age === null) {
|
|
547
582
|
log("[watchdog] Daemon PID file missing \u2014 cannot determine daemon age (daemon likely dead); proceeding to self-heal checks");
|
|
548
583
|
} else if (bootGraceActive({ ageSec: age, perCore, readySignaledThisBoot: readySignaledByPid(pid) })) {
|
|
549
|
-
|
|
584
|
+
const bootGraceTotal = recordSuppression("boot_grace", `age=${Math.round(age)}s load=${perCore.toFixed(2)}/core`);
|
|
585
|
+
log(`[watchdog] Daemon is only ${Math.round(age)}s old (min ${effectiveMinDaemonAgeS(perCore)}s at load ${perCore.toFixed(2)}/core, not yet ready) \u2014 suppressing kill, resetting counter [boot-grace-suppressed total: ${bootGraceTotal}]`);
|
|
550
586
|
failureState = emptyFailureState();
|
|
551
587
|
return;
|
|
552
588
|
}
|
|
553
589
|
const starvation = detectStarvation();
|
|
554
590
|
if (starvation.starved) {
|
|
555
|
-
|
|
591
|
+
const starvationTotal = recordSuppression("starvation", starvation.reason ?? "starved");
|
|
592
|
+
log(`[watchdog] Daemon unresponsive but host is CPU-starved (${starvation.reason}) \u2014 suppressing self-heal (restart won't fix starvation), resetting counter [starvation-suppressed total: ${starvationTotal}]`);
|
|
556
593
|
failureState = emptyFailureState();
|
|
557
594
|
return;
|
|
558
595
|
}
|
|
559
596
|
const hbAge = heartbeatAgeMs(now);
|
|
560
597
|
if (isHeartbeatFresh(hbAge)) {
|
|
561
|
-
|
|
598
|
+
const hbTotal = recordSuppression("heartbeat_fresh", `hbAge=${((hbAge ?? 0) / 1e3).toFixed(1)}s`);
|
|
599
|
+
log(`[watchdog] Daemon unresponsive to HTTP ping but event-loop heartbeat is fresh (${((hbAge ?? 0) / 1e3).toFixed(1)}s old < ${HEARTBEAT_FRESH_MS / 1e3}s) \u2014 event loop is still turning; daemon is alive-but-slow. Suppressing kill, resetting counter [heartbeat-fresh-suppressed total: ${hbTotal}]`);
|
|
562
600
|
failureState = emptyFailureState();
|
|
563
601
|
return;
|
|
564
602
|
}
|
|
@@ -627,12 +665,15 @@ export {
|
|
|
627
665
|
effectiveMinDaemonAgeS,
|
|
628
666
|
effectiveSigtermGraceMs,
|
|
629
667
|
emptyFailureState,
|
|
668
|
+
emptySuppressionCounters,
|
|
630
669
|
hasSustainedFailures,
|
|
631
670
|
heartbeatAgeMs,
|
|
632
671
|
isHeartbeatFresh,
|
|
633
672
|
launchdKickstartTargets,
|
|
634
673
|
loadPerCore,
|
|
674
|
+
readSuppressionCounters,
|
|
635
675
|
recordPingFailure,
|
|
676
|
+
recordSuppression,
|
|
636
677
|
resolveSelfPath,
|
|
637
678
|
restartDaemonViaSupervisor,
|
|
638
679
|
watchdogDaemonPidPathForTests
|