@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,50 @@
|
|
|
1
|
+
import {
|
|
2
|
+
sendMessage
|
|
3
|
+
} from "./chunk-6D64562N.js";
|
|
4
|
+
import {
|
|
5
|
+
getActiveAgent
|
|
6
|
+
} from "./chunk-BXCQWWJP.js";
|
|
7
|
+
|
|
8
|
+
// src/mcp/tools/send-message.ts
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
function registerSendMessage(server) {
|
|
11
|
+
server.registerTool(
|
|
12
|
+
"send_message",
|
|
13
|
+
{
|
|
14
|
+
title: "Send Message",
|
|
15
|
+
description: "Send a structured message to another agent. Messages are queued and delivered via intercom. NOTE: messages are fire-and-forget \u2014 do NOT use for actionable work dispatch. Use create_task instead to assign work to employees.",
|
|
16
|
+
inputSchema: {
|
|
17
|
+
target_agent: z.string().describe("Recipient agent name"),
|
|
18
|
+
content: z.string().describe("Message content"),
|
|
19
|
+
target_project: z.string().optional().describe("Project context (optional)"),
|
|
20
|
+
priority: z.enum(["normal", "urgent"]).default("normal").describe("Message priority (default: normal)"),
|
|
21
|
+
target_device: z.string().optional().describe("Target device ID for cross-machine delivery (default: local)")
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
async ({ target_agent, content, target_project, priority, target_device }) => {
|
|
25
|
+
const { agentId } = getActiveAgent();
|
|
26
|
+
const msg = await sendMessage({
|
|
27
|
+
fromAgent: agentId,
|
|
28
|
+
targetAgent: target_agent,
|
|
29
|
+
targetProject: target_project,
|
|
30
|
+
targetDevice: target_device,
|
|
31
|
+
content,
|
|
32
|
+
priority
|
|
33
|
+
});
|
|
34
|
+
const statusText = msg.status === "delivered" ? "delivered" : msg.status === "failed" ? `failed: ${msg.failureReason}` : "queued (pending delivery)";
|
|
35
|
+
return {
|
|
36
|
+
content: [
|
|
37
|
+
{
|
|
38
|
+
type: "text",
|
|
39
|
+
text: `Message sent to ${target_agent}: ${statusText}
|
|
40
|
+
ID: ${msg.id}`
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export {
|
|
49
|
+
registerSendMessage
|
|
50
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// src/bin/fast-db-init.ts
|
|
2
|
+
async function fastDbInit() {
|
|
3
|
+
const { isInitialized, getClient, setExternalClient } = await import("./lib/database.js");
|
|
4
|
+
if (isInitialized()) {
|
|
5
|
+
return getClient();
|
|
6
|
+
}
|
|
7
|
+
const forceDirect = process.env.EXE_DB_DIRECT === "1" || process.env.EXE_DB_READONLY === "1" || process.env.EXE_SKIP_DAEMON === "1";
|
|
8
|
+
if (!forceDirect) {
|
|
9
|
+
try {
|
|
10
|
+
const { connectEmbedDaemon, sendDaemonRequest, isClientConnected, disconnectClient } = await import("./lib/exe-daemon-client.js");
|
|
11
|
+
const { deserializeResultSet } = await import("./daemon-protocol-XW2OLNBS.js");
|
|
12
|
+
await Promise.race([
|
|
13
|
+
connectEmbedDaemon(),
|
|
14
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error("Daemon socket timeout (2s)")), 2e3))
|
|
15
|
+
]);
|
|
16
|
+
if (isClientConnected()) {
|
|
17
|
+
const daemonClient = {
|
|
18
|
+
async execute(stmt) {
|
|
19
|
+
const sql = typeof stmt === "string" ? stmt : stmt.sql;
|
|
20
|
+
const args = typeof stmt === "string" ? [] : Array.isArray(stmt.args) ? stmt.args : [];
|
|
21
|
+
const resp = await sendDaemonRequest({ type: "db-execute", sql, args });
|
|
22
|
+
if (resp.error) throw new Error(String(resp.error));
|
|
23
|
+
if (resp.db) return deserializeResultSet(resp.db);
|
|
24
|
+
throw new Error("Unexpected daemon response");
|
|
25
|
+
},
|
|
26
|
+
async batch(stmts, mode) {
|
|
27
|
+
const statements = stmts.map((s) => {
|
|
28
|
+
const sql = typeof s === "string" ? s : s.sql;
|
|
29
|
+
const args = typeof s === "string" ? [] : Array.isArray(s.args) ? s.args : [];
|
|
30
|
+
return { sql, args };
|
|
31
|
+
});
|
|
32
|
+
const resp = await sendDaemonRequest({ type: "db-batch", statements, mode: mode ?? "deferred" });
|
|
33
|
+
if (resp.error) throw new Error(String(resp.error));
|
|
34
|
+
const batchResults = resp["db-batch"];
|
|
35
|
+
if (batchResults) return batchResults.map(deserializeResultSet);
|
|
36
|
+
throw new Error("Unexpected daemon batch response");
|
|
37
|
+
},
|
|
38
|
+
async transaction(_mode) {
|
|
39
|
+
throw new Error("Transactions not supported via daemon socket");
|
|
40
|
+
},
|
|
41
|
+
async executeMultiple(_sql) {
|
|
42
|
+
throw new Error("executeMultiple not supported via daemon socket");
|
|
43
|
+
},
|
|
44
|
+
async migrate(_stmts) {
|
|
45
|
+
throw new Error("migrate not supported via daemon socket");
|
|
46
|
+
},
|
|
47
|
+
sync() {
|
|
48
|
+
return Promise.resolve(void 0);
|
|
49
|
+
},
|
|
50
|
+
close() {
|
|
51
|
+
},
|
|
52
|
+
get closed() {
|
|
53
|
+
return false;
|
|
54
|
+
},
|
|
55
|
+
get protocol() {
|
|
56
|
+
return "file";
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
await daemonClient.execute("SELECT 1");
|
|
61
|
+
} catch {
|
|
62
|
+
try {
|
|
63
|
+
disconnectClient();
|
|
64
|
+
} catch {
|
|
65
|
+
}
|
|
66
|
+
throw new Error("Daemon socket validation failed");
|
|
67
|
+
}
|
|
68
|
+
setExternalClient(daemonClient);
|
|
69
|
+
return daemonClient;
|
|
70
|
+
}
|
|
71
|
+
} catch {
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const { initStore } = await import("./lib/store.js");
|
|
75
|
+
await initStore({ lightweight: true });
|
|
76
|
+
return getClient();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
fastDbInit
|
|
81
|
+
};
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
import {
|
|
2
|
+
employeeSessionName,
|
|
3
|
+
isEmployeeAlive,
|
|
4
|
+
resolveExeSession,
|
|
5
|
+
sendIntercom,
|
|
6
|
+
strictSessionScopeFilter
|
|
7
|
+
} from "./chunk-3FZQAO7A.js";
|
|
8
|
+
import {
|
|
9
|
+
parseMessage,
|
|
10
|
+
serializeMessage
|
|
11
|
+
} from "./chunk-4JERP7NT.js";
|
|
12
|
+
import {
|
|
13
|
+
recordOrchestrationEventBestEffort
|
|
14
|
+
} from "./chunk-2NQQP3FF.js";
|
|
15
|
+
import {
|
|
16
|
+
getClient
|
|
17
|
+
} from "./chunk-CHBHR5W6.js";
|
|
18
|
+
|
|
19
|
+
// src/lib/messaging.ts
|
|
20
|
+
import crypto from "crypto";
|
|
21
|
+
function generateUlid() {
|
|
22
|
+
const timestamp = Date.now().toString(36).padStart(10, "0");
|
|
23
|
+
const random = crypto.randomBytes(10).toString("hex").slice(0, 16);
|
|
24
|
+
return (timestamp + random).toUpperCase();
|
|
25
|
+
}
|
|
26
|
+
function rowToMessage(row) {
|
|
27
|
+
return {
|
|
28
|
+
id: row.id,
|
|
29
|
+
fromAgent: row.from_agent,
|
|
30
|
+
fromDevice: row.from_device,
|
|
31
|
+
targetAgent: row.target_agent,
|
|
32
|
+
targetProject: row.target_project ?? null,
|
|
33
|
+
targetDevice: row.target_device,
|
|
34
|
+
sessionScope: row.session_scope ?? null,
|
|
35
|
+
content: row.content,
|
|
36
|
+
priority: row.priority ?? "normal",
|
|
37
|
+
status: row.status ?? "pending",
|
|
38
|
+
serverSeq: row.server_seq != null ? Number(row.server_seq) : null,
|
|
39
|
+
retryCount: Number(row.retry_count ?? 0),
|
|
40
|
+
createdAt: row.created_at,
|
|
41
|
+
deliveredAt: row.delivered_at ?? null,
|
|
42
|
+
processedAt: row.processed_at ?? null,
|
|
43
|
+
failedAt: row.failed_at ?? null,
|
|
44
|
+
failureReason: row.failure_reason ?? null
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
var MAX_RETRIES = 10;
|
|
48
|
+
async function countUnreadMessages(targetAgent, sessionScope) {
|
|
49
|
+
const client = getClient();
|
|
50
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
51
|
+
const result = await client.execute({
|
|
52
|
+
sql: `SELECT COUNT(*) AS count FROM messages
|
|
53
|
+
WHERE target_agent = ? AND status IN ('pending', 'delivered')${scope.sql}`,
|
|
54
|
+
args: [targetAgent, ...scope.args]
|
|
55
|
+
});
|
|
56
|
+
return Number(result.rows[0]?.count ?? 0);
|
|
57
|
+
}
|
|
58
|
+
async function sendMessage(input) {
|
|
59
|
+
const client = getClient();
|
|
60
|
+
const id = generateUlid();
|
|
61
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
62
|
+
const targetDevice = input.targetDevice ?? "local";
|
|
63
|
+
const sessionScope = input.sessionScope === void 0 ? resolveExeSession() : input.sessionScope;
|
|
64
|
+
await client.execute({
|
|
65
|
+
sql: `INSERT INTO messages (id, from_agent, from_device, target_agent, target_project, target_device, session_scope, content, priority, status, founder_id, created_at)
|
|
66
|
+
VALUES (?, ?, 'local', ?, ?, ?, ?, ?, ?, 'pending', ?, ?)`,
|
|
67
|
+
args: [
|
|
68
|
+
id,
|
|
69
|
+
input.fromAgent,
|
|
70
|
+
input.targetAgent,
|
|
71
|
+
input.targetProject ?? null,
|
|
72
|
+
targetDevice,
|
|
73
|
+
sessionScope,
|
|
74
|
+
input.content,
|
|
75
|
+
input.priority ?? "normal",
|
|
76
|
+
input.founderId ?? null,
|
|
77
|
+
now
|
|
78
|
+
]
|
|
79
|
+
});
|
|
80
|
+
recordOrchestrationEventBestEffort({
|
|
81
|
+
eventType: "message.sent",
|
|
82
|
+
source: "messaging.sendMessage",
|
|
83
|
+
agentId: input.fromAgent,
|
|
84
|
+
payload: { targetAgent: input.targetAgent, priority: input.priority ?? "normal", targetDevice },
|
|
85
|
+
sessionScope: sessionScope ?? null
|
|
86
|
+
});
|
|
87
|
+
try {
|
|
88
|
+
if (targetDevice !== "local") {
|
|
89
|
+
await deliverCrossMachineMessage(id, targetDevice);
|
|
90
|
+
} else {
|
|
91
|
+
await deliverLocalMessage(id);
|
|
92
|
+
}
|
|
93
|
+
} catch {
|
|
94
|
+
}
|
|
95
|
+
const sentScope = strictSessionScopeFilter(sessionScope);
|
|
96
|
+
const result = await client.execute({
|
|
97
|
+
sql: `SELECT * FROM messages WHERE id = ?${sentScope.sql}`,
|
|
98
|
+
args: [id, ...sentScope.args]
|
|
99
|
+
});
|
|
100
|
+
return rowToMessage(result.rows[0]);
|
|
101
|
+
}
|
|
102
|
+
var _wsClientSend = null;
|
|
103
|
+
function setWsClientSend(fn) {
|
|
104
|
+
_wsClientSend = fn;
|
|
105
|
+
}
|
|
106
|
+
async function deliverCrossMachineMessage(messageId, targetDevice) {
|
|
107
|
+
const client = getClient();
|
|
108
|
+
const result = await client.execute({
|
|
109
|
+
sql: "SELECT * FROM messages WHERE id = ?",
|
|
110
|
+
args: [messageId]
|
|
111
|
+
});
|
|
112
|
+
if (result.rows.length === 0) return false;
|
|
113
|
+
const msg = rowToMessage(result.rows[0]);
|
|
114
|
+
if (msg.status !== "pending") return false;
|
|
115
|
+
if (!_wsClientSend) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
const payload = JSON.stringify({
|
|
119
|
+
id: msg.id,
|
|
120
|
+
fromAgent: msg.fromAgent,
|
|
121
|
+
targetAgent: msg.targetAgent,
|
|
122
|
+
targetProject: msg.targetProject,
|
|
123
|
+
sessionScope: msg.sessionScope,
|
|
124
|
+
content: msg.content,
|
|
125
|
+
priority: msg.priority,
|
|
126
|
+
createdAt: msg.createdAt
|
|
127
|
+
});
|
|
128
|
+
const sent = _wsClientSend(targetDevice, payload);
|
|
129
|
+
if (sent) {
|
|
130
|
+
await client.execute({
|
|
131
|
+
sql: "UPDATE messages SET status = 'synced' WHERE id = ?",
|
|
132
|
+
args: [messageId]
|
|
133
|
+
});
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
async function deliverLocalMessage(messageId) {
|
|
139
|
+
const client = getClient();
|
|
140
|
+
const result = await client.execute({
|
|
141
|
+
sql: "SELECT * FROM messages WHERE id = ?",
|
|
142
|
+
args: [messageId]
|
|
143
|
+
});
|
|
144
|
+
if (result.rows.length === 0) return false;
|
|
145
|
+
const msg = rowToMessage(result.rows[0]);
|
|
146
|
+
if (msg.status !== "pending") return false;
|
|
147
|
+
const targetAgent = msg.targetAgent;
|
|
148
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
149
|
+
try {
|
|
150
|
+
const exeSession = resolveExeSession();
|
|
151
|
+
if (!exeSession) {
|
|
152
|
+
throw new Error("No coordinator session found");
|
|
153
|
+
}
|
|
154
|
+
process.stderr.write(`[messaging] ENTER deliverLocal: target=${targetAgent} exeSession=${exeSession}
|
|
155
|
+
`);
|
|
156
|
+
const { isCoordinatorName: isCoord } = await import("./lib/employees.js");
|
|
157
|
+
const isCOO = isCoord(targetAgent);
|
|
158
|
+
process.stderr.write(`[messaging] COO check: targetAgent="${targetAgent}" isCOO=${isCOO}
|
|
159
|
+
`);
|
|
160
|
+
const sessionName = isCOO ? exeSession : employeeSessionName(targetAgent, exeSession);
|
|
161
|
+
process.stderr.write(`[messaging] delivery attempt: target=${targetAgent} session=${sessionName} isCOO=${isCOO}
|
|
162
|
+
`);
|
|
163
|
+
if (!isCOO && !isEmployeeAlive(sessionName)) {
|
|
164
|
+
throw new Error("Session not running \u2014 message stays queued");
|
|
165
|
+
}
|
|
166
|
+
const unreadCount = await countUnreadMessages(targetAgent, msg.sessionScope);
|
|
167
|
+
if (unreadCount <= 0) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
const intercomResult = sendIntercom(sessionName, { force: true, reason: "message" });
|
|
171
|
+
process.stderr.write(`[messaging] intercom result for ${sessionName}: ${intercomResult}
|
|
172
|
+
`);
|
|
173
|
+
await client.execute({
|
|
174
|
+
sql: "UPDATE messages SET status = 'delivered', delivered_at = ? WHERE id = ?",
|
|
175
|
+
args: [now, messageId]
|
|
176
|
+
});
|
|
177
|
+
recordOrchestrationEventBestEffort({
|
|
178
|
+
eventType: "message.delivered",
|
|
179
|
+
source: "messaging.deliverLocalMessage",
|
|
180
|
+
agentId: msg.targetAgent,
|
|
181
|
+
payload: { fromAgent: msg.fromAgent, priority: msg.priority }
|
|
182
|
+
});
|
|
183
|
+
return true;
|
|
184
|
+
} catch (err) {
|
|
185
|
+
process.stderr.write(
|
|
186
|
+
`[messaging] delivery failed for message ${messageId}: ${err instanceof Error ? err.message : String(err)}
|
|
187
|
+
`
|
|
188
|
+
);
|
|
189
|
+
const newRetryCount = msg.retryCount + 1;
|
|
190
|
+
if (newRetryCount >= MAX_RETRIES) {
|
|
191
|
+
await markFailed(messageId, "session unavailable after 10 retries", msg.sessionScope);
|
|
192
|
+
} else {
|
|
193
|
+
await client.execute({
|
|
194
|
+
sql: "UPDATE messages SET retry_count = ? WHERE id = ?",
|
|
195
|
+
args: [newRetryCount, messageId]
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async function getPendingMessages(targetAgent, sessionScope) {
|
|
202
|
+
const client = getClient();
|
|
203
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
204
|
+
const result = await client.execute({
|
|
205
|
+
sql: `SELECT * FROM messages
|
|
206
|
+
WHERE target_agent = ? AND status IN ('pending', 'delivered')${scope.sql}
|
|
207
|
+
ORDER BY id`,
|
|
208
|
+
args: [targetAgent, ...scope.args]
|
|
209
|
+
});
|
|
210
|
+
return result.rows.map((row) => rowToMessage(row));
|
|
211
|
+
}
|
|
212
|
+
async function markRead(messageId, sessionScope) {
|
|
213
|
+
const client = getClient();
|
|
214
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
215
|
+
await client.execute({
|
|
216
|
+
sql: `UPDATE messages SET status = 'read'
|
|
217
|
+
WHERE id = ? AND status IN ('pending', 'delivered')${scope.sql}`,
|
|
218
|
+
args: [messageId, ...scope.args]
|
|
219
|
+
});
|
|
220
|
+
recordOrchestrationEventBestEffort({
|
|
221
|
+
eventType: "message.read",
|
|
222
|
+
source: "messaging.markRead",
|
|
223
|
+
payload: { messageId }
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
async function markAcknowledged(messageId, sessionScope) {
|
|
227
|
+
const client = getClient();
|
|
228
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
229
|
+
await client.execute({
|
|
230
|
+
sql: `UPDATE messages SET status = 'acknowledged', processed_at = ?
|
|
231
|
+
WHERE id = ? AND status = 'read'${scope.sql}`,
|
|
232
|
+
args: [(/* @__PURE__ */ new Date()).toISOString(), messageId, ...scope.args]
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
async function markProcessed(messageId, sessionScope) {
|
|
236
|
+
const client = getClient();
|
|
237
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
238
|
+
await client.execute({
|
|
239
|
+
sql: `UPDATE messages SET status = 'processed', processed_at = ?
|
|
240
|
+
WHERE id = ?${scope.sql}`,
|
|
241
|
+
args: [(/* @__PURE__ */ new Date()).toISOString(), messageId, ...scope.args]
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
async function getMessageStatus(messageId, sessionScope) {
|
|
245
|
+
const client = getClient();
|
|
246
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
247
|
+
const result = await client.execute({
|
|
248
|
+
sql: `SELECT status FROM messages WHERE id = ?${scope.sql}`,
|
|
249
|
+
args: [messageId, ...scope.args]
|
|
250
|
+
});
|
|
251
|
+
return result.rows[0]?.status ?? null;
|
|
252
|
+
}
|
|
253
|
+
async function getUnacknowledgedMessages(targetAgent, sessionScope) {
|
|
254
|
+
const client = getClient();
|
|
255
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
256
|
+
const result = await client.execute({
|
|
257
|
+
sql: `SELECT * FROM messages
|
|
258
|
+
WHERE target_agent = ? AND status IN ('pending', 'delivered', 'read')${scope.sql}
|
|
259
|
+
ORDER BY id`,
|
|
260
|
+
args: [targetAgent, ...scope.args]
|
|
261
|
+
});
|
|
262
|
+
return result.rows.map((row) => rowToMessage(row));
|
|
263
|
+
}
|
|
264
|
+
async function getReadMessages(targetAgent, sessionScope) {
|
|
265
|
+
const client = getClient();
|
|
266
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
267
|
+
const result = await client.execute({
|
|
268
|
+
sql: `SELECT * FROM messages
|
|
269
|
+
WHERE target_agent = ? AND status = 'read'${scope.sql}
|
|
270
|
+
ORDER BY id`,
|
|
271
|
+
args: [targetAgent, ...scope.args]
|
|
272
|
+
});
|
|
273
|
+
return result.rows.map((row) => rowToMessage(row));
|
|
274
|
+
}
|
|
275
|
+
async function markFailed(messageId, reason, sessionScope) {
|
|
276
|
+
const client = getClient();
|
|
277
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
278
|
+
await client.execute({
|
|
279
|
+
sql: `UPDATE messages SET status = 'failed', failed_at = ?, failure_reason = ?
|
|
280
|
+
WHERE id = ?${scope.sql}`,
|
|
281
|
+
args: [(/* @__PURE__ */ new Date()).toISOString(), reason, messageId, ...scope.args]
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
async function getFailedMessages(sessionScope) {
|
|
285
|
+
const client = getClient();
|
|
286
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
287
|
+
const result = await client.execute({
|
|
288
|
+
sql: `SELECT * FROM messages WHERE status = 'failed'${scope.sql} ORDER BY created_at DESC`,
|
|
289
|
+
args: [...scope.args]
|
|
290
|
+
});
|
|
291
|
+
return result.rows.map((row) => rowToMessage(row));
|
|
292
|
+
}
|
|
293
|
+
async function retryPendingMessages(sessionScope) {
|
|
294
|
+
const client = getClient();
|
|
295
|
+
const scope = strictSessionScopeFilter(sessionScope);
|
|
296
|
+
const result = await client.execute({
|
|
297
|
+
sql: `SELECT * FROM messages
|
|
298
|
+
WHERE status = 'pending' AND retry_count < ?${scope.sql}
|
|
299
|
+
ORDER BY id`,
|
|
300
|
+
args: [MAX_RETRIES, ...scope.args]
|
|
301
|
+
});
|
|
302
|
+
let delivered = 0;
|
|
303
|
+
for (const row of result.rows) {
|
|
304
|
+
const msg = rowToMessage(row);
|
|
305
|
+
try {
|
|
306
|
+
const success = await deliverLocalMessage(msg.id);
|
|
307
|
+
if (success) delivered++;
|
|
308
|
+
} catch {
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return delivered;
|
|
312
|
+
}
|
|
313
|
+
async function sendTypedMessage(envelope, targetAgent, opts) {
|
|
314
|
+
return sendMessage({
|
|
315
|
+
fromAgent: envelope.from,
|
|
316
|
+
targetAgent,
|
|
317
|
+
targetProject: opts?.targetProject,
|
|
318
|
+
targetDevice: opts?.targetDevice,
|
|
319
|
+
content: serializeMessage(envelope),
|
|
320
|
+
priority: opts?.priority,
|
|
321
|
+
sessionScope: opts?.sessionScope
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
function parseIncomingMessage(content) {
|
|
325
|
+
return parseMessage(content);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export {
|
|
329
|
+
countUnreadMessages,
|
|
330
|
+
sendMessage,
|
|
331
|
+
setWsClientSend,
|
|
332
|
+
deliverLocalMessage,
|
|
333
|
+
getPendingMessages,
|
|
334
|
+
markRead,
|
|
335
|
+
markAcknowledged,
|
|
336
|
+
markProcessed,
|
|
337
|
+
getMessageStatus,
|
|
338
|
+
getUnacknowledgedMessages,
|
|
339
|
+
getReadMessages,
|
|
340
|
+
markFailed,
|
|
341
|
+
getFailedMessages,
|
|
342
|
+
retryPendingMessages,
|
|
343
|
+
sendTypedMessage,
|
|
344
|
+
parseIncomingMessage
|
|
345
|
+
};
|