@askexenow/exe-os 0.9.374 → 0.9.376
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deploy/compose/.env.customer.example +16 -1
- package/deploy/compose/.env.example +16 -1
- package/deploy/compose/docker-compose.yml +80 -18
- package/deploy/compose/gateway-watchdog.sh +17 -0
- package/deploy/compose/generate-env.ts +41 -1
- package/deploy/compose/sso-edge/default.conf.template +59 -63
- package/deploy/compose/sso-edge/error-pages/404.html +129 -0
- package/deploy/compose/sso-edge/error-pages/500.html +129 -0
- package/deploy/compose/sso-edge/error-pages/503.html +118 -0
- package/deploy/compose/sso-edge/sso-redirect.conf +115 -92
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-ONPPEWQV.js → active-agent-BOBBUJ74.js} +6 -6
- package/dist/{active-agent-UJKMG7LJ.js → active-agent-GFGEGK2U.js} +6 -6
- package/dist/{agent-defs-generator-ZWI6DXOE.js → agent-defs-generator-OX6UFPRX.js} +5 -5
- package/dist/{agent-loop-OYHJKNYH.js → agent-loop-7ZRH56EX.js} +1 -1
- package/dist/{agentic-ontology-WHFJ3QFS.js → agentic-ontology-DT3VOXBT.js} +1 -1
- package/dist/{backfill-metadata-3OUSQD5V.js → backfill-metadata-VRP6PTPP.js} +9 -9
- package/dist/{backup-verify-ZKTUYLTA.js → backup-verify-LWHKGOOV.js} +1 -1
- package/dist/behavior-injection-GMZKZ3BT.js +83 -0
- package/dist/behavior-promotion-QPC4AQ24.js +62 -0
- package/dist/{behaviors-ZJ45TFBJ.js → behaviors-GPI4BLTC.js} +16 -14
- package/dist/bin/agentic-ontology-backfill.js +10 -10
- package/dist/bin/agentic-reflection-backfill.js +11 -11
- package/dist/bin/agentic-semantic-label.js +10 -10
- package/dist/bin/backfill-conversations.js +14 -12
- package/dist/bin/backfill-responses.js +14 -12
- package/dist/bin/backfill-vectors.js +16 -14
- package/dist/bin/bulk-sync-postgres.js +21 -19
- package/dist/bin/cc-doctor.js +19 -11
- package/dist/bin/cleanup-stale-review-tasks.js +27 -26
- package/dist/bin/cli.js +83 -109
- package/dist/bin/daemon-restart-handoff.js +2 -1
- package/dist/bin/deferred-daemon-restart.js +118 -110
- package/dist/bin/exe-actions.js +176 -0
- package/dist/bin/exe-agent-config.js +5 -5
- package/dist/bin/exe-agent.js +23 -23
- package/dist/bin/exe-assign.js +16 -14
- package/dist/bin/exe-boot.js +91 -71
- package/dist/bin/exe-call.js +8 -8
- package/dist/bin/exe-cicd.js +1210 -0
- package/dist/bin/exe-cloud.js +70 -37
- package/dist/bin/exe-config-dump.js +5 -5
- package/dist/bin/exe-dispatch.js +28 -27
- package/dist/bin/exe-doctor.js +12 -11
- package/dist/bin/exe-export-behaviors.js +20 -18
- package/dist/bin/exe-forget.js +11 -11
- package/dist/bin/exe-gateway.js +10 -10
- package/dist/bin/exe-healthcheck.js +22 -10
- package/dist/bin/exe-heartbeat.js +33 -32
- package/dist/bin/exe-kill.js +32 -31
- package/dist/bin/exe-launch-agent.js +76 -54
- package/dist/bin/exe-mcp.js +10 -6
- package/dist/bin/exe-memory-reads.js +9 -9
- package/dist/bin/exe-model-supervisor.js +138 -0
- package/dist/bin/exe-new-employee.js +14 -14
- package/dist/bin/exe-os-mcp-proxy.js +10 -6
- package/dist/bin/exe-pending-messages.js +28 -27
- package/dist/bin/exe-pending-notifications.js +27 -26
- package/dist/bin/exe-pending-reviews.js +28 -27
- package/dist/bin/exe-rename.js +9 -9
- package/dist/bin/exe-repo-truth.js +1 -1
- package/dist/bin/exe-review.js +31 -30
- package/dist/bin/exe-search.js +10 -10
- package/dist/bin/exe-session-cleanup.js +32 -31
- package/dist/bin/exe-settings.js +21 -19
- package/dist/bin/exe-start-codex.js +31 -25
- package/dist/bin/exe-start-opencode.js +24 -22
- package/dist/bin/exe-start.sh +11 -2
- package/dist/bin/exe-status.js +29 -28
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +7 -7
- package/dist/bin/exe-timers.js +2 -1
- package/dist/bin/exe-watchdog.js +170 -16
- package/dist/bin/generate-hook-manifest.js +8 -41
- package/dist/bin/git-sweep.js +28 -27
- package/dist/bin/graph-backfill.js +11 -11
- package/dist/bin/graph-export.js +10 -10
- package/dist/bin/hooks-cli.js +289 -0
- package/dist/bin/import-history.js +14 -14
- package/dist/bin/install.js +130 -116
- package/dist/bin/intercom-check.js +5 -5
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +7 -7
- package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/reconcile-backlog.js +2 -2
- package/dist/bin/registry-proxy.js +2 -2
- package/dist/bin/scan-tasks.js +52 -38
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +9 -9
- package/dist/bin/stack-update.js +10 -5
- package/dist/bin/verify-stack.js +3 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-JKVZ4ZAT.js → boot-generation-BN6GKASY.js} +6 -6
- package/dist/{boot-review-sections-2M6BTG73.js → boot-review-sections-OQ5JGSOD.js} +26 -25
- package/dist/{branch-hygiene-U5GFRSTP.js → branch-hygiene-QLD77IMJ.js} +1 -1
- package/dist/build-manifest.json +1186 -1106
- package/dist/{capability-cards-5IMJT6J7.js → capability-cards-EDZ62HKG.js} +5 -5
- package/dist/{capacity-monitor-SAXCQK7O.js → capacity-monitor-6GMTVILS.js} +28 -27
- package/dist/{catchup-brief-U2TXBLHD.js → catchup-brief-SGGBMDUP.js} +32 -31
- package/dist/{cc-binary-detect-6TNIY5JX.js → cc-binary-detect-ZR6WNOUU.js} +1 -3
- package/dist/{chunk-NKETJCB5.js → chunk-2ODXCCMR.js} +18 -3
- package/dist/{hook-integrity-KGAV6ZC2.js → chunk-3L72UBUH.js} +28 -15
- package/dist/chunk-3OX5S7KZ.js +273 -0
- package/dist/{chunk-W75GTHR3.js → chunk-3SRZNJKD.js} +1 -1
- package/dist/{chunk-I4DNJFDR.js → chunk-42IFYZUN.js} +4 -4
- package/dist/{chunk-JHI5WMK5.js → chunk-473JUDCT.js} +5 -5
- package/dist/{chunk-ANLFH23R.js → chunk-4F5CNI65.js} +1 -1
- package/dist/{chunk-AWWKRZMB.js → chunk-4KVSCQND.js} +87 -14
- package/dist/{chunk-ZCERWHY2.js → chunk-4M6RXJEY.js} +33 -23
- package/dist/{chunk-YTSXPJUQ.js → chunk-4YJEEOYT.js} +3 -3
- package/dist/{chunk-6RKKVPYF.js → chunk-4YUGB637.js} +1 -1
- package/dist/{chunk-XXOPG4BW.js → chunk-4ZSOKEDY.js} +3 -3
- package/dist/{chunk-55BEFF4V.js → chunk-5DF4Y6EC.js} +1 -1
- package/dist/{chunk-4QCFFW2H.js → chunk-5QCIWWFA.js} +46 -0
- package/dist/{chunk-3UUX5OY4.js → chunk-5QKLWJ4Z.js} +1 -1
- package/dist/{chunk-YSLGFPWX.js → chunk-5UBWBXLF.js} +3 -3
- package/dist/chunk-5WA4DG2A.js +117 -0
- package/dist/{chunk-4EN3IZ3Q.js → chunk-64ODONK2.js} +67 -1
- package/dist/{chunk-TAMDAOCU.js → chunk-66CGXQUA.js} +239 -39
- package/dist/{chunk-QHJR7IMX.js → chunk-6F3FQCAQ.js} +3 -3
- package/dist/{chunk-WMEYJT4R.js → chunk-6FG34V6D.js} +15 -14
- package/dist/{chunk-NMH5ZQPU.js → chunk-6KQ6WMTI.js} +1 -1
- package/dist/{chunk-IRVOXUSK.js → chunk-6WKBTZVL.js} +10 -4
- package/dist/{chunk-NOKJCF27.js → chunk-7INEFMVU.js} +9 -3
- package/dist/{chunk-GSJLB6JI.js → chunk-7THUQU44.js} +34 -8
- package/dist/{chunk-HDLAB7W3.js → chunk-7UH2JWBF.js} +1 -1
- package/dist/{chunk-KTCXJWJG.js → chunk-7UNMSF5O.js} +1 -1
- package/dist/{chunk-JTVIANUB.js → chunk-AEUGIJDO.js} +3 -1
- package/dist/{chunk-DSJI76XL.js → chunk-AHNVFBVB.js} +113 -16
- package/dist/{chunk-IBS2FAI4.js → chunk-AUKRBHHZ.js} +4 -1
- package/dist/{chunk-AKLJ4JH3.js → chunk-BBK2TSK3.js} +1 -1
- package/dist/{chunk-ZL4AGWAH.js → chunk-BNWWVYRN.js} +6 -5
- package/dist/{chunk-PY3FOMRN.js → chunk-BQEZPRUC.js} +4 -4
- package/dist/{chunk-DIXXEE3S.js → chunk-BQXYXJYC.js} +721 -309
- package/dist/{chunk-ORM7ZFKC.js → chunk-BZ546I4Q.js} +32 -0
- package/dist/{chunk-3KDCORDO.js → chunk-C2UN464N.js} +1 -1
- package/dist/{chunk-75H4R62K.js → chunk-CBPNZFSU.js} +0 -2
- package/dist/{chunk-YLXTKI6M.js → chunk-CHO5SNWR.js} +1 -1
- package/dist/{chunk-MXPNVSXI.js → chunk-CIEVY5TD.js} +11 -11
- package/dist/{chunk-UBK7HK3J.js → chunk-CKLJT2DH.js} +2 -2
- package/dist/{chunk-MOGA4Q7F.js → chunk-CKOJP7JI.js} +1 -1
- package/dist/{chunk-V3W3SATA.js → chunk-CL4J4757.js} +1 -1
- package/dist/{chunk-XNNECNDL.js → chunk-CQFWTWC6.js} +13 -13
- package/dist/{chunk-PDVXWXTL.js → chunk-CROVXJ4S.js} +3 -3
- package/dist/{chunk-WJG344NC.js → chunk-CWSLTSL6.js} +8 -8
- package/dist/{chunk-VMTZ4RUW.js → chunk-DDMGQ5Q3.js} +60 -26
- package/dist/{chunk-YKC7QDZH.js → chunk-DN24VTS5.js} +31 -6
- package/dist/{chunk-IN6CAM4F.js → chunk-EHAN752X.js} +7 -7
- package/dist/{chunk-EXTZSNWL.js → chunk-EPHSISMT.js} +2 -2
- package/dist/{chunk-6EZQUNE6.js → chunk-FCMQVEVL.js} +36 -3
- package/dist/{chunk-3L2QU5ZF.js → chunk-FS7XF7SE.js} +1 -1
- package/dist/{chunk-LGS2V2XD.js → chunk-FUKVP54K.js} +66 -19
- package/dist/{chunk-44TLJZJ5.js → chunk-FX2QRSRT.js} +1 -1
- package/dist/{chunk-PWRC5XZO.js → chunk-FXZ6VGFW.js} +16 -8
- package/dist/{chunk-NT7W4RXD.js → chunk-GKDAQL45.js} +1 -1
- package/dist/{chunk-EKE37MO4.js → chunk-GOT5ZHPX.js} +3 -3
- package/dist/{chunk-SLLLOOEI.js → chunk-GPJIBLP4.js} +1 -0
- package/dist/{chunk-EKYYMIVT.js → chunk-GPUOUUHA.js} +10 -1
- package/dist/{chunk-PB5S7YOF.js → chunk-GXNBPTPJ.js} +1 -1
- package/dist/{chunk-4SJ4LK4V.js → chunk-HE34XVD5.js} +5 -5
- package/dist/{chunk-6VHOQ3IM.js → chunk-HHAKXIKX.js} +12 -9
- package/dist/{chunk-TFKCERAK.js → chunk-HHT527PV.js} +38 -41
- package/dist/{chunk-ZSODLMFV.js → chunk-HIVOLPLD.js} +1 -40
- package/dist/{chunk-UCFC2AEI.js → chunk-I3LDTSWU.js} +1 -1
- package/dist/{chunk-Q3AXXKDF.js → chunk-IKXH4BFC.js} +5 -5
- package/dist/chunk-IMYGYIAI.js +23 -0
- package/dist/{chunk-GS7LIT34.js → chunk-IPHLUZ37.js} +1 -1
- package/dist/{chunk-M4IRPXSZ.js → chunk-IZA7XW2Q.js} +3 -3
- package/dist/{chunk-SEQIPGLU.js → chunk-IZLML47J.js} +1 -1
- package/dist/{chunk-4HKTO2SV.js → chunk-JRMHGO5B.js} +1 -1
- package/dist/{chunk-U73AC5AN.js → chunk-JSTTPYL3.js} +16 -16
- package/dist/{chunk-6SCGLHJ7.js → chunk-JVWLHBAV.js} +4 -4
- package/dist/{chunk-OVEQE6YS.js → chunk-K7UNIEB4.js} +254 -48
- package/dist/{chunk-HNWS7YHN.js → chunk-KBR5LIWD.js} +1 -1
- package/dist/{chunk-AKLQSC6W.js → chunk-KI7O64XV.js} +328 -98
- package/dist/{chunk-XXFKSJYA.js → chunk-KK3MIY5C.js} +5 -5
- package/dist/{chunk-U6SUKSZR.js → chunk-KO3OHI6V.js} +3 -3
- package/dist/{chunk-NJFJWQNN.js → chunk-L5CGXEZC.js} +27 -22
- package/dist/{chunk-NBXDXKLC.js → chunk-LK3XQDBP.js} +1 -1
- package/dist/{chunk-T3QUKNLI.js → chunk-LM443ORV.js} +1 -1
- package/dist/{chunk-BBSIEYF5.js → chunk-LNAFLXL7.js} +12 -4
- package/dist/{chunk-32YV32VA.js → chunk-LTUA5EYI.js} +122 -11
- package/dist/{chunk-23MVDXLY.js → chunk-MAXD5JQL.js} +11 -10
- package/dist/{chunk-GNUAL43X.js → chunk-MFASHRJ6.js} +5 -5
- package/dist/chunk-MFYMDGE7.js +37 -0
- package/dist/{chunk-VKJGHAZT.js → chunk-MGVILAYU.js} +57 -13
- package/dist/{chunk-DB55JZHU.js → chunk-MSLWRWTI.js} +1 -1
- package/dist/{chunk-C2L622QJ.js → chunk-NB5IRTC4.js} +52 -44
- package/dist/{chunk-2ZOEC4KC.js → chunk-ND75TGPR.js} +2 -2
- package/dist/{chunk-VRTCVZND.js → chunk-NE34MWVL.js} +142 -16
- package/dist/{chunk-S2WBS6BG.js → chunk-NMOFLWDY.js} +1 -1
- package/dist/{chunk-CRCB5S7I.js → chunk-NPXKGBVZ.js} +140 -23
- package/dist/{chunk-JSMDRKPJ.js → chunk-NRBGUIPE.js} +1 -1
- package/dist/{chunk-4LWBC7CM.js → chunk-NY6SBR4O.js} +1 -1
- package/dist/{chunk-UCUOGVDX.js → chunk-O3K2C22L.js} +13 -1
- package/dist/{chunk-R522MWAR.js → chunk-OATET4BV.js} +2 -2
- package/dist/chunk-OOZU5H3T.js +86 -0
- package/dist/{chunk-XFTEX77S.js → chunk-OQ4FNDRG.js} +28 -6
- package/dist/{chunk-VYQ7B7DI.js → chunk-OWVX52XF.js} +4 -4
- package/dist/{chunk-AETLDRZB.js → chunk-PEAAX6UA.js} +1 -1
- package/dist/{chunk-UM3N6VND.js → chunk-PFAVHC5N.js} +5 -5
- package/dist/chunk-PMVVUIHH.js +85 -0
- package/dist/chunk-PPMGQFLJ.js +2317 -0
- package/dist/{chunk-7TSBV3SD.js → chunk-PTY2N23C.js} +310 -2
- package/dist/{chunk-UKLN57Q5.js → chunk-PZ5SKYK6.js} +4 -4
- package/dist/{chunk-636LKCKE.js → chunk-Q6ZLQMP2.js} +1 -1
- package/dist/{chunk-N7VEP5B3.js → chunk-QFR5EKZG.js} +29 -7
- package/dist/{chunk-YMP2QSOP.js → chunk-QN56VQ6Z.js} +1 -1
- package/dist/{chunk-6YVUR3OU.js → chunk-QR3BUMOS.js} +2 -2
- package/dist/{chunk-XZ65ST2I.js → chunk-QV5CQLQH.js} +2 -2
- package/dist/{chunk-DJOIMFKV.js → chunk-REZIGNA6.js} +2 -2
- package/dist/{chunk-UQGSBM3U.js → chunk-RFPMXR6B.js} +11 -0
- package/dist/{chunk-DN4YVV4Z.js → chunk-RSABKW6B.js} +1 -1
- package/dist/{chunk-LP4GB656.js → chunk-RZNP35SI.js} +2 -2
- package/dist/{chunk-NUTZJZKW.js → chunk-SKTAZGFI.js} +10 -42
- package/dist/{chunk-TQAZTRQ3.js → chunk-SVXUT2DN.js} +4 -4
- package/dist/{chunk-DJ7YXOTU.js → chunk-T7EF5CQO.js} +3 -3
- package/dist/{chunk-QAEWWYHL.js → chunk-TDF2XKLK.js} +5 -1
- package/dist/{chunk-ZGYNKA3O.js → chunk-TT5BBVLX.js} +29 -31
- package/dist/{chunk-5H47VHB7.js → chunk-UWX6MMCX.js} +1 -1
- package/dist/{chunk-XL5MFGMR.js → chunk-V4YNN7PA.js} +10 -3
- package/dist/{chunk-SL6KQYDU.js → chunk-V5DDXXMP.js} +7 -7
- package/dist/{chunk-DZKPOSFD.js → chunk-VH6SPPNA.js} +1 -1
- package/dist/{chunk-LDNYSMPZ.js → chunk-VJUUI2VT.js} +1 -1
- package/dist/{chunk-CBCGDEJA.js → chunk-VN5WOOAQ.js} +42 -6
- package/dist/{chunk-EXDW3E2R.js → chunk-VPHJ2LUI.js} +165 -15
- package/dist/{chunk-GOMQ7PVQ.js → chunk-WJC6AAJN.js} +1 -1
- package/dist/{chunk-GJI77VDO.js → chunk-WVBVUVZB.js} +6 -5
- package/dist/{chunk-A6PDF4BO.js → chunk-XTQ7R2PA.js} +2 -2
- package/dist/{chunk-L6RXG36J.js → chunk-Y2HD2YB7.js} +1 -1
- package/dist/{chunk-KTU3EAWK.js → chunk-YAACLBZ7.js} +5 -5
- package/dist/{chunk-7GE2EQ23.js → chunk-YGVAKKGJ.js} +11 -6
- package/dist/chunk-YLHACCCB.js +166 -0
- package/dist/{chunk-PLZSZOZN.js → chunk-YP6UGVEY.js} +3 -3
- package/dist/{chunk-ULIBLJ6W.js → chunk-YYC553FO.js} +5 -5
- package/dist/{chunk-T35RCQFE.js → chunk-YZPEQW7H.js} +9 -8
- package/dist/{chunk-KI5PFRG6.js → chunk-ZKGWHT56.js} +60 -2
- package/dist/{chunk-NUK7EEN5.js → chunk-ZKJ5S23O.js} +33 -13
- package/dist/chunk-ZLPS3GR7.js +146 -0
- package/dist/{chunk-XH7YL7JM.js → chunk-ZMX22HSS.js} +50 -6
- package/dist/{chunk-JY5GAZYC.js → chunk-ZQEJ4IX2.js} +4 -0
- package/dist/{chunk-R4CBHKZ2.js → chunk-ZS5JO6QV.js} +7 -6
- package/dist/{cleanup-graph-garbage-DPJGO52H.js → cleanup-graph-garbage-LAPIZGFX.js} +12 -12
- package/dist/{cloud-sync-command-JPNTT4OQ.js → cloud-sync-command-QAZ2NWRA.js} +11 -2
- package/dist/{cloud-sync-db-init-V2LWIUQU.js → cloud-sync-db-init-HAGVF32Y.js} +1 -1
- package/dist/{cloud-sync-shutdown-BNALPWGX.js → cloud-sync-shutdown-DAEPCFVK.js} +5 -5
- package/dist/{co-activation-CMNSWS6B.js → co-activation-523TKQPZ.js} +5 -5
- package/dist/{co-occurrence-WRI2NAN6.js → co-occurrence-PQUCTENN.js} +36 -17
- package/dist/{code-context-index-NOJSHLPN.js → code-context-index-LIDOFKOR.js} +6 -4
- package/dist/{code-context-watcher-VZNZU3BO.js → code-context-watcher-4F7K2N3U.js} +6 -4
- package/dist/{content-extractor-NXYNEF5K.js → content-extractor-DJM5EUDA.js} +2 -2
- package/dist/{conversation-entity-extractor-74252CAO.js → conversation-entity-extractor-THGKQ5RD.js} +5 -5
- package/dist/{crdt-sync-B3JN6AIV.js → crdt-sync-32B55NOJ.js} +1 -1
- package/dist/{crm-webhook-GYWQRFET.js → crm-webhook-FHRISFYQ.js} +2 -2
- package/dist/{cto-delegation-gate-LQHVLEMW.js → cto-delegation-gate-O6XPGECP.js} +27 -26
- package/dist/{daemon-auth-QZHEO7IQ.js → daemon-auth-PNKHERLV.js} +6 -1
- package/dist/daemon-drift-N2GKUBAO.js +15 -0
- package/dist/{daemon-orchestration-5HIQALZH.js → daemon-orchestration-BWLSJG2X.js} +33 -30
- package/dist/{daemon-ready-P2BR2XP5.js → daemon-ready-BN6EZLTQ.js} +1 -1
- package/dist/{daemon-ready-signal-CKXPUMJ2.js → daemon-ready-signal-PNDMVKPJ.js} +3 -1
- package/dist/{daemon-restart-circuit-breaker-SMTWFX27.js → daemon-restart-circuit-breaker-CD4VMCU7.js} +1 -1
- package/dist/daemon-restart-report-FIO5HZTJ.js +15 -0
- package/dist/{daemon-timer-report-TNJH5SFY.js → daemon-timer-report-6UK5PSDP.js} +2 -1
- package/dist/{db-integrity-events-2DTFO37N.js → db-integrity-events-GYGANKZV.js} +1 -1
- package/dist/{destructive-data-guard-BVFWPPIS.js → destructive-data-guard-HHWUBIGS.js} +1 -1
- package/dist/{doc-graph-extractor-PQHDHQPQ.js → doc-graph-extractor-HOKOV7BE.js} +10 -10
- package/dist/{documents-C4SSPJMC.js → documents-HWEJMONR.js} +16 -14
- package/dist/{dreaming-XAO3FCBV.js → dreaming-FMNDODG2.js} +31 -30
- package/dist/{employee-boot-brief-W4OHUMRQ.js → employee-boot-brief-DBFROOQJ.js} +35 -34
- package/dist/{entity-boost-3UWGXG5O.js → entity-boost-5V4W6NFA.js} +1 -1
- package/dist/{exe-drift-AG2KMKD5.js → exe-drift-V55UAYRT.js} +6 -6
- package/dist/{exe-export-IC5BT335.js → exe-export-LHN42ZUS.js} +18 -16
- package/dist/{exe-import-A35ZLDPG.js → exe-import-M536BEZC.js} +18 -16
- package/dist/{exe-key-TCMJNYLA.js → exe-key-37XIR22X.js} +111 -107
- package/dist/{exe-org-JXCR3JYZ.js → exe-org-7TDIRNTE.js} +14 -14
- package/dist/{exe-snapshot-SV6SRIG6.js → exe-snapshot-EOUBCIQK.js} +34 -33
- package/dist/{fast-db-init-L2RGKJWH.js → fast-db-init-GWUZ746B.js} +1 -1
- package/dist/{founder-context-D4HFIESJ.js → founder-context-6LQKET4A.js} +2 -2
- package/dist/{fts-integrity-4YB34KWX.js → fts-integrity-PLAL6NMG.js} +1 -1
- package/dist/gateway/index.js +17 -17
- package/dist/{git-main-guard-VTW4N3CM.js → git-main-guard-BGICS25C.js} +1 -1
- package/dist/{git-staleness-TN7CYGFG.js → git-staleness-QNNXJK3W.js} +5 -5
- package/dist/{global-procedures-YFDEIOG7.js → global-procedures-NMQGF54V.js} +7 -7
- package/dist/{gotrue-session-ODZ2ERJX.js → gotrue-session-U4H3UGHL.js} +1 -3
- package/dist/{graph-auto-extract-3YR3TYRW.js → graph-auto-extract-7POGAKHM.js} +10 -10
- package/dist/{graph-query-AP5R6ZHO.js → graph-query-ZEDO4BDF.js} +1 -1
- package/dist/{graph-rag-Z2KCJTPK.js → graph-rag-JA7XN7NO.js} +5 -5
- package/dist/hook-integrity-6NLSNTXD.js +15 -0
- package/dist/{hook-prefetch-K5DN3TOQ.js → hook-prefetch-4KH3D4YU.js} +28 -26
- package/dist/hook-tamper-log-Z4PWC7N4.js +90 -0
- package/dist/hooks/bug-report-worker.js +31 -30
- package/dist/hooks/codex-stop-task-finalizer.js +33 -32
- package/dist/hooks/commit-complete.js +30 -29
- package/dist/hooks/error-recall.js +12 -12
- package/dist/hooks/exe-heartbeat-hook.js +7 -7
- package/dist/hooks/ingest-worker.js +17 -15
- package/dist/hooks/ingest.js +20 -20
- package/dist/hooks/instructions-loaded.js +9 -9
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +8 -8
- package/dist/hooks/post-compact.js +7 -7
- package/dist/hooks/post-tool-combined.js +14 -14
- package/dist/hooks/pre-compact.js +30 -29
- package/dist/hooks/pre-tool-use.js +303 -489
- package/dist/hooks/prompt-submit.js +61 -54
- package/dist/hooks/session-end.js +35 -34
- package/dist/hooks/session-start.js +18 -18
- package/dist/hooks/stop.js +36 -35
- package/dist/hooks/subagent-stop.js +32 -31
- package/dist/hooks/summary-worker.js +36 -35
- package/dist/index.js +39 -38
- package/dist/{installer-LK35OX6R.js → installer-M34Q7LAS.js} +25 -10
- package/dist/{installer-54HTN5RE.js → installer-POV6TDQ5.js} +12 -8
- package/dist/{installer-LLWKZI2S.js → installer-S624ZOMB.js} +12 -8
- package/dist/{intercom-queue-5NOT2RKI.js → intercom-queue-MKDWAEUV.js} +26 -25
- package/dist/lib/cloud-sync.js +27 -19
- package/dist/lib/consolidation.js +12 -12
- package/dist/lib/database.js +5 -5
- package/dist/lib/db-backup.js +7 -1
- package/dist/lib/db-daemon-client.js +8 -6
- package/dist/lib/db-write-worker.js +4 -4
- package/dist/lib/db.js +5 -5
- package/dist/lib/device-registry.js +1 -1
- package/dist/lib/embedder.js +6 -4
- package/dist/lib/employee-templates.js +8 -8
- package/dist/lib/employees.js +5 -5
- package/dist/lib/exe-daemon-client.js +5 -3
- package/dist/lib/exe-daemon.js +333 -262
- package/dist/lib/hybrid-search.js +10 -10
- package/dist/lib/identity-templates.js +1 -1
- package/dist/lib/identity.js +17 -7
- package/dist/lib/license.js +2 -2
- package/dist/lib/messaging.js +27 -26
- package/dist/lib/post-tool-memory.js +9 -9
- package/dist/lib/registry-proxy.js +3 -1
- package/dist/lib/reminders.js +6 -6
- package/dist/lib/schedules.js +11 -11
- package/dist/lib/session-registry.js +11 -7
- package/dist/lib/session-wrappers.js +1 -1
- package/dist/lib/skill-learning.js +17 -15
- package/dist/lib/status-brief.js +2 -1
- package/dist/lib/store.js +9 -9
- package/dist/lib/task-router.js +6 -6
- package/dist/lib/tasks.js +28 -27
- package/dist/lib/tmux-routing.js +26 -25
- package/dist/lib/tmux-status.js +5 -1
- package/dist/lib/token-spend.js +6 -6
- package/dist/{license-gate-JVMB6OFD.js → license-gate-2QNMBAZU.js} +3 -3
- package/dist/{license-sync-5VYS2F2W.js → license-sync-FEDKH5MD.js} +2 -2
- package/dist/{mailbox-inbox-4MEUOL3J.js → mailbox-inbox-XE72D3AX.js} +2 -2
- package/dist/{mailbox-outbox-J6WIF3UY.js → mailbox-outbox-DNDDP2HW.js} +1 -1
- package/dist/mcp/register-tools.js +110 -106
- package/dist/mcp/server.js +113 -109
- package/dist/mcp/tools/complete-reminder.js +7 -7
- package/dist/mcp/tools/create-reminder.js +7 -7
- package/dist/mcp/tools/create-task.js +30 -29
- package/dist/mcp/tools/deactivate-behavior.js +18 -16
- package/dist/mcp/tools/list-reminders.js +7 -7
- package/dist/mcp/tools/list-tasks.js +30 -29
- package/dist/mcp/tools/send-message.js +33 -30
- package/dist/mcp/tools/update-task.js +29 -28
- package/dist/{mcp-child-registry-OTG4MWO7.js → mcp-child-registry-DVHYAHPW.js} +2 -2
- package/dist/{mcp-health-HNVSWKFA.js → mcp-health-B5EKRCZG.js} +2 -2
- package/dist/{mcp-http-config-DQWL7U2Z.js → mcp-http-config-ZJ7XHWT7.js} +10 -6
- package/dist/{mcp-session-identity-277GASTQ.js → mcp-session-identity-PEVM7VIP.js} +26 -25
- package/dist/{memory-cards-3S2ZQPR7.js → memory-cards-VN5DEWPD.js} +9 -9
- package/dist/{memory-graph-extractor-A6DFEFIN.js → memory-graph-extractor-TMEB6WLA.js} +11 -11
- package/dist/{memory-poisoning-defense-ZVP4H6DY.js → memory-poisoning-defense-DYHARQ2G.js} +5 -5
- package/dist/{memory-pressure-watchdog-6W5F6R7H.js → memory-pressure-watchdog-J6Q3SIBL.js} +27 -26
- package/dist/{memory-queue-client-ADSDP6OX.js → memory-queue-client-QC2OTMJB.js} +6 -4
- package/dist/{memory-reflection-BKB2YOE6.js → memory-reflection-ZYJUOSFX.js} +9 -9
- package/dist/{message-queue-client-XQN7QABL.js → message-queue-client-OEQCGSWC.js} +1 -25
- package/dist/{notification-ledger-CLGM7ODF.js → notification-ledger-TG6EFYBP.js} +29 -28
- package/dist/{notifications-MACUZPYP.js → notifications-LGYY22W5.js} +26 -25
- package/dist/{orchestration-events-N7LYMUGA.js → orchestration-events-JPHB6NPY.js} +6 -6
- package/dist/{orchestrator-4X24EWHV.js → orchestrator-IC4WGP6L.js} +28 -27
- package/dist/{org-brief-session-FZOFMO5U.js → org-brief-session-DEPHWCQR.js} +9 -9
- package/dist/{org-consent-policy-O5E6HXBL.js → org-consent-policy-T27AO5OJ.js} +2 -2
- package/dist/{org-join-POWUG25F.js → org-join-A3YXC5RB.js} +2 -2
- package/dist/{org-key-admin-E7EMDOZZ.js → org-key-admin-SQFHCVP2.js} +3 -3
- package/dist/{org-partner-runtime-FODONVTM.js → org-partner-runtime-L7L2WWGN.js} +10 -10
- package/dist/{org-row-visibility-VX4AVV5Q.js → org-row-visibility-M54Z6ZH3.js} +1 -1
- package/dist/{pipeline-router-6GGT2ZW3.js → pipeline-router-NKYAUR3Y.js} +6 -6
- package/dist/{plan-limits-FUN76LYY.js → plan-limits-ISRRGF23.js} +8 -8
- package/dist/{platform-procedures-7YSCLF4Z.js → platform-procedures-Z7ZGBJWN.js} +1 -1
- package/dist/{project-boot-3Q65LCIP.js → project-boot-BLYGVUJH.js} +4 -1
- package/dist/{project-name-LJVFMYTQ.js → project-name-WKSNNKXK.js} +6 -6
- package/dist/{projection-worker-4OANGP5K.js → projection-worker-RNYPE46G.js} +2 -2
- package/dist/{prospective-memory-KR3P4T6N.js → prospective-memory-GEO6E3UL.js} +5 -5
- package/dist/{push-notifications-NCZLH6DI.js → push-notifications-EY6BXZUY.js} +27 -26
- package/dist/{reproject-worktree-memories-PWYKPB2U.js → reproject-worktree-memories-DAA5GWMH.js} +28 -27
- package/dist/{reranker-6V3C2AO4.js → reranker-7OADQPMG.js} +1 -1
- package/dist/{retrieval-health-5D7O6VH6.js → retrieval-health-FCEDWN2P.js} +2 -2
- package/dist/{review-polling-QW3LJ4KN.js → review-polling-G52BR4MC.js} +27 -26
- package/dist/runtime/index.js +39 -38
- package/dist/{session-events-T45SSTMF.js → session-events-P6E2373E.js} +27 -26
- package/dist/{session-kill-telemetry-QSPVJGBF.js → session-kill-telemetry-OHNJMIVT.js} +27 -26
- package/dist/{session-mcp-config-SC5BLWZG.js → session-mcp-config-WFZAH6R5.js} +2 -1
- package/dist/{session-scope-KRWE54C4.js → session-scope-DKOHPQPJ.js} +26 -25
- package/dist/{setup-wizard-GP3TBTPF.js → setup-wizard-RNU3RFBE.js} +1 -1
- package/dist/{skill-refinement-C7JTMLJG.js → skill-refinement-AKJTHFXC.js} +6 -6
- package/dist/{stack-generate-manifest-MFMDWRUP.js → stack-generate-manifest-7WJZWSPK.js} +163 -15
- package/dist/{stack-promote-EKSCYY63.js → stack-promote-OP2URGFF.js} +4 -4
- package/dist/{stack-release-2GZAAFO4.js → stack-release-MY6U2QIO.js} +31 -8
- package/dist/{stack-update-J6JXSTAZ.js → stack-update-QSHSLUTZ.js} +3 -3
- package/dist/{steward-gate-BFCCMCSW.js → steward-gate-KMLS5ECC.js} +6 -6
- package/dist/{subagent-brief-injection-ED36PLYY.js → subagent-brief-injection-HCKZQZBF.js} +37 -36
- package/dist/{support-inbox-YW47SYJF.js → support-inbox-UBXU5RKV.js} +11 -11
- package/dist/{support-outbox-HFJWG52M.js → support-outbox-G2NG2U5K.js} +2 -2
- package/dist/{sweep-budget-KMPJ7O5Z.js → sweep-budget-YGLCNXZZ.js} +9 -3
- package/dist/{task-enforcement-CECTQX4U.js → task-enforcement-2GR7HU6V.js} +27 -26
- package/dist/{task-request-inbox-Q5T4N5K7.js → task-request-inbox-ANCVK2VG.js} +2 -2
- package/dist/{task-scope-ERVEUEYU.js → task-scope-QANJJXXB.js} +30 -29
- package/dist/{tasks-crud-ZRQNJXQ2.js → tasks-crud-45WOIMIM.js} +44 -25
- package/dist/{tasks-notify-MIZH4C2O.js → tasks-notify-ZJS4MA3S.js} +29 -26
- package/dist/{tasks-review-Z7J2P6DG.js → tasks-review-ZVPKY47Z.js} +26 -25
- package/dist/{telemetry-upload-LVQUQYFP.js → telemetry-upload-VY3UWAEL.js} +10 -10
- package/dist/{token-budget-BU4NOVZF.js → token-budget-XHX6XFEC.js} +6 -6
- package/dist/{tool-capability-index-7F42MOJT.js → tool-capability-index-6HLZU437.js} +1 -1
- package/dist/{tool-telemetry-O27EVMBR.js → tool-telemetry-GBDI4AXR.js} +1 -1
- package/dist/tui/App.js +36 -35
- package/dist/{tui-data-TPWWBIUQ.js → tui-data-IQFE3UW3.js} +30 -29
- package/dist/{typed-messages-RCMPEKJN.js → typed-messages-P2HLLA62.js} +1 -1
- package/dist/{update-support-F2F5537B.js → update-support-BDN5AK4R.js} +25 -22
- package/dist/{work-claims-B73X5NE7.js → work-claims-PDQNLE5K.js} +7 -7
- package/dist/{work-state-heartbeat-P4YX6E2R.js → work-state-heartbeat-CH6BLQKV.js} +1 -1
- package/dist/{worker-gate-BEEIIVWA.js → worker-gate-NUUSQMBT.js} +1 -3
- package/dist/{workflow-engine-5X46PFCW.js → workflow-engine-RZ7QEI3Z.js} +2 -2
- package/dist/{worktree-W47CIMJ6.js → worktree-Q25PZST6.js} +11 -7
- package/dist/worktree-ownership-guard-4LKMW6PW.js +421 -0
- package/dist/{worktree-sweep-BNBD4RFX.js → worktree-sweep-EV5YQ2OB.js} +8 -8
- package/package.json +15 -3
- package/release-notes.json +5 -5
- package/src/commands/exe.md +16 -16
- package/stack.release.json +9 -8
- package/dist/behavior-injection-M6UYZCMW.js +0 -63
- package/dist/chunk-BJ7AVSY6.js +0 -50
- package/dist/daemon-restart-report-EIVD6WDJ.js +0 -10
- package/dist/worktree-ownership-guard-OUWJROW2.js +0 -88
- /package/dist/{chunk-GQOEWNVM.js → chunk-4EG4DT4F.js} +0 -0
- /package/dist/{chunk-AISULNGL.js → chunk-BRAIWGMF.js} +0 -0
- /package/dist/{chunk-NRG7KZIP.js → chunk-HQEAZDAC.js} +0 -0
- /package/dist/{chunk-VZAFWPAY.js → chunk-IK4344V5.js} +0 -0
- /package/dist/{chunk-GM7TLYOK.js → chunk-K3VDF6II.js} +0 -0
- /package/dist/{chunk-2AJGV5UL.js → chunk-KM7DAG5J.js} +0 -0
- /package/dist/{chunk-YO4BO2CL.js → chunk-QIEYJ4KZ.js} +0 -0
- /package/dist/{chunk-WSQASFLP.js → chunk-VCTK5HRA.js} +0 -0
- /package/dist/{chunk-KQ6RJWRW.js → chunk-VPT6VMBG.js} +0 -0
- /package/dist/{chunk-6WIFPD2P.js → chunk-YZ4AEMR7.js} +0 -0
- /package/dist/{core-memory-7I7RE2SJ.js → core-memory-UIZKCY4L.js} +0 -0
- /package/dist/{memory-isolation-2TUZ7Z4K.js → memory-isolation-3GJ6WLYX.js} +0 -0
- /package/dist/{oauth-server-AYM37SQ4.js → oauth-server-ZRHXIRXQ.js} +0 -0
- /package/dist/{wiki-acl-IBQLLBTS.js → wiki-acl-MFOYK5F4.js} +0 -0
|
@@ -3,11 +3,12 @@ import {
|
|
|
3
3
|
markSupportReportSentSync
|
|
4
4
|
} from "./chunk-MMRUBN3I.js";
|
|
5
5
|
import {
|
|
6
|
+
describeUpstreamFailure,
|
|
6
7
|
isTelemetryRedactionEnabled,
|
|
7
8
|
sanitizeSupportEndpointPath,
|
|
8
9
|
sanitizeUpstreamId,
|
|
9
10
|
sanitizeUpstreamPayload
|
|
10
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-5QCIWWFA.js";
|
|
11
12
|
|
|
12
13
|
// src/lib/support-outbox.ts
|
|
13
14
|
import { mkdirSync, readdirSync, readFileSync, writeFileSync, existsSync } from "fs";
|
|
@@ -32,7 +33,7 @@ var MAX_BACKOFF_S = 30;
|
|
|
32
33
|
var sentIds = /* @__PURE__ */ new Set();
|
|
33
34
|
async function loadGoTrueAuthHeader() {
|
|
34
35
|
try {
|
|
35
|
-
const { getAuthHeader } = await import("./gotrue-session-
|
|
36
|
+
const { getAuthHeader } = await import("./gotrue-session-U4H3UGHL.js");
|
|
36
37
|
return await getAuthHeader();
|
|
37
38
|
} catch {
|
|
38
39
|
return null;
|
|
@@ -409,6 +410,10 @@ ${DUPLICATE_MARKER}: ${dedupeHash}
|
|
|
409
410
|
}
|
|
410
411
|
return { sent, errors, skipped };
|
|
411
412
|
}
|
|
413
|
+
var PERMANENT_4XX = /* @__PURE__ */ new Set([400, 404, 405, 409, 410, 413, 415, 422]);
|
|
414
|
+
function isDeterministicRejection(status) {
|
|
415
|
+
return PERMANENT_4XX.has(status);
|
|
416
|
+
}
|
|
412
417
|
async function sendStatusUpdateRecord(record, filePath, licenseKey, licenseToken, adminToken, gotrueAuth) {
|
|
413
418
|
const endpoint = buildStatusUpdateEndpoint(record.endpointPath, adminToken);
|
|
414
419
|
const resp = await fetch(endpoint, {
|
|
@@ -429,16 +434,27 @@ async function sendStatusUpdateRecord(record, filePath, licenseKey, licenseToken
|
|
|
429
434
|
if (resp.ok) {
|
|
430
435
|
writeFileSync(filePath, JSON.stringify({ ...record, sent_at: (/* @__PURE__ */ new Date()).toISOString() }, null, 2), "utf-8");
|
|
431
436
|
onNetworkSuccess();
|
|
432
|
-
return
|
|
437
|
+
return "sent";
|
|
438
|
+
}
|
|
439
|
+
const lastError = await describeUpstreamFailure(resp);
|
|
440
|
+
if (isDeterministicRejection(resp.status)) {
|
|
441
|
+
writeFileSync(filePath, JSON.stringify({
|
|
442
|
+
...record,
|
|
443
|
+
attempts: (record.attempts ?? 0) + 1,
|
|
444
|
+
last_error: lastError,
|
|
445
|
+
last_attempt_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
446
|
+
permanent_rejection: { status: resp.status, error: lastError, rejected_at: (/* @__PURE__ */ new Date()).toISOString() }
|
|
447
|
+
}, null, 2), "utf-8");
|
|
448
|
+
return "rejected";
|
|
433
449
|
}
|
|
434
450
|
writeFileSync(filePath, JSON.stringify({
|
|
435
451
|
...record,
|
|
436
452
|
attempts: (record.attempts ?? 0) + 1,
|
|
437
|
-
last_error:
|
|
453
|
+
last_error: lastError,
|
|
438
454
|
last_attempt_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
439
455
|
}, null, 2), "utf-8");
|
|
440
456
|
onNetworkFailure();
|
|
441
|
-
return
|
|
457
|
+
return "failed";
|
|
442
458
|
}
|
|
443
459
|
async function flushStatusUpdates(licenseKey, licenseToken, adminToken, maxPerFlush, gotrueAuth) {
|
|
444
460
|
let sent = 0;
|
|
@@ -466,6 +482,10 @@ async function flushStatusUpdates(licenseKey, licenseToken, adminToken, maxPerFl
|
|
|
466
482
|
skipped++;
|
|
467
483
|
continue;
|
|
468
484
|
}
|
|
485
|
+
if (record.permanent_rejection) {
|
|
486
|
+
skipped++;
|
|
487
|
+
continue;
|
|
488
|
+
}
|
|
469
489
|
try {
|
|
470
490
|
if (Date.now() - new Date(record.created_at).getTime() > TTL_MS) {
|
|
471
491
|
writeFileSync(filePath, JSON.stringify({
|
|
@@ -479,8 +499,9 @@ async function flushStatusUpdates(licenseKey, licenseToken, adminToken, maxPerFl
|
|
|
479
499
|
} catch {
|
|
480
500
|
}
|
|
481
501
|
try {
|
|
482
|
-
const
|
|
483
|
-
if (
|
|
502
|
+
const outcome = await sendStatusUpdateRecord(record, filePath, licenseKey, licenseToken, adminToken, gotrueAuth);
|
|
503
|
+
if (outcome === "sent") sent++;
|
|
504
|
+
else if (outcome === "rejected") skipped++;
|
|
484
505
|
else errors++;
|
|
485
506
|
} catch (err) {
|
|
486
507
|
try {
|
|
@@ -609,10 +630,15 @@ function scanStatusDir(dir) {
|
|
|
609
630
|
return { total: 0, unsent: 0 };
|
|
610
631
|
}
|
|
611
632
|
let unsent = 0;
|
|
633
|
+
let rejected = 0;
|
|
612
634
|
let oldest;
|
|
613
635
|
for (const file of files) {
|
|
614
636
|
try {
|
|
615
637
|
const record = JSON.parse(readFileSync(path.join(dir, file), "utf-8"));
|
|
638
|
+
if (record.permanent_rejection) {
|
|
639
|
+
rejected++;
|
|
640
|
+
continue;
|
|
641
|
+
}
|
|
616
642
|
if (!record.sent_at) {
|
|
617
643
|
unsent++;
|
|
618
644
|
if (record.created_at && (!oldest || record.created_at < oldest)) oldest = record.created_at;
|
|
@@ -621,7 +647,7 @@ function scanStatusDir(dir) {
|
|
|
621
647
|
unsent++;
|
|
622
648
|
}
|
|
623
649
|
}
|
|
624
|
-
return { total: files.length, unsent, oldest };
|
|
650
|
+
return { total: files.length, unsent, rejected, oldest };
|
|
625
651
|
}
|
|
626
652
|
|
|
627
653
|
export {
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
baseAgentName,
|
|
7
7
|
getEmployee,
|
|
8
8
|
loadEmployeesSync
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-66CGXQUA.js";
|
|
10
10
|
|
|
11
11
|
// src/lib/project-name.ts
|
|
12
12
|
import { execSync } from "child_process";
|
|
@@ -15,6 +15,8 @@ import path from "path";
|
|
|
15
15
|
var _cached = null;
|
|
16
16
|
var _cachedCwd = null;
|
|
17
17
|
function getProjectName(cwd) {
|
|
18
|
+
const override = process.env.EXE_PROJECT_NAME?.trim();
|
|
19
|
+
if (override) return override;
|
|
18
20
|
if (!cwd) {
|
|
19
21
|
try {
|
|
20
22
|
const ctx = getAgentContext();
|
|
@@ -192,7 +192,7 @@ async function quickCheckBackupSourceAfterCopy(reason, backupPath) {
|
|
|
192
192
|
});
|
|
193
193
|
}
|
|
194
194
|
})();
|
|
195
|
-
const { recordDbIntegrityEvent } = await import("./db-integrity-events-
|
|
195
|
+
const { recordDbIntegrityEvent } = await import("./db-integrity-events-GYGANKZV.js");
|
|
196
196
|
const backupName = path.basename(backupPath);
|
|
197
197
|
const markUnverified = (detail) => {
|
|
198
198
|
process.stderr.write(
|
|
@@ -205,7 +205,7 @@ async function quickCheckBackupSourceAfterCopy(reason, backupPath) {
|
|
|
205
205
|
try {
|
|
206
206
|
const { getClient } = await import("./lib/database.js");
|
|
207
207
|
const client = getClient();
|
|
208
|
-
const { canTrustIntegrityVerdict } = await import("./fts-integrity-
|
|
208
|
+
const { canTrustIntegrityVerdict } = await import("./fts-integrity-PLAL6NMG.js");
|
|
209
209
|
if (!await canTrustIntegrityVerdict(client)) {
|
|
210
210
|
return markUnverified("connection is query_only; an FTS5 verdict from it is not trustworthy");
|
|
211
211
|
}
|
|
@@ -313,21 +313,41 @@ async function promoteTmpBackup(tmpBackupPath, backupPath, includeSidecars) {
|
|
|
313
313
|
if (existsSync(tmpSidecar)) await rename(tmpSidecar, backupPath + suffix);
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
|
-
async function
|
|
317
|
-
const client = createClient({ url: `file:${dbPath}`, encryptionKey });
|
|
316
|
+
async function checkpointWalIntoMainDb(client) {
|
|
318
317
|
try {
|
|
318
|
+
await client.execute(`PRAGMA busy_timeout = ${PRE_BACKUP_CHECKPOINT_BUSY_TIMEOUT_MS}`);
|
|
319
|
+
} catch {
|
|
320
|
+
}
|
|
321
|
+
const modes = ["TRUNCATE", "TRUNCATE", "TRUNCATE", "FULL"];
|
|
322
|
+
for (const mode of modes) {
|
|
319
323
|
try {
|
|
320
|
-
await client.execute(`PRAGMA
|
|
324
|
+
const res = await client.execute(`PRAGMA wal_checkpoint(${mode})`);
|
|
325
|
+
const row = res.rows?.[0];
|
|
326
|
+
const busy = Number(row?.busy ?? row?.[0] ?? 0);
|
|
327
|
+
if (busy === 0) return true;
|
|
321
328
|
} catch {
|
|
322
329
|
}
|
|
330
|
+
}
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
async function createEncryptedByteBackup(dbPath, tmpBackupPath, encryptionKey) {
|
|
334
|
+
let drained = false;
|
|
335
|
+
const client = createClient({ url: `file:${dbPath}`, encryptionKey });
|
|
336
|
+
try {
|
|
323
337
|
await client.execute("SELECT 1");
|
|
324
|
-
|
|
325
|
-
await client.execute("PRAGMA wal_checkpoint(TRUNCATE)");
|
|
326
|
-
} catch {
|
|
327
|
-
}
|
|
338
|
+
drained = await checkpointWalIntoMainDb(client);
|
|
328
339
|
} finally {
|
|
329
340
|
client.close();
|
|
330
341
|
}
|
|
342
|
+
let walBytes = 0;
|
|
343
|
+
try {
|
|
344
|
+
walBytes = existsSync(dbPath + "-wal") ? statSync(dbPath + "-wal").size : 0;
|
|
345
|
+
} catch {
|
|
346
|
+
}
|
|
347
|
+
if (drained || walBytes === 0) {
|
|
348
|
+
await copyFile(dbPath, tmpBackupPath);
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
331
351
|
return copyBytePreservingSnapshot(dbPath, tmpBackupPath);
|
|
332
352
|
}
|
|
333
353
|
async function resolveBackupEncryptionKey(dbPath, explicit) {
|
|
@@ -343,6 +363,25 @@ async function resolveBackupEncryptionKey(dbPath, explicit) {
|
|
|
343
363
|
}
|
|
344
364
|
return void 0;
|
|
345
365
|
}
|
|
366
|
+
function shouldQuarantineDirtyWalBackup(input) {
|
|
367
|
+
if (input.reason === "pre-restore") return false;
|
|
368
|
+
return input.walBytes > 0 && !input.manifestPresent;
|
|
369
|
+
}
|
|
370
|
+
async function quarantineDirtyWalBackup(backupPath) {
|
|
371
|
+
const unverifiedPath = `${backupPath}${UNVERIFIED_SUFFIX}`;
|
|
372
|
+
try {
|
|
373
|
+
await rename(backupPath, unverifiedPath);
|
|
374
|
+
} catch {
|
|
375
|
+
return null;
|
|
376
|
+
}
|
|
377
|
+
for (const sfx of ["-wal", "-shm", ".manifest.json"]) {
|
|
378
|
+
try {
|
|
379
|
+
await unlink(backupPath + sfx);
|
|
380
|
+
} catch {
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return unverifiedPath;
|
|
384
|
+
}
|
|
346
385
|
async function createBackup(reason = "manual", opts = {}) {
|
|
347
386
|
return createBackupAsync(reason, opts);
|
|
348
387
|
}
|
|
@@ -376,6 +415,15 @@ async function createBackupAsync(reason = "manual", opts = {}) {
|
|
|
376
415
|
message
|
|
377
416
|
});
|
|
378
417
|
alertMissedBackup(message, skipping);
|
|
418
|
+
try {
|
|
419
|
+
const { recordDbIntegrityEvent } = await import("./db-integrity-events-GYGANKZV.js");
|
|
420
|
+
recordDbIntegrityEvent({
|
|
421
|
+
kind: "backup-skipped-low-disk",
|
|
422
|
+
reason,
|
|
423
|
+
detail: `free=${lowDisk.freeBytes} bytes, required=${lowDisk.requiredBytes} bytes${skipping ? " (skip explicitly authorized)" : ""}`
|
|
424
|
+
});
|
|
425
|
+
} catch {
|
|
426
|
+
}
|
|
379
427
|
if (!skipping) throw new BackupDiskSpaceError(message, { reason, ...lowDisk });
|
|
380
428
|
return null;
|
|
381
429
|
}
|
|
@@ -384,6 +432,7 @@ async function createBackupAsync(reason = "manual", opts = {}) {
|
|
|
384
432
|
const backupPath = path.join(BACKUP_DIR, backupName);
|
|
385
433
|
const tmpBackupPath = `${backupPath}.tmp`;
|
|
386
434
|
void opts.checkpointMode;
|
|
435
|
+
const preserveForRestore = reason === "pre-restore";
|
|
387
436
|
const encryptionKey = await resolveBackupEncryptionKey(dbPath, opts.encryptionKey);
|
|
388
437
|
let bytePreservingSidecars = false;
|
|
389
438
|
try {
|
|
@@ -393,11 +442,11 @@ async function createBackupAsync(reason = "manual", opts = {}) {
|
|
|
393
442
|
await createOnlineBackup(dbPath, tmpBackupPath);
|
|
394
443
|
}
|
|
395
444
|
} catch (err) {
|
|
396
|
-
if (
|
|
445
|
+
if (!preserveForRestore) throw err;
|
|
397
446
|
bytePreservingSidecars = await copyBytePreservingSnapshot(dbPath, tmpBackupPath);
|
|
398
447
|
}
|
|
399
448
|
await promoteTmpBackup(tmpBackupPath, backupPath, bytePreservingSidecars);
|
|
400
|
-
const sourceStatus = await quickCheckBackupSourceAfterCopy(reason, backupPath);
|
|
449
|
+
const sourceStatus = preserveForRestore ? null : await quickCheckBackupSourceAfterCopy(reason, backupPath);
|
|
401
450
|
if (sourceStatus === "failed") return null;
|
|
402
451
|
if (sourceStatus === "repaired") {
|
|
403
452
|
if (opts._retriedAfterFtsRepair) {
|
|
@@ -414,12 +463,14 @@ async function createBackupAsync(reason = "manual", opts = {}) {
|
|
|
414
463
|
}
|
|
415
464
|
}
|
|
416
465
|
}
|
|
466
|
+
let manifestWritten = false;
|
|
417
467
|
try {
|
|
418
|
-
const { manifestWriteEnabled, writeBackupManifest } = await import("./backup-verify-
|
|
468
|
+
const { manifestWriteEnabled, writeBackupManifest, manifestPathFor } = await import("./backup-verify-LWHKGOOV.js");
|
|
419
469
|
if (manifestWriteEnabled()) {
|
|
420
|
-
const manifest = await writeBackupManifest(backupPath, dbName);
|
|
470
|
+
const manifest = await writeBackupManifest(backupPath, dbName, { keyHex: encryptionKey });
|
|
471
|
+
manifestWritten = manifest !== null && existsSync(manifestPathFor(backupPath));
|
|
421
472
|
if (manifest && sourceStatus === "unverified") {
|
|
422
|
-
const { recordDbIntegrityEvent } = await import("./db-integrity-events-
|
|
473
|
+
const { recordDbIntegrityEvent } = await import("./db-integrity-events-GYGANKZV.js");
|
|
423
474
|
recordDbIntegrityEvent({
|
|
424
475
|
kind: "backup-verified",
|
|
425
476
|
reason,
|
|
@@ -427,9 +478,36 @@ async function createBackupAsync(reason = "manual", opts = {}) {
|
|
|
427
478
|
detail: "proven readable by manifest read-back (source pragma unavailable)"
|
|
428
479
|
});
|
|
429
480
|
}
|
|
481
|
+
} else {
|
|
482
|
+
manifestWritten = true;
|
|
430
483
|
}
|
|
431
484
|
} catch {
|
|
432
485
|
}
|
|
486
|
+
{
|
|
487
|
+
let walBytes = 0;
|
|
488
|
+
try {
|
|
489
|
+
walBytes = existsSync(backupPath + "-wal") ? statSync(backupPath + "-wal").size : 0;
|
|
490
|
+
} catch {
|
|
491
|
+
}
|
|
492
|
+
if (shouldQuarantineDirtyWalBackup({ walBytes, manifestPresent: manifestWritten, reason })) {
|
|
493
|
+
const quarantined = await quarantineDirtyWalBackup(backupPath);
|
|
494
|
+
try {
|
|
495
|
+
const { recordDbIntegrityEvent } = await import("./db-integrity-events-GYGANKZV.js");
|
|
496
|
+
recordDbIntegrityEvent({
|
|
497
|
+
kind: "backup-failed",
|
|
498
|
+
reason,
|
|
499
|
+
backup: path.basename(backupPath),
|
|
500
|
+
detail: `dirty-WAL backup could not be manifested (wal=${walBytes} bytes) \u2014 unverifiable image ${quarantined ? "quarantined" : "quarantine-rename FAILED; remove manually"}`
|
|
501
|
+
});
|
|
502
|
+
} catch {
|
|
503
|
+
}
|
|
504
|
+
process.stderr.write(
|
|
505
|
+
`[db-backup] ERROR: backup (${reason}) left a ${walBytes}-byte WAL with no manifest \u2014 unverifiable image. ` + (quarantined ? `Quarantined as ${path.basename(quarantined)}.` : `Quarantine rename FAILED \u2014 remove ${path.basename(backupPath)} manually.`) + ` This file is NOT a valid backup.
|
|
506
|
+
`
|
|
507
|
+
);
|
|
508
|
+
if (reason !== "pre-restore") return null;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
433
511
|
if (!opts.skipRetention) {
|
|
434
512
|
try {
|
|
435
513
|
enforceRetention(reason);
|
|
@@ -582,7 +660,7 @@ function recordMissedBackup(entry) {
|
|
|
582
660
|
function alertMissedBackup(message, skipped) {
|
|
583
661
|
void (async () => {
|
|
584
662
|
try {
|
|
585
|
-
const { pushNotifyAsync } = await import("./push-notifications-
|
|
663
|
+
const { pushNotifyAsync } = await import("./push-notifications-EY6BXZUY.js");
|
|
586
664
|
pushNotifyAsync({
|
|
587
665
|
event: "backup_failed",
|
|
588
666
|
title: skipped ? "Backup SKIPPED \u2014 disk full" : "Backup FAILED \u2014 disk full",
|
|
@@ -847,9 +925,23 @@ function hasRecentBackup(reason, withinMs, deps = REAL_RECENT_BACKUP_DEPS) {
|
|
|
847
925
|
function shouldMakePreRestartBackup(existingBackupMtimesMs, now, windowMs = preRestartDedupWindowMs()) {
|
|
848
926
|
return !existingBackupMtimesMs.some((mtime) => now - mtime <= windowMs);
|
|
849
927
|
}
|
|
928
|
+
function isUnverifiableDirtyWalBackup(backupPath) {
|
|
929
|
+
try {
|
|
930
|
+
const wal = backupPath + "-wal";
|
|
931
|
+
if (!existsSync(wal)) return false;
|
|
932
|
+
if (statSync(wal).size <= 0) return false;
|
|
933
|
+
return !existsSync(backupPath + ".manifest.json");
|
|
934
|
+
} catch {
|
|
935
|
+
return false;
|
|
936
|
+
}
|
|
937
|
+
}
|
|
850
938
|
function getLatestBackup() {
|
|
851
939
|
const backups = listBackups();
|
|
852
|
-
|
|
940
|
+
for (const b of backups) {
|
|
941
|
+
if (isUnverifiableDirtyWalBackup(b.path)) continue;
|
|
942
|
+
return b.path;
|
|
943
|
+
}
|
|
944
|
+
return null;
|
|
853
945
|
}
|
|
854
946
|
async function restoreBackup(backupPath) {
|
|
855
947
|
const dbPath = findActiveDb();
|
|
@@ -857,11 +949,13 @@ async function restoreBackup(backupPath) {
|
|
|
857
949
|
const target = path.join(EXE_AI_DIR, DB_NAMES[0]);
|
|
858
950
|
const source2 = backupPath ?? getLatestBackup();
|
|
859
951
|
if (!source2 || !existsSync(source2)) return null;
|
|
952
|
+
if (isUnverifiableDirtyWalBackup(source2)) return null;
|
|
860
953
|
await copyFile(source2, target);
|
|
861
954
|
return { restored: path.basename(source2), preRestoreBackup: null };
|
|
862
955
|
}
|
|
863
956
|
const source = backupPath ?? getLatestBackup();
|
|
864
957
|
if (!source || !existsSync(source)) return null;
|
|
958
|
+
if (isUnverifiableDirtyWalBackup(source)) return null;
|
|
865
959
|
if (path.resolve(source) === path.resolve(dbPath)) return null;
|
|
866
960
|
await quickCheckBackupSource(source);
|
|
867
961
|
const preRestoreBackup = await createBackup("pre-restore");
|
|
@@ -910,6 +1004,8 @@ export {
|
|
|
910
1004
|
resolveQuickCheckRoute,
|
|
911
1005
|
resolveCheckpointWorkerPath,
|
|
912
1006
|
preBackupCheckpoint,
|
|
1007
|
+
shouldQuarantineDirtyWalBackup,
|
|
1008
|
+
quarantineDirtyWalBackup,
|
|
913
1009
|
createBackup,
|
|
914
1010
|
createBackupAsync,
|
|
915
1011
|
rotateBackups,
|
|
@@ -941,6 +1037,7 @@ export {
|
|
|
941
1037
|
preRestartDedupWindowMs,
|
|
942
1038
|
hasRecentBackup,
|
|
943
1039
|
shouldMakePreRestartBackup,
|
|
1040
|
+
isUnverifiableDirtyWalBackup,
|
|
944
1041
|
getLatestBackup,
|
|
945
1042
|
restoreBackup,
|
|
946
1043
|
getBackupDir
|
|
@@ -11,7 +11,10 @@ async function run(cmd, args, cwd, timeoutMs = REMOTE_TIMEOUT_MS) {
|
|
|
11
11
|
cwd,
|
|
12
12
|
encoding: "utf8",
|
|
13
13
|
timeout: timeoutMs,
|
|
14
|
-
maxBuffer: 16 * 1024 * 1024
|
|
14
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
15
|
+
// GIT_TERMINAL_PROMPT=0: fail fast (or hit timeoutMs) instead of hanging
|
|
16
|
+
// on an interactive credential prompt — this runs in headless contexts.
|
|
17
|
+
env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }
|
|
15
18
|
});
|
|
16
19
|
return stdout;
|
|
17
20
|
}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
supportProductSchema,
|
|
5
5
|
supportTaskIdSchema,
|
|
6
6
|
supportVersionSchema
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-UWX6MMCX.js";
|
|
8
8
|
import {
|
|
9
9
|
assessAttribution,
|
|
10
10
|
assessDisposition,
|
|
@@ -14,17 +14,17 @@ import {
|
|
|
14
14
|
} from "./chunk-4YNA3CM6.js";
|
|
15
15
|
import {
|
|
16
16
|
getActiveAgent
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-5DF4Y6EC.js";
|
|
18
18
|
import {
|
|
19
19
|
SUPPORT_PRODUCTS,
|
|
20
20
|
sanitizeProductFilter,
|
|
21
21
|
sanitizeUpstreamId,
|
|
22
22
|
sanitizedUpstreamBody
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-5QCIWWFA.js";
|
|
24
24
|
import {
|
|
25
25
|
loadLicense,
|
|
26
26
|
readCachedLicenseToken
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-Y2HD2YB7.js";
|
|
28
28
|
|
|
29
29
|
// src/mcp/tools/support-inbox.ts
|
|
30
30
|
import { z as z2 } from "zod";
|
|
@@ -435,7 +435,7 @@ async function commentRequestJson(bugId, init) {
|
|
|
435
435
|
const ownerHeaders = ownerAuthHeaders();
|
|
436
436
|
if (!ownerHeaders.authorization && !ownerHeaders["x-exe-license-token"]) {
|
|
437
437
|
throw new Error(
|
|
438
|
-
"Not authenticated for support comments.
|
|
438
|
+
"Not authenticated for support comments. Set a license key (`exe-os setup`), or store a support-issued token with `exe-os login --token <jwt>`, or configure an AskExe admin token (ASKEXE_SUPPORT_ADMIN_TOKEN)."
|
|
439
439
|
);
|
|
440
440
|
}
|
|
441
441
|
const safeId = encodeURIComponent(sanitizeUpstreamId(bugId));
|
|
@@ -765,6 +765,7 @@ function registerTriageReview(server) {
|
|
|
765
765
|
|
|
766
766
|
export {
|
|
767
767
|
resolveAttribution,
|
|
768
|
+
isVerifiedStatus,
|
|
768
769
|
verificationArtifactInputSchema,
|
|
769
770
|
assertVerdictAttribution,
|
|
770
771
|
resolveVerificationArtifact,
|
|
@@ -79,7 +79,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
79
79
|
title: "Dispatch Ladder \u2014 named subagents first; tmux employees are legacy",
|
|
80
80
|
domain: "workflow",
|
|
81
81
|
priority: "p0",
|
|
82
|
-
content: "Three rungs \u2014 stop at the first that fits. (1) Do it yourself: trivial, in-scope work in main context. (2) Named/native subagents (Claude Code Agent tool + worktree isolation; Codex spawned agents; OpenCode sessions) \u2014 the DEFAULT for delegation AND parallelism: roster-employee work via named identity dispatch, bounded well-specified work, parallel research, isolated worktree fixes, verbose throwaway exploration. Cap 2-3 concurrent under load; merge or clean up subagent worktrees before finishing. MANDATORY: persist subagent results/lessons into the task record + memory BEFORE completing \u2014 subagent output must never die in a context window. (3)
|
|
82
|
+
content: "Three rungs \u2014 stop at the first that fits. (1) Do it yourself: trivial, in-scope work in main context. (2) Named/native subagents (Claude Code Agent tool + worktree isolation; Codex spawned agents; OpenCode sessions) \u2014 the DEFAULT for delegation AND parallelism: roster-employee work via named identity dispatch, bounded well-specified work, parallel research, isolated worktree fixes, verbose throwaway exploration. Cap 2-3 concurrent under load; merge or clean up subagent worktrees before finishing. MANDATORY: persist subagent results/lessons into the task record + memory BEFORE completing \u2014 subagent output must never die in a context window. Tasks created with task(action='create') are durable checklist items by default and never launch compute. (3) task(action='create', execution_mode='durable_tmux') -> tmux employee \u2014 LEGACY, reserved for work that must outlive the orchestrator's session or cross coordinator sessions/projects; gets no new investment. When used, the explicit durable_tmux mode remains the only tmux dispatch path \u2014 no manual spawns, no send_message for actionable work."
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
85
|
title: "Subagent guardrails \u2014 fence scope, isolate Codex, never stash",
|
|
@@ -91,7 +91,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
91
91
|
title: "Right-size the model \u2014 match model cost to task difficulty",
|
|
92
92
|
domain: "workflow",
|
|
93
93
|
priority: "p1",
|
|
94
|
-
content: "Tokens are money \u2014 pick the model per task. Mechanical/bounded work (renames, config edits, boilerplate, well-specified fixes) -> cheaper model and/or lower reasoning effort. Adversarial verification, hard design, security review, debugging unknowns -> strong model; never verify a strong model's work with a weaker one. Set per agent via set_agent_config
|
|
94
|
+
content: "Tokens are money \u2014 pick the model per task. Mechanical/bounded work (renames, config edits, boilerplate, well-specified fixes) -> cheaper model and/or lower reasoning effort. Adversarial verification, hard design, security review, debugging unknowns -> strong model; never verify a strong model's work with a weaker one. Set per agent via set_agent_config; legacy durable tmux dispatch may override spawn_model/spawn_runtime only with execution_mode='durable_tmux'. Audit spend with config(action='agent_spend')."
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
title: "Fetch and scope-check before dispatching fix work",
|
|
@@ -276,7 +276,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
276
276
|
title: "Task lifecycle \u2014 the golden path every agent follows",
|
|
277
277
|
domain: "workflow",
|
|
278
278
|
priority: "p0",
|
|
279
|
-
content: "For rung-3 work (tmux employees \u2014 see the Dispatch Ladder),
|
|
279
|
+
content: "Tasks are durable, session-scoped checklist/notepad records by default; native subagent execution is orchestrated separately in the current context. For rung-3 legacy work (tmux employees \u2014 see the Dispatch Ladder), execution_mode='durable_tmux' is explicit dispatch + delivery. Task lifecycle: open -> in_progress (you start) -> done (update_task when finished) -> needs_review (reviewer nudged) -> closed (COO only via close_task). DB is the reliable delivery \u2014 intercom is just a speedup nudge. If you finish a task, self-chain: check for next task immediately (step 7). Never wait for a nudge. Never say 'standing by.'"
|
|
280
280
|
},
|
|
281
281
|
{
|
|
282
282
|
title: "Review chain \u2014 managers must actively pull completed work, never wait for nudges",
|
|
@@ -360,7 +360,7 @@ var PLATFORM_REFERENCE_PROCEDURES = [
|
|
|
360
360
|
title: "MCP tool reference \u2014 all domains and key actions",
|
|
361
361
|
domain: "tool-use",
|
|
362
362
|
priority: "p1",
|
|
363
|
-
content: "exe-os MCP uses action-based dispatch (19 consolidated tools). Legacy 108-tool surface via EXE_MCP_TOOL_SURFACE=legacy. MEMORY: recall (search, as_of for bi-temporal, kind filter, retrieval_mode: all|decisions_only|procedures_only|operational|recent_high_value|document_aware) | ask_team | store (kind, procedure_for) | commit (high-importance) | search_everything | session_context | get_by_id | consolidate | cardinality | supersede. DECISION: store (domain, decision, rationale) | get (domain or query). TASK: create (title, assigned_to, context; blocked_by, parent_task_id, reviewer, complexity, budget_tokens,
|
|
363
|
+
content: "exe-os MCP uses action-based dispatch (19 consolidated tools). Legacy 108-tool surface via EXE_MCP_TOOL_SURFACE=legacy. MEMORY: recall (search, as_of for bi-temporal, kind filter, retrieval_mode: all|decisions_only|procedures_only|operational|recent_high_value|document_aware) | ask_team | store (kind, procedure_for) | commit (high-importance) | search_everything | session_context | get_by_id | consolidate | cardinality | supersede. DECISION: store (domain, decision, rationale) | get (domain or query). TASK: create (title, assigned_to, context; defaults to checklist with zero execution side effects; blocked_by, parent_task_id, reviewer, complexity, budget_tokens, group_id, work_ref; execution_mode='durable_tmux' is the explicit legacy dispatch opt-in and enables spawn_runtime/spawn_model) | list | get | update (in_progress/done/blocked/cancelled + assertions) | close (COO only) | checkpoint | resume. GRAPH: query_relationships | entity_neighbors | hot_entities | stats | export | merge_entities | similar_trajectories. IDENTITY: get | update. BEHAVIOR: store | list | deactivate. SUPPORT: create_bug (title, description, severity p0-p3, product param for any AskExe product) | create_feature (title, description, use_case, proposed_solution) | list_my_bugs | list_my_features | triage_bug (AskExe-internal, uses triage_notes NOT notes) | health. MESSAGE: send | acknowledge. REMINDER: create | list | complete. SESSION: events | last_response. WIKI: list | get. DOCUMENT: ingest | list | purge | set_importance | rerank. CRM: list_people | get_person | list_tables | describe_table. RAW_DATA: list_sources | query | get. GATEWAY: send_whatsapp | query_conversations | query_company_brain. CONFIG: list_employees | set_agent_config | agent_spend | daemon_health | license_status | cloud_sync (cloud_action: status|sync|reupload) | memory_audit | run_consolidation | restart_telemetry | worker_gate | auto_wake_status | orchestration_phase | company_procedure (store|list|deactivate) | global_procedure | create_trigger | list_triggers | export_orchestration | import_orchestration | closeout | capability_cards (query param for best-agent match). DIAGNOSTICS: healthcheck | doctor | status_brief | check_update | stack_update_check | cloud_status | pending_work_summary | rename_employee | tool_search | drift. DREAMING: run | status | history. MCP_PING: daemon health + license + tool usage + retrieval health. Unsure an MCP path exists? diagnostics(action='tool_search', query='...') finds it before punting to the terminal. cloud_sync(cloud_action='reupload') is destructive \u2014 requires confirm_local_db_source_of_truth='LOCAL DB IS SOURCE OF TRUTH'."
|
|
364
364
|
},
|
|
365
365
|
{
|
|
366
366
|
title: "Cognition features \u2014 dreaming, reflexes, baselines, hot-path summary",
|