@askexenow/exe-os 0.9.271 → 0.9.273
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/active-agent-BDYXURXQ.js +26 -0
- package/dist/active-agent-YWBGAKGU.js +25 -0
- package/dist/agentic-ontology-56VHSVS3.js +25 -0
- package/dist/backfill-metadata-A3534S32.js +597 -0
- package/dist/backfill-metadata-B6F2KJJV.js +597 -0
- package/dist/backfill-metadata-BOM2MXLI.js +597 -0
- package/dist/backfill-metadata-G46ABBVR.js +597 -0
- package/dist/backfill-metadata-TAU33HJS.js +597 -0
- package/dist/backfill-metadata-VAV27KJK.js +597 -0
- package/dist/behaviors-USUTDXVA.js +25 -0
- package/dist/bin/agentic-ontology-backfill.js +5 -5
- package/dist/bin/agentic-reflection-backfill.js +6 -6
- package/dist/bin/agentic-semantic-label.js +5 -5
- package/dist/bin/backfill-conversations.js +4 -4
- package/dist/bin/backfill-responses.js +4 -4
- package/dist/bin/backfill-vectors.js +5 -5
- package/dist/bin/bulk-sync-postgres.js +6 -6
- package/dist/bin/cc-doctor.js +4 -4
- package/dist/bin/cleanup-stale-review-tasks.js +10 -10
- package/dist/bin/cli.js +16 -16
- package/dist/bin/exe-agent-config.js +3 -3
- package/dist/bin/exe-agent.js +4 -4
- package/dist/bin/exe-assign.js +5 -5
- package/dist/bin/exe-boot.js +17 -17
- package/dist/bin/exe-call.js +4 -4
- package/dist/bin/exe-cloud.js +4 -4
- package/dist/bin/exe-dispatch.js +10 -10
- package/dist/bin/exe-doctor.js +1 -1
- package/dist/bin/exe-export-behaviors.js +7 -7
- package/dist/bin/exe-forget.js +6 -6
- package/dist/bin/exe-gateway.js +7 -7
- package/dist/bin/exe-healthcheck.js +4 -4
- package/dist/bin/exe-heartbeat.js +10 -10
- package/dist/bin/exe-kill.js +13 -13
- package/dist/bin/exe-launch-agent.js +37 -19
- package/dist/bin/exe-new-employee.js +6 -6
- package/dist/bin/exe-pending-messages.js +11 -11
- package/dist/bin/exe-pending-notifications.js +33 -18
- package/dist/bin/exe-pending-reviews.js +10 -10
- package/dist/bin/exe-rename.js +4 -4
- package/dist/bin/exe-review.js +12 -12
- package/dist/bin/exe-search.js +5 -5
- package/dist/bin/exe-session-cleanup.js +15 -15
- package/dist/bin/exe-settings.js +5 -5
- package/dist/bin/exe-start-codex.js +11 -11
- package/dist/bin/exe-start-opencode.js +8 -8
- package/dist/bin/exe-status.js +11 -11
- package/dist/bin/exe-team.js +3 -3
- package/dist/bin/git-sweep.js +11 -11
- package/dist/bin/graph-backfill.js +4 -4
- package/dist/bin/graph-export.js +5 -5
- package/dist/bin/import-history.js +7 -7
- package/dist/bin/install.js +6 -6
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +4 -4
- package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
- package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
- package/dist/bin/scan-tasks.js +10 -10
- package/dist/bin/setup.js +1 -1
- package/dist/bin/shard-migrate.js +4 -4
- package/dist/capacity-monitor-2GJOFXGB.js +49 -0
- package/dist/capacity-monitor-3Z7W4K25.js +49 -0
- package/dist/capacity-monitor-BENS3N7B.js +49 -0
- package/dist/capacity-monitor-IFVRCIM7.js +49 -0
- package/dist/capacity-monitor-MQUUEZKB.js +49 -0
- package/dist/capacity-monitor-Q47GBDSY.js +49 -0
- package/dist/catchup-brief-B4KGAIPU.js +151 -0
- package/dist/catchup-brief-NMOV3SSP.js +151 -0
- package/dist/catchup-brief-RP4QHXNT.js +151 -0
- package/dist/catchup-brief-TKA6TEK4.js +151 -0
- package/dist/catchup-brief-VMF3ESTZ.js +151 -0
- package/dist/catchup-brief-ZL7V3BXC.js +151 -0
- package/dist/chunk-23KJ2LXY.js +58 -0
- package/dist/chunk-2KWVJV6I.js +171 -0
- package/dist/chunk-2NQQP3FF.js +630 -0
- package/dist/chunk-3A4SOC66.js +551 -0
- package/dist/chunk-3FU5I3KV.js +526 -0
- package/dist/chunk-3GSGDPLK.js +171 -0
- package/dist/chunk-3IM3JNQV.js +377 -0
- package/dist/chunk-3OM3V545.js +448 -0
- package/dist/chunk-3T27ZQT6.js +495 -0
- package/dist/chunk-3VI3QIHU.js +214 -0
- package/dist/chunk-3WG3RRWA.js +1345 -0
- package/dist/chunk-42A3JV3A.js +128 -0
- package/dist/chunk-46IEEKPU.js +13696 -0
- package/dist/chunk-46WLFLGP.js +1073 -0
- package/dist/chunk-4JMPQB7K.js +1148 -0
- package/dist/chunk-4L25LLQM.js +382 -0
- package/dist/chunk-4Q7X3SAM.js +204 -0
- package/dist/chunk-4UAUCFHA.js +526 -0
- package/dist/chunk-4VRJX2SP.js +495 -0
- package/dist/chunk-57RBAR2A.js +214 -0
- package/dist/chunk-57UAFTO2.js +3958 -0
- package/dist/chunk-5AS622MM.js +3958 -0
- package/dist/chunk-5JF5OQQU.js +89 -0
- package/dist/chunk-5LTY4GLX.js +13745 -0
- package/dist/chunk-5M5RYJ22.js +3955 -0
- package/dist/chunk-5YO2FER3.js +76 -0
- package/dist/chunk-62DEE65H.js +371 -0
- package/dist/chunk-62YI2JOC.js +333 -0
- package/dist/chunk-64T6DFSS.js +447 -0
- package/dist/chunk-6AGPWYFC.js +447 -0
- package/dist/chunk-6BWDP63Z.js +197 -0
- package/dist/chunk-6CH7TYBG.js +58 -0
- package/dist/chunk-6CHHFVRQ.js +284 -0
- package/dist/chunk-6D64562N.js +330 -0
- package/dist/chunk-6F35WOSR.js +447 -0
- package/dist/chunk-6GPYL7TX.js +214 -0
- package/dist/chunk-6HQ22FC6.js +81 -0
- package/dist/chunk-6KWLUVFL.js +54 -0
- package/dist/chunk-6N5ISWBF.js +1148 -0
- package/dist/chunk-6OD7PVMC.js +333 -0
- package/dist/chunk-6ZSH2BZR.js +244 -0
- package/dist/chunk-74MF4T3T.js +3962 -0
- package/dist/chunk-77H7IO3O.js +382 -0
- package/dist/chunk-7BUWNG6M.js +159 -0
- package/dist/chunk-7ET5CYTD.js +382 -0
- package/dist/chunk-7IWLKR6N.js +76 -0
- package/dist/chunk-7OEUOJL5.js +1021 -0
- package/dist/chunk-7YEQI2WF.js +13745 -0
- package/dist/chunk-AIRJTKDK.js +204 -0
- package/dist/chunk-AJ63GPM7.js +54 -0
- package/dist/chunk-ATJ3NXDP.js +244 -0
- package/dist/chunk-B5IS7LE4.js +128 -0
- package/dist/chunk-BFJ45HQT.js +244 -0
- package/dist/chunk-BKINEQVI.js +244 -0
- package/dist/chunk-BMHE3UQU.js +495 -0
- package/dist/chunk-BNTUZVPS.js +1921 -0
- package/dist/chunk-BOJV6NI3.js +128 -0
- package/dist/chunk-BPHWI6N2.js +284 -0
- package/dist/chunk-BXCQWWJP.js +185 -0
- package/dist/chunk-BZ6K7AY3.js +50 -0
- package/dist/chunk-C54KIFLS.js +214 -0
- package/dist/chunk-C6ODVGTC.js +818 -0
- package/dist/chunk-C6OYEJJI.js +260 -0
- package/dist/chunk-CHBGCQXG.js +333 -0
- package/dist/chunk-CHBHR5W6.js +3556 -0
- package/dist/chunk-CHUOANKE.js +346 -0
- package/dist/chunk-CSF4RUCN.js +58 -0
- package/dist/chunk-CXKHWCNN.js +204 -0
- package/dist/chunk-CZR6Z5D7.js +330 -0
- package/dist/chunk-D24ANCWY.js +204 -0
- package/dist/chunk-D2T3272U.js +171 -0
- package/dist/chunk-DBJCWK6T.js +377 -0
- package/dist/chunk-DCHEIVGT.js +221 -0
- package/dist/chunk-DF4SM6ZX.js +128 -0
- package/dist/chunk-DHIBLMSP.js +30 -0
- package/dist/chunk-DOAC6CLC.js +127 -0
- package/dist/chunk-DOGNJ4VR.js +818 -0
- package/dist/chunk-DYXJFUCI.js +818 -0
- package/dist/chunk-E2AF2WYY.js +346 -0
- package/dist/chunk-E2KZEZZW.js +1090 -0
- package/dist/chunk-E4KWB4WM.js +348 -0
- package/dist/chunk-EGR2NYID.js +50 -0
- package/dist/chunk-ENU7URWK.js +1073 -0
- package/dist/chunk-EQ5UBJGX.js +81 -0
- package/dist/chunk-EZ7KAZMC.js +132 -0
- package/dist/chunk-F4FSSHR4.js +1073 -0
- package/dist/chunk-FBRQGHSU.js +377 -0
- package/dist/chunk-FPXU56FG.js +346 -0
- package/dist/chunk-FY7HHR5I.js +128 -0
- package/dist/chunk-FZ42OCSP.js +333 -0
- package/dist/chunk-G2S2UMU4.js +159 -0
- package/dist/chunk-G33BHQCO.js +70 -0
- package/dist/chunk-G5HWDSBH.js +50 -0
- package/dist/chunk-GCBG5TFS.js +1345 -0
- package/dist/chunk-GESN6IDC.js +127 -0
- package/dist/chunk-GHD7QG6P.js +58 -0
- package/dist/chunk-GJAILPCX.js +171 -0
- package/dist/chunk-GJQTL7RX.js +127 -0
- package/dist/chunk-GKUODJS7.js +214 -0
- package/dist/chunk-GLCKDEM2.js +97 -0
- package/dist/chunk-GLDM2FOM.js +76 -0
- package/dist/chunk-GMA34SXV.js +240 -0
- package/dist/chunk-GMM2BLFB.js +127 -0
- package/dist/chunk-GNM75IOI.js +159 -0
- package/dist/chunk-GVAVEBYR.js +2091 -0
- package/dist/chunk-GYIX2HLD.js +81 -0
- package/dist/chunk-H4LLEQ3F.js +551 -0
- package/dist/chunk-HBVCBBDA.js +127 -0
- package/dist/chunk-HBYRWOH5.js +171 -0
- package/dist/chunk-HFINM2JG.js +284 -0
- package/dist/chunk-HJGHALOG.js +1345 -0
- package/dist/chunk-HOSJTLBQ.js +513 -0
- package/dist/chunk-HRB5CP43.js +13745 -0
- package/dist/chunk-IC6HVAS3.js +56 -0
- package/dist/chunk-IDCLPPIM.js +3959 -0
- package/dist/chunk-IDFJNO44.js +1051 -0
- package/dist/chunk-II5SVNBN.js +551 -0
- package/dist/chunk-IIRLKWNZ.js +50 -0
- package/dist/chunk-ILFJMEY5.js +97 -0
- package/dist/chunk-IQXLUTWC.js +50 -0
- package/dist/chunk-ISQAOSL3.js +1921 -0
- package/dist/chunk-IWXTFDLS.js +244 -0
- package/dist/chunk-J2TGVCPE.js +1090 -0
- package/dist/chunk-J4Z5GAJ4.js +551 -0
- package/dist/chunk-J6V2DCZK.js +382 -0
- package/dist/chunk-JJSDZFKM.js +1148 -0
- package/dist/chunk-JMN2KOC4.js +128 -0
- package/dist/chunk-JP4CLFLR.js +1148 -0
- package/dist/chunk-JQVYPBR2.js +81 -0
- package/dist/chunk-JTIOZHWG.js +58 -0
- package/dist/chunk-KDICWAYV.js +1345 -0
- package/dist/chunk-KMU7PFO3.js +1148 -0
- package/dist/chunk-KOBIB6WG.js +159 -0
- package/dist/chunk-KQFDDQB6.js +13696 -0
- package/dist/chunk-KZNSOHCB.js +280 -0
- package/dist/chunk-LDDCAATQ.js +1090 -0
- package/dist/chunk-LJN2O5IG.js +197 -0
- package/dist/chunk-LSIYHKDS.js +54 -0
- package/dist/chunk-LVMBYP3C.js +171 -0
- package/dist/chunk-M2WQW5NC.js +227 -0
- package/dist/chunk-MREDKOS4.js +731 -0
- package/dist/chunk-MSF2Y5MS.js +346 -0
- package/dist/chunk-MY647ZHR.js +448 -0
- package/dist/chunk-MY6SP5NZ.js +551 -0
- package/dist/chunk-MZ5CEHPQ.js +89 -0
- package/dist/chunk-N2ACW2ZG.js +363 -0
- package/dist/chunk-NESTX6DR.js +76 -0
- package/dist/chunk-NQZORF6L.js +731 -0
- package/dist/chunk-NSMJDATI.js +495 -0
- package/dist/chunk-NSQ5JE23.js +1090 -0
- package/dist/chunk-NWEFAFJS.js +197 -0
- package/dist/chunk-NYF7GHC5.js +526 -0
- package/dist/chunk-NZGGRM4P.js +731 -0
- package/dist/chunk-NZL567WG.js +81 -0
- package/dist/chunk-NZM4E6Y3.js +89 -0
- package/dist/chunk-O5OMH6LI.js +244 -0
- package/dist/chunk-O6XF6NUN.js +1090 -0
- package/dist/chunk-OBUV3W7L.js +163 -0
- package/dist/chunk-OF4KG3L7.js +1090 -0
- package/dist/chunk-OLDS7LJN.js +495 -0
- package/dist/chunk-OO2I22RX.js +38 -0
- package/dist/chunk-OPUUT33V.js +447 -0
- package/dist/chunk-OQZPSWVN.js +526 -0
- package/dist/chunk-OR6KJ5HH.js +58 -0
- package/dist/chunk-OT3VMTKB.js +50 -0
- package/dist/chunk-OV6NT6QX.js +128 -0
- package/dist/chunk-P6RVIOVA.js +157 -0
- package/dist/chunk-PDTR3YUU.js +54 -0
- package/dist/chunk-PEGTV6EJ.js +1345 -0
- package/dist/chunk-PITVTSQW.js +333 -0
- package/dist/chunk-PSUAO4MZ.js +345 -0
- package/dist/chunk-PUA5564C.js +210 -0
- package/dist/chunk-PUQLKLQX.js +731 -0
- package/dist/chunk-PWQIS5E5.js +382 -0
- package/dist/chunk-PXXHKWDH.js +818 -0
- package/dist/chunk-QOC46BDY.js +346 -0
- package/dist/chunk-QROKS65G.js +76 -0
- package/dist/chunk-R54I2N2T.js +818 -0
- package/dist/chunk-RCFYQHUP.js +818 -0
- package/dist/chunk-RJTND4YS.js +284 -0
- package/dist/chunk-RTA6KSSK.js +89 -0
- package/dist/chunk-SBLHQMMZ.js +81 -0
- package/dist/chunk-SBX6HSEO.js +159 -0
- package/dist/chunk-SEUST6U5.js +284 -0
- package/dist/chunk-SG2ANG5C.js +123 -0
- package/dist/chunk-SUEQF3ZS.js +214 -0
- package/dist/chunk-SVFNKSZV.js +333 -0
- package/dist/chunk-SWNAM2NW.js +526 -0
- package/dist/chunk-TAQT2DC7.js +330 -0
- package/dist/chunk-TB7HFW7M.js +127 -0
- package/dist/chunk-TBJP46RP.js +1148 -0
- package/dist/chunk-TS7NGPU4.js +1073 -0
- package/dist/chunk-TUPDOPMG.js +731 -0
- package/dist/chunk-TYKUZVCA.js +1921 -0
- package/dist/chunk-TZMXJVZV.js +345 -0
- package/dist/chunk-U2DCN7M6.js +1073 -0
- package/dist/chunk-UJZPLZLU.js +197 -0
- package/dist/chunk-UKRKOJQZ.js +54 -0
- package/dist/chunk-UUKDAIH2.js +731 -0
- package/dist/chunk-V6VEFEEH.js +1345 -0
- package/dist/chunk-VCVGE7HK.js +1921 -0
- package/dist/chunk-VIO2ALGH.js +290 -0
- package/dist/chunk-VK6YZ6K7.js +1073 -0
- package/dist/chunk-VKCUSNJW.js +377 -0
- package/dist/chunk-VKT4N6WM.js +495 -0
- package/dist/chunk-VQUEP7UA.js +244 -0
- package/dist/chunk-VRPPJFIQ.js +1921 -0
- package/dist/chunk-VXODHQXB.js +377 -0
- package/dist/chunk-WHK7GXFR.js +13745 -0
- package/dist/chunk-WP3PVBBP.js +204 -0
- package/dist/chunk-WQEUY7DC.js +129 -0
- package/dist/chunk-WWPJTPPQ.js +197 -0
- package/dist/chunk-WXMXUKCA.js +262 -0
- package/dist/chunk-WYZSWV6A.js +346 -0
- package/dist/chunk-X2WBH2IO.js +297 -0
- package/dist/chunk-X33TSJNO.js +394 -0
- package/dist/chunk-X7MMI2UI.js +89 -0
- package/dist/chunk-XD6VOXK3.js +159 -0
- package/dist/chunk-XG3BQZIK.js +85 -0
- package/dist/chunk-XIKBIAOS.js +75 -0
- package/dist/chunk-XPEB545Q.js +54 -0
- package/dist/chunk-XWH2MLWS.js +330 -0
- package/dist/chunk-YH7V73XW.js +89 -0
- package/dist/chunk-YHSATGMH.js +3955 -0
- package/dist/chunk-YJBCGD46.js +13745 -0
- package/dist/chunk-YLOJPYCJ.js +284 -0
- package/dist/chunk-YMLM5D65.js +135 -0
- package/dist/chunk-YNJPRQ6J.js +377 -0
- package/dist/chunk-YSNEHBI6.js +551 -0
- package/dist/chunk-Z33XSFND.js +76 -0
- package/dist/chunk-ZA7N3ZTA.js +1921 -0
- package/dist/chunk-ZD6BMW2K.js +33 -0
- package/dist/chunk-ZFRG2MNB.js +382 -0
- package/dist/chunk-ZKG5IYCG.js +668 -0
- package/dist/chunk-ZRRRSVQF.js +204 -0
- package/dist/chunk-ZU4K7ZNX.js +197 -0
- package/dist/co-activation-HZMJC34P.js +72 -0
- package/dist/co-occurrence-AVYXRV4L.js +74 -0
- package/dist/core-memory-554Q3YN5.js +110 -0
- package/dist/core-memory-BC4YN5F4.js +110 -0
- package/dist/core-memory-NID6R3YR.js +110 -0
- package/dist/core-memory-NPJCVUMF.js +110 -0
- package/dist/core-memory-OKGXL33Z.js +110 -0
- package/dist/core-memory-XHIC5NAB.js +110 -0
- package/dist/crdt-sync-ZCH55JNR.js +33 -0
- package/dist/crm-webhook-6OMVUUGR.js +10 -0
- package/dist/crm-webhook-MHZTXU5N.js +10 -0
- package/dist/crm-webhook-TMWJT2Z5.js +10 -0
- package/dist/crm-webhook-UCWF3XDB.js +10 -0
- package/dist/crm-webhook-XISULXI7.js +10 -0
- package/dist/crm-webhook-YJ5A7F2E.js +10 -0
- package/dist/cto-delegation-gate-4PMJZL2T.js +206 -0
- package/dist/cto-delegation-gate-A7YKXTRO.js +206 -0
- package/dist/cto-delegation-gate-JFZFZGC2.js +206 -0
- package/dist/cto-delegation-gate-K32M4GVM.js +206 -0
- package/dist/cto-delegation-gate-OREBAHUM.js +206 -0
- package/dist/cto-delegation-gate-POHESML5.js +206 -0
- package/dist/daemon-orchestration-2Q7BYOHC.js +135 -0
- package/dist/daemon-orchestration-4RJ2CZJL.js +135 -0
- package/dist/daemon-orchestration-HXYPHSYU.js +135 -0
- package/dist/daemon-orchestration-I5BE46P3.js +135 -0
- package/dist/daemon-orchestration-NKE4FYQS.js +135 -0
- package/dist/daemon-orchestration-YWEXRAZA.js +135 -0
- package/dist/db-backup-5GA2YFDX.js +33 -0
- package/dist/dreaming-3F72ROTL.js +32 -0
- package/dist/dreaming-I6KXO6E2.js +32 -0
- package/dist/dreaming-JD7MNJGS.js +32 -0
- package/dist/dreaming-LCKPA3B4.js +32 -0
- package/dist/dreaming-NJBK5ILR.js +32 -0
- package/dist/dreaming-SDS5IQYC.js +32 -0
- package/dist/exe-drift-VSMIMHL4.js +68 -0
- package/dist/exe-export-DVHHIA6Y.js +73 -0
- package/dist/exe-export-GIVQDENS.js +73 -0
- package/dist/exe-export-IZ2OYMT4.js +73 -0
- package/dist/exe-export-JNWX6ZCQ.js +73 -0
- package/dist/exe-export-OQXCJLWB.js +73 -0
- package/dist/exe-export-YLVAZQAV.js +73 -0
- package/dist/exe-import-7N46LSMQ.js +76 -0
- package/dist/exe-import-AEJYBLA7.js +76 -0
- package/dist/exe-import-FINYUV5T.js +76 -0
- package/dist/exe-import-HWPYARCG.js +76 -0
- package/dist/exe-import-K4TWTG24.js +76 -0
- package/dist/exe-import-LZKZQ54C.js +76 -0
- package/dist/exe-key-6FPQHBW6.js +579 -0
- package/dist/exe-key-H45JY44F.js +579 -0
- package/dist/exe-key-MAEQGTB7.js +579 -0
- package/dist/exe-key-N3XYSEXP.js +579 -0
- package/dist/exe-key-Q3ZNYT6L.js +579 -0
- package/dist/exe-key-Q47RPB45.js +579 -0
- package/dist/exe-snapshot-2USE2HHM.js +164 -0
- package/dist/exe-snapshot-3TEM3BFD.js +164 -0
- package/dist/exe-snapshot-HECGUHL3.js +164 -0
- package/dist/exe-snapshot-HZU66HXX.js +164 -0
- package/dist/exe-snapshot-L7OQWZUH.js +164 -0
- package/dist/exe-snapshot-X5N5KIVJ.js +164 -0
- package/dist/fast-db-init-3CNTADVO.js +7 -0
- package/dist/fast-db-init-C6IPNVPU.js +7 -0
- package/dist/fast-db-init-HXCS2AP5.js +7 -0
- package/dist/fast-db-init-I7CMGBAN.js +7 -0
- package/dist/fast-db-init-P6YESOUL.js +7 -0
- package/dist/fast-db-init-VDNEFVQF.js +7 -0
- package/dist/gateway/index.js +8 -8
- package/dist/git-staleness-YCEBBIVK.js +110 -0
- package/dist/git-task-sweep-C4OV2CEY.js +40 -0
- package/dist/git-task-sweep-H34STRNT.js +40 -0
- package/dist/git-task-sweep-J66SYJMW.js +40 -0
- package/dist/git-task-sweep-JYCD3ZKQ.js +40 -0
- package/dist/git-task-sweep-O723DB7F.js +40 -0
- package/dist/git-task-sweep-YL7NLDCK.js +40 -0
- package/dist/global-procedures-IHZM6C2K.js +20 -0
- package/dist/graph-auto-extract-RZQ3MHP2.js +162 -0
- package/dist/hooks/bug-report-worker.js +12 -12
- package/dist/hooks/codex-stop-task-finalizer.js +12 -12
- package/dist/hooks/commit-complete.js +12 -12
- package/dist/hooks/error-recall.js +6 -6
- package/dist/hooks/exe-heartbeat-hook.js +3 -3
- package/dist/hooks/ingest.js +6 -6
- package/dist/hooks/instructions-loaded.js +4 -4
- package/dist/hooks/manifest.json +19 -19
- package/dist/hooks/notification.js +4 -4
- package/dist/hooks/post-compact.js +11 -11
- package/dist/hooks/post-tool-combined.js +5 -5
- package/dist/hooks/pre-compact.js +12 -12
- package/dist/hooks/pre-tool-use.js +15 -15
- package/dist/hooks/prompt-submit.js +21 -21
- package/dist/hooks/session-end.js +16 -16
- package/dist/hooks/session-start.js +10 -10
- package/dist/hooks/stop.js +15 -15
- package/dist/hooks/subagent-stop.js +11 -11
- package/dist/hooks/summary-worker.js +15 -15
- package/dist/index.js +18 -18
- package/dist/installer-4EW5ZDGD.js +296 -0
- package/dist/installer-B2JTQO55.js +38 -0
- package/dist/installer-MIL352T7.js +342 -0
- package/dist/lib/agent-config.js +9 -3
- package/dist/lib/cloud-sync.js +4 -4
- package/dist/lib/consolidation.js +5 -5
- package/dist/lib/database.js +2 -2
- package/dist/lib/db.js +2 -2
- package/dist/lib/employee-templates.js +4 -4
- package/dist/lib/employees.js +2 -2
- package/dist/lib/exe-daemon.js +35 -34
- package/dist/lib/hybrid-search.js +5 -5
- package/dist/lib/identity.js +2 -2
- package/dist/lib/messaging.js +12 -10
- package/dist/lib/reminders.js +3 -3
- package/dist/lib/schedules.js +5 -5
- package/dist/lib/session-registry.js +4 -4
- package/dist/lib/skill-learning.js +4 -4
- package/dist/lib/store.js +4 -4
- package/dist/lib/task-router.js +3 -3
- package/dist/lib/tasks.js +11 -11
- package/dist/lib/tmux-routing.js +9 -9
- package/dist/lib/token-spend.js +3 -3
- package/dist/mcp/register-tools.js +54 -54
- package/dist/mcp/server.js +55 -55
- package/dist/mcp/tools/complete-reminder.js +4 -4
- package/dist/mcp/tools/create-reminder.js +4 -4
- package/dist/mcp/tools/create-task.js +13 -13
- package/dist/mcp/tools/deactivate-behavior.js +5 -5
- package/dist/mcp/tools/list-reminders.js +4 -4
- package/dist/mcp/tools/list-tasks.js +13 -13
- package/dist/mcp/tools/send-message.js +12 -12
- package/dist/mcp/tools/update-task.js +12 -12
- package/dist/mcp-http-config-OJQR246S.js +27 -0
- package/dist/memory-cards-IPULSQFA.js +174 -0
- package/dist/memory-graph-extractor-3TZZOKHY.js +17 -0
- package/dist/memory-poisoning-defense-SGUGR5YJ.js +225 -0
- package/dist/memory-reflection-H3WGCEM6.js +238 -0
- package/dist/notifications-65STXW6N.js +45 -0
- package/dist/notifications-K3JDUPL5.js +45 -0
- package/dist/notifications-KQOD66ZK.js +45 -0
- package/dist/notifications-PFK5OQEF.js +45 -0
- package/dist/notifications-VWPO6NJF.js +45 -0
- package/dist/notifications-WCSRQN2V.js +45 -0
- package/dist/orchestration-events-O5PSDEIO.js +25 -0
- package/dist/orchestrator-3D7QEVGP.js +33 -0
- package/dist/orchestrator-CC32RZO5.js +33 -0
- package/dist/orchestrator-DWAYSAFR.js +33 -0
- package/dist/orchestrator-RAPEJUOI.js +33 -0
- package/dist/orchestrator-TL37EAWA.js +33 -0
- package/dist/orchestrator-XPG6LJAI.js +33 -0
- package/dist/pipeline-router-5NT6FUC3.js +13 -0
- package/dist/pipeline-router-ADLTS6DZ.js +13 -0
- package/dist/pipeline-router-KSUXONDT.js +13 -0
- package/dist/pipeline-router-O6ZLSM6U.js +13 -0
- package/dist/pipeline-router-QKLYUYU7.js +13 -0
- package/dist/pipeline-router-W2W5XDND.js +13 -0
- package/dist/plan-limits-53NXLNDQ.js +26 -0
- package/dist/project-boot-ITN3FZMM.js +299 -0
- package/dist/projection-worker-27XX5M2W.js +964 -0
- package/dist/reranker-3KLYAHO4.js +19 -0
- package/dist/reranker-64KDRYPP.js +19 -0
- package/dist/reranker-GU7L2PJX.js +19 -0
- package/dist/reranker-MGY5A7BQ.js +19 -0
- package/dist/reranker-TZEXIJAN.js +19 -0
- package/dist/reranker-ZBX6HSU2.js +19 -0
- package/dist/review-polling-3ZZ2T26N.js +124 -0
- package/dist/review-polling-BBQUF54Q.js +124 -0
- package/dist/review-polling-FA2J2Q5O.js +124 -0
- package/dist/review-polling-MLS4BQ3N.js +124 -0
- package/dist/review-polling-RXQZPGRY.js +124 -0
- package/dist/review-polling-YBB6DKA5.js +124 -0
- package/dist/runtime/index.js +12 -12
- package/dist/session-events-EAODNMNR.js +36 -0
- package/dist/session-events-MVO6JNUL.js +36 -0
- package/dist/session-events-PRVDH3QS.js +36 -0
- package/dist/session-events-PU5OQKMB.js +36 -0
- package/dist/session-events-WWGF3B2N.js +36 -0
- package/dist/session-events-ZHXXAH6B.js +36 -0
- package/dist/session-kill-telemetry-O4TJHHOZ.js +29 -0
- package/dist/session-scope-CQXB7VMH.js +86 -0
- package/dist/session-scope-HHUMJYF6.js +86 -0
- package/dist/session-scope-M47JR2SD.js +86 -0
- package/dist/session-scope-MRQYSD5S.js +86 -0
- package/dist/session-scope-TAH5BUYW.js +86 -0
- package/dist/session-scope-UXZ6RUWC.js +86 -0
- package/dist/setup-wizard-UM2RHSBJ.js +12 -0
- package/dist/skill-refinement-447DZWNK.js +157 -0
- package/dist/skill-refinement-567JSF7L.js +157 -0
- package/dist/skill-refinement-6JVQ3TMS.js +157 -0
- package/dist/skill-refinement-MJPOHYD5.js +157 -0
- package/dist/skill-refinement-NVUBRK22.js +157 -0
- package/dist/skill-refinement-XNGD3C62.js +157 -0
- package/dist/stack-release-BAPCXMXW.js +713 -0
- package/dist/stack-release-W4TWTEZP.js +731 -0
- package/dist/steward-gate-VLE7OCKO.js +13 -0
- package/dist/task-enforcement-AZEO67N6.js +391 -0
- package/dist/task-enforcement-EOYP6IO4.js +391 -0
- package/dist/task-enforcement-FUHDL6UR.js +391 -0
- package/dist/task-enforcement-L5XQKFOV.js +391 -0
- package/dist/task-enforcement-QL3K4N3F.js +391 -0
- package/dist/task-enforcement-RJPWWEAE.js +391 -0
- package/dist/task-scope-DRQRNWB7.js +35 -0
- package/dist/task-scope-GS7TS3UV.js +35 -0
- package/dist/task-scope-KQNCP42W.js +35 -0
- package/dist/task-scope-SM5F6RD3.js +35 -0
- package/dist/task-scope-TZYMB634.js +35 -0
- package/dist/task-scope-ZVLUBS4C.js +35 -0
- package/dist/tasks-crud-4MSLJWXE.js +77 -0
- package/dist/tasks-crud-6TWWETGB.js +77 -0
- package/dist/tasks-crud-DBHYO4MM.js +77 -0
- package/dist/tasks-crud-EFYWPPEI.js +77 -0
- package/dist/tasks-crud-HIPXKRKX.js +77 -0
- package/dist/tasks-crud-JIS5B4GZ.js +77 -0
- package/dist/tasks-notify-7JBUNE7R.js +38 -0
- package/dist/tasks-notify-GEJKT5TO.js +38 -0
- package/dist/tasks-notify-OW3JDPLK.js +38 -0
- package/dist/tasks-notify-UPIJ3L4O.js +38 -0
- package/dist/tasks-notify-W5WVP2FG.js +38 -0
- package/dist/tasks-notify-YKEOYOKN.js +38 -0
- package/dist/tasks-review-5SJSFTUB.js +47 -0
- package/dist/tasks-review-DRKN34HO.js +47 -0
- package/dist/tasks-review-IQSAXXXE.js +47 -0
- package/dist/tasks-review-JHSYBR5I.js +47 -0
- package/dist/tasks-review-KWELLLS3.js +47 -0
- package/dist/tasks-review-SUJ6AKAS.js +47 -0
- package/dist/telemetry-upload-BSGOXGUP.js +739 -0
- package/dist/telemetry-upload-FPQAB6ZU.js +739 -0
- package/dist/telemetry-upload-LTX3C5HZ.js +739 -0
- package/dist/telemetry-upload-MYVBVUGE.js +739 -0
- package/dist/telemetry-upload-UPAABLGK.js +739 -0
- package/dist/telemetry-upload-UYEHBFGO.js +739 -0
- package/dist/token-budget-2CDWQU3Q.js +84 -0
- package/dist/tool-telemetry-7YS7EN7B.js +17 -0
- package/dist/tui/App.js +17 -17
- package/dist/tui-data-GDGBOS6G.js +258 -0
- package/dist/tui-data-LYUZFNO4.js +258 -0
- package/dist/tui-data-QM5BOKRF.js +258 -0
- package/dist/tui-data-VAE43SM3.js +258 -0
- package/dist/tui-data-VXF2RBVM.js +258 -0
- package/dist/tui-data-X7HT3FXF.js +258 -0
- package/dist/wiki-acl-MJIMXRQV.js +111 -0
- package/dist/worker-gate-BZBWTMCY.js +21 -0
- package/dist/worker-gate-CHVL6UGT.js +21 -0
- package/dist/worker-gate-KQFS4RJE.js +21 -0
- package/dist/worker-gate-NRP7CMS7.js +21 -0
- package/dist/worker-gate-WQGTZOSM.js +21 -0
- package/dist/worker-gate-X2YDTKTL.js +21 -0
- package/dist/workflow-engine-AKKOMJJQ.js +28 -0
- package/dist/workflow-engine-CYXRZXBM.js +28 -0
- package/dist/workflow-engine-EHWQO3LX.js +28 -0
- package/dist/workflow-engine-I3OUMSF4.js +28 -0
- package/dist/workflow-engine-KMLAXVA4.js +28 -0
- package/dist/workflow-engine-PHTLEAXP.js +28 -0
- package/dist/worktree-NLSKVRNC.js +26 -0
- package/dist/worktree-sweep-44TMEPLE.js +19 -0
- package/package.json +1 -1
- package/release-notes.json +46 -35
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import {
|
|
2
|
+
sessionScopeFilter
|
|
3
|
+
} from "./chunk-IDCLPPIM.js";
|
|
4
|
+
import "./chunk-KZNSOHCB.js";
|
|
5
|
+
import "./chunk-5CHYEKMH.js";
|
|
6
|
+
import "./chunk-4JERP7NT.js";
|
|
7
|
+
import "./chunk-OBUV3W7L.js";
|
|
8
|
+
import "./chunk-MVW62NIZ.js";
|
|
9
|
+
import "./chunk-OYNKIAVW.js";
|
|
10
|
+
import "./chunk-CX6GL3ZJ.js";
|
|
11
|
+
import "./chunk-2NQQP3FF.js";
|
|
12
|
+
import "./chunk-EZ7KAZMC.js";
|
|
13
|
+
import "./chunk-NGP6LSV2.js";
|
|
14
|
+
import "./chunk-WQEUY7DC.js";
|
|
15
|
+
import "./chunk-CVYC6DUW.js";
|
|
16
|
+
import "./chunk-OPU3NYOO.js";
|
|
17
|
+
import "./chunk-GJV3WDWM.js";
|
|
18
|
+
import "./chunk-MP2AFCGL.js";
|
|
19
|
+
import "./chunk-G33BHQCO.js";
|
|
20
|
+
import "./chunk-HYZV25LY.js";
|
|
21
|
+
import {
|
|
22
|
+
getClient,
|
|
23
|
+
getEmployeeByRole,
|
|
24
|
+
loadEmployeesSync
|
|
25
|
+
} from "./chunk-CHBHR5W6.js";
|
|
26
|
+
import "./chunk-2I23RPSI.js";
|
|
27
|
+
import "./chunk-C6OYEJJI.js";
|
|
28
|
+
import "./chunk-FXU7JOXK.js";
|
|
29
|
+
import "./chunk-MOZ2YQ54.js";
|
|
30
|
+
import "./chunk-VXIMSRTO.js";
|
|
31
|
+
import "./chunk-LYH5HE24.js";
|
|
32
|
+
import "./chunk-MLKGABMK.js";
|
|
33
|
+
|
|
34
|
+
// src/lib/cto-delegation-gate.ts
|
|
35
|
+
import os from "os";
|
|
36
|
+
import path from "path";
|
|
37
|
+
import { existsSync, readFileSync, statSync } from "fs";
|
|
38
|
+
var GATED_ROLE = "CTO";
|
|
39
|
+
function resolveGatedAgent() {
|
|
40
|
+
try {
|
|
41
|
+
const employees = loadEmployeesSync();
|
|
42
|
+
const cto = getEmployeeByRole(employees, GATED_ROLE);
|
|
43
|
+
return cto?.name ?? "";
|
|
44
|
+
} catch {
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
var GATED_AGENT = resolveGatedAgent();
|
|
49
|
+
function getGatedAgent() {
|
|
50
|
+
return resolveGatedAgent() || GATED_AGENT;
|
|
51
|
+
}
|
|
52
|
+
var BLOCKED_PATH_PREFIXES = [
|
|
53
|
+
"src/",
|
|
54
|
+
"tests/",
|
|
55
|
+
"scripts/",
|
|
56
|
+
"bin/",
|
|
57
|
+
".github/workflows/",
|
|
58
|
+
".claude/skills/"
|
|
59
|
+
];
|
|
60
|
+
var BLOCKED_FILENAMES = [
|
|
61
|
+
"package.json",
|
|
62
|
+
"tsconfig.json",
|
|
63
|
+
"docker-compose.yml"
|
|
64
|
+
];
|
|
65
|
+
var BLOCKED_DOCKERFILE_PREFIX = "Dockerfile";
|
|
66
|
+
var BLOCKED_EXTENSIONS = [
|
|
67
|
+
".ts",
|
|
68
|
+
".js",
|
|
69
|
+
".tsx",
|
|
70
|
+
".jsx",
|
|
71
|
+
".rs",
|
|
72
|
+
".py",
|
|
73
|
+
".go",
|
|
74
|
+
".sh",
|
|
75
|
+
".yaml",
|
|
76
|
+
".yml",
|
|
77
|
+
".prisma",
|
|
78
|
+
".sql"
|
|
79
|
+
];
|
|
80
|
+
var EXEMPT_MD_DIR_PREFIXES = [
|
|
81
|
+
".planning/",
|
|
82
|
+
"exe/output/",
|
|
83
|
+
"exe/",
|
|
84
|
+
"docs/"
|
|
85
|
+
];
|
|
86
|
+
var RECENT_DISPATCH_WINDOW_MS = 5 * 60 * 1e3;
|
|
87
|
+
var SCRATCHPAD_MAX_AGE_MS = 10 * 60 * 1e3;
|
|
88
|
+
var SCRATCHPAD_ESCAPE_PATTERN = /^(?:ENGINEER|TOM)-CAPABLE:\s*NO\s*—\s*reason:\s*\S+/m;
|
|
89
|
+
function toWorkspaceRelative(filePath, cwd = process.cwd()) {
|
|
90
|
+
const normalized = path.normalize(filePath);
|
|
91
|
+
if (normalized.startsWith(cwd + path.sep)) {
|
|
92
|
+
return normalized.slice(cwd.length + 1);
|
|
93
|
+
}
|
|
94
|
+
if (path.isAbsolute(normalized)) {
|
|
95
|
+
return path.basename(normalized);
|
|
96
|
+
}
|
|
97
|
+
return normalized;
|
|
98
|
+
}
|
|
99
|
+
function isDockerfile(basename) {
|
|
100
|
+
return basename === BLOCKED_DOCKERFILE_PREFIX || basename.startsWith(`${BLOCKED_DOCKERFILE_PREFIX}.`);
|
|
101
|
+
}
|
|
102
|
+
function classifyPath(filePath, cwd) {
|
|
103
|
+
const rel = toWorkspaceRelative(filePath, cwd);
|
|
104
|
+
const basename = path.basename(rel);
|
|
105
|
+
const ext = path.extname(rel).toLowerCase();
|
|
106
|
+
if (ext === ".md") {
|
|
107
|
+
for (const prefix of EXEMPT_MD_DIR_PREFIXES) {
|
|
108
|
+
if (rel.startsWith(prefix)) return "exempt";
|
|
109
|
+
}
|
|
110
|
+
if (!BLOCKED_PATH_PREFIXES.some((p) => rel.startsWith(p))) {
|
|
111
|
+
return "exempt";
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (BLOCKED_FILENAMES.includes(basename)) return "code";
|
|
115
|
+
if (isDockerfile(basename)) return "code";
|
|
116
|
+
if (BLOCKED_EXTENSIONS.includes(ext)) return "code";
|
|
117
|
+
if (BLOCKED_PATH_PREFIXES.some((p) => rel.startsWith(p))) return "code";
|
|
118
|
+
return "exempt";
|
|
119
|
+
}
|
|
120
|
+
async function hasRecentEngineerDispatch(now = Date.now()) {
|
|
121
|
+
try {
|
|
122
|
+
const client = getClient();
|
|
123
|
+
const engineers = loadEmployeesSync().filter(
|
|
124
|
+
(e) => e.role.toLowerCase() === "principal engineer"
|
|
125
|
+
);
|
|
126
|
+
const engineerNames = engineers.map((e) => e.name);
|
|
127
|
+
const gatedAgent = getGatedAgent();
|
|
128
|
+
if (!gatedAgent) return false;
|
|
129
|
+
if (engineerNames.length === 0) return false;
|
|
130
|
+
const placeholders = engineerNames.map(() => "?").join(",");
|
|
131
|
+
const ydScope = sessionScopeFilter();
|
|
132
|
+
const result = await client.execute({
|
|
133
|
+
sql: `SELECT MAX(created_at) AS last_dispatch
|
|
134
|
+
FROM tasks
|
|
135
|
+
WHERE assigned_by = ? AND assigned_to IN (${placeholders})${ydScope.sql}`,
|
|
136
|
+
args: [gatedAgent, ...engineerNames, ...ydScope.args]
|
|
137
|
+
});
|
|
138
|
+
const raw = result.rows[0]?.last_dispatch;
|
|
139
|
+
if (raw === null || raw === void 0) return false;
|
|
140
|
+
const parsed = Date.parse(String(raw));
|
|
141
|
+
if (Number.isNaN(parsed)) return false;
|
|
142
|
+
return now - parsed <= RECENT_DISPATCH_WINDOW_MS;
|
|
143
|
+
} catch {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function scratchpadPath(sessionId, homeDir = os.homedir()) {
|
|
148
|
+
return path.join(
|
|
149
|
+
homeDir,
|
|
150
|
+
".exe-os",
|
|
151
|
+
"session-cache",
|
|
152
|
+
`cto-scratchpad-${sessionId}.txt`
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
function hasValidScratchpadEscape(sessionId, now = Date.now(), homeDir = os.homedir()) {
|
|
156
|
+
const paths = [scratchpadPath(sessionId, homeDir)];
|
|
157
|
+
for (const filePath of paths) {
|
|
158
|
+
if (!existsSync(filePath)) continue;
|
|
159
|
+
try {
|
|
160
|
+
const stat = statSync(filePath);
|
|
161
|
+
if (now - stat.mtimeMs > SCRATCHPAD_MAX_AGE_MS) continue;
|
|
162
|
+
const body = readFileSync(filePath, "utf-8");
|
|
163
|
+
if (SCRATCHPAD_ESCAPE_PATTERN.test(body)) return true;
|
|
164
|
+
} catch {
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
var GATE_BLOCK_MESSAGE = [
|
|
170
|
+
"ACTION BLOCKED by CTO delegation gate. Your Write/Edit was DENIED \u2014 it did NOT execute.",
|
|
171
|
+
"This edit looks implementable by an engineer. You MUST either:",
|
|
172
|
+
" 1. Dispatch create_task to an engineer, OR",
|
|
173
|
+
" 2. Add ENGINEER-CAPABLE: NO with explicit reason to proceed yourself.",
|
|
174
|
+
"Do NOT report this action as successful. It was blocked. No file was changed.",
|
|
175
|
+
"If you are a sub-agent, report this FAILURE to your parent agent."
|
|
176
|
+
].join("\n");
|
|
177
|
+
async function evaluateDelegationGate(opts) {
|
|
178
|
+
const gatedAgent = getGatedAgent();
|
|
179
|
+
if (!gatedAgent || opts.agentId !== gatedAgent) {
|
|
180
|
+
return { outcome: "allow", reason: "agent_not_gated" };
|
|
181
|
+
}
|
|
182
|
+
if (!/^(Write|Edit)$/.test(opts.toolName)) {
|
|
183
|
+
return { outcome: "allow", reason: "tool_not_gated" };
|
|
184
|
+
}
|
|
185
|
+
if (classifyPath(opts.filePath, opts.cwd) === "exempt") {
|
|
186
|
+
return { outcome: "allow", reason: "exempt_path" };
|
|
187
|
+
}
|
|
188
|
+
if (await hasRecentEngineerDispatch(opts.now)) {
|
|
189
|
+
return { outcome: "allow", reason: "recent_engineer_dispatch" };
|
|
190
|
+
}
|
|
191
|
+
if (hasValidScratchpadEscape(opts.sessionId, opts.now, opts.homeDir)) {
|
|
192
|
+
return { outcome: "allow", reason: "scratchpad_escape" };
|
|
193
|
+
}
|
|
194
|
+
return { outcome: "block", reason: "no_delegation_no_escape" };
|
|
195
|
+
}
|
|
196
|
+
export {
|
|
197
|
+
GATED_AGENT,
|
|
198
|
+
GATED_ROLE,
|
|
199
|
+
GATE_BLOCK_MESSAGE,
|
|
200
|
+
classifyPath,
|
|
201
|
+
evaluateDelegationGate,
|
|
202
|
+
getGatedAgent,
|
|
203
|
+
hasRecentEngineerDispatch,
|
|
204
|
+
hasValidScratchpadEscape,
|
|
205
|
+
scratchpadPath
|
|
206
|
+
};
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import {
|
|
2
|
+
sessionScopeFilter
|
|
3
|
+
} from "./chunk-YHSATGMH.js";
|
|
4
|
+
import "./chunk-KZNSOHCB.js";
|
|
5
|
+
import "./chunk-5CHYEKMH.js";
|
|
6
|
+
import "./chunk-4JERP7NT.js";
|
|
7
|
+
import "./chunk-OBUV3W7L.js";
|
|
8
|
+
import "./chunk-MVW62NIZ.js";
|
|
9
|
+
import "./chunk-OYNKIAVW.js";
|
|
10
|
+
import "./chunk-CX6GL3ZJ.js";
|
|
11
|
+
import "./chunk-2NQQP3FF.js";
|
|
12
|
+
import "./chunk-EZ7KAZMC.js";
|
|
13
|
+
import "./chunk-NGP6LSV2.js";
|
|
14
|
+
import "./chunk-WQEUY7DC.js";
|
|
15
|
+
import "./chunk-CVYC6DUW.js";
|
|
16
|
+
import "./chunk-OPU3NYOO.js";
|
|
17
|
+
import "./chunk-GJV3WDWM.js";
|
|
18
|
+
import "./chunk-MP2AFCGL.js";
|
|
19
|
+
import "./chunk-G33BHQCO.js";
|
|
20
|
+
import "./chunk-HYZV25LY.js";
|
|
21
|
+
import {
|
|
22
|
+
getClient,
|
|
23
|
+
getEmployeeByRole,
|
|
24
|
+
loadEmployeesSync
|
|
25
|
+
} from "./chunk-CHBHR5W6.js";
|
|
26
|
+
import "./chunk-2I23RPSI.js";
|
|
27
|
+
import "./chunk-C6OYEJJI.js";
|
|
28
|
+
import "./chunk-FXU7JOXK.js";
|
|
29
|
+
import "./chunk-MOZ2YQ54.js";
|
|
30
|
+
import "./chunk-VXIMSRTO.js";
|
|
31
|
+
import "./chunk-LYH5HE24.js";
|
|
32
|
+
import "./chunk-MLKGABMK.js";
|
|
33
|
+
|
|
34
|
+
// src/lib/cto-delegation-gate.ts
|
|
35
|
+
import os from "os";
|
|
36
|
+
import path from "path";
|
|
37
|
+
import { existsSync, readFileSync, statSync } from "fs";
|
|
38
|
+
var GATED_ROLE = "CTO";
|
|
39
|
+
function resolveGatedAgent() {
|
|
40
|
+
try {
|
|
41
|
+
const employees = loadEmployeesSync();
|
|
42
|
+
const cto = getEmployeeByRole(employees, GATED_ROLE);
|
|
43
|
+
return cto?.name ?? "";
|
|
44
|
+
} catch {
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
var GATED_AGENT = resolveGatedAgent();
|
|
49
|
+
function getGatedAgent() {
|
|
50
|
+
return resolveGatedAgent() || GATED_AGENT;
|
|
51
|
+
}
|
|
52
|
+
var BLOCKED_PATH_PREFIXES = [
|
|
53
|
+
"src/",
|
|
54
|
+
"tests/",
|
|
55
|
+
"scripts/",
|
|
56
|
+
"bin/",
|
|
57
|
+
".github/workflows/",
|
|
58
|
+
".claude/skills/"
|
|
59
|
+
];
|
|
60
|
+
var BLOCKED_FILENAMES = [
|
|
61
|
+
"package.json",
|
|
62
|
+
"tsconfig.json",
|
|
63
|
+
"docker-compose.yml"
|
|
64
|
+
];
|
|
65
|
+
var BLOCKED_DOCKERFILE_PREFIX = "Dockerfile";
|
|
66
|
+
var BLOCKED_EXTENSIONS = [
|
|
67
|
+
".ts",
|
|
68
|
+
".js",
|
|
69
|
+
".tsx",
|
|
70
|
+
".jsx",
|
|
71
|
+
".rs",
|
|
72
|
+
".py",
|
|
73
|
+
".go",
|
|
74
|
+
".sh",
|
|
75
|
+
".yaml",
|
|
76
|
+
".yml",
|
|
77
|
+
".prisma",
|
|
78
|
+
".sql"
|
|
79
|
+
];
|
|
80
|
+
var EXEMPT_MD_DIR_PREFIXES = [
|
|
81
|
+
".planning/",
|
|
82
|
+
"exe/output/",
|
|
83
|
+
"exe/",
|
|
84
|
+
"docs/"
|
|
85
|
+
];
|
|
86
|
+
var RECENT_DISPATCH_WINDOW_MS = 5 * 60 * 1e3;
|
|
87
|
+
var SCRATCHPAD_MAX_AGE_MS = 10 * 60 * 1e3;
|
|
88
|
+
var SCRATCHPAD_ESCAPE_PATTERN = /^(?:ENGINEER|TOM)-CAPABLE:\s*NO\s*—\s*reason:\s*\S+/m;
|
|
89
|
+
function toWorkspaceRelative(filePath, cwd = process.cwd()) {
|
|
90
|
+
const normalized = path.normalize(filePath);
|
|
91
|
+
if (normalized.startsWith(cwd + path.sep)) {
|
|
92
|
+
return normalized.slice(cwd.length + 1);
|
|
93
|
+
}
|
|
94
|
+
if (path.isAbsolute(normalized)) {
|
|
95
|
+
return path.basename(normalized);
|
|
96
|
+
}
|
|
97
|
+
return normalized;
|
|
98
|
+
}
|
|
99
|
+
function isDockerfile(basename) {
|
|
100
|
+
return basename === BLOCKED_DOCKERFILE_PREFIX || basename.startsWith(`${BLOCKED_DOCKERFILE_PREFIX}.`);
|
|
101
|
+
}
|
|
102
|
+
function classifyPath(filePath, cwd) {
|
|
103
|
+
const rel = toWorkspaceRelative(filePath, cwd);
|
|
104
|
+
const basename = path.basename(rel);
|
|
105
|
+
const ext = path.extname(rel).toLowerCase();
|
|
106
|
+
if (ext === ".md") {
|
|
107
|
+
for (const prefix of EXEMPT_MD_DIR_PREFIXES) {
|
|
108
|
+
if (rel.startsWith(prefix)) return "exempt";
|
|
109
|
+
}
|
|
110
|
+
if (!BLOCKED_PATH_PREFIXES.some((p) => rel.startsWith(p))) {
|
|
111
|
+
return "exempt";
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (BLOCKED_FILENAMES.includes(basename)) return "code";
|
|
115
|
+
if (isDockerfile(basename)) return "code";
|
|
116
|
+
if (BLOCKED_EXTENSIONS.includes(ext)) return "code";
|
|
117
|
+
if (BLOCKED_PATH_PREFIXES.some((p) => rel.startsWith(p))) return "code";
|
|
118
|
+
return "exempt";
|
|
119
|
+
}
|
|
120
|
+
async function hasRecentEngineerDispatch(now = Date.now()) {
|
|
121
|
+
try {
|
|
122
|
+
const client = getClient();
|
|
123
|
+
const engineers = loadEmployeesSync().filter(
|
|
124
|
+
(e) => e.role.toLowerCase() === "principal engineer"
|
|
125
|
+
);
|
|
126
|
+
const engineerNames = engineers.map((e) => e.name);
|
|
127
|
+
const gatedAgent = getGatedAgent();
|
|
128
|
+
if (!gatedAgent) return false;
|
|
129
|
+
if (engineerNames.length === 0) return false;
|
|
130
|
+
const placeholders = engineerNames.map(() => "?").join(",");
|
|
131
|
+
const ydScope = sessionScopeFilter();
|
|
132
|
+
const result = await client.execute({
|
|
133
|
+
sql: `SELECT MAX(created_at) AS last_dispatch
|
|
134
|
+
FROM tasks
|
|
135
|
+
WHERE assigned_by = ? AND assigned_to IN (${placeholders})${ydScope.sql}`,
|
|
136
|
+
args: [gatedAgent, ...engineerNames, ...ydScope.args]
|
|
137
|
+
});
|
|
138
|
+
const raw = result.rows[0]?.last_dispatch;
|
|
139
|
+
if (raw === null || raw === void 0) return false;
|
|
140
|
+
const parsed = Date.parse(String(raw));
|
|
141
|
+
if (Number.isNaN(parsed)) return false;
|
|
142
|
+
return now - parsed <= RECENT_DISPATCH_WINDOW_MS;
|
|
143
|
+
} catch {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function scratchpadPath(sessionId, homeDir = os.homedir()) {
|
|
148
|
+
return path.join(
|
|
149
|
+
homeDir,
|
|
150
|
+
".exe-os",
|
|
151
|
+
"session-cache",
|
|
152
|
+
`cto-scratchpad-${sessionId}.txt`
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
function hasValidScratchpadEscape(sessionId, now = Date.now(), homeDir = os.homedir()) {
|
|
156
|
+
const paths = [scratchpadPath(sessionId, homeDir)];
|
|
157
|
+
for (const filePath of paths) {
|
|
158
|
+
if (!existsSync(filePath)) continue;
|
|
159
|
+
try {
|
|
160
|
+
const stat = statSync(filePath);
|
|
161
|
+
if (now - stat.mtimeMs > SCRATCHPAD_MAX_AGE_MS) continue;
|
|
162
|
+
const body = readFileSync(filePath, "utf-8");
|
|
163
|
+
if (SCRATCHPAD_ESCAPE_PATTERN.test(body)) return true;
|
|
164
|
+
} catch {
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
var GATE_BLOCK_MESSAGE = [
|
|
170
|
+
"ACTION BLOCKED by CTO delegation gate. Your Write/Edit was DENIED \u2014 it did NOT execute.",
|
|
171
|
+
"This edit looks implementable by an engineer. You MUST either:",
|
|
172
|
+
" 1. Dispatch create_task to an engineer, OR",
|
|
173
|
+
" 2. Add ENGINEER-CAPABLE: NO with explicit reason to proceed yourself.",
|
|
174
|
+
"Do NOT report this action as successful. It was blocked. No file was changed.",
|
|
175
|
+
"If you are a sub-agent, report this FAILURE to your parent agent."
|
|
176
|
+
].join("\n");
|
|
177
|
+
async function evaluateDelegationGate(opts) {
|
|
178
|
+
const gatedAgent = getGatedAgent();
|
|
179
|
+
if (!gatedAgent || opts.agentId !== gatedAgent) {
|
|
180
|
+
return { outcome: "allow", reason: "agent_not_gated" };
|
|
181
|
+
}
|
|
182
|
+
if (!/^(Write|Edit)$/.test(opts.toolName)) {
|
|
183
|
+
return { outcome: "allow", reason: "tool_not_gated" };
|
|
184
|
+
}
|
|
185
|
+
if (classifyPath(opts.filePath, opts.cwd) === "exempt") {
|
|
186
|
+
return { outcome: "allow", reason: "exempt_path" };
|
|
187
|
+
}
|
|
188
|
+
if (await hasRecentEngineerDispatch(opts.now)) {
|
|
189
|
+
return { outcome: "allow", reason: "recent_engineer_dispatch" };
|
|
190
|
+
}
|
|
191
|
+
if (hasValidScratchpadEscape(opts.sessionId, opts.now, opts.homeDir)) {
|
|
192
|
+
return { outcome: "allow", reason: "scratchpad_escape" };
|
|
193
|
+
}
|
|
194
|
+
return { outcome: "block", reason: "no_delegation_no_escape" };
|
|
195
|
+
}
|
|
196
|
+
export {
|
|
197
|
+
GATED_AGENT,
|
|
198
|
+
GATED_ROLE,
|
|
199
|
+
GATE_BLOCK_MESSAGE,
|
|
200
|
+
classifyPath,
|
|
201
|
+
evaluateDelegationGate,
|
|
202
|
+
getGatedAgent,
|
|
203
|
+
hasRecentEngineerDispatch,
|
|
204
|
+
hasValidScratchpadEscape,
|
|
205
|
+
scratchpadPath
|
|
206
|
+
};
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import {
|
|
2
|
+
sessionScopeFilter
|
|
3
|
+
} from "./chunk-57UAFTO2.js";
|
|
4
|
+
import "./chunk-SD6UFZRH.js";
|
|
5
|
+
import "./chunk-5CHYEKMH.js";
|
|
6
|
+
import "./chunk-4JERP7NT.js";
|
|
7
|
+
import "./chunk-GQ2XYRG3.js";
|
|
8
|
+
import "./chunk-MVW62NIZ.js";
|
|
9
|
+
import "./chunk-OYNKIAVW.js";
|
|
10
|
+
import "./chunk-CX6GL3ZJ.js";
|
|
11
|
+
import "./chunk-JP45GCVR.js";
|
|
12
|
+
import "./chunk-XJUUWHVN.js";
|
|
13
|
+
import "./chunk-NGP6LSV2.js";
|
|
14
|
+
import "./chunk-7SLLNRR3.js";
|
|
15
|
+
import "./chunk-CVYC6DUW.js";
|
|
16
|
+
import "./chunk-OPU3NYOO.js";
|
|
17
|
+
import "./chunk-GJV3WDWM.js";
|
|
18
|
+
import "./chunk-MP2AFCGL.js";
|
|
19
|
+
import "./chunk-TN45CTOI.js";
|
|
20
|
+
import "./chunk-HYZV25LY.js";
|
|
21
|
+
import {
|
|
22
|
+
getClient,
|
|
23
|
+
getEmployeeByRole,
|
|
24
|
+
loadEmployeesSync
|
|
25
|
+
} from "./chunk-UNCGZXPU.js";
|
|
26
|
+
import "./chunk-2I23RPSI.js";
|
|
27
|
+
import "./chunk-VGYL7CN2.js";
|
|
28
|
+
import "./chunk-FXU7JOXK.js";
|
|
29
|
+
import "./chunk-MOZ2YQ54.js";
|
|
30
|
+
import "./chunk-VXIMSRTO.js";
|
|
31
|
+
import "./chunk-LYH5HE24.js";
|
|
32
|
+
import "./chunk-MLKGABMK.js";
|
|
33
|
+
|
|
34
|
+
// src/lib/cto-delegation-gate.ts
|
|
35
|
+
import os from "os";
|
|
36
|
+
import path from "path";
|
|
37
|
+
import { existsSync, readFileSync, statSync } from "fs";
|
|
38
|
+
var GATED_ROLE = "CTO";
|
|
39
|
+
function resolveGatedAgent() {
|
|
40
|
+
try {
|
|
41
|
+
const employees = loadEmployeesSync();
|
|
42
|
+
const cto = getEmployeeByRole(employees, GATED_ROLE);
|
|
43
|
+
return cto?.name ?? "";
|
|
44
|
+
} catch {
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
var GATED_AGENT = resolveGatedAgent();
|
|
49
|
+
function getGatedAgent() {
|
|
50
|
+
return resolveGatedAgent() || GATED_AGENT;
|
|
51
|
+
}
|
|
52
|
+
var BLOCKED_PATH_PREFIXES = [
|
|
53
|
+
"src/",
|
|
54
|
+
"tests/",
|
|
55
|
+
"scripts/",
|
|
56
|
+
"bin/",
|
|
57
|
+
".github/workflows/",
|
|
58
|
+
".claude/skills/"
|
|
59
|
+
];
|
|
60
|
+
var BLOCKED_FILENAMES = [
|
|
61
|
+
"package.json",
|
|
62
|
+
"tsconfig.json",
|
|
63
|
+
"docker-compose.yml"
|
|
64
|
+
];
|
|
65
|
+
var BLOCKED_DOCKERFILE_PREFIX = "Dockerfile";
|
|
66
|
+
var BLOCKED_EXTENSIONS = [
|
|
67
|
+
".ts",
|
|
68
|
+
".js",
|
|
69
|
+
".tsx",
|
|
70
|
+
".jsx",
|
|
71
|
+
".rs",
|
|
72
|
+
".py",
|
|
73
|
+
".go",
|
|
74
|
+
".sh",
|
|
75
|
+
".yaml",
|
|
76
|
+
".yml",
|
|
77
|
+
".prisma",
|
|
78
|
+
".sql"
|
|
79
|
+
];
|
|
80
|
+
var EXEMPT_MD_DIR_PREFIXES = [
|
|
81
|
+
".planning/",
|
|
82
|
+
"exe/output/",
|
|
83
|
+
"exe/",
|
|
84
|
+
"docs/"
|
|
85
|
+
];
|
|
86
|
+
var RECENT_DISPATCH_WINDOW_MS = 5 * 60 * 1e3;
|
|
87
|
+
var SCRATCHPAD_MAX_AGE_MS = 10 * 60 * 1e3;
|
|
88
|
+
var SCRATCHPAD_ESCAPE_PATTERN = /^(?:ENGINEER|TOM)-CAPABLE:\s*NO\s*—\s*reason:\s*\S+/m;
|
|
89
|
+
function toWorkspaceRelative(filePath, cwd = process.cwd()) {
|
|
90
|
+
const normalized = path.normalize(filePath);
|
|
91
|
+
if (normalized.startsWith(cwd + path.sep)) {
|
|
92
|
+
return normalized.slice(cwd.length + 1);
|
|
93
|
+
}
|
|
94
|
+
if (path.isAbsolute(normalized)) {
|
|
95
|
+
return path.basename(normalized);
|
|
96
|
+
}
|
|
97
|
+
return normalized;
|
|
98
|
+
}
|
|
99
|
+
function isDockerfile(basename) {
|
|
100
|
+
return basename === BLOCKED_DOCKERFILE_PREFIX || basename.startsWith(`${BLOCKED_DOCKERFILE_PREFIX}.`);
|
|
101
|
+
}
|
|
102
|
+
function classifyPath(filePath, cwd) {
|
|
103
|
+
const rel = toWorkspaceRelative(filePath, cwd);
|
|
104
|
+
const basename = path.basename(rel);
|
|
105
|
+
const ext = path.extname(rel).toLowerCase();
|
|
106
|
+
if (ext === ".md") {
|
|
107
|
+
for (const prefix of EXEMPT_MD_DIR_PREFIXES) {
|
|
108
|
+
if (rel.startsWith(prefix)) return "exempt";
|
|
109
|
+
}
|
|
110
|
+
if (!BLOCKED_PATH_PREFIXES.some((p) => rel.startsWith(p))) {
|
|
111
|
+
return "exempt";
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (BLOCKED_FILENAMES.includes(basename)) return "code";
|
|
115
|
+
if (isDockerfile(basename)) return "code";
|
|
116
|
+
if (BLOCKED_EXTENSIONS.includes(ext)) return "code";
|
|
117
|
+
if (BLOCKED_PATH_PREFIXES.some((p) => rel.startsWith(p))) return "code";
|
|
118
|
+
return "exempt";
|
|
119
|
+
}
|
|
120
|
+
async function hasRecentEngineerDispatch(now = Date.now()) {
|
|
121
|
+
try {
|
|
122
|
+
const client = getClient();
|
|
123
|
+
const engineers = loadEmployeesSync().filter(
|
|
124
|
+
(e) => e.role.toLowerCase() === "principal engineer"
|
|
125
|
+
);
|
|
126
|
+
const engineerNames = engineers.map((e) => e.name);
|
|
127
|
+
const gatedAgent = getGatedAgent();
|
|
128
|
+
if (!gatedAgent) return false;
|
|
129
|
+
if (engineerNames.length === 0) return false;
|
|
130
|
+
const placeholders = engineerNames.map(() => "?").join(",");
|
|
131
|
+
const ydScope = sessionScopeFilter();
|
|
132
|
+
const result = await client.execute({
|
|
133
|
+
sql: `SELECT MAX(created_at) AS last_dispatch
|
|
134
|
+
FROM tasks
|
|
135
|
+
WHERE assigned_by = ? AND assigned_to IN (${placeholders})${ydScope.sql}`,
|
|
136
|
+
args: [gatedAgent, ...engineerNames, ...ydScope.args]
|
|
137
|
+
});
|
|
138
|
+
const raw = result.rows[0]?.last_dispatch;
|
|
139
|
+
if (raw === null || raw === void 0) return false;
|
|
140
|
+
const parsed = Date.parse(String(raw));
|
|
141
|
+
if (Number.isNaN(parsed)) return false;
|
|
142
|
+
return now - parsed <= RECENT_DISPATCH_WINDOW_MS;
|
|
143
|
+
} catch {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function scratchpadPath(sessionId, homeDir = os.homedir()) {
|
|
148
|
+
return path.join(
|
|
149
|
+
homeDir,
|
|
150
|
+
".exe-os",
|
|
151
|
+
"session-cache",
|
|
152
|
+
`cto-scratchpad-${sessionId}.txt`
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
function hasValidScratchpadEscape(sessionId, now = Date.now(), homeDir = os.homedir()) {
|
|
156
|
+
const paths = [scratchpadPath(sessionId, homeDir)];
|
|
157
|
+
for (const filePath of paths) {
|
|
158
|
+
if (!existsSync(filePath)) continue;
|
|
159
|
+
try {
|
|
160
|
+
const stat = statSync(filePath);
|
|
161
|
+
if (now - stat.mtimeMs > SCRATCHPAD_MAX_AGE_MS) continue;
|
|
162
|
+
const body = readFileSync(filePath, "utf-8");
|
|
163
|
+
if (SCRATCHPAD_ESCAPE_PATTERN.test(body)) return true;
|
|
164
|
+
} catch {
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
var GATE_BLOCK_MESSAGE = [
|
|
170
|
+
"ACTION BLOCKED by CTO delegation gate. Your Write/Edit was DENIED \u2014 it did NOT execute.",
|
|
171
|
+
"This edit looks implementable by an engineer. You MUST either:",
|
|
172
|
+
" 1. Dispatch create_task to an engineer, OR",
|
|
173
|
+
" 2. Add ENGINEER-CAPABLE: NO with explicit reason to proceed yourself.",
|
|
174
|
+
"Do NOT report this action as successful. It was blocked. No file was changed.",
|
|
175
|
+
"If you are a sub-agent, report this FAILURE to your parent agent."
|
|
176
|
+
].join("\n");
|
|
177
|
+
async function evaluateDelegationGate(opts) {
|
|
178
|
+
const gatedAgent = getGatedAgent();
|
|
179
|
+
if (!gatedAgent || opts.agentId !== gatedAgent) {
|
|
180
|
+
return { outcome: "allow", reason: "agent_not_gated" };
|
|
181
|
+
}
|
|
182
|
+
if (!/^(Write|Edit)$/.test(opts.toolName)) {
|
|
183
|
+
return { outcome: "allow", reason: "tool_not_gated" };
|
|
184
|
+
}
|
|
185
|
+
if (classifyPath(opts.filePath, opts.cwd) === "exempt") {
|
|
186
|
+
return { outcome: "allow", reason: "exempt_path" };
|
|
187
|
+
}
|
|
188
|
+
if (await hasRecentEngineerDispatch(opts.now)) {
|
|
189
|
+
return { outcome: "allow", reason: "recent_engineer_dispatch" };
|
|
190
|
+
}
|
|
191
|
+
if (hasValidScratchpadEscape(opts.sessionId, opts.now, opts.homeDir)) {
|
|
192
|
+
return { outcome: "allow", reason: "scratchpad_escape" };
|
|
193
|
+
}
|
|
194
|
+
return { outcome: "block", reason: "no_delegation_no_escape" };
|
|
195
|
+
}
|
|
196
|
+
export {
|
|
197
|
+
GATED_AGENT,
|
|
198
|
+
GATED_ROLE,
|
|
199
|
+
GATE_BLOCK_MESSAGE,
|
|
200
|
+
classifyPath,
|
|
201
|
+
evaluateDelegationGate,
|
|
202
|
+
getGatedAgent,
|
|
203
|
+
hasRecentEngineerDispatch,
|
|
204
|
+
hasValidScratchpadEscape,
|
|
205
|
+
scratchpadPath
|
|
206
|
+
};
|