@n8n/instance-ai 1.3.5 → 1.5.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/credential-guardrails.prompt.d.ts +1 -0
- package/dist/agent/credential-guardrails.prompt.js +5 -0
- package/dist/agent/credential-guardrails.prompt.js.map +1 -0
- package/dist/agent/instance-agent.js +0 -1
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/shared-prompts.d.ts +4 -0
- package/dist/agent/shared-prompts.js +17 -0
- package/dist/agent/shared-prompts.js.map +1 -0
- package/dist/agent/sub-agent-debriefing.d.ts +2 -2
- package/dist/agent/sub-agent-factory.d.ts +1 -1
- package/dist/agent/sub-agent-factory.js +7 -7
- package/dist/agent/sub-agent-factory.js.map +1 -1
- package/dist/agent/system-prompt.js +56 -29
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/constants/max-steps.d.ts +1 -1
- package/dist/constants/max-steps.js +1 -1
- package/dist/constants/max-steps.js.map +1 -1
- package/dist/constants/model-settings.d.ts +3 -0
- package/dist/constants/model-settings.js +7 -0
- package/dist/constants/model-settings.js.map +1 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +6 -0
- package/dist/planned-tasks/planned-task-permissions.d.ts +2 -0
- package/dist/planned-tasks/planned-task-permissions.js +8 -2
- package/dist/planned-tasks/planned-task-permissions.js.map +1 -1
- package/dist/planned-tasks/planned-task-service.d.ts +14 -1
- package/dist/planned-tasks/planned-task-service.js +138 -2
- package/dist/planned-tasks/planned-task-service.js.map +1 -1
- package/dist/runtime/background-task-manager.d.ts +25 -1
- package/dist/runtime/background-task-manager.js +66 -2
- package/dist/runtime/background-task-manager.js.map +1 -1
- package/dist/runtime/builder-sandbox-session-registry.d.ts +45 -0
- package/dist/runtime/builder-sandbox-session-registry.js +159 -0
- package/dist/runtime/builder-sandbox-session-registry.js.map +1 -0
- package/dist/runtime/run-state-registry.d.ts +7 -4
- package/dist/runtime/run-state-registry.js +9 -0
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/storage/agent-tree-snapshot.d.ts +2 -0
- package/dist/storage/planned-task-storage.js +2 -1
- package/dist/storage/planned-task-storage.js.map +1 -1
- package/dist/storage/workflow-loop-storage.d.ts +292 -12
- package/dist/stream/consume-with-hitl.d.ts +1 -0
- package/dist/stream/consume-with-hitl.js +1 -0
- package/dist/stream/consume-with-hitl.js.map +1 -1
- package/dist/tools/credentials.tool.js +20 -3
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/data-tables.tool.js +60 -22
- package/dist/tools/data-tables.tool.js.map +1 -1
- package/dist/tools/executions.tool.js +4 -1
- package/dist/tools/executions.tool.js.map +1 -1
- package/dist/tools/index.d.ts +1 -2
- package/dist/tools/index.js +2 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/nodes/suggested-nodes-data.js +1 -1
- package/dist/tools/nodes/suggested-nodes-data.js.map +1 -1
- package/dist/tools/nodes.tool.js +25 -13
- package/dist/tools/nodes.tool.js.map +1 -1
- package/dist/tools/orchestration/add-plan-item.tool.js +3 -1
- package/dist/tools/orchestration/add-plan-item.tool.js.map +1 -1
- package/dist/tools/orchestration/blueprint-accumulator.d.ts +4 -1
- package/dist/tools/orchestration/blueprint-accumulator.js +28 -0
- package/dist/tools/orchestration/blueprint-accumulator.js.map +1 -1
- package/dist/tools/orchestration/blueprint.schema.d.ts +60 -15
- package/dist/tools/orchestration/blueprint.schema.js +15 -1
- package/dist/tools/orchestration/blueprint.schema.js.map +1 -1
- package/dist/tools/orchestration/browser-credential-setup.prompt.d.ts +13 -0
- package/dist/tools/orchestration/browser-credential-setup.prompt.js +140 -0
- package/dist/tools/orchestration/browser-credential-setup.prompt.js.map +1 -0
- package/dist/tools/orchestration/browser-credential-setup.tool.d.ts +1 -0
- package/dist/tools/orchestration/browser-credential-setup.tool.js +8 -139
- package/dist/tools/orchestration/browser-credential-setup.tool.js.map +1 -1
- package/dist/tools/orchestration/build-workflow-agent.prompt.js +137 -239
- package/dist/tools/orchestration/build-workflow-agent.prompt.js.map +1 -1
- package/dist/tools/orchestration/build-workflow-agent.tool.d.ts +51 -3
- package/dist/tools/orchestration/build-workflow-agent.tool.js +842 -269
- package/dist/tools/orchestration/build-workflow-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/builder-memory-compaction.d.ts +38 -0
- package/dist/tools/orchestration/builder-memory-compaction.js +146 -0
- package/dist/tools/orchestration/builder-memory-compaction.js.map +1 -0
- package/dist/tools/orchestration/complete-checkpoint.tool.d.ts +2 -0
- package/dist/tools/orchestration/complete-checkpoint.tool.js +76 -0
- package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -0
- package/dist/tools/orchestration/data-table-agent.prompt.d.ts +1 -1
- package/dist/tools/orchestration/data-table-agent.prompt.js +4 -6
- package/dist/tools/orchestration/data-table-agent.prompt.js.map +1 -1
- package/dist/tools/orchestration/data-table-agent.tool.js +34 -18
- package/dist/tools/orchestration/data-table-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/delegate.tool.js +33 -17
- package/dist/tools/orchestration/delegate.tool.js.map +1 -1
- package/dist/tools/orchestration/plan-agent-prompt.d.ts +1 -1
- package/dist/tools/orchestration/plan-agent-prompt.js +17 -17
- package/dist/tools/orchestration/plan-agent-prompt.js.map +1 -1
- package/dist/tools/orchestration/plan-with-agent.tool.d.ts +8 -0
- package/dist/tools/orchestration/plan-with-agent.tool.js +43 -12
- package/dist/tools/orchestration/plan-with-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/plan.tool.js +82 -2
- package/dist/tools/orchestration/plan.tool.js.map +1 -1
- package/dist/tools/orchestration/report-verification-verdict.tool.d.ts +40 -2
- package/dist/tools/orchestration/report-verification-verdict.tool.js +89 -7
- package/dist/tools/orchestration/report-verification-verdict.tool.js.map +1 -1
- package/dist/tools/orchestration/research-agent-prompt.d.ts +1 -1
- package/dist/tools/orchestration/research-agent-prompt.js +2 -4
- package/dist/tools/orchestration/research-agent-prompt.js.map +1 -1
- package/dist/tools/orchestration/research-with-agent.tool.js +33 -17
- package/dist/tools/orchestration/research-with-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +8 -2
- package/dist/tools/orchestration/verify-built-workflow.tool.js +476 -6
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/research.tool.js +2 -2
- package/dist/tools/research.tool.js.map +1 -1
- package/dist/tools/shared/ask-user.tool.js +2 -1
- package/dist/tools/shared/ask-user.tool.js.map +1 -1
- package/dist/tools/templates.tool.js +5 -90
- package/dist/tools/templates.tool.js.map +1 -1
- package/dist/tools/web-research/sanitize-web-content.d.ts +0 -1
- package/dist/tools/web-research/sanitize-web-content.js +0 -9
- package/dist/tools/web-research/sanitize-web-content.js.map +1 -1
- package/dist/tools/workflows/apply-workflow-credentials.tool.d.ts +2 -2
- package/dist/tools/workflows/build-workflow.tool.d.ts +8 -8
- package/dist/tools/workflows/build-workflow.tool.js +14 -2
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/materialize-node-type.tool.d.ts +8 -8
- package/dist/tools/workflows/resolve-credentials.js +6 -6
- package/dist/tools/workflows/resolve-credentials.js.map +1 -1
- package/dist/tools/workflows/setup-workflow.service.js +3 -2
- package/dist/tools/workflows/setup-workflow.service.js.map +1 -1
- package/dist/tools/workflows/submit-workflow-identity.d.ts +35 -0
- package/dist/tools/workflows/submit-workflow-identity.js +154 -0
- package/dist/tools/workflows/submit-workflow-identity.js.map +1 -0
- package/dist/tools/workflows/submit-workflow.tool.d.ts +82 -3
- package/dist/tools/workflows/submit-workflow.tool.js +114 -35
- package/dist/tools/workflows/submit-workflow.tool.js.map +1 -1
- package/dist/tracing/langsmith-tracing.d.ts +12 -0
- package/dist/tracing/langsmith-tracing.js +35 -3
- package/dist/tracing/langsmith-tracing.js.map +1 -1
- package/dist/tracing/trace-replay.d.ts +3 -0
- package/dist/tracing/trace-replay.js +65 -0
- package/dist/tracing/trace-replay.js.map +1 -1
- package/dist/types.d.ts +82 -12
- package/dist/utils/eval-agents.js +4 -2
- package/dist/utils/eval-agents.js.map +1 -1
- package/dist/workflow-builder/parse-validate.d.ts +5 -1
- package/dist/workflow-builder/parse-validate.js +4 -3
- package/dist/workflow-builder/parse-validate.js.map +1 -1
- package/dist/workflow-loop/guidance.js +15 -5
- package/dist/workflow-loop/guidance.js.map +1 -1
- package/dist/workflow-loop/index.d.ts +3 -2
- package/dist/workflow-loop/index.js +9 -1
- package/dist/workflow-loop/index.js.map +1 -1
- package/dist/workflow-loop/remediation.d.ts +13 -0
- package/dist/workflow-loop/remediation.js +36 -0
- package/dist/workflow-loop/remediation.js.map +1 -0
- package/dist/workflow-loop/runtime.js +7 -0
- package/dist/workflow-loop/runtime.js.map +1 -1
- package/dist/workflow-loop/workflow-loop-controller.d.ts +1 -1
- package/dist/workflow-loop/workflow-loop-controller.js +196 -29
- package/dist/workflow-loop/workflow-loop-controller.js.map +1 -1
- package/dist/workflow-loop/workflow-loop-state.d.ts +338 -8
- package/dist/workflow-loop/workflow-loop-state.js +44 -1
- package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
- package/dist/workflow-loop/workflow-task-service.d.ts +2 -1
- package/dist/workflow-loop/workflow-task-service.js +4 -0
- package/dist/workflow-loop/workflow-task-service.js.map +1 -1
- package/dist/workspace/builder-sandbox-factory.d.ts +6 -1
- package/dist/workspace/builder-sandbox-factory.js +115 -26
- package/dist/workspace/builder-sandbox-factory.js.map +1 -1
- package/dist/workspace/create-workspace.d.ts +2 -0
- package/dist/workspace/create-workspace.js.map +1 -1
- package/dist/workspace/pack-workspace-sdk.d.ts +9 -0
- package/dist/workspace/pack-workspace-sdk.js +80 -0
- package/dist/workspace/pack-workspace-sdk.js.map +1 -0
- package/dist/workspace/sandbox-fs.d.ts +1 -1
- package/dist/workspace/sandbox-fs.js +3 -1
- package/dist/workspace/sandbox-fs.js.map +1 -1
- package/dist/workspace/sandbox-setup.js +83 -19
- package/dist/workspace/sandbox-setup.js.map +1 -1
- package/dist/workspace/snapshot-manager.d.ts +14 -2
- package/dist/workspace/snapshot-manager.js +57 -1
- package/dist/workspace/snapshot-manager.js.map +1 -1
- package/package.json +15 -8
- package/dist/tools/templates/template-api.d.ts +0 -21
- package/dist/tools/templates/template-api.js +0 -104
- package/dist/tools/templates/template-api.js.map +0 -1
- package/dist/tools/templates/types.d.ts +0 -52
- package/dist/tools/templates/types.js +0 -37
- package/dist/tools/templates/types.js.map +0 -1
- package/dist/tools/utils/mermaid.utils.d.ts +0 -15
- package/dist/tools/utils/mermaid.utils.js +0 -622
- package/dist/tools/utils/mermaid.utils.js.map +0 -1
- package/dist/tools/utils/node-configuration.utils.d.ts +0 -6
- package/dist/tools/utils/node-configuration.utils.js +0 -77
- package/dist/tools/utils/node-configuration.utils.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { WorkflowTaskService } from '../types';
|
|
2
|
-
import type { VerificationResult, WorkflowBuildOutcome, WorkflowLoopAction } from './workflow-loop-state';
|
|
2
|
+
import type { VerificationResult, WorkflowBuildOutcome, WorkflowLoopAction, WorkflowLoopState } from './workflow-loop-state';
|
|
3
3
|
import type { WorkflowLoopStorage } from '../storage/workflow-loop-storage';
|
|
4
4
|
export declare class WorkflowTaskCoordinator implements WorkflowTaskService {
|
|
5
5
|
private readonly threadId;
|
|
@@ -9,5 +9,6 @@ export declare class WorkflowTaskCoordinator implements WorkflowTaskService {
|
|
|
9
9
|
reportBuildOutcome(outcome: WorkflowBuildOutcome): Promise<WorkflowLoopAction>;
|
|
10
10
|
reportVerificationVerdict(verdict: VerificationResult): Promise<WorkflowLoopAction>;
|
|
11
11
|
getBuildOutcome(workItemId: string): Promise<WorkflowBuildOutcome | undefined>;
|
|
12
|
+
getWorkflowLoopState(workItemId: string): Promise<WorkflowLoopState | undefined>;
|
|
12
13
|
updateBuildOutcome(workItemId: string, update: Partial<WorkflowBuildOutcome>): Promise<void>;
|
|
13
14
|
}
|
|
@@ -21,6 +21,10 @@ class WorkflowTaskCoordinator {
|
|
|
21
21
|
const item = await this.storage.getWorkItem(this.threadId, workItemId);
|
|
22
22
|
return item?.lastBuildOutcome ?? undefined;
|
|
23
23
|
}
|
|
24
|
+
async getWorkflowLoopState(workItemId) {
|
|
25
|
+
const item = await this.storage.getWorkItem(this.threadId, workItemId);
|
|
26
|
+
return item?.state ?? undefined;
|
|
27
|
+
}
|
|
24
28
|
async updateBuildOutcome(workItemId, update) {
|
|
25
29
|
const item = await this.storage.getWorkItem(this.threadId, workItemId);
|
|
26
30
|
if (!item?.lastBuildOutcome)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-task-service.js","sourceRoot":"","sources":["../../src/workflow-loop/workflow-task-service.ts"],"names":[],"mappings":";;;AACA,uCAAgD;
|
|
1
|
+
{"version":3,"file":"workflow-task-service.js","sourceRoot":"","sources":["../../src/workflow-loop/workflow-task-service.ts"],"names":[],"mappings":";;;AACA,uCAAgD;AAShD,MAAa,uBAAuB;IAIjB;IACA;IAJD,OAAO,CAAsB;IAE9C,YACkB,QAAgB,EAChB,OAA4B;QAD5B,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAAqB;QAE7C,IAAI,CAAC,OAAO,GAAG,IAAI,6BAAmB,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAA6B;QACrD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,OAA2B;QAC1D,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvE,OAAO,IAAI,EAAE,gBAAgB,IAAI,SAAS,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,UAAkB;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvE,OAAO,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,kBAAkB,CACvB,UAAkB,EAClB,MAAqC;QAErC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,EAAE,gBAAgB;YAAE,OAAO;QAEpC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzE,GAAG,IAAI,CAAC,gBAAgB;YACxB,GAAG,MAAM;SACT,CAAC,CAAC;IACJ,CAAC;CACD;AAxCD,0DAwCC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Workspace } from '@mastra/core/workspace';
|
|
2
|
+
import type { ErrorReporter, Logger } from '../logger';
|
|
2
3
|
import type { SandboxConfig } from './create-workspace';
|
|
3
4
|
import type { SnapshotManager } from './snapshot-manager';
|
|
4
5
|
import type { InstanceAiContext } from '../types';
|
|
@@ -9,9 +10,13 @@ export interface BuilderWorkspace {
|
|
|
9
10
|
export declare class BuilderSandboxFactory {
|
|
10
11
|
private readonly config;
|
|
11
12
|
private readonly imageManager?;
|
|
13
|
+
private readonly logger;
|
|
14
|
+
private readonly errorReporter?;
|
|
12
15
|
private daytona;
|
|
13
16
|
private n8nSandboxImageManager;
|
|
14
|
-
constructor(config: SandboxConfig, imageManager?: SnapshotManager | undefined);
|
|
17
|
+
constructor(config: SandboxConfig, imageManager?: SnapshotManager | undefined, logger?: Logger, errorReporter?: ErrorReporter | undefined);
|
|
18
|
+
private sdkTarballPromise;
|
|
19
|
+
private linkWorkspaceSdkIfEnabled;
|
|
15
20
|
create(builderId: string, context: InstanceAiContext): Promise<BuilderWorkspace>;
|
|
16
21
|
private getDaytona;
|
|
17
22
|
private getN8nSandboxImageManager;
|
|
@@ -8,12 +8,20 @@ const sdk_1 = require("@daytonaio/sdk");
|
|
|
8
8
|
const workspace_1 = require("@mastra/core/workspace");
|
|
9
9
|
const daytona_1 = require("@mastra/daytona");
|
|
10
10
|
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
11
|
+
const posix_1 = require("node:path/posix");
|
|
11
12
|
const daytona_filesystem_1 = require("./daytona-filesystem");
|
|
12
13
|
const n8n_sandbox_filesystem_1 = require("./n8n-sandbox-filesystem");
|
|
13
14
|
const n8n_sandbox_image_manager_1 = require("./n8n-sandbox-image-manager");
|
|
14
15
|
const n8n_sandbox_sandbox_1 = require("./n8n-sandbox-sandbox");
|
|
16
|
+
const pack_workspace_sdk_1 = require("./pack-workspace-sdk");
|
|
15
17
|
const sandbox_fs_1 = require("./sandbox-fs");
|
|
16
18
|
const sandbox_setup_1 = require("./sandbox-setup");
|
|
19
|
+
const NOOP_LOGGER = {
|
|
20
|
+
info: () => { },
|
|
21
|
+
warn: () => { },
|
|
22
|
+
error: () => { },
|
|
23
|
+
debug: () => { },
|
|
24
|
+
};
|
|
17
25
|
async function cleanupTrackedSandboxProcesses(workspace) {
|
|
18
26
|
const processManager = workspace.sandbox?.processes;
|
|
19
27
|
if (!processManager)
|
|
@@ -41,11 +49,45 @@ async function cleanupTrackedSandboxProcesses(workspace) {
|
|
|
41
49
|
class BuilderSandboxFactory {
|
|
42
50
|
config;
|
|
43
51
|
imageManager;
|
|
52
|
+
logger;
|
|
53
|
+
errorReporter;
|
|
44
54
|
daytona = null;
|
|
45
55
|
n8nSandboxImageManager = null;
|
|
46
|
-
constructor(config, imageManager) {
|
|
56
|
+
constructor(config, imageManager, logger = NOOP_LOGGER, errorReporter) {
|
|
47
57
|
this.config = config;
|
|
48
58
|
this.imageManager = imageManager;
|
|
59
|
+
this.logger = logger;
|
|
60
|
+
this.errorReporter = errorReporter;
|
|
61
|
+
}
|
|
62
|
+
sdkTarballPromise = null;
|
|
63
|
+
async linkWorkspaceSdkIfEnabled(workspace, root) {
|
|
64
|
+
this.sdkTarballPromise ??= (0, pack_workspace_sdk_1.packWorkspaceSdk)(this.logger);
|
|
65
|
+
const packed = await this.sdkTarballPromise;
|
|
66
|
+
if (!packed) {
|
|
67
|
+
if ((0, pack_workspace_sdk_1.isLinkWorkspaceSdkEnabled)()) {
|
|
68
|
+
throw new Error('N8N_INSTANCE_AI_SANDBOX_LINK_SDK is enabled, but the workspace SDK could not be packed. Run `pnpm build` in packages/@n8n/workflow-sdk or unset N8N_INSTANCE_AI_SANDBOX_LINK_SDK.');
|
|
69
|
+
}
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const remotePath = (0, posix_1.join)(root, packed.filename);
|
|
73
|
+
if (workspace.filesystem) {
|
|
74
|
+
await workspace.filesystem.writeFile(remotePath, packed.tarball);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, remotePath, packed.tarball);
|
|
78
|
+
}
|
|
79
|
+
const install = await (0, sandbox_fs_1.runInSandbox)(workspace, `npm install ${remotePath} --no-save --ignore-scripts --force`, root);
|
|
80
|
+
if (install.exitCode !== 0) {
|
|
81
|
+
this.logger.error('Failed to link workspace SDK into sandbox', {
|
|
82
|
+
exitCode: install.exitCode,
|
|
83
|
+
stderr: install.stderr,
|
|
84
|
+
});
|
|
85
|
+
throw new Error(`Failed to install workspace SDK tarball: ${install.stderr}`);
|
|
86
|
+
}
|
|
87
|
+
this.logger.info('Linked workspace SDK into sandbox', {
|
|
88
|
+
version: packed.version,
|
|
89
|
+
sdkPath: packed.sdkPath,
|
|
90
|
+
});
|
|
49
91
|
}
|
|
50
92
|
async create(builderId, context) {
|
|
51
93
|
if (this.config.provider === 'local') {
|
|
@@ -83,15 +125,51 @@ class BuilderSandboxFactory {
|
|
|
83
125
|
async createDaytona(builderId, context) {
|
|
84
126
|
const config = this.assertIsDaytona();
|
|
85
127
|
(0, strict_1.default)(this.imageManager, 'Daytona snapshot manager required');
|
|
86
|
-
const
|
|
128
|
+
const snapshotManager = this.imageManager;
|
|
129
|
+
const mode = config.getAuthToken ? 'proxy' : 'direct';
|
|
130
|
+
const createTimeoutSeconds = config.createTimeoutSeconds ?? 300;
|
|
87
131
|
const createSandboxFn = async () => {
|
|
88
132
|
const daytona = await this.getDaytona();
|
|
89
|
-
|
|
90
|
-
|
|
133
|
+
const snapshotName = await snapshotManager.ensureSnapshot(daytona, mode);
|
|
134
|
+
const baseParams = {
|
|
91
135
|
language: 'typescript',
|
|
92
136
|
ephemeral: true,
|
|
93
137
|
labels: { 'n8n-builder': builderId },
|
|
94
|
-
}
|
|
138
|
+
};
|
|
139
|
+
if (snapshotName) {
|
|
140
|
+
try {
|
|
141
|
+
return await daytona.create({ ...baseParams, snapshot: snapshotName }, { timeout: createTimeoutSeconds });
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
this.errorReporter?.error(error, {
|
|
145
|
+
tags: {
|
|
146
|
+
component: 'builder-sandbox-factory',
|
|
147
|
+
strategy: 'snapshot',
|
|
148
|
+
mode,
|
|
149
|
+
},
|
|
150
|
+
extra: { snapshotName, builderId },
|
|
151
|
+
});
|
|
152
|
+
this.logger.warn('Sandbox create from snapshot failed; falling back to image', {
|
|
153
|
+
snapshotName,
|
|
154
|
+
mode,
|
|
155
|
+
error: error instanceof Error ? error.message : String(error),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
return await daytona.create({ ...baseParams, image: snapshotManager.ensureImage() }, { timeout: createTimeoutSeconds });
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
this.errorReporter?.error(error, {
|
|
164
|
+
tags: {
|
|
165
|
+
component: 'builder-sandbox-factory',
|
|
166
|
+
strategy: 'image',
|
|
167
|
+
mode,
|
|
168
|
+
},
|
|
169
|
+
extra: { builderId },
|
|
170
|
+
});
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
95
173
|
};
|
|
96
174
|
const [sandbox, catalog] = await Promise.all([createSandboxFn(), this.getNodeCatalog(context)]);
|
|
97
175
|
const deleteSandbox = async () => {
|
|
@@ -123,6 +201,7 @@ class BuilderSandboxFactory {
|
|
|
123
201
|
else {
|
|
124
202
|
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, `${root}/node-types/index.txt`, catalog);
|
|
125
203
|
}
|
|
204
|
+
await this.linkWorkspaceSdkIfEnabled(workspace, root);
|
|
126
205
|
return {
|
|
127
206
|
workspace,
|
|
128
207
|
cleanup: async () => {
|
|
@@ -146,29 +225,39 @@ class BuilderSandboxFactory {
|
|
|
146
225
|
timeout: config.timeout ?? 300_000,
|
|
147
226
|
dockerfile,
|
|
148
227
|
});
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
228
|
+
const destroySandbox = async () => {
|
|
229
|
+
try {
|
|
230
|
+
await sandbox.destroy();
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
try {
|
|
236
|
+
const workspace = new workspace_1.Workspace({
|
|
237
|
+
sandbox,
|
|
238
|
+
filesystem: new n8n_sandbox_filesystem_1.N8nSandboxFilesystem(sandbox),
|
|
239
|
+
});
|
|
240
|
+
await workspace.init();
|
|
241
|
+
const root = await (0, sandbox_setup_1.getWorkspaceRoot)(workspace);
|
|
242
|
+
if (workspace.filesystem) {
|
|
243
|
+
await workspace.filesystem.writeFile(`${root}/node-types/index.txt`, catalog);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
await (0, sandbox_fs_1.writeFileViaSandbox)(workspace, `${root}/node-types/index.txt`, catalog);
|
|
247
|
+
}
|
|
248
|
+
await this.linkWorkspaceSdkIfEnabled(workspace, root);
|
|
249
|
+
return {
|
|
250
|
+
workspace,
|
|
251
|
+
cleanup: async () => {
|
|
252
|
+
await cleanupTrackedSandboxProcesses(workspace);
|
|
253
|
+
await destroySandbox();
|
|
254
|
+
},
|
|
255
|
+
};
|
|
157
256
|
}
|
|
158
|
-
|
|
159
|
-
await (
|
|
257
|
+
catch (error) {
|
|
258
|
+
await destroySandbox();
|
|
259
|
+
throw error;
|
|
160
260
|
}
|
|
161
|
-
return {
|
|
162
|
-
workspace,
|
|
163
|
-
cleanup: async () => {
|
|
164
|
-
await cleanupTrackedSandboxProcesses(workspace);
|
|
165
|
-
try {
|
|
166
|
-
await sandbox.destroy();
|
|
167
|
-
}
|
|
168
|
-
catch {
|
|
169
|
-
}
|
|
170
|
-
},
|
|
171
|
-
};
|
|
172
261
|
}
|
|
173
262
|
assertIsDaytona() {
|
|
174
263
|
(0, strict_1.default)(this.config.enabled && this.config.provider === 'daytona', 'Daytona sandbox config required');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-sandbox-factory.js","sourceRoot":"","sources":["../../src/workspace/builder-sandbox-factory.ts"],"names":[],"mappings":";;;;;;AASA,wCAAyC;AACzC,sDAAkF;AAClF,6CAAiD;AACjD,gEAAwC;
|
|
1
|
+
{"version":3,"file":"builder-sandbox-factory.js","sourceRoot":"","sources":["../../src/workspace/builder-sandbox-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,8 @@ interface DaytonaSandboxConfig extends SandboxConfigBase {
|
|
|
15
15
|
daytonaApiUrl?: string;
|
|
16
16
|
daytonaApiKey?: string;
|
|
17
17
|
image?: string;
|
|
18
|
+
n8nVersion?: string;
|
|
19
|
+
createTimeoutSeconds?: number;
|
|
18
20
|
getAuthToken?: () => Promise<string>;
|
|
19
21
|
}
|
|
20
22
|
interface LocalSandboxConfig extends SandboxConfigBase {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-workspace.js","sourceRoot":"","sources":["../../src/workspace/create-workspace.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"create-workspace.js","sourceRoot":"","sources":["../../src/workspace/create-workspace.ts"],"names":[],"mappings":";;AA8DA,sCAoCC;AAMD,0CAuBC;AA/HD,sDAAkF;AAClF,6CAAiD;AAEjD,6DAAyD;AACzD,qEAAgE;AAChE,+DAAiE;AAyD1D,KAAK,UAAU,aAAa,CAClC,MAAqB;IAErB,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAEtC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAEnC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QACxF,OAAO,IAAI,wBAAc,CAAC;YACzB,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,aAAa;YAC5B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;SAClC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACvC,OAAO,IAAI,8CAAwB,CAAC;YACnC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;SAClC,CAAC,CAAC;IACJ,CAAC;IAID,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACd,uHAAuH,CACvH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,wBAAY,CAAC;QACvB,gBAAgB,EAAE,aAAa;KAC/B,CAAC,CAAC;AACJ,CAAC;AAMD,SAAgB,eAAe,CAC9B,OAA6E;IAE7E,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,IAAI,OAAO,YAAY,wBAAY,EAAE,CAAC;QACrC,OAAO,IAAI,qBAAS,CAAC;YACpB,OAAO;YACP,UAAU,EAAE,IAAI,2BAAe,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;SAC5D,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,YAAY,8CAAwB,EAAE,CAAC;QACjD,OAAO,IAAI,qBAAS,CAAC;YACpB,OAAO;YACP,UAAU,EAAE,IAAI,6CAAoB,CAAC,OAAO,CAAC;SAC7C,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,qBAAS,CAAC;QACpB,OAAO;QACP,UAAU,EAAE,IAAI,sCAAiB,CAAC,OAAO,CAAC;KAC1C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Logger } from '../logger';
|
|
2
|
+
export interface WorkspaceSdkTarball {
|
|
3
|
+
tarball: Buffer;
|
|
4
|
+
version: string;
|
|
5
|
+
filename: string;
|
|
6
|
+
sdkPath: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function isLinkWorkspaceSdkEnabled(): boolean;
|
|
9
|
+
export declare function packWorkspaceSdk(logger: Logger, packageName?: string): Promise<WorkspaceSdkTarball | null>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isLinkWorkspaceSdkEnabled = isLinkWorkspaceSdkEnabled;
|
|
7
|
+
exports.packWorkspaceSdk = packWorkspaceSdk;
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const promises_1 = require("node:fs/promises");
|
|
10
|
+
const node_module_1 = require("node:module");
|
|
11
|
+
const node_os_1 = require("node:os");
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
const node_util_1 = require("node:util");
|
|
14
|
+
const hostRequire = (0, node_module_1.createRequire)(__filename);
|
|
15
|
+
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
16
|
+
const ENV_FLAG = 'N8N_INSTANCE_AI_SANDBOX_LINK_SDK';
|
|
17
|
+
function isLinkWorkspaceSdkEnabled() {
|
|
18
|
+
const v = process.env[ENV_FLAG];
|
|
19
|
+
return v === '1' || v === 'true';
|
|
20
|
+
}
|
|
21
|
+
async function packWorkspaceSdk(logger, packageName = '@n8n/workflow-sdk') {
|
|
22
|
+
if (!isLinkWorkspaceSdkEnabled())
|
|
23
|
+
return null;
|
|
24
|
+
const sdkPath = resolvePackagePath(packageName);
|
|
25
|
+
if (!sdkPath) {
|
|
26
|
+
logger.warn(`${ENV_FLAG} is set but ${packageName} could not be resolved on the host — skipping SDK link`);
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const distPath = node_path_1.default.join(sdkPath, 'dist');
|
|
30
|
+
try {
|
|
31
|
+
await (0, promises_1.stat)(distPath);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
logger.warn(`${ENV_FLAG} is set but ${packageName}/dist is missing — run \`pnpm build\` in ${sdkPath} first. Skipping SDK link.`);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const tmpDir = await (0, promises_1.mkdtemp)(node_path_1.default.join((0, node_os_1.tmpdir)(), 'n8n-sdk-pack-'));
|
|
38
|
+
try {
|
|
39
|
+
const { stdout } = await execFileAsync('pnpm', ['pack', '--pack-destination', tmpDir], {
|
|
40
|
+
cwd: sdkPath,
|
|
41
|
+
env: process.env,
|
|
42
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
43
|
+
});
|
|
44
|
+
const filename = parsePackFilename(stdout);
|
|
45
|
+
if (!filename) {
|
|
46
|
+
throw new Error(`pnpm pack produced no tarball — stdout:\n${stdout}`);
|
|
47
|
+
}
|
|
48
|
+
const tarballPath = node_path_1.default.join(tmpDir, filename);
|
|
49
|
+
const tarball = await (0, promises_1.readFile)(tarballPath);
|
|
50
|
+
const version = parseVersionFromFilename(filename);
|
|
51
|
+
logger.info('Packed workspace SDK for sandbox link', {
|
|
52
|
+
package: packageName,
|
|
53
|
+
version,
|
|
54
|
+
bytes: tarball.byteLength,
|
|
55
|
+
sdkPath,
|
|
56
|
+
});
|
|
57
|
+
return { tarball, version, filename, sdkPath };
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
await (0, promises_1.rm)(tmpDir, { recursive: true, force: true });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function resolvePackagePath(name) {
|
|
64
|
+
try {
|
|
65
|
+
const pkgJsonPath = hostRequire.resolve(`${name}/package.json`);
|
|
66
|
+
return node_path_1.default.dirname(pkgJsonPath);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function parsePackFilename(stdout) {
|
|
73
|
+
const match = stdout.match(/([^\s/\\]+\.tgz)/g);
|
|
74
|
+
return match ? match[match.length - 1] : null;
|
|
75
|
+
}
|
|
76
|
+
function parseVersionFromFilename(filename) {
|
|
77
|
+
const match = filename.match(/-(\d[^/]*)\.tgz$/);
|
|
78
|
+
return match ? match[1] : 'unknown';
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=pack-workspace-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-workspace-sdk.js","sourceRoot":"","sources":["../../src/workspace/pack-workspace-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ export declare function runInSandbox(workspace: Workspace, command: string, cwd?
|
|
|
4
4
|
stdout: string;
|
|
5
5
|
stderr: string;
|
|
6
6
|
}>;
|
|
7
|
-
export declare function writeFileViaSandbox(workspace: Workspace, filePath: string, content: string): Promise<void>;
|
|
7
|
+
export declare function writeFileViaSandbox(workspace: Workspace, filePath: string, content: string | Buffer): Promise<void>;
|
|
8
8
|
export declare function readFileViaSandbox(workspace: Workspace, filePath: string): Promise<string | null>;
|
|
9
9
|
export declare function escapeSingleQuotes(s: string): string;
|
|
@@ -24,7 +24,9 @@ async function writeFileViaSandbox(workspace, filePath, content) {
|
|
|
24
24
|
if (dir) {
|
|
25
25
|
await runInSandbox(workspace, `mkdir -p '${escapeSingleQuotes(dir)}'`);
|
|
26
26
|
}
|
|
27
|
-
const b64 =
|
|
27
|
+
const b64 = typeof content === 'string'
|
|
28
|
+
? Buffer.from(content, 'utf-8').toString('base64')
|
|
29
|
+
: content.toString('base64');
|
|
28
30
|
const cmd = `echo '${b64}' | base64 -d > '${escapeSingleQuotes(filePath)}'`;
|
|
29
31
|
const result = await runInSandbox(workspace, cmd);
|
|
30
32
|
if (result.exitCode !== 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-fs.js","sourceRoot":"","sources":["../../src/workspace/sandbox-fs.ts"],"names":[],"mappings":";;AAkBA,oCAoBC;AAQD,
|
|
1
|
+
{"version":3,"file":"sandbox-fs.js","sourceRoot":"","sources":["../../src/workspace/sandbox-fs.ts"],"names":[],"mappings":";;AAkBA,oCAoBC;AAQD,kDAqBC;AAMD,gDAOC;AAMD,gDAEC;AAtEM,KAAK,UAAU,YAAY,CACjC,SAAoB,EACpB,OAAe,EACf,GAAY;IAEZ,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAE1D,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACpF,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;AAC/E,CAAC;AAQM,KAAK,UAAU,mBAAmB,CACxC,SAAoB,EACpB,QAAgB,EAChB,OAAwB;IAGxB,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,GAAG,EAAE,CAAC;QACT,MAAM,YAAY,CAAC,SAAS,EAAE,aAAa,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxE,CAAC;IAGD,MAAM,GAAG,GACR,OAAO,OAAO,KAAK,QAAQ;QAC1B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAClD,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,SAAS,GAAG,oBAAoB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;AACF,CAAC;AAMM,KAAK,UAAU,kBAAkB,CACvC,SAAoB,EACpB,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,QAAQ,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClG,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,MAAM,CAAC,MAAM,CAAC;AACtB,CAAC;AAMD,SAAgB,kBAAkB,CAAC,CAAS;IAC3C,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -4,21 +4,63 @@ exports.TSCONFIG_JSON = exports.BUILD_MJS = exports.PACKAGE_JSON = exports.N8N_S
|
|
|
4
4
|
exports.formatNodeCatalogLine = formatNodeCatalogLine;
|
|
5
5
|
exports.getWorkspaceRoot = getWorkspaceRoot;
|
|
6
6
|
exports.setupSandboxWorkspace = setupSandboxWorkspace;
|
|
7
|
+
const node_module_1 = require("node:module");
|
|
8
|
+
const pack_workspace_sdk_1 = require("./pack-workspace-sdk");
|
|
7
9
|
const sandbox_fs_1 = require("./sandbox-fs");
|
|
10
|
+
const hostRequire = (0, node_module_1.createRequire)(__filename);
|
|
8
11
|
exports.WORKSPACE_DIR = 'workspace';
|
|
9
12
|
exports.N8N_SANDBOX_HOME = '/home/user';
|
|
10
13
|
exports.N8N_SANDBOX_WORKSPACE_ROOT = `${exports.N8N_SANDBOX_HOME}/${exports.WORKSPACE_DIR}`;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
function resolveHostDepVersion(name) {
|
|
15
|
+
try {
|
|
16
|
+
const pkg = hostRequire(`${name}/package.json`);
|
|
17
|
+
return pkg.version ?? '*';
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return '*';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const SANDBOX_SDK_VERSION = resolveSandboxSdkVersion();
|
|
24
|
+
function resolveSandboxSdkVersion() {
|
|
25
|
+
const linkFlag = process.env.N8N_INSTANCE_AI_SANDBOX_LINK_SDK;
|
|
26
|
+
if (linkFlag === '1' || linkFlag === 'true')
|
|
27
|
+
return 'latest';
|
|
28
|
+
return resolveHostDepVersion('@n8n/workflow-sdk');
|
|
29
|
+
}
|
|
30
|
+
const SANDBOX_TSX_VERSION = resolveHostDepVersion('tsx');
|
|
31
|
+
const SANDBOX_TYPES_NODE_VERSION = '24.10.1';
|
|
32
|
+
function buildPackageJson(sdkSpecifier) {
|
|
33
|
+
const dependencies = {
|
|
34
|
+
tsx: SANDBOX_TSX_VERSION,
|
|
35
|
+
};
|
|
36
|
+
if (sdkSpecifier) {
|
|
37
|
+
dependencies['@n8n/workflow-sdk'] = sdkSpecifier;
|
|
38
|
+
}
|
|
39
|
+
return JSON.stringify({
|
|
40
|
+
name: 'sandbox-workspace',
|
|
41
|
+
private: true,
|
|
42
|
+
dependencies,
|
|
43
|
+
devDependencies: {
|
|
44
|
+
'@types/node': SANDBOX_TYPES_NODE_VERSION,
|
|
45
|
+
},
|
|
46
|
+
}, null, 2);
|
|
47
|
+
}
|
|
48
|
+
exports.PACKAGE_JSON = buildPackageJson((0, pack_workspace_sdk_1.isLinkWorkspaceSdkEnabled)() ? null : SANDBOX_SDK_VERSION);
|
|
49
|
+
function resolveHostDepPath(name) {
|
|
50
|
+
try {
|
|
51
|
+
const pkgPath = hostRequire.resolve(`${name}/package.json`);
|
|
52
|
+
return pkgPath.slice(0, pkgPath.length - '/package.json'.length);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function buildLocalProviderPackageJson() {
|
|
59
|
+
const sdkPath = resolveHostDepPath('@n8n/workflow-sdk');
|
|
60
|
+
if (!sdkPath)
|
|
61
|
+
return exports.PACKAGE_JSON;
|
|
62
|
+
return buildPackageJson(`file:${sdkPath}`);
|
|
63
|
+
}
|
|
22
64
|
exports.BUILD_MJS = `const filePath = process.argv[2] || './src/workflow.ts';
|
|
23
65
|
try {
|
|
24
66
|
const mod = await import(filePath);
|
|
@@ -85,11 +127,38 @@ function buildBatchWriteScript(root, files) {
|
|
|
85
127
|
}
|
|
86
128
|
return lines.join('\n');
|
|
87
129
|
}
|
|
130
|
+
async function writeWorkspaceFiles(workspace, root, files) {
|
|
131
|
+
const filesystem = workspace.filesystem;
|
|
132
|
+
if (filesystem) {
|
|
133
|
+
await Promise.all([...files].map(async ([path, content]) => {
|
|
134
|
+
await filesystem.writeFile(`${root}/${path}`, content, { recursive: true });
|
|
135
|
+
}));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const script = buildBatchWriteScript(root, files);
|
|
139
|
+
const scriptB64 = Buffer.from(script, 'utf-8').toString('base64');
|
|
140
|
+
const result = await (0, sandbox_fs_1.runInSandbox)(workspace, `echo '${scriptB64}' | base64 -d | bash`);
|
|
141
|
+
if (result.exitCode !== 0) {
|
|
142
|
+
throw new Error(`Sandbox setup failed: ${result.stderr}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
88
145
|
const workspaceRootCache = new WeakMap();
|
|
146
|
+
function getLocalFilesystemRoot(workspace) {
|
|
147
|
+
const filesystem = workspace.filesystem;
|
|
148
|
+
if (!filesystem || filesystem.provider !== 'local')
|
|
149
|
+
return null;
|
|
150
|
+
const basePath = Reflect.get(filesystem, 'basePath');
|
|
151
|
+
return typeof basePath === 'string' && basePath.length > 0 ? basePath : null;
|
|
152
|
+
}
|
|
89
153
|
async function getWorkspaceRoot(workspace) {
|
|
90
154
|
const cached = workspaceRootCache.get(workspace);
|
|
91
155
|
if (cached)
|
|
92
156
|
return cached;
|
|
157
|
+
const localRoot = getLocalFilesystemRoot(workspace);
|
|
158
|
+
if (localRoot) {
|
|
159
|
+
workspaceRootCache.set(workspace, localRoot);
|
|
160
|
+
return localRoot;
|
|
161
|
+
}
|
|
93
162
|
const result = await (0, sandbox_fs_1.runInSandbox)(workspace, 'echo $HOME');
|
|
94
163
|
const home = result.stdout.trim() || '/home/daytona';
|
|
95
164
|
const root = `${home}/${exports.WORKSPACE_DIR}`;
|
|
@@ -103,7 +172,7 @@ async function setupSandboxWorkspace(workspace, context) {
|
|
|
103
172
|
if (marker !== null)
|
|
104
173
|
return false;
|
|
105
174
|
const files = new Map();
|
|
106
|
-
files.set('package.json',
|
|
175
|
+
files.set('package.json', buildLocalProviderPackageJson());
|
|
107
176
|
files.set('tsconfig.json', exports.TSCONFIG_JSON);
|
|
108
177
|
files.set('build.mjs', exports.BUILD_MJS);
|
|
109
178
|
const nodeTypes = await context.nodeService.listSearchable();
|
|
@@ -123,17 +192,12 @@ async function setupSandboxWorkspace(workspace, context) {
|
|
|
123
192
|
}
|
|
124
193
|
catch {
|
|
125
194
|
}
|
|
126
|
-
|
|
127
|
-
const script = buildBatchWriteScript(root, files);
|
|
128
|
-
const scriptB64 = Buffer.from(script, 'utf-8').toString('base64');
|
|
129
|
-
const result = await (0, sandbox_fs_1.runInSandbox)(workspace, `echo '${scriptB64}' | base64 -d | bash`);
|
|
130
|
-
if (result.exitCode !== 0) {
|
|
131
|
-
throw new Error(`Sandbox setup failed: ${result.stderr}`);
|
|
132
|
-
}
|
|
195
|
+
await writeWorkspaceFiles(workspace, root, files);
|
|
133
196
|
const npmResult = await (0, sandbox_fs_1.runInSandbox)(workspace, 'npm install --ignore-scripts', root);
|
|
134
197
|
if (npmResult.exitCode !== 0) {
|
|
135
198
|
throw new Error(`Sandbox npm install failed: ${npmResult.stderr}`);
|
|
136
199
|
}
|
|
200
|
+
await writeWorkspaceFiles(workspace, root, new Map([['.sandbox-initialized', new Date().toISOString()]]));
|
|
137
201
|
return true;
|
|
138
202
|
}
|
|
139
203
|
//# sourceMappingURL=sandbox-setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-setup.js","sourceRoot":"","sources":["../../src/workspace/sandbox-setup.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sandbox-setup.js","sourceRoot":"","sources":["../../src/workspace/sandbox-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
|
+
import type { Daytona } from '@daytonaio/sdk';
|
|
1
2
|
import { Image } from '@daytonaio/sdk';
|
|
2
|
-
import type { Logger } from '../logger';
|
|
3
|
+
import type { ErrorReporter, Logger } from '../logger';
|
|
4
|
+
export type SnapshotMode = 'direct' | 'proxy';
|
|
5
|
+
export interface CreateSnapshotOptions {
|
|
6
|
+
timeout?: number;
|
|
7
|
+
onLogs?: (chunk: string) => void;
|
|
8
|
+
}
|
|
3
9
|
export declare class SnapshotManager {
|
|
4
10
|
private readonly baseImage;
|
|
5
11
|
private readonly logger;
|
|
12
|
+
private readonly n8nVersion;
|
|
13
|
+
private readonly errorReporter?;
|
|
6
14
|
private cachedImage;
|
|
7
|
-
|
|
15
|
+
private snapshotPromise;
|
|
16
|
+
constructor(baseImage: string | undefined, logger: Logger, n8nVersion: string | undefined, errorReporter?: ErrorReporter | undefined);
|
|
8
17
|
ensureImage(): Image;
|
|
18
|
+
createSnapshot(daytona: Daytona, options?: CreateSnapshotOptions): Promise<string>;
|
|
19
|
+
ensureSnapshot(daytona: Daytona, mode: SnapshotMode): Promise<string | null>;
|
|
20
|
+
private snapshotName;
|
|
9
21
|
invalidate(): void;
|
|
10
22
|
}
|