pi-kot 0.1.21 → 0.1.22
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/bin/pi-kot.mjs +148 -0
- package/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/client/assets/index-CE_Na97I.js +75 -0
- package/client/assets/index-CE_Na97I.js.map +1 -0
- package/client/assets/index-QP95zkpd.css +1 -0
- package/client/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/client/assets/vendor-codemirror-CD3uCqRj.js +48 -0
- package/client/assets/vendor-codemirror-CD3uCqRj.js.map +1 -0
- package/client/assets/vendor-icons-W8thHNMl.js +2 -0
- package/client/assets/vendor-icons-W8thHNMl.js.map +1 -0
- package/client/assets/vendor-katex-4z5K3dyr.js +260 -0
- package/client/assets/vendor-katex-4z5K3dyr.js.map +1 -0
- package/client/assets/vendor-katex-CYlHEDRF.css +1 -0
- package/client/assets/vendor-markdown-BSzxNR_7.js +35 -0
- package/client/assets/vendor-markdown-BSzxNR_7.js.map +1 -0
- package/client/assets/vendor-prism-CQGp13s2.js +4 -0
- package/client/assets/vendor-prism-CQGp13s2.js.map +1 -0
- package/client/assets/vendor-xterm-BrP-ENHg.css +1 -0
- package/client/assets/vendor-xterm-DXwh06H3.js +36 -0
- package/client/assets/vendor-xterm-DXwh06H3.js.map +1 -0
- package/client/index.html +23 -0
- package/package.json +5 -3
- package/server/ask-user-question/envelope.d.ts +11 -0
- package/server/ask-user-question/envelope.d.ts.map +1 -0
- package/server/ask-user-question/envelope.js +41 -0
- package/server/ask-user-question/envelope.js.map +1 -0
- package/server/ask-user-question/plan-mode-question-tool.d.ts +26 -0
- package/server/ask-user-question/plan-mode-question-tool.d.ts.map +1 -0
- package/server/ask-user-question/plan-mode-question-tool.js +273 -0
- package/server/ask-user-question/plan-mode-question-tool.js.map +1 -0
- package/server/ask-user-question/prompt-strings.d.ts +4 -0
- package/server/ask-user-question/prompt-strings.d.ts.map +1 -0
- package/server/ask-user-question/prompt-strings.js +18 -0
- package/server/ask-user-question/prompt-strings.js.map +1 -0
- package/server/ask-user-question/registry.d.ts +39 -0
- package/server/ask-user-question/registry.d.ts.map +1 -0
- package/server/ask-user-question/registry.js +124 -0
- package/server/ask-user-question/registry.js.map +1 -0
- package/server/ask-user-question/tool.d.ts +4 -0
- package/server/ask-user-question/tool.d.ts.map +1 -0
- package/server/ask-user-question/tool.js +68 -0
- package/server/ask-user-question/tool.js.map +1 -0
- package/server/ask-user-question/types.d.ts +50 -0
- package/server/ask-user-question/types.d.ts.map +1 -0
- package/server/ask-user-question/types.js +7 -0
- package/server/ask-user-question/types.js.map +1 -0
- package/server/ask-user-question/validate.d.ts +3 -0
- package/server/ask-user-question/validate.d.ts.map +1 -0
- package/server/ask-user-question/validate.js +67 -0
- package/server/ask-user-question/validate.js.map +1 -0
- package/server/clone-provider.d.ts +55 -0
- package/server/clone-provider.d.ts.map +1 -0
- package/server/clone-provider.js +172 -0
- package/server/clone-provider.js.map +1 -0
- package/server/compaction-cards.d.ts +62 -0
- package/server/compaction-cards.d.ts.map +1 -0
- package/server/compaction-cards.js +180 -0
- package/server/compaction-cards.js.map +1 -0
- package/server/compaction-continuation.d.ts +112 -0
- package/server/compaction-continuation.d.ts.map +1 -0
- package/server/compaction-continuation.js +65 -0
- package/server/compaction-continuation.js.map +1 -0
- package/server/config-store.d.ts +97 -0
- package/server/config-store.d.ts.map +1 -0
- package/server/config-store.js +351 -0
- package/server/config-store.js.map +1 -0
- package/server/config.d.ts +24 -0
- package/server/config.d.ts.map +1 -0
- package/server/config.js +67 -0
- package/server/config.js.map +1 -0
- package/server/event-stream.d.ts +28 -0
- package/server/event-stream.d.ts.map +1 -0
- package/server/event-stream.js +153 -0
- package/server/event-stream.js.map +1 -0
- package/server/extension-manager.d.ts +116 -0
- package/server/extension-manager.d.ts.map +1 -0
- package/server/extension-manager.js +586 -0
- package/server/extension-manager.js.map +1 -0
- package/server/extension-scanner.d.ts +26 -0
- package/server/extension-scanner.d.ts.map +1 -0
- package/server/extension-scanner.js +107 -0
- package/server/extension-scanner.js.map +1 -0
- package/server/extension-ui-bridge.d.ts +35 -0
- package/server/extension-ui-bridge.d.ts.map +1 -0
- package/server/extension-ui-bridge.js +228 -0
- package/server/extension-ui-bridge.js.map +1 -0
- package/server/file-manager.d.ts +79 -0
- package/server/file-manager.d.ts.map +1 -0
- package/server/file-manager.js +535 -0
- package/server/file-manager.js.map +1 -0
- package/server/file-searcher.d.ts +29 -0
- package/server/file-searcher.d.ts.map +1 -0
- package/server/file-searcher.js +318 -0
- package/server/file-searcher.js.map +1 -0
- package/server/git-operations.d.ts +346 -0
- package/server/git-operations.d.ts.map +1 -0
- package/server/git-operations.js +884 -0
- package/server/git-operations.js.map +1 -0
- package/server/hunk-stager.d.ts +56 -0
- package/server/hunk-stager.d.ts.map +1 -0
- package/server/hunk-stager.js +137 -0
- package/server/hunk-stager.js.map +1 -0
- package/server/index.d.ts +21 -0
- package/server/index.d.ts.map +1 -0
- package/server/index.js +262 -0
- package/server/index.js.map +1 -0
- package/server/mcp/config.d.ts +23 -0
- package/server/mcp/config.d.ts.map +1 -0
- package/server/mcp/config.js +139 -0
- package/server/mcp/config.js.map +1 -0
- package/server/mcp/manager.d.ts +40 -0
- package/server/mcp/manager.d.ts.map +1 -0
- package/server/mcp/manager.js +435 -0
- package/server/mcp/manager.js.map +1 -0
- package/server/mcp/stdio-trust.d.ts +5 -0
- package/server/mcp/stdio-trust.d.ts.map +1 -0
- package/server/mcp/stdio-trust.js +78 -0
- package/server/mcp/stdio-trust.js.map +1 -0
- package/server/mcp/tool-bridge.d.ts +33 -0
- package/server/mcp/tool-bridge.d.ts.map +1 -0
- package/server/mcp/tool-bridge.js +138 -0
- package/server/mcp/tool-bridge.js.map +1 -0
- package/server/orchestration/config.d.ts +5 -0
- package/server/orchestration/config.d.ts.map +1 -0
- package/server/orchestration/config.js +35 -0
- package/server/orchestration/config.js.map +1 -0
- package/server/orchestration/event-bridge.d.ts +32 -0
- package/server/orchestration/event-bridge.d.ts.map +1 -0
- package/server/orchestration/event-bridge.js +110 -0
- package/server/orchestration/event-bridge.js.map +1 -0
- package/server/orchestration/inbox.d.ts +9 -0
- package/server/orchestration/inbox.d.ts.map +1 -0
- package/server/orchestration/inbox.js +186 -0
- package/server/orchestration/inbox.js.map +1 -0
- package/server/orchestration/init.d.ts +2 -0
- package/server/orchestration/init.d.ts.map +1 -0
- package/server/orchestration/init.js +22 -0
- package/server/orchestration/init.js.map +1 -0
- package/server/orchestration/store.d.ts +33 -0
- package/server/orchestration/store.d.ts.map +1 -0
- package/server/orchestration/store.js +331 -0
- package/server/orchestration/store.js.map +1 -0
- package/server/orchestration/tools.d.ts +15 -0
- package/server/orchestration/tools.d.ts.map +1 -0
- package/server/orchestration/tools.js +621 -0
- package/server/orchestration/tools.js.map +1 -0
- package/server/orchestration/types.d.ts +68 -0
- package/server/orchestration/types.d.ts.map +1 -0
- package/server/orchestration/types.js +43 -0
- package/server/orchestration/types.js.map +1 -0
- package/server/orchestration/worker-lifecycle.d.ts +15 -0
- package/server/orchestration/worker-lifecycle.d.ts.map +1 -0
- package/server/orchestration/worker-lifecycle.js +45 -0
- package/server/orchestration/worker-lifecycle.js.map +1 -0
- package/server/path-refs.d.ts +5 -0
- package/server/path-refs.d.ts.map +1 -0
- package/server/path-refs.js +249 -0
- package/server/path-refs.js.map +1 -0
- package/server/routes/_schemas.d.ts +16 -0
- package/server/routes/_schemas.d.ts.map +1 -0
- package/server/routes/_schemas.js +12 -0
- package/server/routes/_schemas.js.map +1 -0
- package/server/routes/ask-user-question.d.ts +3 -0
- package/server/routes/ask-user-question.d.ts.map +1 -0
- package/server/routes/ask-user-question.js +105 -0
- package/server/routes/ask-user-question.js.map +1 -0
- package/server/routes/auth.d.ts +8 -0
- package/server/routes/auth.d.ts.map +1 -0
- package/server/routes/auth.js +225 -0
- package/server/routes/auth.js.map +1 -0
- package/server/routes/config.d.ts +3 -0
- package/server/routes/config.d.ts.map +1 -0
- package/server/routes/config.js +602 -0
- package/server/routes/config.js.map +1 -0
- package/server/routes/control.d.ts +3 -0
- package/server/routes/control.d.ts.map +1 -0
- package/server/routes/control.js +365 -0
- package/server/routes/control.js.map +1 -0
- package/server/routes/exec.d.ts +3 -0
- package/server/routes/exec.d.ts.map +1 -0
- package/server/routes/exec.js +426 -0
- package/server/routes/exec.js.map +1 -0
- package/server/routes/extension-commands.d.ts +22 -0
- package/server/routes/extension-commands.d.ts.map +1 -0
- package/server/routes/extension-commands.js +178 -0
- package/server/routes/extension-commands.js.map +1 -0
- package/server/routes/extensions.d.ts +8 -0
- package/server/routes/extensions.d.ts.map +1 -0
- package/server/routes/extensions.js +414 -0
- package/server/routes/extensions.js.map +1 -0
- package/server/routes/files.d.ts +3 -0
- package/server/routes/files.d.ts.map +1 -0
- package/server/routes/files.js +835 -0
- package/server/routes/files.js.map +1 -0
- package/server/routes/git.d.ts +3 -0
- package/server/routes/git.d.ts.map +1 -0
- package/server/routes/git.js +1058 -0
- package/server/routes/git.js.map +1 -0
- package/server/routes/mcp.d.ts +3 -0
- package/server/routes/mcp.d.ts.map +1 -0
- package/server/routes/mcp.js +403 -0
- package/server/routes/mcp.js.map +1 -0
- package/server/routes/orchestration.d.ts +3 -0
- package/server/routes/orchestration.d.ts.map +1 -0
- package/server/routes/orchestration.js +251 -0
- package/server/routes/orchestration.js.map +1 -0
- package/server/routes/projects.d.ts +3 -0
- package/server/routes/projects.d.ts.map +1 -0
- package/server/routes/projects.js +421 -0
- package/server/routes/projects.js.map +1 -0
- package/server/routes/prompt.d.ts +3 -0
- package/server/routes/prompt.d.ts.map +1 -0
- package/server/routes/prompt.js +311 -0
- package/server/routes/prompt.js.map +1 -0
- package/server/routes/session-extensions.d.ts +11 -0
- package/server/routes/session-extensions.d.ts.map +1 -0
- package/server/routes/session-extensions.js +171 -0
- package/server/routes/session-extensions.js.map +1 -0
- package/server/routes/sessions.d.ts +3 -0
- package/server/routes/sessions.d.ts.map +1 -0
- package/server/routes/sessions.js +706 -0
- package/server/routes/sessions.js.map +1 -0
- package/server/routes/skills.d.ts +14 -0
- package/server/routes/skills.d.ts.map +1 -0
- package/server/routes/skills.js +448 -0
- package/server/routes/skills.js.map +1 -0
- package/server/routes/stream.d.ts +3 -0
- package/server/routes/stream.d.ts.map +1 -0
- package/server/routes/stream.js +112 -0
- package/server/routes/stream.js.map +1 -0
- package/server/routes/terminal.d.ts +28 -0
- package/server/routes/terminal.d.ts.map +1 -0
- package/server/routes/terminal.js +211 -0
- package/server/routes/terminal.js.map +1 -0
- package/server/routes/tunnel.d.ts +13 -0
- package/server/routes/tunnel.d.ts.map +1 -0
- package/server/routes/tunnel.js +231 -0
- package/server/routes/tunnel.js.map +1 -0
- package/server/session-alerts.d.ts +28 -0
- package/server/session-alerts.d.ts.map +1 -0
- package/server/session-alerts.js +38 -0
- package/server/session-alerts.js.map +1 -0
- package/server/session-store.d.ts +164 -0
- package/server/session-store.d.ts.map +1 -0
- package/server/session-store.js +754 -0
- package/server/session-store.js.map +1 -0
- package/server/skill-policy.d.ts +47 -0
- package/server/skill-policy.d.ts.map +1 -0
- package/server/skill-policy.js +178 -0
- package/server/skill-policy.js.map +1 -0
- package/server/terminal-provider.d.ts +54 -0
- package/server/terminal-provider.d.ts.map +1 -0
- package/server/terminal-provider.js +220 -0
- package/server/terminal-provider.js.map +1 -0
- package/server/tool-policy.d.ts +39 -0
- package/server/tool-policy.d.ts.map +1 -0
- package/server/tool-policy.js +121 -0
- package/server/tool-policy.js.map +1 -0
- package/server/tunnel/executable-search.d.ts +43 -0
- package/server/tunnel/executable-search.d.ts.map +1 -0
- package/server/tunnel/executable-search.js +148 -0
- package/server/tunnel/executable-search.js.map +1 -0
- package/server/tunnel/install-help.d.ts +19 -0
- package/server/tunnel/install-help.d.ts.map +1 -0
- package/server/tunnel/install-help.js +47 -0
- package/server/tunnel/install-help.js.map +1 -0
- package/server/tunnel/providers/ngrok.d.ts +31 -0
- package/server/tunnel/providers/ngrok.d.ts.map +1 -0
- package/server/tunnel/providers/ngrok.js +461 -0
- package/server/tunnel/providers/ngrok.js.map +1 -0
- package/server/tunnel/registry.d.ts +13 -0
- package/server/tunnel/registry.d.ts.map +1 -0
- package/server/tunnel/registry.js +56 -0
- package/server/tunnel/registry.js.map +1 -0
- package/server/tunnel/service.d.ts +13 -0
- package/server/tunnel/service.d.ts.map +1 -0
- package/server/tunnel/service.js +156 -0
- package/server/tunnel/service.js.map +1 -0
- package/server/tunnel/types.d.ts +163 -0
- package/server/tunnel/types.d.ts.map +1 -0
- package/server/tunnel/types.js +214 -0
- package/server/tunnel/types.js.map +1 -0
- package/server/ui-settings-store.d.ts +25 -0
- package/server/ui-settings-store.d.ts.map +1 -0
- package/server/ui-settings-store.js +91 -0
- package/server/ui-settings-store.js.map +1 -0
- package/server/workspace-store.d.ts +25 -0
- package/server/workspace-store.d.ts.map +1 -0
- package/server/workspace-store.js +157 -0
- package/server/workspace-store.js.map +1 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { chmodSync } from "node:fs";
|
|
2
|
+
import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { config } from "../config.js";
|
|
6
|
+
async function ensureDir() {
|
|
7
|
+
await mkdir(dirname(config.mcpStdioTrustFile), { recursive: true });
|
|
8
|
+
}
|
|
9
|
+
async function atomicWrite(data) {
|
|
10
|
+
await ensureDir();
|
|
11
|
+
const path = config.mcpStdioTrustFile;
|
|
12
|
+
const tmp = `${path}.${randomUUID()}.tmp`;
|
|
13
|
+
await writeFile(tmp, JSON.stringify(data, null, 2), { mode: 0o600 });
|
|
14
|
+
try {
|
|
15
|
+
chmodSync(tmp, 0o600);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// best-effort
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
await rename(tmp, path);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
await unlink(tmp).catch(() => undefined);
|
|
25
|
+
throw err;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function readAll() {
|
|
29
|
+
try {
|
|
30
|
+
const raw = await readFile(config.mcpStdioTrustFile, "utf8");
|
|
31
|
+
if (raw.trim().length === 0)
|
|
32
|
+
return { projects: {} };
|
|
33
|
+
const parsed = JSON.parse(raw);
|
|
34
|
+
if (typeof parsed !== "object" || parsed === null || !("projects" in parsed)) {
|
|
35
|
+
return { projects: {} };
|
|
36
|
+
}
|
|
37
|
+
const projects = parsed.projects;
|
|
38
|
+
if (typeof projects !== "object" || projects === null)
|
|
39
|
+
return { projects: {} };
|
|
40
|
+
const out = { projects: {} };
|
|
41
|
+
for (const [pid, val] of Object.entries(projects)) {
|
|
42
|
+
if (typeof val !== "object" || val === null)
|
|
43
|
+
continue;
|
|
44
|
+
const trustedAt = val.trustedAt;
|
|
45
|
+
if (typeof trustedAt !== "string")
|
|
46
|
+
continue;
|
|
47
|
+
out.projects[pid] = { trustedAt };
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
if (err.code === "ENOENT")
|
|
53
|
+
return { projects: {} };
|
|
54
|
+
throw err;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export async function isStdioTrustedForProject(projectId) {
|
|
58
|
+
const cur = await readAll();
|
|
59
|
+
return cur.projects[projectId] !== undefined;
|
|
60
|
+
}
|
|
61
|
+
export async function grantStdioTrust(projectId) {
|
|
62
|
+
const cur = await readAll();
|
|
63
|
+
if (cur.projects[projectId] !== undefined)
|
|
64
|
+
return;
|
|
65
|
+
cur.projects[projectId] = { trustedAt: new Date().toISOString() };
|
|
66
|
+
await atomicWrite(cur);
|
|
67
|
+
}
|
|
68
|
+
export async function revokeStdioTrust(projectId) {
|
|
69
|
+
const cur = await readAll();
|
|
70
|
+
if (cur.projects[projectId] === undefined)
|
|
71
|
+
return;
|
|
72
|
+
delete cur.projects[projectId];
|
|
73
|
+
await atomicWrite(cur);
|
|
74
|
+
}
|
|
75
|
+
export async function clearProjectStdioTrust(projectId) {
|
|
76
|
+
await revokeStdioTrust(projectId);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=stdio-trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-trust.js","sourceRoot":"","sources":["../../src/mcp/stdio-trust.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
3
|
+
export declare function bridgeMcpTool(opts: {
|
|
4
|
+
serverName: string;
|
|
5
|
+
toolName: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: Record<string, unknown>;
|
|
8
|
+
getClient: () => Client | undefined;
|
|
9
|
+
recoverStaleSession?: () => Promise<boolean>;
|
|
10
|
+
}): ToolDefinition;
|
|
11
|
+
export declare function mcpResultToAgentResult(res: unknown): {
|
|
12
|
+
content: ({
|
|
13
|
+
type: "text";
|
|
14
|
+
text: string;
|
|
15
|
+
} | {
|
|
16
|
+
type: "image";
|
|
17
|
+
data: string;
|
|
18
|
+
mimeType: string;
|
|
19
|
+
})[];
|
|
20
|
+
details: {} | null;
|
|
21
|
+
};
|
|
22
|
+
export declare const MCP_TEXT_CAP_CHARS = 30000;
|
|
23
|
+
type ContentBlock = {
|
|
24
|
+
type: "text";
|
|
25
|
+
text: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: "image";
|
|
28
|
+
data: string;
|
|
29
|
+
mimeType: string;
|
|
30
|
+
};
|
|
31
|
+
export declare function capTextContent(blocks: ContentBlock[]): ContentBlock[];
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=tool-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-bridge.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACpC,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C,GAAG,cAAc,CA2CjB;AA4DD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO;;cAGzB,MAAM;cAAQ,MAAM;;cAAa,OAAO;cAAQ,MAAM;kBAAY,MAAM;;;EAyBjG;AAED,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAEzC,KAAK,YAAY,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAqCrE"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
export function bridgeMcpTool(opts) {
|
|
3
|
+
const prefixedName = `${opts.serverName}__${opts.toolName}`;
|
|
4
|
+
const description = opts.description.length > 0
|
|
5
|
+
? opts.description
|
|
6
|
+
: `MCP tool '${opts.toolName}' from server '${opts.serverName}'.`;
|
|
7
|
+
return {
|
|
8
|
+
name: prefixedName,
|
|
9
|
+
label: `MCP: ${opts.serverName}/${opts.toolName}`,
|
|
10
|
+
description,
|
|
11
|
+
parameters: Type.Unsafe(opts.inputSchema),
|
|
12
|
+
async execute(_toolCallId, params, signal) {
|
|
13
|
+
const client = opts.getClient();
|
|
14
|
+
if (client === undefined) {
|
|
15
|
+
return {
|
|
16
|
+
content: [{ type: "text", text: `MCP server '${opts.serverName}' is not connected.` }],
|
|
17
|
+
details: undefined,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const res = await callMcpTool(client, opts.toolName, params, signal);
|
|
22
|
+
return mcpResultToAgentResult(res);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
if (!isAbortError(err) &&
|
|
26
|
+
isStaleMcpSessionError(err) &&
|
|
27
|
+
opts.recoverStaleSession !== undefined) {
|
|
28
|
+
const recovered = await opts.recoverStaleSession().catch(() => false);
|
|
29
|
+
const retryClient = opts.getClient();
|
|
30
|
+
if (recovered && retryClient !== undefined) {
|
|
31
|
+
try {
|
|
32
|
+
const retryRes = await callMcpTool(retryClient, opts.toolName, params, signal);
|
|
33
|
+
return mcpResultToAgentResult(retryRes);
|
|
34
|
+
}
|
|
35
|
+
catch (retryErr) {
|
|
36
|
+
return errorResult(`MCP tool '${prefixedName}' threw after reconnect: ${errorMessage(retryErr)}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return errorResult(`MCP tool '${prefixedName}' threw: ${errorMessage(err)}`);
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async function callMcpTool(client, toolName, params, signal) {
|
|
46
|
+
return await client.callTool({
|
|
47
|
+
name: toolName,
|
|
48
|
+
arguments: params ?? {},
|
|
49
|
+
}, undefined, signal !== undefined ? { signal } : undefined);
|
|
50
|
+
}
|
|
51
|
+
function errorResult(message) {
|
|
52
|
+
return {
|
|
53
|
+
content: [{ type: "text", text: message }],
|
|
54
|
+
details: undefined,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function errorMessage(err) {
|
|
58
|
+
return err instanceof Error ? err.message : String(err);
|
|
59
|
+
}
|
|
60
|
+
function isAbortError(err) {
|
|
61
|
+
return err instanceof Error && (err.name === "AbortError" || err.message.includes("aborted"));
|
|
62
|
+
}
|
|
63
|
+
function isStaleMcpSessionError(err) {
|
|
64
|
+
const maybe = err;
|
|
65
|
+
const code = maybe.code ?? maybe.error?.code;
|
|
66
|
+
const message = String(maybe.message ?? maybe.error?.message ?? err).toLowerCase();
|
|
67
|
+
const hasStaleMessage = message.includes("session not found") || message.includes("sesstion not found");
|
|
68
|
+
return hasStaleMessage && (code === undefined || code === -32600 || message.includes("-32600"));
|
|
69
|
+
}
|
|
70
|
+
export function mcpResultToAgentResult(res) {
|
|
71
|
+
const r = (res ?? {});
|
|
72
|
+
const isError = r.isError === true;
|
|
73
|
+
const content = [];
|
|
74
|
+
const blocks = Array.isArray(r.content) ? r.content : [];
|
|
75
|
+
for (const block of blocks) {
|
|
76
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
77
|
+
content.push({ type: "text", text: block.text });
|
|
78
|
+
}
|
|
79
|
+
else if (block.type === "image" &&
|
|
80
|
+
typeof block.data === "string" &&
|
|
81
|
+
typeof block.mimeType === "string") {
|
|
82
|
+
content.push({ type: "image", data: block.data, mimeType: block.mimeType });
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
content.push({
|
|
86
|
+
type: "text",
|
|
87
|
+
text: `[${String(block.type ?? "unknown")}] ${JSON.stringify(block)}`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (content.length === 0) {
|
|
92
|
+
content.push({ type: "text", text: isError ? "[error] (no detail)" : "(empty result)" });
|
|
93
|
+
}
|
|
94
|
+
if (isError && content[0]?.type === "text") {
|
|
95
|
+
content[0] = { type: "text", text: `[error] ${content[0].text}` };
|
|
96
|
+
}
|
|
97
|
+
return { content, details: r.structuredContent ?? null };
|
|
98
|
+
}
|
|
99
|
+
export const MCP_TEXT_CAP_CHARS = 30_000;
|
|
100
|
+
export function capTextContent(blocks) {
|
|
101
|
+
let totalText = 0;
|
|
102
|
+
for (const b of blocks) {
|
|
103
|
+
if (b.type === "text")
|
|
104
|
+
totalText += b.text.length;
|
|
105
|
+
}
|
|
106
|
+
if (totalText <= MCP_TEXT_CAP_CHARS)
|
|
107
|
+
return blocks;
|
|
108
|
+
const flat = blocks
|
|
109
|
+
.filter((b) => b.type === "text")
|
|
110
|
+
.map((b) => b.text)
|
|
111
|
+
.join("\n\n");
|
|
112
|
+
const headLen = Math.floor(MCP_TEXT_CAP_CHARS * 0.6);
|
|
113
|
+
const tailLen = MCP_TEXT_CAP_CHARS - headLen;
|
|
114
|
+
const head = flat.slice(0, headLen);
|
|
115
|
+
const tail = flat.slice(flat.length - tailLen);
|
|
116
|
+
const omitted = flat.length - headLen - tailLen;
|
|
117
|
+
const warning = `MCP_RESULT_TRUNCATED: ${omitted.toLocaleString()} characters ` +
|
|
118
|
+
`(~${Math.round(omitted / 4).toLocaleString()} tokens) were omitted from the middle of this tool result. ` +
|
|
119
|
+
`Do not assume the missing content was irrelevant. Next step: call the MCP tool again with a smaller scope, ` +
|
|
120
|
+
`narrower filter, or pagination to inspect the omitted content.\n\n`;
|
|
121
|
+
const marker = `\n\n[--- MCP_RESULT_TRUNCATED: omitted middle content. Use a smaller scope, narrower filter, ` +
|
|
122
|
+
`or pagination to inspect it. ---]\n\n`;
|
|
123
|
+
const truncatedText = warning + head + marker + tail;
|
|
124
|
+
const out = [];
|
|
125
|
+
let textInjected = false;
|
|
126
|
+
for (const b of blocks) {
|
|
127
|
+
if (b.type === "text") {
|
|
128
|
+
if (!textInjected) {
|
|
129
|
+
out.push({ type: "text", text: truncatedText });
|
|
130
|
+
textInjected = true;
|
|
131
|
+
}
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
out.push(b);
|
|
135
|
+
}
|
|
136
|
+
return out;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=tool-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-bridge.js","sourceRoot":"","sources":["../../src/mcp/tool-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function isOrchestrationEnabled(): boolean;
|
|
2
|
+
export declare function maxWorkersPerSupervisor(): number;
|
|
3
|
+
export declare function isOrchestrationAvailable(): boolean;
|
|
4
|
+
export declare function availableReason(): string;
|
|
5
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/orchestration/config.ts"],"names":[],"mappings":"AASA,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAGD,wBAAgB,eAAe,IAAI,MAAM,CAUxC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime config for the orchestration feature.
|
|
3
|
+
*
|
|
4
|
+
* Enabled by default with an instance-level disable switch + tunable
|
|
5
|
+
* limits. MINIMAL_UI is a HARD gate (checked separately in routes +
|
|
6
|
+
* tool registration).
|
|
7
|
+
*/
|
|
8
|
+
import { config } from "../config.js";
|
|
9
|
+
export function isOrchestrationEnabled() {
|
|
10
|
+
if (config.minimalUi)
|
|
11
|
+
return false;
|
|
12
|
+
return config.orchestrationEnabled;
|
|
13
|
+
}
|
|
14
|
+
export function maxWorkersPerSupervisor() {
|
|
15
|
+
return Math.max(1, Math.min(config.orchestrationMaxWorkersPerSupervisor, 100));
|
|
16
|
+
}
|
|
17
|
+
export function isOrchestrationAvailable() {
|
|
18
|
+
return config.orchestrationEnabled && !config.minimalUi;
|
|
19
|
+
}
|
|
20
|
+
let _disabledReason;
|
|
21
|
+
export function availableReason() {
|
|
22
|
+
if (_disabledReason !== undefined)
|
|
23
|
+
return _disabledReason;
|
|
24
|
+
if (config.minimalUi) {
|
|
25
|
+
_disabledReason = "Orchestration is disabled under MINIMAL_UI mode.";
|
|
26
|
+
}
|
|
27
|
+
else if (!config.orchestrationEnabled) {
|
|
28
|
+
_disabledReason = "Orchestration is disabled by operator config.";
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
_disabledReason = "available";
|
|
32
|
+
}
|
|
33
|
+
return _disabledReason;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/orchestration/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,UAAU,sBAAsB;IACpC,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,MAAM,CAAC,oBAAoB,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,MAAM,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,IAAI,eAAmC,CAAC;AACxC,MAAM,UAAU,eAAe;IAC7B,IAAI,eAAe,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC;IAC1D,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,eAAe,GAAG,kDAAkD,CAAC;IACvE,CAAC;SAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACxC,eAAe,GAAG,+CAA+C,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,eAAe,GAAG,WAAW,CAAC;IAChC,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridges forge-side worker events into supervisor notifications/history.
|
|
3
|
+
*
|
|
4
|
+
* Four event sources feed worker lifecycle updates:
|
|
5
|
+
* AgentSession events (per-session subscribe in session-store):
|
|
6
|
+
* - `agent_start` → record open turn state only
|
|
7
|
+
* - `agent_end` → `worker.ended` (with final error info)
|
|
8
|
+
* ask-user-question registry:
|
|
9
|
+
* - `ask_user_question` → `worker.ask_user` + awaiting_question state
|
|
10
|
+
* processManager:
|
|
11
|
+
* - `process_alert` → intentionally NOT bridged (too noisy)
|
|
12
|
+
* session-store lifecycle (sessions DELETE route):
|
|
13
|
+
* - hot delete → `worker.deleted`
|
|
14
|
+
*/
|
|
15
|
+
import type { AgentSession, AgentSessionEvent } from "@earendil-works/pi-coding-agent";
|
|
16
|
+
export declare function bridgeWorkerAgentEvent(meta: {
|
|
17
|
+
sessionId: string;
|
|
18
|
+
session: AgentSession;
|
|
19
|
+
}, event: AgentSessionEvent): Promise<void>;
|
|
20
|
+
export declare function bridgeWorkerAskUserQuestion(sessionId: string, questions: readonly {
|
|
21
|
+
header?: string;
|
|
22
|
+
question?: string;
|
|
23
|
+
}[], requestId: string): Promise<void>;
|
|
24
|
+
export declare function bridgeWorkerExecutionStopped(sessionId: string, meta: {
|
|
25
|
+
wasLive: boolean;
|
|
26
|
+
reason: "deleted" | "killed" | "disposed" | "aborted";
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
export declare function bridgeWorkerDeleted(sessionId: string, meta: {
|
|
29
|
+
wasLive: boolean;
|
|
30
|
+
reason?: "deleted" | "killed" | "disposed" | "aborted";
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=event-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bridge.d.ts","sourceRoot":"","sources":["../../src/orchestration/event-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAoCvF,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,EAClD,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAC5D,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAA;CAAE,GAChF,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAA;CAAE,GACjF,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { bridgeWorkerEvent } from "./inbox.js";
|
|
2
|
+
import { getWorkerRecord, updateWorkerLifecycle } from "./store.js";
|
|
3
|
+
function findLastAssistant(messages) {
|
|
4
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
5
|
+
const m = messages[i];
|
|
6
|
+
if (m?.role !== "assistant")
|
|
7
|
+
continue;
|
|
8
|
+
const a = m;
|
|
9
|
+
const text = extractAssistantText(a.content);
|
|
10
|
+
const out = {};
|
|
11
|
+
if (a.stopReason !== undefined)
|
|
12
|
+
out.stopReason = a.stopReason;
|
|
13
|
+
if (a.errorMessage !== undefined)
|
|
14
|
+
out.errorMessage = a.errorMessage;
|
|
15
|
+
if (text !== undefined)
|
|
16
|
+
out.text = text;
|
|
17
|
+
return out;
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
function extractAssistantText(content) {
|
|
22
|
+
if (!Array.isArray(content))
|
|
23
|
+
return undefined;
|
|
24
|
+
const parts = [];
|
|
25
|
+
for (const c of content) {
|
|
26
|
+
const o = c;
|
|
27
|
+
if (o.type === "text" && typeof o.text === "string")
|
|
28
|
+
parts.push(o.text);
|
|
29
|
+
}
|
|
30
|
+
if (parts.length === 0)
|
|
31
|
+
return undefined;
|
|
32
|
+
return parts.join("\n");
|
|
33
|
+
}
|
|
34
|
+
export async function bridgeWorkerAgentEvent(meta, event) {
|
|
35
|
+
const e = event;
|
|
36
|
+
const now = new Date().toISOString();
|
|
37
|
+
if (e.type === "agent_start") {
|
|
38
|
+
await updateWorkerLifecycle(meta.sessionId, {
|
|
39
|
+
state: "running",
|
|
40
|
+
turnOpen: true,
|
|
41
|
+
lastStateAt: now,
|
|
42
|
+
lastAgentStartAt: now,
|
|
43
|
+
stopReason: null,
|
|
44
|
+
errorMessage: null,
|
|
45
|
+
});
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (e.type !== "agent_end")
|
|
49
|
+
return;
|
|
50
|
+
const messages = meta.session.messages;
|
|
51
|
+
const lastAssistant = findLastAssistant(messages);
|
|
52
|
+
const errorMessage = meta.session.errorMessage ??
|
|
53
|
+
lastAssistant?.errorMessage;
|
|
54
|
+
const hasError = typeof errorMessage === "string" && errorMessage.length > 0;
|
|
55
|
+
await updateWorkerLifecycle(meta.sessionId, {
|
|
56
|
+
state: hasError ? "errored" : "ended",
|
|
57
|
+
turnOpen: false,
|
|
58
|
+
lastStateAt: now,
|
|
59
|
+
lastAgentEndAt: now,
|
|
60
|
+
stopReason: lastAssistant?.stopReason ?? null,
|
|
61
|
+
errorMessage: errorMessage ?? null,
|
|
62
|
+
});
|
|
63
|
+
await bridgeWorkerEvent(meta.sessionId, "worker.ended", {
|
|
64
|
+
stopReason: lastAssistant?.stopReason ?? null,
|
|
65
|
+
errorMessage: errorMessage ?? null,
|
|
66
|
+
assistantText: lastAssistant?.text ?? null,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
export async function bridgeWorkerAskUserQuestion(sessionId, questions, requestId) {
|
|
70
|
+
await updateWorkerLifecycle(sessionId, {
|
|
71
|
+
state: "awaiting_question",
|
|
72
|
+
lastStateAt: new Date().toISOString(),
|
|
73
|
+
});
|
|
74
|
+
await bridgeWorkerEvent(sessionId, "worker.ask_user", {
|
|
75
|
+
requestId,
|
|
76
|
+
questionCount: questions.length,
|
|
77
|
+
firstQuestionHeader: questions[0]?.header ?? null,
|
|
78
|
+
firstQuestionText: questions[0]?.question ?? null,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export async function bridgeWorkerExecutionStopped(sessionId, meta) {
|
|
82
|
+
const rec = await getWorkerRecord(sessionId);
|
|
83
|
+
if (rec?.turnOpen !== true)
|
|
84
|
+
return;
|
|
85
|
+
await updateWorkerLifecycle(sessionId, {
|
|
86
|
+
state: "stopped",
|
|
87
|
+
turnOpen: false,
|
|
88
|
+
lastStateAt: new Date().toISOString(),
|
|
89
|
+
stopReason: meta.reason,
|
|
90
|
+
});
|
|
91
|
+
await bridgeWorkerEvent(sessionId, "worker.execution_stopped_without_agent_end", {
|
|
92
|
+
reason: meta.reason,
|
|
93
|
+
wasLive: meta.wasLive,
|
|
94
|
+
lastAgentStartAt: rec.lastAgentStartAt ?? null,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export async function bridgeWorkerDeleted(sessionId, meta) {
|
|
98
|
+
const reason = meta.reason ?? "deleted";
|
|
99
|
+
await bridgeWorkerExecutionStopped(sessionId, { wasLive: meta.wasLive, reason });
|
|
100
|
+
await updateWorkerLifecycle(sessionId, {
|
|
101
|
+
state: "deleted",
|
|
102
|
+
turnOpen: false,
|
|
103
|
+
lastStateAt: new Date().toISOString(),
|
|
104
|
+
stopReason: reason,
|
|
105
|
+
});
|
|
106
|
+
await bridgeWorkerEvent(sessionId, "worker.deleted", {
|
|
107
|
+
wasLive: meta.wasLive,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=event-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bridge.js","sourceRoot":"","sources":["../../src/orchestration/event-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InboxEventType, InboxItem } from "./types.js";
|
|
2
|
+
export declare const ORCHESTRATION_WAKE_PREFIX = "[orchestration]";
|
|
3
|
+
export declare const ORCHESTRATION_NOTIFY_TYPE = "orchestration-notify";
|
|
4
|
+
export declare function shouldTriggerWorkerTurn(type: InboxEventType): boolean;
|
|
5
|
+
export declare function bridgeWorkerEvent(workerId: string, type: InboxEventType, data: Record<string, unknown>): Promise<InboxItem | undefined>;
|
|
6
|
+
export declare function notifySupervisorIdle(supervisorId: string): Promise<void>;
|
|
7
|
+
export declare function notifySupervisorDisposed(supervisorId: string): void;
|
|
8
|
+
export declare function drainInbox(supervisorId: string): Promise<InboxItem[]>;
|
|
9
|
+
//# sourceMappingURL=inbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/orchestration/inbox.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAgB5D,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAEhE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAErE;AAyID,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAmBhC;AAED,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAEnE;AAED,wBAAsB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAE3E"}
|