@askexenow/exe-os 0.9.384 → 0.9.389
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deploy/compose/.env.askexe-control-plane.example +6 -0
- package/deploy/compose/.env.customer.example +1 -1
- package/deploy/compose/.env.example +1 -1
- package/deploy/compose/docker-compose.yml +16 -0
- package/deploy/compose/generate-env.ts +1 -1
- package/deploy/compose/sso-edge/sso-redirect.conf +18 -3
- package/deploy/stack-manifests/v0.9.json +1160 -1
- package/dist/.dist-verified.json +3 -3
- package/dist/{active-agent-F5V4E4UL.js → active-agent-RZ24KSJN.js} +8 -6
- package/dist/{active-agent-YTBB4ZQM.js → active-agent-YWSWPIEA.js} +8 -6
- package/dist/{agent-defs-generator-7TFISIJQ.js → agent-defs-generator-GY3UBREJ.js} +8 -6
- package/dist/{agent-heartbeat-CQPGJIFF.js → agent-heartbeat-GUVUUQVM.js} +1 -1
- package/dist/{agent-loop-EZ7LDAGD.js → agent-loop-HPNCH3HK.js} +1 -1
- package/dist/{agentic-ontology-XVTUVV7W.js → agentic-ontology-RHYNXEKE.js} +1 -1
- package/dist/{artifact-backup-TF6YWQT2.js → artifact-backup-HGUFSIJH.js} +19 -6
- package/dist/{backfill-metadata-J6MXIDCW.js → backfill-metadata-XLFASEOD.js} +11 -9
- package/dist/{backup-verify-6DVBQMDP.js → backup-verify-TUQEICWA.js} +1 -1
- package/dist/{behavior-injection-XDA7ZCYN.js → behavior-injection-GXO7ERGN.js} +14 -12
- package/dist/{behavior-promotion-4VLQ7LXK.js → behavior-promotion-V63WIZ4N.js} +13 -11
- package/dist/{behaviors-SCCZP7RZ.js → behaviors-RMLDPLOF.js} +18 -11
- package/dist/bin/agentic-ontology-backfill.js +12 -10
- package/dist/bin/agentic-reflection-backfill.js +13 -11
- package/dist/bin/agentic-semantic-label.js +12 -10
- package/dist/bin/backfill-conversations.js +11 -9
- package/dist/bin/backfill-responses.js +11 -9
- package/dist/bin/backfill-vectors.js +13 -11
- package/dist/bin/bulk-sync-postgres.js +20 -18
- package/dist/bin/cc-doctor.js +15 -13
- package/dist/bin/cleanup-stale-review-tasks.js +44 -32
- package/dist/bin/cli.js +109 -30
- package/dist/bin/customer-readiness.js +55 -25
- package/dist/bin/deferred-daemon-restart.js +111 -108
- package/dist/bin/exe-actions.js +7 -1
- package/dist/bin/exe-agent-config.js +8 -6
- package/dist/bin/exe-agent.js +18 -16
- package/dist/bin/exe-assign.js +13 -11
- package/dist/bin/exe-boot.js +49 -47
- package/dist/bin/exe-call.js +9 -7
- package/dist/bin/exe-cicd.js +19 -8
- package/dist/bin/exe-cloud.js +59 -25
- package/dist/bin/exe-config-dump.js +8 -6
- package/dist/bin/exe-dispatch.js +23 -21
- package/dist/bin/exe-doctor.js +11 -8
- package/dist/bin/exe-export-behaviors.js +16 -14
- package/dist/bin/exe-forget.js +14 -12
- package/dist/bin/exe-gateway.js +12 -10
- package/dist/bin/exe-grant.js +6 -6
- package/dist/bin/exe-healthcheck.js +15 -13
- package/dist/bin/exe-heartbeat.js +28 -26
- package/dist/bin/exe-kill.js +28 -26
- package/dist/bin/exe-launch-agent.js +35 -33
- package/dist/bin/exe-mcp.js +9 -7
- package/dist/bin/exe-memory-reads.js +11 -9
- package/dist/bin/exe-new-employee.js +13 -11
- package/dist/bin/exe-os-mcp-proxy.js +9 -7
- package/dist/bin/exe-pending-messages.js +23 -21
- package/dist/bin/exe-pending-notifications.js +22 -20
- package/dist/bin/exe-pending-reviews.js +23 -21
- package/dist/bin/exe-preflight.js +1 -1
- package/dist/bin/exe-rename.js +9 -7
- package/dist/bin/exe-review.js +59 -55
- package/dist/bin/exe-search-quality.js +16 -3
- package/dist/bin/exe-search.js +13 -11
- package/dist/bin/exe-session-cleanup.js +29 -27
- package/dist/bin/exe-settings.js +22 -20
- package/dist/bin/exe-start-codex.js +23 -21
- package/dist/bin/exe-start-opencode.js +21 -19
- package/dist/bin/exe-status.js +24 -22
- package/dist/bin/exe-support.js +3 -3
- package/dist/bin/exe-team.js +8 -6
- package/dist/bin/exe-verify-running-images.js +644 -17
- package/dist/bin/git-sweep.js +24 -22
- package/dist/bin/graph-backfill.js +12 -10
- package/dist/bin/graph-export.js +12 -10
- package/dist/bin/hooks-cli.js +4 -4
- package/dist/bin/import-history.js +16 -14
- package/dist/bin/install.js +113 -110
- package/dist/bin/intercom-check.js +5 -5
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +8 -6
- package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
- package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
- package/dist/bin/pre-build-guard.js +55 -16
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/prune-orphan-chunks.js +154 -28
- package/dist/bin/reconcile-backlog.js +5 -3
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/repair-document-chunks.js +11 -9
- package/dist/bin/scan-tasks.js +23 -21
- package/dist/bin/setup.js +3 -3
- package/dist/bin/shard-migrate.js +12 -10
- package/dist/bin/stack-update.js +622 -43
- package/dist/bin/verify-stack.js +2 -2
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/{boot-generation-Q7LGQ3AO.js → boot-generation-VCQXVYGT.js} +7 -5
- package/dist/{boot-review-sections-G5774FR5.js → boot-review-sections-3QO6Q7MP.js} +21 -19
- package/dist/{branch-hygiene-44WLSOZR.js → branch-hygiene-DDXXI6ZA.js} +59 -21
- package/dist/bug-landed-reconciler-TQVNOUCU.js +353 -0
- package/dist/build-manifest.json +1269 -1194
- package/dist/{capability-cards-I3RHCF4F.js → capability-cards-XPDLT6LU.js} +6 -4
- package/dist/{capacity-monitor-7I7GDONU.js → capacity-monitor-N3AW242L.js} +23 -21
- package/dist/{catchup-brief-3T5PARIR.js → catchup-brief-3PKX7FUP.js} +29 -27
- package/dist/{chunk-C5ISP5FO.js → chunk-2BKJAOO4.js} +11 -1
- package/dist/{chunk-JJTPPAZY.js → chunk-2CUQHG6H.js} +1609 -1356
- package/dist/{chunk-HU3VD4MQ.js → chunk-2Q2GGYBX.js} +1 -1
- package/dist/{chunk-CHIUS5QB.js → chunk-36LMIOVU.js} +9 -9
- package/dist/{chunk-46VSBDUW.js → chunk-3DCBDG4T.js} +2 -2
- package/dist/{chunk-W3KPQE7H.js → chunk-3GL3E4TD.js} +3 -3
- package/dist/{chunk-GL47M7NY.js → chunk-3UD3OF3X.js} +202 -117
- package/dist/{chunk-WNBZJSQT.js → chunk-3VW5ZP2F.js} +1 -1
- package/dist/{chunk-JDDM6C57.js → chunk-3X74IQBU.js} +1 -1
- package/dist/{chunk-NVFNADTX.js → chunk-3ZL4MDQ6.js} +18 -4
- package/dist/{chunk-R5E7WNAC.js → chunk-4ESNDGMB.js} +3 -3
- package/dist/{chunk-CYCIX7AW.js → chunk-4FLLIQRQ.js} +2 -2
- package/dist/{chunk-3RGTLZNO.js → chunk-4GAKF7KR.js} +99 -74
- package/dist/{chunk-RVO5O5SR.js → chunk-4S3A52AV.js} +38 -10
- package/dist/{chunk-7J2ZQ4XN.js → chunk-4VQ3QR6B.js} +29 -28
- package/dist/{chunk-MROSARM5.js → chunk-5BJBTFFQ.js} +7 -1
- package/dist/chunk-5LQZABW5.js +6 -0
- package/dist/chunk-5ONMHTNI.js +236 -0
- package/dist/{chunk-APL7HUE3.js → chunk-5QQJUO3F.js} +200 -31
- package/dist/{chunk-UOPCVFVR.js → chunk-5RK75SWH.js} +205 -278
- package/dist/{chunk-T5FEAQES.js → chunk-5TYJYGS5.js} +1 -1
- package/dist/{chunk-P3QQ52QK.js → chunk-5U6EOTZV.js} +3 -3
- package/dist/{chunk-ALRHGEAJ.js → chunk-637FL62O.js} +1 -1
- package/dist/{chunk-PUBA5B4M.js → chunk-6L4VIYLZ.js} +33 -19
- package/dist/{chunk-VF2KRROX.js → chunk-754P2UXM.js} +1 -1
- package/dist/{chunk-CM7N5MBY.js → chunk-7FZG7WP4.js} +5 -5
- package/dist/{chunk-NYLJQ2M2.js → chunk-7NEBFB3L.js} +4 -4
- package/dist/{chunk-E7C2WNR5.js → chunk-AEIOFFFX.js} +5 -5
- package/dist/{chunk-VOVFUKEB.js → chunk-AIB2EWO2.js} +5 -5
- package/dist/{chunk-EGOEB42T.js → chunk-AP2C4OGS.js} +3 -3
- package/dist/{chunk-MPZ2AVNS.js → chunk-ATNV3BVZ.js} +1 -1
- package/dist/{chunk-F4BBMIPG.js → chunk-B4XJQBQB.js} +2 -2
- package/dist/{chunk-BPVFZ6Q4.js → chunk-B5EGDNG6.js} +2 -2
- package/dist/{chunk-AGC2V7JS.js → chunk-B6CBN6EF.js} +1 -1
- package/dist/{chunk-KTKIFXIP.js → chunk-B7FDRN7G.js} +1 -1
- package/dist/{chunk-C5HUMAA7.js → chunk-B7WVYLAQ.js} +67 -15
- package/dist/chunk-BGVP5RMT.js +185 -0
- package/dist/{chunk-FVLNNNH6.js → chunk-BNI4LIU5.js} +35 -4
- package/dist/{chunk-P4XLIPB7.js → chunk-BU5JRLZT.js} +1 -1
- package/dist/{chunk-PHUHIVD5.js → chunk-C6U7XWOC.js} +34 -5
- package/dist/chunk-C7GHNJPW.js +8 -0
- package/dist/{chunk-4AR5XKCH.js → chunk-CL2MU3OX.js} +1 -1
- package/dist/{chunk-ZPP63JSQ.js → chunk-CL3AB7Z2.js} +1 -1
- package/dist/{chunk-FHIFTSPL.js → chunk-CP7XUSOF.js} +8 -3
- package/dist/{chunk-3OX34OC3.js → chunk-CUDNRHHT.js} +30 -10
- package/dist/chunk-CYUUNIEL.js +21 -0
- package/dist/{chunk-P2UY34XE.js → chunk-D4C57S2H.js} +5 -5
- package/dist/{chunk-XSUALA32.js → chunk-DDYFNBYV.js} +3 -3
- package/dist/{chunk-LSNBTGW4.js → chunk-DPYZW42H.js} +1 -1
- package/dist/{chunk-FMIYFHLE.js → chunk-E2PRXEZK.js} +9 -3
- package/dist/{chunk-L63V25HS.js → chunk-E54SPUYJ.js} +3 -3
- package/dist/{chunk-DMUOTCDN.js → chunk-E5CKRHIZ.js} +1 -1
- package/dist/{chunk-BV2IET6B.js → chunk-EVMOKRBC.js} +15 -2
- package/dist/{chunk-YLFCH3VA.js → chunk-FDWI3T6I.js} +133 -31
- package/dist/{chunk-PWC3C5ME.js → chunk-FNJTCJGY.js} +4 -4
- package/dist/{chunk-TNS63ATU.js → chunk-FWRPDSO3.js} +350 -50
- package/dist/{chunk-JA3Y5TV6.js → chunk-GDLB6BPM.js} +141 -74
- package/dist/{chunk-IGJMS7C5.js → chunk-GOVGG7HU.js} +2 -2
- package/dist/{chunk-MB47DRF5.js → chunk-GP7CTIUK.js} +2 -2
- package/dist/{chunk-L5EPGGDP.js → chunk-GWAN2BDB.js} +4 -4
- package/dist/{chunk-YRQ26MNP.js → chunk-H3YF7X4J.js} +12 -5
- package/dist/{chunk-VLBHZ6TF.js → chunk-H6PLIFUE.js} +2 -2
- package/dist/{chunk-GSLFH4AI.js → chunk-HRNM3N4Y.js} +6 -15
- package/dist/chunk-IG2ISRTF.js +48 -0
- package/dist/{chunk-MWEIBVBS.js → chunk-IJCWBYA5.js} +14 -1
- package/dist/{chunk-NKEFYE4R.js → chunk-IPTUKX3N.js} +1 -1
- package/dist/{chunk-RB3J2WYQ.js → chunk-IVE7H6KA.js} +1 -1
- package/dist/{chunk-HA63SH5W.js → chunk-IWY2OGQG.js} +1 -1
- package/dist/{chunk-BQEZPRUC.js → chunk-IZWMWJZT.js} +64 -46
- package/dist/{chunk-AHESD3KW.js → chunk-J4UVI652.js} +1 -1
- package/dist/{chunk-PLII76NJ.js → chunk-JBUCA4OX.js} +33 -6
- package/dist/{chunk-2PZTMSMG.js → chunk-JOF4HQDF.js} +5 -5
- package/dist/{chunk-OBBO6EJR.js → chunk-JQN3QGSF.js} +1 -1
- package/dist/{chunk-P4PIZOL2.js → chunk-JWYIH5DR.js} +3 -3
- package/dist/{chunk-3XY57PKT.js → chunk-KZLKE7I3.js} +210 -48
- package/dist/{chunk-DYVLEMKS.js → chunk-L3GXMYBK.js} +1 -1
- package/dist/{chunk-72V3S44T.js → chunk-LUA4SLJY.js} +46 -19
- package/dist/{chunk-ZT4LFTUJ.js → chunk-LW3JCBXP.js} +20 -3
- package/dist/{chunk-YLB365YX.js → chunk-M5XHN4OM.js} +3 -3
- package/dist/{chunk-VHHX4UCP.js → chunk-MDTWARSF.js} +22 -93
- package/dist/{chunk-JFJP6ATJ.js → chunk-MWKXQSF6.js} +3 -2
- package/dist/{chunk-VJEJ7JNB.js → chunk-N32DVIKY.js} +1 -1
- package/dist/{chunk-MUCNYSJP.js → chunk-NRLJOV7M.js} +32 -4
- package/dist/{chunk-PL4CFSQ7.js → chunk-NSXJOSH7.js} +1 -1
- package/dist/{chunk-NF5FOSLD.js → chunk-NVTG66CK.js} +1 -1
- package/dist/chunk-O45GBJEH.js +1500 -0
- package/dist/{chunk-4AAMFWJT.js → chunk-OHZSTZXN.js} +4 -2
- package/dist/chunk-OSIS7ZQW.js +344 -0
- package/dist/{chunk-E3ZM32LF.js → chunk-P22VFGFK.js} +14 -5
- package/dist/{chunk-KILR4FBR.js → chunk-PAFLR7WD.js} +3 -3
- package/dist/{chunk-R3CZWFFC.js → chunk-PEYQ6MWO.js} +15 -3
- package/dist/{chunk-RDWIKDMY.js → chunk-PZR54BEI.js} +8 -20
- package/dist/{chunk-2FKU4ZEO.js → chunk-QDBKMEYY.js} +9 -9
- package/dist/{chunk-7UHZBVP3.js → chunk-QDVLVLXP.js} +97 -31
- package/dist/{chunk-PRDDPQLC.js → chunk-QLXEQRHD.js} +5 -5
- package/dist/{chunk-MUAWCFW6.js → chunk-QNPDXV5V.js} +5 -2
- package/dist/{chunk-LR5O2XWZ.js → chunk-QUZYLDNJ.js} +5 -5
- package/dist/chunk-RBQUXHYK.js +48 -0
- package/dist/{chunk-3SUPEE6H.js → chunk-RDMBSHGG.js} +3 -3
- package/dist/{chunk-I5XIW2BP.js → chunk-RGUM474V.js} +7 -7
- package/dist/{chunk-OAFENIHN.js → chunk-RJ67XAJU.js} +76 -28
- package/dist/{chunk-LFUBEHFW.js → chunk-RT57D7C4.js} +39 -1
- package/dist/{chunk-MKM6D7JM.js → chunk-RWG7DLOG.js} +42 -5
- package/dist/{chunk-P3UX5EH4.js → chunk-RWKAHHIX.js} +3 -3
- package/dist/{chunk-XEBKIWI7.js → chunk-RYNT3HB7.js} +12 -12
- package/dist/{chunk-EUGEFBGV.js → chunk-S2V272KJ.js} +3 -3
- package/dist/{chunk-W6BZ4UGA.js → chunk-SGYEM2PD.js} +1 -1
- package/dist/{chunk-VROK4X2L.js → chunk-SJP57MQM.js} +1 -1
- package/dist/{chunk-5MVKTNZP.js → chunk-SL4JWAMQ.js} +54 -4
- package/dist/{chunk-MOANZQXF.js → chunk-SLMKLEU6.js} +1 -1
- package/dist/{chunk-RZN2LEAK.js → chunk-SQA7XCYI.js} +3 -3
- package/dist/{chunk-4YNA3CM6.js → chunk-SSFS4NCH.js} +262 -56
- package/dist/{chunk-6FIC57PH.js → chunk-T4P2G3PO.js} +1 -1
- package/dist/{chunk-5U2IJBFV.js → chunk-TA3B4N24.js} +1 -1
- package/dist/{chunk-ZOTTYCP5.js → chunk-TEWWBVQP.js} +40 -4
- package/dist/{chunk-SDYWZRPN.js → chunk-TLSFGXXE.js} +1 -1
- package/dist/{chunk-L3VUW5M4.js → chunk-TQS2YHLB.js} +1 -1
- package/dist/{chunk-KXYKSLW4.js → chunk-TU4M757W.js} +399 -116
- package/dist/{chunk-MC4IM2CC.js → chunk-TYD4F4XU.js} +6 -6
- package/dist/{chunk-TKS5GMYA.js → chunk-U44Y7RC7.js} +2 -0
- package/dist/{chunk-B7AMNZTC.js → chunk-UKBPEEEQ.js} +2 -2
- package/dist/{chunk-ZBPZDADW.js → chunk-UWVXQEQQ.js} +467 -78
- package/dist/{chunk-P2VVMGMI.js → chunk-V4WH3FV7.js} +35 -16
- package/dist/{worktree-ownership-guard-O6JQF2CL.js → chunk-V6F4I2XY.js} +13 -14
- package/dist/{chunk-JFTUAV4J.js → chunk-VBKUESIW.js} +1 -1
- package/dist/{chunk-AZSTIAVL.js → chunk-VBPYYJPC.js} +1 -1
- package/dist/{chunk-LKTN22L6.js → chunk-VIP4LKLO.js} +57 -24
- package/dist/{chunk-L5CGXEZC.js → chunk-WAAGVFFN.js} +63 -71
- package/dist/{chunk-D3LXVAIQ.js → chunk-WC7AE3PT.js} +244 -103
- package/dist/{chunk-EOTZSAQL.js → chunk-WUCUDHKR.js} +1 -1
- package/dist/{chunk-VF3BZOZK.js → chunk-X7HZHKY4.js} +50 -3
- package/dist/{chunk-LFBLQE2P.js → chunk-XCAKYVKI.js} +1 -1
- package/dist/{chunk-UXN4BICC.js → chunk-XMX5J52Z.js} +1 -1
- package/dist/{chunk-6YDY6ZTD.js → chunk-XTCXGWTV.js} +9 -4
- package/dist/{chunk-XUZK23V7.js → chunk-XW2FW6LS.js} +2 -2
- package/dist/{chunk-CH7BUBP3.js → chunk-XWVHUDEK.js} +5 -4
- package/dist/{chunk-S26CV7BE.js → chunk-YA5LK6KB.js} +45 -8
- package/dist/{chunk-ELCRJGCH.js → chunk-YMRQIENV.js} +2 -2
- package/dist/{chunk-QNZ4562V.js → chunk-Z3LXWCB7.js} +1 -1
- package/dist/{chunk-EYMFVITZ.js → chunk-Z7I6NQMA.js} +2 -2
- package/dist/{chunk-6BJCDWSM.js → chunk-ZB4FS2EG.js} +1 -1
- package/dist/{chunk-ZAEUEDTN.js → chunk-ZD6FZ3WL.js} +1 -1
- package/dist/{chunk-FEU6QEEL.js → chunk-ZM6EZAVY.js} +1 -0
- package/dist/{chunk-2KY7WZZF.js → chunk-ZPA4R2UI.js} +1 -1
- package/dist/chunk-ZPPPHVSU.js +285 -0
- package/dist/{chunk-ELEGH4DX.js → chunk-ZUGQPYUY.js} +51 -4
- package/dist/{chunk-UX2EO653.js → chunk-ZZWFZ46U.js} +66 -8
- package/dist/{cleanup-graph-garbage-VQAJ2RBT.js → cleanup-graph-garbage-HFUD5ZQT.js} +12 -10
- package/dist/{cloud-sync-command-J7NEFUY7.js → cloud-sync-command-3JHJJKPN.js} +25 -3
- package/dist/{cloud-sync-db-init-KWEMNMGA.js → cloud-sync-db-init-2LHIQOSF.js} +1 -1
- package/dist/{cloud-sync-shutdown-P63AUTUI.js → cloud-sync-shutdown-ZXAXA3Z7.js} +6 -4
- package/dist/{cloud-sync-state-QF3TMMJ4.js → cloud-sync-state-VSQFGPP6.js} +1 -1
- package/dist/{co-activation-7IHRPBZN.js → co-activation-NX4EH4AP.js} +6 -4
- package/dist/{co-occurrence-R5AG4OAU.js → co-occurrence-5LBYCW3U.js} +10 -8
- package/dist/{consent-passphrase-5ZBDJ5G7.js → consent-passphrase-65W3DJIJ.js} +2 -2
- package/dist/{content-extractor-ZLXC6GNR.js → content-extractor-OGXETBOX.js} +2 -2
- package/dist/{conversation-entity-extractor-7FRKLLBD.js → conversation-entity-extractor-FQCOAH4F.js} +5 -4
- package/dist/conversations-retention-XTBFJBUM.js +166 -0
- package/dist/{crdt-sync-IFRZOEIS.js → crdt-sync-7TDUBTLH.js} +4 -4
- package/dist/{crm-webhook-L2S63ASV.js → crm-webhook-776JTY55.js} +2 -2
- package/dist/{cto-delegation-gate-3WU7OHX7.js → cto-delegation-gate-ZNUWVYCN.js} +25 -23
- package/dist/{daemon-orchestration-3VQYKLOR.js → daemon-orchestration-76BOFDEP.js} +30 -24
- package/dist/{doc-graph-extractor-YIR5E7OF.js → doc-graph-extractor-F724KZJX.js} +10 -8
- package/dist/{documents-QEHPTYIY.js → documents-Q24V4GRD.js} +13 -11
- package/dist/{dreaming-LNFE7DTN.js → dreaming-IY6NQTSP.js} +27 -25
- package/dist/{employee-boot-brief-ZTXDYNWM.js → employee-boot-brief-CCTXO5DQ.js} +35 -29
- package/dist/{entity-boost-R5N6JWXD.js → entity-boost-XGOB7HDM.js} +1 -1
- package/dist/{exe-drift-WYSJVZFO.js → exe-drift-NEPXLNGP.js} +7 -5
- package/dist/{exe-export-GOLNAEAV.js → exe-export-ZHJQFKR2.js} +14 -12
- package/dist/{exe-import-U4BSI6OH.js → exe-import-7SVNI4FW.js} +14 -12
- package/dist/{exe-key-V42G3NGO.js → exe-key-QJKU56WZ.js} +119 -108
- package/dist/{exe-org-U4GLQ6OP.js → exe-org-SJXHLV6K.js} +76 -51
- package/dist/{exe-snapshot-U7ONBYNY.js → exe-snapshot-EFWPXTXE.js} +45 -36
- package/dist/{fast-db-init-W3NGKAEU.js → fast-db-init-BQZOQNT3.js} +1 -1
- package/dist/{founder-context-ZSIBRVDM.js → founder-context-KG2ZAOXY.js} +2 -2
- package/dist/{founder-monitor-envelope-L3IWZLFY.js → founder-monitor-envelope-NYB5LLU4.js} +4 -4
- package/dist/gateway/index.js +20 -18
- package/dist/{gateway-client-DJFCVIPT.js → gateway-client-ODMUXUL3.js} +1 -1
- package/dist/{git-staleness-OF24QXFZ.js → git-staleness-OPGEAJA7.js} +6 -4
- package/dist/{global-procedures-WSIOWO43.js → global-procedures-3KXY4LL6.js} +8 -6
- package/dist/{graph-auto-extract-IEVVN3L3.js → graph-auto-extract-I7H2F5NJ.js} +10 -8
- package/dist/{graph-query-JDZWAVCU.js → graph-query-E7JBSNY5.js} +1 -1
- package/dist/{graph-rag-BKAD2XQA.js → graph-rag-H24CMFP2.js} +5 -4
- package/dist/{hook-integrity-TPWDGX2M.js → hook-integrity-PGQ3OX4S.js} +1 -1
- package/dist/{hook-prefetch-FD6VGJJA.js → hook-prefetch-7AZJER6Z.js} +23 -21
- package/dist/hook-registration-liveness-NGQRFKAA.js +11 -0
- package/dist/hooks/bug-report-worker.js +26 -24
- package/dist/hooks/codex-stop-task-finalizer.js +28 -26
- package/dist/hooks/commit-complete.js +26 -24
- package/dist/hooks/error-recall.js +16 -14
- package/dist/hooks/exe-heartbeat-hook.js +9 -7
- package/dist/hooks/ingest-worker.js +12 -10
- package/dist/hooks/ingest.js +22 -17
- package/dist/hooks/instructions-loaded.js +11 -9
- package/dist/hooks/manifest.json +20 -20
- package/dist/hooks/notification.js +10 -8
- package/dist/hooks/post-compact.js +9 -7
- package/dist/hooks/post-tool-combined.js +14 -14
- package/dist/hooks/pre-compact.js +26 -24
- package/dist/hooks/pre-tool-use.js +2 -2
- package/dist/hooks/prompt-submit.js +47 -41
- package/dist/hooks/session-end.js +38 -42
- package/dist/hooks/session-start.js +26 -18
- package/dist/hooks/stop.js +29 -27
- package/dist/hooks/subagent-stop.js +29 -27
- package/dist/hooks/summary-worker.js +32 -30
- package/dist/index.js +37 -35
- package/dist/{installer-OTI5SA43.js → installer-2ZS3LHCU.js} +12 -9
- package/dist/{installer-NMOBSEZ2.js → installer-NH3A3HWC.js} +14 -9
- package/dist/{installer-SRJGE4GU.js → installer-UJ73PGRD.js} +21 -9
- package/dist/{intercom-queue-4FFXCBHO.js → intercom-queue-OE25GJF2.js} +21 -19
- package/dist/lib/agent-config.js +2 -2
- package/dist/lib/cloud-sync.js +24 -18
- package/dist/lib/consolidation.js +13 -11
- package/dist/lib/crypto.js +3 -3
- package/dist/lib/database.js +6 -4
- package/dist/lib/db-backup.js +1 -1
- package/dist/lib/db-write-worker-client.js +3 -1
- package/dist/lib/db-write-worker.js +65 -89
- package/dist/lib/db.js +6 -4
- package/dist/lib/delivery-truth.js +5 -1
- package/dist/lib/device-registry.js +1 -1
- package/dist/lib/embedder.js +2 -2
- package/dist/lib/employee-templates.js +9 -7
- package/dist/lib/employees.js +6 -4
- package/dist/lib/exe-daemon.js +425 -314
- package/dist/lib/file-grep.js +15 -21
- package/dist/lib/hybrid-search.js +19 -13
- package/dist/lib/identity-templates.js +1 -1
- package/dist/lib/identity.js +6 -4
- package/dist/lib/keychain.js +1 -1
- package/dist/lib/license.js +22 -6
- package/dist/lib/messaging.js +22 -20
- package/dist/lib/post-tool-memory.js +10 -8
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/lib/reminders.js +7 -5
- package/dist/lib/runtime-table.js +1 -1
- package/dist/lib/schedules.js +12 -10
- package/dist/lib/session-registry.js +8 -6
- package/dist/lib/skill-learning.js +13 -11
- package/dist/lib/status-brief.js +2 -2
- package/dist/lib/store.js +17 -9
- package/dist/lib/task-router.js +7 -5
- package/dist/lib/tasks.js +23 -21
- package/dist/lib/tmux-routing.js +21 -19
- package/dist/lib/tmux-status.js +4 -1
- package/dist/lib/token-spend.js +7 -5
- package/dist/lib/ws-client.js +1 -1
- package/dist/{license-gate-R4JWTWM4.js → license-gate-XQ2KN5I5.js} +3 -3
- package/dist/{license-recheck-3MBJ4IJX.js → license-recheck-IIBKR2V5.js} +1 -1
- package/dist/{license-sync-BVSG3WMW.js → license-sync-76JVI2M5.js} +151 -8
- package/dist/{local-secret-inventory-JWNBHZZ4.js → local-secret-inventory-MJT7NJLY.js} +2 -2
- package/dist/{mailbox-inbox-MTAT4MXX.js → mailbox-inbox-BPZP4GIZ.js} +1 -1
- package/dist/maintenance-worker-54VZTFIK.js +371 -0
- package/dist/mcp/register-tools.js +110 -107
- package/dist/mcp/server.js +113 -110
- package/dist/mcp/tools/complete-reminder.js +8 -6
- package/dist/mcp/tools/create-reminder.js +8 -6
- package/dist/mcp/tools/create-task.js +26 -24
- package/dist/mcp/tools/deactivate-behavior.js +15 -13
- package/dist/mcp/tools/list-reminders.js +8 -6
- package/dist/mcp/tools/list-tasks.js +26 -24
- package/dist/mcp/tools/send-message.js +25 -23
- package/dist/mcp/tools/update-task.js +24 -22
- package/dist/{mcp-child-registry-TIZERM7O.js → mcp-child-registry-5VUG5ATZ.js} +1 -1
- package/dist/{mcp-http-config-VUMSFWFH.js → mcp-http-config-SKXESWHA.js} +9 -7
- package/dist/{mcp-session-identity-DZHWEJRV.js → mcp-session-identity-HYMLJXXA.js} +21 -19
- package/dist/{memory-cards-JVXTMSAT.js → memory-cards-PAZDUQ3B.js} +16 -32
- package/dist/{memory-graph-extractor-PPBJMYFJ.js → memory-graph-extractor-BC6QKBY6.js} +11 -9
- package/dist/{memory-poisoning-defense-K5Q74XQ4.js → memory-poisoning-defense-BRGIHF6J.js} +9 -7
- package/dist/{memory-pressure-watchdog-YMJH5CSA.js → memory-pressure-watchdog-HR6TPOMT.js} +22 -20
- package/dist/{memory-reflection-7BZWIHRE.js → memory-reflection-LO7VFBL3.js} +38 -59
- package/dist/memory-write-repository-J25USX63.js +16 -0
- package/dist/{monitor-grants-Q7X3MYQP.js → monitor-grants-YQTO6NWR.js} +3 -3
- package/dist/{monitor-identity-ZQB4IXEE.js → monitor-identity-POVTG76Y.js} +2 -2
- package/dist/{notification-ledger-XRAXL5OI.js → notification-ledger-KLD6GZTG.js} +22 -20
- package/dist/{notifications-JE3PX55X.js → notifications-3R6HNHDR.js} +21 -19
- package/dist/{orchestration-events-JCQ5F5IJ.js → orchestration-events-CHY3GOJD.js} +7 -5
- package/dist/{orchestrator-X65INDTR.js → orchestrator-GAL3HOAD.js} +23 -21
- package/dist/{org-brief-session-3PQ22UIX.js → org-brief-session-LQ2DBYVF.js} +17 -15
- package/dist/{org-consent-policy-VGELJ7K7.js → org-consent-policy-KFUP7QPG.js} +5 -5
- package/dist/{org-join-6TO5ZYUZ.js → org-join-MXZCIQWX.js} +8 -8
- package/dist/{org-key-admin-XHYVRRAZ.js → org-key-admin-4UK6QUT7.js} +9 -9
- package/dist/{org-key-pin-TTTYGTQL.js → org-key-pin-ZOX4OM3O.js} +3 -3
- package/dist/{org-membership-Y7T2BS57.js → org-membership-D5TPN45F.js} +4 -4
- package/dist/{org-partner-config-OP4NEUNF.js → org-partner-config-3FXSYPQA.js} +7 -7
- package/dist/{org-partner-runtime-YNVUNT2R.js → org-partner-runtime-TH3LMPII.js} +20 -16
- package/dist/{org-row-visibility-JBBXNYXD.js → org-row-visibility-Y5R33C5U.js} +1 -1
- package/dist/{pipeline-router-EIBB7QNG.js → pipeline-router-E2JZLDK6.js} +7 -5
- package/dist/{plan-limits-MEWXYLEN.js → plan-limits-NYI6R4IK.js} +9 -7
- package/dist/{platform-procedures-Z7ZGBJWN.js → platform-procedures-RTD5E3BD.js} +5 -3
- package/dist/{pre-tool-use-impl-C6KJY22W.js → pre-tool-use-impl-LT4FRXBP.js} +127 -83
- package/dist/{project-boot-VEYFCCSL.js → project-boot-LIMXQKAF.js} +25 -17
- package/dist/{project-name-UYORSNGE.js → project-name-V62GWALX.js} +7 -5
- package/dist/{projection-worker-WYFDWS57.js → projection-worker-KLE3IZQ2.js} +5 -2
- package/dist/{prospective-memory-E6XBQFJA.js → prospective-memory-HRN7JFT2.js} +6 -4
- package/dist/{push-notifications-M7YU63FY.js → push-notifications-XC6EQEXF.js} +22 -20
- package/dist/{reproject-worktree-memories-B5XMGJSD.js → reproject-worktree-memories-4CAVZSFE.js} +21 -19
- package/dist/{reranker-SRA4BR7N.js → reranker-2RU6IIX2.js} +1 -1
- package/dist/{retrieval-health-P2JPZUPV.js → retrieval-health-4Q5TOV2S.js} +1 -1
- package/dist/{review-polling-KQPN7IQE.js → review-polling-WOWIMBCL.js} +22 -20
- package/dist/runtime/index.js +30 -28
- package/dist/{session-events-6LDDKKY3.js → session-events-OPMS2C5F.js} +22 -20
- package/dist/{session-kill-telemetry-5DSRGWCL.js → session-kill-telemetry-3GWATSIX.js} +22 -20
- package/dist/{session-scope-XG5R3P3D.js → session-scope-TIRGR4MH.js} +21 -19
- package/dist/{setup-wizard-7QFLZIKT.js → setup-wizard-B2JBVGNH.js} +3 -3
- package/dist/{shard-manager-HHHHV2KZ.js → shard-manager-C7LYX6E4.js} +5 -1
- package/dist/{skill-refinement-I5RMAHSC.js → skill-refinement-FWQFYNBI.js} +7 -5
- package/dist/skill-retrieval-PPLFC5RY.js +166 -0
- package/dist/skill-usage-NDB67PU2.js +25 -0
- package/dist/{stack-generate-manifest-AKMZ3AUX.js → stack-generate-manifest-AXI55MEQ.js} +6 -6
- package/dist/{stack-promote-34CE2HHF.js → stack-promote-6N23OGZY.js} +6 -6
- package/dist/stack-release-2CXFYVWM.js +2770 -0
- package/dist/{stack-update-ZQQ5YYPJ.js → stack-update-U53FBVCQ.js} +13 -5
- package/dist/{steward-gate-AQJ6KT2C.js → steward-gate-TUA3QCN7.js} +7 -5
- package/dist/{subagent-brief-injection-3GU7YAWY.js → subagent-brief-injection-N52RWYFZ.js} +34 -32
- package/dist/{subagent-spawn-ledger-52I66CLW.js → subagent-spawn-ledger-OI23OT4I.js} +1 -1
- package/dist/support-bug-actions-XWCJI6S5.js +30 -0
- package/dist/support-inbox-MMVTCXRX.js +77 -0
- package/dist/{support-outbox-KNI3FR3G.js → support-outbox-2TG2UV6J.js} +2 -2
- package/dist/{task-enforcement-CAA6D2MH.js → task-enforcement-JDMBAAOY.js} +22 -20
- package/dist/{task-request-inbox-QBZVU66E.js → task-request-inbox-PKJCYKJV.js} +9 -5
- package/dist/{task-scope-NHXB4ZRN.js → task-scope-32HQEV6W.js} +27 -19
- package/dist/{tasks-crud-JHSWL5NM.js → tasks-crud-CYKUKS3F.js} +21 -19
- package/dist/{tasks-notify-7PBE4U7T.js → tasks-notify-YND5MKWJ.js} +22 -20
- package/dist/{tasks-review-PPPVEE62.js → tasks-review-CG2A5GM3.js} +23 -19
- package/dist/{telemetry-upload-YU2VRNHX.js → telemetry-upload-WLUMEFAB.js} +11 -9
- package/dist/{token-budget-QCMWKG3K.js → token-budget-3YHAY5LL.js} +7 -5
- package/dist/{tool-capability-index-7AWQAJRP.js → tool-capability-index-2ADOWH43.js} +2 -2
- package/dist/{tool-gates-5Q3RSQEG.js → tool-gates-7ENOOYMR.js} +5 -3
- package/dist/{tool-gates-QD26D2NE.js → tool-gates-EKJTLVGN.js} +1 -1
- package/dist/{tool-telemetry-LTOIC64I.js → tool-telemetry-VUP7S6HC.js} +1 -1
- package/dist/tui/App.js +59 -35
- package/dist/{tui-data-NDBXD6U7.js → tui-data-BOQTOW2G.js} +25 -23
- package/dist/{update-support-BMJM4NG7.js → update-support-WT3S3AQ4.js} +21 -21
- package/dist/{whatsapp-QQLDAHUX.js → whatsapp-OZGIF2EM.js} +2 -2
- package/dist/{wiki-acl-W6WDCVCP.js → wiki-acl-LTEQJVDA.js} +1 -1
- package/dist/{work-claims-6DM32MGO.js → work-claims-CMV2GWIW.js} +8 -6
- package/dist/{work-state-heartbeat-HG7D4AWJ.js → work-state-heartbeat-S45TXK4M.js} +1 -1
- package/dist/{worker-gate-FTMW7GBB.js → worker-gate-7Z6NMM3G.js} +1 -1
- package/dist/{workflow-engine-ZWC6CCXE.js → workflow-engine-ZSQDXZQ7.js} +2 -2
- package/dist/{worktree-EMQCPGFE.js → worktree-NMWDVT6N.js} +8 -6
- package/dist/worktree-ownership-guard-ZVIWJAOP.js +35 -0
- package/dist/{worktree-sweep-XVUJZBXV.js → worktree-sweep-Q62ZIT3U.js} +9 -7
- package/package.json +14 -8
- package/release-notes.json +7 -41
- package/src/commands/exe/afk.md +6 -0
- package/src/commands/exe/call.md +6 -0
- package/src/commands/exe/employee-heartbeat.md +6 -0
- package/src/commands/exe/intercom.md +6 -0
- package/src/commands/exe/kill.md +6 -0
- package/src/commands/exe/launch.md +6 -0
- package/src/commands/exe/logs.md +1 -1
- package/src/commands/exe/sessions.md +6 -0
- package/src/commands/exe/setup.md +7 -3
- package/src/commands/exe/status.md +6 -0
- package/src/commands/exe-reference.md +25 -36
- package/src/commands/exe.md +19 -28
- package/stack.release.json +11 -11
- package/dist/chunk-3B6FLNLV.js +0 -30
- package/dist/chunk-FXU7JOXK.js +0 -6
- package/dist/chunk-QFAFKEB5.js +0 -820
- package/dist/conversations-retention-C4BLKFEL.js +0 -54
- package/dist/stack-release-5PGWV5D4.js +0 -1607
- package/dist/support-inbox-NY5TB3FN.js +0 -51
- /package/dist/{chunk-U2D6PJ5T.js → chunk-65G7ZTGE.js} +0 -0
- /package/dist/{chunk-DN3ZR3UE.js → chunk-CP7Z35MJ.js} +0 -0
- /package/dist/{chunk-XDVOGDBC.js → chunk-KBBWALJV.js} +0 -0
- /package/dist/{chunk-JRIH6I7D.js → chunk-LZXYPTY4.js} +0 -0
- /package/dist/{chunk-GIRD7O5X.js → chunk-MCWEW2SG.js} +0 -0
- /package/dist/{chunk-TKAU7IJ2.js → chunk-MQHUJLCA.js} +0 -0
- /package/dist/{chunk-M4XY4JRK.js → chunk-O53LTOXK.js} +0 -0
- /package/dist/{chunk-DZN7SDY2.js → chunk-OSVTH3SG.js} +0 -0
- /package/dist/{chunk-AJK2PVQW.js → chunk-QXXEXGX3.js} +0 -0
- /package/dist/{chunk-AWWDKF22.js → chunk-SFWNTO2F.js} +0 -0
- /package/dist/{chunk-2Q2CD6CD.js → chunk-WC5HF2FN.js} +0 -0
- /package/dist/{core-memory-O6D5UC3T.js → core-memory-MMMW3TF3.js} +0 -0
- /package/dist/{memory-isolation-EBFFC6HF.js → memory-isolation-67ACKQ2M.js} +0 -0
- /package/dist/{oauth-server-ZKBUHDFI.js → oauth-server-OILIKR7D.js} +0 -0
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
// src/lib/platform-procedures.ts
|
|
2
|
+
import { mkdirSync, writeFileSync } from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import os from "os";
|
|
2
5
|
var PLATFORM_PROCEDURES = [
|
|
3
6
|
// --- Foundation: what is exe-os ---
|
|
4
7
|
{
|
|
@@ -11,13 +14,13 @@ var PLATFORM_PROCEDURES = [
|
|
|
11
14
|
title: "Mode 1 \u2014 how exe-os runs inside Claude Code",
|
|
12
15
|
domain: "architecture",
|
|
13
16
|
priority: "p0",
|
|
14
|
-
content: "Mode 1: exe-os runs AS hooks + MCP + skills inside Claude Code, Codex, or OpenCode. The founder picks their default tool at setup. The COO orchestrates employees
|
|
17
|
+
content: "Mode 1: exe-os runs AS hooks + MCP + skills inside Claude Code, Codex, or OpenCode. The founder picks their default tool at setup. The COO orchestrates employees as named subagents dispatched in-session \u2014 the ONLY dispatch path (see the Dispatch Ladder). Each coordinator session is a separate window/project. The founder talks to the COO; the COO orchestrates the team. The tool is the shell, exe-os is the brain."
|
|
15
18
|
},
|
|
16
19
|
{
|
|
17
20
|
title: "Sessions explained \u2014 coordinator session names and projects",
|
|
18
21
|
domain: "architecture",
|
|
19
22
|
priority: "p0",
|
|
20
|
-
content: "Each coordinator session is an isolated project session. One might be exe-os development, another might be exe-wiki.
|
|
23
|
+
content: "Each coordinator session is an isolated project session. One might be exe-os development, another might be exe-wiki. ALL work inside a session runs on named subagents dispatched by that session's coordinator \u2014 there are no separate employee sessions. Sessions share the same memory DB but tasks are scoped to the session that created them. A founder can run multiple projects simultaneously. Sessions never interfere with each other."
|
|
21
24
|
},
|
|
22
25
|
{
|
|
23
26
|
title: "Runtime settings \u2014 COO can view and change tools per agent",
|
|
@@ -42,7 +45,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
42
45
|
title: "Stay in your repo \u2014 never cd into other projects",
|
|
43
46
|
domain: "workflow",
|
|
44
47
|
priority: "p0",
|
|
45
|
-
content: "NEVER cd into another repo or project directory. Your working directory (cwd) is your project boundary. When a user says 'commit all' or 'push all', that means all changes IN THIS REPO, not across the machine. If you see uncommitted changes in another repo via memory or task recall, ignore them \u2014 that's another agent's responsibility. Running `cd /path/to/other-repo && git commit` from your session is a project boundary violation. If cross-repo work is needed,
|
|
48
|
+
content: "NEVER cd into another repo or project directory. Your working directory (cwd) is your project boundary. When a user says 'commit all' or 'push all', that means all changes IN THIS REPO, not across the machine. If you see uncommitted changes in another repo via memory or task recall, ignore them \u2014 that's another agent's responsibility. Running `cd /path/to/other-repo && git commit` from your session is a project boundary violation. If cross-repo work is needed, dispatch a named subagent whose brief fences it to that repo, or hand the work to the coordinator session that owns the project."
|
|
46
49
|
},
|
|
47
50
|
// --- Hierarchy and dispatch ---
|
|
48
51
|
{
|
|
@@ -51,12 +54,6 @@ var PLATFORM_PROCEDURES = [
|
|
|
51
54
|
priority: "p0",
|
|
52
55
|
content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO/GMs. CTO -> engineers. CMO -> content production. GM -> specialists within their project scope. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
|
|
53
56
|
},
|
|
54
|
-
{
|
|
55
|
-
title: "When to hire new employees \u2014 scaling signals for the COO",
|
|
56
|
-
domain: "workflow",
|
|
57
|
-
priority: "p1",
|
|
58
|
-
content: "COO recommends hiring (/exe-new-employee) when: GM needed: separate project needs dedicated coordination, COO spending >30% context on it. Engineer: CTO has 5+ queued tasks, parallelization maxed. Content specialist: CMO backlog exceeds 1 week. Auditor: quality gates being skipped under pressure. General rule: if a role spends >50% time on delegatable work, hire. Templates: coo, cto, cmo, gm, principal-engineer, content-specialist, ai-specialist, staff-code-reviewer. Usage: /exe-new-employee <name> --role <template>."
|
|
59
|
-
},
|
|
60
57
|
{
|
|
61
58
|
title: "Orchestration phase guidance \u2014 recommend, never trap",
|
|
62
59
|
domain: "workflow",
|
|
@@ -76,22 +73,22 @@ var PLATFORM_PROCEDURES = [
|
|
|
76
73
|
content: "When the founder assigns work to a roster employee by name ('give this to X'), the coordinator dispatches a NATIVE SUBAGENT wearing that employee's identity: Agent(subagent_type='<name>') loads the generated identity definition (~/.claude/agents/<name>.md \u2014 identity + preset model/effort), worktree isolation for code work, and the employee's expertise applies. Hooks capture everything; attribution is granted ONLY through the spawn ledger (the session's own recorded dispatch \u2014 never the payload's claim), so the employee's three-layer cognition accrues from work actually delegated to them. Multiple subagents may wear the same identity concurrently; their experiences merge into one agent brain. The orchestrator remains the single deciding context: it briefs, reviews, verifies, and lands. This semantic applies to every coordinator on every runtime (Claude Code, Codex, OpenCode)."
|
|
77
74
|
},
|
|
78
75
|
{
|
|
79
|
-
title: "Dispatch Ladder \u2014
|
|
76
|
+
title: "Dispatch Ladder \u2014 two rungs, and subagents are the only dispatch",
|
|
80
77
|
domain: "workflow",
|
|
81
78
|
priority: "p0",
|
|
82
|
-
content: "
|
|
79
|
+
content: "TWO rungs \u2014 stop at the first that fits. (1) Do it yourself: trivial, in-scope work in main context. (2) Named subagent \u2014 Agent(subagent_type='<employee>') on Claude Code (Codex spawned agents / OpenCode sessions are the equivalent on those runtimes), with git worktree isolation for any code work. This is the ONLY delegation path: roster-employee work, bounded well-specified work, parallel research, isolated 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 checklist row + memory BEFORE completing \u2014 subagent output must never die in a context window. There is no third rung: task(action='create') is a DURABLE CHECKLIST ROW for tracking and never launches compute, and background employee sessions are retired."
|
|
83
80
|
},
|
|
84
81
|
{
|
|
85
82
|
title: "Subagent guardrails \u2014 fence scope, isolate Codex, never stash",
|
|
86
83
|
domain: "workflow",
|
|
87
84
|
priority: "p0",
|
|
88
|
-
content: "When delegating to subagents: (1) FENCE SCOPE \u2014 a subagent with MCP access must be explicitly forbidden from touching other agents' tasks, reviews, or folders; give it only its own brief. (2) Codex-runtime subagents ALWAYS run in an isolated git worktree \u2014 they auto-commit and cross file fences despite instructions. (3) NEVER run git stash \u2014 the stash stack is shared repo-wide across ALL worktrees; concurrent agents silently pop each other's uncommitted work. Use git diff > patch, a scratch commit, or a separate worktree instead. Brief every subagent you dispatch with these rules."
|
|
85
|
+
content: "When delegating to subagents: (1) FENCE SCOPE \u2014 a subagent with MCP access must be explicitly forbidden from touching other agents' tasks, reviews, or folders; give it only its own brief. (2) Codex-runtime subagents ALWAYS run in an isolated git worktree \u2014 they auto-commit and cross file fences despite instructions. (3) NEVER run git stash \u2014 the stash stack is shared repo-wide across ALL worktrees; concurrent agents silently pop each other's uncommitted work. Use git diff > patch, a scratch commit, or a separate worktree instead. (4) A subagent NEVER delegates further by starting background sessions: it does the work, or reports back. (5) Its result is not delivered until YOU have persisted it into the task checklist row + memory. Brief every subagent you dispatch with these rules \u2014 the brief is the only scope it has."
|
|
89
86
|
},
|
|
90
87
|
{
|
|
91
88
|
title: "Right-size the model \u2014 match model cost to task difficulty",
|
|
92
89
|
domain: "workflow",
|
|
93
90
|
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
|
|
91
|
+
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 the per-employee default via set_agent_config (it is baked into the generated agent definition, so Agent(subagent_type='<name>') inherits it); override per dispatch with the Agent tool's own model argument. Audit spend with config(action='agent_spend')."
|
|
95
92
|
},
|
|
96
93
|
{
|
|
97
94
|
title: "Fetch and scope-check before dispatching fix work",
|
|
@@ -104,14 +101,14 @@ var PLATFORM_PROCEDURES = [
|
|
|
104
101
|
title: "Session isolation \u2014 scoping, boundaries, and enforcement",
|
|
105
102
|
domain: "security",
|
|
106
103
|
priority: "p0",
|
|
107
|
-
content: "SCOPING: Managers dispatch only within their own coordinator session.
|
|
104
|
+
content: "SCOPING: Managers dispatch only within their own coordinator session. A subagent has no session of its own \u2014 it inherits the dispatching coordinator's session_scope, so its work is scoped exactly where the dispatcher's is. Cross-session dispatch is system-blocked. Tasks are scoped to the creating session. BOUNDARIES: (1) Never close/update/cancel tasks from another session. (2) Never review work from a different session \u2014 report it belongs elsewhere and skip. (3) Ignore other sessions' items in list_tasks. (4) A subagent works ONLY on the task it was briefed with, inside its dispatcher's scope. Cross-session work is a system violation. ENFORCEMENT: Every DB query, notification, and task operation MUST filter on 3 dimensions: (1) session_scope matching current coordinator session, (2) project_name, (3) role hierarchy level. Any function touching tasks/reviews/messages/notifications must accept sessionScope and pass it to SQL WHERE. Unscoped queries are bugs. Test with 2+ coordinator sessions simultaneously."
|
|
108
105
|
},
|
|
109
106
|
// --- Hard constraints ---
|
|
110
107
|
{
|
|
111
108
|
title: "What you CANNOT do in exe-os \u2014 hard constraints",
|
|
112
109
|
domain: "security",
|
|
113
110
|
priority: "p0",
|
|
114
|
-
content: "NEVER: (1) Access the database directly \u2014 it's SQLCipher encrypted, always fails. Use MCP tools only. (2)
|
|
111
|
+
content: "NEVER: (1) Access the database directly \u2014 it's SQLCipher encrypted, always fails. Use MCP tools only. (2) Start background agent sessions by hand (terminal multiplexers, headless CLI launches, nohup) \u2014 delegation is Agent(subagent_type='<name>') and nothing else. (3) Run git checkout main \u2014 agents work in worktrees. (4) Modify another agent's in-progress task. (5) Push to remote \u2014 the COO reviews and pushes. (6) Skip update_task(done) \u2014 it's the ONLY way your work gets reviewed. (7) Run git init."
|
|
115
112
|
},
|
|
116
113
|
{
|
|
117
114
|
title: "Destructive operations \u2014 mandatory reviewer gate",
|
|
@@ -121,10 +118,10 @@ var PLATFORM_PROCEDURES = [
|
|
|
121
118
|
},
|
|
122
119
|
// --- Support ---
|
|
123
120
|
{
|
|
124
|
-
title: "
|
|
121
|
+
title: "Bug lifecycle \u2014 file with evidence, triage once as STATE",
|
|
125
122
|
domain: "support",
|
|
126
123
|
priority: "p0",
|
|
127
|
-
content: "
|
|
124
|
+
content: "FILING (create_bug) is GATED: reproduction_steps (a concrete step), expected, actual, and observed_kind+evidence_pointer are ALL required \u2014 refused otherwise. No real repro/evidence? Use memory(domain='lesson') or file a feature instead. Summary caps at 1500 chars; use add_comment for analysis. DEDUPE before filing: matches on the same product refuse once; retry with not_duplicate_of:[ids]. Classify: upstream_bug, customer_customization, emergency_hotfix, unclear. LIFECYCLE = open -> triaged -> fixed -> closed. triaged = classification via triage_bug OR a merged fix PR (auto-reconciled). fixed = a verification artifact via update_bug \u2014 never just a status flip. closed = delivery proof. Triage is RECORD STATE (classification, triaged_at, triage_notes) \u2014 a comment alone is not a triage. NEVER re-triage a triaged_at record without new evidence. Every triaged bug carries a `cluster` slug (root-cause class); fixes dispatch per repeat-class cluster \u2014 use list_bugs(cluster=...). Full detail: on-demand reference."
|
|
128
125
|
},
|
|
129
126
|
{
|
|
130
127
|
title: "Bug and feature status checks \u2014 use support on request, not at boot",
|
|
@@ -136,7 +133,7 @@ var PLATFORM_PROCEDURES = [
|
|
|
136
133
|
title: "Link fix PRs to bugs at PR-open time",
|
|
137
134
|
domain: "support",
|
|
138
135
|
priority: "p1",
|
|
139
|
-
content: "When you open a PR that addresses a filed bug, immediately comment the linkage onto that bug: support(action='add_comment', id=<bug-id>, comment='Fix PR opened: <repo>#<PR number> (<branch>)'). Do this the moment the PR exists \u2014 before merge, not after. The bug stays open until the fix lands, but the bug\u2194PR linkage must be recorded at PR-open time so triage and other agents can see which PR owns which bug without guessing. Also reference the bug ID in the PR body for the reverse link."
|
|
136
|
+
content: "When you open a PR that addresses a filed bug, immediately comment the linkage onto that bug: support(action='add_comment', id=<bug-id>, comment='Fix PR opened: <repo>#<PR number> (<branch>)'). Do this the moment the PR exists \u2014 before merge, not after. The bug stays open until the fix lands, but the bug\u2194PR linkage must be recorded at PR-open time so triage and other agents can see which PR owns which bug without guessing. Also reference the bug ID in the PR body for the reverse link. Merged PRs naming a bug id are auto-reconciled into status=triaged by the daemon's bug-landed reconciler within 30 minutes \u2014 agents still comment the linkage at PR-open time as above."
|
|
140
137
|
},
|
|
141
138
|
// --- Tool guidance ---
|
|
142
139
|
{
|
|
@@ -180,24 +177,18 @@ var PLATFORM_PROCEDURES = [
|
|
|
180
177
|
content: "NEVER defer work \u2014 no 'later', 'next sprint', or 'not urgent'. Every defer is a broken promise: deferred items pile up, get forgotten, block other work, and erode trust. Find a bug mid-task: fix it now, then resume. Outside your scope: create_task so someone fixes it NOW. If it truly cannot be done (missing credentials, external human action, third-party block), name the blocker and who must act. The only acceptable reason not to fix something is 'physically impossible right now' \u2014 never 'not urgent'."
|
|
181
178
|
},
|
|
182
179
|
// --- Observability ---
|
|
183
|
-
{
|
|
184
|
-
title: "Daemon logs and session lifecycle \u2014 full transparency for debugging",
|
|
185
|
-
domain: "operations",
|
|
186
|
-
priority: "p1",
|
|
187
|
-
content: "Daemon logs to ~/.exe-os/logs/exed-launchd.log. Primary debugging tool. Shows: session spawns, idle kills (90s graceful warning), event loop health (>3s warn, >10s CRITICAL), task enforcement (60s cycle), intercom delivery, MCP sessions, cloud sync. Read: `tail -100 ~/.exe-os/logs/exed-launchd.log` or /exe-doctor. Enforcement audit: ~/.exe-os/enforcement-audit.jsonl (structured JSONL). If agent seems stuck or killed unexpectedly, READ LOGS FIRST before reporting a bug."
|
|
188
|
-
},
|
|
189
180
|
// --- Operations ---
|
|
190
181
|
{
|
|
191
|
-
title: "Managers
|
|
182
|
+
title: "Managers own the subagents they dispatch \u2014 brief, receive, verify",
|
|
192
183
|
domain: "workflow",
|
|
193
184
|
priority: "p0",
|
|
194
|
-
content: `Every manager (COO/CTO/CMO) who dispatches
|
|
185
|
+
content: `Every manager (COO/CTO/CMO) who dispatches a subagent OWNS it end to end. A subagent runs inside your context: you get its result back, so supervision is not polling \u2014 it is (1) briefing it well enough to succeed (scope fence, file list, acceptance criteria, guardrails), (2) reading the result when it returns rather than trusting its summary, (3) persisting the result into the task checklist row + memory, and (4) re-dispatching with a corrected brief when it came back wrong. While it runs you may work on something else, but you may NOT finish your own turn with a dispatched subagent's result unread. "Standing by" while results sit unread is negligence.`
|
|
195
186
|
},
|
|
196
187
|
{
|
|
197
188
|
title: "Coordinator verification \u2014 verify signals, triangulate absence",
|
|
198
189
|
domain: "workflow",
|
|
199
190
|
priority: "p0",
|
|
200
|
-
content: "Never act on a self-reported
|
|
191
|
+
content: "Never act on a self-reported claim without independent verification. 'Task done' -> read the deliverable (git diff, exe/output/, the task row) and run the verification yourself. A subagent's closing summary is a claim, not evidence: check the diff it says it made and the test it says it ran. Before reporting absence ('no tasks', 'no work was done', 'agent is idle'), triangulate at least three sources: task DB across ALL statuses with project_name='all', output artifacts in exe/output/, and team memory. A null result from one query is the limit of your filter, not a fact about reality. If verification contradicts a detailed claim, double-check your verification before accusing the agent."
|
|
201
192
|
},
|
|
202
193
|
{
|
|
203
194
|
title: "COO boot health check \u2014 trust the boot script, verify on request",
|
|
@@ -206,16 +197,16 @@ var PLATFORM_PROCEDURES = [
|
|
|
206
197
|
content: "At startup, run only the /exe boot script; it prints daemon/MCP health, memory counts, cloud sync status, tasks, and blockers. Do NOT run pgrep, grep logs, or independent DB health queries at boot. If the founder asks for current health after boot, use diagnostics(action='daemon_health') or `exe-os healthcheck` and report verified results."
|
|
207
198
|
},
|
|
208
199
|
{
|
|
209
|
-
title: "
|
|
200
|
+
title: "Session lifecycle \u2014 boot, preservation, and closeout",
|
|
210
201
|
domain: "workflow",
|
|
211
202
|
priority: "p0",
|
|
212
|
-
content: "
|
|
203
|
+
content: "BOOT: Coordinator startup uses the /exe boot script. Any other session in a project runs `exe-os boot --project <project>`. Shows: working memory count, active behaviors, identity loaded, last session summary (where you left off), daemon health. Read summary first. Auto-detects project from git repo. PRESERVATION (three automatic layers): (1) EVERY RESPONSE: Stop hook writes periodic checkpoint (lightweight, every N responses). (2) /EXIT OR CLOSE: SessionEnd hook runs dreaming cycle + continuity checkpoint + summary commit (15s timeout, separate process). (3) MID-SESSION SAVE: `config(action='closeout')` \u2014 same dreaming+summary with full agent context (no timeout, richer). CLI equivalent: `exe-os snapshot`. Use when approaching context limits. CRASH/SIGKILL: no hooks fire \u2014 periodic checkpoints are your safety net. Normal /exit: SessionEnd handles everything automatically."
|
|
213
204
|
},
|
|
214
205
|
{
|
|
215
|
-
title: "Structured handoffs \u2014
|
|
206
|
+
title: "Structured handoffs \u2014 record work on the task row, not in a message",
|
|
216
207
|
domain: "communication",
|
|
217
208
|
priority: "p1",
|
|
218
|
-
content: "
|
|
209
|
+
content: "Task work is handed off through the DB, never through a message: update_task(done) carries the structured result (files_changed, commits, decisions, blockers, assertions_resolved) and is what the reviewer reads. A subagent's result is handed off by the dispatcher persisting it into that task row + memory before finishing. send_message is for human-directed notes between coordinator sessions (FYI, a question, a heads-up) and is fire-and-forget \u2014 NEVER use it to assign, deliver, or accept actionable work."
|
|
219
210
|
},
|
|
220
211
|
{
|
|
221
212
|
title: "Assertions and estimation \u2014 mandatory confidence tracking on every task",
|
|
@@ -236,10 +227,10 @@ var PLATFORM_PROCEDURES = [
|
|
|
236
227
|
content: "Wrong assertion -> next assertion on SAME problem must have lower confidence. First attempt: honest confidence. Second after failure: cap 0.5. Third: cap 0.3. After 3 failures: STOP. Reassess entire approach \u2014 your mental model is fundamentally wrong. Read code from scratch, check assumptions, trace execution. The pattern 'confident fix -> wrong -> repeat' destroys trust faster than admitting 'I don't know.'"
|
|
237
228
|
},
|
|
238
229
|
{
|
|
239
|
-
title: "
|
|
230
|
+
title: "No monitoring loops \u2014 pull the queue on every prompt instead",
|
|
240
231
|
domain: "workflow",
|
|
241
232
|
priority: "p1",
|
|
242
|
-
content: "
|
|
233
|
+
content: "There is nothing to poll: subagents return their results to the dispatching context, so a timer that watches other sessions has no job. Do NOT run /loop (or any self-scheduled monitoring loop) for orchestration \u2014 it has no MCP health check, no cycle mutex and no timeout, so an MCP disconnect freezes the session permanently. Instead: check task(action='list', status='needs_review') and blocked tasks on every prompt, and dispatch the next subagent yourself. A genuine recurring job (a nightly report, a CI sweep) belongs in config(action='create_trigger'), not in a chat loop."
|
|
243
234
|
},
|
|
244
235
|
{
|
|
245
236
|
title: "exe-build-adv mandatory for 3+ files",
|
|
@@ -276,19 +267,19 @@ var PLATFORM_PROCEDURES = [
|
|
|
276
267
|
title: "Task lifecycle \u2014 the golden path every agent follows",
|
|
277
268
|
domain: "workflow",
|
|
278
269
|
priority: "p0",
|
|
279
|
-
content: "Tasks are durable, session-scoped
|
|
270
|
+
content: "Tasks are durable, session-scoped CHECKLIST records \u2014 they track work, they never dispatch it. Execution is always the current context or a named subagent it launches (see the Dispatch Ladder). Task lifecycle: open -> in_progress (you start) -> done (update_task when finished) -> needs_review -> closed (COO only via close_task). The DB row is the delivery: a subagent's result is not delivered until it is written there. If you finish a task, self-chain: check for the next task immediately (step 7). Never wait to be nudged. Never say 'standing by.'"
|
|
280
271
|
},
|
|
281
272
|
{
|
|
282
273
|
title: "Review chain \u2014 managers must actively pull completed work, never wait for nudges",
|
|
283
274
|
domain: "workflow",
|
|
284
275
|
priority: "p0",
|
|
285
|
-
content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait
|
|
276
|
+
content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait to be told. When needs_review: (1) read deliverable (git diff, exe/output/, task summary), (2) verify it works (tsc, build, run), (3) close_task if good or create fix task if not. Reviews sitting >30 min is a pipeline stall. Chain: worker update_task(done) -> needs_review -> manager pulls and verifies -> close_task -> COO reviews -> merge."
|
|
286
277
|
},
|
|
287
278
|
{
|
|
288
|
-
title: "
|
|
279
|
+
title: "The DB is the source of truth \u2014 a nudge is never delivery",
|
|
289
280
|
domain: "architecture",
|
|
290
281
|
priority: "p0",
|
|
291
|
-
content: "Tasks live in the DB.
|
|
282
|
+
content: "Tasks live in the DB. Any nudge that reaches you out of band (a message, a hook notice, a daemon ping) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work \u2014 so it is a speedup, never delivery, and acting on one without re-reading the task row is how agents work from stale instructions. The UserPromptSubmit hook checks the DB for new tasks on every prompt; your operating procedures step 7 says check for next work. If you have no tasks, you found them all."
|
|
292
283
|
},
|
|
293
284
|
// --- Encryption key + cloud sync ---
|
|
294
285
|
{
|
|
@@ -297,18 +288,12 @@ var PLATFORM_PROCEDURES = [
|
|
|
297
288
|
priority: "p0",
|
|
298
289
|
content: "Master key is in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT a file. No ~/.exe-os/master.key on modern installs (auto-migrated to Keychain). Device linking: Device 1 runs `exe-os cloud link --show-full` to reveal 24-word BIP39 phrase, Device 2 runs `exe-os cloud` and pastes it. NEVER display/log/return the phrase in agent output. Tell user: 'Run exe-os cloud link --show-full in your Terminal.'"
|
|
299
290
|
},
|
|
300
|
-
{
|
|
301
|
-
title: "Cloud endpoint is api.askexe.com \u2014 not askexe.com/cloud or cloud.askexe.com",
|
|
302
|
-
domain: "architecture",
|
|
303
|
-
priority: "p1",
|
|
304
|
-
content: "All cloud API calls go to https://api.askexe.com (Cloudflare Workers Custom Domain). NOT askexe.com/cloud or cloud.askexe.com (legacy, auto-migrated). Bypasses zone-level Bot Fight Mode that 403s datacenter IPs on askexe.com. If customer reports 403/challenge on cloud sync: verify latest exe-os version. Fix: `npm install -g @askexenow/exe-os@latest`. Override: EXE_CLOUD_ENDPOINT env var."
|
|
305
|
-
},
|
|
306
291
|
// --- MCP is the ONLY data interface ---
|
|
307
292
|
{
|
|
308
293
|
title: "MCP disconnect \u2014 ask the user, never work around it",
|
|
309
294
|
domain: "workflow",
|
|
310
295
|
priority: "p0",
|
|
311
|
-
content: "If MCP tools are unavailable, disconnected, or returning connection errors: STOP. Tell the user: 'MCP server is disconnected. Please run /mcp to reconnect.' No workarounds \u2014 no raw Node imports, no direct DB, no CLI hacks, no daemon socket calls, no
|
|
296
|
+
content: "If MCP tools are unavailable, disconnected, or returning connection errors: STOP. Tell the user: 'MCP server is disconnected. Please run /mcp to reconnect.' No workarounds \u2014 no raw Node imports, no direct DB, no CLI hacks, no daemon socket calls, no hand-started background sessions. MCP is the ONLY data interface. When down, you cannot create tasks, send messages, or record results. Ask once, wait, proceed when reconnected."
|
|
312
297
|
},
|
|
313
298
|
// --- Engineering discipline (coding agents) ---
|
|
314
299
|
{
|
|
@@ -360,7 +345,7 @@ var PLATFORM_REFERENCE_PROCEDURES = [
|
|
|
360
345
|
title: "MCP tool reference \u2014 all domains and key actions",
|
|
361
346
|
domain: "tool-use",
|
|
362
347
|
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;
|
|
348
|
+
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; a durable checklist row with zero execution side effects \u2014 it never dispatches; blocked_by, parent_task_id, reviewer, complexity, budget_tokens, group_id, work_ref) | list | get | update (in_progress/done/blocked/cancelled + assertions) | close (COO only) | checkpoint | resume. spawn_model / spawn_runtime: accepted for compatibility and ignored \u2014 the response says so; model/runtime per employee come from set_agent_config and the Agent tool's own model arg. 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
349
|
},
|
|
365
350
|
{
|
|
366
351
|
title: "Cognition features \u2014 dreaming, reflexes, baselines, hot-path summary",
|
|
@@ -390,7 +375,31 @@ var PLATFORM_REFERENCE_PROCEDURES = [
|
|
|
390
375
|
title: "MCP capability quick-reference \u2014 operations & orchestration surface",
|
|
391
376
|
domain: "tool-use",
|
|
392
377
|
priority: "p1",
|
|
393
|
-
content: "Beyond data reads/writes, use MCP over ad-hoc workarounds. Automation: config(create_trigger|list_triggers). Parallel
|
|
378
|
+
content: "Beyond data reads/writes, use MCP over ad-hoc workarounds. Automation: config(create_trigger|list_triggers). Parallel-work barrier: task(create_group|group_status|group_results) tracks a fan-out of subagents as one unit. Push reminders: task(reminder_create) with daily_push. Decisions: memory(decision_store|decision_get|supersede). Prior solutions: graph(similar_trajectories). Org backup/restore: config(export_orchestration|import_orchestration). Self-improvement: config(dreaming_run|dreaming_status)."
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
title: "When to hire new employees \u2014 scaling signals for the COO",
|
|
382
|
+
domain: "workflow",
|
|
383
|
+
priority: "p1",
|
|
384
|
+
content: "COO recommends hiring (/exe-new-employee) when: GM needed: separate project needs dedicated coordination, COO spending >30% context on it. Engineer: CTO has 5+ queued tasks, parallelization maxed. Content specialist: CMO backlog exceeds 1 week. Auditor: quality gates being skipped under pressure. General rule: if a role spends >50% time on delegatable work, hire. Templates: coo, cto, cmo, gm, principal-engineer, content-specialist, ai-specialist, staff-code-reviewer. Usage: /exe-new-employee <name> --role <template>."
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
title: "Cloud endpoint is api.askexe.com \u2014 not askexe.com/cloud or cloud.askexe.com",
|
|
388
|
+
domain: "architecture",
|
|
389
|
+
priority: "p1",
|
|
390
|
+
content: "All cloud API calls go to https://api.askexe.com (Cloudflare Workers Custom Domain). NOT askexe.com/cloud or cloud.askexe.com (legacy, auto-migrated). Bypasses zone-level Bot Fight Mode that 403s datacenter IPs on askexe.com. If customer reports 403/challenge on cloud sync: verify latest exe-os version. Fix: `npm install -g @askexenow/exe-os@latest`. Override: EXE_CLOUD_ENDPOINT env var."
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
title: "Daemon logs and session lifecycle \u2014 full transparency for debugging",
|
|
394
|
+
domain: "operations",
|
|
395
|
+
priority: "p1",
|
|
396
|
+
content: "Daemon logs to ~/.exe-os/logs/exed-launchd.log. Primary debugging tool. Shows: session spawns, idle kills (90s graceful warning), event loop health (>3s warn, >10s CRITICAL), task enforcement (60s cycle), intercom delivery, MCP sessions, cloud sync. Read: `tail -100 ~/.exe-os/logs/exed-launchd.log` or /exe-doctor. Enforcement audit: ~/.exe-os/enforcement-audit.jsonl (structured JSONL). If agent seems stuck or killed unexpectedly, READ LOGS FIRST before reporting a bug."
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
title: "Bug lifecycle \u2014 full detail (filing gate, triage-as-state, dedupe, reconciliation)",
|
|
400
|
+
domain: "support",
|
|
401
|
+
priority: "p1",
|
|
402
|
+
content: "Full detail behind the always-injected 'Bug lifecycle' procedure (feature c06e754f). Root cause it fixes: an audit of 187 open bugs found 161 essay-length summaries (>800 chars), ZERO with reproduction_steps, ZERO with expected/actual, and package_version='unknown' on every agent filing \u2014 170 of 187 filed by our own agents in three nights. The schema always had these fields; they were optional, so nobody filled them in. \n\nFILING GATE (create_bug, enforced in create-bug-report.ts's handler \u2014 covers both the raw tool and support(action='create_bug')): reproduction_steps requires at least one CONCRETE step (a backticked command, a test id containing '::' or matching describe()/it(), or a UI-action verb aimed at something \u2014 not narrative). expected and actual are required non-empty strings. observed_kind (failing_test/command_output/log_excerpt/screenshot/live_probe) plus evidence_pointer (the test id, command+output excerpt, log path+line, or artifact path) are both required. screenshot and log_excerpt exist specifically so admin (on_behalf_of_email) and TUI/desktop customer-facing filings \u2014 where a human, not a command line, is doing the observing \u2014 can still satisfy the gate. summary/description caps at 1500 chars; anything longer belongs in add_comment AFTER filing, not in the filing itself. package_version is auto-resolved from the installed package.json (readPackageVersion() in mcp-transport-health.ts, the same helper the diagnostics/health tools use) whenever the caller omits it or it's unreadable \u2014 it should never read 'unknown' when the version is actually on disk. No repro you actually observed, or nothing to point at? File it as memory(action='store', domain='lesson') instead, or as a feature if what's missing is a control, not a defect.\n\nDEDUPE PRE-CHECK: before creating, one list call fetches the caller's own OPEN bugs for the same product (cached in-process for ~5 minutes so repeated filings in a session don't re-fetch). Candidates are found by title-token overlap (>=50% of the new title's significant tokens present in an existing title) or a shared file path/symbol between reproduction context and an existing bug's files_changed. A match refuses ONCE, listing candidate ids/titles; the caller acknowledges with not_duplicate_of:[ids] on retry if it is genuinely distinct. Dedupe fails OPEN on a network error \u2014 it is a courtesy check, not a gate that can block filing when the list call itself fails.\n\nLIFECYCLE = open -> triaged -> fixed -> closed, and each transition is RECORD STATE, never just a comment: triaged means classification is set via triage_bug(status='triaged', classification=...) \u2014 note the historical bug where triage_bug's inputSchema omitted the classification field entirely, so a caller's classification silently fell into an unused rest-spread and never reached the PATCH body, leaving every triaged record stuck at classification='unclear' regardless of what was passed (fixed alongside this procedure, with a regression test) \u2014 OR a fix PR merging, which the merged-PR reconciler auto-transitions to triaged (see the separate 'Link fix PRs to bugs at PR-open time' procedure for that linkage). fixed requires a verification artifact via update_bug/triage_bug (verification_kind \u2208 regression_test/manual/ops_transcript, per support-verification-input.ts) \u2014 a status flip alone is refused server-side. closed requires delivery proof. NEVER re-triage a record whose triaged_at is already set unless there is genuinely new evidence \u2014 re-triaging on a whim erodes the signal that triaged_at is supposed to carry. Comments (add_comment) are for narrative and context; they are never a substitute for writing the state fields. Tag repeat-class issues (the same root cause recurring across multiple filings) in triage_notes so the pattern becomes visible in listings \u2014 there is no separate repeat-of column, so this is a documented convention, not a new schema field."
|
|
394
403
|
}
|
|
395
404
|
];
|
|
396
405
|
function getPlatformReferenceMarkdown() {
|
|
@@ -399,6 +408,14 @@ function getPlatformReferenceMarkdown() {
|
|
|
399
408
|
${p.content}`).join("\n\n");
|
|
400
409
|
return "# exe-os Platform Reference (read on demand)\n\nAuto-generated at COO boot from the installed exe-os version. These sections are intentionally NOT injected into every session's system prompt \u2014 read them here when a task needs them.\n\n" + body + "\n";
|
|
401
410
|
}
|
|
411
|
+
function writePlatformReferenceFile(targetDir) {
|
|
412
|
+
try {
|
|
413
|
+
const dir = targetDir ?? path.join(process.env.EXE_OS_DIR ?? path.join(os.homedir(), ".exe-os"), "reference");
|
|
414
|
+
mkdirSync(dir, { recursive: true });
|
|
415
|
+
writeFileSync(path.join(dir, "platform-reference.md"), getPlatformReferenceMarkdown(), "utf8");
|
|
416
|
+
} catch {
|
|
417
|
+
}
|
|
418
|
+
}
|
|
402
419
|
var PLATFORM_PROCEDURE_TITLES = new Set(
|
|
403
420
|
[...PLATFORM_PROCEDURES, ...PLATFORM_REFERENCE_PROCEDURES].map((p) => p.title)
|
|
404
421
|
);
|
|
@@ -407,5 +424,6 @@ export {
|
|
|
407
424
|
PLATFORM_PROCEDURES,
|
|
408
425
|
PLATFORM_REFERENCE_PROCEDURES,
|
|
409
426
|
getPlatformReferenceMarkdown,
|
|
427
|
+
writePlatformReferenceFile,
|
|
410
428
|
PLATFORM_PROCEDURE_TITLES
|
|
411
429
|
};
|
|
@@ -212,7 +212,7 @@ async function main(args) {
|
|
|
212
212
|
console.log("[health-gate] Starting rollback...");
|
|
213
213
|
restorePreDeployBackup();
|
|
214
214
|
try {
|
|
215
|
-
const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-
|
|
215
|
+
const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-U53FBVCQ.js");
|
|
216
216
|
const paths = defaultStackPaths();
|
|
217
217
|
await rollbackStackUpdate({
|
|
218
218
|
manifestRef: paths.manifestRef,
|
|
@@ -77,14 +77,24 @@ function hostMatchesDomain(host, domain) {
|
|
|
77
77
|
if (!h || !d) return false;
|
|
78
78
|
return h === d || h.endsWith(`.${d}`);
|
|
79
79
|
}
|
|
80
|
+
function compareVersions(a, b) {
|
|
81
|
+
const pa = a.split(".").map((x) => Number.parseInt(x, 10));
|
|
82
|
+
const pb = b.split(".").map((x) => Number.parseInt(x, 10));
|
|
83
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i += 1) {
|
|
84
|
+
const na = Number.isFinite(pa[i]) ? pa[i] : 0;
|
|
85
|
+
const nb = Number.isFinite(pb[i]) ? pb[i] : 0;
|
|
86
|
+
if (na !== nb) return na - nb;
|
|
87
|
+
}
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
80
90
|
function resolveStack(manifest, requested) {
|
|
81
91
|
if (manifest.services && !manifest.stacks) {
|
|
82
|
-
return { version: manifest.version ?? "(single)", services: manifest.services };
|
|
92
|
+
return { version: manifest.version ?? "(single)", services: manifest.services, found: true };
|
|
83
93
|
}
|
|
84
|
-
if (!manifest.stacks) return { version: "(none)", services: {} };
|
|
85
|
-
const version = requested ?? manifest.latest ?? Object.keys(manifest.stacks).sort().pop() ?? "";
|
|
94
|
+
if (!manifest.stacks) return { version: "(none)", services: {}, found: false };
|
|
95
|
+
const version = requested ?? manifest.latest ?? [...Object.keys(manifest.stacks)].sort(compareVersions).pop() ?? "";
|
|
86
96
|
const entry = manifest.stacks[version];
|
|
87
|
-
return { version, services: entry?.services ?? {} };
|
|
97
|
+
return { version, services: entry?.services ?? {}, found: entry !== void 0 };
|
|
88
98
|
}
|
|
89
99
|
function isAskExeImage(image) {
|
|
90
100
|
return image.startsWith("ghcr.io/askexe/") || image.startsWith("update.askexe.com/askexe/");
|
|
@@ -480,7 +490,10 @@ function runPreflight(options) {
|
|
|
480
490
|
failed: 1
|
|
481
491
|
};
|
|
482
492
|
}
|
|
483
|
-
const { version, services } = resolveStack(manifest, options?.stackVersion);
|
|
493
|
+
const { version, services, found } = resolveStack(manifest, options?.stackVersion);
|
|
494
|
+
if (!found) {
|
|
495
|
+
return absentStackReport(manifest, version, manifestPath, options?.stackVersion !== void 0 ? "requested" : "selected");
|
|
496
|
+
}
|
|
484
497
|
const repoRoot = path.resolve(path.dirname(manifestPath), "..", "..");
|
|
485
498
|
const envExamplePath = options?.envExamplePath ?? path.join(repoRoot, "deploy", "compose", ".env.example");
|
|
486
499
|
const composePath = options?.composePath ?? path.join(repoRoot, "deploy", "compose", "docker-compose.yml");
|
|
@@ -494,9 +507,23 @@ function runPreflight(options) {
|
|
|
494
507
|
const { verdict, passed, warned, failed } = tally(findings);
|
|
495
508
|
return { verdict, manifestPath, stackVersion: version, findings, passed, warned, failed };
|
|
496
509
|
}
|
|
510
|
+
function absentStackReport(manifest, version, label, how) {
|
|
511
|
+
const known = Object.keys(manifest.stacks ?? {}).join(", ") || "(none)";
|
|
512
|
+
const finding = {
|
|
513
|
+
check: "stack-present",
|
|
514
|
+
status: "fail",
|
|
515
|
+
bug: "absent-stack-is-not-an-empty-stack",
|
|
516
|
+
offenders: [version],
|
|
517
|
+
message: `stack ${version} (${how}) is NOT present in this manifest, so nothing could be checked. This is an unreadable subject, not a failing one \u2014 every check below would have reported its requirement missing purely because the service map was empty. Known stacks: ${known}.` + (how === "selected" ? " Nothing asked for this version: it came from `latest` or from picking the newest key, so the MANIFEST is inconsistent \u2014 `latest` names a stack that does not exist." : " If this came from a dry run, the caller preflighted a version it had not written.")
|
|
518
|
+
};
|
|
519
|
+
return { verdict: "RED", manifestPath: label, stackVersion: version, findings: [finding], passed: 0, warned: 0, failed: 1 };
|
|
520
|
+
}
|
|
497
521
|
function runPreflightOnManifest(input) {
|
|
498
522
|
const label = input.label ?? "(in-memory manifest)";
|
|
499
|
-
const { version, services } = resolveStack(input.manifest, input.stackVersion);
|
|
523
|
+
const { version, services, found } = resolveStack(input.manifest, input.stackVersion);
|
|
524
|
+
if (!found) {
|
|
525
|
+
return absentStackReport(input.manifest, version, label, input.stackVersion !== void 0 ? "requested" : "selected");
|
|
526
|
+
}
|
|
500
527
|
const env = loadEnvLikeFile(input.envExamplePath);
|
|
501
528
|
const envValues = loadEnvValues(input.envExamplePath);
|
|
502
529
|
const compose = readComposeText(input.composePath);
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isExeSession,
|
|
3
3
|
strictSessionScopeFilter
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QDVLVLXP.js";
|
|
5
5
|
import {
|
|
6
6
|
recordOrchestrationEventBestEffort
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-DPYZW42H.js";
|
|
8
8
|
import {
|
|
9
9
|
getProjectName
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-ZZWFZ46U.js";
|
|
11
11
|
import {
|
|
12
12
|
DEFAULT_COORDINATOR_TEMPLATE_NAME,
|
|
13
13
|
getCoordinatorName
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-3UD3OF3X.js";
|
|
15
15
|
import {
|
|
16
16
|
loadConfigSync
|
|
17
17
|
} from "./chunk-MMS2HBRT.js";
|
|
@@ -260,7 +260,7 @@ function createRealDeps(getClient) {
|
|
|
260
260
|
});
|
|
261
261
|
},
|
|
262
262
|
createReviewForOrphan: async (task) => {
|
|
263
|
-
const { createReviewForCompletedTask } = await import("./tasks-review-
|
|
263
|
+
const { createReviewForCompletedTask } = await import("./tasks-review-CG2A5GM3.js");
|
|
264
264
|
const cwd = process.cwd();
|
|
265
265
|
await createReviewForCompletedTask(
|
|
266
266
|
task,
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
extractIdentifiers,
|
|
5
5
|
isGarbageEntity,
|
|
6
6
|
normalizeEntityName
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-3DCBDG4T.js";
|
|
8
8
|
import {
|
|
9
9
|
getClient
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-3UD3OF3X.js";
|
|
11
11
|
|
|
12
12
|
// src/lib/memory-graph-extractor.ts
|
|
13
13
|
function relationshipId(sourceId, targetId, relType) {
|
|
@@ -432,7 +432,7 @@ async function upsertMemoryGraph(result, memoryId, opts) {
|
|
|
432
432
|
});
|
|
433
433
|
}
|
|
434
434
|
try {
|
|
435
|
-
const { createCoOccurrenceEdges } = await import("./co-occurrence-
|
|
435
|
+
const { createCoOccurrenceEdges } = await import("./co-occurrence-5LBYCW3U.js");
|
|
436
436
|
await createCoOccurrenceEdges(result.entities, memoryId, { linkOnly });
|
|
437
437
|
} catch {
|
|
438
438
|
}
|