@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
|
@@ -63,7 +63,17 @@ async function runBudgetedSweep(items, processItem, options = {}) {
|
|
|
63
63
|
`
|
|
64
64
|
);
|
|
65
65
|
recordTimerPauseMs(rescheduleDelayMs);
|
|
66
|
-
|
|
66
|
+
const pauseTimer = _timerPauseContext.getStore();
|
|
67
|
+
const pauseStartWallMs = Date.now();
|
|
68
|
+
if (pauseTimer) beginTimerPause(pauseTimer, pauseStartWallMs);
|
|
69
|
+
try {
|
|
70
|
+
await sleep(rescheduleDelayMs);
|
|
71
|
+
} finally {
|
|
72
|
+
if (pauseTimer) {
|
|
73
|
+
endTimerPause(pauseTimer);
|
|
74
|
+
recordTimerPauseInterval(pauseTimer, pauseStartWallMs, Date.now());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
67
77
|
}
|
|
68
78
|
}
|
|
69
79
|
return result;
|
|
@@ -86,6 +96,51 @@ function sweepPauseTotalMs(timer) {
|
|
|
86
96
|
if (timer) return _pauseMsByTimer.get(timer) ?? 0;
|
|
87
97
|
return _totalPauseMs;
|
|
88
98
|
}
|
|
99
|
+
var MAX_TRACKED_INTERVALS_PER_TIMER = 32;
|
|
100
|
+
var _pauseIntervalsByTimer = /* @__PURE__ */ new Map();
|
|
101
|
+
var _pausedNowByTimer = /* @__PURE__ */ new Map();
|
|
102
|
+
var _activePauseStartsByTimer = /* @__PURE__ */ new Map();
|
|
103
|
+
function beginTimerPause(timer, startMs) {
|
|
104
|
+
_pausedNowByTimer.set(timer, (_pausedNowByTimer.get(timer) ?? 0) + 1);
|
|
105
|
+
const stack = _activePauseStartsByTimer.get(timer);
|
|
106
|
+
if (stack) stack.push(startMs);
|
|
107
|
+
else _activePauseStartsByTimer.set(timer, [startMs]);
|
|
108
|
+
}
|
|
109
|
+
function endTimerPause(timer) {
|
|
110
|
+
const n = (_pausedNowByTimer.get(timer) ?? 1) - 1;
|
|
111
|
+
if (n <= 0) _pausedNowByTimer.delete(timer);
|
|
112
|
+
else _pausedNowByTimer.set(timer, n);
|
|
113
|
+
const stack = _activePauseStartsByTimer.get(timer);
|
|
114
|
+
if (stack) {
|
|
115
|
+
stack.pop();
|
|
116
|
+
if (stack.length === 0) _activePauseStartsByTimer.delete(timer);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function isTimerPausedNow(timer) {
|
|
120
|
+
return (_pausedNowByTimer.get(timer) ?? 0) > 0;
|
|
121
|
+
}
|
|
122
|
+
function currentPauseStartMs(timer) {
|
|
123
|
+
const stack = _activePauseStartsByTimer.get(timer);
|
|
124
|
+
if (!stack || stack.length === 0) return null;
|
|
125
|
+
return stack[0] ?? null;
|
|
126
|
+
}
|
|
127
|
+
function recordTimerPauseInterval(timer, startMs, endMs) {
|
|
128
|
+
if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < startMs) return;
|
|
129
|
+
let list = _pauseIntervalsByTimer.get(timer);
|
|
130
|
+
if (!list) {
|
|
131
|
+
list = [];
|
|
132
|
+
_pauseIntervalsByTimer.set(timer, list);
|
|
133
|
+
}
|
|
134
|
+
list.push({ startMs, endMs });
|
|
135
|
+
if (list.length > MAX_TRACKED_INTERVALS_PER_TIMER) {
|
|
136
|
+
list.splice(0, list.length - MAX_TRACKED_INTERVALS_PER_TIMER);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function timerPauseIntervalsSince(timer, sinceMs) {
|
|
140
|
+
const list = _pauseIntervalsByTimer.get(timer);
|
|
141
|
+
if (!list) return [];
|
|
142
|
+
return list.filter((iv) => iv.startMs >= sinceMs);
|
|
143
|
+
}
|
|
89
144
|
|
|
90
145
|
export {
|
|
91
146
|
DEFAULT_SWEEP_BUDGET_MS,
|
|
@@ -95,5 +150,8 @@ export {
|
|
|
95
150
|
runBudgetedSweep,
|
|
96
151
|
runWithTimerPauseAccounting,
|
|
97
152
|
recordTimerPauseMs,
|
|
98
|
-
sweepPauseTotalMs
|
|
153
|
+
sweepPauseTotalMs,
|
|
154
|
+
isTimerPausedNow,
|
|
155
|
+
currentPauseStartMs,
|
|
156
|
+
timerPauseIntervalsSince
|
|
99
157
|
};
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ensureDaemonToken,
|
|
3
|
+
readDaemonToken
|
|
4
|
+
} from "./chunk-GPUOUUHA.js";
|
|
1
5
|
import {
|
|
2
6
|
SUPERVISED_ENV
|
|
3
7
|
} from "./chunk-ZG62LIK3.js";
|
|
4
8
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from "./chunk-EKYYMIVT.js";
|
|
9
|
+
sanitizeDaemonKeyCustodyEnv
|
|
10
|
+
} from "./chunk-IMYGYIAI.js";
|
|
8
11
|
import {
|
|
9
12
|
computeDaemonHeapCapMb
|
|
10
13
|
} from "./chunk-NLEW62VC.js";
|
|
11
14
|
import {
|
|
12
15
|
killIfSameProcess,
|
|
13
|
-
processStartedAt
|
|
14
|
-
|
|
16
|
+
processStartedAt,
|
|
17
|
+
sameProcessIdentity
|
|
18
|
+
} from "./chunk-GPJIBLP4.js";
|
|
15
19
|
import {
|
|
16
20
|
KILL_INTENT_LOOKBACK_MS,
|
|
17
21
|
findRecentKillIntent,
|
|
@@ -197,11 +201,15 @@ function isDaemonTooYoung() {
|
|
|
197
201
|
var RESTART_INTENT_WINDOW_MS = 3e4;
|
|
198
202
|
var RESTART_INTENT_REASON_MAX_AGE_MS = 6e4;
|
|
199
203
|
var RESTART_INTENT_MAX_AGE_MS = 5 * 6e4;
|
|
200
|
-
function formatRestartIntentMarker(reason, nowMs = Date.now()) {
|
|
204
|
+
function formatRestartIntentMarker(reason, nowMs = Date.now(), target) {
|
|
201
205
|
const marker = {
|
|
202
206
|
reason,
|
|
203
207
|
nonce: randomUUID(),
|
|
204
|
-
createdAt: new Date(nowMs).toISOString()
|
|
208
|
+
createdAt: new Date(nowMs).toISOString(),
|
|
209
|
+
...target ? {
|
|
210
|
+
targetPid: target.pid,
|
|
211
|
+
...target.startedAt !== void 0 ? { targetStartedAt: target.startedAt } : {}
|
|
212
|
+
} : {}
|
|
205
213
|
};
|
|
206
214
|
return JSON.stringify(marker);
|
|
207
215
|
}
|
|
@@ -227,9 +235,11 @@ function parseRestartIntentMarker(raw, nowMs = Date.now(), maxAgeMs = RESTART_IN
|
|
|
227
235
|
const intent = isRestartIntentTimestampFresh(isNaN(last) ? null : last, nowMs);
|
|
228
236
|
return { intent, reason: intent ? "legacy-timestamp-marker" : null, stale: false };
|
|
229
237
|
}
|
|
230
|
-
function writeRestartIntent(reason) {
|
|
238
|
+
function writeRestartIntent(reason, targetPid = readDaemonPid()) {
|
|
231
239
|
try {
|
|
232
|
-
|
|
240
|
+
const startedAt = targetPid === null ? null : processStartedAt(targetPid);
|
|
241
|
+
const target = targetPid === null ? void 0 : { pid: targetPid, ...startedAt !== null ? { startedAt } : {} };
|
|
242
|
+
writeFileSync(restartMarkerPath(), formatRestartIntentMarker(reason, Date.now(), target));
|
|
233
243
|
} catch {
|
|
234
244
|
}
|
|
235
245
|
}
|
|
@@ -243,15 +253,24 @@ function isRestartIntentTimestampFresh(markerTimestampMs, nowMs = Date.now()) {
|
|
|
243
253
|
if (markerTimestampMs === null || !Number.isFinite(markerTimestampMs)) return false;
|
|
244
254
|
return nowMs - markerTimestampMs < RESTART_INTENT_WINDOW_MS;
|
|
245
255
|
}
|
|
246
|
-
function consumeRestartIntentDetail() {
|
|
256
|
+
function consumeRestartIntentDetail(preserveFor) {
|
|
247
257
|
try {
|
|
248
258
|
if (!existsSync(restartMarkerPath())) return { intent: false, reason: null };
|
|
249
259
|
const raw = readFileSync(restartMarkerPath(), "utf8");
|
|
260
|
+
const parsed = parseRestartIntentMarker(raw);
|
|
261
|
+
if (parsed.intent && preserveFor) {
|
|
262
|
+
try {
|
|
263
|
+
const marker = JSON.parse(raw);
|
|
264
|
+
if (marker.targetPid === preserveFor.pid && (typeof marker.targetStartedAt === "number" ? typeof preserveFor.startedAt === "number" && sameProcessIdentity(marker.targetStartedAt, preserveFor.startedAt) : typeof marker.createdAt === "string" && typeof preserveFor.startedAt === "number" && Date.parse(marker.createdAt) >= preserveFor.startedAt)) {
|
|
265
|
+
return { intent: false, reason: null };
|
|
266
|
+
}
|
|
267
|
+
} catch {
|
|
268
|
+
}
|
|
269
|
+
}
|
|
250
270
|
try {
|
|
251
271
|
unlinkSync(restartMarkerPath());
|
|
252
272
|
} catch {
|
|
253
273
|
}
|
|
254
|
-
const parsed = parseRestartIntentMarker(raw);
|
|
255
274
|
if (parsed.stale) {
|
|
256
275
|
logRestart({
|
|
257
276
|
event: "restart_intent_stale",
|
|
@@ -409,7 +428,7 @@ function requestRestart(reason, opts) {
|
|
|
409
428
|
return { ok: false, skipped: msg };
|
|
410
429
|
}
|
|
411
430
|
try {
|
|
412
|
-
writeRestartIntent(reason);
|
|
431
|
+
writeRestartIntent(reason, pid);
|
|
413
432
|
} catch {
|
|
414
433
|
}
|
|
415
434
|
noteRestartAttempt();
|
|
@@ -531,7 +550,7 @@ async function requestDeployRestart(reason, opts) {
|
|
|
531
550
|
return { ok: false, skipped: msg };
|
|
532
551
|
}
|
|
533
552
|
try {
|
|
534
|
-
writeRestartIntent(deployReason);
|
|
553
|
+
writeRestartIntent(deployReason, pid);
|
|
535
554
|
} catch {
|
|
536
555
|
}
|
|
537
556
|
noteRestartAttempt();
|
|
@@ -737,6 +756,7 @@ function findPackageRoot() {
|
|
|
737
756
|
var HEAP_FLAG_RE = /^(--max-old-space-size=|--max_old_space_size=)/;
|
|
738
757
|
function sanitizeInheritedDaemonEnv(env) {
|
|
739
758
|
delete env.EXE_EMBEDDINGS;
|
|
759
|
+
sanitizeDaemonKeyCustodyEnv(env);
|
|
740
760
|
delete env[SUPERVISED_ENV];
|
|
741
761
|
if (env.NODE_OPTIONS) {
|
|
742
762
|
const cleaned = env.NODE_OPTIONS.split(/\s+/).filter((tok) => tok && !HEAP_FLAG_RE.test(tok)).join(" ");
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
// src/lib/daemon-starvation.ts
|
|
2
|
+
function isHostCpuStarved(load1m, cpuCount, ratio) {
|
|
3
|
+
if (!Number.isFinite(ratio) || ratio <= 0) return false;
|
|
4
|
+
if (!Number.isFinite(load1m) || load1m <= 0) return false;
|
|
5
|
+
const cores = Number.isFinite(cpuCount) && cpuCount > 0 ? cpuCount : 1;
|
|
6
|
+
return load1m > cores * ratio;
|
|
7
|
+
}
|
|
8
|
+
function pruneLoadSamples(samples, keepSinceMs) {
|
|
9
|
+
return samples.filter((sample) => Number.isFinite(sample.ts) && sample.ts >= keepSinceMs);
|
|
10
|
+
}
|
|
11
|
+
function maxLoadOverWindow(samples, windowStartMs, currentLoad1m) {
|
|
12
|
+
const candidates = [currentLoad1m];
|
|
13
|
+
for (const sample of samples) {
|
|
14
|
+
if (sample.ts >= windowStartMs && Number.isFinite(sample.load1m)) {
|
|
15
|
+
candidates.push(sample.load1m);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const finite = candidates.filter((load) => Number.isFinite(load));
|
|
19
|
+
return finite.length > 0 ? Math.max(...finite) : currentLoad1m;
|
|
20
|
+
}
|
|
21
|
+
function updateLoadWindow(samples, nowMs, load1m, wallElapsedMs, keepMs) {
|
|
22
|
+
const blockStartMs = nowMs - wallElapsedMs - 2500;
|
|
23
|
+
const next = pruneLoadSamples(
|
|
24
|
+
[...samples, { ts: nowMs, load1m }],
|
|
25
|
+
Math.min(nowMs - keepMs, blockStartMs)
|
|
26
|
+
);
|
|
27
|
+
return {
|
|
28
|
+
samples: next,
|
|
29
|
+
maxLoad1mOverWindow: maxLoadOverWindow(next, blockStartMs, load1m),
|
|
30
|
+
blockStartMs
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function decideDaemonSelfHeal(s) {
|
|
34
|
+
const alive = s.processAlive ?? true;
|
|
35
|
+
if (!alive) {
|
|
36
|
+
return { restart: true, reason: "process_dead", consecutiveSevereAfter: 0, selfInflictedWindowAfter: [], selfInflictedStreakAfter: 0, selfInflictedSuppressedMsAfter: 0 };
|
|
37
|
+
}
|
|
38
|
+
if (typeof s.rssBytes === "number" && Number.isFinite(s.rssBytes) && typeof s.rssCapBytes === "number" && Number.isFinite(s.rssCapBytes) && s.rssCapBytes > 0 && s.rssBytes > s.rssCapBytes) {
|
|
39
|
+
return { restart: true, reason: "rss_over_cap", consecutiveSevereAfter: 0, selfInflictedWindowAfter: [], selfInflictedStreakAfter: 0, selfInflictedSuppressedMsAfter: 0 };
|
|
40
|
+
}
|
|
41
|
+
const now = typeof s.nowMs === "number" && Number.isFinite(s.nowMs) ? s.nowMs : 0;
|
|
42
|
+
const windowMs = typeof s.selfInflictedRollingWindowMs === "number" && s.selfInflictedRollingWindowMs > 0 ? s.selfInflictedRollingWindowMs : 3e5;
|
|
43
|
+
const prunedWindow = (s.selfInflictedWindow ?? []).filter((e) => now - e.ts < windowMs);
|
|
44
|
+
const sumOf = (w) => w.reduce((a, e) => a + e.lagMs, 0);
|
|
45
|
+
const carry = {
|
|
46
|
+
selfInflictedWindowAfter: prunedWindow,
|
|
47
|
+
selfInflictedStreakAfter: prunedWindow.length,
|
|
48
|
+
selfInflictedSuppressedMsAfter: sumOf(prunedWindow)
|
|
49
|
+
};
|
|
50
|
+
const cleared = { selfInflictedWindowAfter: [], selfInflictedStreakAfter: 0, selfInflictedSuppressedMsAfter: 0 };
|
|
51
|
+
const loadCandidates = [s.load1m, s.maxLoad1mOverWindow].filter(
|
|
52
|
+
(load) => typeof load === "number" && Number.isFinite(load) && load > 0
|
|
53
|
+
);
|
|
54
|
+
const effectiveLoad1m = loadCandidates.length > 0 ? Math.max(...loadCandidates) : s.load1m;
|
|
55
|
+
if (isHostCpuStarved(effectiveLoad1m, s.cpuCount, s.starvationRatio)) {
|
|
56
|
+
return { restart: false, reason: "starved_backoff", consecutiveSevereAfter: 0, ...carry };
|
|
57
|
+
}
|
|
58
|
+
if (s.catchUpActive) {
|
|
59
|
+
return { restart: false, reason: "catchup_backoff", consecutiveSevereAfter: 0, ...carry };
|
|
60
|
+
}
|
|
61
|
+
const selfCpuRatio = Number.isFinite(s.selfCpuBusyRatio) ? s.selfCpuBusyRatio : 0.5;
|
|
62
|
+
if (s.lagMs > s.severeThresholdMs && typeof s.selfCpuBusyFraction === "number" && Number.isFinite(s.selfCpuBusyFraction) && s.selfCpuBusyFraction >= selfCpuRatio) {
|
|
63
|
+
const countLimit = typeof s.selfInflictedLimit === "number" && s.selfInflictedLimit > 0 ? s.selfInflictedLimit : 5;
|
|
64
|
+
const suppressCapMs = typeof s.selfInflictedSuppressCapMs === "number" && s.selfInflictedSuppressCapMs > 0 ? s.selfInflictedSuppressCapMs : 15e4;
|
|
65
|
+
const windowAfter = [...prunedWindow, { ts: now, lagMs: s.lagMs }];
|
|
66
|
+
const sumInWindow = sumOf(windowAfter);
|
|
67
|
+
if (sumInWindow > suppressCapMs || windowAfter.length >= countLimit) {
|
|
68
|
+
return { restart: true, reason: "single_block", consecutiveSevereAfter: 0, ...cleared };
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
restart: false,
|
|
72
|
+
reason: "self_inflicted_backoff",
|
|
73
|
+
consecutiveSevereAfter: 0,
|
|
74
|
+
selfInflictedWindowAfter: windowAfter,
|
|
75
|
+
selfInflictedStreakAfter: windowAfter.length,
|
|
76
|
+
selfInflictedSuppressedMsAfter: sumInWindow
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (s.lagMs > s.singleBlockMs) {
|
|
80
|
+
return { restart: true, reason: "single_block", consecutiveSevereAfter: 0, ...cleared };
|
|
81
|
+
}
|
|
82
|
+
if (s.lagMs > s.severeThresholdMs) {
|
|
83
|
+
const next = s.consecutiveSevere + 1;
|
|
84
|
+
if (next >= s.consecutiveLimit) {
|
|
85
|
+
return { restart: true, reason: "consecutive_blocks", consecutiveSevereAfter: next, ...cleared };
|
|
86
|
+
}
|
|
87
|
+
return { restart: false, reason: "counting", consecutiveSevereAfter: next, ...carry };
|
|
88
|
+
}
|
|
89
|
+
return { restart: false, reason: "not_critical", consecutiveSevereAfter: 0, ...carry };
|
|
90
|
+
}
|
|
91
|
+
function decideStarvationDrainGuard(s) {
|
|
92
|
+
const drainWindowMs = typeof s.drainWindowMs === "number" && s.drainWindowMs > 0 ? s.drainWindowMs : 6e5;
|
|
93
|
+
const graceWindowMs = typeof s.graceWindowMs === "number" && s.graceWindowMs > 0 ? s.graceWindowMs : 18e5;
|
|
94
|
+
const minGraceMs = typeof s.minGraceMs === "number" && s.minGraceMs > 0 ? s.minGraceMs : 18e4;
|
|
95
|
+
if (s.lastSuppressedAgoMs === null || !Number.isFinite(s.lastSuppressedAgoMs)) {
|
|
96
|
+
return { deferKill: false, minSigtermGraceMs: 0, reason: "never_starved" };
|
|
97
|
+
}
|
|
98
|
+
const agoMs = Math.max(0, s.lastSuppressedAgoMs);
|
|
99
|
+
if (agoMs < drainWindowMs) {
|
|
100
|
+
return { deferKill: true, minSigtermGraceMs: minGraceMs, reason: "drain_window" };
|
|
101
|
+
}
|
|
102
|
+
if (agoMs < graceWindowMs) {
|
|
103
|
+
return { deferKill: false, minSigtermGraceMs: minGraceMs, reason: "grace_window" };
|
|
104
|
+
}
|
|
105
|
+
return { deferKill: false, minSigtermGraceMs: 0, reason: "no_recent_starvation" };
|
|
106
|
+
}
|
|
107
|
+
function decideOrchestrationTickSkip(s) {
|
|
108
|
+
if (isHostCpuStarved(s.load1m, s.cpuCount, s.starvationRatio)) {
|
|
109
|
+
return { skip: true, reason: "starved_skip" };
|
|
110
|
+
}
|
|
111
|
+
return { skip: false, reason: "run" };
|
|
112
|
+
}
|
|
113
|
+
function decideBootBackoff(s) {
|
|
114
|
+
if (!isHostCpuStarved(s.load1m, s.cpuCount, s.starvationRatio)) {
|
|
115
|
+
return { wait: false, delayMs: 0, reason: "not_starved" };
|
|
116
|
+
}
|
|
117
|
+
const clientsWaiting = s.clientsWaiting === true;
|
|
118
|
+
const baseDelayMs = clientsWaiting ? s.baseDelayMs / 2 : s.baseDelayMs;
|
|
119
|
+
const maxDelayMs = clientsWaiting ? s.maxDelayMs / 2 : s.maxDelayMs;
|
|
120
|
+
const maxAttempts = clientsWaiting ? Math.min(s.maxAttempts, 2) : s.maxAttempts;
|
|
121
|
+
if (s.attempt >= maxAttempts) {
|
|
122
|
+
return { wait: false, delayMs: 0, reason: "max_attempts_proceed" };
|
|
123
|
+
}
|
|
124
|
+
const base = Number.isFinite(baseDelayMs) && baseDelayMs > 0 ? baseDelayMs : 0;
|
|
125
|
+
const cap = Number.isFinite(maxDelayMs) && maxDelayMs > 0 ? maxDelayMs : base;
|
|
126
|
+
const exp = base * Math.pow(2, Math.max(0, s.attempt));
|
|
127
|
+
const delayMs = Math.min(cap, exp);
|
|
128
|
+
return { wait: true, delayMs, reason: "backoff" };
|
|
129
|
+
}
|
|
130
|
+
function computeBootRetryAfterSeconds(nowMs, readyEtaMs, opts = {}) {
|
|
131
|
+
const defaultS = opts.defaultS ?? 3;
|
|
132
|
+
if (readyEtaMs === null) return defaultS;
|
|
133
|
+
const minS = opts.minS ?? 1;
|
|
134
|
+
const maxS = opts.maxS ?? 60;
|
|
135
|
+
return Math.min(maxS, Math.max(minS, Math.ceil((readyEtaMs - nowMs) / 1e3)));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export {
|
|
139
|
+
isHostCpuStarved,
|
|
140
|
+
updateLoadWindow,
|
|
141
|
+
decideDaemonSelfHeal,
|
|
142
|
+
decideStarvationDrainGuard,
|
|
143
|
+
decideOrchestrationTickSkip,
|
|
144
|
+
decideBootBackoff,
|
|
145
|
+
computeBootRetryAfterSeconds
|
|
146
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
recordOrchestrationEventBestEffort
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3SRZNJKD.js";
|
|
4
4
|
import {
|
|
5
5
|
atomicWriteJsonSync
|
|
6
6
|
} from "./chunk-HSGBZSCA.js";
|
|
@@ -262,10 +262,12 @@ function cleanupDeadSessions(liveTmuxOverride) {
|
|
|
262
262
|
for (const s of sessions) {
|
|
263
263
|
const tmuxAlive = liveTmux.has(s.windowName);
|
|
264
264
|
let pidAlive = false;
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
265
|
+
if (s.pid != null && s.pid > 0) {
|
|
266
|
+
try {
|
|
267
|
+
process.kill(s.pid, 0);
|
|
268
|
+
pidAlive = true;
|
|
269
|
+
} catch {
|
|
270
|
+
}
|
|
269
271
|
}
|
|
270
272
|
if (tmuxAlive || pidAlive) {
|
|
271
273
|
alive.push(s);
|
|
@@ -344,6 +346,46 @@ function reapOrphanedCoordinatorSessions(deps) {
|
|
|
344
346
|
}
|
|
345
347
|
return result;
|
|
346
348
|
}
|
|
349
|
+
function reconcileCoordinatorRegistration(callerSession, deps) {
|
|
350
|
+
const raw = String(callerSession ?? "").trim();
|
|
351
|
+
if (!raw) return { reconciled: false, entry: null, reason: "no_caller_session" };
|
|
352
|
+
const coordName = raw.includes("-") ? raw.slice(raw.indexOf("-") + 1) : raw;
|
|
353
|
+
if (!coordName) return { reconciled: false, entry: null, reason: "no_coord_name" };
|
|
354
|
+
const live = (deps.liveTmux ?? []).filter(Boolean);
|
|
355
|
+
if (live.length === 0) return { reconciled: false, entry: null, reason: "no_live_tmux" };
|
|
356
|
+
if (!isCoordinatorRootName(coordName)) return { reconciled: false, entry: null, reason: "not_coordinator_root" };
|
|
357
|
+
if (!new Set(live).has(coordName)) return { reconciled: false, entry: null, reason: "coord_not_live" };
|
|
358
|
+
const existing = readSessionsUncached().find((s) => s.windowName === coordName) ?? null;
|
|
359
|
+
if (existing?.projectDir && existsSync(existing.projectDir)) {
|
|
360
|
+
return { reconciled: false, entry: existing, reason: "already_registered" };
|
|
361
|
+
}
|
|
362
|
+
const cwd = String(deps.paneCwdOf(coordName) ?? "").trim();
|
|
363
|
+
if (!cwd || !existsSync(cwd)) return { reconciled: false, entry: null, reason: "no_live_cwd" };
|
|
364
|
+
const panePid = deps.panePidOf?.(coordName);
|
|
365
|
+
const pid = panePid != null ? panePid : existing?.pid ?? null;
|
|
366
|
+
const coordinatorAgentId = getCoordinatorNameCached();
|
|
367
|
+
const entry = {
|
|
368
|
+
windowName: coordName,
|
|
369
|
+
// Registry identity is the configured roster identity; only windowName
|
|
370
|
+
// carries the numbered coordinator instance. Consumers match agentId to the
|
|
371
|
+
// authenticated roster identity when recovering an MCP session.
|
|
372
|
+
agentId: coordinatorAgentId,
|
|
373
|
+
projectDir: cwd,
|
|
374
|
+
parentExe: null,
|
|
375
|
+
pid,
|
|
376
|
+
registeredAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
377
|
+
};
|
|
378
|
+
registerSession(entry);
|
|
379
|
+
recordOrchestrationEventBestEffort({
|
|
380
|
+
eventType: "registry.coordinator_reconciled",
|
|
381
|
+
source: "session-registry.reconcileCoordinatorRegistration",
|
|
382
|
+
severity: "warn",
|
|
383
|
+
agentId: coordinatorAgentId,
|
|
384
|
+
tmuxSession: coordName,
|
|
385
|
+
payload: { projectDir: cwd, drifted: Boolean(existing) }
|
|
386
|
+
});
|
|
387
|
+
return { reconciled: true, entry, reason: existing ? "drift_repaired" : "registered_missing" };
|
|
388
|
+
}
|
|
347
389
|
function looksLikeExeOsSession(sessionName) {
|
|
348
390
|
const coordName = getCoordinatorNameCached();
|
|
349
391
|
const escaped = coordName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -373,5 +415,7 @@ export {
|
|
|
373
415
|
checkSessionRegistryConsistency,
|
|
374
416
|
deregisterSession,
|
|
375
417
|
cleanupDeadSessions,
|
|
376
|
-
reapOrphanedCoordinatorSessions
|
|
418
|
+
reapOrphanedCoordinatorSessions,
|
|
419
|
+
reconcileCoordinatorRegistration,
|
|
420
|
+
getCoordinatorNameCached
|
|
377
421
|
};
|
|
@@ -11,6 +11,9 @@ function daemonReadyPath() {
|
|
|
11
11
|
function eventLoopBlockedMarkerPath() {
|
|
12
12
|
return join(exeDir(), "session-cache", "event-loop-blocked.marker");
|
|
13
13
|
}
|
|
14
|
+
function starvationSuppressedMarkerPath() {
|
|
15
|
+
return join(exeDir(), "session-cache", "starvation-suppressed.marker");
|
|
16
|
+
}
|
|
14
17
|
function eventLoopHeartbeatPath() {
|
|
15
18
|
return join(exeDir(), "session-cache", "event-loop-heartbeat");
|
|
16
19
|
}
|
|
@@ -63,6 +66,7 @@ export {
|
|
|
63
66
|
exeDir,
|
|
64
67
|
daemonReadyPath,
|
|
65
68
|
eventLoopBlockedMarkerPath,
|
|
69
|
+
starvationSuppressedMarkerPath,
|
|
66
70
|
eventLoopHeartbeatPath,
|
|
67
71
|
setDaemonReadyGeneration,
|
|
68
72
|
writeDaemonReady,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getGlobalProceduresBlock
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EPHSISMT.js";
|
|
4
4
|
|
|
5
5
|
// src/lib/employee-templates.ts
|
|
6
6
|
var BASE_OPERATING_PROCEDURES = `
|
|
@@ -111,12 +111,13 @@ DELEGATING WORK \u2014 the dispatch ladder (stop at the lowest rung that fits):
|
|
|
111
111
|
throwaway exploration. Cap 2-3 concurrent. MANDATORY: persist the subagent's
|
|
112
112
|
results and lessons into the task record + memory BEFORE you finish \u2014 subagent
|
|
113
113
|
output must never die in a context window.
|
|
114
|
-
3. create_task -> tmux employee \u2014 LEGACY. Reserved
|
|
115
|
-
session or cross sessions/projects.
|
|
114
|
+
3. create_task(execution_mode='durable_tmux') -> tmux employee \u2014 LEGACY. Reserved
|
|
115
|
+
for work that must outlive your session or cross sessions/projects. Omitted or
|
|
116
|
+
default mode is checklist-only and never launches compute.
|
|
116
117
|
|
|
117
118
|
WHEN RUNG 3 IS RIGHT (mandatory \u2014 never bypass):
|
|
118
|
-
|
|
119
|
-
the
|
|
119
|
+
Explicit execution_mode='durable_tmux' is the ONLY tmux dispatch path. It
|
|
120
|
+
auto-spawns the session; default checklist creation has no execution side effects.
|
|
120
121
|
NEVER manually launch sessions with tmux send-keys or claude -p \u2014 this is still
|
|
121
122
|
absolutely forbidden. Choosing rung 2 does not license manual spawns.
|
|
122
123
|
NEVER spawn sessions without a task assigned \u2014 idle sessions waste resources.
|
|
@@ -124,7 +125,7 @@ NEVER refuse a dispatched task claiming "not in scope" \u2014 if it's assigned t
|
|
|
124
125
|
|
|
125
126
|
CREATING TASKS FOR OTHER EMPLOYEES:
|
|
126
127
|
When rung 3 applies and you assign work to another employee (e.g., CTO to an engineer):
|
|
127
|
-
- ALWAYS use create_task
|
|
128
|
+
- ALWAYS use create_task with execution_mode='durable_tmux'. NEVER write .md files directly to exe/{name}/.
|
|
128
129
|
- Direct .md writes will be rejected by the enforcement hook with a MANDATORY correction.
|
|
129
130
|
- create_task creates both the .md file AND the DB row atomically.
|
|
130
131
|
- Include: title, assignedTo, priority, context, projectName.
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-FUKVP54K.js";
|
|
3
3
|
import {
|
|
4
4
|
isGarbageEntity
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-GUMRIUI5.js";
|
|
5
|
+
} from "./chunk-YYC553FO.js";
|
|
7
6
|
import "./chunk-Z6BZQHP5.js";
|
|
7
|
+
import "./chunk-GUMRIUI5.js";
|
|
8
8
|
import "./chunk-VGMACSEV.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-IK4344V5.js";
|
|
10
10
|
import "./chunk-CHCA3ZM2.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-RSABKW6B.js";
|
|
12
12
|
import {
|
|
13
13
|
fastDbInit
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-IZA7XW2Q.js";
|
|
15
15
|
import "./chunk-5MOYSU5A.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-5QCIWWFA.js";
|
|
17
17
|
import "./chunk-76CJBM36.js";
|
|
18
18
|
import {
|
|
19
19
|
getClient
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-66CGXQUA.js";
|
|
21
21
|
import "./chunk-BBMTVAE3.js";
|
|
22
22
|
import "./chunk-TKDITWDN.js";
|
|
23
23
|
import "./chunk-5YEUPUV4.js";
|
|
24
|
-
import "./chunk-
|
|
24
|
+
import "./chunk-AHNVFBVB.js";
|
|
25
25
|
import "./chunk-YYB5PMTK.js";
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-L5CGXEZC.js";
|
|
27
|
+
import "./chunk-CL4J4757.js";
|
|
28
|
+
import "./chunk-ZQEJ4IX2.js";
|
|
29
29
|
import "./chunk-FXU7JOXK.js";
|
|
30
30
|
import "./chunk-ZIG7VPJV.js";
|
|
31
31
|
import "./chunk-HSGBZSCA.js";
|
|
@@ -23,7 +23,7 @@ async function runCloudSyncCli() {
|
|
|
23
23
|
const { getMasterKey } = await import("./lib/keychain.js");
|
|
24
24
|
const { initSyncCrypto } = await import("./lib/crypto.js");
|
|
25
25
|
const { assertCloudSyncReachable, withTimeout } = await import("./bin/exe-cloud.js");
|
|
26
|
-
const { runCloudSyncShutdown } = await import("./cloud-sync-shutdown-
|
|
26
|
+
const { runCloudSyncShutdown } = await import("./cloud-sync-shutdown-DAEPCFVK.js");
|
|
27
27
|
const { disconnectClient } = await import("./lib/exe-daemon-client.js");
|
|
28
28
|
let shuttingDown = false;
|
|
29
29
|
const handleShutdown = (signal) => {
|
|
@@ -48,7 +48,7 @@ async function runCloudSyncCli() {
|
|
|
48
48
|
const { initPostgresOnlyDatabase } = await import("./lib/database.js");
|
|
49
49
|
await initPostgresOnlyDatabase();
|
|
50
50
|
} else {
|
|
51
|
-
const { initCloudSyncDatabase } = await import("./cloud-sync-db-init-
|
|
51
|
+
const { initCloudSyncDatabase } = await import("./cloud-sync-db-init-HAGVF32Y.js");
|
|
52
52
|
await initCloudSyncDatabase();
|
|
53
53
|
}
|
|
54
54
|
const masterKey = await getMasterKey();
|
|
@@ -71,12 +71,21 @@ async function runCloudSyncCli() {
|
|
|
71
71
|
console.log(` Documents: ${result.documents.pushed} total (\u2193 ${result.documents.pulled} pulled)`);
|
|
72
72
|
console.log(` GraphRAG: ${result.graphrag.pushed} entities`);
|
|
73
73
|
const elapsedDisplay = result.elapsedMs != null ? `${(result.elapsedMs / 1e3).toFixed(1)}s` : "n/a";
|
|
74
|
+
const memoryPushFailed = (result.memoryPushErrors ?? 0) > 0;
|
|
75
|
+
const pendingMemories = result.pendingMemories ?? 0;
|
|
74
76
|
if (result.deferred) {
|
|
75
77
|
console.log(
|
|
76
78
|
`
|
|
77
79
|
\x1B[33mSync paused after a bounded memory slice \u2014 memories are still queued.\x1B[0m (${elapsedDisplay})
|
|
78
80
|
Run it again (or let the background sync continue) until it reports complete.`
|
|
79
81
|
);
|
|
82
|
+
} else if (memoryPushFailed) {
|
|
83
|
+
console.log(
|
|
84
|
+
`
|
|
85
|
+
\x1B[33mSync did NOT complete \u2014 ${pendingMemories.toLocaleString()} memor${pendingMemories === 1 ? "y" : "ies"} could not be pushed and remain queued locally. (${elapsedDisplay})
|
|
86
|
+
The memory push failed (network error or version conflict). Run it again until it reports complete.\x1B[0m`
|
|
87
|
+
);
|
|
88
|
+
exitCode = 1;
|
|
80
89
|
} else {
|
|
81
90
|
console.log(`
|
|
82
91
|
\x1B[32mSync complete.\x1B[0m (${elapsedDisplay})`);
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
releaseDbLock
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-66CGXQUA.js";
|
|
4
4
|
import "./chunk-BBMTVAE3.js";
|
|
5
5
|
import "./chunk-TKDITWDN.js";
|
|
6
6
|
import "./chunk-5YEUPUV4.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-AHNVFBVB.js";
|
|
8
8
|
import "./chunk-YYB5PMTK.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-L5CGXEZC.js";
|
|
10
|
+
import "./chunk-CL4J4757.js";
|
|
11
|
+
import "./chunk-ZQEJ4IX2.js";
|
|
12
12
|
import "./chunk-FXU7JOXK.js";
|
|
13
13
|
import "./chunk-ZIG7VPJV.js";
|
|
14
14
|
import "./chunk-HSGBZSCA.js";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-66CGXQUA.js";
|
|
4
4
|
import "./chunk-BBMTVAE3.js";
|
|
5
5
|
import "./chunk-TKDITWDN.js";
|
|
6
6
|
import "./chunk-5YEUPUV4.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-AHNVFBVB.js";
|
|
8
8
|
import "./chunk-YYB5PMTK.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-L5CGXEZC.js";
|
|
10
|
+
import "./chunk-CL4J4757.js";
|
|
11
|
+
import "./chunk-ZQEJ4IX2.js";
|
|
12
12
|
import "./chunk-FXU7JOXK.js";
|
|
13
13
|
import "./chunk-ZIG7VPJV.js";
|
|
14
14
|
import "./chunk-HSGBZSCA.js";
|