@qwen-code/arena-agent 0.0.9-image-input-fallback.0 → 0.0.10-dev.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/.env.example +34 -13
- package/README.md +156 -53
- package/dist/agent.d.ts +4 -2
- package/dist/agent.js +142 -20
- package/dist/agent.js.map +1 -1
- package/dist/anthropic.d.ts +1 -0
- package/dist/anthropic.js +78 -19
- package/dist/anthropic.js.map +1 -1
- package/dist/canonical-data.js +2 -2
- package/dist/canonical-data.js.map +1 -1
- package/dist/cli.js +44 -13
- package/dist/cli.js.map +1 -1
- package/dist/code-tools.js +18 -161
- package/dist/code-tools.js.map +1 -1
- package/dist/compaction.js +8 -2
- package/dist/compaction.js.map +1 -1
- package/dist/config.d.ts +22 -0
- package/dist/config.js +53 -1
- package/dist/config.js.map +1 -1
- package/dist/history.d.ts +3 -2
- package/dist/history.js +7 -2
- package/dist/history.js.map +1 -1
- package/dist/image.d.ts +2 -0
- package/dist/image.js +88 -7
- package/dist/image.js.map +1 -1
- package/dist/model-capabilities.js +12 -2
- package/dist/model-capabilities.js.map +1 -1
- package/dist/model-diagnostics.js +11 -3
- package/dist/model-diagnostics.js.map +1 -1
- package/dist/model-router-media.d.ts +26 -0
- package/dist/model-router-media.js +274 -0
- package/dist/model-router-media.js.map +1 -0
- package/dist/openai-responses.d.ts +28 -0
- package/dist/openai-responses.js +473 -0
- package/dist/openai-responses.js.map +1 -0
- package/dist/process-manager.d.ts +38 -0
- package/dist/process-manager.js +486 -0
- package/dist/process-manager.js.map +1 -0
- package/dist/prompts.js +3 -1
- package/dist/prompts.js.map +1 -1
- package/dist/provider.d.ts +7 -0
- package/dist/provider.js +259 -14
- package/dist/provider.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.js +37 -18
- package/dist/server.js.map +1 -1
- package/dist/spec.js +15 -1
- package/dist/spec.js.map +1 -1
- package/dist/tools.js +160 -237
- package/dist/tools.js.map +1 -1
- package/dist/tui.d.ts +2 -0
- package/dist/tui.js +15 -11
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/voice-registry.d.ts +30 -0
- package/dist/voice-registry.js +82 -0
- package/dist/voice-registry.js.map +1 -0
- package/dist/web/app.js +8 -0
- package/dist/web/app.js.map +1 -1
- package/docs/SDK.md +4 -3
- package/package.json +7 -2
- package/web/styles.css +6 -0
- package/dist/audit.d.ts +0 -14
- package/dist/audit.js +0 -31
- package/dist/audit.js.map +0 -1
- package/dist/dashscope.d.ts +0 -5
- package/dist/dashscope.js +0 -55
- package/dist/dashscope.js.map +0 -1
- package/dist/fetch-page/aparat.d.ts +0 -30
- package/dist/fetch-page/aparat.js +0 -209
- package/dist/fetch-page/aparat.js.map +0 -1
- package/dist/fetch-page/json-path.d.ts +0 -12
- package/dist/fetch-page/json-path.js +0 -111
- package/dist/fetch-page/json-path.js.map +0 -1
- package/dist/fetch-page/sites.d.ts +0 -26
- package/dist/fetch-page/sites.js +0 -39
- package/dist/fetch-page/sites.js.map +0 -1
- package/dist/fetch-page/text.d.ts +0 -5
- package/dist/fetch-page/text.js +0 -38
- package/dist/fetch-page/text.js.map +0 -1
- package/dist/fetch-page/types.d.ts +0 -17
- package/dist/fetch-page/types.js +0 -3
- package/dist/fetch-page/types.js.map +0 -1
- package/dist/fetch-page/youtube.d.ts +0 -35
- package/dist/fetch-page/youtube.js +0 -282
- package/dist/fetch-page/youtube.js.map +0 -1
- package/dist/web-search.d.ts +0 -5
- package/dist/web-search.js +0 -465
- package/dist/web-search.js.map +0 -1
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
import { execFile, spawn } from "node:child_process";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { closeSync, openSync, realpathSync } from "node:fs";
|
|
4
|
+
import { mkdir, readFile } from "node:fs/promises";
|
|
5
|
+
import { request as httpRequest } from "node:http";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { promisify } from "node:util";
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
const managers = new Map();
|
|
10
|
+
const processLogCharacterLimit = 1_000_000;
|
|
11
|
+
const stopProcessTailLines = 100;
|
|
12
|
+
const previewResponseExcerptLength = 160;
|
|
13
|
+
const previewProbeTimeoutMs = 1_000;
|
|
14
|
+
function normalizedAddress(value) {
|
|
15
|
+
const unwrapped = value.replace(/^\[|\]$/g, "");
|
|
16
|
+
if (unwrapped === "*" || unwrapped === "0.0.0.0" || unwrapped === "::") {
|
|
17
|
+
return unwrapped === "::" ? "::" : "0.0.0.0";
|
|
18
|
+
}
|
|
19
|
+
return unwrapped;
|
|
20
|
+
}
|
|
21
|
+
function uniquePorts(values) {
|
|
22
|
+
const seen = new Set();
|
|
23
|
+
return values
|
|
24
|
+
.filter((value) => {
|
|
25
|
+
const key = `${value.address}:${value.port}`;
|
|
26
|
+
if (seen.has(key))
|
|
27
|
+
return false;
|
|
28
|
+
seen.add(key);
|
|
29
|
+
return Number.isInteger(value.port) && value.port > 0 && value.port <= 65535;
|
|
30
|
+
})
|
|
31
|
+
.sort((left, right) => left.port === right.port
|
|
32
|
+
? left.address.localeCompare(right.address)
|
|
33
|
+
: left.port - right.port);
|
|
34
|
+
}
|
|
35
|
+
function ipv4FromProc(hex) {
|
|
36
|
+
const bytes = hex.match(/../g) || [];
|
|
37
|
+
return bytes.reverse().map((value) => Number.parseInt(value, 16)).join(".");
|
|
38
|
+
}
|
|
39
|
+
function ipv6FromProc(hex) {
|
|
40
|
+
if (/^0+$/.test(hex))
|
|
41
|
+
return "::";
|
|
42
|
+
const networkOrder = (hex.match(/.{8}/g) || [])
|
|
43
|
+
.map((word) => (word.match(/../g) || []).reverse().join(""))
|
|
44
|
+
.join("");
|
|
45
|
+
const groups = (networkOrder.match(/.{4}/g) || []).map((value) => Number.parseInt(value, 16).toString(16));
|
|
46
|
+
let bestStart = -1;
|
|
47
|
+
let bestLength = 0;
|
|
48
|
+
for (let start = 0; start < groups.length;) {
|
|
49
|
+
if (groups[start] !== "0") {
|
|
50
|
+
start += 1;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
let end = start;
|
|
54
|
+
while (groups[end] === "0")
|
|
55
|
+
end += 1;
|
|
56
|
+
if (end - start > bestLength) {
|
|
57
|
+
bestStart = start;
|
|
58
|
+
bestLength = end - start;
|
|
59
|
+
}
|
|
60
|
+
start = end;
|
|
61
|
+
}
|
|
62
|
+
if (bestLength < 2)
|
|
63
|
+
return groups.join(":");
|
|
64
|
+
groups.splice(bestStart, bestLength, "");
|
|
65
|
+
return groups.join(":").replace(/^:/, "::").replace(/:$/, "::");
|
|
66
|
+
}
|
|
67
|
+
async function procListeningPorts() {
|
|
68
|
+
const values = [];
|
|
69
|
+
for (const [source, ipv6] of [
|
|
70
|
+
["/proc/net/tcp", false],
|
|
71
|
+
["/proc/net/tcp6", true],
|
|
72
|
+
]) {
|
|
73
|
+
let text = "";
|
|
74
|
+
try {
|
|
75
|
+
text = await readFile(source, "utf8");
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
for (const line of text.split("\n").slice(1)) {
|
|
81
|
+
const columns = line.trim().split(/\s+/);
|
|
82
|
+
if (columns.length < 4 || columns[3] !== "0A")
|
|
83
|
+
continue;
|
|
84
|
+
const [addressHex, portHex] = String(columns[1] || "").split(":");
|
|
85
|
+
const port = Number.parseInt(portHex || "", 16);
|
|
86
|
+
if (!addressHex || !Number.isFinite(port))
|
|
87
|
+
continue;
|
|
88
|
+
values.push({
|
|
89
|
+
port,
|
|
90
|
+
address: ipv6 ? ipv6FromProc(addressHex) : ipv4FromProc(addressHex),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return uniquePorts(values);
|
|
95
|
+
}
|
|
96
|
+
async function lsofListeningPorts() {
|
|
97
|
+
try {
|
|
98
|
+
const result = await execFileAsync("lsof", ["-nP", "-iTCP", "-sTCP:LISTEN", "-F", "n"], { encoding: "utf8", maxBuffer: 4 * 1024 * 1024 });
|
|
99
|
+
const values = [];
|
|
100
|
+
for (const line of String(result.stdout || "").split("\n")) {
|
|
101
|
+
if (!line.startsWith("n"))
|
|
102
|
+
continue;
|
|
103
|
+
const endpoint = line.slice(1).replace(/^TCP\s+/, "");
|
|
104
|
+
const match = endpoint.match(/^(.*):(\d+)$/);
|
|
105
|
+
if (!match)
|
|
106
|
+
continue;
|
|
107
|
+
values.push({
|
|
108
|
+
address: normalizedAddress(match[1] || ""),
|
|
109
|
+
port: Number(match[2]),
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return uniquePorts(values);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export async function listeningPorts() {
|
|
119
|
+
return process.platform === "linux"
|
|
120
|
+
? procListeningPorts()
|
|
121
|
+
: lsofListeningPorts();
|
|
122
|
+
}
|
|
123
|
+
function portKey(value) {
|
|
124
|
+
return `${value.address}:${value.port}`;
|
|
125
|
+
}
|
|
126
|
+
function newPorts(before, after) {
|
|
127
|
+
const baseline = new Set(before.map(portKey));
|
|
128
|
+
return after.filter((value) => !baseline.has(portKey(value)));
|
|
129
|
+
}
|
|
130
|
+
function processId(name) {
|
|
131
|
+
const slug = name
|
|
132
|
+
.toLowerCase()
|
|
133
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
134
|
+
.replace(/^-+|-+$/g, "")
|
|
135
|
+
.slice(0, 48);
|
|
136
|
+
return `${slug || "process"}-${randomUUID().replaceAll("-", "").slice(0, 8)}`;
|
|
137
|
+
}
|
|
138
|
+
function killProcessGroup(child, signal) {
|
|
139
|
+
try {
|
|
140
|
+
if (process.platform !== "win32" && child.pid) {
|
|
141
|
+
process.kill(-child.pid, signal);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
child.kill(signal);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
const code = error.code;
|
|
149
|
+
if (code !== "ESRCH" && code !== "EPERM")
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function processGroupAlive(child) {
|
|
154
|
+
try {
|
|
155
|
+
if (process.platform !== "win32" && child.pid) {
|
|
156
|
+
process.kill(-child.pid, 0);
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
return child.exitCode === null && child.signalCode === null;
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
const code = error.code;
|
|
163
|
+
if (code === "ESRCH")
|
|
164
|
+
return false;
|
|
165
|
+
if (code === "EPERM")
|
|
166
|
+
return true;
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async function terminateProcessGroup(child) {
|
|
171
|
+
killProcessGroup(child, "SIGTERM");
|
|
172
|
+
const deadline = Date.now() + 2000;
|
|
173
|
+
while (Date.now() < deadline && processGroupAlive(child)) {
|
|
174
|
+
await delay(50);
|
|
175
|
+
}
|
|
176
|
+
if (processGroupAlive(child)) {
|
|
177
|
+
killProcessGroup(child, "SIGKILL");
|
|
178
|
+
await delay(25);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function delay(milliseconds, signal) {
|
|
182
|
+
return new Promise((resolve, reject) => {
|
|
183
|
+
if (signal?.aborted) {
|
|
184
|
+
reject(signal.reason || new Error("operation cancelled"));
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const cleanup = () => signal?.removeEventListener("abort", abort);
|
|
188
|
+
const timeout = setTimeout(() => {
|
|
189
|
+
cleanup();
|
|
190
|
+
resolve();
|
|
191
|
+
}, milliseconds);
|
|
192
|
+
const abort = () => {
|
|
193
|
+
clearTimeout(timeout);
|
|
194
|
+
cleanup();
|
|
195
|
+
reject(signal?.reason || new Error("operation cancelled"));
|
|
196
|
+
};
|
|
197
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
async function readLog(logPath) {
|
|
201
|
+
try {
|
|
202
|
+
const value = await readFile(logPath, "utf8");
|
|
203
|
+
return value.length <= processLogCharacterLimit
|
|
204
|
+
? value
|
|
205
|
+
: value.slice(-processLogCharacterLimit);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return "";
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function tailLines(value, count) {
|
|
212
|
+
const lines = value.replace(/\n+$/g, "").split("\n");
|
|
213
|
+
return lines.slice(Math.max(0, lines.length - count)).join("\n");
|
|
214
|
+
}
|
|
215
|
+
function patternMatches(value, pattern) {
|
|
216
|
+
try {
|
|
217
|
+
return new RegExp(pattern).test(value);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return value.includes(pattern);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
function previewHostTemplateFromEnvironment() {
|
|
224
|
+
const explicit = process.env.ARENA_PREVIEW_HOST_TEMPLATE?.trim();
|
|
225
|
+
if (explicit)
|
|
226
|
+
return explicit;
|
|
227
|
+
const sandboxId = process.env.E2B_SANDBOX_ID?.trim();
|
|
228
|
+
return sandboxId ? `{port}-${sandboxId}.e2b.app` : undefined;
|
|
229
|
+
}
|
|
230
|
+
function previewHost(template, port) {
|
|
231
|
+
if (!template)
|
|
232
|
+
return undefined;
|
|
233
|
+
const sandboxId = process.env.E2B_SANDBOX_ID?.trim() || "";
|
|
234
|
+
const value = template
|
|
235
|
+
.replaceAll("{port}", String(port))
|
|
236
|
+
.replaceAll("{sandboxId}", sandboxId)
|
|
237
|
+
.trim();
|
|
238
|
+
return value && !value.includes("{") ? value : undefined;
|
|
239
|
+
}
|
|
240
|
+
function probeHttp(address, port, hostHeader, timeoutMs) {
|
|
241
|
+
return new Promise((resolve) => {
|
|
242
|
+
let settled = false;
|
|
243
|
+
const finish = (value) => {
|
|
244
|
+
if (settled)
|
|
245
|
+
return;
|
|
246
|
+
settled = true;
|
|
247
|
+
resolve(value);
|
|
248
|
+
};
|
|
249
|
+
const request = httpRequest({
|
|
250
|
+
host: address === "::" ? "::1" : "127.0.0.1",
|
|
251
|
+
port,
|
|
252
|
+
path: "/",
|
|
253
|
+
method: "GET",
|
|
254
|
+
headers: {
|
|
255
|
+
Accept: "text/html,application/xhtml+xml",
|
|
256
|
+
Host: hostHeader,
|
|
257
|
+
},
|
|
258
|
+
}, (response) => {
|
|
259
|
+
const chunks = [];
|
|
260
|
+
let length = 0;
|
|
261
|
+
response.on("data", (chunk) => {
|
|
262
|
+
if (length >= 64 * 1024)
|
|
263
|
+
return;
|
|
264
|
+
const remaining = 64 * 1024 - length;
|
|
265
|
+
const value = chunk.subarray(0, remaining);
|
|
266
|
+
chunks.push(value);
|
|
267
|
+
length += value.length;
|
|
268
|
+
});
|
|
269
|
+
response.once("end", () => {
|
|
270
|
+
finish({
|
|
271
|
+
body: Buffer.concat(chunks).toString("utf8"),
|
|
272
|
+
statusCode: response.statusCode || 0,
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
request.setTimeout(timeoutMs, () => {
|
|
277
|
+
request.destroy();
|
|
278
|
+
finish();
|
|
279
|
+
});
|
|
280
|
+
request.once("error", () => finish());
|
|
281
|
+
request.end();
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
function responseExcerpt(value) {
|
|
285
|
+
return value.replace(/\s+/g, " ").trim().slice(0, previewResponseExcerptLength);
|
|
286
|
+
}
|
|
287
|
+
async function previewWarnings(ports, template, timeoutMs) {
|
|
288
|
+
const publicPorts = new Map();
|
|
289
|
+
for (const value of ports) {
|
|
290
|
+
if (value.address === "0.0.0.0" || value.address === "::") {
|
|
291
|
+
publicPorts.set(value.port, value);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
const warnings = await Promise.all([...publicPorts.values()].map(async (value) => {
|
|
295
|
+
const host = previewHost(template, value.port);
|
|
296
|
+
if (!host)
|
|
297
|
+
return undefined;
|
|
298
|
+
const [local, preview] = await Promise.all([
|
|
299
|
+
probeHttp(value.address, value.port, `localhost:${value.port}`, timeoutMs),
|
|
300
|
+
probeHttp(value.address, value.port, host, timeoutMs),
|
|
301
|
+
]);
|
|
302
|
+
if (!local ||
|
|
303
|
+
!preview ||
|
|
304
|
+
preview.statusCode < 400 ||
|
|
305
|
+
preview.statusCode === local.statusCode) {
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
const detail = responseExcerpt(preview.body);
|
|
309
|
+
return (`Port ${value.port} REJECTS the user's preview host "${host}" ` +
|
|
310
|
+
`(HTTP ${preview.statusCode}: ${detail}). The preview will not load ` +
|
|
311
|
+
"until the server accepts this host and it picks up the config change.");
|
|
312
|
+
}));
|
|
313
|
+
return warnings.filter((value) => Boolean(value));
|
|
314
|
+
}
|
|
315
|
+
export class BackgroundProcessManager {
|
|
316
|
+
processes = new Map();
|
|
317
|
+
logsRoot;
|
|
318
|
+
previewHostTemplate;
|
|
319
|
+
previewProbeTimeoutMs;
|
|
320
|
+
constructor(workspace, options = {}) {
|
|
321
|
+
this.logsRoot = path.join(workspace, ".arena", "processes");
|
|
322
|
+
this.previewHostTemplate =
|
|
323
|
+
options.previewHostTemplate ?? previewHostTemplateFromEnvironment();
|
|
324
|
+
this.previewProbeTimeoutMs =
|
|
325
|
+
options.previewProbeTimeoutMs ?? previewProbeTimeoutMs;
|
|
326
|
+
}
|
|
327
|
+
alive(process) {
|
|
328
|
+
return processGroupAlive(process.child);
|
|
329
|
+
}
|
|
330
|
+
async state(process, lineCount) {
|
|
331
|
+
const ports = await listeningPorts();
|
|
332
|
+
if (!process) {
|
|
333
|
+
return {
|
|
334
|
+
status: "not_found",
|
|
335
|
+
exit_code: null,
|
|
336
|
+
log_tail: "",
|
|
337
|
+
listening_ports: ports,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
return {
|
|
341
|
+
status: this.alive(process) ? "running" : "exited",
|
|
342
|
+
exit_code: this.alive(process) ? null : process.exitCode,
|
|
343
|
+
log_tail: tailLines(await readLog(process.logPath), lineCount),
|
|
344
|
+
listening_ports: ports,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
async start(options) {
|
|
348
|
+
await mkdir(this.logsRoot, { recursive: true });
|
|
349
|
+
const id = processId(options.name);
|
|
350
|
+
const logPath = path.join(this.logsRoot, `${id}.log`);
|
|
351
|
+
const initialPorts = await listeningPorts();
|
|
352
|
+
const logFile = openSync(logPath, "w", 0o600);
|
|
353
|
+
let child;
|
|
354
|
+
try {
|
|
355
|
+
child = spawn("/bin/bash", ["-lc", options.command], {
|
|
356
|
+
cwd: options.cwd,
|
|
357
|
+
env: options.env,
|
|
358
|
+
detached: process.platform !== "win32",
|
|
359
|
+
stdio: ["ignore", logFile, logFile],
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
finally {
|
|
363
|
+
closeSync(logFile);
|
|
364
|
+
}
|
|
365
|
+
child.unref();
|
|
366
|
+
const managed = {
|
|
367
|
+
child,
|
|
368
|
+
exitCode: null,
|
|
369
|
+
initialPorts,
|
|
370
|
+
logPath,
|
|
371
|
+
pid: child.pid || null,
|
|
372
|
+
startedAt: Date.now(),
|
|
373
|
+
};
|
|
374
|
+
this.processes.set(id, managed);
|
|
375
|
+
child.once("exit", (code) => {
|
|
376
|
+
managed.exitCode = code;
|
|
377
|
+
});
|
|
378
|
+
child.once("error", () => {
|
|
379
|
+
managed.exitCode = null;
|
|
380
|
+
});
|
|
381
|
+
const abort = () => killProcessGroup(child, "SIGTERM");
|
|
382
|
+
options.signal?.addEventListener("abort", abort, { once: true });
|
|
383
|
+
try {
|
|
384
|
+
const deadline = Date.now() + options.startupWaitSeconds * 1000;
|
|
385
|
+
let ports = initialPorts;
|
|
386
|
+
while (Date.now() < deadline && this.alive(managed)) {
|
|
387
|
+
const remaining = deadline - Date.now();
|
|
388
|
+
if (remaining <= 0)
|
|
389
|
+
break;
|
|
390
|
+
await delay(Math.min(100, remaining), options.signal);
|
|
391
|
+
ports = await listeningPorts();
|
|
392
|
+
if (newPorts(initialPorts, ports).length > 0)
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
ports = await listeningPorts();
|
|
396
|
+
const alive = this.alive(managed);
|
|
397
|
+
const discoveredPorts = newPorts(initialPorts, ports);
|
|
398
|
+
const warnings = alive
|
|
399
|
+
? await previewWarnings(discoveredPorts, this.previewHostTemplate, this.previewProbeTimeoutMs)
|
|
400
|
+
: [];
|
|
401
|
+
return {
|
|
402
|
+
status: alive ? "running" : "exited",
|
|
403
|
+
process_id: id,
|
|
404
|
+
pid: alive ? managed.pid : null,
|
|
405
|
+
exit_code: alive ? null : managed.exitCode,
|
|
406
|
+
log_tail: tailLines(await readLog(logPath), 200),
|
|
407
|
+
listening_ports: ports,
|
|
408
|
+
new_ports: discoveredPorts,
|
|
409
|
+
duration_ms: Date.now() - managed.startedAt,
|
|
410
|
+
...(warnings.length ? { warnings } : {}),
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
await terminateProcessGroup(child);
|
|
415
|
+
throw error;
|
|
416
|
+
}
|
|
417
|
+
finally {
|
|
418
|
+
options.signal?.removeEventListener("abort", abort);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
async get(options) {
|
|
422
|
+
const process = this.processes.get(options.processId);
|
|
423
|
+
if (options.waitFor === "log" && !options.waitPattern) {
|
|
424
|
+
throw new Error("wait_pattern is required when wait_for is log");
|
|
425
|
+
}
|
|
426
|
+
if (!options.waitFor || !process) {
|
|
427
|
+
return this.state(process, options.tailLines);
|
|
428
|
+
}
|
|
429
|
+
const deadline = Date.now() + options.waitTimeoutSeconds * 1000;
|
|
430
|
+
let satisfied = false;
|
|
431
|
+
while (Date.now() < deadline) {
|
|
432
|
+
const log = await readLog(process.logPath);
|
|
433
|
+
const ports = await listeningPorts();
|
|
434
|
+
satisfied =
|
|
435
|
+
(options.waitFor === "exit" && !this.alive(process)) ||
|
|
436
|
+
(options.waitFor === "port" &&
|
|
437
|
+
newPorts(process.initialPorts, ports).length > 0) ||
|
|
438
|
+
(options.waitFor === "log" &&
|
|
439
|
+
patternMatches(log, options.waitPattern || ""));
|
|
440
|
+
if (satisfied || !this.alive(process))
|
|
441
|
+
break;
|
|
442
|
+
const remaining = deadline - Date.now();
|
|
443
|
+
if (remaining <= 0)
|
|
444
|
+
break;
|
|
445
|
+
await delay(Math.min(100, remaining), options.signal);
|
|
446
|
+
}
|
|
447
|
+
return {
|
|
448
|
+
...(await this.state(process, options.tailLines)),
|
|
449
|
+
wait_result: satisfied ? "satisfied" : "timeout",
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
async stop(processIdValue) {
|
|
453
|
+
const process = this.processes.get(processIdValue);
|
|
454
|
+
if (!process)
|
|
455
|
+
return { status: "not_found", log_tail: "" };
|
|
456
|
+
if (!this.alive(process)) {
|
|
457
|
+
return {
|
|
458
|
+
status: "already_exited",
|
|
459
|
+
log_tail: tailLines(await readLog(process.logPath), stopProcessTailLines),
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
await terminateProcessGroup(process.child);
|
|
463
|
+
return {
|
|
464
|
+
status: "stopped",
|
|
465
|
+
log_tail: tailLines(await readLog(process.logPath), stopProcessTailLines),
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
export function processManagerForWorkspace(workspace) {
|
|
470
|
+
const resolved = path.resolve(workspace);
|
|
471
|
+
let key = resolved;
|
|
472
|
+
try {
|
|
473
|
+
key = realpathSync(resolved);
|
|
474
|
+
}
|
|
475
|
+
catch {
|
|
476
|
+
// Construction will create missing workspaces before requesting a manager;
|
|
477
|
+
// retaining the lexical path is still the least surprising fallback.
|
|
478
|
+
}
|
|
479
|
+
let manager = managers.get(key);
|
|
480
|
+
if (!manager) {
|
|
481
|
+
manager = new BackgroundProcessManager(key);
|
|
482
|
+
managers.set(key, manager);
|
|
483
|
+
}
|
|
484
|
+
return manager;
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=process-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoC,CAAC;AAC7D,MAAM,wBAAwB,GAAG,SAAS,CAAC;AAC3C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AACzC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AA4CpC,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChD,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvE,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAChB,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;IAC/E,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QACtB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAC3B,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SAC5C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,MAAM,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/D,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CACxC,CAAC;IACF,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,GAAI,CAAC;QAC5C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG;YAAE,GAAG,IAAI,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,KAAK,GAAG,UAAU,EAAE,CAAC;YAC7B,SAAS,GAAG,KAAK,CAAC;YAClB,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC;QAC3B,CAAC;QACD,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IACD,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI;QAC3B,CAAC,eAAe,EAAE,KAAK,CAAC;QACxB,CAAC,gBAAgB,EAAE,IAAI,CAAC;KAChB,EAAE,CAAC;QACX,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,SAAS;YACxD,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YACpD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;aACpE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,CAAC,EAC3C,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CACjD,CAAC;QACF,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1C,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACvB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO;QACjC,CAAC,CAAC,kBAAkB,EAAE;QACtB,CAAC,CAAC,kBAAkB,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,OAAO,CAAC,KAAoB;IACnC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,QAAQ,CACf,MAAgC,EAChC,KAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,IAAI;SACd,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,GAAG,IAAI,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAChF,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAmB,EAAE,MAAsB;IACnE,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO;YAAE,MAAM,KAAK,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAmB;IAC5C,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAClC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,KAAmB;IACtD,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACnC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,YAAoB,EAAE,MAAoB;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,YAAY,CAAC,CAAC;QACjB,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAe;IACpC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC,MAAM,IAAI,wBAAwB;YAC7C,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,KAAa;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,OAAe;IACpD,IAAI,CAAC;QACH,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,kCAAkC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IACrD,OAAO,SAAS,CAAC,CAAC,CAAC,UAAU,SAAS,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED,SAAS,WAAW,CAClB,QAA4B,EAC5B,IAAY;IAEZ,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,KAAK,GAAG,QAAQ;SACnB,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAClC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC;SACpC,IAAI,EAAE,CAAC;IACV,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,SAAS,SAAS,CAChB,OAAe,EACf,IAAY,EACZ,UAAkB,EAClB,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAuB,EAAE,EAAE;YACzC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,WAAW,CACzB;YACE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW;YAC5C,IAAI;YACJ,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,MAAM,EAAE,iCAAiC;gBACzC,IAAI,EAAE,UAAU;aACjB;SACF,EACD,CAAC,QAAQ,EAAE,EAAE;YACX,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACpC,IAAI,MAAM,IAAI,EAAE,GAAG,IAAI;oBAAE,OAAO;gBAChC,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC;gBACrC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;gBACxB,MAAM,CAAC;oBACL,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC5C,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC;iBACrC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QACF,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE;YACjC,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,KAA+B,EAC/B,QAA4B,EAC5B,SAAiB;IAEjB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1D,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC;YAC1E,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;SACtD,CAAC,CAAC;QACH,IACE,CAAC,KAAK;YACN,CAAC,OAAO;YACR,OAAO,CAAC,UAAU,GAAG,GAAG;YACxB,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EACvC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,CACL,QAAQ,KAAK,CAAC,IAAI,qCAAqC,IAAI,IAAI;YAC/D,SAAS,OAAO,CAAC,UAAU,KAAK,MAAM,+BAA+B;YACrE,uEAAuE,CACxE,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACF,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,OAAO,wBAAwB;IAClB,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9C,QAAQ,CAAS;IACjB,mBAAmB,CAAU;IAC7B,qBAAqB,CAAS;IAE/C,YAAY,SAAiB,EAAE,OAAO,GAAoC,EAAE;QAC1E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC,mBAAmB;YACtB,OAAO,CAAC,mBAAmB,IAAI,kCAAkC,EAAE,CAAC;QACtE,IAAI,CAAC,qBAAqB;YACxB,OAAO,CAAC,qBAAqB,IAAI,qBAAqB,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,OAAuB;QACnC,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,KAAK,CACjB,OAAmC,EACnC,SAAiB;QAEjB,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,EAAE;gBACZ,eAAe,EAAE,KAAK;aACvB,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAClD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ;YACxD,QAAQ,EAAE,SAAS,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;YAC9D,eAAe,EAAE,KAAK;SACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA4B;QACtC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,MAAM,cAAc,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,KAAmB,CAAC;QACxB,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;gBACnD,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;gBACtC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;aACpC,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,OAAO,GAAmB;YAC9B,KAAK;YACL,QAAQ,EAAE,IAAI;YACd,YAAY;YACZ,OAAO;YACP,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI;YACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAChE,IAAI,KAAK,GAAG,YAAY,CAAC;YACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACxC,IAAI,SAAS,IAAI,CAAC;oBAAE,MAAM;gBAC1B,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtD,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;gBAC/B,IAAI,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM;YACtD,CAAC;YACD,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,KAAK;gBACpB,CAAC,CAAC,MAAM,eAAe,CACnB,eAAe,EACf,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,qBAAqB,CAC3B;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;gBACL,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;gBACpC,UAAU,EAAE,EAAE;gBACd,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;gBAC/B,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ;gBAC1C,QAAQ,EAAE,SAAS,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC;gBAChD,eAAe,EAAE,KAAK;gBACtB,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS;gBAC3C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAgC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAChE,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;YACrC,SAAS;gBACP,CAAC,OAAO,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACpD,CAAC,OAAO,CAAC,OAAO,KAAK,MAAM;wBACzB,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;oBACnD,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK;wBACxB,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;YACpD,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAAE,MAAM;YAC7C,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACxC,IAAI,SAAS,IAAI,CAAC;gBAAE,MAAM;YAC1B,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC;QACD,OAAO;YACL,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACjD,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SACjD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAAsB;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,MAAM,EAAE,gBAAgB;gBACxB,QAAQ,EAAE,SAAS,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC;aAC1E,CAAC;QACJ,CAAC;QAED,MAAM,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,SAAS,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC;SAC1E,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CACxC,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,qEAAqE;IACvE,CAAC;IACD,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,IAAI,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAC5C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/prompts.js
CHANGED
|
@@ -10,7 +10,7 @@ export const agentSystemPromptTemplate = [
|
|
|
10
10
|
"",
|
|
11
11
|
"You will be given tools and associated descriptions. Use those descriptions for greater detail on how to use and when to use the given tools.",
|
|
12
12
|
"",
|
|
13
|
-
"Users may ask about anything. Many times you will be able to answer their queries without many tool calls, if any. You should use your own judgment. When a user's request is ambiguous or is missing information that would greatly improve the helpfulness of your response, you should ask the user specific questions before proceeding--- it is preferred you ask the user through the
|
|
13
|
+
"Users may ask about anything. Many times you will be able to answer their queries without many tool calls, if any. You should use your own judgment. When a user's request is ambiguous or is missing information that would greatly improve the helpfulness of your response, you should ask the user specific questions before proceeding--- it is preferred you ask the user through the \"ask_user\" tool provided. This helps you deliver the right result on the first try instead of guessing. Don't over-use it--- if the intent is clear, just do the work.",
|
|
14
14
|
"",
|
|
15
15
|
"Many of the tools are for the workspace; you are given a workspace where you can read, create, manage, and run files. Both you and the user can see the workspace. Files you write are saved and persist across messages in the conversation, so you and the user can reference them later. Bash runs in a sandboxed filesystem rooted at /home/user; regular files under /home/user persist across messages, but installed packages, shell history, processes, and generated dependency/cache/build directories are not part of the saved workspace snapshot. You do not have to always use the workspace--- not every task will need it.",
|
|
16
16
|
"",
|
|
@@ -18,6 +18,8 @@ export const agentSystemPromptTemplate = [
|
|
|
18
18
|
"",
|
|
19
19
|
"Workspace snapshots exclude generated dependency/cache/build directory names: .arena, .cache, .mypy_cache, .next, .nox, .npm, .nuxt, .output, .parcel-cache, .pytest_cache, .ruff_cache, .svelte-kit, .tox, .turbo, .venv, .vite, __pycache__, build, coverage, dist, node_modules, out, target. They also exclude sensitive credential paths: .git/config, .git/credentials, .git-credentials, .netrc. Turn-end snapshots are best-effort capped around 128 MB or 10,000 files.",
|
|
20
20
|
"",
|
|
21
|
+
"You can run long-lived servers and background processes with the process tools (start_process, get_process_output, stop_process). Any server you start is shown to the user as a LIVE PREVIEW in their browser, proxied under the host https://{port}-{sandboxId}.e2b.app. Design for that environment: (1) bind servers to 0.0.0.0, not 127.0.0.1; (2) the app must accept requests for that preview host/origin — dev servers with host or origin allowlists must permit it; (3) the user's browser is NOT the sandbox — browser-facing code must never call localhost/127.0.0.1 to reach another service; use relative URLs and have the dev server proxy them to the backend. Preview-breaking responses the platform can detect are returned as warnings in start_process results — fix those configs in the same turn rather than leaving the user a broken preview.",
|
|
22
|
+
"",
|
|
21
23
|
"Note, when user views a workspace file they will see a preview. The preview renders in a sandboxed iframe (`sandbox=\"allow-scripts\"`) with no network access, so external stylesheets, scripts, images, and fonts will not load. Use inline styles, embedded SVGs, and data URIs instead. If the user explicitly needs external resources (e.g. a live API, CDN library), that's fine — just know the in-app preview will degrade gracefully (missing styles/images) while the downloaded file will work fully in a browser.",
|
|
22
24
|
"",
|
|
23
25
|
"The viewer renders rich previews for these formats: plain text and code, Markdown, HTML, SVG, images, audio, video, PDF, CSV, and Microsoft Office documents — Word (`.docx`), Excel (`.xlsx`), and PowerPoint (`.pptx`). Any other type is offered to the user as a download rather than a preview. When creating Office deliverables, always use the modern OOXML formats — `.docx`, `.pptx`, and `.xlsx` (Python's `python-docx`, `python-pptx`, and `openpyxl` produce these by default). Do not emit legacy binary `.doc` or `.ppt` files: they cannot be previewed in-app and are only offered as a download. If a user explicitly requires a legacy format, produce it but tell them it will download rather than preview.",
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAE3E,kDAAkD;AAClD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,wFAAwF;IACxF,EAAE;IACF,oUAAoU;IACpU,kBAAkB;IAClB,EAAE;IACF,+IAA+I;IAC/I,EAAE;IACF,
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAE3E,kDAAkD;AAClD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,wFAAwF;IACxF,EAAE;IACF,oUAAoU;IACpU,kBAAkB;IAClB,EAAE;IACF,+IAA+I;IAC/I,EAAE;IACF,siBAAsiB;IACtiB,EAAE;IACF,4mBAA4mB;IAC5mB,EAAE;IACF,8XAA8X;IAC9X,EAAE;IACF,kdAAkd;IACld,EAAE;IACF,40BAA40B;IAC50B,EAAE;IACF,ggBAAggB;IAChgB,EAAE;IACF,msBAAmsB;IACnsB,EAAE;IACF,iLAAiL;IACjL,EAAE;IACF,44BAA44B;IAC54B,EAAE;IACF,yDAAyD;IACzD,EAAE;IACF,qTAAqT;IACrT,EAAE;IACF,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,qCAAqC;AACrC,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,uGAAuG;IACvG,EAAE;IACF,4IAA4I;IAC5I,kBAAkB;IAClB,EAAE;IACF,myBAAmyB;IACnyB,EAAE;IACF,4iBAA4iB;IAC5iB,EAAE;IACF,oeAAoe;IACpe,EAAE;IACF,kVAAkV;IAClV,EAAE;IACF,yDAAyD;IACzD,EAAE;IACF,4SAA4S;IAC5S,EAAE;IACF,EAAE;IACF,EAAE;CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ interface HttpModelClientOptions {
|
|
|
7
7
|
random?: () => number;
|
|
8
8
|
now?: () => number;
|
|
9
9
|
diagnostics?: ModelCallDiagnosticSink;
|
|
10
|
+
/** Internal UUID used for ModelRouter affinity; unrelated to the public Arena session ID. */
|
|
11
|
+
sessionAffinityId?: string;
|
|
10
12
|
}
|
|
11
13
|
export declare class ModelCapabilityError extends Error {
|
|
12
14
|
readonly capabilityHint: string;
|
|
@@ -22,6 +24,9 @@ export interface ApiConnection {
|
|
|
22
24
|
liteLlmProxy: boolean;
|
|
23
25
|
headers: Record<string, string>;
|
|
24
26
|
}
|
|
27
|
+
export type ModelTransport = "anthropic-messages" | "openai-chat-completions" | "openai-responses";
|
|
28
|
+
/** Select the wire protocol without resolving credentials or making a request. */
|
|
29
|
+
export declare function modelTransport(config: ArenaConfig, requestedModel?: string): ModelTransport;
|
|
25
30
|
export declare function resolveApiConnection(config: ArenaConfig, requestedModel?: string): ApiConnection;
|
|
26
31
|
export declare function apiEndpoint(connection: ApiConnection, pathname: string): string;
|
|
27
32
|
export declare function withIdleTimeout(stream: ReadableStream<Uint8Array>, timeoutMs: number | undefined): ReadableStream<Uint8Array>;
|
|
@@ -32,6 +37,7 @@ export declare class HttpModelClient implements ModelClient {
|
|
|
32
37
|
private readonly random;
|
|
33
38
|
private readonly now;
|
|
34
39
|
private readonly diagnostics?;
|
|
40
|
+
private readonly affinityHeaders;
|
|
35
41
|
private readonly recordedToolSchemas;
|
|
36
42
|
private anthropicBearerAuth;
|
|
37
43
|
constructor(config: ArenaConfig, options?: HttpModelClientOptions);
|
|
@@ -45,6 +51,7 @@ export declare class HttpModelClient implements ModelClient {
|
|
|
45
51
|
private fetchWithHeadersTimeout;
|
|
46
52
|
private completionResponse;
|
|
47
53
|
stream(request: ModelRequest): AsyncIterable<ModelChunk>;
|
|
54
|
+
private streamOpenAIResponses;
|
|
48
55
|
private streamAnthropic;
|
|
49
56
|
}
|
|
50
57
|
export declare function checkedFetch(connection: ApiConnection, pathname: string, init: RequestInit): Promise<Response>;
|