pi-kot 0.1.0
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/README.md +30 -0
- package/bin/pi-kot.mjs +125 -0
- package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/client/assets/index-UJgsBs6a.js +361 -0
- package/dist/client/assets/index-UJgsBs6a.js.map +1 -0
- package/dist/client/assets/index-ZuTc_0YY.css +1 -0
- package/dist/client/index.html +14 -0
- package/dist/server/ask-user-question/envelope.d.ts +11 -0
- package/dist/server/ask-user-question/envelope.d.ts.map +1 -0
- package/dist/server/ask-user-question/envelope.js +41 -0
- package/dist/server/ask-user-question/envelope.js.map +1 -0
- package/dist/server/ask-user-question/prompt-strings.d.ts +4 -0
- package/dist/server/ask-user-question/prompt-strings.d.ts.map +1 -0
- package/dist/server/ask-user-question/prompt-strings.js +18 -0
- package/dist/server/ask-user-question/prompt-strings.js.map +1 -0
- package/dist/server/ask-user-question/registry.d.ts +39 -0
- package/dist/server/ask-user-question/registry.d.ts.map +1 -0
- package/dist/server/ask-user-question/registry.js +124 -0
- package/dist/server/ask-user-question/registry.js.map +1 -0
- package/dist/server/ask-user-question/tool.d.ts +4 -0
- package/dist/server/ask-user-question/tool.d.ts.map +1 -0
- package/dist/server/ask-user-question/tool.js +68 -0
- package/dist/server/ask-user-question/tool.js.map +1 -0
- package/dist/server/ask-user-question/types.d.ts +50 -0
- package/dist/server/ask-user-question/types.d.ts.map +1 -0
- package/dist/server/ask-user-question/types.js +7 -0
- package/dist/server/ask-user-question/types.js.map +1 -0
- package/dist/server/ask-user-question/validate.d.ts +3 -0
- package/dist/server/ask-user-question/validate.d.ts.map +1 -0
- package/dist/server/ask-user-question/validate.js +67 -0
- package/dist/server/ask-user-question/validate.js.map +1 -0
- package/dist/server/config-manager.d.ts +47 -0
- package/dist/server/config-manager.d.ts.map +1 -0
- package/dist/server/config-manager.js +182 -0
- package/dist/server/config-manager.js.map +1 -0
- package/dist/server/config.d.ts +20 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +58 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/extension-manager.d.ts +70 -0
- package/dist/server/extension-manager.d.ts.map +1 -0
- package/dist/server/extension-manager.js +401 -0
- package/dist/server/extension-manager.js.map +1 -0
- package/dist/server/extension-ui-bridge.d.ts +35 -0
- package/dist/server/extension-ui-bridge.d.ts.map +1 -0
- package/dist/server/extension-ui-bridge.js +228 -0
- package/dist/server/extension-ui-bridge.js.map +1 -0
- package/dist/server/file-manager.d.ts +79 -0
- package/dist/server/file-manager.d.ts.map +1 -0
- package/dist/server/file-manager.js +526 -0
- package/dist/server/file-manager.js.map +1 -0
- package/dist/server/file-searcher.d.ts +29 -0
- package/dist/server/file-searcher.d.ts.map +1 -0
- package/dist/server/file-searcher.js +318 -0
- package/dist/server/file-searcher.js.map +1 -0
- package/dist/server/git-clone.d.ts +56 -0
- package/dist/server/git-clone.d.ts.map +1 -0
- package/dist/server/git-clone.js +173 -0
- package/dist/server/git-clone.js.map +1 -0
- package/dist/server/index.d.ts +22 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +196 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/lifecycle-notifications.d.ts +28 -0
- package/dist/server/lifecycle-notifications.d.ts.map +1 -0
- package/dist/server/lifecycle-notifications.js +38 -0
- package/dist/server/lifecycle-notifications.js.map +1 -0
- package/dist/server/orchestration/config.d.ts +5 -0
- package/dist/server/orchestration/config.d.ts.map +1 -0
- package/dist/server/orchestration/config.js +35 -0
- package/dist/server/orchestration/config.js.map +1 -0
- package/dist/server/orchestration/event-bridge.d.ts +32 -0
- package/dist/server/orchestration/event-bridge.d.ts.map +1 -0
- package/dist/server/orchestration/event-bridge.js +110 -0
- package/dist/server/orchestration/event-bridge.js.map +1 -0
- package/dist/server/orchestration/inbox.d.ts +9 -0
- package/dist/server/orchestration/inbox.d.ts.map +1 -0
- package/dist/server/orchestration/inbox.js +186 -0
- package/dist/server/orchestration/inbox.js.map +1 -0
- package/dist/server/orchestration/init.d.ts +2 -0
- package/dist/server/orchestration/init.d.ts.map +1 -0
- package/dist/server/orchestration/init.js +22 -0
- package/dist/server/orchestration/init.js.map +1 -0
- package/dist/server/orchestration/store.d.ts +33 -0
- package/dist/server/orchestration/store.d.ts.map +1 -0
- package/dist/server/orchestration/store.js +331 -0
- package/dist/server/orchestration/store.js.map +1 -0
- package/dist/server/orchestration/tools.d.ts +15 -0
- package/dist/server/orchestration/tools.d.ts.map +1 -0
- package/dist/server/orchestration/tools.js +621 -0
- package/dist/server/orchestration/tools.js.map +1 -0
- package/dist/server/orchestration/types.d.ts +68 -0
- package/dist/server/orchestration/types.d.ts.map +1 -0
- package/dist/server/orchestration/types.js +43 -0
- package/dist/server/orchestration/types.js.map +1 -0
- package/dist/server/orchestration/worker-lifecycle.d.ts +15 -0
- package/dist/server/orchestration/worker-lifecycle.d.ts.map +1 -0
- package/dist/server/orchestration/worker-lifecycle.js +45 -0
- package/dist/server/orchestration/worker-lifecycle.js.map +1 -0
- package/dist/server/project-manager.d.ts +25 -0
- package/dist/server/project-manager.d.ts.map +1 -0
- package/dist/server/project-manager.js +157 -0
- package/dist/server/project-manager.js.map +1 -0
- package/dist/server/routes/_schemas.d.ts +16 -0
- package/dist/server/routes/_schemas.d.ts.map +1 -0
- package/dist/server/routes/_schemas.js +12 -0
- package/dist/server/routes/_schemas.js.map +1 -0
- package/dist/server/routes/ask-user-question.d.ts +3 -0
- package/dist/server/routes/ask-user-question.d.ts.map +1 -0
- package/dist/server/routes/ask-user-question.js +105 -0
- package/dist/server/routes/ask-user-question.js.map +1 -0
- package/dist/server/routes/auth.d.ts +7 -0
- package/dist/server/routes/auth.d.ts.map +1 -0
- package/dist/server/routes/auth.js +126 -0
- package/dist/server/routes/auth.js.map +1 -0
- package/dist/server/routes/config.d.ts +3 -0
- package/dist/server/routes/config.d.ts.map +1 -0
- package/dist/server/routes/config.js +203 -0
- package/dist/server/routes/config.js.map +1 -0
- package/dist/server/routes/control.d.ts +3 -0
- package/dist/server/routes/control.d.ts.map +1 -0
- package/dist/server/routes/control.js +180 -0
- package/dist/server/routes/control.js.map +1 -0
- package/dist/server/routes/extension-commands.d.ts +22 -0
- package/dist/server/routes/extension-commands.d.ts.map +1 -0
- package/dist/server/routes/extension-commands.js +178 -0
- package/dist/server/routes/extension-commands.js.map +1 -0
- package/dist/server/routes/extensions.d.ts +8 -0
- package/dist/server/routes/extensions.d.ts.map +1 -0
- package/dist/server/routes/extensions.js +169 -0
- package/dist/server/routes/extensions.js.map +1 -0
- package/dist/server/routes/files.d.ts +3 -0
- package/dist/server/routes/files.d.ts.map +1 -0
- package/dist/server/routes/files.js +549 -0
- package/dist/server/routes/files.js.map +1 -0
- package/dist/server/routes/orchestration.d.ts +3 -0
- package/dist/server/routes/orchestration.d.ts.map +1 -0
- package/dist/server/routes/orchestration.js +251 -0
- package/dist/server/routes/orchestration.js.map +1 -0
- package/dist/server/routes/projects.d.ts +3 -0
- package/dist/server/routes/projects.d.ts.map +1 -0
- package/dist/server/routes/projects.js +412 -0
- package/dist/server/routes/projects.js.map +1 -0
- package/dist/server/routes/prompt.d.ts +3 -0
- package/dist/server/routes/prompt.d.ts.map +1 -0
- package/dist/server/routes/prompt.js +192 -0
- package/dist/server/routes/prompt.js.map +1 -0
- package/dist/server/routes/sessions.d.ts +3 -0
- package/dist/server/routes/sessions.d.ts.map +1 -0
- package/dist/server/routes/sessions.js +581 -0
- package/dist/server/routes/sessions.js.map +1 -0
- package/dist/server/routes/stream.d.ts +3 -0
- package/dist/server/routes/stream.d.ts.map +1 -0
- package/dist/server/routes/stream.js +109 -0
- package/dist/server/routes/stream.js.map +1 -0
- package/dist/server/session-registry.d.ts +151 -0
- package/dist/server/session-registry.d.ts.map +1 -0
- package/dist/server/session-registry.js +655 -0
- package/dist/server/session-registry.js.map +1 -0
- package/dist/server/sse-bridge.d.ts +31 -0
- package/dist/server/sse-bridge.d.ts.map +1 -0
- package/dist/server/sse-bridge.js +126 -0
- package/dist/server/sse-bridge.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension UI Bridge — adapts extension `ctx.ui` interactions (select, confirm,
|
|
3
|
+
* notify) to the WebSocket/SSE + REST model of pi-kot's web GUI.
|
|
4
|
+
*
|
|
5
|
+
* When the extension calls `ctx.ui.select("Rewind to checkpoint:", items)`, this
|
|
6
|
+
* bridge sends an `extension_ui_select` SSE event to the browser, creating a
|
|
7
|
+
* pending request. The browser renders the selector and responds via
|
|
8
|
+
* `POST /api/v1/sessions/:id/extension-ui/respond`, which resolves the promise
|
|
9
|
+
* and lets the extension continue.
|
|
10
|
+
*
|
|
11
|
+
* Unused TUI-specific methods (setWidget, setFooter, setHeader, custom, …) are
|
|
12
|
+
* no-ops so that any extension command works unmodified through the bridge.
|
|
13
|
+
*/
|
|
14
|
+
import { randomUUID } from "node:crypto";
|
|
15
|
+
const pendingSelects = new Map();
|
|
16
|
+
const pendingConfirms = new Map();
|
|
17
|
+
const pendingInputs = new Map();
|
|
18
|
+
const REQUEST_TIMEOUT_MS = 120_000; // 2 minutes
|
|
19
|
+
/**
|
|
20
|
+
* Resolve a pending select/confirm/input request.
|
|
21
|
+
* Called from `POST /api/v1/sessions/:id/extension-ui/respond`.
|
|
22
|
+
*/
|
|
23
|
+
export function resolveExtensionUIRequest(requestId, value) {
|
|
24
|
+
// Try select
|
|
25
|
+
const sel = pendingSelects.get(requestId);
|
|
26
|
+
if (sel !== undefined) {
|
|
27
|
+
clearTimeout(sel.timer);
|
|
28
|
+
sel.resolve(typeof value === "string" ? value : undefined);
|
|
29
|
+
pendingSelects.delete(requestId);
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
// Try confirm
|
|
33
|
+
const con = pendingConfirms.get(requestId);
|
|
34
|
+
if (con !== undefined) {
|
|
35
|
+
clearTimeout(con.timer);
|
|
36
|
+
con.resolve(value === true || value === "true" || value === "yes");
|
|
37
|
+
pendingConfirms.delete(requestId);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
// Try input
|
|
41
|
+
const inp = pendingInputs.get(requestId);
|
|
42
|
+
if (inp !== undefined) {
|
|
43
|
+
clearTimeout(inp.timer);
|
|
44
|
+
inp.resolve(typeof value === "string" ? value : undefined);
|
|
45
|
+
pendingInputs.delete(requestId);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Cancel all pending requests (e.g., when the command is aborted or session
|
|
52
|
+
* is disposed). Each pending promise rejects so the extension handler sees
|
|
53
|
+
* a cancelled/interrupted state.
|
|
54
|
+
*/
|
|
55
|
+
export function cancelAllPendingRequests() {
|
|
56
|
+
const err = new Error("Extension UI request cancelled");
|
|
57
|
+
for (const [id, req] of pendingSelects) {
|
|
58
|
+
clearTimeout(req.timer);
|
|
59
|
+
req.reject(err);
|
|
60
|
+
pendingSelects.delete(id);
|
|
61
|
+
}
|
|
62
|
+
for (const [id, req] of pendingConfirms) {
|
|
63
|
+
clearTimeout(req.timer);
|
|
64
|
+
req.reject(err);
|
|
65
|
+
pendingConfirms.delete(id);
|
|
66
|
+
}
|
|
67
|
+
for (const [id, req] of pendingInputs) {
|
|
68
|
+
clearTimeout(req.timer);
|
|
69
|
+
req.reject(err);
|
|
70
|
+
pendingInputs.delete(id);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create an `ExtensionUIContext` that bridges extension UI interactions
|
|
75
|
+
* to the browser GUI via SSE events + REST callbacks.
|
|
76
|
+
*
|
|
77
|
+
* @param clients - The live session's connected SSE clients.
|
|
78
|
+
* @param sessionId - The session ID, included in SSE events for routing.
|
|
79
|
+
*/
|
|
80
|
+
export function createBridgeUIContext(clients, sessionId) {
|
|
81
|
+
/** Send a typed SSE event to all connected clients. */
|
|
82
|
+
function send(type, extra = {}) {
|
|
83
|
+
const payload = {
|
|
84
|
+
type,
|
|
85
|
+
sessionId,
|
|
86
|
+
...extra,
|
|
87
|
+
};
|
|
88
|
+
for (const client of clients) {
|
|
89
|
+
try {
|
|
90
|
+
client.send(payload);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
clients.delete(client);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
// ── Interactive methods (bridge to GUI) ──
|
|
99
|
+
select: async (title, options, _opts) => {
|
|
100
|
+
return new Promise((resolve, reject) => {
|
|
101
|
+
const requestId = randomUUID();
|
|
102
|
+
send("extension_ui_select", { requestId, title, options });
|
|
103
|
+
const timer = setTimeout(() => {
|
|
104
|
+
pendingSelects.delete(requestId);
|
|
105
|
+
reject(new Error(`Extension UI select timed out: ${title}`));
|
|
106
|
+
}, REQUEST_TIMEOUT_MS);
|
|
107
|
+
pendingSelects.set(requestId, { requestId, resolve, reject, timer });
|
|
108
|
+
});
|
|
109
|
+
},
|
|
110
|
+
confirm: async (title, message, _opts) => {
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
const requestId = randomUUID();
|
|
113
|
+
send("extension_ui_confirm", { requestId, title, message });
|
|
114
|
+
const timer = setTimeout(() => {
|
|
115
|
+
pendingConfirms.delete(requestId);
|
|
116
|
+
reject(new Error(`Extension UI confirm timed out: ${title}`));
|
|
117
|
+
}, REQUEST_TIMEOUT_MS);
|
|
118
|
+
pendingConfirms.set(requestId, { requestId, resolve, reject, timer });
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
input: async (title, placeholder, _opts) => {
|
|
122
|
+
return new Promise((resolve, reject) => {
|
|
123
|
+
const requestId = randomUUID();
|
|
124
|
+
send("extension_ui_input", {
|
|
125
|
+
requestId,
|
|
126
|
+
title,
|
|
127
|
+
placeholder: placeholder ?? "",
|
|
128
|
+
});
|
|
129
|
+
const timer = setTimeout(() => {
|
|
130
|
+
pendingInputs.delete(requestId);
|
|
131
|
+
reject(new Error(`Extension UI input timed out: ${title}`));
|
|
132
|
+
}, REQUEST_TIMEOUT_MS);
|
|
133
|
+
pendingInputs.set(requestId, { requestId, resolve, reject, timer });
|
|
134
|
+
});
|
|
135
|
+
},
|
|
136
|
+
notify: (message, notificationType) => {
|
|
137
|
+
send("extension_ui_notify", {
|
|
138
|
+
message,
|
|
139
|
+
notificationType: notificationType ?? "info",
|
|
140
|
+
});
|
|
141
|
+
},
|
|
142
|
+
// ── No-ops (TUI-specific, not applicable in web GUI) ──
|
|
143
|
+
onTerminalInput: (_handler) => {
|
|
144
|
+
return () => { };
|
|
145
|
+
},
|
|
146
|
+
setStatus: (_key, _text) => {
|
|
147
|
+
// Status bar is managed by the GUI.
|
|
148
|
+
},
|
|
149
|
+
setWorkingMessage: (_message) => {
|
|
150
|
+
// Working message is managed by the GUI.
|
|
151
|
+
},
|
|
152
|
+
setWorkingVisible: (_visible) => {
|
|
153
|
+
// Working indicator visibility is managed by the GUI.
|
|
154
|
+
},
|
|
155
|
+
setWorkingIndicator: (_options) => {
|
|
156
|
+
// Working indicator animation is managed by the GUI.
|
|
157
|
+
},
|
|
158
|
+
setHiddenThinkingLabel: (_label) => {
|
|
159
|
+
// Hidden thinking label is managed by the GUI.
|
|
160
|
+
},
|
|
161
|
+
setWidget: (_key,
|
|
162
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
163
|
+
_content, _options) => {
|
|
164
|
+
// Widgets are TUI-specific.
|
|
165
|
+
},
|
|
166
|
+
setFooter: (
|
|
167
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
168
|
+
_factory) => {
|
|
169
|
+
// Footer is TUI-specific.
|
|
170
|
+
},
|
|
171
|
+
setHeader: (
|
|
172
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
173
|
+
_factory) => {
|
|
174
|
+
// Header is TUI-specific.
|
|
175
|
+
},
|
|
176
|
+
setTitle: (_title) => {
|
|
177
|
+
// Title is managed by the browser tab.
|
|
178
|
+
},
|
|
179
|
+
// custom is intentionally undefined so that extensions which check
|
|
180
|
+
// `if (!ctx.ui.custom)` fall back to `ctx.ui.select()` / `ctx.ui.confirm()`
|
|
181
|
+
// instead of calling the TUI custom component factory and getting nothing.
|
|
182
|
+
// This fixes pi-rewind's `/rewind` command which would exit silently
|
|
183
|
+
// when `custom` returned `Promise.resolve(undefined)` immediately.
|
|
184
|
+
custom: undefined,
|
|
185
|
+
pasteToEditor: (_text) => {
|
|
186
|
+
// Editor paste is not supported in bridge mode.
|
|
187
|
+
},
|
|
188
|
+
setEditorText: (_text) => {
|
|
189
|
+
// Editor text is managed by the GUI.
|
|
190
|
+
},
|
|
191
|
+
getEditorText: () => {
|
|
192
|
+
return "";
|
|
193
|
+
},
|
|
194
|
+
editor: async (_title, _prefill) => {
|
|
195
|
+
// Multi-line editor is not supported in bridge mode.
|
|
196
|
+
return undefined;
|
|
197
|
+
},
|
|
198
|
+
addAutocompleteProvider: (_factory) => {
|
|
199
|
+
// Autocomplete is managed by the GUI.
|
|
200
|
+
},
|
|
201
|
+
setEditorComponent: (_factory) => {
|
|
202
|
+
// Editor component is managed by the GUI.
|
|
203
|
+
},
|
|
204
|
+
getEditorComponent: () => {
|
|
205
|
+
return undefined;
|
|
206
|
+
},
|
|
207
|
+
get theme() {
|
|
208
|
+
// Return a minimal theme stub — the server doesn't have a TUI theme.
|
|
209
|
+
return {};
|
|
210
|
+
},
|
|
211
|
+
getAllThemes: () => {
|
|
212
|
+
return [];
|
|
213
|
+
},
|
|
214
|
+
getTheme: () => {
|
|
215
|
+
return undefined;
|
|
216
|
+
},
|
|
217
|
+
setTheme: () => {
|
|
218
|
+
return { success: false, error: "Theme switching not supported via bridge" };
|
|
219
|
+
},
|
|
220
|
+
getToolsExpanded: () => {
|
|
221
|
+
return true;
|
|
222
|
+
},
|
|
223
|
+
setToolsExpanded: () => {
|
|
224
|
+
// Tool expansion is managed by the GUI.
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=extension-ui-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-ui-bridge.js","sourceRoot":"","sources":["../src/extension-ui-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { Readable } from "node:stream";
|
|
2
|
+
export declare class PathOutsideRootError extends Error {
|
|
3
|
+
constructor(target: string, root: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class NotFoundError extends Error {
|
|
6
|
+
constructor(path: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class NotAFileError extends Error {
|
|
9
|
+
constructor(path: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class FileTooLargeError extends Error {
|
|
12
|
+
readonly size: number;
|
|
13
|
+
readonly limit: number;
|
|
14
|
+
constructor(path: string, size: number, limit: number);
|
|
15
|
+
}
|
|
16
|
+
export declare class DirectoryNotEmptyError extends Error {
|
|
17
|
+
constructor(path: string);
|
|
18
|
+
}
|
|
19
|
+
export declare class InvalidNameError extends Error {
|
|
20
|
+
constructor(message?: string);
|
|
21
|
+
}
|
|
22
|
+
export declare class ChecksumMismatchError extends Error {
|
|
23
|
+
readonly target: string;
|
|
24
|
+
readonly expected: string;
|
|
25
|
+
readonly actual: string;
|
|
26
|
+
constructor(target: string, expected: string, actual: string);
|
|
27
|
+
}
|
|
28
|
+
export declare class TargetExistsError extends Error {
|
|
29
|
+
constructor(path: string);
|
|
30
|
+
}
|
|
31
|
+
export declare const MAX_READ_BYTES: number;
|
|
32
|
+
export declare const SEARCH_SKIP_DIRS: ReadonlySet<string>;
|
|
33
|
+
export declare function assertInsideRoot(target: string, root: string): string;
|
|
34
|
+
export interface TreeNode {
|
|
35
|
+
name: string;
|
|
36
|
+
path: string;
|
|
37
|
+
type: "file" | "directory";
|
|
38
|
+
children?: TreeNode[];
|
|
39
|
+
truncated?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface GetTreeOptions {
|
|
42
|
+
maxDepth?: number;
|
|
43
|
+
}
|
|
44
|
+
export declare function getTree(rootPath: string, opts?: GetTreeOptions): Promise<TreeNode>;
|
|
45
|
+
export declare function listAllFiles(rootPath: string): Promise<string[]>;
|
|
46
|
+
export interface ReadResult {
|
|
47
|
+
path: string;
|
|
48
|
+
content: string;
|
|
49
|
+
size: number;
|
|
50
|
+
language: string;
|
|
51
|
+
binary: boolean;
|
|
52
|
+
}
|
|
53
|
+
export declare function readFile(absPath: string, root: string): Promise<ReadResult>;
|
|
54
|
+
export declare function writeFile(absPath: string, root: string, content: string): Promise<void>;
|
|
55
|
+
export declare function downloadStream(absPath: string, root: string): Promise<{
|
|
56
|
+
kind: "file";
|
|
57
|
+
filename: string;
|
|
58
|
+
size: number;
|
|
59
|
+
stream: Readable;
|
|
60
|
+
} | {
|
|
61
|
+
kind: "directory";
|
|
62
|
+
filename: string;
|
|
63
|
+
stream: Readable;
|
|
64
|
+
}>;
|
|
65
|
+
export declare function writeFileBytes(parentAbsPath: string, name: string, root: string, source: AsyncIterable<Buffer | Uint8Array>, opts?: {
|
|
66
|
+
expectedSha256?: string;
|
|
67
|
+
overwrite?: boolean;
|
|
68
|
+
}): Promise<{
|
|
69
|
+
path: string;
|
|
70
|
+
size: number;
|
|
71
|
+
sha256: string;
|
|
72
|
+
}>;
|
|
73
|
+
export declare function makeDirectory(parentAbsPath: string, root: string, name: string): Promise<string>;
|
|
74
|
+
export declare function renameEntry(absPath: string, root: string, newName: string): Promise<string>;
|
|
75
|
+
export declare function moveEntry(srcAbsPath: string, destAbsPath: string, root: string): Promise<string>;
|
|
76
|
+
export declare function deleteEntry(absPath: string, root: string, opts?: {
|
|
77
|
+
recursive?: boolean;
|
|
78
|
+
}): Promise<void>;
|
|
79
|
+
//# sourceMappingURL=file-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-manager.d.ts","sourceRoot":"","sources":["../src/file-manager.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAIzC;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACX,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAMtD;AAED,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,SAAsB;CAI1C;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAO7D;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,IAAI,EAAE,MAAM;CAIzB;AAED,eAAO,MAAM,cAAc,QAAkB,CAAC;AAgB9C,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAkB,CAAC;AAIpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAUrE;AAuCD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQ5F;AAuED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOtE;AAiBD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAejF;AAUD,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7F;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAC5D,CAgCA;AAED,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,EAC1C,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACtD,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAoCzD;AAED,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBjG;AAED,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|