@n8n/instance-ai 1.16.2 → 1.17.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/dist/agent/instance-agent.js +7 -1
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/system-prompt.js +3 -3
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/event-bus/event-bus.interface.d.ts +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/parsers/xlsx-parser.js +1 -1
- package/dist/parsers/xlsx-parser.js.map +1 -1
- package/dist/runtime/terminal-response-guard.js +2 -1
- package/dist/runtime/terminal-response-guard.js.map +1 -1
- package/dist/skills/skill-gates.d.ts +5 -0
- package/dist/skills/skill-gates.js +12 -0
- package/dist/skills/skill-gates.js.map +1 -0
- package/dist/storage/workflow-loop-storage.d.ts +7 -7
- package/dist/stream/consume-with-hitl.d.ts +3 -0
- package/dist/stream/consume-with-hitl.js +2 -0
- package/dist/stream/consume-with-hitl.js.map +1 -1
- package/dist/stream/map-chunk.js +7 -0
- package/dist/stream/map-chunk.js.map +1 -1
- package/dist/stream/usage-accumulator.d.ts +2 -0
- package/dist/stream/usage-accumulator.js +13 -3
- package/dist/stream/usage-accumulator.js.map +1 -1
- package/dist/tool-registry.js +5 -1
- package/dist/tool-registry.js.map +1 -1
- package/dist/tools/agents.tool.d.ts +2 -0
- package/dist/tools/agents.tool.js +40 -0
- package/dist/tools/agents.tool.js.map +1 -0
- package/dist/tools/credentials.tool.js +8 -3
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/evals/eval-config.tool.js +10 -2
- package/dist/tools/evals/eval-config.tool.js.map +1 -1
- package/dist/tools/executions.tool.js +3 -2
- package/dist/tools/executions.tool.js.map +1 -1
- package/dist/tools/filesystem/create-tools-from-mcp-server.js +2 -2
- package/dist/tools/filesystem/create-tools-from-mcp-server.js.map +1 -1
- package/dist/tools/index.js +15 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/n8n-docs/registry.d.ts +2 -2
- package/dist/tools/n8n-docs/registry.js +20 -8
- package/dist/tools/n8n-docs/registry.js.map +1 -1
- package/dist/tools/n8n-docs.tool.js +18 -12
- package/dist/tools/n8n-docs.tool.js.map +1 -1
- package/dist/tools/nodes.tool.js +1 -1
- package/dist/tools/orchestration/agent-preview-session-binding.d.ts +20 -0
- package/dist/tools/orchestration/agent-preview-session-binding.js +47 -0
- package/dist/tools/orchestration/agent-preview-session-binding.js.map +1 -0
- package/dist/tools/orchestration/agent-target-binding.d.ts +6 -1
- package/dist/tools/orchestration/agent-target-binding.js +43 -4
- package/dist/tools/orchestration/agent-target-binding.js.map +1 -1
- package/dist/tools/orchestration/build-agent.tool.js +365 -71
- package/dist/tools/orchestration/build-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/builder-thread-id.d.ts +1 -0
- package/dist/tools/orchestration/builder-thread-id.js +7 -0
- package/dist/tools/orchestration/builder-thread-id.js.map +1 -0
- package/dist/tools/orchestration/get-session.tool.d.ts +2 -0
- package/dist/tools/orchestration/get-session.tool.js +49 -0
- package/dist/tools/orchestration/get-session.tool.js.map +1 -0
- package/dist/tools/orchestration/verification/reconcile-plan.js +4 -1
- package/dist/tools/orchestration/verification/reconcile-plan.js.map +1 -1
- package/dist/tools/orchestration/verify-built-workflow.tool.js +1 -0
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/research.tool.js +2 -0
- package/dist/tools/research.tool.js.map +1 -1
- package/dist/tools/tool-ids.d.ts +2 -0
- package/dist/tools/tool-ids.js +3 -0
- package/dist/tools/tool-ids.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.js +12 -4
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/classify-node-destructiveness.service.d.ts +1 -1
- package/dist/tools/workflows/classify-node-destructiveness.service.js +5 -7
- package/dist/tools/workflows/classify-node-destructiveness.service.js.map +1 -1
- package/dist/tools/workflows/credential-utils.d.ts +1 -1
- package/dist/tools/workflows/credential-utils.js +2 -2
- package/dist/tools/workflows/credential-utils.js.map +1 -1
- package/dist/tools/workflows/detect-unparseable-openai-schema.d.ts +3 -0
- package/dist/tools/workflows/detect-unparseable-openai-schema.js +85 -0
- package/dist/tools/workflows/detect-unparseable-openai-schema.js.map +1 -0
- package/dist/tools/workflows/generate-simulation-fixtures.service.d.ts +2 -1
- package/dist/tools/workflows/generate-simulation-fixtures.service.js +27 -5
- package/dist/tools/workflows/generate-simulation-fixtures.service.js.map +1 -1
- package/dist/tools/workflows/materialize-node-type.tool.js +4 -2
- package/dist/tools/workflows/materialize-node-type.tool.js.map +1 -1
- package/dist/tools/workflows/plan-verification-simulation.d.ts +5 -2
- package/dist/tools/workflows/plan-verification-simulation.js +117 -2
- package/dist/tools/workflows/plan-verification-simulation.js.map +1 -1
- package/dist/tools/workflows/reconcile-simulation-plan.js +48 -17
- package/dist/tools/workflows/reconcile-simulation-plan.js.map +1 -1
- package/dist/tools/workflows/resolve-credentials.js +35 -1
- package/dist/tools/workflows/resolve-credentials.js.map +1 -1
- package/dist/tools/workflows/setup-workflow.schema.d.ts +66 -66
- package/dist/tools/workflows/validate-workflow.service.js +4 -4
- package/dist/tools/workflows/workflow-build-routing.js +3 -3
- package/dist/tools/workflows/workflow-build-routing.js.map +1 -1
- package/dist/tools/workflows/workflow-file-bindings.d.ts +1 -1
- package/dist/tools/workflows/workflow-file-bindings.js +2 -1
- package/dist/tools/workflows/workflow-file-bindings.js.map +1 -1
- package/dist/tools/workflows/workflow-json-utils.js +11 -12
- package/dist/tools/workflows/workflow-json-utils.js.map +1 -1
- package/dist/tools/workflows/workflow-source-compiler.d.ts +1 -1
- package/dist/tools/workflows/workflow-source-compiler.js +11 -4
- package/dist/tools/workflows/workflow-source-compiler.js.map +1 -1
- package/dist/tools/workflows/write-sandbox-file.tool.js +4 -2
- package/dist/tools/workflows/write-sandbox-file.tool.js.map +1 -1
- package/dist/tracing/langsmith-tracing.d.ts +1 -0
- package/dist/tracing/langsmith-tracing.js +69 -9
- package/dist/tracing/langsmith-tracing.js.map +1 -1
- package/dist/tracing/trace-payloads.js +8 -0
- package/dist/tracing/trace-payloads.js.map +1 -1
- package/dist/types.d.ts +52 -5
- package/dist/types.js.map +1 -1
- package/dist/utils/stream-helpers.d.ts +1 -0
- package/dist/utils/stream-helpers.js +2 -1
- package/dist/utils/stream-helpers.js.map +1 -1
- package/dist/workflow-loop/workflow-loop-state.d.ts +13 -13
- package/dist/workflow-loop/workflow-loop-state.js +6 -1
- package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
- package/dist/workspace/create-workspace.js +24 -1
- package/dist/workspace/create-workspace.js.map +1 -1
- package/dist/workspace/lazy-runtime-workspace.js +19 -19
- package/dist/workspace/lazy-runtime-workspace.js.map +1 -1
- package/dist/workspace/sandbox-fs.d.ts +16 -4
- package/dist/workspace/sandbox-fs.js +80 -25
- package/dist/workspace/sandbox-fs.js.map +1 -1
- package/dist/workspace/scoped-workspace.js +6 -6
- package/dist/workspace/scoped-workspace.js.map +1 -1
- package/dist/workspace/snapshot-manager.d.ts +1 -0
- package/dist/workspace/snapshot-manager.js +37 -5
- package/dist/workspace/snapshot-manager.js.map +1 -1
- package/dist/workspace/workspace-files.d.ts +4 -0
- package/dist/workspace/workspace-files.js +21 -7
- package/dist/workspace/workspace-files.js.map +1 -1
- package/knowledge-base/reference/workflow-builder-guardrails.md +3 -0
- package/package.json +12 -12
- package/skills/config-evals/SKILL.md +96 -0
- package/skills/config-evals/references/config-eval-playbook.md +109 -0
- package/skills/intent-recognition/SKILL.md +145 -34
- package/skills/workflow-builder/SKILL.md +25 -17
|
@@ -152,40 +152,40 @@ class LazyRuntimeFilesystem extends agents_1.BaseFilesystem {
|
|
|
152
152
|
].join(' ');
|
|
153
153
|
}
|
|
154
154
|
async readFile(path, options) {
|
|
155
|
-
return await (await this.getFilesystem()).readFile(path, options);
|
|
155
|
+
return await (await this.getFilesystem(options?.abortSignal)).readFile(path, options);
|
|
156
156
|
}
|
|
157
157
|
async writeFile(path, content, options) {
|
|
158
|
-
await (await this.getFilesystem()).writeFile(path, content, options);
|
|
158
|
+
await (await this.getFilesystem(options?.abortSignal)).writeFile(path, content, options);
|
|
159
159
|
}
|
|
160
|
-
async appendFile(path, content) {
|
|
161
|
-
await (await this.getFilesystem()).appendFile(path, content);
|
|
160
|
+
async appendFile(path, content, options) {
|
|
161
|
+
await (await this.getFilesystem(options?.abortSignal)).appendFile(path, content, options);
|
|
162
162
|
}
|
|
163
163
|
async deleteFile(path, options) {
|
|
164
|
-
await (await this.getFilesystem()).deleteFile(path, options);
|
|
164
|
+
await (await this.getFilesystem(options?.abortSignal)).deleteFile(path, options);
|
|
165
165
|
}
|
|
166
166
|
async copyFile(src, dest, options) {
|
|
167
|
-
await (await this.getFilesystem()).copyFile(src, dest, options);
|
|
167
|
+
await (await this.getFilesystem(options?.abortSignal)).copyFile(src, dest, options);
|
|
168
168
|
}
|
|
169
169
|
async moveFile(src, dest, options) {
|
|
170
|
-
await (await this.getFilesystem()).moveFile(src, dest, options);
|
|
170
|
+
await (await this.getFilesystem(options?.abortSignal)).moveFile(src, dest, options);
|
|
171
171
|
}
|
|
172
172
|
async mkdir(path, options) {
|
|
173
|
-
await (await this.getFilesystem()).mkdir(path, options);
|
|
173
|
+
await (await this.getFilesystem(options?.abortSignal)).mkdir(path, options);
|
|
174
174
|
}
|
|
175
175
|
async rmdir(path, options) {
|
|
176
|
-
await (await this.getFilesystem()).rmdir(path, options);
|
|
176
|
+
await (await this.getFilesystem(options?.abortSignal)).rmdir(path, options);
|
|
177
177
|
}
|
|
178
178
|
async readdir(path, options) {
|
|
179
|
-
return await (await this.getFilesystem()).readdir(path, options);
|
|
179
|
+
return await (await this.getFilesystem(options?.abortSignal)).readdir(path, options);
|
|
180
180
|
}
|
|
181
|
-
async exists(path) {
|
|
182
|
-
return await (await this.getFilesystem()).exists(path);
|
|
181
|
+
async exists(path, options) {
|
|
182
|
+
return await (await this.getFilesystem(options?.abortSignal)).exists(path, options);
|
|
183
183
|
}
|
|
184
|
-
async stat(path) {
|
|
185
|
-
return await (await this.getFilesystem()).stat(path);
|
|
184
|
+
async stat(path, options) {
|
|
185
|
+
return await (await this.getFilesystem(options?.abortSignal)).stat(path, options);
|
|
186
186
|
}
|
|
187
|
-
async getFilesystem() {
|
|
188
|
-
const filesystem = await this.resolver.getFilesystem();
|
|
187
|
+
async getFilesystem(abortSignal) {
|
|
188
|
+
const filesystem = await (0, agents_1.raceWithAbort)(async () => await this.resolver.getFilesystem(), abortSignal);
|
|
189
189
|
this.syncStatus(filesystem);
|
|
190
190
|
return filesystem;
|
|
191
191
|
}
|
|
@@ -230,7 +230,7 @@ class LazyRuntimeSandbox extends agents_1.BaseSandbox {
|
|
|
230
230
|
return this.resolver.current?.sandbox?.getDefaultCommandEnv?.() ?? {};
|
|
231
231
|
}
|
|
232
232
|
async executeCommand(command, args = [], options) {
|
|
233
|
-
const sandbox = await this.getSandbox();
|
|
233
|
+
const sandbox = await this.getSandbox(options?.abortSignal);
|
|
234
234
|
if (!sandbox.executeCommand) {
|
|
235
235
|
throw new Error('Instance AI runtime sandbox does not support command execution.');
|
|
236
236
|
}
|
|
@@ -253,8 +253,8 @@ class LazyRuntimeSandbox extends agents_1.BaseSandbox {
|
|
|
253
253
|
return instructions;
|
|
254
254
|
return 'Workspace command tools are available and create the runtime sandbox on first use.';
|
|
255
255
|
}
|
|
256
|
-
async getSandbox() {
|
|
257
|
-
const sandbox = await this.resolver.getSandbox();
|
|
256
|
+
async getSandbox(abortSignal) {
|
|
257
|
+
const sandbox = await (0, agents_1.raceWithAbort)(async () => await this.resolver.getSandbox(), abortSignal);
|
|
258
258
|
this.syncStatus(sandbox);
|
|
259
259
|
return sandbox;
|
|
260
260
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-runtime-workspace.js","sourceRoot":"","sources":["../../src/workspace/lazy-runtime-workspace.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"lazy-runtime-workspace.js","sourceRoot":"","sources":["../../src/workspace/lazy-runtime-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type SandboxCommandTarget, type SandboxWorkspace as SharedSandboxWorkspace } from '@n8n/agents/sandbox';
|
|
1
|
+
import { type RunInSandboxOptions, type SandboxCommandTarget, type SandboxWorkspace as SharedSandboxWorkspace } from '@n8n/agents/sandbox';
|
|
2
|
+
import type { Logger } from '../logger';
|
|
2
3
|
export interface SandboxWorkspace extends SharedSandboxWorkspace {
|
|
3
4
|
filesystem?: {
|
|
4
5
|
provider?: string;
|
|
@@ -6,20 +7,31 @@ export interface SandboxWorkspace extends SharedSandboxWorkspace {
|
|
|
6
7
|
init?: () => Promise<void>;
|
|
7
8
|
readFile?: (path: string, options?: {
|
|
8
9
|
encoding?: BufferEncoding;
|
|
10
|
+
abortSignal?: AbortSignal;
|
|
9
11
|
}) => Promise<string | Buffer>;
|
|
10
12
|
writeFile: (path: string, content: string | Buffer, options?: {
|
|
11
13
|
recursive?: boolean;
|
|
14
|
+
abortSignal?: AbortSignal;
|
|
12
15
|
}) => Promise<void>;
|
|
13
16
|
mkdir: (path: string, options?: {
|
|
14
17
|
recursive?: boolean;
|
|
18
|
+
abortSignal?: AbortSignal;
|
|
15
19
|
}) => Promise<void>;
|
|
16
20
|
} & NonNullable<SharedSandboxWorkspace['filesystem']>;
|
|
17
21
|
}
|
|
18
|
-
export
|
|
22
|
+
export interface SandboxIoRetryOptions {
|
|
23
|
+
logger?: Pick<Logger, 'warn'>;
|
|
24
|
+
resourceLabel?: string;
|
|
25
|
+
retryBackoffBaseMs?: number;
|
|
26
|
+
abortSignal?: AbortSignal;
|
|
27
|
+
}
|
|
28
|
+
export declare function isTransientSandboxIoError(error: unknown): boolean;
|
|
29
|
+
export declare function retryTransientSandboxIo<T>(op: () => Promise<T>, filePath: string, options?: SandboxIoRetryOptions): Promise<T>;
|
|
30
|
+
export declare function runInSandbox(workspace: SandboxCommandTarget, command: string, cwdOrOptions?: string | RunInSandboxOptions): Promise<{
|
|
19
31
|
exitCode: number;
|
|
20
32
|
stdout: string;
|
|
21
33
|
stderr: string;
|
|
22
34
|
}>;
|
|
23
|
-
export declare function writeFileViaSandbox(workspace: SandboxCommandTarget, filePath: string, content: string | Buffer): Promise<void>;
|
|
24
|
-
export declare function readFileViaSandbox(workspace: SandboxCommandTarget, filePath: string): Promise<string | null>;
|
|
35
|
+
export declare function writeFileViaSandbox(workspace: SandboxCommandTarget, filePath: string, content: string | Buffer, options?: SandboxIoRetryOptions): Promise<void>;
|
|
36
|
+
export declare function readFileViaSandbox(workspace: SandboxCommandTarget, filePath: string, options?: SandboxIoRetryOptions): Promise<string | null>;
|
|
25
37
|
export declare function escapeSingleQuotes(s: string): string;
|
|
@@ -1,14 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isTransientSandboxIoError = isTransientSandboxIoError;
|
|
4
|
+
exports.retryTransientSandboxIo = retryTransientSandboxIo;
|
|
3
5
|
exports.runInSandbox = runInSandbox;
|
|
4
6
|
exports.writeFileViaSandbox = writeFileViaSandbox;
|
|
5
7
|
exports.readFileViaSandbox = readFileViaSandbox;
|
|
6
8
|
exports.escapeSingleQuotes = escapeSingleQuotes;
|
|
9
|
+
const agents_1 = require("@n8n/agents");
|
|
7
10
|
const sandbox_1 = require("@n8n/agents/sandbox");
|
|
11
|
+
const error_formatting_1 = require("../error-formatting");
|
|
8
12
|
const template_telemetry_1 = require("./template-telemetry");
|
|
9
13
|
const BASE64_WRITE_CHUNK_SIZE = 32_000;
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
const SANDBOX_IO_MAX_ATTEMPTS = 3;
|
|
15
|
+
const DEFAULT_SANDBOX_IO_RETRY_BACKOFF_BASE_MS = 1_000;
|
|
16
|
+
const SANDBOX_IO_RETRY_BACKOFF_CAP_MS = 5_000;
|
|
17
|
+
function ioResourceLabel(options) {
|
|
18
|
+
return options?.resourceLabel ?? 'Sandbox file';
|
|
19
|
+
}
|
|
20
|
+
async function sleep(ms, abortSignal) {
|
|
21
|
+
(0, agents_1.throwIfAborted)(abortSignal);
|
|
22
|
+
await new Promise((resolve, reject) => {
|
|
23
|
+
const timer = setTimeout(() => {
|
|
24
|
+
abortSignal?.removeEventListener('abort', onAbort);
|
|
25
|
+
resolve();
|
|
26
|
+
}, ms);
|
|
27
|
+
const onAbort = () => {
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
reject((0, agents_1.createAbortError)(abortSignal?.reason));
|
|
30
|
+
};
|
|
31
|
+
abortSignal?.addEventListener('abort', onAbort, { once: true });
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function isTransientSandboxIoError(error) {
|
|
35
|
+
if (typeof error !== 'object' || error === null)
|
|
36
|
+
return false;
|
|
37
|
+
const status = 'statusCode' in error ? error.statusCode : 'status' in error ? error.status : null;
|
|
38
|
+
return typeof status === 'number' && (status >= 500 || status === 408 || status === 429);
|
|
39
|
+
}
|
|
40
|
+
async function retryTransientSandboxIo(op, filePath, options) {
|
|
41
|
+
const baseMs = options?.retryBackoffBaseMs ?? DEFAULT_SANDBOX_IO_RETRY_BACKOFF_BASE_MS;
|
|
42
|
+
for (let attempt = 1;; attempt++) {
|
|
43
|
+
(0, agents_1.throwIfAborted)(options?.abortSignal);
|
|
44
|
+
try {
|
|
45
|
+
return await op();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (attempt >= SANDBOX_IO_MAX_ATTEMPTS || !isTransientSandboxIoError(error))
|
|
49
|
+
throw error;
|
|
50
|
+
options?.logger?.warn(`${ioResourceLabel(options)} I/O hit a transient error; retrying`, {
|
|
51
|
+
path: filePath,
|
|
52
|
+
attempt,
|
|
53
|
+
error: (0, error_formatting_1.formatErrorForLog)(error),
|
|
54
|
+
});
|
|
55
|
+
await sleep(Math.min(baseMs * 2 ** (attempt - 1), SANDBOX_IO_RETRY_BACKOFF_CAP_MS), options?.abortSignal);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function runInSandbox(workspace, command, cwdOrOptions) {
|
|
60
|
+
const result = await (0, sandbox_1.runInSandbox)(workspace, command, cwdOrOptions);
|
|
12
61
|
const session = (0, template_telemetry_1.getTemplateTelemetrySession)(workspace);
|
|
13
62
|
if (session) {
|
|
14
63
|
try {
|
|
@@ -19,31 +68,37 @@ async function runInSandbox(workspace, command, cwd) {
|
|
|
19
68
|
}
|
|
20
69
|
return result;
|
|
21
70
|
}
|
|
22
|
-
async function writeFileViaSandbox(workspace, filePath, content) {
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
71
|
+
async function writeFileViaSandbox(workspace, filePath, content, options) {
|
|
72
|
+
await retryTransientSandboxIo(async () => {
|
|
73
|
+
const runWriteCommand = async (command) => {
|
|
74
|
+
const result = await runInSandbox(workspace, command, {
|
|
75
|
+
abortSignal: options?.abortSignal,
|
|
76
|
+
});
|
|
77
|
+
if (result.exitCode !== 0) {
|
|
78
|
+
throw new Error(`Failed to write file ${filePath}: ${result.stderr}`);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const dir = filePath.substring(0, filePath.lastIndexOf('/'));
|
|
82
|
+
if (dir) {
|
|
83
|
+
await runWriteCommand(`mkdir -p '${escapeSingleQuotes(dir)}'`);
|
|
27
84
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const chunk = b64.slice(offset, offset + BASE64_WRITE_CHUNK_SIZE);
|
|
41
|
-
await runWriteCommand(`printf '%s' '${chunk}' >> '${escapedTempPath}'`);
|
|
42
|
-
}
|
|
43
|
-
await runWriteCommand(`base64 -d '${escapedTempPath}' > '${escapeSingleQuotes(filePath)}'; rc=$?; rm -f '${escapedTempPath}'; exit $rc`);
|
|
85
|
+
const b64 = typeof content === 'string'
|
|
86
|
+
? Buffer.from(content, 'utf-8').toString('base64')
|
|
87
|
+
: content.toString('base64');
|
|
88
|
+
const tempPath = `${filePath}.base64.tmp-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
89
|
+
const escapedTempPath = escapeSingleQuotes(tempPath);
|
|
90
|
+
await runWriteCommand(`: > '${escapedTempPath}'`);
|
|
91
|
+
for (let offset = 0; offset < b64.length; offset += BASE64_WRITE_CHUNK_SIZE) {
|
|
92
|
+
const chunk = b64.slice(offset, offset + BASE64_WRITE_CHUNK_SIZE);
|
|
93
|
+
await runWriteCommand(`printf '%s' '${chunk}' >> '${escapedTempPath}'`);
|
|
94
|
+
}
|
|
95
|
+
await runWriteCommand(`base64 -d '${escapedTempPath}' > '${escapeSingleQuotes(filePath)}'; rc=$?; rm -f '${escapedTempPath}'; exit $rc`);
|
|
96
|
+
}, filePath, options);
|
|
44
97
|
}
|
|
45
|
-
async function readFileViaSandbox(workspace, filePath) {
|
|
46
|
-
const result = await runInSandbox(workspace, `cat '${escapeSingleQuotes(filePath)}' 2>/dev/null
|
|
98
|
+
async function readFileViaSandbox(workspace, filePath, options) {
|
|
99
|
+
const result = await retryTransientSandboxIo(async () => await runInSandbox(workspace, `cat '${escapeSingleQuotes(filePath)}' 2>/dev/null`, {
|
|
100
|
+
abortSignal: options?.abortSignal,
|
|
101
|
+
}), filePath, options);
|
|
47
102
|
if (result.exitCode !== 0)
|
|
48
103
|
return null;
|
|
49
104
|
return result.stdout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-fs.js","sourceRoot":"","sources":["../../src/workspace/sandbox-fs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sandbox-fs.js","sourceRoot":"","sources":["../../src/workspace/sandbox-fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,8 +55,8 @@ class ScopedFilesystem {
|
|
|
55
55
|
async writeFile(path, content, options) {
|
|
56
56
|
await this.filesystem.writeFile(resolvePath(this.root, path), content, options);
|
|
57
57
|
}
|
|
58
|
-
async appendFile(path, content) {
|
|
59
|
-
await this.filesystem.appendFile(resolvePath(this.root, path), content);
|
|
58
|
+
async appendFile(path, content, options) {
|
|
59
|
+
await this.filesystem.appendFile(resolvePath(this.root, path), content, options);
|
|
60
60
|
}
|
|
61
61
|
async deleteFile(path, options) {
|
|
62
62
|
await this.filesystem.deleteFile(resolvePath(this.root, path), options);
|
|
@@ -76,11 +76,11 @@ class ScopedFilesystem {
|
|
|
76
76
|
async readdir(path, options) {
|
|
77
77
|
return await this.filesystem.readdir(resolvePath(this.root, path), options);
|
|
78
78
|
}
|
|
79
|
-
async exists(path) {
|
|
80
|
-
return await this.filesystem.exists(resolvePath(this.root, path));
|
|
79
|
+
async exists(path, options) {
|
|
80
|
+
return await this.filesystem.exists(resolvePath(this.root, path), options);
|
|
81
81
|
}
|
|
82
|
-
async stat(path) {
|
|
83
|
-
return await this.filesystem.stat(resolvePath(this.root, path));
|
|
82
|
+
async stat(path, options) {
|
|
83
|
+
return await this.filesystem.stat(resolvePath(this.root, path), options);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
class ScopedSandbox {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-workspace.js","sourceRoot":"","sources":["../../src/workspace/scoped-workspace.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"scoped-workspace.js","sourceRoot":"","sources":["../../src/workspace/scoped-workspace.ts"],"names":[],"mappings":";;;AAAA,wCAgBqB;AACrB,2CAAiF;AAEjF,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;IACxD,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC9C,MAAM,cAAc,GAAG,IAAA,iBAAc,EAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1C,CAAC,CAAC,IAAA,iBAAc,EAAC,IAAI,CAAC;QACtB,CAAC,CAAC,IAAA,iBAAc,EAAC,IAAA,YAAS,EAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,cAAc,CAAC;AACvB,CAAC;AAED,MAAM,gBAAgB;IAEH,UAAU;IACV,IAAI;IAFtB,YACkB,UAA+B,EAC/B,IAAY;0BADZ,UAAU;oBACV,IAAI;IACnB,CAAC;IAEJ,IAAI,EAAE;QACL,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvC,CAAC;IAED,IAAI,IAAI;QACP,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC;IACnD,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,CAAC,MAAsB;QAChC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;IACjC,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,eAAe;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,EAAE,kCAAkC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAqB;QACjD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAAoB,EAAE,OAAsB;QACzE,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,OAAoB,EAAE,OAAuB;QAC3E,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,OAAuB;QACrD,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,IAAY,EAAE,OAAqB;QAC9D,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAC7B,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAC5B,OAAO,CACP,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,IAAY,EAAE,OAAqB;QAC9D,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAC7B,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAC5B,OAAO,CACP,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,OAAsB;QAC/C,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,OAAuB;QAChD,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAqB;QAChD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,OAA0B;QACpD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,OAA0B;QAClD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;CACD;AAED,MAAM,aAAa;IAIA,OAAO;IACP,IAAI;IACJ,GAAG;IALZ,cAAc,CAAmD;IAE1E,YACkB,OAAyB,EACzB,IAAY,EACZ,GAAG,GAAsB,EAAE;uBAF3B,OAAO;oBACP,IAAI;mBACJ,GAAG;QAEpB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC5B,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;gBAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1E,OAAO,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE;oBAC1C,GAAG,OAAO;oBACV,GAAG;oBACH,GAAG,EAAE;wBACJ,GAAG,IAAI,CAAC,GAAG;wBACX,GAAG,OAAO,CAAC,GAAG;qBACd;iBACD,CAAC,CAAC;YACJ,CAAC,CAAC;QACH,CAAC;IACF,CAAC;IAED,IAAI,EAAE;QACL,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpC,CAAC;IAED,IAAI,IAAI;QACP,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,mBAAmB,CAAC;IAChD,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM,CAAC,MAAsB;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9B,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,eAAe;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,EAAE,qBAAqB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC;CACD;AAED,+BACC,SAAoB,EACpB,IAAY,EACZ,GAAuB;IAEvB,OAAO,IAAI,kBAAS,CAAC;QACpB,EAAE,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,IAAI,EAAE;QAC7B,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,KAAK,IAAI,GAAG;QACnC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/F,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;KACxF,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -19,6 +19,7 @@ export declare class SnapshotManager {
|
|
|
19
19
|
ensureImage(): Promise<Image>;
|
|
20
20
|
private prepareImage;
|
|
21
21
|
createSnapshot(daytona: Daytona, options?: CreateSnapshotOptions): Promise<string>;
|
|
22
|
+
private verifySnapshot;
|
|
22
23
|
snapshotName(): string | null;
|
|
23
24
|
private runtimeSkillBundle;
|
|
24
25
|
private knowledgeBaseBundle;
|
|
@@ -10,6 +10,12 @@ const materialize_runtime_skills_1 = require("../skills/materialize-runtime-skil
|
|
|
10
10
|
const runtime_skills_1 = require("../skills/runtime-skills");
|
|
11
11
|
const DAYTONA_WORKSPACE_BAKE_ROOT = '/tmp/n8n-workspace-bake';
|
|
12
12
|
const SNAPSHOT_WORKSPACE_LAYOUT_DIRS = ['src', 'chunks', 'node-types'];
|
|
13
|
+
const SNAPSHOT_BUILDING_STATES = new Set(['building', 'pending', 'pulling']);
|
|
14
|
+
const SNAPSHOT_VERIFY_POLL_MS = 5_000;
|
|
15
|
+
const DEFAULT_SNAPSHOT_VERIFY_TIMEOUT_S = 1_800;
|
|
16
|
+
async function sleep(ms) {
|
|
17
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
18
|
+
}
|
|
13
19
|
function isAlreadyExistsError(error) {
|
|
14
20
|
const { DaytonaError } = (0, sandbox_1.loadDaytona)();
|
|
15
21
|
if (!(error instanceof DaytonaError))
|
|
@@ -74,15 +80,41 @@ class SnapshotManager {
|
|
|
74
80
|
}
|
|
75
81
|
try {
|
|
76
82
|
await daytona.snapshot.create({ name, image: await this.ensureImage() }, options);
|
|
77
|
-
this.logger.info('Created versioned Daytona snapshot', { name });
|
|
78
|
-
return name;
|
|
83
|
+
this.logger.info('Created versioned Daytona snapshot; verifying it is usable', { name });
|
|
79
84
|
}
|
|
80
85
|
catch (error) {
|
|
81
86
|
if (isAlreadyExistsError(error)) {
|
|
82
|
-
this.logger.info('Versioned Daytona snapshot already exists', {
|
|
83
|
-
|
|
87
|
+
this.logger.info('Versioned Daytona snapshot already exists; verifying it is usable', {
|
|
88
|
+
name,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
await this.verifySnapshot(daytona, name, options?.timeout);
|
|
96
|
+
return name;
|
|
97
|
+
}
|
|
98
|
+
async verifySnapshot(daytona, name, timeoutS = DEFAULT_SNAPSHOT_VERIFY_TIMEOUT_S) {
|
|
99
|
+
const deadline = Date.now() + timeoutS * 1000;
|
|
100
|
+
for (;;) {
|
|
101
|
+
const snapshot = await daytona.snapshot.get(name);
|
|
102
|
+
if (snapshot.state === 'active') {
|
|
103
|
+
this.logger.info('Versioned Daytona snapshot is active', { name });
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (!SNAPSHOT_BUILDING_STATES.has(snapshot.state)) {
|
|
107
|
+
const reason = snapshot.errorReason ? `, reason: ${snapshot.errorReason}` : '';
|
|
108
|
+
throw new Error(`Versioned Daytona snapshot "${name}" exists but is unusable (state: ${snapshot.state}${reason})`);
|
|
109
|
+
}
|
|
110
|
+
if (Date.now() >= deadline) {
|
|
111
|
+
throw new Error(`Timed out waiting for existing Daytona snapshot "${name}" to become active (state: ${snapshot.state})`);
|
|
84
112
|
}
|
|
85
|
-
|
|
113
|
+
this.logger.info('Waiting for existing Daytona snapshot to finish building', {
|
|
114
|
+
name,
|
|
115
|
+
state: snapshot.state,
|
|
116
|
+
});
|
|
117
|
+
await sleep(SNAPSHOT_VERIFY_POLL_MS);
|
|
86
118
|
}
|
|
87
119
|
}
|
|
88
120
|
snapshotName() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-manager.js","sourceRoot":"","sources":["../../src/workspace/snapshot-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"snapshot-manager.js","sourceRoot":"","sources":["../../src/workspace/snapshot-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,11 @@ export interface WorkspaceFileTarget {
|
|
|
4
4
|
filesystem?: {
|
|
5
5
|
readFile?: (path: string, options?: {
|
|
6
6
|
encoding?: 'utf-8';
|
|
7
|
+
abortSignal?: AbortSignal;
|
|
7
8
|
}) => Promise<string | Buffer>;
|
|
8
9
|
writeFile: (path: string, content: string | Buffer, options?: {
|
|
9
10
|
recursive?: boolean;
|
|
11
|
+
abortSignal?: AbortSignal;
|
|
10
12
|
}) => Promise<void>;
|
|
11
13
|
};
|
|
12
14
|
sandbox?: SandboxWorkspace['sandbox'];
|
|
@@ -14,6 +16,8 @@ export interface WorkspaceFileTarget {
|
|
|
14
16
|
export interface WorkspaceFileOptions {
|
|
15
17
|
logger: Logger;
|
|
16
18
|
resourceLabel?: string;
|
|
19
|
+
retryBackoffBaseMs?: number;
|
|
20
|
+
abortSignal?: AbortSignal;
|
|
17
21
|
}
|
|
18
22
|
export declare function readWorkspaceFile(workspace: WorkspaceFileTarget, filePath: string, options?: WorkspaceFileOptions): Promise<string | null>;
|
|
19
23
|
export declare function writeWorkspaceFile(workspace: WorkspaceFileTarget, filePath: string, content: string, options?: WorkspaceFileOptions): Promise<void>;
|
|
@@ -13,11 +13,18 @@ function decodeWorkspaceFileContent(content) {
|
|
|
13
13
|
}
|
|
14
14
|
async function readWorkspaceFile(workspace, filePath, options) {
|
|
15
15
|
const filesystem = workspace.filesystem;
|
|
16
|
-
|
|
16
|
+
const readFile = filesystem?.readFile;
|
|
17
|
+
if (filesystem && readFile) {
|
|
17
18
|
try {
|
|
18
|
-
return decodeWorkspaceFileContent(await
|
|
19
|
+
return decodeWorkspaceFileContent(await (0, sandbox_fs_1.retryTransientSandboxIo)(async () => await readFile.call(filesystem, filePath, {
|
|
20
|
+
encoding: 'utf-8',
|
|
21
|
+
abortSignal: options?.abortSignal,
|
|
22
|
+
}), filePath, options));
|
|
19
23
|
}
|
|
20
24
|
catch (error) {
|
|
25
|
+
if ((0, sandbox_fs_1.isTransientSandboxIoError)(error)) {
|
|
26
|
+
throw new Error(`Failed to read ${resourceLabel(options).toLowerCase()} "${filePath}": ${(0, error_formatting_1.formatErrorForLog)(error)}`);
|
|
27
|
+
}
|
|
21
28
|
options?.logger.debug(`${resourceLabel(options)} filesystem read missed`, {
|
|
22
29
|
path: filePath,
|
|
23
30
|
error: (0, error_formatting_1.formatErrorForLog)(error),
|
|
@@ -28,9 +35,12 @@ async function readWorkspaceFile(workspace, filePath, options) {
|
|
|
28
35
|
if (!workspace.sandbox)
|
|
29
36
|
return null;
|
|
30
37
|
try {
|
|
31
|
-
return await (0, sandbox_fs_1.readFileViaSandbox)(workspace, filePath);
|
|
38
|
+
return await (0, sandbox_fs_1.readFileViaSandbox)(workspace, filePath, options);
|
|
32
39
|
}
|
|
33
40
|
catch (error) {
|
|
41
|
+
if ((0, sandbox_fs_1.isTransientSandboxIoError)(error)) {
|
|
42
|
+
throw new Error(`Failed to read ${resourceLabel(options).toLowerCase()} "${filePath}": ${(0, error_formatting_1.formatErrorForLog)(error)}`);
|
|
43
|
+
}
|
|
34
44
|
options?.logger.debug(`${resourceLabel(options)} command read missed`, {
|
|
35
45
|
path: filePath,
|
|
36
46
|
error: (0, error_formatting_1.formatErrorForLog)(error),
|
|
@@ -40,14 +50,18 @@ async function readWorkspaceFile(workspace, filePath, options) {
|
|
|
40
50
|
}
|
|
41
51
|
async function writeWorkspaceFile(workspace, filePath, content, options) {
|
|
42
52
|
const label = resourceLabel(options);
|
|
43
|
-
|
|
53
|
+
const filesystem = workspace.filesystem;
|
|
54
|
+
if (filesystem) {
|
|
44
55
|
try {
|
|
45
|
-
await
|
|
56
|
+
await (0, sandbox_fs_1.retryTransientSandboxIo)(async () => await filesystem.writeFile(filePath, content, {
|
|
57
|
+
recursive: true,
|
|
58
|
+
abortSignal: options?.abortSignal,
|
|
59
|
+
}), filePath, options);
|
|
46
60
|
return;
|
|
47
61
|
}
|
|
48
62
|
catch (error) {
|
|
49
63
|
try {
|
|
50
|
-
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, filePath, content);
|
|
64
|
+
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, filePath, content, options);
|
|
51
65
|
options?.logger.warn(`${label} filesystem write failed; used command fallback`, {
|
|
52
66
|
path: filePath,
|
|
53
67
|
error: (0, error_formatting_1.formatErrorForLog)(error),
|
|
@@ -60,7 +74,7 @@ async function writeWorkspaceFile(workspace, filePath, content, options) {
|
|
|
60
74
|
}
|
|
61
75
|
}
|
|
62
76
|
try {
|
|
63
|
-
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, filePath, content);
|
|
77
|
+
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, filePath, content, options);
|
|
64
78
|
}
|
|
65
79
|
catch (error) {
|
|
66
80
|
throw new Error(`Failed to write ${label.toLowerCase()} "${filePath}": ${(0, error_formatting_1.formatErrorForLog)(error)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-files.js","sourceRoot":"","sources":["../../src/workspace/workspace-files.ts"],"names":[],"mappings":";;;;;AAAA,0DAAwD;AAExD,
|
|
1
|
+
{"version":3,"file":"workspace-files.js","sourceRoot":"","sources":["../../src/workspace/workspace-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,9 @@ Use these guardrails for workflow builds with multiple external systems,
|
|
|
4
4
|
multiple requested effects, digests or reports, non-trivial branching, or Code
|
|
5
5
|
nodes. They are a runtime checklist, not extra user-facing output.
|
|
6
6
|
|
|
7
|
+
Do not add sticky notes unless the user explicitly asks for them. Prefer chat
|
|
8
|
+
explanations over canvas stickies.
|
|
9
|
+
|
|
7
10
|
## Preserve Source Data
|
|
8
11
|
|
|
9
12
|
Normalize trigger or source data before side effects. Nodes that create, update,
|