@askexenow/exe-os 0.9.140 → 0.9.142
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-GFBVE3ES.js → active-agent-OTOFSYIV.js} +6 -4
- package/dist/{active-agent-M3ZT74AM.js → active-agent-PNV6PKJK.js} +6 -4
- package/dist/{agentic-ontology-QRNPGDIM.js → agentic-ontology-GYJZMRNB.js} +1 -1
- package/dist/{backfill-metadata-DI7R3MXV.js → backfill-metadata-EDLDTB2G.js} +9 -11
- package/dist/{background-jobs-LUEOBAVF.js → background-jobs-TBUOKMJR.js} +3 -3
- package/dist/{behaviors-KTEEQ3KG.js → behaviors-GE4RY2HA.js} +5 -6
- package/dist/bin/age-ontology-load.js +3 -3
- package/dist/bin/agentic-ontology-backfill.js +9 -10
- package/dist/bin/agentic-reflection-backfill.js +10 -11
- package/dist/bin/agentic-semantic-label.js +9 -10
- package/dist/bin/backfill-conversations.js +11 -13
- package/dist/bin/backfill-responses.js +11 -13
- package/dist/bin/backfill-vectors.js +11 -12
- package/dist/bin/bulk-sync-postgres.js +10 -11
- package/dist/bin/cc-doctor.js +4 -4
- package/dist/bin/cleanup-stale-review-tasks.js +11 -12
- package/dist/bin/cli.js +18 -18
- package/dist/bin/exe-agent-config.js +6 -4
- package/dist/bin/exe-agent.js +7 -8
- package/dist/bin/exe-assign.js +12 -13
- package/dist/bin/exe-boot.js +23 -25
- package/dist/bin/exe-call.js +8 -9
- package/dist/bin/exe-cloud.js +9 -10
- package/dist/bin/exe-dispatch.js +11 -12
- package/dist/bin/exe-doctor.js +1 -1
- package/dist/bin/exe-export-behaviors.js +10 -11
- package/dist/bin/exe-forget.js +9 -10
- package/dist/bin/exe-gateway.js +9 -10
- package/dist/bin/exe-healthcheck.js +4 -4
- package/dist/bin/exe-heartbeat.js +13 -15
- package/dist/bin/exe-kill.js +9 -10
- package/dist/bin/exe-launch-agent.js +31 -19
- package/dist/bin/exe-new-employee.js +11 -12
- package/dist/bin/exe-pending-messages.js +12 -13
- package/dist/bin/exe-pending-notifications.js +11 -12
- package/dist/bin/exe-pending-reviews.js +11 -12
- package/dist/bin/exe-rename.js +13 -10
- package/dist/bin/exe-review.js +16 -18
- package/dist/bin/exe-search.js +8 -9
- package/dist/bin/exe-session-cleanup.js +16 -17
- package/dist/bin/exe-settings.js +9 -10
- package/dist/bin/exe-start-codex.js +16 -17
- package/dist/bin/exe-start-opencode.js +12 -13
- package/dist/bin/exe-status.js +12 -13
- package/dist/bin/exe-support.js +4 -4
- package/dist/bin/exe-team.js +7 -9
- package/dist/bin/git-sweep.js +11 -12
- package/dist/bin/graph-backfill.js +10 -10
- package/dist/bin/graph-export.js +8 -9
- package/dist/bin/install.js +10 -8
- package/dist/bin/intercom-check.js +4 -4
- package/dist/bin/postgres-agentic-reflection-backfill.js +5 -5
- package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
- package/dist/bin/pre-publish.js +1 -1
- package/dist/bin/scan-tasks.js +11 -12
- package/dist/bin/setup.js +4 -4
- package/dist/bin/shard-migrate.js +8 -9
- package/dist/bin/stack-update.js +3 -3
- package/dist/{branding-EKPE6CWW.js → branding-EKI27T6K.js} +2 -2
- package/dist/{capacity-monitor-HGD2C6CP.js → capacity-monitor-D3RGDLMN.js} +12 -13
- package/dist/{catchup-brief-OMDCLETB.js → catchup-brief-LD2QLE2D.js} +14 -15
- package/dist/{chunk-2JAEWE7P.js → chunk-25QUV6FU.js} +6 -6
- package/dist/{chunk-OIUPHIN2.js → chunk-2NWMGMNH.js} +9 -9
- package/dist/{chunk-CLIW2CES.js → chunk-32Z4GK25.js} +8 -10
- package/dist/{chunk-3SPQNGRT.js → chunk-4AZYVT6A.js} +1 -1
- package/dist/{chunk-5K3CCPNX.js → chunk-4CBBN2XD.js} +245 -111
- package/dist/{chunk-3WSH4P4Z.js → chunk-4GA5XZWY.js} +2 -2
- package/dist/{chunk-XUHFQHGZ.js → chunk-4JZNDVZH.js} +37 -4
- package/dist/{chunk-CSVYC6HH.js → chunk-4OHIVMHS.js} +1 -1
- package/dist/{chunk-STVJLWSA.js → chunk-4YSDLTCT.js} +4 -4
- package/dist/{chunk-UEWGUOXB.js → chunk-55LEDLDE.js} +499 -27
- package/dist/{chunk-UOCQQHZT.js → chunk-5PZ3HSGP.js} +87 -48
- package/dist/{chunk-7SVGVGE3.js → chunk-5UCBVXKO.js} +1 -1
- package/dist/{chunk-SQLEKC4E.js → chunk-6EZRMPDA.js} +1 -1
- package/dist/{chunk-35FFFDS2.js → chunk-6V6UTSOP.js} +1 -1
- package/dist/{chunk-LPG22IL5.js → chunk-7BPUBHGW.js} +2 -2
- package/dist/{chunk-4YNGDNDI.js → chunk-7M3DNYMR.js} +4 -4
- package/dist/{chunk-H24OVCAN.js → chunk-AJOZXJLJ.js} +1 -1
- package/dist/{chunk-YWCPAQBH.js → chunk-AOJHEMHE.js} +36 -15
- package/dist/{chunk-YYB6HGEY.js → chunk-BI3GMMTP.js} +1 -1
- package/dist/{chunk-3TTJPQAE.js → chunk-BKEJSHDE.js} +1 -1
- package/dist/{chunk-SCGCHM2H.js → chunk-BSSSCUQJ.js} +3 -3
- package/dist/{chunk-XDJWGR2S.js → chunk-CBSUVFZ7.js} +2 -2
- package/dist/{chunk-54MB5TNF.js → chunk-CHXX73NX.js} +2 -2
- package/dist/{chunk-5LJQSXUG.js → chunk-CK5ZAMWX.js} +3 -3
- package/dist/{chunk-VTZ4QOBS.js → chunk-CQX2WDI5.js} +1 -1
- package/dist/{chunk-7HZFWAIR.js → chunk-DH6N5G4T.js} +1 -1
- package/dist/{chunk-QVVV6DHI.js → chunk-DKWTDULH.js} +2 -2
- package/dist/{chunk-GUDCQBRY.js → chunk-DU4ZN7VF.js} +1 -1
- package/dist/{chunk-PS4UUDIG.js → chunk-DUDPJVAC.js} +5 -7
- package/dist/{chunk-5PB6BRLA.js → chunk-E2KEN3PG.js} +1 -1
- package/dist/{chunk-Q3MIJPXM.js → chunk-EAVACBVO.js} +2 -2
- package/dist/{chunk-FCO2K73K.js → chunk-EENNKZMN.js} +3 -3
- package/dist/{chunk-QUG6EMZQ.js → chunk-EZUWMBWA.js} +1 -1
- package/dist/{chunk-YKOW7KMK.js → chunk-F4OU2ETP.js} +23 -7
- package/dist/chunk-FZ23OZL3.js +78 -0
- package/dist/{chunk-KNEH2MGD.js → chunk-GIGLGGYL.js} +5 -5
- package/dist/{chunk-KNS5ETKF.js → chunk-GLVF7ENO.js} +1 -1
- package/dist/{chunk-D7BPHQGX.js → chunk-GOCW7Z6D.js} +2 -2
- package/dist/chunk-GUMRIUI5.js +63 -0
- package/dist/{chunk-HO4C7QMH.js → chunk-ITJMONDK.js} +1 -1
- package/dist/{chunk-OYBQKDV5.js → chunk-JAFHOB5P.js} +1 -1
- package/dist/{chunk-UE3BYGWY.js → chunk-JMMY24KD.js} +30 -15
- package/dist/{chunk-CYCRC2KN.js → chunk-JSVRX6IW.js} +30 -11
- package/dist/{chunk-ABCDEJUD.js → chunk-KCLL5ECT.js} +1 -1
- package/dist/{chunk-SPMZRVXK.js → chunk-LCZRXRB7.js} +2 -2
- package/dist/{chunk-XNWXVGEA.js → chunk-LD6WE7DK.js} +2 -2
- package/dist/{chunk-6EBG7VWN.js → chunk-LFVL3R6H.js} +2 -2
- package/dist/{chunk-RGKPVKUO.js → chunk-LGPTAJZC.js} +1 -1
- package/dist/{chunk-OX6D5AF3.js → chunk-LNX37VPO.js} +2 -2
- package/dist/{chunk-IU3CXV4S.js → chunk-LR3QFARI.js} +11 -11
- package/dist/{chunk-EWGZPTII.js → chunk-MQB2BE3I.js} +1 -1
- package/dist/{chunk-4ITOWLHX.js → chunk-MRX42FAS.js} +4 -6
- package/dist/{chunk-UCNCSKGH.js → chunk-N5MH3CN2.js} +3 -3
- package/dist/{chunk-QCJ3Y52V.js → chunk-NFX6MDEO.js} +1 -1
- package/dist/{chunk-F6PIXTHZ.js → chunk-NMG76472.js} +5 -7
- package/dist/{chunk-LUOLBU54.js → chunk-NMT6QFEE.js} +1 -1
- package/dist/{chunk-DEHYRM3I.js → chunk-NWUWTV7B.js} +1 -1
- package/dist/{chunk-2XUXMKX5.js → chunk-OC7FNHGA.js} +4 -4
- package/dist/{chunk-SPKE5ANC.js → chunk-OI3REUP5.js} +1 -1
- package/dist/{chunk-FLVDAA3Z.js → chunk-P2YTTKPR.js} +1 -1
- package/dist/{chunk-NX4WEVG6.js → chunk-Q53ZYTIU.js} +12 -8
- package/dist/{chunk-NTIWZFOJ.js → chunk-RZK7BZHP.js} +1 -1
- package/dist/{chunk-5WIEDLGY.js → chunk-S3FDCJNF.js} +6 -6
- package/dist/{chunk-SL47NHTE.js → chunk-SDYBAMPW.js} +2 -2
- package/dist/{chunk-2ZWYALO4.js → chunk-SFURTBMT.js} +1 -1
- package/dist/{chunk-HHV26QTD.js → chunk-SOHGHGWU.js} +5 -6
- package/dist/{chunk-73JE5PVU.js → chunk-TJI7DMBT.js} +7 -7
- package/dist/{chunk-O2RVWP3S.js → chunk-TSPBIMZV.js} +1 -1
- package/dist/{chunk-BZHXUKVC.js → chunk-U3Q3WNGY.js} +2 -2
- package/dist/{chunk-Z6BTUUPK.js → chunk-U7M7ZURS.js} +2 -2
- package/dist/{chunk-34O6PRWE.js → chunk-UB7E2FEB.js} +4 -6
- package/dist/{chunk-POU4ZLBM.js → chunk-UKCSMGNM.js} +2 -2
- package/dist/{chunk-BBVMIH76.js → chunk-UYFPFO6Q.js} +8 -8
- package/dist/{chunk-HIOFKHTO.js → chunk-UYNFWD54.js} +3 -3
- package/dist/{chunk-IG5XFUYJ.js → chunk-VA42PIIY.js} +25 -7
- package/dist/{chunk-DMFM77DV.js → chunk-WZDI6UJ6.js} +1 -1
- package/dist/{chunk-6LKDJ5WX.js → chunk-XOVQ43JR.js} +52 -10
- package/dist/{chunk-762FPANW.js → chunk-XRPIVNFS.js} +1 -1
- package/dist/{code-context-index-PIC37JSG.js → code-context-index-XCX6HB3T.js} +5 -5
- package/dist/{conversation-entity-extractor-HKSNDF4L.js → conversation-entity-extractor-FJNOZ4DO.js} +2 -1
- package/dist/{conversation-wiki-populator-7M5YYPXH.js → conversation-wiki-populator-HAW3EQD5.js} +1 -1
- package/dist/{crdt-sync-MDW6THU7.js → crdt-sync-WXVYQ5ZO.js} +1 -1
- package/dist/{crm-webhook-YZKCH7QB.js → crm-webhook-HGUHXI6W.js} +2 -2
- package/dist/{cto-delegation-gate-7SQNLKN7.js → cto-delegation-gate-RJ5EVOY3.js} +12 -14
- package/dist/{daemon-auth-6XMF4JG5.js → daemon-auth-VXM7MOF4.js} +3 -3
- package/dist/{daemon-orchestration-7YUD2H64.js → daemon-orchestration-3E3BIK7E.js} +14 -15
- package/dist/{db-backup-R4DLUO4C.js → db-backup-YHDR4SXR.js} +3 -3
- package/dist/{entity-boost-YQFREESI.js → entity-boost-27ENEPYC.js} +1 -1
- package/dist/{exe-drift-HKJONDA5.js → exe-drift-DBY7PC3H.js} +5 -7
- package/dist/{exe-export-TSZJEMWC.js → exe-export-FQPQCBDA.js} +9 -11
- package/dist/{exe-import-LAKNLCWI.js → exe-import-7CML2REU.js} +9 -11
- package/dist/{exe-key-ODHZVEGR.js → exe-key-KNR4LT2L.js} +5 -6
- package/dist/{exe-org-EVOEZY6H.js → exe-org-QKK7M6FR.js} +3 -3
- package/dist/{fast-db-init-6SRLEIFS.js → fast-db-init-ADRYLHUA.js} +1 -1
- package/dist/gateway/index.js +9 -10
- package/dist/{gateway-client-VFKE2WJX.js → gateway-client-CJNSI4GG.js} +1 -1
- package/dist/{git-staleness-H774CLPX.js → git-staleness-OL7J5CXL.js} +4 -5
- package/dist/{git-task-sweep-FMRECHV7.js → git-task-sweep-O4OIPQB3.js} +11 -12
- package/dist/{global-procedures-PYYMCJIW.js → global-procedures-L7AN2A5W.js} +6 -7
- package/dist/{graph-query-657O5JYJ.js → graph-query-JBQDJJFP.js} +2 -1
- package/dist/{graph-rag-ZE5N7C65.js → graph-rag-V3JU7GYG.js} +2 -1
- package/dist/{hook-integrity-S5EUKBL6.js → hook-integrity-HESSTSAK.js} +1 -1
- package/dist/hooks/bug-report-worker.js +13 -14
- package/dist/hooks/codex-stop-task-finalizer.js +13 -14
- package/dist/hooks/commit-complete.js +13 -14
- package/dist/hooks/error-recall.js +10 -11
- package/dist/hooks/exe-heartbeat-hook.js +6 -4
- package/dist/hooks/ingest-worker.js +6 -6
- package/dist/hooks/ingest.js +14 -12
- package/dist/hooks/instructions-loaded.js +10 -10
- package/dist/hooks/notification.js +7 -5
- package/dist/hooks/post-compact.js +12 -13
- package/dist/hooks/post-tool-combined.js +5 -5
- package/dist/hooks/pre-compact.js +17 -18
- package/dist/hooks/pre-tool-use.js +34 -17
- package/dist/hooks/prompt-submit.js +22 -23
- package/dist/hooks/session-end.js +21 -22
- package/dist/hooks/session-start.js +8 -8
- package/dist/hooks/stop.js +18 -19
- package/dist/hooks/subagent-stop.js +12 -13
- package/dist/hooks/summary-worker.js +23 -25
- package/dist/index.js +18 -19
- package/dist/{installer-MIBTZDDM.js → installer-4YA7JGL4.js} +9 -7
- package/dist/{installer-3RTZXZ57.js → installer-JF7ARD2O.js} +9 -7
- package/dist/{installer-4G4YDLGY.js → installer-ZF7VAXAE.js} +9 -7
- package/dist/{key-backup-status-6BBOUM2S.js → key-backup-status-M4W77D3P.js} +2 -2
- package/dist/lib/agent-config.js +3 -3
- package/dist/lib/cloud-sync.js +7 -8
- package/dist/lib/config.js +2 -2
- package/dist/lib/consolidation.js +8 -9
- package/dist/lib/database.js +4 -5
- package/dist/lib/db-daemon-client.js +4 -4
- package/dist/lib/db.js +4 -5
- package/dist/lib/device-registry.js +2 -2
- package/dist/lib/embedder.js +5 -5
- package/dist/lib/employee-templates.js +7 -8
- package/dist/lib/employees.js +7 -3
- package/dist/lib/exe-daemon-client.js +4 -4
- package/dist/lib/exe-daemon.js +151 -59
- package/dist/lib/hybrid-search.js +8 -9
- package/dist/lib/identity-templates.js +1 -1
- package/dist/lib/identity.js +6 -6
- package/dist/lib/keychain.js +1 -1
- package/dist/lib/license.js +3 -3
- package/dist/lib/messaging.js +11 -12
- package/dist/lib/reminders.js +5 -6
- package/dist/lib/schedules.js +8 -9
- package/dist/lib/skill-learning.js +6 -7
- package/dist/lib/status-brief.js +1 -1
- package/dist/lib/store.js +7 -8
- package/dist/lib/task-router.js +6 -4
- package/dist/lib/tasks.js +12 -13
- package/dist/lib/tmux-routing.js +10 -11
- package/dist/lib/token-spend.js +5 -6
- package/dist/lib/ws-client.js +1 -1
- package/dist/{license-gate-746LFKMY.js → license-gate-P6NDW4Z3.js} +4 -4
- package/dist/mcp/register-tools.js +64 -65
- package/dist/mcp/server.js +66 -67
- package/dist/mcp/tools/complete-reminder.js +6 -7
- package/dist/mcp/tools/create-reminder.js +6 -7
- package/dist/mcp/tools/create-task.js +14 -15
- package/dist/mcp/tools/deactivate-behavior.js +7 -8
- package/dist/mcp/tools/list-reminders.js +6 -7
- package/dist/mcp/tools/list-tasks.js +14 -15
- package/dist/mcp/tools/send-message.js +13 -14
- package/dist/mcp/tools/update-task.js +13 -14
- package/dist/{mcp-http-config-RD5MJYJD.js → mcp-http-config-TIY7CLWB.js} +6 -4
- package/dist/{memory-cards-CS3QQQST.js → memory-cards-MQBULX5V.js} +4 -5
- package/dist/{memory-poisoning-defense-XPM34UJQ.js → memory-poisoning-defense-EHSL5PZW.js} +4 -5
- package/dist/{memory-queue-B332RRFX.js → memory-queue-6YCGHJLQ.js} +3 -3
- package/dist/memory-queue-client-SZZDOZXE.js +14 -0
- package/dist/{memory-reflection-GH5BOH7A.js → memory-reflection-OTJBCQWK.js} +4 -5
- package/dist/message-queue-client-2YTGEB5H.js +92 -0
- package/dist/{notifications-WWROKWFT.js → notifications-APKWB63A.js} +10 -11
- package/dist/{orchestration-phase-SBCILK4O.js → orchestration-phase-365P32CD.js} +3 -3
- package/dist/{orchestrator-V3EMR3AU.js → orchestrator-W62CLQLP.js} +12 -13
- package/dist/{plan-limits-AMJUHUCR.js → plan-limits-BO2HMJ6S.js} +6 -7
- package/dist/{preferences-MW3BYTQ5.js → preferences-M7KQYRR2.js} +2 -2
- package/dist/{projection-worker-2YXEQRKI.js → projection-worker-6TGUPMLY.js} +3 -3
- package/dist/{push-notifications-NYQZGUJT.js → push-notifications-2SBCAIA2.js} +3 -3
- package/dist/{reranker-ZU3GWEBG.js → reranker-LV5BQIF4.js} +3 -3
- package/dist/runtime/index.js +13 -14
- package/dist/{session-events-RCAUFPNG.js → session-events-SR2WX2X4.js} +11 -12
- package/dist/{session-kill-telemetry-GUN2M2LJ.js → session-kill-telemetry-N2IKZK33.js} +5 -6
- package/dist/{session-scope-NGLL42BM.js → session-scope-S5DODJU4.js} +11 -12
- package/dist/setup-wizard-H4TZHU36.js +12 -0
- package/dist/{shard-manager-CIDCCPJ4.js → shard-manager-3MDFLDOZ.js} +3 -3
- package/dist/{task-enforcement-YMGIERU4.js → task-enforcement-L7EGD6LJ.js} +10 -11
- package/dist/{task-scope-RMJLXJ7S.js → task-scope-QNRAYD7S.js} +10 -11
- package/dist/{tasks-crud-ZRXPR3UB.js → tasks-crud-JHHIROCS.js} +10 -11
- package/dist/{tasks-review-NQUJR52I.js → tasks-review-TXMVOOFN.js} +10 -11
- package/dist/{tool-capability-index-6EKGND6H.js → tool-capability-index-7OF3LF4X.js} +1 -1
- package/dist/{tool-telemetry-4C6LTIPM.js → tool-telemetry-QPGPBV5R.js} +1 -1
- package/dist/tui/App.js +25 -26
- package/dist/{tui-data-A4GTAXBL.js → tui-data-65WM7L5Q.js} +10 -11
- package/dist/{worker-gate-H43H32OF.js → worker-gate-WM2RGEZE.js} +3 -3
- package/dist/{workflow-engine-EPWKDGHR.js → workflow-engine-PK2TC7UE.js} +2 -2
- package/package.json +1 -1
- package/release-notes.json +207 -199
- package/dist/chunk-MQV4UKTS.js +0 -142
- package/dist/chunk-X2IMCCM5.js +0 -49
- package/dist/chunk-ZHJNMC4W.js +0 -292
- package/dist/memory-queue-client-MPJ2B7RU.js +0 -14
- package/dist/setup-wizard-JAFJRWKE.js +0 -12
- /package/dist/{chunk-3RNNTTBH.js → chunk-267IKUT5.js} +0 -0
- /package/dist/{chunk-VEGDNUBO.js → chunk-72O7CSKA.js} +0 -0
- /package/dist/{chunk-ELXPFTBJ.js → chunk-7A2YCQNM.js} +0 -0
- /package/dist/{chunk-NBYMO4RZ.js → chunk-HBV3HSER.js} +0 -0
- /package/dist/{chunk-RCNCUSAF.js → chunk-JZB67O4M.js} +0 -0
- /package/dist/{chunk-OJ6Z2ZS2.js → chunk-NGAZPQQY.js} +0 -0
- /package/dist/{chunk-GSI6OPPH.js → chunk-NSA2JWNP.js} +0 -0
- /package/dist/{chunk-GLGWGMPD.js → chunk-XIIVMIS4.js} +0 -0
- /package/dist/{core-memory-JOTETVSY.js → core-memory-N74JWH4M.js} +0 -0
- /package/dist/{webhook-pipe-AFXVZ6YL.js → webhook-pipe-VOUF2Y43.js} +0 -0
- /package/dist/{wiki-acl-P7WEIMJV.js → wiki-acl-BIEVKTJC.js} +0 -0
- /package/dist/{wiki-client-UFR4R7YH.js → wiki-client-NGWOSMCV.js} +0 -0
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getToolUsageStats
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XIIVMIS4.js";
|
|
4
4
|
import {
|
|
5
5
|
AUTO_WAKE_MAX_RETRIES
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-JMMY24KD.js";
|
|
7
7
|
import {
|
|
8
8
|
getToolCapabilityIndex
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-267IKUT5.js";
|
|
10
10
|
import {
|
|
11
11
|
getCachedLicenseGate
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-DH6N5G4T.js";
|
|
13
13
|
import {
|
|
14
14
|
isRerankerAvailable,
|
|
15
15
|
rerankWithScores
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-AJOZXJLJ.js";
|
|
17
17
|
import {
|
|
18
18
|
getEntityByName,
|
|
19
19
|
getEntityNeighbors,
|
|
@@ -21,14 +21,14 @@ import {
|
|
|
21
21
|
getHotEntities,
|
|
22
22
|
getRelationships,
|
|
23
23
|
searchEntities
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-XOVQ43JR.js";
|
|
25
25
|
import {
|
|
26
26
|
isToolAllowed,
|
|
27
27
|
isToolAllowedForPlan
|
|
28
28
|
} from "./chunk-E6ORBQHP.js";
|
|
29
29
|
import {
|
|
30
30
|
listRecentSessionEvents
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-KCLL5ECT.js";
|
|
32
32
|
import {
|
|
33
33
|
analyzeBlastRadius,
|
|
34
34
|
buildCodeContextIndex,
|
|
@@ -37,68 +37,68 @@ import {
|
|
|
37
37
|
searchCodeContext,
|
|
38
38
|
searchCodeContextSemantic,
|
|
39
39
|
traceCodeSymbol
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-U3Q3WNGY.js";
|
|
41
41
|
import {
|
|
42
42
|
runDriftProbes
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-7M3DNYMR.js";
|
|
44
44
|
import {
|
|
45
45
|
exportOrchestration,
|
|
46
46
|
importOrchestration,
|
|
47
47
|
validatePackage
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-Q53ZYTIU.js";
|
|
49
49
|
import {
|
|
50
50
|
loadOrchestrationPhase,
|
|
51
51
|
setOrchestrationPhase
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-GIGLGGYL.js";
|
|
53
53
|
import {
|
|
54
54
|
createOrRefreshResumeTask,
|
|
55
55
|
init_capacity_monitor
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-UB7E2FEB.js";
|
|
57
57
|
import {
|
|
58
58
|
registerCompleteReminder
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-LGPTAJZC.js";
|
|
60
60
|
import {
|
|
61
61
|
registerDeactivateBehavior
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-DUDPJVAC.js";
|
|
63
63
|
import {
|
|
64
64
|
registerSendMessage
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-LFVL3R6H.js";
|
|
66
66
|
import {
|
|
67
67
|
registerCreateTask
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-25QUV6FU.js";
|
|
69
69
|
import {
|
|
70
70
|
registerListTasks
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-CK5ZAMWX.js";
|
|
72
72
|
import {
|
|
73
73
|
registerUpdateTask
|
|
74
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-32Z4GK25.js";
|
|
75
75
|
import {
|
|
76
76
|
registerCreateReminder
|
|
77
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-6V6UTSOP.js";
|
|
78
78
|
import {
|
|
79
79
|
registerListReminders
|
|
80
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-TSPBIMZV.js";
|
|
81
81
|
import {
|
|
82
82
|
completeReminder,
|
|
83
83
|
createReminder,
|
|
84
84
|
listReminders
|
|
85
|
-
} from "./chunk-
|
|
85
|
+
} from "./chunk-BKEJSHDE.js";
|
|
86
86
|
import {
|
|
87
87
|
status
|
|
88
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-MRX42FAS.js";
|
|
89
89
|
import {
|
|
90
90
|
TOKENS_PER_IDLE_MINUTE,
|
|
91
91
|
countKillsSince,
|
|
92
92
|
init_session_kill_telemetry,
|
|
93
93
|
sumTokensSavedSince
|
|
94
|
-
} from "./chunk-
|
|
94
|
+
} from "./chunk-EZUWMBWA.js";
|
|
95
95
|
import {
|
|
96
96
|
getAgentSpend
|
|
97
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-SFURTBMT.js";
|
|
98
98
|
import {
|
|
99
99
|
createSchedule,
|
|
100
100
|
parseHumanCron
|
|
101
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-LNX37VPO.js";
|
|
102
102
|
import {
|
|
103
103
|
exportGraphHTML,
|
|
104
104
|
generateGraphReport
|
|
@@ -106,53 +106,53 @@ import {
|
|
|
106
106
|
import {
|
|
107
107
|
entityId,
|
|
108
108
|
mergeEntities
|
|
109
|
-
} from "./chunk-
|
|
109
|
+
} from "./chunk-F4OU2ETP.js";
|
|
110
110
|
import {
|
|
111
111
|
formatReport,
|
|
112
112
|
runAudit
|
|
113
|
-
} from "./chunk-
|
|
113
|
+
} from "./chunk-S3FDCJNF.js";
|
|
114
114
|
import {
|
|
115
115
|
runHealthCheck
|
|
116
|
-
} from "./chunk-
|
|
116
|
+
} from "./chunk-LCZRXRB7.js";
|
|
117
117
|
import {
|
|
118
118
|
hasFailures,
|
|
119
119
|
runHealth,
|
|
120
120
|
runTest
|
|
121
|
-
} from "./chunk-
|
|
121
|
+
} from "./chunk-EAVACBVO.js";
|
|
122
122
|
import {
|
|
123
123
|
findSimilarTrajectories,
|
|
124
124
|
hashSignature,
|
|
125
125
|
init_skill_learning
|
|
126
|
-
} from "./chunk-
|
|
126
|
+
} from "./chunk-N5MH3CN2.js";
|
|
127
127
|
import {
|
|
128
128
|
deactivateBehavior,
|
|
129
129
|
init_behaviors,
|
|
130
130
|
listBehaviorsByDomain,
|
|
131
131
|
storeBehavior
|
|
132
|
-
} from "./chunk-
|
|
132
|
+
} from "./chunk-NFX6MDEO.js";
|
|
133
133
|
import {
|
|
134
134
|
countUnconsolidated,
|
|
135
135
|
groupMemories,
|
|
136
136
|
runConsolidation,
|
|
137
137
|
selectUnconsolidated
|
|
138
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-U7M7ZURS.js";
|
|
139
139
|
import {
|
|
140
140
|
renderClientCOOTemplate
|
|
141
|
-
} from "./chunk-
|
|
141
|
+
} from "./chunk-6EZRMPDA.js";
|
|
142
142
|
import {
|
|
143
143
|
deactivateGlobalProcedure,
|
|
144
144
|
loadGlobalProcedures,
|
|
145
145
|
storeGlobalProcedure
|
|
146
|
-
} from "./chunk-
|
|
146
|
+
} from "./chunk-GOCW7Z6D.js";
|
|
147
147
|
import {
|
|
148
148
|
PLATFORM_PROCEDURES
|
|
149
|
-
} from "./chunk-
|
|
149
|
+
} from "./chunk-WZDI6UJ6.js";
|
|
150
150
|
import {
|
|
151
151
|
clearCloudReuploadRequired,
|
|
152
152
|
cloudSync,
|
|
153
153
|
getCloudReuploadRequired,
|
|
154
154
|
markCloudReuploadRequired
|
|
155
|
-
} from "./chunk-
|
|
155
|
+
} from "./chunk-5PZ3HSGP.js";
|
|
156
156
|
import {
|
|
157
157
|
crypto_exports,
|
|
158
158
|
init_crypto
|
|
@@ -163,27 +163,22 @@ import {
|
|
|
163
163
|
import {
|
|
164
164
|
embed,
|
|
165
165
|
init_embedder
|
|
166
|
-
} from "./chunk-
|
|
166
|
+
} from "./chunk-4OHIVMHS.js";
|
|
167
167
|
import {
|
|
168
168
|
readMcpHttpEvents,
|
|
169
169
|
summarizeMcpTransport,
|
|
170
170
|
writeMcpTransportSummary
|
|
171
|
-
} from "./chunk-
|
|
171
|
+
} from "./chunk-NMT6QFEE.js";
|
|
172
172
|
import {
|
|
173
173
|
init_tasks,
|
|
174
174
|
updateTask
|
|
175
|
-
} from "./chunk-
|
|
175
|
+
} from "./chunk-JSVRX6IW.js";
|
|
176
176
|
import {
|
|
177
177
|
fastDbInit
|
|
178
|
-
} from "./chunk-
|
|
179
|
-
import {
|
|
180
|
-
getIdentity,
|
|
181
|
-
listIdentities,
|
|
182
|
-
updateIdentity
|
|
183
|
-
} from "./chunk-MQV4UKTS.js";
|
|
178
|
+
} from "./chunk-7A2YCQNM.js";
|
|
184
179
|
import {
|
|
185
180
|
MAX_CONCURRENT_WORKERS
|
|
186
|
-
} from "./chunk-
|
|
181
|
+
} from "./chunk-CQX2WDI5.js";
|
|
187
182
|
import {
|
|
188
183
|
getProjectName,
|
|
189
184
|
init_project_name
|
|
@@ -191,10 +186,10 @@ import {
|
|
|
191
186
|
import {
|
|
192
187
|
hybridSearch,
|
|
193
188
|
recentRecords
|
|
194
|
-
} from "./chunk-
|
|
189
|
+
} from "./chunk-2NWMGMNH.js";
|
|
195
190
|
import {
|
|
196
191
|
getActiveAgent
|
|
197
|
-
} from "./chunk-
|
|
192
|
+
} from "./chunk-CBSUVFZ7.js";
|
|
198
193
|
import {
|
|
199
194
|
attachDocumentMetadata,
|
|
200
195
|
flushBatch,
|
|
@@ -202,7 +197,7 @@ import {
|
|
|
202
197
|
reserveVersions,
|
|
203
198
|
vectorToBlob,
|
|
204
199
|
writeMemory
|
|
205
|
-
} from "./chunk-
|
|
200
|
+
} from "./chunk-LR3QFARI.js";
|
|
206
201
|
import {
|
|
207
202
|
init_task_scope,
|
|
208
203
|
init_tasks_crud,
|
|
@@ -214,7 +209,7 @@ import {
|
|
|
214
209
|
tmux_routing_exports,
|
|
215
210
|
updateTaskStatus,
|
|
216
211
|
writeCheckpoint
|
|
217
|
-
} from "./chunk-
|
|
212
|
+
} from "./chunk-AOJHEMHE.js";
|
|
218
213
|
import {
|
|
219
214
|
init_session_registry,
|
|
220
215
|
listSessions
|
|
@@ -227,7 +222,7 @@ import {
|
|
|
227
222
|
init_agent_config,
|
|
228
223
|
loadAgentConfig,
|
|
229
224
|
setAgentRuntime
|
|
230
|
-
} from "./chunk-
|
|
225
|
+
} from "./chunk-SOHGHGWU.js";
|
|
231
226
|
import {
|
|
232
227
|
DEFAULT_RUNTIME,
|
|
233
228
|
init_runtime_table
|
|
@@ -238,7 +233,7 @@ import {
|
|
|
238
233
|
assertFeature,
|
|
239
234
|
assertMemoryLimit,
|
|
240
235
|
init_plan_limits
|
|
241
|
-
} from "./chunk-
|
|
236
|
+
} from "./chunk-NMG76472.js";
|
|
242
237
|
import {
|
|
243
238
|
getAccountByName,
|
|
244
239
|
getDefaultAccount
|
|
@@ -247,30 +242,32 @@ import {
|
|
|
247
242
|
createNewTrigger,
|
|
248
243
|
isScheduledTrigger,
|
|
249
244
|
loadTriggers
|
|
250
|
-
} from "./chunk-
|
|
245
|
+
} from "./chunk-72O7CSKA.js";
|
|
251
246
|
import {
|
|
252
247
|
pushConversationToCRM
|
|
253
248
|
} from "./chunk-GCNWCYJI.js";
|
|
254
|
-
import {
|
|
255
|
-
getClient,
|
|
256
|
-
init_database
|
|
257
|
-
} from "./chunk-UEWGUOXB.js";
|
|
258
249
|
import {
|
|
259
250
|
EMPLOYEES_PATH,
|
|
260
251
|
addEmployee,
|
|
261
252
|
canCoordinate,
|
|
262
253
|
employees_exports,
|
|
254
|
+
getClient,
|
|
263
255
|
getEmployee,
|
|
256
|
+
getIdentity,
|
|
257
|
+
init_database,
|
|
264
258
|
init_employees,
|
|
259
|
+
init_identity,
|
|
265
260
|
isCoordinatorName,
|
|
266
261
|
isCoordinatorRole,
|
|
262
|
+
listIdentities,
|
|
267
263
|
loadEmployees,
|
|
268
264
|
loadEmployeesSync,
|
|
269
|
-
saveEmployees
|
|
270
|
-
|
|
265
|
+
saveEmployees,
|
|
266
|
+
updateIdentity
|
|
267
|
+
} from "./chunk-55LEDLDE.js";
|
|
271
268
|
import {
|
|
272
269
|
getMasterKey
|
|
273
|
-
} from "./chunk-
|
|
270
|
+
} from "./chunk-4JZNDVZH.js";
|
|
274
271
|
import {
|
|
275
272
|
checkForUpdate
|
|
276
273
|
} from "./chunk-MZIGUUDQ.js";
|
|
@@ -284,12 +281,12 @@ import {
|
|
|
284
281
|
readCachedLicenseToken,
|
|
285
282
|
saveLicense,
|
|
286
283
|
validateLicense
|
|
287
|
-
} from "./chunk-
|
|
284
|
+
} from "./chunk-GLVF7ENO.js";
|
|
288
285
|
import {
|
|
289
286
|
EXE_AI_DIR,
|
|
290
287
|
init_config,
|
|
291
288
|
loadConfig
|
|
292
|
-
} from "./chunk-
|
|
289
|
+
} from "./chunk-VA42PIIY.js";
|
|
293
290
|
import {
|
|
294
291
|
__toCommonJS
|
|
295
292
|
} from "./chunk-KFQGP6VL.js";
|
|
@@ -883,7 +880,7 @@ async function searchConversations(query, limit) {
|
|
|
883
880
|
}
|
|
884
881
|
async function searchWiki(query, limit) {
|
|
885
882
|
try {
|
|
886
|
-
const { createWikiClient, chatInWorkspace, listWorkspaces } = await import("./wiki-client-
|
|
883
|
+
const { createWikiClient, chatInWorkspace, listWorkspaces } = await import("./wiki-client-NGWOSMCV.js");
|
|
887
884
|
const client = await createWikiClient();
|
|
888
885
|
if (!client) return [];
|
|
889
886
|
const workspaces = await listWorkspaces(client);
|
|
@@ -1428,7 +1425,7 @@ async function handleSupersede(input) {
|
|
|
1428
1425
|
}
|
|
1429
1426
|
try {
|
|
1430
1427
|
const { getClient: getClient2 } = await import("./lib/database.js");
|
|
1431
|
-
const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-
|
|
1428
|
+
const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-OTOFSYIV.js");
|
|
1432
1429
|
const { writeMemory: writeMemory2, flushBatch: flushBatch2 } = await import("./lib/store.js");
|
|
1433
1430
|
const { randomUUID: randomUUID2 } = await import("crypto");
|
|
1434
1431
|
const client = getClient2();
|
|
@@ -1537,9 +1534,9 @@ function registerMemory(server) {
|
|
|
1537
1534
|
return handleSupersede(input);
|
|
1538
1535
|
}
|
|
1539
1536
|
if (action === "core_get" || action === "core_set" || action === "core_delete") {
|
|
1540
|
-
const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-
|
|
1537
|
+
const { getActiveAgent: getActiveAgent2 } = await import("./active-agent-OTOFSYIV.js");
|
|
1541
1538
|
const { agentId } = getActiveAgent2();
|
|
1542
|
-
const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-
|
|
1539
|
+
const { getCoreMemory, setCoreMemory, deleteCoreMemory, formatCoreMemoryBlock } = await import("./core-memory-N74JWH4M.js");
|
|
1543
1540
|
if (action === "core_get") {
|
|
1544
1541
|
const entries = await getCoreMemory(agentId);
|
|
1545
1542
|
const block = formatCoreMemoryBlock(entries);
|
|
@@ -1618,10 +1615,11 @@ function registerQueryRelationships(server) {
|
|
|
1618
1615
|
query: z11.string().optional().describe("What relationships to find (natural language)"),
|
|
1619
1616
|
entity_name: z11.string().optional().describe("Specific entity to explore (for example an agent, project, or vendor name)"),
|
|
1620
1617
|
relationship_type: z11.string().optional().describe("Filter by relationship type (e.g., 'implemented', 'depends_on', 'worked_on')"),
|
|
1621
|
-
max_depth: z11.number().default(2).describe("How many hops to traverse (default: 2)")
|
|
1618
|
+
max_depth: z11.number().default(2).describe("How many hops to traverse (default: 2)"),
|
|
1619
|
+
as_of: z11.string().optional().describe("ISO 8601 timestamp for time-travel. Returns relationships valid at that point in time.")
|
|
1622
1620
|
}
|
|
1623
1621
|
},
|
|
1624
|
-
async ({ query, entity_name, relationship_type, max_depth }) => {
|
|
1622
|
+
async ({ query, entity_name, relationship_type, max_depth, as_of }) => {
|
|
1625
1623
|
const client = getClient();
|
|
1626
1624
|
if (entity_name) {
|
|
1627
1625
|
const entity = await getEntityByName(client, entity_name);
|
|
@@ -1645,13 +1643,14 @@ ${matchList}`
|
|
|
1645
1643
|
};
|
|
1646
1644
|
}
|
|
1647
1645
|
const rels = await getRelationships(client, entity.id, {
|
|
1648
|
-
type: relationship_type
|
|
1646
|
+
type: relationship_type,
|
|
1647
|
+
asOf: as_of
|
|
1649
1648
|
});
|
|
1650
1649
|
if (rels.length === 0) {
|
|
1651
1650
|
return {
|
|
1652
1651
|
content: [{
|
|
1653
1652
|
type: "text",
|
|
1654
|
-
text: `Entity "${entity.name}" (${entity.type}) exists but has no recorded relationships.`
|
|
1653
|
+
text: `Entity "${entity.name}" (${entity.type}) exists but has no recorded relationships${as_of ? ` as of ${as_of}` : ""}.`
|
|
1655
1654
|
}]
|
|
1656
1655
|
};
|
|
1657
1656
|
}
|
|
@@ -1659,7 +1658,7 @@ ${matchList}`
|
|
|
1659
1658
|
const confLabel = r.confidenceLabel && r.confidenceLabel !== "extracted" ? `[${r.confidenceLabel.toUpperCase()} ${r.confidence.toFixed(1)}] ` : "";
|
|
1660
1659
|
return `- ${confLabel}${r.sourceName} \u2192[${r.type}]\u2192 ${r.targetName} (w: ${r.weight.toFixed(1)})`;
|
|
1661
1660
|
});
|
|
1662
|
-
const neighbors = await getEntityNeighbors(client, entity.id, max_depth);
|
|
1661
|
+
const neighbors = await getEntityNeighbors(client, entity.id, max_depth, as_of);
|
|
1663
1662
|
const neighborLine = neighbors.length > 1 ? `
|
|
1664
1663
|
|
|
1665
1664
|
Connected entities (${max_depth} hops): ${neighbors.filter((n) => n.entity.id !== entity.id).map((n) => `${n.entity.name} (${n.entity.type})`).join(", ")}` : "";
|
|
@@ -1687,7 +1686,7 @@ ${relLines.join("\n")}${neighborLine}`
|
|
|
1687
1686
|
}
|
|
1688
1687
|
const results = [];
|
|
1689
1688
|
for (const entity of matches.slice(0, 5)) {
|
|
1690
|
-
const rels = await getRelationships(client, entity.id, { type: relationship_type });
|
|
1689
|
+
const rels = await getRelationships(client, entity.id, { type: relationship_type, asOf: as_of });
|
|
1691
1690
|
const relSummary = rels.length > 0 ? rels.slice(0, 3).map((r) => ` ${r.sourceName} \u2192[${r.type}]\u2192 ${r.targetName}`).join("\n") : " (no relationships)";
|
|
1692
1691
|
results.push(`### ${entity.name} (${entity.type})
|
|
1693
1692
|
${relSummary}`);
|
|
@@ -1932,7 +1931,7 @@ function registerCloseTask(server) {
|
|
|
1932
1931
|
}
|
|
1933
1932
|
} catch {
|
|
1934
1933
|
}
|
|
1935
|
-
let
|
|
1934
|
+
let mergeNote = "";
|
|
1936
1935
|
try {
|
|
1937
1936
|
const { getClient: getClient2 } = await import("./lib/database.js");
|
|
1938
1937
|
const client = getClient2();
|
|
@@ -1945,17 +1944,39 @@ function registerCloseTask(server) {
|
|
|
1945
1944
|
const { execSync } = await import("child_process");
|
|
1946
1945
|
try {
|
|
1947
1946
|
const openPRs = execSync(
|
|
1948
|
-
`gh pr list --state open --json number,title,headRefName
|
|
1947
|
+
`gh pr list --state open --json number,title,headRefName 2>/dev/null`,
|
|
1949
1948
|
{ encoding: "utf8", timeout: 5e3 }
|
|
1950
1949
|
).trim();
|
|
1951
|
-
const
|
|
1950
|
+
const allPrs = JSON.parse(openPRs || "[]");
|
|
1951
|
+
const baseName = assignee.replace(/\d+$/, "");
|
|
1952
|
+
const prs = allPrs.filter(
|
|
1953
|
+
(p) => p.headRefName.startsWith(`${assignee}-`) || p.headRefName.startsWith(`${baseName}-`) || p.headRefName === `${assignee}-work` || p.headRefName === `${baseName}-work`
|
|
1954
|
+
);
|
|
1955
|
+
for (const pr of prs) {
|
|
1956
|
+
try {
|
|
1957
|
+
execSync(`gh pr merge ${pr.number} --squash --admin --delete-branch 2>/dev/null`, { timeout: 15e3 });
|
|
1958
|
+
mergeNote += `
|
|
1959
|
+
\u2705 Auto-merged PR #${pr.number}: ${pr.title}`;
|
|
1960
|
+
process.stderr.write(`[close-task] Auto-merged PR #${pr.number} (${pr.headRefName})
|
|
1961
|
+
`);
|
|
1962
|
+
} catch (mergeErr) {
|
|
1963
|
+
mergeNote += `
|
|
1964
|
+
\u26A0\uFE0F Failed to merge PR #${pr.number}: ${mergeErr instanceof Error ? mergeErr.message : "unknown error"}`;
|
|
1965
|
+
}
|
|
1966
|
+
}
|
|
1952
1967
|
if (prs.length > 0) {
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1968
|
+
try {
|
|
1969
|
+
execSync("git pull origin main 2>/dev/null", { timeout: 1e4 });
|
|
1970
|
+
mergeNote += "\n\u2705 Pulled latest main";
|
|
1971
|
+
} catch {
|
|
1972
|
+
mergeNote += "\n\u26A0\uFE0F git pull failed \u2014 run manually";
|
|
1973
|
+
}
|
|
1974
|
+
try {
|
|
1975
|
+
execSync("npm run build 2>/dev/null", { timeout: 6e4 });
|
|
1976
|
+
mergeNote += "\n\u2705 Build verified";
|
|
1977
|
+
} catch {
|
|
1978
|
+
mergeNote += "\n\u26A0\uFE0F Build failed after merge \u2014 investigate";
|
|
1979
|
+
}
|
|
1959
1980
|
}
|
|
1960
1981
|
} catch {
|
|
1961
1982
|
}
|
|
@@ -1972,7 +1993,53 @@ Run: gh pr merge <number> --squash --delete-branch`;
|
|
|
1972
1993
|
});
|
|
1973
1994
|
let text3 = `Task "${task.title}" marked ${task.status}.
|
|
1974
1995
|
File: ${task.taskFile}`;
|
|
1975
|
-
if (
|
|
1996
|
+
if (mergeNote) text3 += mergeNote;
|
|
1997
|
+
let respawnNote = "";
|
|
1998
|
+
if (status2 === "closed" || status2 === "done") {
|
|
1999
|
+
try {
|
|
2000
|
+
const { getClient: getRespawnClient } = await import("./lib/database.js");
|
|
2001
|
+
const rClient = getRespawnClient();
|
|
2002
|
+
const assignee = task.assignedTo;
|
|
2003
|
+
if (assignee) {
|
|
2004
|
+
const remaining = await rClient.execute({
|
|
2005
|
+
sql: "SELECT COUNT(*) as cnt FROM tasks WHERE assigned_to = ? AND status IN ('open', 'in_progress')",
|
|
2006
|
+
args: [assignee]
|
|
2007
|
+
});
|
|
2008
|
+
const count = Number(remaining.rows[0]?.cnt ?? 0);
|
|
2009
|
+
if (count > 0) {
|
|
2010
|
+
try {
|
|
2011
|
+
const { isMultiInstance } = await import("./lib/employees.js");
|
|
2012
|
+
if (isMultiInstance(assignee)) {
|
|
2013
|
+
const { resolveExeSession: resolveExeSession2, employeeSessionName, ensureEmployee } = await import("./lib/tmux-routing.js");
|
|
2014
|
+
const exeSession = resolveExeSession2();
|
|
2015
|
+
if (exeSession) {
|
|
2016
|
+
const oldSession = employeeSessionName(assignee, exeSession);
|
|
2017
|
+
const { execSync } = await import("child_process");
|
|
2018
|
+
try {
|
|
2019
|
+
execSync(`tmux kill-session -t ${oldSession} 2>/dev/null`, { timeout: 3e3 });
|
|
2020
|
+
} catch {
|
|
2021
|
+
}
|
|
2022
|
+
const baseName = assignee.replace(/\d+$/, "") || assignee;
|
|
2023
|
+
try {
|
|
2024
|
+
execSync(`git worktree remove .worktrees/${baseName} --force 2>/dev/null`, { timeout: 5e3, cwd: baseDir });
|
|
2025
|
+
process.stderr.write(`[close-task] Pruned worktree .worktrees/${baseName}
|
|
2026
|
+
`);
|
|
2027
|
+
} catch {
|
|
2028
|
+
}
|
|
2029
|
+
const result4 = ensureEmployee(assignee, exeSession, baseDir, { autoInstance: true });
|
|
2030
|
+
respawnNote = `
|
|
2031
|
+
|
|
2032
|
+
\u{1F504} Auto-respawn: ${assignee} has ${count} more task(s). Killed old session, spawned ${result4.sessionName ?? "fresh instance"} with clean worktree.`;
|
|
2033
|
+
}
|
|
2034
|
+
}
|
|
2035
|
+
} catch {
|
|
2036
|
+
}
|
|
2037
|
+
}
|
|
2038
|
+
}
|
|
2039
|
+
} catch {
|
|
2040
|
+
}
|
|
2041
|
+
}
|
|
2042
|
+
if (respawnNote) text3 += respawnNote;
|
|
1976
2043
|
if ((status2 === "done" || status2 === "closed") && task.nextTask) {
|
|
1977
2044
|
text3 += `
|
|
1978
2045
|
|
|
@@ -2077,7 +2144,7 @@ function registerResumeEmployee(server) {
|
|
|
2077
2144
|
};
|
|
2078
2145
|
}
|
|
2079
2146
|
try {
|
|
2080
|
-
const { isTmuxSessionAlive } = await import("./tasks-crud-
|
|
2147
|
+
const { isTmuxSessionAlive } = await import("./tasks-crud-JHHIROCS.js");
|
|
2081
2148
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
2082
2149
|
for (const row of openTasks.rows) {
|
|
2083
2150
|
const status2 = String(row.status);
|
|
@@ -2113,7 +2180,10 @@ function registerResumeEmployee(server) {
|
|
|
2113
2180
|
const { ensureEmployee, resolveExeSession: resolveExeSession2 } = await import("./lib/tmux-routing.js");
|
|
2114
2181
|
const exeSession = resolveExeSession2();
|
|
2115
2182
|
if (!exeSession) throw new Error("No coordinator session found");
|
|
2116
|
-
const
|
|
2183
|
+
const { isMultiInstance } = await import("./lib/employees.js");
|
|
2184
|
+
const result3 = ensureEmployee(agent_id, exeSession, process.cwd(), {
|
|
2185
|
+
autoInstance: isMultiInstance(agent_id)
|
|
2186
|
+
});
|
|
2117
2187
|
switch (result3.status) {
|
|
2118
2188
|
case "intercom_sent":
|
|
2119
2189
|
dispatchStatus = `
|
|
@@ -2283,6 +2353,10 @@ function registerStoreBehavior(server) {
|
|
|
2283
2353
|
};
|
|
2284
2354
|
}
|
|
2285
2355
|
} catch {
|
|
2356
|
+
return {
|
|
2357
|
+
content: [{ type: "text", text: `Authorization denied: unable to verify coordinator role for ${activeAgent.agentId}. Cross-agent behavior writes require roster validation.` }],
|
|
2358
|
+
isError: true
|
|
2359
|
+
};
|
|
2286
2360
|
}
|
|
2287
2361
|
}
|
|
2288
2362
|
let resolvedProject;
|
|
@@ -2309,6 +2383,12 @@ function registerStoreBehavior(server) {
|
|
|
2309
2383
|
}
|
|
2310
2384
|
}
|
|
2311
2385
|
} catch {
|
|
2386
|
+
if (agent_id && agent_id !== activeAgent.agentId) {
|
|
2387
|
+
return {
|
|
2388
|
+
content: [{ type: "text", text: `Unable to verify agent "${resolvedAgent}" \u2014 roster file unavailable. Cannot store cross-agent behavior without roster validation.` }],
|
|
2389
|
+
isError: true
|
|
2390
|
+
};
|
|
2391
|
+
}
|
|
2312
2392
|
}
|
|
2313
2393
|
const id = await storeBehavior({
|
|
2314
2394
|
agentId: resolvedAgent,
|
|
@@ -2506,6 +2586,7 @@ ${lines.join("\n")}`
|
|
|
2506
2586
|
import { z as z22 } from "zod";
|
|
2507
2587
|
|
|
2508
2588
|
// src/mcp/tools/get-identity.ts
|
|
2589
|
+
init_identity();
|
|
2509
2590
|
import { z as z20 } from "zod";
|
|
2510
2591
|
function registerGetIdentity(server) {
|
|
2511
2592
|
server.registerTool(
|
|
@@ -2556,6 +2637,7 @@ ${identity.body}`
|
|
|
2556
2637
|
}
|
|
2557
2638
|
|
|
2558
2639
|
// src/mcp/tools/update-identity.ts
|
|
2640
|
+
init_identity();
|
|
2559
2641
|
import { z as z21 } from "zod";
|
|
2560
2642
|
init_employees();
|
|
2561
2643
|
function registerUpdateIdentity(server) {
|
|
@@ -2921,8 +3003,8 @@ function registerIngestDocument(server) {
|
|
|
2921
3003
|
},
|
|
2922
3004
|
async (input) => {
|
|
2923
3005
|
try {
|
|
2924
|
-
const { assertFeature: assertFeature2 } = await import("./plan-limits-
|
|
2925
|
-
const { assertMemoryLimit: assertMemoryLimit2 } = await import("./plan-limits-
|
|
3006
|
+
const { assertFeature: assertFeature2 } = await import("./plan-limits-BO2HMJ6S.js");
|
|
3007
|
+
const { assertMemoryLimit: assertMemoryLimit2 } = await import("./plan-limits-BO2HMJ6S.js");
|
|
2926
3008
|
await assertFeature2("wiki");
|
|
2927
3009
|
await assertMemoryLimit2();
|
|
2928
3010
|
const result3 = await ingestDocument(input);
|
|
@@ -3914,10 +3996,11 @@ function registerGetEntityNeighbors(server) {
|
|
|
3914
3996
|
title: "Get Entity Neighbors",
|
|
3915
3997
|
description: "Get connected entities for a given entity name. Returns neighbors with relationship types, directions, and weights.",
|
|
3916
3998
|
inputSchema: {
|
|
3917
|
-
entity_name: z34.string().describe("Name of the entity to find neighbors for")
|
|
3999
|
+
entity_name: z34.string().describe("Name of the entity to find neighbors for"),
|
|
4000
|
+
as_of: z34.string().optional().describe("ISO 8601 timestamp for time-travel. Returns only relationships valid at that point in time.")
|
|
3918
4001
|
}
|
|
3919
4002
|
},
|
|
3920
|
-
async ({ entity_name }) => {
|
|
4003
|
+
async ({ entity_name, as_of }) => {
|
|
3921
4004
|
try {
|
|
3922
4005
|
const client = getClient();
|
|
3923
4006
|
const entity = await getEntityByName(client, entity_name);
|
|
@@ -3932,7 +4015,8 @@ function registerGetEntityNeighbors(server) {
|
|
|
3932
4015
|
};
|
|
3933
4016
|
}
|
|
3934
4017
|
const relationships = await getRelationships(client, entity.id, {
|
|
3935
|
-
direction: "both"
|
|
4018
|
+
direction: "both",
|
|
4019
|
+
asOf: as_of
|
|
3936
4020
|
});
|
|
3937
4021
|
if (relationships.length === 0) {
|
|
3938
4022
|
return {
|
|
@@ -4116,8 +4200,8 @@ function registerExportGraph(server) {
|
|
|
4116
4200
|
const html = await exportGraphHTML(client);
|
|
4117
4201
|
const fs = await import("fs");
|
|
4118
4202
|
const path18 = await import("path");
|
|
4119
|
-
const
|
|
4120
|
-
const outDir = path18.join(
|
|
4203
|
+
const os5 = await import("os");
|
|
4204
|
+
const outDir = path18.join(os5.homedir(), ".exe-os", "exports");
|
|
4121
4205
|
fs.mkdirSync(outDir, { recursive: true });
|
|
4122
4206
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
4123
4207
|
const filePath = path18.join(outDir, `graph-${timestamp}.html`);
|
|
@@ -4332,6 +4416,7 @@ function registerGraph(server) {
|
|
|
4332
4416
|
project_name: z40.string().optional().describe("Project filter"),
|
|
4333
4417
|
relationship_type: z40.string().optional().describe("Relationship type filter"),
|
|
4334
4418
|
since: z40.string().optional().describe("ISO lower-bound timestamp"),
|
|
4419
|
+
as_of: z40.string().optional().describe("ISO 8601 timestamp for time-travel queries. Returns relationships valid at that point in time. Omit for current relationships only."),
|
|
4335
4420
|
limit: z40.coerce.number().int().min(1).max(200).optional().describe("Result limit"),
|
|
4336
4421
|
depth: z40.coerce.number().int().min(1).max(3).optional().describe("Neighbor traversal depth"),
|
|
4337
4422
|
output_path: z40.string().optional().describe("Path for export_graph output"),
|
|
@@ -4409,7 +4494,7 @@ function registerSetAgentConfig(server) {
|
|
|
4409
4494
|
content: [
|
|
4410
4495
|
{
|
|
4411
4496
|
type: "text",
|
|
4412
|
-
text: `Access denied. set_agent_config is
|
|
4497
|
+
text: `Access denied. set_agent_config is coordinator-only. Your role: ${agentRole}`
|
|
4413
4498
|
}
|
|
4414
4499
|
],
|
|
4415
4500
|
isError: true
|
|
@@ -5052,7 +5137,7 @@ async function getAgentSessionLoad() {
|
|
|
5052
5137
|
return { sessions: [], totalLive: 0, busySessions: 0, idleSessions: 0 };
|
|
5053
5138
|
}
|
|
5054
5139
|
const { getClient: getClient2 } = await import("./lib/database.js");
|
|
5055
|
-
const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-
|
|
5140
|
+
const { sessionScopeFilter: sessionScopeFilter2 } = await import("./task-scope-QNRAYD7S.js");
|
|
5056
5141
|
const client = getClient2();
|
|
5057
5142
|
const scope = sessionScopeFilter2();
|
|
5058
5143
|
for (const s of liveAgentSessions) {
|
|
@@ -6654,7 +6739,7 @@ function registerCreateTrigger(server) {
|
|
|
6654
6739
|
}
|
|
6655
6740
|
},
|
|
6656
6741
|
async ({ name, event, conditions, actions, project, enabled, schedule, query }) => {
|
|
6657
|
-
const { assertFeature: assertFeature2 } = await import("./plan-limits-
|
|
6742
|
+
const { assertFeature: assertFeature2 } = await import("./plan-limits-BO2HMJ6S.js");
|
|
6658
6743
|
const gatedActions = {
|
|
6659
6744
|
send_whatsapp: "external_agents",
|
|
6660
6745
|
update_wiki: "wiki"
|
|
@@ -7558,7 +7643,7 @@ function registerConfig(server) {
|
|
|
7558
7643
|
const existing = loadEmployeesSync2();
|
|
7559
7644
|
if (existing.some((e) => e.name === employeeName)) return errorResult8(`Employee "${employeeName}" already exists.`);
|
|
7560
7645
|
try {
|
|
7561
|
-
const { assertEmployeeLimit: assertEmployeeLimit2 } = await import("./plan-limits-
|
|
7646
|
+
const { assertEmployeeLimit: assertEmployeeLimit2 } = await import("./plan-limits-BO2HMJ6S.js");
|
|
7562
7647
|
await assertEmployeeLimit2();
|
|
7563
7648
|
} catch (e) {
|
|
7564
7649
|
return errorResult8(e instanceof Error ? e.message : "Employee limit reached.");
|
|
@@ -7599,7 +7684,7 @@ You are ${employeeName}. Role: ${role}.`, "utf-8");
|
|
|
7599
7684
|
}
|
|
7600
7685
|
try {
|
|
7601
7686
|
const { generateSessionWrappers } = await import("./lib/session-wrappers.js");
|
|
7602
|
-
const { resolvePackageRoot } = await import("./installer-
|
|
7687
|
+
const { resolvePackageRoot } = await import("./installer-JF7ARD2O.js");
|
|
7603
7688
|
generateSessionWrappers(resolvePackageRoot());
|
|
7604
7689
|
} catch {
|
|
7605
7690
|
}
|
|
@@ -7635,7 +7720,7 @@ function registerListWikiPages(server) {
|
|
|
7635
7720
|
}
|
|
7636
7721
|
},
|
|
7637
7722
|
async ({ workspace, folder }) => {
|
|
7638
|
-
const { assertFeature: assertFeature2 } = await import("./plan-limits-
|
|
7723
|
+
const { assertFeature: assertFeature2 } = await import("./plan-limits-BO2HMJ6S.js");
|
|
7639
7724
|
await assertFeature2("wiki");
|
|
7640
7725
|
const apiUrl = process.env.EXE_WIKI_API_URL;
|
|
7641
7726
|
const apiKey = process.env.EXE_WIKI_API_KEY;
|
|
@@ -7735,7 +7820,7 @@ function registerGetWikiPage(server) {
|
|
|
7735
7820
|
}
|
|
7736
7821
|
},
|
|
7737
7822
|
async ({ workspace, document_id, title }) => {
|
|
7738
|
-
const { assertFeature: assertFeature2 } = await import("./plan-limits-
|
|
7823
|
+
const { assertFeature: assertFeature2 } = await import("./plan-limits-BO2HMJ6S.js");
|
|
7739
7824
|
await assertFeature2("wiki");
|
|
7740
7825
|
const apiUrl = process.env.EXE_WIKI_API_URL;
|
|
7741
7826
|
const apiKey = process.env.EXE_WIKI_API_KEY;
|
|
@@ -7930,7 +8015,7 @@ function registerWiki(server) {
|
|
|
7930
8015
|
if (!legacyToolName) return errorResult9(`Unknown wiki action: ${String(input.action)}`);
|
|
7931
8016
|
const { action: _action, user_id, ...legacyArgs } = input;
|
|
7932
8017
|
if (user_id && legacyArgs.workspace) {
|
|
7933
|
-
const { checkWikiAccess } = await import("./wiki-acl-
|
|
8018
|
+
const { checkWikiAccess } = await import("./wiki-acl-BIEVKTJC.js");
|
|
7934
8019
|
const { allowed } = await checkWikiAccess(
|
|
7935
8020
|
String(user_id),
|
|
7936
8021
|
String(legacyArgs.workspace),
|
|
@@ -8056,6 +8141,20 @@ ${lines.join("\n")}`
|
|
|
8056
8141
|
};
|
|
8057
8142
|
}
|
|
8058
8143
|
const resolvedAgent = agent_id ?? getActiveAgent().agentId;
|
|
8144
|
+
const isCrossAgentWrite = agent_id != null && agent_id !== getActiveAgent().agentId;
|
|
8145
|
+
if (isCrossAgentWrite) {
|
|
8146
|
+
const caller2 = getActiveAgent();
|
|
8147
|
+
const allowed2 = canCoordinate(caller2.agentId, caller2.agentRole);
|
|
8148
|
+
if (!allowed2) {
|
|
8149
|
+
return {
|
|
8150
|
+
content: [{
|
|
8151
|
+
type: "text",
|
|
8152
|
+
text: `Permission denied. Only the coordinator or founder sessions can store behaviors for other agents. You are "${caller2.agentId}".`
|
|
8153
|
+
}],
|
|
8154
|
+
isError: true
|
|
8155
|
+
};
|
|
8156
|
+
}
|
|
8157
|
+
}
|
|
8059
8158
|
if (resolvedAgent && resolvedAgent !== "default") {
|
|
8060
8159
|
try {
|
|
8061
8160
|
const { loadEmployeesSync: loadEmployeesSync2 } = await import("./lib/employees.js");
|
|
@@ -8070,17 +8169,11 @@ ${lines.join("\n")}`
|
|
|
8070
8169
|
};
|
|
8071
8170
|
}
|
|
8072
8171
|
} catch {
|
|
8073
|
-
|
|
8074
|
-
}
|
|
8075
|
-
if (agent_id) {
|
|
8076
|
-
const caller2 = getActiveAgent();
|
|
8077
|
-
if (agent_id !== caller2.agentId) {
|
|
8078
|
-
const allowed2 = canCoordinate(caller2.agentId, caller2.agentRole);
|
|
8079
|
-
if (!allowed2) {
|
|
8172
|
+
if (isCrossAgentWrite) {
|
|
8080
8173
|
return {
|
|
8081
8174
|
content: [{
|
|
8082
8175
|
type: "text",
|
|
8083
|
-
text: `
|
|
8176
|
+
text: `Unable to verify agent "${resolvedAgent}" \u2014 roster file unavailable. Cannot store cross-agent behavior without roster validation.`
|
|
8084
8177
|
}],
|
|
8085
8178
|
isError: true
|
|
8086
8179
|
};
|
|
@@ -9089,7 +9182,7 @@ function registerWorkflowTool(server) {
|
|
|
9089
9182
|
getWorkflowInstance,
|
|
9090
9183
|
listWorkflowInstances,
|
|
9091
9184
|
approveWorkflowStep
|
|
9092
|
-
} = await import("./workflow-engine-
|
|
9185
|
+
} = await import("./workflow-engine-PK2TC7UE.js");
|
|
9093
9186
|
try {
|
|
9094
9187
|
switch (input.action) {
|
|
9095
9188
|
case "create_workflow": {
|
|
@@ -9213,8 +9306,25 @@ function formatInstanceStatus(inst, def) {
|
|
|
9213
9306
|
|
|
9214
9307
|
// src/mcp/tools/file-copy.ts
|
|
9215
9308
|
import { z as z82 } from "zod";
|
|
9216
|
-
import { copyFileSync, existsSync as existsSync9, mkdirSync as mkdirSync3, statSync as statSync2 } from "fs";
|
|
9309
|
+
import { copyFileSync, existsSync as existsSync9, lstatSync, mkdirSync as mkdirSync3, realpathSync, statSync as statSync2 } from "fs";
|
|
9217
9310
|
import path15 from "path";
|
|
9311
|
+
import os4 from "os";
|
|
9312
|
+
function getAllowedRoots() {
|
|
9313
|
+
const roots = [];
|
|
9314
|
+
roots.push(path15.resolve(process.cwd()));
|
|
9315
|
+
const home = os4.homedir();
|
|
9316
|
+
roots.push(path15.join(home, ".exe-os"));
|
|
9317
|
+
roots.push(path15.join(process.cwd(), ".worktrees"));
|
|
9318
|
+
roots.push(path15.join(home));
|
|
9319
|
+
return roots;
|
|
9320
|
+
}
|
|
9321
|
+
function isWithinBoundary(resolvedPath, roots) {
|
|
9322
|
+
const normalized = path15.normalize(resolvedPath);
|
|
9323
|
+
return roots.some((root) => {
|
|
9324
|
+
const normalizedRoot = path15.normalize(root);
|
|
9325
|
+
return normalized === normalizedRoot || normalized.startsWith(normalizedRoot + path15.sep);
|
|
9326
|
+
});
|
|
9327
|
+
}
|
|
9218
9328
|
function registerFileCopy(server) {
|
|
9219
9329
|
server.registerTool(
|
|
9220
9330
|
"file_copy",
|
|
@@ -9234,10 +9344,34 @@ function registerFileCopy(server) {
|
|
|
9234
9344
|
if (!existsSync9(srcPath)) {
|
|
9235
9345
|
return { content: [{ type: "text", text: `Source file not found: ${srcPath}` }], isError: true };
|
|
9236
9346
|
}
|
|
9347
|
+
const srcLstat = lstatSync(srcPath);
|
|
9348
|
+
if (srcLstat.isSymbolicLink()) {
|
|
9349
|
+
const realSrc = realpathSync(srcPath);
|
|
9350
|
+
const roots = getAllowedRoots();
|
|
9351
|
+
if (!isWithinBoundary(realSrc, roots)) {
|
|
9352
|
+
return {
|
|
9353
|
+
content: [{ type: "text", text: `Security: source symlink resolves outside allowed boundaries: ${realSrc}` }],
|
|
9354
|
+
isError: true
|
|
9355
|
+
};
|
|
9356
|
+
}
|
|
9357
|
+
}
|
|
9237
9358
|
const srcStat = statSync2(srcPath);
|
|
9238
9359
|
if (!srcStat.isFile()) {
|
|
9239
9360
|
return { content: [{ type: "text", text: `Source is not a file: ${srcPath}` }], isError: true };
|
|
9240
9361
|
}
|
|
9362
|
+
const allowedRoots = getAllowedRoots();
|
|
9363
|
+
if (!isWithinBoundary(srcPath, allowedRoots)) {
|
|
9364
|
+
return {
|
|
9365
|
+
content: [{ type: "text", text: `Security: source path escapes allowed boundaries: ${srcPath}` }],
|
|
9366
|
+
isError: true
|
|
9367
|
+
};
|
|
9368
|
+
}
|
|
9369
|
+
if (!isWithinBoundary(dstPath, allowedRoots)) {
|
|
9370
|
+
return {
|
|
9371
|
+
content: [{ type: "text", text: `Security: destination path escapes allowed boundaries: ${dstPath}` }],
|
|
9372
|
+
isError: true
|
|
9373
|
+
};
|
|
9374
|
+
}
|
|
9241
9375
|
if (existsSync9(dstPath) && !overwrite) {
|
|
9242
9376
|
return { content: [{ type: "text", text: `Destination already exists: ${dstPath}. Set overwrite=true to replace.` }], isError: true };
|
|
9243
9377
|
}
|
|
@@ -10099,7 +10233,7 @@ function registerGetSessionEvents(server) {
|
|
|
10099
10233
|
const targetAgent = agent_id?.trim() || active.agentId;
|
|
10100
10234
|
if (!canReadAgent(active.agentRole, active.agentId, targetAgent)) {
|
|
10101
10235
|
return {
|
|
10102
|
-
content: [{ type: "text", text: "Permission denied: only
|
|
10236
|
+
content: [{ type: "text", text: "Permission denied: only coordinators/CTO may read another agent's session events." }],
|
|
10103
10237
|
isError: true
|
|
10104
10238
|
};
|
|
10105
10239
|
}
|
|
@@ -10136,7 +10270,7 @@ function registerGetLastAssistantResponse(server) {
|
|
|
10136
10270
|
const targetAgent = agent_id?.trim() || active.agentId;
|
|
10137
10271
|
if (!canReadAgent(active.agentRole, active.agentId, targetAgent)) {
|
|
10138
10272
|
return {
|
|
10139
|
-
content: [{ type: "text", text: "Permission denied: only
|
|
10273
|
+
content: [{ type: "text", text: "Permission denied: only coordinators/CTO may read another agent's last response." }],
|
|
10140
10274
|
isError: true
|
|
10141
10275
|
};
|
|
10142
10276
|
}
|