@aexol/spectral 0.9.218 → 0.9.220
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/extensions/desktop-control/index.d.ts.map +1 -1
- package/dist/extensions/desktop-control/index.js +67 -12
- package/dist/relay/dispatcher.d.ts +1 -1
- package/dist/relay/dispatcher.d.ts.map +1 -1
- package/dist/relay/dispatcher.js +24 -10
- package/dist/relay/history-projection.d.ts +13 -0
- package/dist/relay/history-projection.d.ts.map +1 -1
- package/dist/relay/history-projection.js +79 -4
- package/dist/server/handlers/paths-list.d.ts +6 -0
- package/dist/server/handlers/paths-list.d.ts.map +1 -1
- package/dist/server/handlers/paths-list.js +16 -7
- package/dist/server/handlers/sessions.d.ts +16 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -1
- package/dist/server/handlers/sessions.js +14 -0
- package/dist/server/storage.d.ts +15 -0
- package/dist/server/storage.d.ts.map +1 -1
- package/dist/server/storage.js +25 -0
- package/package.json +1 -1
- package/dist/server/handlers/paths-pick-directory.d.ts +0 -6
- package/dist/server/handlers/paths-pick-directory.d.ts.map +0 -1
- package/dist/server/handlers/paths-pick-directory.js +0 -175
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/desktop-control/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAEX,YAAY,EAEZ,cAAc,EACd,MAAM,iCAAiC,CAAC;AAGzC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/desktop-control/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAEX,YAAY,EAEZ,cAAc,EACd,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAKN,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,MAAM,gCAAgC,CAAC;AAWxC,OAAO,EACN,mBAAmB,EAQnB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAA6B,cAAc,EAAE,MAAM,YAAY,CAAC;AAQ5E,wBAAsB,aAAa,CAClC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,OAAO,CAAC;IAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAW9D;AAMD,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC7B;AAgUD,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CA2SpI;AAMD,wBAA8B,uBAAuB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BtF"}
|
|
@@ -30,11 +30,14 @@
|
|
|
30
30
|
* Zero external npm dependencies beyond cross-spawn (Windows PATH is trimmed
|
|
31
31
|
* under Electron). No native modules.
|
|
32
32
|
*/
|
|
33
|
-
import { listWindows, screenshot, formatWindowList, } from "../desktop-screenshot/index.js";
|
|
33
|
+
import { listWindows, screenshot, formatWindowList, fitInlineScreenshot, } from "../desktop-screenshot/index.js";
|
|
34
34
|
import { parseConfirmTimeoutMs } from "../../server/ui/terminal-confirm.js";
|
|
35
35
|
import { createLinuxAdapter } from "./linux.js";
|
|
36
36
|
import { macosAdapter } from "./macos.js";
|
|
37
37
|
import { win32Adapter } from "./windows.js";
|
|
38
|
+
import { uploadImage } from "../../backend/generated-images.js";
|
|
39
|
+
import { resolveBackendRouting } from "../../backend/machine-routing.js";
|
|
40
|
+
import { formatImageBytes, MAX_INLINE_IMAGE_BASE64_CHARS, } from "../../server/image-attachments.js";
|
|
38
41
|
import { DesktopActionPolicy, describeAction, isDesktopControlTool, isDryRun, matchesAllowlist, isRequireConfirm, parseAllowlist, } from "./safety.js";
|
|
39
42
|
import { isModifierToken, parseChord } from "./keys.js";
|
|
40
43
|
const SCREENSHOT_FORMAT = "png";
|
|
@@ -56,8 +59,60 @@ export async function createAdapter(env = process.env) {
|
|
|
56
59
|
function textContent(text) {
|
|
57
60
|
return { type: "text", text };
|
|
58
61
|
}
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Build the content block for a verification screenshot (BEFORE / AFTER).
|
|
64
|
+
*
|
|
65
|
+
* A full-screen PNG is worth megabytes of base64, which ends up persisted in
|
|
66
|
+
* the session JSONL and replayed on every single session open. Mirror
|
|
67
|
+
* `desktop_screenshot`: host the capture on the backend and emit only
|
|
68
|
+
* `{ url, imageId }`, and when hosting is unavailable downscale it into the
|
|
69
|
+
* relay's inline cap. When even that fails, return a text block instead of
|
|
70
|
+
* megabytes of base64 — never write raw screenshots into history.
|
|
71
|
+
*/
|
|
72
|
+
async function imageContent(buf, signal) {
|
|
73
|
+
const routing = await resolveBackendRouting();
|
|
74
|
+
if (routing) {
|
|
75
|
+
try {
|
|
76
|
+
const upload = await uploadImage({
|
|
77
|
+
backendUrl: routing.backendUrl,
|
|
78
|
+
token: routing.machineJwt,
|
|
79
|
+
// Copy: `buf` may be a pooled Buffer view.
|
|
80
|
+
bytes: new Uint8Array(buf),
|
|
81
|
+
contentType: "image/png",
|
|
82
|
+
kind: "attachment",
|
|
83
|
+
signal,
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
type: "image",
|
|
87
|
+
url: upload.url,
|
|
88
|
+
imageId: upload.imageId,
|
|
89
|
+
mimeType: "image/png",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
process.stderr.write(`[desktop-control] could not host the screenshot (${error instanceof Error ? error.message : String(error)}); ` +
|
|
94
|
+
"falling back to a downscaled inline image.\n");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Base64 is built lazily, only for the inline fallback: on the hosted path
|
|
98
|
+
// (the normal case) encoding a full-screen PNG into a ~1.33x larger string
|
|
99
|
+
// is pure waste, and it happens twice per action (BEFORE + AFTER).
|
|
100
|
+
const inline = {
|
|
101
|
+
type: "image",
|
|
102
|
+
data: buf.toString("base64"),
|
|
103
|
+
mimeType: "image/png",
|
|
104
|
+
};
|
|
105
|
+
const fitted = await fitInlineScreenshot(inline);
|
|
106
|
+
if (!fitted) {
|
|
107
|
+
return {
|
|
108
|
+
type: "text",
|
|
109
|
+
text: "⚠️ Verification screenshot NOT attached: it is too large to send inline (" +
|
|
110
|
+
`${formatImageBytes(inline.data?.length ?? 0)} of base64, limit ` +
|
|
111
|
+
`${formatImageBytes(MAX_INLINE_IMAGE_BASE64_CHARS)}) and backend hosting ` +
|
|
112
|
+
`${routing ? "failed" : "is not configured"}.`,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return fitted;
|
|
61
116
|
}
|
|
62
117
|
function errorResult(msg, details = {}) {
|
|
63
118
|
return {
|
|
@@ -102,7 +157,7 @@ const NO_VISIBLE_CHANGE_HINT = "no visible change — verify BEFORE/AFTER screen
|
|
|
102
157
|
* permissions -> allowlist -> BEFORE screenshot -> execute -> AFTER screenshot.
|
|
103
158
|
* Returns both screenshots as image content for vision verification.
|
|
104
159
|
*/
|
|
105
|
-
async function runMutating(action, deps) {
|
|
160
|
+
async function runMutating(action, deps, signal) {
|
|
106
161
|
const { adapter } = deps;
|
|
107
162
|
const env = deps.env ?? process.env;
|
|
108
163
|
if (isDryRun(env))
|
|
@@ -155,7 +210,7 @@ async function runMutating(action, deps) {
|
|
|
155
210
|
if (!frontNow || !matchesAllowlist(frontNow, allowlist)) {
|
|
156
211
|
const msg = `SPECTRAL_DESKTOP_ALLOWLIST blocked this action right before execution: frontmost app is "${frontNow ?? "unknown"}", expected one of ${allowlist.join(", ")}`;
|
|
157
212
|
return {
|
|
158
|
-
content: [textContent(`❌ ${msg}`), imageContent(before)],
|
|
213
|
+
content: [textContent(`❌ ${msg}`), await imageContent(before, signal)],
|
|
159
214
|
details: {
|
|
160
215
|
isError: true,
|
|
161
216
|
error: msg,
|
|
@@ -172,7 +227,7 @@ async function runMutating(action, deps) {
|
|
|
172
227
|
catch (err) {
|
|
173
228
|
const msg = `Action failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
174
229
|
return {
|
|
175
|
-
content: [textContent(`❌ ${msg}`), imageContent(before)],
|
|
230
|
+
content: [textContent(`❌ ${msg}`), await imageContent(before, signal)],
|
|
176
231
|
details: { isError: true, error: msg, action, beforeScreenshot: true },
|
|
177
232
|
};
|
|
178
233
|
}
|
|
@@ -205,8 +260,8 @@ async function runMutating(action, deps) {
|
|
|
205
260
|
return {
|
|
206
261
|
content: [
|
|
207
262
|
textContent(`✓ ${describeAction(action)} — executed on ${adapter.platform}.${frontLine}${pointerLine}${hintLine}\n${afterLine}`),
|
|
208
|
-
imageContent(before),
|
|
209
|
-
...(after ? [imageContent(after)] : []),
|
|
263
|
+
await imageContent(before, signal),
|
|
264
|
+
...(after ? [await imageContent(after, signal)] : []),
|
|
210
265
|
],
|
|
211
266
|
details: {
|
|
212
267
|
ok: true,
|
|
@@ -240,11 +295,11 @@ function actionTool(spec, build, deps) {
|
|
|
240
295
|
type: "object",
|
|
241
296
|
properties: spec.parameters,
|
|
242
297
|
},
|
|
243
|
-
async execute(_toolCallId, _params) {
|
|
298
|
+
async execute(_toolCallId, _params, signal) {
|
|
244
299
|
const built = build(_params);
|
|
245
300
|
if ("error" in built)
|
|
246
301
|
return errorResult(built.error, { tool: spec.name });
|
|
247
|
-
return runMutating(built.action, deps);
|
|
302
|
+
return runMutating(built.action, deps, signal);
|
|
248
303
|
},
|
|
249
304
|
};
|
|
250
305
|
}
|
|
@@ -500,7 +555,7 @@ export function createDesktopTools(deps) {
|
|
|
500
555
|
title: { type: "string", description: "Window title (substring, case-insensitive; from list_windows)." },
|
|
501
556
|
},
|
|
502
557
|
},
|
|
503
|
-
async execute(_toolCallId, _params) {
|
|
558
|
+
async execute(_toolCallId, _params, signal) {
|
|
504
559
|
const params = _params;
|
|
505
560
|
const title = params.title;
|
|
506
561
|
if (typeof title !== "string" || title.trim().length === 0) {
|
|
@@ -520,7 +575,7 @@ export function createDesktopTools(deps) {
|
|
|
520
575
|
if (!match) {
|
|
521
576
|
return errorResult(`No window matching "${title}" found.`, { windowList: formatWindowList(windows, 25) });
|
|
522
577
|
}
|
|
523
|
-
return runMutating({ kind: "focus_window", title: match.title, owner: match.owner, windowId: match.id }, deps);
|
|
578
|
+
return runMutating({ kind: "focus_window", title: match.title, owner: match.owner, windowId: match.id }, deps, signal);
|
|
524
579
|
},
|
|
525
580
|
});
|
|
526
581
|
}
|
|
@@ -50,7 +50,7 @@ import type { RelayClient } from "./client.js";
|
|
|
50
50
|
* `id` is populated when the route had an `:id` placeholder.
|
|
51
51
|
*/
|
|
52
52
|
interface RouteMatch {
|
|
53
|
-
route: "list_projects" | "create_project" | "update_project" | "delete_project" | "bind_studio" | "unbind_studio" | "get_project_observations" | "list_project_sessions" | "cleanup_project_sessions" | "create_session" | "get_session" | "get_session_active_agent" | "update_session_active_agent" | "get_session_messages" | "update_session" | "delete_session" | "get_session_memory" | "get_session_memory_details" | "compact_session" | "remember_and_delete_session" | "fork_session" | "list_path_autocomplete" | "
|
|
53
|
+
route: "list_projects" | "create_project" | "update_project" | "delete_project" | "bind_studio" | "unbind_studio" | "get_project_observations" | "list_project_sessions" | "cleanup_project_sessions" | "cleanup_all_sessions" | "create_session" | "get_session" | "get_session_active_agent" | "update_session_active_agent" | "get_session_messages" | "update_session" | "delete_session" | "get_session_memory" | "get_session_memory_details" | "compact_session" | "remember_and_delete_session" | "fork_session" | "list_path_autocomplete" | "list_directory" | "get_home_directory" | "search_project_files" | "enqueue_prompt" | "get_prompt_queue" | "remove_prompt" | "clear_prompt_queue" | "list_mcp_status" | "reload_mcp_config" | "refresh_native_extensions" | "refresh_cloud_agents" | "get_settings" | "put_settings" | "get_agent_settings" | "put_agent_settings" | "get_prompt_mutation_settings" | "put_prompt_mutation_settings" | "wizard_login" | "list_agents" | "list_dev_processes" | "start_dev_process" | "kill_dev_process" | "restart_dev_process" | "scan_dev_servers" | "kill_dev_server";
|
|
54
54
|
id?: string;
|
|
55
55
|
/** Parsed query params, if the path carried a `?...` suffix. */
|
|
56
56
|
query?: URLSearchParams;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/relay/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAQH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAK/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAkDzD,OAAO,KAAK,EAEV,oBAAoB,EACpB,UAAU,EACX,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EACL,YAAY,EACZ,SAAS,EACT,6BAA6B,EAC9B,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAS5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW/C;;;GAGG;AACH,UAAU,UAAU;IAClB,KAAK,EACD,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,eAAe,GACf,0BAA0B,GAC1B,uBAAuB,GACvB,0BAA0B,GAC1B,gBAAgB,GAChB,aAAa,GACb,0BAA0B,GAC1B,6BAA6B,GAC7B,sBAAsB,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,4BAA4B,GAC5B,iBAAiB,GACjB,6BAA6B,GAC7B,cAAc,GACd,wBAAwB,GACxB,gBAAgB,GAChB,
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/relay/dispatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/relay/dispatcher.js
CHANGED
|
@@ -49,10 +49,9 @@ import { handleReloadMcpConfig } from "../server/handlers/mcp-reload.js";
|
|
|
49
49
|
import { handlePathAutocomplete } from "../server/handlers/paths-autocomplete.js";
|
|
50
50
|
import { handleGetHomeDirectory } from "../server/handlers/paths-home.js";
|
|
51
51
|
import { handleListDirectory } from "../server/handlers/paths-list.js";
|
|
52
|
-
import { handlePickDirectory } from "../server/handlers/paths-pick-directory.js";
|
|
53
52
|
import { handleSearchProjectFiles } from "../server/handlers/files-search.js";
|
|
54
53
|
import { handleBindStudioProject, handleUnbindStudioProject, handleCleanupProjectSessions, handleCreateProject, handleDeleteProject, handleGetProjectObservations, handleListProjectsAsync, handleListSessionsByProjectAsync, handleUpdateProject, } from "../server/handlers/projects.js";
|
|
55
|
-
import { handleCompactSession, handleCreateSession, handleDeleteSession, handleForkSession, handleRememberAndDeleteSession, handleGetSessionDetailAsync, handleGetSessionMessagesAsync, handleGetSessionMemoryDetails, handleGetSessionMemoryStatus, handleUpdateSession, handleGetSessionActiveAgentAsync, handleUpdateSessionActiveAgentAsync, } from "../server/handlers/sessions.js";
|
|
54
|
+
import { handleCompactSession, handleCleanupAllSessions, handleCreateSession, handleDeleteSession, handleForkSession, handleRememberAndDeleteSession, handleGetSessionDetailAsync, handleGetSessionMessagesAsync, handleGetSessionMemoryDetails, handleGetSessionMemoryStatus, handleUpdateSession, handleGetSessionActiveAgentAsync, handleUpdateSessionActiveAgentAsync, } from "../server/handlers/sessions.js";
|
|
56
55
|
import { handleClearPromptQueue, handleEnqueuePrompt, handleGetPromptQueue, handleRemovePrompt, } from "../server/handlers/queue.js";
|
|
57
56
|
import { handleGetAgentSettingsAsync, handleListAgents, handlePutAgentSettingsAsync, } from "../server/handlers/agent-settings.js";
|
|
58
57
|
import { handleGetSettingsAsync, handlePutSettingsAsync, } from "../server/handlers/settings.js";
|
|
@@ -139,12 +138,6 @@ export function matchRoute(method, path) {
|
|
|
139
138
|
return { route: "list_path_autocomplete", query };
|
|
140
139
|
return null;
|
|
141
140
|
}
|
|
142
|
-
// /api/paths/pick-directory
|
|
143
|
-
if (cleanPath === "/api/paths/pick-directory") {
|
|
144
|
-
if (method === "POST")
|
|
145
|
-
return { route: "pick_directory" };
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
141
|
// /api/paths/list
|
|
149
142
|
if (cleanPath === "/api/paths/list") {
|
|
150
143
|
if (method === "POST")
|
|
@@ -226,6 +219,13 @@ export function matchRoute(method, path) {
|
|
|
226
219
|
return { route: "cleanup_project_sessions", id };
|
|
227
220
|
return null;
|
|
228
221
|
}
|
|
222
|
+
// /api/sessions/cleanup (must precede the /api/sessions/:id matches —
|
|
223
|
+
// "cleanup" would otherwise be captured as an :id)
|
|
224
|
+
if (cleanPath === "/api/sessions/cleanup") {
|
|
225
|
+
if (method === "POST")
|
|
226
|
+
return { route: "cleanup_all_sessions" };
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
229
|
// /api/sessions/:id
|
|
230
230
|
const sessionMessagesMatch = /^\/api\/sessions\/([^/]+)\/messages$/.exec(cleanPath);
|
|
231
231
|
if (sessionMessagesMatch) {
|
|
@@ -950,6 +950,22 @@ async function dispatchRoute(match, body, deps) {
|
|
|
950
950
|
}
|
|
951
951
|
return { deleted: result.deleted };
|
|
952
952
|
}
|
|
953
|
+
case "cleanup_all_sessions": {
|
|
954
|
+
const result = handleCleanupAllSessions(store, asObject(body));
|
|
955
|
+
// Tear down any in-flight streams for sessions that are being deleted,
|
|
956
|
+
// across every project.
|
|
957
|
+
for (const sessionId of result.ids) {
|
|
958
|
+
manager.disposeSessionStream(sessionId);
|
|
959
|
+
}
|
|
960
|
+
for (const [sessionId, projectId] of Object.entries(result.projectIds)) {
|
|
961
|
+
safePublish(publishMetaEvent, logger, {
|
|
962
|
+
type: "session_deleted",
|
|
963
|
+
projectId,
|
|
964
|
+
sessionId,
|
|
965
|
+
});
|
|
966
|
+
}
|
|
967
|
+
return { deleted: result.deleted };
|
|
968
|
+
}
|
|
953
969
|
case "create_session": {
|
|
954
970
|
const session = handleCreateSession(store, asObject(body));
|
|
955
971
|
safePublish(publishMetaEvent, logger, {
|
|
@@ -1042,8 +1058,6 @@ async function dispatchRoute(match, body, deps) {
|
|
|
1042
1058
|
const prefix = match.query?.get("prefix") ?? "";
|
|
1043
1059
|
return await handlePathAutocomplete(prefix);
|
|
1044
1060
|
}
|
|
1045
|
-
case "pick_directory":
|
|
1046
|
-
return handlePickDirectory();
|
|
1047
1061
|
case "list_directory":
|
|
1048
1062
|
return await handleListDirectory(asObject(body));
|
|
1049
1063
|
case "get_home_directory":
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
* transcript (`messages`, `systemPrompt`, `task`, `stderr`, …).
|
|
9
9
|
* - Hundreds of repeated `subagent_tool_progress` snapshots for the same
|
|
10
10
|
* `stepId`, each re-carrying full tool args and partial results.
|
|
11
|
+
* - Inline base64 screenshots (`{ type: "image", data }`) captured by the
|
|
12
|
+
* desktop-control tools. A single full-screen PNG is worth several MB of
|
|
13
|
+
* base64, and legacy rows carry them verbatim.
|
|
11
14
|
*
|
|
12
15
|
* This module performs a **projection at replay build time**. It never
|
|
13
16
|
* mutates SQLite or the live agent stream; it only shapes the history that is
|
|
@@ -20,6 +23,16 @@
|
|
|
20
23
|
import type { WireMessage } from "../server/wire.js";
|
|
21
24
|
/** Byte ceiling for individual preserved strings inside a projected event. */
|
|
22
25
|
export declare const MAX_PROJECTED_FIELD_BYTES: number;
|
|
26
|
+
/**
|
|
27
|
+
* Strip threshold for an inline image `data`, measured in base64 CHARACTERS
|
|
28
|
+
* (what travels as JSON), not decoded bytes — hence the `_CHARS` name.
|
|
29
|
+
*
|
|
30
|
+
* It mirrors `MAX_INLINE_IMAGE_BASE64_CHARS`, the real ingress/wire cap:
|
|
31
|
+
* anything at or below that cap is renderable, so stripping it would only
|
|
32
|
+
* lose images the user can still see. Anything above it could never have been
|
|
33
|
+
* accepted by the relay in the first place.
|
|
34
|
+
*/
|
|
35
|
+
export declare const MAX_PROJECTED_INLINE_IMAGE_CHARS: number;
|
|
23
36
|
/** Marker appended when an oversized string is truncated. */
|
|
24
37
|
export declare const TRUNCATION_MARKER = "\n...[spectral truncated for history replay]";
|
|
25
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-projection.d.ts","sourceRoot":"","sources":["../../src/relay/history-projection.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"history-projection.d.ts","sourceRoot":"","sources":["../../src/relay/history-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,QAAa,CAAC;AAEpD;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,QAAgC,CAAC;AAE9E,6DAA6D;AAC7D,eAAO,MAAM,iBAAiB,iDAAiD,CAAC;AA0QhF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAwC9D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,WAAW,EAAE,CAMtF"}
|
|
@@ -1,11 +1,75 @@
|
|
|
1
|
+
import { MAX_INLINE_IMAGE_BASE64_CHARS } from "../server/image-attachments.js";
|
|
1
2
|
/** Byte ceiling for individual preserved strings inside a projected event. */
|
|
2
3
|
export const MAX_PROJECTED_FIELD_BYTES = 256 * 1024; // 256 KB
|
|
4
|
+
/**
|
|
5
|
+
* Strip threshold for an inline image `data`, measured in base64 CHARACTERS
|
|
6
|
+
* (what travels as JSON), not decoded bytes — hence the `_CHARS` name.
|
|
7
|
+
*
|
|
8
|
+
* It mirrors `MAX_INLINE_IMAGE_BASE64_CHARS`, the real ingress/wire cap:
|
|
9
|
+
* anything at or below that cap is renderable, so stripping it would only
|
|
10
|
+
* lose images the user can still see. Anything above it could never have been
|
|
11
|
+
* accepted by the relay in the first place.
|
|
12
|
+
*/
|
|
13
|
+
export const MAX_PROJECTED_INLINE_IMAGE_CHARS = MAX_INLINE_IMAGE_BASE64_CHARS;
|
|
3
14
|
/** Marker appended when an oversized string is truncated. */
|
|
4
15
|
export const TRUNCATION_MARKER = "\n...[spectral truncated for history replay]";
|
|
5
16
|
const textEncoder = new TextEncoder();
|
|
6
17
|
function isJsonObject(value) {
|
|
7
18
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Strip an oversized inline image payload from one content part.
|
|
22
|
+
*
|
|
23
|
+
* `data` must be **removed**, not merely ignored: the frontend prefers inline
|
|
24
|
+
* `data` over `url` (`landing/hooks/use-image-src.ts`), so keeping it would
|
|
25
|
+
* still ship the bytes. `omittedBytes` tells the UI that an image existed and
|
|
26
|
+
* how big it was, so it can render a labelled placeholder instead of an empty
|
|
27
|
+
* box. Parts that are not images, or images that already fit, are returned by
|
|
28
|
+
* reference.
|
|
29
|
+
*/
|
|
30
|
+
function projectImagePart(part) {
|
|
31
|
+
if (part.type !== "image" || typeof part.data !== "string")
|
|
32
|
+
return part;
|
|
33
|
+
if (part.data.length <= MAX_PROJECTED_INLINE_IMAGE_CHARS)
|
|
34
|
+
return part;
|
|
35
|
+
const projected = { ...part };
|
|
36
|
+
delete projected.data;
|
|
37
|
+
projected.omittedBytes = part.data.length;
|
|
38
|
+
return projected;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Recursively strip oversized inline images from a JSON value.
|
|
42
|
+
*
|
|
43
|
+
* Returns the input by reference when nothing changed, so the caller's
|
|
44
|
+
* byte-identical fast path (`projectHistoryForReplay`) still holds for
|
|
45
|
+
* histories that carry no images.
|
|
46
|
+
*/
|
|
47
|
+
function stripOversizedInlineImages(value) {
|
|
48
|
+
if (Array.isArray(value)) {
|
|
49
|
+
let changed = false;
|
|
50
|
+
const out = value.map((item) => {
|
|
51
|
+
const projected = stripOversizedInlineImages(item);
|
|
52
|
+
if (projected !== item)
|
|
53
|
+
changed = true;
|
|
54
|
+
return projected;
|
|
55
|
+
});
|
|
56
|
+
return changed ? out : value;
|
|
57
|
+
}
|
|
58
|
+
if (!isJsonObject(value))
|
|
59
|
+
return value;
|
|
60
|
+
const asImage = projectImagePart(value);
|
|
61
|
+
if (asImage !== value)
|
|
62
|
+
return asImage;
|
|
63
|
+
let changed = false;
|
|
64
|
+
const out = {};
|
|
65
|
+
for (const [key, item] of Object.entries(value)) {
|
|
66
|
+
const projected = stripOversizedInlineImages(item);
|
|
67
|
+
if (projected !== item)
|
|
68
|
+
changed = true;
|
|
69
|
+
out[key] = projected;
|
|
70
|
+
}
|
|
71
|
+
return changed ? out : value;
|
|
72
|
+
}
|
|
9
73
|
/**
|
|
10
74
|
* UTF-8-safe truncation to `maxBytes`. The returned string ends on a valid
|
|
11
75
|
* code point boundary (a binary search finds the longest decodable prefix).
|
|
@@ -87,6 +151,12 @@ function projectToolResult(event) {
|
|
|
87
151
|
content: truncateUtf8(projectedResult.content, MAX_PROJECTED_FIELD_BYTES),
|
|
88
152
|
};
|
|
89
153
|
}
|
|
154
|
+
if (Array.isArray(projectedResult.content)) {
|
|
155
|
+
projectedResult = {
|
|
156
|
+
...projectedResult,
|
|
157
|
+
content: stripOversizedInlineImages(projectedResult.content),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
90
160
|
return { ...event, result: projectedResult };
|
|
91
161
|
}
|
|
92
162
|
/**
|
|
@@ -98,10 +168,13 @@ function projectSubagentToolProgress(event) {
|
|
|
98
168
|
const out = { ...event };
|
|
99
169
|
if ("args" in out)
|
|
100
170
|
out.args = truncateStrings(out.args);
|
|
171
|
+
// Strip inline images BEFORE truncating: truncation alone would still keep
|
|
172
|
+
// a 256 KB slice of base64 that the frontend can never render.
|
|
101
173
|
if ("result" in out)
|
|
102
|
-
out.result = truncateStrings(out.result);
|
|
103
|
-
if ("partialResult" in out)
|
|
104
|
-
out.partialResult = truncateStrings(out.partialResult);
|
|
174
|
+
out.result = truncateStrings(stripOversizedInlineImages(out.result));
|
|
175
|
+
if ("partialResult" in out) {
|
|
176
|
+
out.partialResult = truncateStrings(stripOversizedInlineImages(out.partialResult));
|
|
177
|
+
}
|
|
105
178
|
return out;
|
|
106
179
|
}
|
|
107
180
|
/**
|
|
@@ -183,7 +256,9 @@ function projectEvent(event) {
|
|
|
183
256
|
case "subagent_tool_progress":
|
|
184
257
|
return projectSubagentToolProgress(event);
|
|
185
258
|
default:
|
|
186
|
-
|
|
259
|
+
// Defense in depth: no future event type may smuggle a multi-megabyte
|
|
260
|
+
// inline screenshot through the replay stream.
|
|
261
|
+
return stripOversizedInlineImages(event);
|
|
187
262
|
}
|
|
188
263
|
}
|
|
189
264
|
/**
|
|
@@ -13,6 +13,12 @@ export interface DirectoryEntry {
|
|
|
13
13
|
export interface ListDirectoryResult {
|
|
14
14
|
entries: DirectoryEntry[];
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Sort comparator for directory entries: directories first, then
|
|
18
|
+
* alphabetically by name (case-insensitive, natural/numeric so `proj2`
|
|
19
|
+
* sorts before `proj10`).
|
|
20
|
+
*/
|
|
21
|
+
export declare function compareEntries(a: Pick<DirectoryEntry, "name" | "isDirectory">, b: Pick<DirectoryEntry, "name" | "isDirectory">): number;
|
|
16
22
|
/**
|
|
17
23
|
* Read the directory at `absolutePath` and return its visible entries.
|
|
18
24
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths-list.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/paths-list.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"paths-list.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/paths-list.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,CAAC,EAC/C,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,CAAC,GAC9C,MAAM,CAOR;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAsC9B"}
|
|
@@ -8,6 +8,21 @@
|
|
|
8
8
|
import { readdir } from "node:fs/promises";
|
|
9
9
|
import { join } from "node:path";
|
|
10
10
|
import { BadRequestError } from "./errors.js";
|
|
11
|
+
/**
|
|
12
|
+
* Sort comparator for directory entries: directories first, then
|
|
13
|
+
* alphabetically by name (case-insensitive, natural/numeric so `proj2`
|
|
14
|
+
* sorts before `proj10`).
|
|
15
|
+
*/
|
|
16
|
+
export function compareEntries(a, b) {
|
|
17
|
+
if (a.isDirectory && !b.isDirectory)
|
|
18
|
+
return -1;
|
|
19
|
+
if (!a.isDirectory && b.isDirectory)
|
|
20
|
+
return 1;
|
|
21
|
+
return a.name.localeCompare(b.name, undefined, {
|
|
22
|
+
sensitivity: "base",
|
|
23
|
+
numeric: true,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
11
26
|
/**
|
|
12
27
|
* Read the directory at `absolutePath` and return its visible entries.
|
|
13
28
|
*
|
|
@@ -45,12 +60,6 @@ export async function handleListDirectory(input) {
|
|
|
45
60
|
path: join(absolutePath, d.name),
|
|
46
61
|
isDirectory: d.dirent.isDirectory(),
|
|
47
62
|
}))
|
|
48
|
-
.sort(
|
|
49
|
-
if (a.isDirectory && !b.isDirectory)
|
|
50
|
-
return -1;
|
|
51
|
-
if (!a.isDirectory && b.isDirectory)
|
|
52
|
-
return 1;
|
|
53
|
-
return a.name.localeCompare(b.name, undefined, { sensitivity: "base" });
|
|
54
|
-
});
|
|
63
|
+
.sort(compareEntries);
|
|
55
64
|
return { entries };
|
|
56
65
|
}
|
|
@@ -63,6 +63,22 @@ export declare function handleUpdateSessionActiveAgentAsync(store: SessionStore,
|
|
|
63
63
|
activeAgent: string | null;
|
|
64
64
|
}>;
|
|
65
65
|
export declare function handleDeleteSession(store: SessionStore, id: string): void;
|
|
66
|
+
export interface CleanupAllSessionsInputRaw {
|
|
67
|
+
olderThanDays?: unknown;
|
|
68
|
+
}
|
|
69
|
+
export interface CleanupAllSessionsResult {
|
|
70
|
+
deleted: number;
|
|
71
|
+
ids: string[];
|
|
72
|
+
/** sessionId → owning projectId, captured before deletion for event attribution. */
|
|
73
|
+
projectIds: Record<string, string>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Cross-project twin of `handleCleanupProjectSessions` (projects.ts): no
|
|
77
|
+
* project filter, so validation is the only gate. Stream teardown and
|
|
78
|
+
* `session_deleted` meta-event publication remain the dispatcher's job —
|
|
79
|
+
* see `cleanup_all_sessions` there.
|
|
80
|
+
*/
|
|
81
|
+
export declare function handleCleanupAllSessions(store: SessionStore, body: CleanupAllSessionsInputRaw): CleanupAllSessionsResult;
|
|
66
82
|
export declare function handleGetSessionMemoryStatus(store: SessionStore, manager: SessionStreamManager, id: string): WireSessionMemoryStatus;
|
|
67
83
|
export declare function handleGetSessionMemoryDetails(store: SessionStore, manager: SessionStreamManager, id: string): WireSessionMemoryDetails;
|
|
68
84
|
export declare function handleCompactSession(store: SessionStore, manager: SessionStreamManager, id: string, body?: unknown): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sessions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -222,6 +222,20 @@ export function handleDeleteSession(store, id) {
|
|
|
222
222
|
if (!deleted)
|
|
223
223
|
throw new NotFoundError("Session not found");
|
|
224
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Cross-project twin of `handleCleanupProjectSessions` (projects.ts): no
|
|
227
|
+
* project filter, so validation is the only gate. Stream teardown and
|
|
228
|
+
* `session_deleted` meta-event publication remain the dispatcher's job —
|
|
229
|
+
* see `cleanup_all_sessions` there.
|
|
230
|
+
*/
|
|
231
|
+
export function handleCleanupAllSessions(store, body) {
|
|
232
|
+
if (typeof body.olderThanDays !== "number" ||
|
|
233
|
+
!Number.isFinite(body.olderThanDays) ||
|
|
234
|
+
body.olderThanDays < 1) {
|
|
235
|
+
throw new BadRequestError("olderThanDays is required and must be an integer >= 1");
|
|
236
|
+
}
|
|
237
|
+
return store.cleanupAllSessionsOlderThan(body.olderThanDays);
|
|
238
|
+
}
|
|
225
239
|
export function handleGetSessionMemoryStatus(store, manager, id) {
|
|
226
240
|
const detail = store.getSession(id);
|
|
227
241
|
if (!detail)
|
package/dist/server/storage.d.ts
CHANGED
|
@@ -119,6 +119,8 @@ export declare class SessionStore {
|
|
|
119
119
|
private stmtListSessionIdsByProject;
|
|
120
120
|
private stmtListProjectSessionIdsOlderThan;
|
|
121
121
|
private stmtDeleteProjectSessionsOlderThan;
|
|
122
|
+
private stmtListAllSessionIdsOlderThan;
|
|
123
|
+
private stmtDeleteAllSessionsOlderThan;
|
|
122
124
|
private stmtGetSession;
|
|
123
125
|
private stmtCreateSession;
|
|
124
126
|
private stmtDeleteSession;
|
|
@@ -352,6 +354,19 @@ export declare class SessionStore {
|
|
|
352
354
|
deleted: number;
|
|
353
355
|
ids: string[];
|
|
354
356
|
};
|
|
357
|
+
/**
|
|
358
|
+
* Delete every session across ALL projects whose `updated_at` is older than
|
|
359
|
+
* `olderThanDays` full days. Same contract as
|
|
360
|
+
* {@link cleanupProjectSessionsOlderThan} (`deleted` + `ids`), plus a
|
|
361
|
+
* `projectIds` map captured before deletion so the caller can attribute
|
|
362
|
+
* `session_deleted` meta events to each session's own project. Messages and
|
|
363
|
+
* memory snapshots are removed by foreign-key cascades.
|
|
364
|
+
*/
|
|
365
|
+
cleanupAllSessionsOlderThan(olderThanDays: number): {
|
|
366
|
+
deleted: number;
|
|
367
|
+
ids: string[];
|
|
368
|
+
projectIds: Record<string, string>;
|
|
369
|
+
};
|
|
355
370
|
getSessionMemorySnapshot(sessionId: string): SessionMemorySnapshot | null;
|
|
356
371
|
upsertSessionMemorySnapshot(sessionId: string, snapshot: Omit<SessionMemorySnapshot, "sessionId" | "updatedAt">): void;
|
|
357
372
|
deleteSessionMemorySnapshot(sessionId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/server/storage.js
CHANGED
|
@@ -258,6 +258,8 @@ export class SessionStore {
|
|
|
258
258
|
stmtListSessionIdsByProject;
|
|
259
259
|
stmtListProjectSessionIdsOlderThan;
|
|
260
260
|
stmtDeleteProjectSessionsOlderThan;
|
|
261
|
+
stmtListAllSessionIdsOlderThan;
|
|
262
|
+
stmtDeleteAllSessionsOlderThan;
|
|
261
263
|
// Session statements
|
|
262
264
|
stmtGetSession;
|
|
263
265
|
stmtCreateSession;
|
|
@@ -499,6 +501,8 @@ export class SessionStore {
|
|
|
499
501
|
this.stmtListSessionIdsByProject = this.db.prepare(`SELECT id FROM sessions WHERE project_id = ?`);
|
|
500
502
|
this.stmtListProjectSessionIdsOlderThan = this.db.prepare(`SELECT id FROM sessions WHERE project_id = ? AND updated_at < ?`);
|
|
501
503
|
this.stmtDeleteProjectSessionsOlderThan = this.db.prepare(`DELETE FROM sessions WHERE project_id = ? AND updated_at < ?`);
|
|
504
|
+
this.stmtListAllSessionIdsOlderThan = this.db.prepare(`SELECT id, project_id FROM sessions WHERE updated_at < ?`);
|
|
505
|
+
this.stmtDeleteAllSessionsOlderThan = this.db.prepare(`DELETE FROM sessions WHERE updated_at < ?`);
|
|
502
506
|
// ---- session statements ----------------------------------------------
|
|
503
507
|
this.stmtGetSession = this.db.prepare(`SELECT id, project_id, title, created_at, updated_at FROM sessions WHERE id = ?`);
|
|
504
508
|
this.stmtCreateSession = this.db.prepare(`INSERT INTO sessions (id, project_id, title, created_at, updated_at) VALUES (?, ?, ?, ?, ?)`);
|
|
@@ -1277,6 +1281,27 @@ export class SessionStore {
|
|
|
1277
1281
|
const info = this.stmtDeleteProjectSessionsOlderThan.run(projectId, cutoff);
|
|
1278
1282
|
return { deleted: info.changes, ids };
|
|
1279
1283
|
}
|
|
1284
|
+
/**
|
|
1285
|
+
* Delete every session across ALL projects whose `updated_at` is older than
|
|
1286
|
+
* `olderThanDays` full days. Same contract as
|
|
1287
|
+
* {@link cleanupProjectSessionsOlderThan} (`deleted` + `ids`), plus a
|
|
1288
|
+
* `projectIds` map captured before deletion so the caller can attribute
|
|
1289
|
+
* `session_deleted` meta events to each session's own project. Messages and
|
|
1290
|
+
* memory snapshots are removed by foreign-key cascades.
|
|
1291
|
+
*/
|
|
1292
|
+
cleanupAllSessionsOlderThan(olderThanDays) {
|
|
1293
|
+
if (olderThanDays < 1) {
|
|
1294
|
+
throw new Error("olderThanDays must be at least 1");
|
|
1295
|
+
}
|
|
1296
|
+
const cutoff = Date.now() - olderThanDays * 24 * 60 * 60 * 1000;
|
|
1297
|
+
const rows = this.stmtListAllSessionIdsOlderThan.all(cutoff);
|
|
1298
|
+
const info = this.stmtDeleteAllSessionsOlderThan.run(cutoff);
|
|
1299
|
+
const projectIds = {};
|
|
1300
|
+
for (const row of rows) {
|
|
1301
|
+
projectIds[row.id] = row.project_id;
|
|
1302
|
+
}
|
|
1303
|
+
return { deleted: info.changes, ids: rows.map((r) => r.id), projectIds };
|
|
1304
|
+
}
|
|
1280
1305
|
// ----------------------------------------------------------------------
|
|
1281
1306
|
// Observational memory snapshot persistence
|
|
1282
1307
|
// ----------------------------------------------------------------------
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paths-pick-directory.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/paths-pick-directory.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8JD,wBAAgB,mBAAmB,IAAI,mBAAmB,CAmBzD"}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
|
-
import { platform } from "node:os";
|
|
3
|
-
function execErrMsg(err) {
|
|
4
|
-
if (err && typeof err === "object" && "message" in err) {
|
|
5
|
-
return String(err.message);
|
|
6
|
-
}
|
|
7
|
-
return String(err);
|
|
8
|
-
}
|
|
9
|
-
function execErrStatus(err) {
|
|
10
|
-
if (err && typeof err === "object" && "status" in err) {
|
|
11
|
-
const s = err.status;
|
|
12
|
-
return typeof s === "number" ? s : undefined;
|
|
13
|
-
}
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
|
-
function pickMacOS() {
|
|
17
|
-
const script = `
|
|
18
|
-
set folderPath to POSIX path of (choose folder with prompt "Select project directory")
|
|
19
|
-
return folderPath
|
|
20
|
-
`.trim();
|
|
21
|
-
try {
|
|
22
|
-
const result = execSync(`osascript -e '${script.replace(/'/g, "'\\''")}'`, {
|
|
23
|
-
encoding: "utf-8",
|
|
24
|
-
timeout: 180_000, // 3 min — user might take time to browse
|
|
25
|
-
});
|
|
26
|
-
const trimmed = result.trim();
|
|
27
|
-
if (!trimmed) {
|
|
28
|
-
return { path: null };
|
|
29
|
-
}
|
|
30
|
-
return { path: trimmed };
|
|
31
|
-
}
|
|
32
|
-
catch (err) {
|
|
33
|
-
if (execErrStatus(err) === 1) {
|
|
34
|
-
return { path: null }; // user cancelled
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
path: null,
|
|
38
|
-
error: `Could not open folder picker (macOS): ${execErrMsg(err)}`,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function tryDialog(cmd) {
|
|
43
|
-
try {
|
|
44
|
-
const result = execSync(cmd, { encoding: "utf-8", timeout: 180_000 });
|
|
45
|
-
return result.trim() || null;
|
|
46
|
-
}
|
|
47
|
-
catch (err) {
|
|
48
|
-
if (execErrStatus(err) === 1)
|
|
49
|
-
return null; // user cancelled
|
|
50
|
-
throw err;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function pickLinux() {
|
|
54
|
-
try {
|
|
55
|
-
const p = tryDialog(`zenity --file-selection --directory --title="Select project directory"`);
|
|
56
|
-
return p ? { path: p } : { path: null };
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
}
|
|
60
|
-
try {
|
|
61
|
-
const p = tryDialog(`kdialog --getexistingdirectory "${process.env.HOME ?? "/"}" --title "Select project directory"`);
|
|
62
|
-
return p ? { path: p } : { path: null };
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
}
|
|
66
|
-
const tkResult = pickTkinter();
|
|
67
|
-
if (tkResult.path === null && !tkResult.error) {
|
|
68
|
-
return {
|
|
69
|
-
path: null,
|
|
70
|
-
error: "No folder picker available. Install zenity, kdialog, or python3-tk.",
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
return tkResult;
|
|
74
|
-
}
|
|
75
|
-
function pickWindows() {
|
|
76
|
-
const script = `
|
|
77
|
-
try {
|
|
78
|
-
Add-Type -AssemblyName System.Windows.Forms -ErrorAction Stop
|
|
79
|
-
$f = New-Object System.Windows.Forms.FolderBrowserDialog
|
|
80
|
-
$f.Description = "Select project directory"
|
|
81
|
-
$f.ShowNewFolderButton = $true
|
|
82
|
-
if ($f.ShowDialog() -eq "OK") { Write-Output $f.SelectedPath } else { Write-Output "__CANCELLED__" }
|
|
83
|
-
} catch {
|
|
84
|
-
Write-Error $_.Exception.Message
|
|
85
|
-
[Environment]::Exit(99)
|
|
86
|
-
}
|
|
87
|
-
`.trim();
|
|
88
|
-
// -EncodedCommand (UTF-16LE base64) avoids cmd.exe quote-escaping bugs
|
|
89
|
-
// that would corrupt -Command strings containing nested double-quotes.
|
|
90
|
-
const encoded = Buffer.from(script, "utf-16le").toString("base64");
|
|
91
|
-
try {
|
|
92
|
-
const result = execSync(`powershell -STA -NoProfile -EncodedCommand ${encoded}`, { encoding: "utf-8", timeout: 180_000 });
|
|
93
|
-
const trimmed = result.trim();
|
|
94
|
-
if (!trimmed || trimmed === "__CANCELLED__") {
|
|
95
|
-
return { path: null };
|
|
96
|
-
}
|
|
97
|
-
return { path: trimmed };
|
|
98
|
-
}
|
|
99
|
-
catch (err) {
|
|
100
|
-
const status = execErrStatus(err);
|
|
101
|
-
if (status === 99) {
|
|
102
|
-
const stderr = err && typeof err === "object" && "stderr" in err
|
|
103
|
-
? String(err.stderr).trim()
|
|
104
|
-
: "";
|
|
105
|
-
return {
|
|
106
|
-
path: null,
|
|
107
|
-
error: stderr || "Folder picker could not be displayed.",
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
return {
|
|
111
|
-
path: null,
|
|
112
|
-
error: `Could not open folder picker (Windows): ${execErrMsg(err)}`,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
function pickTkinter() {
|
|
117
|
-
const script = `import tkinter as tk
|
|
118
|
-
from tkinter import filedialog
|
|
119
|
-
root = tk.Tk()
|
|
120
|
-
root.withdraw()
|
|
121
|
-
root.attributes('-topmost', True)
|
|
122
|
-
d = filedialog.askdirectory(title='Select project directory')
|
|
123
|
-
root.destroy()
|
|
124
|
-
print(d if d else "")
|
|
125
|
-
`.replace(/\n/g, ";").replace(/"/g, '\\"');
|
|
126
|
-
try {
|
|
127
|
-
const result = execSync(`python3 -c "${script}"`, {
|
|
128
|
-
encoding: "utf-8",
|
|
129
|
-
timeout: 180_000,
|
|
130
|
-
windowsHide: true,
|
|
131
|
-
});
|
|
132
|
-
const trimmed = result.trim();
|
|
133
|
-
return trimmed ? { path: trimmed } : { path: null };
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
try {
|
|
137
|
-
const result = execSync(`python -c "${script}"`, {
|
|
138
|
-
encoding: "utf-8",
|
|
139
|
-
timeout: 180_000,
|
|
140
|
-
});
|
|
141
|
-
const trimmed = result.trim();
|
|
142
|
-
return trimmed ? { path: trimmed } : { path: null };
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
return {
|
|
146
|
-
path: null,
|
|
147
|
-
error: "Python/tkinter not available for folder picker. Type the path manually.",
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
export function handlePickDirectory() {
|
|
153
|
-
const os = platform();
|
|
154
|
-
try {
|
|
155
|
-
if (os === "darwin") {
|
|
156
|
-
return pickMacOS();
|
|
157
|
-
}
|
|
158
|
-
else if (os === "linux") {
|
|
159
|
-
return pickLinux();
|
|
160
|
-
}
|
|
161
|
-
else if (os === "win32") {
|
|
162
|
-
return pickWindows();
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
return pickTkinter();
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
catch (err) {
|
|
169
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
170
|
-
return {
|
|
171
|
-
path: null,
|
|
172
|
-
error: `Could not open folder picker (${os}): ${msg}`,
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
}
|