@markusylisiurunen/tau 0.3.76 → 0.3.77
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/core/cli.js +0 -3
- package/dist/core/cli.js.map +1 -1
- package/dist/core/config/builtin_themes.js +0 -30
- package/dist/core/config/builtin_themes.js.map +1 -1
- package/dist/core/config/content_loader.js +10 -115
- package/dist/core/config/content_loader.js.map +1 -1
- package/dist/core/config/index.js +1 -1
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/paths.js +0 -1
- package/dist/core/config/paths.js.map +1 -1
- package/dist/core/config/runtime.js +1 -1
- package/dist/core/config/runtime.js.map +1 -1
- package/dist/core/config/runtime_config_snapshot.js +0 -1
- package/dist/core/config/runtime_config_snapshot.js.map +1 -1
- package/dist/core/config/schema.js +8 -84
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/skills_loader.js +0 -8
- package/dist/core/config/skills_loader.js.map +1 -1
- package/dist/core/config/theme_variants.js.map +1 -1
- package/dist/core/config/virtual_bundle.js +1 -4
- package/dist/core/config/virtual_bundle.js.map +1 -1
- package/dist/core/debug.js +0 -2
- package/dist/core/debug.js.map +1 -1
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/models/catalog.js +2 -3
- package/dist/core/models/catalog.js.map +1 -1
- package/dist/core/personas.js +3 -81
- package/dist/core/personas.js.map +1 -1
- package/dist/core/static/index.js +0 -3
- package/dist/core/static/index.js.map +1 -1
- package/dist/core/static/tau_docs/config-reference.md +17 -59
- package/dist/core/static/tau_docs/configuration.md +5 -10
- package/dist/core/static/tau_docs/credentials.md +9 -28
- package/dist/core/static/tau_docs/image-generation.md +1 -1
- package/dist/core/static/tau_docs/node-sdk.md +1 -1
- package/dist/core/static/tau_docs/ownership-and-scope.md +3 -3
- package/dist/core/static/tau_docs/pdf-unpacking.md +1 -1
- package/dist/core/static/tau_docs/personas.md +3 -1
- package/dist/core/static/tau_docs/prompts-and-project-context.md +0 -10
- package/dist/core/static/tau_docs/remote-sessions.md +5 -21
- package/dist/core/static/tau_docs/session-protocol-methods.md +1 -7
- package/dist/core/static/tau_docs/skills.md +0 -22
- package/dist/core/static/tau_docs/speech-generation.md +1 -1
- package/dist/core/static/tau_docs/telegram.md +4 -9
- package/dist/core/static/tau_docs/troubleshooting.md +15 -15
- package/dist/core/static/tau_docs/tui.md +9 -24
- package/dist/core/telegram/adapter.js +17 -20
- package/dist/core/telegram/adapter.js.map +1 -1
- package/dist/core/telegram/cli.js +4 -5
- package/dist/core/telegram/cli.js.map +1 -1
- package/dist/core/telegram/runtime.js +3 -2
- package/dist/core/telegram/runtime.js.map +1 -1
- package/dist/core/telegram/tts.js +11 -9
- package/dist/core/telegram/tts.js.map +1 -1
- package/dist/core/tool/image_generate.js +37 -14
- package/dist/core/tool/image_generate.js.map +1 -1
- package/dist/core/tool/media.js +84 -4
- package/dist/core/tool/media.js.map +1 -1
- package/dist/core/tool/pdf_unpack.js +17 -10
- package/dist/core/tool/pdf_unpack.js.map +1 -1
- package/dist/core/tool/speech_generate.js +30 -13
- package/dist/core/tool/speech_generate.js.map +1 -1
- package/dist/core/utils/gemini_transcription.js +5 -95
- package/dist/core/utils/gemini_transcription.js.map +1 -1
- package/dist/core/utils/{gemini_speech.js → speech.js} +167 -428
- package/dist/core/utils/speech.js.map +1 -0
- package/dist/core/utils/speech_to_text.js +24 -52
- package/dist/core/utils/speech_to_text.js.map +1 -1
- package/dist/core/utils/speech_to_text_keywords.js +65 -0
- package/dist/core/utils/speech_to_text_keywords.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/execution/fly_sprite_execution_environment.js +4 -2
- package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
- package/dist/main.js +6 -78
- package/dist/main.js.map +1 -1
- package/dist/protocol/index.d.ts +1 -1
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/session_protocol.d.ts +2 -15
- package/dist/protocol/session_protocol.js +1 -20
- package/dist/protocol/session_protocol.js.map +1 -1
- package/dist/sdk/local_client.js +0 -6
- package/dist/sdk/local_client.js.map +1 -1
- package/dist/tui/chat_view.js +1 -3
- package/dist/tui/chat_view.js.map +1 -1
- package/dist/tui/listen_capture.js +7 -26
- package/dist/tui/listen_capture.js.map +1 -1
- package/dist/tui/session_chat_app.js +3 -19
- package/dist/tui/session_chat_app.js.map +1 -1
- package/dist/tui/session_chat_controller.js +58 -29
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/speech_playback.js +10 -8
- package/dist/tui/speech_playback.js.map +1 -1
- package/dist/tui/ui/pending_messages.js +2 -1
- package/dist/tui/ui/pending_messages.js.map +1 -1
- package/package.json +3 -3
- package/dist/core/install/cli.js +0 -260
- package/dist/core/install/cli.js.map +0 -1
- package/dist/core/models/tau_model_overrides.js +0 -4
- package/dist/core/models/tau_model_overrides.js.map +0 -1
- package/dist/core/utils/gemini_speech.js.map +0 -1
- package/dist/core/utils/openai_transcription.js +0 -594
- package/dist/core/utils/openai_transcription.js.map +0 -1
- package/dist/execution/cloudflare_sandbox_execution_environment.js +0 -563
- package/dist/execution/cloudflare_sandbox_execution_environment.js.map +0 -1
- package/dist/execution/sandbox_tool_helpers.js +0 -30
- package/dist/execution/sandbox_tool_helpers.js.map +0 -1
- package/dist/starter/prompts/approval-review-branch.md +0 -7
- package/dist/starter/prompts/approval-review-current-changes.md +0 -7
- package/dist/starter/prompts/approval-review-last-commit.md +0 -7
- package/dist/starter/prompts/commit-all.md +0 -9
- package/dist/starter/prompts/commit-staged.md +0 -9
- package/dist/starter/prompts/guided-review-branch.md +0 -7
- package/dist/starter/prompts/guided-review-current-changes.md +0 -7
- package/dist/starter/prompts/guided-review-last-commit.md +0 -7
- package/dist/starter/prompts/plan.md +0 -7
- package/dist/starter/prompts/review-branch.md +0 -7
- package/dist/starter/prompts/review-current-changes.md +0 -7
- package/dist/starter/prompts/review-last-commit.md +0 -7
- package/dist/starter/prompts/rewrite-prompt.md +0 -89
- package/dist/starter/skills/approval-review/SKILL.md +0 -219
- package/dist/starter/skills/code-review/SKILL.md +0 -102
- package/dist/starter/skills/guided-review/SKILL.md +0 -152
- package/dist/starter/skills/plan/SKILL.md +0 -53
|
@@ -1,563 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { dirname } from "node:path/posix";
|
|
3
|
-
import { applyBashCommand, applyBashEnvironment, applyCommandEnvironment, DEFAULT_COMMAND_CAPTURE_BYTES, ToolExecutionBackendError, } from "../core/tools/execution_backend.js";
|
|
4
|
-
import { assertFileWithinMaxBytes, buildWriteFileResult, NODE_LIST_DIR_SCRIPT, } from "./sandbox_tool_helpers.js";
|
|
5
|
-
import { ToolBackendExecutionEnvironment } from "./tool_backend_execution_environment.js";
|
|
6
|
-
const DEFAULT_HOME = "/home/sandbox";
|
|
7
|
-
const HELPER_OPERATION_TIMEOUT_MS = 30_000;
|
|
8
|
-
export class CloudflareSandboxExecutionEnvironment extends ToolBackendExecutionEnvironment {
|
|
9
|
-
kind = "cloudflare-sandbox";
|
|
10
|
-
constructor(options) {
|
|
11
|
-
super({
|
|
12
|
-
snapshot: {
|
|
13
|
-
kind: "cloudflare-sandbox",
|
|
14
|
-
bridgeId: options.bridgeId,
|
|
15
|
-
sandboxId: options.sandboxId,
|
|
16
|
-
cwd: options.cwd,
|
|
17
|
-
home: options.home,
|
|
18
|
-
},
|
|
19
|
-
backend: options.backend,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
export class CloudflareSandboxExecutionEnvironmentResolver {
|
|
24
|
-
bridges;
|
|
25
|
-
env;
|
|
26
|
-
fetch;
|
|
27
|
-
constructor(options) {
|
|
28
|
-
this.bridges = options.bridges;
|
|
29
|
-
this.env = options.env ?? process.env;
|
|
30
|
-
this.fetch = options.fetch ?? fetch;
|
|
31
|
-
}
|
|
32
|
-
async resolve(input) {
|
|
33
|
-
if (input.kind !== "cloudflare-sandbox") {
|
|
34
|
-
throw new Error(`unsupported execution environment kind '${input.kind}'`);
|
|
35
|
-
}
|
|
36
|
-
return this.createEnvironment(input);
|
|
37
|
-
}
|
|
38
|
-
canRestore(snapshot) {
|
|
39
|
-
return snapshot.kind === "cloudflare-sandbox" && snapshot.bridgeId in this.bridges;
|
|
40
|
-
}
|
|
41
|
-
async restore(snapshot) {
|
|
42
|
-
if (snapshot.kind !== "cloudflare-sandbox") {
|
|
43
|
-
throw new Error(`unsupported execution environment kind '${snapshot.kind}'`);
|
|
44
|
-
}
|
|
45
|
-
return this.createEnvironment(snapshot);
|
|
46
|
-
}
|
|
47
|
-
createEnvironment(input) {
|
|
48
|
-
const bridge = this.bridges[input.bridgeId];
|
|
49
|
-
if (!bridge) {
|
|
50
|
-
throw new Error(`unknown Cloudflare Sandbox bridge '${input.bridgeId}'`);
|
|
51
|
-
}
|
|
52
|
-
const apiKey = bridge.apiKey ?? (bridge.apiKeyEnv ? this.env[bridge.apiKeyEnv] : undefined);
|
|
53
|
-
const client = new CloudflareSandboxBridgeClient({
|
|
54
|
-
bridgeId: input.bridgeId,
|
|
55
|
-
baseUrl: bridge.url,
|
|
56
|
-
apiKey,
|
|
57
|
-
fetch: this.fetch,
|
|
58
|
-
});
|
|
59
|
-
const backend = createCloudflareSandboxToolExecutionBackend({
|
|
60
|
-
client,
|
|
61
|
-
sandboxId: input.sandboxId,
|
|
62
|
-
cwd: input.cwd,
|
|
63
|
-
});
|
|
64
|
-
return new CloudflareSandboxExecutionEnvironment({
|
|
65
|
-
bridgeId: input.bridgeId,
|
|
66
|
-
sandboxId: input.sandboxId,
|
|
67
|
-
cwd: input.cwd,
|
|
68
|
-
home: "home" in input ? input.home : (bridge.home ?? DEFAULT_HOME),
|
|
69
|
-
backend,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
export function createCloudflareSandboxToolExecutionBackend(options) {
|
|
74
|
-
const { client, sandboxId } = options;
|
|
75
|
-
const commandSessions = new Map();
|
|
76
|
-
const commandQueues = new Map();
|
|
77
|
-
const cleanupPromises = new Set();
|
|
78
|
-
const disposeAbortController = new AbortController();
|
|
79
|
-
let disposed = false;
|
|
80
|
-
const assertActive = () => {
|
|
81
|
-
if (disposed) {
|
|
82
|
-
throw new Error("Cloudflare Sandbox execution backend is disposed");
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
const createHelperSignal = () => AbortSignal.any([
|
|
86
|
-
disposeAbortController.signal,
|
|
87
|
-
AbortSignal.timeout(HELPER_OPERATION_TIMEOUT_MS),
|
|
88
|
-
]);
|
|
89
|
-
const ensureCommandSession = async (cwd, signal) => {
|
|
90
|
-
const existing = commandSessions.get(cwd);
|
|
91
|
-
if (existing) {
|
|
92
|
-
return (await existing).id;
|
|
93
|
-
}
|
|
94
|
-
const sessionPromise = client
|
|
95
|
-
.createSession(sandboxId, { cwd, signal })
|
|
96
|
-
.then((id) => ({ id, cwd }))
|
|
97
|
-
.catch((err) => {
|
|
98
|
-
if (commandSessions.get(cwd) === sessionPromise) {
|
|
99
|
-
commandSessions.delete(cwd);
|
|
100
|
-
}
|
|
101
|
-
throw err;
|
|
102
|
-
});
|
|
103
|
-
commandSessions.set(cwd, sessionPromise);
|
|
104
|
-
return (await sessionPromise).id;
|
|
105
|
-
};
|
|
106
|
-
const resetCommandSession = async (cwd) => {
|
|
107
|
-
const sessionPromise = commandSessions.get(cwd);
|
|
108
|
-
commandSessions.delete(cwd);
|
|
109
|
-
const session = await sessionPromise?.catch(() => undefined);
|
|
110
|
-
if (session) {
|
|
111
|
-
await client
|
|
112
|
-
.deleteSession(sandboxId, session.id, AbortSignal.timeout(HELPER_OPERATION_TIMEOUT_MS))
|
|
113
|
-
.catch(() => { });
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
const scheduleCommandSessionReset = (cwd) => {
|
|
117
|
-
const cleanup = resetCommandSession(cwd);
|
|
118
|
-
cleanupPromises.add(cleanup);
|
|
119
|
-
void cleanup.then(() => cleanupPromises.delete(cleanup), () => cleanupPromises.delete(cleanup));
|
|
120
|
-
};
|
|
121
|
-
const resetAllCommandSessions = async () => {
|
|
122
|
-
const sessionPromises = [...commandSessions.values()];
|
|
123
|
-
commandSessions.clear();
|
|
124
|
-
await Promise.all(sessionPromises.map(async (sessionPromise) => {
|
|
125
|
-
const session = await sessionPromise.catch(() => undefined);
|
|
126
|
-
if (session) {
|
|
127
|
-
await client
|
|
128
|
-
.deleteSession(sandboxId, session.id, AbortSignal.timeout(HELPER_OPERATION_TIMEOUT_MS))
|
|
129
|
-
.catch(() => { });
|
|
130
|
-
}
|
|
131
|
-
}));
|
|
132
|
-
};
|
|
133
|
-
const runQueued = async (cwd, signal, task) => {
|
|
134
|
-
assertActive();
|
|
135
|
-
const previous = commandQueues.get(cwd) ?? Promise.resolve();
|
|
136
|
-
const run = (async () => {
|
|
137
|
-
await waitForQueue(previous, signal);
|
|
138
|
-
signal.throwIfAborted();
|
|
139
|
-
assertActive();
|
|
140
|
-
return await task();
|
|
141
|
-
})();
|
|
142
|
-
const tail = run.then(() => undefined, () => undefined);
|
|
143
|
-
commandQueues.set(cwd, tail);
|
|
144
|
-
try {
|
|
145
|
-
return await run;
|
|
146
|
-
}
|
|
147
|
-
finally {
|
|
148
|
-
if (commandQueues.get(cwd) === tail) {
|
|
149
|
-
commandQueues.delete(cwd);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
const runCommand = async (argv, runOptions = {}) => {
|
|
154
|
-
assertActive();
|
|
155
|
-
const cwd = runOptions.cwd ?? options.cwd;
|
|
156
|
-
const timeoutSignal = runOptions.timeoutMs !== undefined &&
|
|
157
|
-
Number.isFinite(runOptions.timeoutMs) &&
|
|
158
|
-
runOptions.timeoutMs > 0
|
|
159
|
-
? AbortSignal.timeout(runOptions.timeoutMs)
|
|
160
|
-
: undefined;
|
|
161
|
-
const signal = AbortSignal.any([disposeAbortController.signal, runOptions.signal, timeoutSignal].filter((candidate) => candidate !== undefined));
|
|
162
|
-
const stdinPath = runOptions.stdin !== undefined ? `/tmp/tau-exec-${randomUUID()}.stdin` : undefined;
|
|
163
|
-
let dedicatedSessionId;
|
|
164
|
-
let sessionAcquired = false;
|
|
165
|
-
try {
|
|
166
|
-
const execute = async () => {
|
|
167
|
-
if (stdinPath && runOptions.stdin) {
|
|
168
|
-
await client.writeFile(sandboxId, stdinPath, runOptions.stdin, signal);
|
|
169
|
-
}
|
|
170
|
-
if (runOptions.onStarted) {
|
|
171
|
-
dedicatedSessionId = await client.createSession(sandboxId, { cwd, signal });
|
|
172
|
-
}
|
|
173
|
-
const sessionId = dedicatedSessionId ?? (await ensureCommandSession(cwd, signal));
|
|
174
|
-
sessionAcquired = true;
|
|
175
|
-
const executionArgv = stdinPath
|
|
176
|
-
? ["bash", "-c", 'exec "$@" < "$0"', stdinPath, ...argv]
|
|
177
|
-
: argv;
|
|
178
|
-
return await client.exec(sandboxId, {
|
|
179
|
-
argv: applyCommandEnvironment(executionArgv, runOptions.env),
|
|
180
|
-
cwd,
|
|
181
|
-
timeoutMs: runOptions.timeoutMs,
|
|
182
|
-
signal,
|
|
183
|
-
onStarted: runOptions.onStarted,
|
|
184
|
-
onOutput: runOptions.onOutput,
|
|
185
|
-
maxCaptureBytes: runOptions.maxCaptureBytes,
|
|
186
|
-
sessionId,
|
|
187
|
-
});
|
|
188
|
-
};
|
|
189
|
-
return await (runOptions.onStarted ? execute() : runQueued(cwd, signal, execute));
|
|
190
|
-
}
|
|
191
|
-
catch (error) {
|
|
192
|
-
if (!runOptions.onStarted && sessionAcquired && (signal.aborted || isAbortError(error))) {
|
|
193
|
-
scheduleCommandSessionReset(cwd);
|
|
194
|
-
}
|
|
195
|
-
if (timeoutSignal?.aborted) {
|
|
196
|
-
return terminatedExecutionResult("timeout");
|
|
197
|
-
}
|
|
198
|
-
if (runOptions.signal?.aborted || disposeAbortController.signal.aborted) {
|
|
199
|
-
return terminatedExecutionResult("abort");
|
|
200
|
-
}
|
|
201
|
-
throw error;
|
|
202
|
-
}
|
|
203
|
-
finally {
|
|
204
|
-
if (dedicatedSessionId) {
|
|
205
|
-
await client.deleteSession(sandboxId, dedicatedSessionId, AbortSignal.timeout(HELPER_OPERATION_TIMEOUT_MS));
|
|
206
|
-
}
|
|
207
|
-
if (stdinPath) {
|
|
208
|
-
await client
|
|
209
|
-
.exec(sandboxId, {
|
|
210
|
-
argv: ["rm", "-f", "--", stdinPath],
|
|
211
|
-
cwd,
|
|
212
|
-
timeoutMs: HELPER_OPERATION_TIMEOUT_MS,
|
|
213
|
-
signal: AbortSignal.timeout(HELPER_OPERATION_TIMEOUT_MS),
|
|
214
|
-
maxCaptureBytes: 1024,
|
|
215
|
-
})
|
|
216
|
-
.catch(() => { });
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
};
|
|
220
|
-
const runBash = (command, runOptions = {}) => runCommand(["bash", "-lc", applyBashCommand(command), ...(runOptions.args ?? [])], {
|
|
221
|
-
...runOptions,
|
|
222
|
-
env: applyBashEnvironment(runOptions.env),
|
|
223
|
-
});
|
|
224
|
-
const runNodeScript = (script, args = [], runOptions = {}) => runBash('exec "$0" "$@"', {
|
|
225
|
-
...runOptions,
|
|
226
|
-
args: ["node", "-e", script, ...args],
|
|
227
|
-
});
|
|
228
|
-
return {
|
|
229
|
-
async dispose() {
|
|
230
|
-
if (disposed) {
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
disposed = true;
|
|
234
|
-
disposeAbortController.abort();
|
|
235
|
-
await Promise.allSettled(commandQueues.values());
|
|
236
|
-
await resetAllCommandSessions();
|
|
237
|
-
await Promise.allSettled(cleanupPromises);
|
|
238
|
-
},
|
|
239
|
-
runBash,
|
|
240
|
-
runNodeScript,
|
|
241
|
-
async readFile(path) {
|
|
242
|
-
assertActive();
|
|
243
|
-
const content = await client.readFile(sandboxId, path, undefined, createHelperSignal());
|
|
244
|
-
return { path, content: content.toString("utf-8") };
|
|
245
|
-
},
|
|
246
|
-
async readFileBinary(path, readOptions = {}) {
|
|
247
|
-
assertActive();
|
|
248
|
-
const content = await client.readFile(sandboxId, path, readOptions.maxBytes, createHelperSignal());
|
|
249
|
-
const bytes = content.byteLength;
|
|
250
|
-
assertFileWithinMaxBytes(bytes, readOptions.maxBytes);
|
|
251
|
-
return { path, content, bytes };
|
|
252
|
-
},
|
|
253
|
-
async writeFile(path, content) {
|
|
254
|
-
assertActive();
|
|
255
|
-
const dir = dirname(path);
|
|
256
|
-
if (dir && dir !== ".") {
|
|
257
|
-
await runBash('exec "$0" "$@"', { args: ["mkdir", "-p", dir] });
|
|
258
|
-
}
|
|
259
|
-
await client.writeFile(sandboxId, path, Buffer.from(content, "utf-8"), createHelperSignal());
|
|
260
|
-
return buildWriteFileResult(path, content);
|
|
261
|
-
},
|
|
262
|
-
async writeFileBinary(path, content) {
|
|
263
|
-
assertActive();
|
|
264
|
-
const dir = dirname(path);
|
|
265
|
-
if (dir && dir !== ".") {
|
|
266
|
-
await runBash('exec "$0" "$@"', { args: ["mkdir", "-p", dir] });
|
|
267
|
-
}
|
|
268
|
-
await client.writeFile(sandboxId, path, content, createHelperSignal());
|
|
269
|
-
return { path, bytes: content.byteLength };
|
|
270
|
-
},
|
|
271
|
-
async listDir(path) {
|
|
272
|
-
assertActive();
|
|
273
|
-
const result = await runNodeScript(NODE_LIST_DIR_SCRIPT, [path]);
|
|
274
|
-
if (result.exitCode !== 0) {
|
|
275
|
-
throw new Error(result.output.trim() || `list failed for ${path}`);
|
|
276
|
-
}
|
|
277
|
-
const entries = JSON.parse(result.stdout);
|
|
278
|
-
return { path, entries };
|
|
279
|
-
},
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
async function waitForQueue(queue, signal) {
|
|
283
|
-
signal.throwIfAborted();
|
|
284
|
-
await new Promise((resolve, reject) => {
|
|
285
|
-
const onAbort = () => {
|
|
286
|
-
signal.removeEventListener("abort", onAbort);
|
|
287
|
-
reject(signal.reason);
|
|
288
|
-
};
|
|
289
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
290
|
-
void queue.then(() => {
|
|
291
|
-
signal.removeEventListener("abort", onAbort);
|
|
292
|
-
resolve();
|
|
293
|
-
}, (error) => {
|
|
294
|
-
signal.removeEventListener("abort", onAbort);
|
|
295
|
-
reject(error);
|
|
296
|
-
});
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
export class CloudflareSandboxBridgeClient {
|
|
300
|
-
bridgeId;
|
|
301
|
-
baseUrl;
|
|
302
|
-
apiKey;
|
|
303
|
-
fetch;
|
|
304
|
-
constructor(options) {
|
|
305
|
-
this.bridgeId = options.bridgeId;
|
|
306
|
-
this.baseUrl = options.baseUrl.replace(/\/+$/, "");
|
|
307
|
-
this.apiKey = options.apiKey;
|
|
308
|
-
this.fetch = options.fetch;
|
|
309
|
-
}
|
|
310
|
-
async exec(sandboxId, options) {
|
|
311
|
-
const controller = new AbortController();
|
|
312
|
-
const abort = () => controller.abort();
|
|
313
|
-
options.signal?.addEventListener("abort", abort, { once: true });
|
|
314
|
-
if (options.signal?.aborted) {
|
|
315
|
-
controller.abort();
|
|
316
|
-
}
|
|
317
|
-
try {
|
|
318
|
-
const response = await this.request(`/v1/sandbox/${encodeURIComponent(sandboxId)}/exec`, {
|
|
319
|
-
method: "POST",
|
|
320
|
-
headers: {
|
|
321
|
-
"Content-Type": "application/json",
|
|
322
|
-
...(options.sessionId ? { "Session-Id": options.sessionId } : {}),
|
|
323
|
-
},
|
|
324
|
-
body: JSON.stringify({
|
|
325
|
-
argv: options.argv,
|
|
326
|
-
...(options.cwd ? { cwd: options.cwd } : {}),
|
|
327
|
-
...(options.timeoutMs !== undefined ? { timeout_ms: options.timeoutMs } : {}),
|
|
328
|
-
}),
|
|
329
|
-
signal: controller.signal,
|
|
330
|
-
});
|
|
331
|
-
if (!response.ok) {
|
|
332
|
-
throw await this.createHttpError(response);
|
|
333
|
-
}
|
|
334
|
-
if (!response.body) {
|
|
335
|
-
throw new Error(`Cloudflare Sandbox bridge '${this.bridgeId}' returned an empty exec body`);
|
|
336
|
-
}
|
|
337
|
-
options.onStarted?.();
|
|
338
|
-
return await parseExecSse(response.body, options.maxCaptureBytes, options.onOutput);
|
|
339
|
-
}
|
|
340
|
-
finally {
|
|
341
|
-
options.signal?.removeEventListener("abort", abort);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
async readFile(sandboxId, path, maxBytes, signal) {
|
|
345
|
-
const response = await this.request(`/v1/sandbox/${encodeURIComponent(sandboxId)}/file/${encodeBridgeFilePath(path)}`, { method: "GET", signal });
|
|
346
|
-
if (!response.ok) {
|
|
347
|
-
throw await this.createHttpError(response);
|
|
348
|
-
}
|
|
349
|
-
const contentLength = Number(response.headers.get("Content-Length"));
|
|
350
|
-
if (Number.isFinite(contentLength)) {
|
|
351
|
-
try {
|
|
352
|
-
assertFileWithinMaxBytes(contentLength, maxBytes);
|
|
353
|
-
}
|
|
354
|
-
catch (error) {
|
|
355
|
-
await response.body?.cancel().catch(() => { });
|
|
356
|
-
throw error;
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
if (!response.body) {
|
|
360
|
-
return Buffer.alloc(0);
|
|
361
|
-
}
|
|
362
|
-
const reader = response.body.getReader();
|
|
363
|
-
const chunks = [];
|
|
364
|
-
let bytes = 0;
|
|
365
|
-
while (true) {
|
|
366
|
-
const { done, value } = await reader.read();
|
|
367
|
-
if (done)
|
|
368
|
-
break;
|
|
369
|
-
const chunk = Buffer.from(value);
|
|
370
|
-
bytes += chunk.byteLength;
|
|
371
|
-
try {
|
|
372
|
-
assertFileWithinMaxBytes(bytes, maxBytes);
|
|
373
|
-
}
|
|
374
|
-
catch (error) {
|
|
375
|
-
await reader.cancel().catch(() => { });
|
|
376
|
-
throw error;
|
|
377
|
-
}
|
|
378
|
-
chunks.push(chunk);
|
|
379
|
-
}
|
|
380
|
-
return Buffer.concat(chunks, bytes);
|
|
381
|
-
}
|
|
382
|
-
async writeFile(sandboxId, path, content, signal) {
|
|
383
|
-
const response = await this.request(`/v1/sandbox/${encodeURIComponent(sandboxId)}/file/${encodeBridgeFilePath(path)}`, { method: "PUT", body: Uint8Array.from(content), signal });
|
|
384
|
-
if (!response.ok) {
|
|
385
|
-
throw await this.createHttpError(response);
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
async createSession(sandboxId, options) {
|
|
389
|
-
const response = await this.request(`/v1/sandbox/${encodeURIComponent(sandboxId)}/session`, {
|
|
390
|
-
method: "POST",
|
|
391
|
-
headers: { "Content-Type": "application/json" },
|
|
392
|
-
body: JSON.stringify({ id: randomUUID(), cwd: options.cwd }),
|
|
393
|
-
signal: options.signal,
|
|
394
|
-
});
|
|
395
|
-
if (!response.ok) {
|
|
396
|
-
throw await this.createHttpError(response);
|
|
397
|
-
}
|
|
398
|
-
const body = (await response.json());
|
|
399
|
-
if (typeof body.id !== "string" || !body.id) {
|
|
400
|
-
throw new Error(`Cloudflare Sandbox bridge '${this.bridgeId}' returned an invalid session`);
|
|
401
|
-
}
|
|
402
|
-
return body.id;
|
|
403
|
-
}
|
|
404
|
-
async deleteSession(sandboxId, sessionId, signal) {
|
|
405
|
-
const response = await this.request(`/v1/sandbox/${encodeURIComponent(sandboxId)}/session/${encodeURIComponent(sessionId)}`, { method: "DELETE", signal });
|
|
406
|
-
if (!response.ok) {
|
|
407
|
-
throw await this.createHttpError(response);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
request(path, init) {
|
|
411
|
-
return this.fetch(`${this.baseUrl}${path}`, {
|
|
412
|
-
...init,
|
|
413
|
-
headers: {
|
|
414
|
-
...(this.apiKey ? { Authorization: `Bearer ${this.apiKey}` } : {}),
|
|
415
|
-
...init.headers,
|
|
416
|
-
},
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
async createHttpError(response) {
|
|
420
|
-
let detail = "";
|
|
421
|
-
try {
|
|
422
|
-
const body = (await response.json());
|
|
423
|
-
detail = body.error || body.code || "";
|
|
424
|
-
}
|
|
425
|
-
catch {
|
|
426
|
-
detail = await response.text().catch(() => "");
|
|
427
|
-
}
|
|
428
|
-
const message = `Cloudflare Sandbox bridge '${this.bridgeId}' request failed (${response.status})${detail ? `: ${detail}` : ""}`;
|
|
429
|
-
return response.status === 404
|
|
430
|
-
? new ToolExecutionBackendError("not-found", message)
|
|
431
|
-
: new Error(message);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
function terminatedExecutionResult(reason) {
|
|
435
|
-
return {
|
|
436
|
-
output: "",
|
|
437
|
-
stdout: "",
|
|
438
|
-
stderr: "",
|
|
439
|
-
exitCode: null,
|
|
440
|
-
truncated: false,
|
|
441
|
-
timedOut: reason === "timeout",
|
|
442
|
-
aborted: reason === "abort",
|
|
443
|
-
closeSignal: null,
|
|
444
|
-
};
|
|
445
|
-
}
|
|
446
|
-
async function parseExecSse(body, maxCaptureBytes = DEFAULT_COMMAND_CAPTURE_BYTES, onOutput) {
|
|
447
|
-
const reader = body.getReader();
|
|
448
|
-
const decoder = new TextDecoder();
|
|
449
|
-
let buffer = "";
|
|
450
|
-
const output = new ExecCaptureBuffer(maxCaptureBytes);
|
|
451
|
-
const stdout = new ExecCaptureBuffer(maxCaptureBytes);
|
|
452
|
-
const stderr = new ExecCaptureBuffer(maxCaptureBytes);
|
|
453
|
-
let exitCode = null;
|
|
454
|
-
let truncated = false;
|
|
455
|
-
const appendOutput = (target, chunk) => {
|
|
456
|
-
onOutput?.(chunk);
|
|
457
|
-
truncated = output.append(chunk) || truncated;
|
|
458
|
-
if (target === "stdout") {
|
|
459
|
-
truncated = stdout.append(chunk) || truncated;
|
|
460
|
-
}
|
|
461
|
-
else {
|
|
462
|
-
truncated = stderr.append(chunk) || truncated;
|
|
463
|
-
}
|
|
464
|
-
};
|
|
465
|
-
const processEvent = (raw) => {
|
|
466
|
-
const lines = raw.split("\n");
|
|
467
|
-
let event = "message";
|
|
468
|
-
const dataLines = [];
|
|
469
|
-
for (const line of lines) {
|
|
470
|
-
if (line.startsWith("event:")) {
|
|
471
|
-
event = line.slice("event:".length).trim();
|
|
472
|
-
}
|
|
473
|
-
else if (line.startsWith("data:")) {
|
|
474
|
-
dataLines.push(line.slice("data:".length).trimStart());
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
const data = dataLines.join("\n");
|
|
478
|
-
if (event === "stdout" || event === "stderr") {
|
|
479
|
-
appendOutput(event, Buffer.from(data, "base64"));
|
|
480
|
-
}
|
|
481
|
-
else if (event === "exit") {
|
|
482
|
-
const parsed = JSON.parse(data);
|
|
483
|
-
exitCode = typeof parsed.exit_code === "number" ? parsed.exit_code : null;
|
|
484
|
-
}
|
|
485
|
-
else if (event === "error") {
|
|
486
|
-
const parsed = JSON.parse(data);
|
|
487
|
-
throw new Error(parsed.error || parsed.code || "Cloudflare Sandbox exec failed");
|
|
488
|
-
}
|
|
489
|
-
};
|
|
490
|
-
while (true) {
|
|
491
|
-
const { done, value } = await reader.read();
|
|
492
|
-
if (done)
|
|
493
|
-
break;
|
|
494
|
-
buffer += decoder.decode(value, { stream: true });
|
|
495
|
-
let splitIndex = buffer.indexOf("\n\n");
|
|
496
|
-
while (splitIndex !== -1) {
|
|
497
|
-
const raw = buffer.slice(0, splitIndex);
|
|
498
|
-
buffer = buffer.slice(splitIndex + 2);
|
|
499
|
-
if (raw.trim()) {
|
|
500
|
-
processEvent(raw);
|
|
501
|
-
}
|
|
502
|
-
splitIndex = buffer.indexOf("\n\n");
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
buffer += decoder.decode();
|
|
506
|
-
if (buffer.trim()) {
|
|
507
|
-
processEvent(buffer);
|
|
508
|
-
}
|
|
509
|
-
return {
|
|
510
|
-
output: output.toString(),
|
|
511
|
-
stdout: stdout.toString(),
|
|
512
|
-
stderr: stderr.toString(),
|
|
513
|
-
exitCode,
|
|
514
|
-
truncated,
|
|
515
|
-
timedOut: false,
|
|
516
|
-
aborted: false,
|
|
517
|
-
closeSignal: null,
|
|
518
|
-
};
|
|
519
|
-
}
|
|
520
|
-
class ExecCaptureBuffer {
|
|
521
|
-
maxBytes;
|
|
522
|
-
chunks = [];
|
|
523
|
-
bytes = 0;
|
|
524
|
-
constructor(maxBytes) {
|
|
525
|
-
this.maxBytes = maxBytes;
|
|
526
|
-
}
|
|
527
|
-
append(value) {
|
|
528
|
-
this.chunks.push(value);
|
|
529
|
-
this.bytes += value.byteLength;
|
|
530
|
-
let truncated = false;
|
|
531
|
-
while (this.bytes > this.maxBytes && this.chunks.length > 0) {
|
|
532
|
-
const excessBytes = this.bytes - this.maxBytes;
|
|
533
|
-
const first = this.chunks[0];
|
|
534
|
-
if (first.byteLength <= excessBytes) {
|
|
535
|
-
this.chunks.shift();
|
|
536
|
-
this.bytes -= first.byteLength;
|
|
537
|
-
}
|
|
538
|
-
else {
|
|
539
|
-
this.chunks[0] = first.subarray(excessBytes);
|
|
540
|
-
this.bytes -= excessBytes;
|
|
541
|
-
}
|
|
542
|
-
truncated = true;
|
|
543
|
-
}
|
|
544
|
-
return truncated;
|
|
545
|
-
}
|
|
546
|
-
toString() {
|
|
547
|
-
return Buffer.concat(this.chunks, this.bytes).toString("utf-8");
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
function encodeBridgeFilePath(path) {
|
|
551
|
-
return path
|
|
552
|
-
.replace(/^\/+/, "")
|
|
553
|
-
.split("/")
|
|
554
|
-
.map((part) => encodeURIComponent(part))
|
|
555
|
-
.join("/");
|
|
556
|
-
}
|
|
557
|
-
function isAbortError(err) {
|
|
558
|
-
return (typeof err === "object" &&
|
|
559
|
-
err !== null &&
|
|
560
|
-
"name" in err &&
|
|
561
|
-
err.name === "AbortError");
|
|
562
|
-
}
|
|
563
|
-
//# sourceMappingURL=cloudflare_sandbox_execution_environment.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare_sandbox_execution_environment.js","sourceRoot":"","sources":["../../src/execution/cloudflare_sandbox_execution_environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { formatBytes } from "../core/utils/truncate.js";
|
|
2
|
-
export const NODE_LIST_DIR_SCRIPT = [
|
|
3
|
-
"const fs = require('fs');",
|
|
4
|
-
"const path = process.argv[1];",
|
|
5
|
-
"const entries = fs.readdirSync(path, { withFileTypes: true }).map((entry) => ({",
|
|
6
|
-
"name: entry.name,",
|
|
7
|
-
"isDirectory: entry.isDirectory(),",
|
|
8
|
-
"isSymlink: entry.isSymbolicLink(),",
|
|
9
|
-
"}));",
|
|
10
|
-
"console.log(JSON.stringify(entries));",
|
|
11
|
-
].join("");
|
|
12
|
-
export function shellQuote(arg) {
|
|
13
|
-
if (/^[A-Za-z0-9@%+=:,./-]+$/.test(arg)) {
|
|
14
|
-
return arg;
|
|
15
|
-
}
|
|
16
|
-
return `'${arg.replaceAll("'", "'\\''")}'`;
|
|
17
|
-
}
|
|
18
|
-
export function assertFileWithinMaxBytes(bytes, maxBytes) {
|
|
19
|
-
if (maxBytes !== undefined && bytes > maxBytes) {
|
|
20
|
-
throw new Error(`file exceeds maximum size of ${formatBytes(maxBytes)} (got ${formatBytes(bytes)}).`);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
export function buildWriteFileResult(path, content) {
|
|
24
|
-
return {
|
|
25
|
-
path,
|
|
26
|
-
bytes: Buffer.byteLength(content, "utf-8"),
|
|
27
|
-
lines: content.split("\n").length,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=sandbox_tool_helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox_tool_helpers.js","sourceRoot":"","sources":["../../src/execution/sandbox_tool_helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,2BAA2B;IAC3B,+BAA+B;IAC/B,iFAAiF;IACjF,mBAAmB;IACnB,mCAAmC;IACnC,oCAAoC;IACpC,MAAM;IACN,uCAAuC;CACxC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEX,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa,EAAE,QAA4B;IAClF,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,gCAAgC,WAAW,CAAC,QAAQ,CAAC,SAAS,WAAW,CAAC,KAAK,CAAC,IAAI,CACrF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,OAAe;IAChE,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1C,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: "approval-review-branch"
|
|
3
|
-
label: "approval review of current branch"
|
|
4
|
-
description: "review current branch decisions without requiring an implementation walkthrough"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Use @@skill:approval-review. Review the current branch diff against main for a decision-maker who has not read the issue, discussion, diff, or source. Investigate the complete target first, then guide me through the material decisions from broadest to narrowest, one fully resolved question at a time. Do not ask the first question until the investigation and decision map are complete.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: "approval-review-current-changes"
|
|
3
|
-
label: "approval review of current changes"
|
|
4
|
-
description: "review current change decisions without requiring an implementation walkthrough"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Use @@skill:approval-review. Review the current changes for a decision-maker who has not read their supporting discussion, diff, or source. Investigate the complete target first, then guide me through the material decisions from broadest to narrowest, one fully resolved question at a time. Do not ask the first question until the investigation and decision map are complete.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: "approval-review-last-commit"
|
|
3
|
-
label: "approval review of most recent commit"
|
|
4
|
-
description: "review the most recent commit decisions without requiring an implementation walkthrough"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
Use @@skill:approval-review. Review the most recent commit for a decision-maker who has not read its supporting issue, discussion, diff, or source. Investigate the complete target first, then guide me through the material decisions from broadest to narrowest, one fully resolved question at a time. Do not ask the first question until the investigation and decision map are complete.
|