@askexenow/exe-os 0.9.272 → 0.9.274
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/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-SJ4YMQFS.js +597 -0
- package/dist/backfill-metadata-TAU33HJS.js +597 -0
- package/dist/bin/agentic-ontology-backfill.js +1 -1
- package/dist/bin/agentic-reflection-backfill.js +1 -1
- package/dist/bin/agentic-semantic-label.js +1 -1
- package/dist/bin/backfill-conversations.js +1 -1
- package/dist/bin/backfill-responses.js +1 -1
- package/dist/bin/backfill-vectors.js +2 -2
- package/dist/bin/bulk-sync-postgres.js +1 -1
- package/dist/bin/cleanup-stale-review-tasks.js +2 -2
- package/dist/bin/cli.js +5 -5
- package/dist/bin/exe-assign.js +1 -1
- package/dist/bin/exe-boot.js +3 -3
- package/dist/bin/exe-dispatch.js +2 -2
- package/dist/bin/exe-doctor.js +1 -1
- package/dist/bin/exe-export-behaviors.js +2 -2
- package/dist/bin/exe-forget.js +3 -3
- package/dist/bin/exe-gateway.js +5 -5
- package/dist/bin/exe-heartbeat.js +2 -2
- package/dist/bin/exe-kill.js +3 -3
- package/dist/bin/exe-launch-agent.js +3 -3
- package/dist/bin/exe-pending-messages.js +3 -3
- package/dist/bin/exe-pending-notifications.js +25 -10
- package/dist/bin/exe-pending-reviews.js +2 -2
- package/dist/bin/exe-review.js +3 -3
- package/dist/bin/exe-search.js +2 -2
- package/dist/bin/exe-session-cleanup.js +5 -5
- package/dist/bin/exe-start-codex.js +1 -1
- package/dist/bin/exe-start-opencode.js +1 -1
- package/dist/bin/exe-status.js +3 -3
- package/dist/bin/exe-team.js +1 -1
- package/dist/bin/git-sweep.js +2 -2
- package/dist/bin/graph-backfill.js +1 -1
- package/dist/bin/graph-export.js +2 -2
- package/dist/bin/import-history.js +2 -2
- package/dist/bin/intercom-check.js +3 -3
- package/dist/bin/mcp-sessions.js +2 -2
- package/dist/bin/orchestration-metrics.js +1 -1
- package/dist/bin/scan-tasks.js +2 -2
- package/dist/bin/shard-migrate.js +1 -1
- 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-MQUUEZKB.js +49 -0
- package/dist/capacity-monitor-VP4RDLSB.js +49 -0
- package/dist/catchup-brief-2Q5GPASS.js +151 -0
- package/dist/catchup-brief-B4KGAIPU.js +151 -0
- package/dist/catchup-brief-NMOV3SSP.js +151 -0
- package/dist/catchup-brief-VMF3ESTZ.js +151 -0
- package/dist/catchup-brief-ZL7V3BXC.js +151 -0
- package/dist/chunk-2FZLPPOD.js +171 -0
- package/dist/chunk-2KWVJV6I.js +171 -0
- package/dist/chunk-3A4SOC66.js +551 -0
- package/dist/chunk-3FZQAO7A.js +3961 -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-44MQXM4F.js +13745 -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-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-62YI2JOC.js +333 -0
- package/dist/chunk-6AGPWYFC.js +447 -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-6HQ22FC6.js +81 -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-7CB3G3JP.js +1090 -0
- package/dist/chunk-7YEQI2WF.js +13745 -0
- package/dist/chunk-AJ63GPM7.js +54 -0
- package/dist/chunk-BFJ45HQT.js +244 -0
- package/dist/chunk-BMHE3UQU.js +495 -0
- package/dist/chunk-BNTUZVPS.js +1921 -0
- package/dist/chunk-BSWNP5GP.js +197 -0
- package/dist/chunk-C6ODVGTC.js +818 -0
- package/dist/chunk-CHBGCQXG.js +333 -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-DBJCWK6T.js +377 -0
- package/dist/chunk-DF4SM6ZX.js +128 -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-EGR2NYID.js +50 -0
- package/dist/chunk-EQ5UBJGX.js +81 -0
- package/dist/chunk-EWQLQZNS.js +345 -0
- package/dist/chunk-FBRQGHSU.js +377 -0
- package/dist/chunk-FC5WORMP.js +81 -0
- package/dist/chunk-FS7G6NJD.js +377 -0
- package/dist/chunk-FZ42OCSP.js +333 -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-GKUODJS7.js +214 -0
- package/dist/chunk-GLDM2FOM.js +76 -0
- package/dist/chunk-GMM2BLFB.js +127 -0
- package/dist/chunk-GNM75IOI.js +159 -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-HBYLXJAW.js +284 -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-HRB5CP43.js +13745 -0
- package/dist/chunk-IDCLPPIM.js +3959 -0
- package/dist/chunk-II5SVNBN.js +551 -0
- package/dist/chunk-IIRLKWNZ.js +50 -0
- package/dist/chunk-IQXLUTWC.js +50 -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-JJSDZFKM.js +1148 -0
- package/dist/chunk-JMN2KOC4.js +128 -0
- package/dist/chunk-JQVYPBR2.js +81 -0
- package/dist/chunk-KK6ZIA37.js +551 -0
- package/dist/chunk-KMU7PFO3.js +1148 -0
- package/dist/chunk-L7RDKCIR.js +244 -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-MREDKOS4.js +731 -0
- package/dist/chunk-MSF2Y5MS.js +346 -0
- package/dist/chunk-MWUISGAB.js +382 -0
- package/dist/chunk-MY647ZHR.js +448 -0
- package/dist/chunk-MZ5CEHPQ.js +89 -0
- package/dist/chunk-N62LCOUL.js +214 -0
- package/dist/chunk-NESTX6DR.js +76 -0
- package/dist/chunk-NQZORF6L.js +731 -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-NZM4E6Y3.js +89 -0
- package/dist/chunk-O6XF6NUN.js +1090 -0
- package/dist/chunk-OF4KG3L7.js +1090 -0
- package/dist/chunk-OQZPSWVN.js +526 -0
- package/dist/chunk-OR6KJ5HH.js +58 -0
- package/dist/chunk-OV6NT6QX.js +128 -0
- package/dist/chunk-OZZNVYAK.js +346 -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-PWQIS5E5.js +382 -0
- package/dist/chunk-PXXHKWDH.js +818 -0
- package/dist/chunk-QNEXJFHM.js +495 -0
- package/dist/chunk-QOC46BDY.js +346 -0
- package/dist/chunk-QUJMPJF6.js +1148 -0
- package/dist/chunk-QZD26GDH.js +1073 -0
- package/dist/chunk-RA5JLXBQ.js +89 -0
- package/dist/chunk-RFXUXL2D.js +128 -0
- package/dist/chunk-RTA6KSSK.js +89 -0
- package/dist/chunk-SBX6HSEO.js +159 -0
- package/dist/chunk-SEUST6U5.js +284 -0
- package/dist/chunk-SGNGDKD6.js +127 -0
- package/dist/chunk-SUEQF3ZS.js +214 -0
- package/dist/chunk-SWNAM2NW.js +526 -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-TYWQZEEP.js +448 -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-V6YIYBTZ.js +204 -0
- package/dist/chunk-VCVGE7HK.js +1921 -0
- package/dist/chunk-VEWBH33L.js +1921 -0
- package/dist/chunk-VK6YZ6K7.js +1073 -0
- package/dist/chunk-VKT4N6WM.js +495 -0
- package/dist/chunk-VQD4CTOC.js +50 -0
- package/dist/chunk-VQUEP7UA.js +244 -0
- package/dist/chunk-VXODHQXB.js +377 -0
- package/dist/chunk-VZES6N3E.js +526 -0
- package/dist/chunk-W5QNW2XG.js +76 -0
- package/dist/chunk-WHK7GXFR.js +13745 -0
- package/dist/chunk-WQKYSGIT.js +159 -0
- package/dist/chunk-WWPJTPPQ.js +197 -0
- package/dist/chunk-WYZSWV6A.js +346 -0
- package/dist/chunk-XD6VOXK3.js +159 -0
- package/dist/chunk-YEMI5UWM.js +58 -0
- package/dist/chunk-YHSATGMH.js +3955 -0
- package/dist/chunk-YJBCGD46.js +13745 -0
- package/dist/chunk-YLICIT56.js +731 -0
- package/dist/chunk-YLOJPYCJ.js +284 -0
- package/dist/chunk-YTDY65EM.js +1345 -0
- package/dist/chunk-YXVGZDDE.js +333 -0
- package/dist/chunk-Z33XSFND.js +76 -0
- package/dist/chunk-ZA7N3ZTA.js +1921 -0
- package/dist/chunk-ZBCOPT2O.js +54 -0
- package/dist/chunk-ZFRG2MNB.js +382 -0
- package/dist/chunk-ZPBCPDB3.js +818 -0
- package/dist/chunk-ZRRRSVQF.js +204 -0
- package/dist/core-memory-554Q3YN5.js +110 -0
- package/dist/core-memory-BC4YN5F4.js +110 -0
- package/dist/core-memory-GTGDVXLO.js +110 -0
- package/dist/core-memory-NID6R3YR.js +110 -0
- package/dist/core-memory-XHIC5NAB.js +110 -0
- package/dist/crm-webhook-MHZTXU5N.js +10 -0
- package/dist/crm-webhook-P6TXQMLI.js +10 -0
- package/dist/crm-webhook-TMWJT2Z5.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-OREBAHUM.js +206 -0
- package/dist/cto-delegation-gate-POHESML5.js +206 -0
- package/dist/cto-delegation-gate-XFDEMR3W.js +206 -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-TFHRZ2RV.js +135 -0
- package/dist/daemon-orchestration-YWEXRAZA.js +135 -0
- package/dist/dreaming-3F72ROTL.js +32 -0
- package/dist/dreaming-DJWC7RVV.js +32 -0
- package/dist/dreaming-JD7MNJGS.js +32 -0
- package/dist/dreaming-LCKPA3B4.js +32 -0
- package/dist/dreaming-SDS5IQYC.js +32 -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-QUT5WDDK.js +73 -0
- package/dist/exe-export-YLVAZQAV.js +73 -0
- package/dist/exe-import-AEJYBLA7.js +76 -0
- package/dist/exe-import-HWPYARCG.js +76 -0
- package/dist/exe-import-JE7YYYBJ.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-7XX4OUXD.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-HZU66HXX.js +164 -0
- package/dist/exe-snapshot-L7OQWZUH.js +164 -0
- package/dist/exe-snapshot-NET7N53Z.js +164 -0
- package/dist/exe-snapshot-X5N5KIVJ.js +164 -0
- package/dist/fast-db-init-C6IPNVPU.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/fast-db-init-Y6C4TM2T.js +7 -0
- package/dist/gateway/index.js +6 -6
- package/dist/git-task-sweep-C4OV2CEY.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-R3CZQT4O.js +40 -0
- package/dist/hooks/bug-report-worker.js +4 -4
- package/dist/hooks/codex-stop-task-finalizer.js +4 -4
- package/dist/hooks/commit-complete.js +4 -4
- package/dist/hooks/error-recall.js +2 -2
- package/dist/hooks/ingest.js +2 -2
- package/dist/hooks/instructions-loaded.js +1 -1
- package/dist/hooks/manifest.json +18 -18
- package/dist/hooks/notification.js +1 -1
- package/dist/hooks/post-compact.js +2 -2
- package/dist/hooks/post-tool-combined.js +2 -2
- package/dist/hooks/pre-compact.js +3 -3
- package/dist/hooks/pre-tool-use.js +6 -6
- package/dist/hooks/prompt-submit.js +8 -8
- package/dist/hooks/session-end.js +5 -5
- package/dist/hooks/session-start.js +5 -5
- package/dist/hooks/stop.js +5 -5
- package/dist/hooks/subagent-stop.js +2 -2
- package/dist/hooks/summary-worker.js +5 -5
- package/dist/index.js +9 -9
- package/dist/lib/consolidation.js +2 -2
- package/dist/lib/exe-daemon.js +18 -17
- package/dist/lib/hybrid-search.js +2 -2
- package/dist/lib/messaging.js +4 -2
- package/dist/lib/schedules.js +2 -2
- package/dist/lib/store.js +1 -1
- package/dist/lib/tasks.js +3 -3
- package/dist/lib/tmux-routing.js +1 -1
- package/dist/mcp/register-tools.js +24 -24
- package/dist/mcp/server.js +25 -25
- package/dist/mcp/tools/create-task.js +4 -4
- package/dist/mcp/tools/list-tasks.js +4 -4
- package/dist/mcp/tools/send-message.js +3 -3
- package/dist/mcp/tools/update-task.js +4 -4
- package/dist/notifications-65STXW6N.js +45 -0
- package/dist/notifications-C6WBZYSS.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/orchestrator-3D7QEVGP.js +33 -0
- package/dist/orchestrator-CC32RZO5.js +33 -0
- package/dist/orchestrator-DDKE4UM3.js +33 -0
- package/dist/orchestrator-DWAYSAFR.js +33 -0
- package/dist/orchestrator-TL37EAWA.js +33 -0
- package/dist/pipeline-router-ADLTS6DZ.js +13 -0
- package/dist/pipeline-router-NCOLBCHN.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/reranker-3GFGGCJF.js +19 -0
- package/dist/reranker-3KLYAHO4.js +19 -0
- package/dist/reranker-64KDRYPP.js +19 -0
- package/dist/reranker-MGY5A7BQ.js +19 -0
- package/dist/reranker-ZBX6HSU2.js +19 -0
- package/dist/review-polling-3ZZ2T26N.js +124 -0
- package/dist/review-polling-62EGCBLH.js +124 -0
- package/dist/review-polling-BBQUF54Q.js +124 -0
- package/dist/review-polling-RXQZPGRY.js +124 -0
- package/dist/review-polling-YBB6DKA5.js +124 -0
- package/dist/runtime/index.js +3 -3
- 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-UXAPXR2D.js +36 -0
- package/dist/session-scope-K4FRGQK4.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/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-TCI6A32K.js +157 -0
- package/dist/skill-refinement-XNGD3C62.js +157 -0
- package/dist/task-enforcement-7QXEVHAS.js +391 -0
- package/dist/task-enforcement-AZEO67N6.js +391 -0
- package/dist/task-enforcement-EOYP6IO4.js +391 -0
- package/dist/task-enforcement-L5XQKFOV.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-OJER4AQ2.js +35 -0
- package/dist/task-scope-SM5F6RD3.js +35 -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-JIS5B4GZ.js +77 -0
- package/dist/tasks-crud-WKJSB5PH.js +77 -0
- package/dist/tasks-notify-GEJKT5TO.js +38 -0
- package/dist/tasks-notify-OW3JDPLK.js +38 -0
- package/dist/tasks-notify-UHE7X6RD.js +38 -0
- package/dist/tasks-notify-W5WVP2FG.js +38 -0
- package/dist/tasks-notify-YKEOYOKN.js +38 -0
- package/dist/tasks-review-2D2X6AHO.js +47 -0
- package/dist/tasks-review-DRKN34HO.js +47 -0
- package/dist/tasks-review-IQSAXXXE.js +47 -0
- package/dist/tasks-review-KWELLLS3.js +47 -0
- package/dist/tasks-review-SUJ6AKAS.js +47 -0
- package/dist/telemetry-upload-FPQAB6ZU.js +739 -0
- package/dist/telemetry-upload-JQYBFEWG.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/tui/App.js +7 -7
- package/dist/tui-data-LYUZFNO4.js +258 -0
- package/dist/tui-data-NIT4PI5T.js +258 -0
- package/dist/tui-data-QM5BOKRF.js +258 -0
- package/dist/tui-data-VAE43SM3.js +258 -0
- package/dist/tui-data-X7HT3FXF.js +258 -0
- package/dist/worker-gate-BZBWTMCY.js +21 -0
- package/dist/worker-gate-CHVL6UGT.js +21 -0
- package/dist/worker-gate-I6XMCYS4.js +21 -0
- package/dist/worker-gate-KQFS4RJE.js +21 -0
- package/dist/worker-gate-NRP7CMS7.js +21 -0
- package/dist/workflow-engine-AKKOMJJQ.js +28 -0
- package/dist/workflow-engine-EHWQO3LX.js +28 -0
- package/dist/workflow-engine-EMZ5WMQ5.js +28 -0
- package/dist/workflow-engine-I3OUMSF4.js +28 -0
- package/dist/workflow-engine-PHTLEAXP.js +28 -0
- package/package.json +1 -1
- package/release-notes.json +46 -46
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getActiveAgent
|
|
3
|
+
} from "./chunk-BXCQWWJP.js";
|
|
4
|
+
import {
|
|
5
|
+
listTasks
|
|
6
|
+
} from "./chunk-3FZQAO7A.js";
|
|
7
|
+
import {
|
|
8
|
+
getAgentContext
|
|
9
|
+
} from "./chunk-GJV3WDWM.js";
|
|
10
|
+
import {
|
|
11
|
+
isCoordinatorName
|
|
12
|
+
} from "./chunk-CHBHR5W6.js";
|
|
13
|
+
|
|
14
|
+
// src/mcp/tools/list-tasks.ts
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
function registerListTasks(server) {
|
|
17
|
+
server.registerTool(
|
|
18
|
+
"list_tasks",
|
|
19
|
+
{
|
|
20
|
+
title: "List Tasks",
|
|
21
|
+
description: "Query tasks by assignee, status, project, or priority. Defaults to current project. Pass project_name='all' for all projects. When querying your own tasks, project filter is skipped automatically.",
|
|
22
|
+
inputSchema: {
|
|
23
|
+
assigned_to: z.string().optional().describe("Filter by employee name"),
|
|
24
|
+
status: z.enum(["open", "in_progress", "done", "needs_review", "blocked", "cancelled", "closed"]).optional().describe("Filter by status. Default: active tasks only (excludes closed/cancelled)"),
|
|
25
|
+
project_name: z.string().optional().describe("Project name. Defaults to current project. Pass 'all' for all projects."),
|
|
26
|
+
priority: z.enum(["p0", "p1", "p2"]).optional().describe("Filter by priority"),
|
|
27
|
+
cross_session: z.boolean().optional().describe("When true, return tasks from ALL coordinator sessions (read-only). Default: false.")
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
async ({ assigned_to, status, project_name, priority, cross_session }) => {
|
|
31
|
+
try {
|
|
32
|
+
const { agentId } = getActiveAgent();
|
|
33
|
+
const isReviewQueue = status === "needs_review";
|
|
34
|
+
const shouldDefaultToOwnQueue = !assigned_to && !isReviewQueue && !isCoordinatorName(agentId);
|
|
35
|
+
const effectiveAssignedTo = assigned_to ?? (shouldDefaultToOwnQueue ? agentId : void 0);
|
|
36
|
+
const effectiveReviewer = !assigned_to && isReviewQueue ? agentId : void 0;
|
|
37
|
+
const isOwnQuery = effectiveAssignedTo === agentId;
|
|
38
|
+
const callerSession = getAgentContext()?.sessionHint || process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || null;
|
|
39
|
+
const resolvedProject = project_name && project_name !== "all" ? project_name : null;
|
|
40
|
+
const effectiveCrossSession = cross_session === true;
|
|
41
|
+
const tasks = await listTasks({
|
|
42
|
+
assignedTo: effectiveAssignedTo,
|
|
43
|
+
reviewer: effectiveReviewer,
|
|
44
|
+
status,
|
|
45
|
+
projectName: resolvedProject,
|
|
46
|
+
priority,
|
|
47
|
+
crossSession: effectiveCrossSession,
|
|
48
|
+
isOwnQuery: !!isOwnQuery,
|
|
49
|
+
callerSession
|
|
50
|
+
});
|
|
51
|
+
if (tasks.length === 0) {
|
|
52
|
+
return {
|
|
53
|
+
content: [{ type: "text", text: "No tasks found." }]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const lines = tasks.map((t) => {
|
|
57
|
+
const cpIndicator = t.checkpointCount && t.checkpointCount > 0 ? ` [cp:${t.checkpointCount}]` : "";
|
|
58
|
+
let budgetNote = "";
|
|
59
|
+
if (t.budgetTokens !== null) {
|
|
60
|
+
const pct = Math.round(t.tokensUsed / t.budgetTokens * 100);
|
|
61
|
+
budgetNote = ` [${t.tokensUsed}/${t.budgetTokens} tokens, ${pct}%]`;
|
|
62
|
+
}
|
|
63
|
+
const shortId = t.id.slice(0, 8);
|
|
64
|
+
const sessionNote = cross_session && t.sessionScope ? ` [session:${t.sessionScope}]` : "";
|
|
65
|
+
return `- [${t.priority.toUpperCase()}] ${t.title} (${t.projectName}) \u2014 ${t.status}${cpIndicator}${budgetNote}${sessionNote} \u2192 ${t.assignedTo} [id:${shortId}]`;
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
type: "text",
|
|
71
|
+
text: `${tasks.length} task(s):
|
|
72
|
+
${lines.join("\n")}`
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
};
|
|
76
|
+
} catch (err) {
|
|
77
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: "text", text: `Failed to list tasks: ${msg}` }],
|
|
80
|
+
isError: true
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export {
|
|
88
|
+
registerListTasks
|
|
89
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getCurrentSessionScope,
|
|
3
|
+
strictSessionScopeFilter
|
|
4
|
+
} from "./chunk-3FZQAO7A.js";
|
|
5
|
+
import {
|
|
6
|
+
getProjectName
|
|
7
|
+
} from "./chunk-OPU3NYOO.js";
|
|
8
|
+
|
|
9
|
+
// src/lib/session-events.ts
|
|
10
|
+
import { randomUUID } from "crypto";
|
|
11
|
+
async function ensureSessionEventsTable(client) {
|
|
12
|
+
await client.execute(`
|
|
13
|
+
CREATE TABLE IF NOT EXISTS session_events (
|
|
14
|
+
id TEXT PRIMARY KEY,
|
|
15
|
+
agent_id TEXT NOT NULL,
|
|
16
|
+
agent_role TEXT NOT NULL,
|
|
17
|
+
session_id TEXT NOT NULL,
|
|
18
|
+
session_scope TEXT,
|
|
19
|
+
project_name TEXT NOT NULL,
|
|
20
|
+
event_index INTEGER NOT NULL,
|
|
21
|
+
event_type TEXT NOT NULL,
|
|
22
|
+
tool_name TEXT,
|
|
23
|
+
tool_use_id TEXT,
|
|
24
|
+
content TEXT NOT NULL,
|
|
25
|
+
payload_json TEXT,
|
|
26
|
+
has_error INTEGER NOT NULL DEFAULT 0,
|
|
27
|
+
created_at TEXT NOT NULL
|
|
28
|
+
)
|
|
29
|
+
`);
|
|
30
|
+
await client.execute(`
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_agent_time
|
|
32
|
+
ON session_events(agent_id, created_at DESC)
|
|
33
|
+
`);
|
|
34
|
+
await client.execute(`
|
|
35
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_session_index
|
|
36
|
+
ON session_events(session_id, event_index)
|
|
37
|
+
`);
|
|
38
|
+
await client.execute(`
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_session_events_scope_agent_time
|
|
40
|
+
ON session_events(session_scope, agent_id, created_at DESC)
|
|
41
|
+
`);
|
|
42
|
+
}
|
|
43
|
+
async function recordSessionEvent(client, input) {
|
|
44
|
+
if (!input.content || input.content.trim().length === 0) return;
|
|
45
|
+
await ensureSessionEventsTable(client);
|
|
46
|
+
const maxResult = await client.execute({
|
|
47
|
+
sql: "SELECT COALESCE(MAX(event_index), 0) AS max_index FROM session_events WHERE session_id = ?",
|
|
48
|
+
args: [input.sessionId]
|
|
49
|
+
});
|
|
50
|
+
const currentMax = Number(maxResult.rows[0]?.max_index ?? 0);
|
|
51
|
+
const eventIndex = Number.isFinite(currentMax) ? currentMax + 1 : 1;
|
|
52
|
+
await client.execute({
|
|
53
|
+
sql: `INSERT INTO session_events (
|
|
54
|
+
id, agent_id, agent_role, session_id, session_scope, project_name,
|
|
55
|
+
event_index, event_type, tool_name, tool_use_id, content,
|
|
56
|
+
payload_json, has_error, created_at
|
|
57
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
58
|
+
args: [
|
|
59
|
+
randomUUID(),
|
|
60
|
+
input.agentId,
|
|
61
|
+
input.agentRole,
|
|
62
|
+
input.sessionId,
|
|
63
|
+
input.sessionScope ?? getCurrentSessionScope(),
|
|
64
|
+
input.projectName ?? getProjectName(input.cwd),
|
|
65
|
+
eventIndex,
|
|
66
|
+
input.eventType,
|
|
67
|
+
input.toolName ?? null,
|
|
68
|
+
input.toolUseId ?? null,
|
|
69
|
+
input.content,
|
|
70
|
+
input.payloadJson ?? null,
|
|
71
|
+
input.hasError ? 1 : 0,
|
|
72
|
+
input.timestamp ?? (/* @__PURE__ */ new Date()).toISOString()
|
|
73
|
+
]
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async function listRecentSessionEvents(client, options) {
|
|
77
|
+
await ensureSessionEventsTable(client);
|
|
78
|
+
const conditions = ["agent_id = ?"];
|
|
79
|
+
const args = [options.agentId];
|
|
80
|
+
if (options.sessionId) {
|
|
81
|
+
conditions.push("session_id = ?");
|
|
82
|
+
args.push(options.sessionId);
|
|
83
|
+
}
|
|
84
|
+
if (options.eventType) {
|
|
85
|
+
conditions.push("event_type = ?");
|
|
86
|
+
args.push(options.eventType);
|
|
87
|
+
}
|
|
88
|
+
if (options.projectName && options.projectName !== "all") {
|
|
89
|
+
conditions.push("project_name = ?");
|
|
90
|
+
args.push(options.projectName);
|
|
91
|
+
}
|
|
92
|
+
const scope = strictSessionScopeFilter(options.sessionScope);
|
|
93
|
+
const where = `WHERE ${conditions.join(" AND ")}${scope.sql}`;
|
|
94
|
+
args.push(...scope.args);
|
|
95
|
+
args.push(Math.min(Math.max(options.limit ?? 20, 1), 100));
|
|
96
|
+
const result = await client.execute({
|
|
97
|
+
sql: `SELECT id, agent_id, agent_role, session_id, session_scope,
|
|
98
|
+
project_name, event_index, event_type, tool_name, tool_use_id,
|
|
99
|
+
content, payload_json, has_error, created_at
|
|
100
|
+
FROM session_events
|
|
101
|
+
${where}
|
|
102
|
+
ORDER BY created_at DESC, event_index DESC
|
|
103
|
+
LIMIT ?`,
|
|
104
|
+
args
|
|
105
|
+
});
|
|
106
|
+
return result.rows.map((row) => ({
|
|
107
|
+
id: String(row.id),
|
|
108
|
+
agentId: String(row.agent_id),
|
|
109
|
+
agentRole: String(row.agent_role),
|
|
110
|
+
sessionId: String(row.session_id),
|
|
111
|
+
sessionScope: row.session_scope == null ? null : String(row.session_scope),
|
|
112
|
+
projectName: String(row.project_name),
|
|
113
|
+
eventIndex: Number(row.event_index),
|
|
114
|
+
eventType: String(row.event_type),
|
|
115
|
+
toolName: row.tool_name == null ? null : String(row.tool_name),
|
|
116
|
+
toolUseId: row.tool_use_id == null ? null : String(row.tool_use_id),
|
|
117
|
+
content: String(row.content),
|
|
118
|
+
payloadJson: row.payload_json == null ? null : String(row.payload_json),
|
|
119
|
+
hasError: Number(row.has_error) === 1,
|
|
120
|
+
createdAt: String(row.created_at)
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export {
|
|
125
|
+
ensureSessionEventsTable,
|
|
126
|
+
recordSessionEvent,
|
|
127
|
+
listRecentSessionEvents
|
|
128
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getActiveAgent
|
|
3
|
+
} from "./chunk-BXCQWWJP.js";
|
|
4
|
+
import {
|
|
5
|
+
listTasks
|
|
6
|
+
} from "./chunk-YHSATGMH.js";
|
|
7
|
+
import {
|
|
8
|
+
getAgentContext
|
|
9
|
+
} from "./chunk-GJV3WDWM.js";
|
|
10
|
+
import {
|
|
11
|
+
isCoordinatorName
|
|
12
|
+
} from "./chunk-CHBHR5W6.js";
|
|
13
|
+
|
|
14
|
+
// src/mcp/tools/list-tasks.ts
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
function registerListTasks(server) {
|
|
17
|
+
server.registerTool(
|
|
18
|
+
"list_tasks",
|
|
19
|
+
{
|
|
20
|
+
title: "List Tasks",
|
|
21
|
+
description: "Query tasks by assignee, status, project, or priority. Defaults to current project. Pass project_name='all' for all projects. When querying your own tasks, project filter is skipped automatically.",
|
|
22
|
+
inputSchema: {
|
|
23
|
+
assigned_to: z.string().optional().describe("Filter by employee name"),
|
|
24
|
+
status: z.enum(["open", "in_progress", "done", "needs_review", "blocked", "cancelled", "closed"]).optional().describe("Filter by status. Default: active tasks only (excludes closed/cancelled)"),
|
|
25
|
+
project_name: z.string().optional().describe("Project name. Defaults to current project. Pass 'all' for all projects."),
|
|
26
|
+
priority: z.enum(["p0", "p1", "p2"]).optional().describe("Filter by priority"),
|
|
27
|
+
cross_session: z.boolean().optional().describe("When true, return tasks from ALL coordinator sessions (read-only). Default: false.")
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
async ({ assigned_to, status, project_name, priority, cross_session }) => {
|
|
31
|
+
try {
|
|
32
|
+
const { agentId } = getActiveAgent();
|
|
33
|
+
const isReviewQueue = status === "needs_review";
|
|
34
|
+
const shouldDefaultToOwnQueue = !assigned_to && !isReviewQueue && !isCoordinatorName(agentId);
|
|
35
|
+
const effectiveAssignedTo = assigned_to ?? (shouldDefaultToOwnQueue ? agentId : void 0);
|
|
36
|
+
const effectiveReviewer = !assigned_to && isReviewQueue ? agentId : void 0;
|
|
37
|
+
const isOwnQuery = effectiveAssignedTo === agentId;
|
|
38
|
+
const callerSession = getAgentContext()?.sessionHint || process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || null;
|
|
39
|
+
const resolvedProject = project_name && project_name !== "all" ? project_name : null;
|
|
40
|
+
const effectiveCrossSession = cross_session === true;
|
|
41
|
+
const tasks = await listTasks({
|
|
42
|
+
assignedTo: effectiveAssignedTo,
|
|
43
|
+
reviewer: effectiveReviewer,
|
|
44
|
+
status,
|
|
45
|
+
projectName: resolvedProject,
|
|
46
|
+
priority,
|
|
47
|
+
crossSession: effectiveCrossSession,
|
|
48
|
+
isOwnQuery: !!isOwnQuery,
|
|
49
|
+
callerSession
|
|
50
|
+
});
|
|
51
|
+
if (tasks.length === 0) {
|
|
52
|
+
return {
|
|
53
|
+
content: [{ type: "text", text: "No tasks found." }]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const lines = tasks.map((t) => {
|
|
57
|
+
const cpIndicator = t.checkpointCount && t.checkpointCount > 0 ? ` [cp:${t.checkpointCount}]` : "";
|
|
58
|
+
let budgetNote = "";
|
|
59
|
+
if (t.budgetTokens !== null) {
|
|
60
|
+
const pct = Math.round(t.tokensUsed / t.budgetTokens * 100);
|
|
61
|
+
budgetNote = ` [${t.tokensUsed}/${t.budgetTokens} tokens, ${pct}%]`;
|
|
62
|
+
}
|
|
63
|
+
const shortId = t.id.slice(0, 8);
|
|
64
|
+
const sessionNote = cross_session && t.sessionScope ? ` [session:${t.sessionScope}]` : "";
|
|
65
|
+
return `- [${t.priority.toUpperCase()}] ${t.title} (${t.projectName}) \u2014 ${t.status}${cpIndicator}${budgetNote}${sessionNote} \u2192 ${t.assignedTo} [id:${shortId}]`;
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
type: "text",
|
|
71
|
+
text: `${tasks.length} task(s):
|
|
72
|
+
${lines.join("\n")}`
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
};
|
|
76
|
+
} catch (err) {
|
|
77
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: "text", text: `Failed to list tasks: ${msg}` }],
|
|
80
|
+
isError: true
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export {
|
|
88
|
+
registerListTasks
|
|
89
|
+
};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EXE_AI_DIR
|
|
3
|
+
} from "./chunk-VXIMSRTO.js";
|
|
4
|
+
|
|
5
|
+
// src/lib/worker-gate.ts
|
|
6
|
+
import { readdirSync, writeFileSync, unlinkSync, mkdirSync, existsSync, readFileSync } from "fs";
|
|
7
|
+
import path from "path";
|
|
8
|
+
var WORKER_PID_DIR = path.join(EXE_AI_DIR, "worker-pids");
|
|
9
|
+
var MAX_CONCURRENT_WORKERS = 3;
|
|
10
|
+
function tryAcquireWorkerSlot() {
|
|
11
|
+
try {
|
|
12
|
+
mkdirSync(WORKER_PID_DIR, { recursive: true });
|
|
13
|
+
const reservationId = `res-${process.pid}-${Date.now()}`;
|
|
14
|
+
const reservationPath = path.join(WORKER_PID_DIR, `${reservationId}.pid`);
|
|
15
|
+
writeFileSync(reservationPath, String(process.pid));
|
|
16
|
+
const files = readdirSync(WORKER_PID_DIR);
|
|
17
|
+
let alive = 0;
|
|
18
|
+
for (const f of files) {
|
|
19
|
+
if (!f.endsWith(".pid")) continue;
|
|
20
|
+
if (f.startsWith("res-")) {
|
|
21
|
+
const resParts = f.replace(".pid", "").split("-");
|
|
22
|
+
const resPid = parseInt(resParts[1] ?? "", 10);
|
|
23
|
+
if (!isNaN(resPid) && resPid > 0) {
|
|
24
|
+
try {
|
|
25
|
+
process.kill(resPid, 0);
|
|
26
|
+
alive++;
|
|
27
|
+
} catch {
|
|
28
|
+
try {
|
|
29
|
+
unlinkSync(path.join(WORKER_PID_DIR, f));
|
|
30
|
+
} catch {
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
} else {
|
|
34
|
+
alive++;
|
|
35
|
+
}
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const dashIdx = f.lastIndexOf("-");
|
|
39
|
+
const pid = parseInt(f.slice(dashIdx + 1).replace(".pid", ""), 10);
|
|
40
|
+
if (isNaN(pid)) continue;
|
|
41
|
+
try {
|
|
42
|
+
process.kill(pid, 0);
|
|
43
|
+
alive++;
|
|
44
|
+
} catch {
|
|
45
|
+
try {
|
|
46
|
+
unlinkSync(path.join(WORKER_PID_DIR, f));
|
|
47
|
+
} catch {
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (alive >= MAX_CONCURRENT_WORKERS) {
|
|
52
|
+
try {
|
|
53
|
+
unlinkSync(reservationPath);
|
|
54
|
+
} catch {
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
unlinkSync(reservationPath);
|
|
60
|
+
} catch {
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
} catch {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function registerWorkerPid(pid) {
|
|
68
|
+
try {
|
|
69
|
+
mkdirSync(WORKER_PID_DIR, { recursive: true });
|
|
70
|
+
writeFileSync(path.join(WORKER_PID_DIR, `worker-${pid}.pid`), String(pid));
|
|
71
|
+
} catch {
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function cleanupWorkerPid() {
|
|
75
|
+
try {
|
|
76
|
+
unlinkSync(path.join(WORKER_PID_DIR, `worker-${process.pid}.pid`));
|
|
77
|
+
} catch {
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
var BACKFILL_LOCK = path.join(WORKER_PID_DIR, "backfill.lock");
|
|
81
|
+
function tryAcquireBackfillLock() {
|
|
82
|
+
try {
|
|
83
|
+
mkdirSync(WORKER_PID_DIR, { recursive: true });
|
|
84
|
+
if (existsSync(BACKFILL_LOCK)) {
|
|
85
|
+
try {
|
|
86
|
+
const pid = parseInt(
|
|
87
|
+
readFileSync(BACKFILL_LOCK, "utf8").trim(),
|
|
88
|
+
10
|
|
89
|
+
);
|
|
90
|
+
if (!isNaN(pid) && pid > 0) {
|
|
91
|
+
try {
|
|
92
|
+
process.kill(pid, 0);
|
|
93
|
+
return false;
|
|
94
|
+
} catch {
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
} catch {
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
writeFileSync(BACKFILL_LOCK, String(process.pid));
|
|
101
|
+
return true;
|
|
102
|
+
} catch {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function releaseBackfillLock() {
|
|
107
|
+
try {
|
|
108
|
+
unlinkSync(BACKFILL_LOCK);
|
|
109
|
+
} catch {
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async function getTaskAwareCapacity() {
|
|
113
|
+
const { getClient } = await import("./lib/database.js");
|
|
114
|
+
const { sessionScopeFilter } = await import("./task-scope-DRQRNWB7.js");
|
|
115
|
+
const client = getClient();
|
|
116
|
+
const scope = sessionScopeFilter();
|
|
117
|
+
const result = await client.execute({
|
|
118
|
+
sql: `SELECT assigned_to, COUNT(*) as cnt
|
|
119
|
+
FROM tasks
|
|
120
|
+
WHERE status IN ('open', 'in_progress')${scope.sql}
|
|
121
|
+
GROUP BY assigned_to`,
|
|
122
|
+
args: [...scope.args]
|
|
123
|
+
});
|
|
124
|
+
const busyAgents = [];
|
|
125
|
+
let totalInProgress = 0;
|
|
126
|
+
for (const row of result.rows) {
|
|
127
|
+
const agent = String(row.assigned_to ?? "");
|
|
128
|
+
const count = Number(row.cnt ?? 0);
|
|
129
|
+
if (agent && count > 0) {
|
|
130
|
+
busyAgents.push(agent);
|
|
131
|
+
totalInProgress += count;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const idleAgents = [];
|
|
135
|
+
try {
|
|
136
|
+
const { listTmuxSessions } = await import("./lib/tmux-status.js");
|
|
137
|
+
const { isExeSession } = await import("./lib/tmux-routing.js");
|
|
138
|
+
const { baseAgentName } = await import("./lib/employees.js");
|
|
139
|
+
const liveSessions = listTmuxSessions().filter((s) => !isExeSession(s) && s.includes("-"));
|
|
140
|
+
const liveAgentNames = new Set(liveSessions.map((s) => baseAgentName(s.split("-")[0] ?? "")));
|
|
141
|
+
for (const name of liveAgentNames) {
|
|
142
|
+
if (name && !busyAgents.includes(name)) {
|
|
143
|
+
idleAgents.push(name);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
} catch {
|
|
147
|
+
}
|
|
148
|
+
return { busyAgents, idleAgents, totalInProgress };
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export {
|
|
152
|
+
MAX_CONCURRENT_WORKERS,
|
|
153
|
+
tryAcquireWorkerSlot,
|
|
154
|
+
registerWorkerPid,
|
|
155
|
+
cleanupWorkerPid,
|
|
156
|
+
tryAcquireBackfillLock,
|
|
157
|
+
releaseBackfillLock,
|
|
158
|
+
getTaskAwareCapacity
|
|
159
|
+
};
|