@namzu/sdk 31.1.0 → 33.0.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/CHANGELOG.md +188 -0
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +4 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +4 -0
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/runAgent.d.ts +4 -0
- package/dist/agents/runAgent.d.ts.map +1 -1
- package/dist/agents/runAgent.js +4 -0
- package/dist/agents/runAgent.js.map +1 -1
- package/dist/authorization/gate.d.ts +1 -1
- package/dist/authorization/gate.js +1 -1
- package/dist/connector/index.d.ts +1 -1
- package/dist/connector/index.d.ts.map +1 -1
- package/dist/connector/index.js +1 -1
- package/dist/connector/index.js.map +1 -1
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +71 -16
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +3 -2
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/connector/mcp/http-redirect.d.ts +17 -0
- package/dist/connector/mcp/http-redirect.d.ts.map +1 -0
- package/dist/connector/mcp/http-redirect.js +31 -0
- package/dist/connector/mcp/http-redirect.js.map +1 -0
- package/dist/connector/mcp/http-sse.d.ts.map +1 -1
- package/dist/connector/mcp/http-sse.js +5 -0
- package/dist/connector/mcp/http-sse.js.map +1 -1
- package/dist/connector/mcp/image-admission.d.ts +16 -0
- package/dist/connector/mcp/image-admission.d.ts.map +1 -0
- package/dist/connector/mcp/image-admission.js +288 -0
- package/dist/connector/mcp/image-admission.js.map +1 -0
- package/dist/connector/mcp/stdio.d.ts +13 -0
- package/dist/connector/mcp/stdio.d.ts.map +1 -1
- package/dist/connector/mcp/stdio.js +66 -23
- package/dist/connector/mcp/stdio.js.map +1 -1
- package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
- package/dist/connector/mcp/streamable-http.js +3 -0
- package/dist/connector/mcp/streamable-http.js.map +1 -1
- package/dist/constants/tools/index.js +1 -1
- package/dist/constants/tools/index.js.map +1 -1
- package/dist/directory/derive-supervisor.d.ts.map +1 -1
- package/dist/directory/derive-supervisor.js +5 -0
- package/dist/directory/derive-supervisor.js.map +1 -1
- package/dist/directory/derive.d.ts.map +1 -1
- package/dist/directory/derive.js +5 -0
- package/dist/directory/derive.js.map +1 -1
- package/dist/directory/load.d.ts.map +1 -1
- package/dist/directory/load.js +1 -0
- package/dist/directory/load.js.map +1 -1
- package/dist/directory/types.d.ts +2 -0
- package/dist/directory/types.d.ts.map +1 -1
- package/dist/execution/base.d.ts +13 -0
- package/dist/execution/base.d.ts.map +1 -1
- package/dist/execution/base.js +103 -8
- package/dist/execution/base.js.map +1 -1
- package/dist/execution/code-runtime/types.d.ts +11 -1
- package/dist/execution/code-runtime/types.d.ts.map +1 -1
- package/dist/execution/code-runtime/types.js.map +1 -1
- package/dist/execution/code-runtime/worker.d.ts.map +1 -1
- package/dist/execution/code-runtime/worker.js +67 -9
- package/dist/execution/code-runtime/worker.js.map +1 -1
- package/dist/execution/errors.d.ts +12 -0
- package/dist/execution/errors.d.ts.map +1 -0
- package/dist/execution/errors.js +21 -0
- package/dist/execution/errors.js.map +1 -0
- package/dist/execution/factory.d.ts.map +1 -1
- package/dist/execution/factory.js +1 -0
- package/dist/execution/factory.js.map +1 -1
- package/dist/execution/hybrid.d.ts +5 -0
- package/dist/execution/hybrid.d.ts.map +1 -1
- package/dist/execution/hybrid.js +36 -16
- package/dist/execution/hybrid.js.map +1 -1
- package/dist/execution/index.d.ts +1 -0
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +1 -0
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/local.d.ts +13 -0
- package/dist/execution/local.d.ts.map +1 -1
- package/dist/execution/local.js +145 -19
- package/dist/execution/local.js.map +1 -1
- package/dist/execution/output.d.ts +27 -0
- package/dist/execution/output.d.ts.map +1 -0
- package/dist/execution/output.js +105 -0
- package/dist/execution/output.js.map +1 -0
- package/dist/execution/remote.d.ts +26 -2
- package/dist/execution/remote.d.ts.map +1 -1
- package/dist/execution/remote.js +86 -15
- package/dist/execution/remote.js.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +1 -0
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/lifecycle.js +9 -3
- package/dist/plugin/lifecycle.js.map +1 -1
- package/dist/process/kill-tree.d.ts +11 -13
- package/dist/process/kill-tree.d.ts.map +1 -1
- package/dist/process/kill-tree.js +11 -13
- package/dist/process/kill-tree.js.map +1 -1
- package/dist/provider/errors.d.ts +1 -0
- package/dist/provider/errors.d.ts.map +1 -1
- package/dist/provider/errors.js +39 -1
- package/dist/provider/errors.js.map +1 -1
- package/dist/provider/fallback.d.ts.map +1 -1
- package/dist/provider/fallback.js +31 -0
- package/dist/provider/fallback.js.map +1 -1
- package/dist/provider/idle-timeout.d.ts.map +1 -1
- package/dist/provider/idle-timeout.js +5 -0
- package/dist/provider/idle-timeout.js.map +1 -1
- package/dist/provider/retry.d.ts.map +1 -1
- package/dist/provider/retry.js +5 -0
- package/dist/provider/retry.js.map +1 -1
- package/dist/public-runtime.d.ts +7 -5
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +9 -4
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-types.d.ts +2 -1
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/tool/execute.d.ts +7 -1
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +201 -54
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/run/command-gate.d.ts.map +1 -1
- package/dist/run/command-gate.js +11 -0
- package/dist/run/command-gate.js.map +1 -1
- package/dist/run/reporter.d.ts.map +1 -1
- package/dist/run/reporter.js +6 -1
- package/dist/run/reporter.js.map +1 -1
- package/dist/run/workspace-fingerprint.d.ts +4 -4
- package/dist/run/workspace-fingerprint.d.ts.map +1 -1
- package/dist/run/workspace-fingerprint.js +6 -4
- package/dist/run/workspace-fingerprint.js.map +1 -1
- package/dist/runtime/bidi/index.d.ts +1 -1
- package/dist/runtime/bidi/index.d.ts.map +1 -1
- package/dist/runtime/bidi/index.js +1 -1
- package/dist/runtime/bidi/index.js.map +1 -1
- package/dist/runtime/bidi/session.d.ts +19 -0
- package/dist/runtime/bidi/session.d.ts.map +1 -1
- package/dist/runtime/bidi/session.js +150 -26
- package/dist/runtime/bidi/session.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +43 -1
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +824 -174
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/index.d.ts +5 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +47 -4
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts +1 -0
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +34 -14
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/advisory.js +2 -2
- package/dist/runtime/query/iteration/phases/advisory.js.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +84 -22
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/provider-rejected-image.d.ts +13 -0
- package/dist/runtime/query/iteration/provider-rejected-image.d.ts.map +1 -0
- package/dist/runtime/query/iteration/provider-rejected-image.js +91 -0
- package/dist/runtime/query/iteration/provider-rejected-image.js.map +1 -0
- package/dist/runtime/query/iteration/stream-turn.d.ts +4 -1
- package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.js +7 -3
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/request-rich-content.d.ts +13 -0
- package/dist/runtime/query/request-rich-content.d.ts.map +1 -1
- package/dist/runtime/query/request-rich-content.js +173 -17
- package/dist/runtime/query/request-rich-content.js.map +1 -1
- package/dist/runtime/query/result.d.ts.map +1 -1
- package/dist/runtime/query/result.js +1 -0
- package/dist/runtime/query/result.js.map +1 -1
- package/dist/runtime/query/resume-pending.d.ts +5 -1
- package/dist/runtime/query/resume-pending.d.ts.map +1 -1
- package/dist/runtime/query/resume-pending.js +66 -1
- package/dist/runtime/query/resume-pending.js.map +1 -1
- package/dist/runtime/query/tool-output-budget.d.ts.map +1 -1
- package/dist/runtime/query/tool-output-budget.js +45 -16
- package/dist/runtime/query/tool-output-budget.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +6 -0
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +4 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/sandbox/provider/local.d.ts.map +1 -1
- package/dist/sandbox/provider/local.js +193 -41
- package/dist/sandbox/provider/local.js.map +1 -1
- package/dist/scheduler/delegating.d.ts +2 -1
- package/dist/scheduler/delegating.d.ts.map +1 -1
- package/dist/scheduler/delegating.js +6 -5
- package/dist/scheduler/delegating.js.map +1 -1
- package/dist/scheduler/local.d.ts +2 -1
- package/dist/scheduler/local.d.ts.map +1 -1
- package/dist/scheduler/local.js +2 -2
- package/dist/scheduler/local.js.map +1 -1
- package/dist/session/workspace/driver.d.ts +12 -4
- package/dist/session/workspace/driver.d.ts.map +1 -1
- package/dist/session/workspace/git-worktree.d.ts +17 -3
- package/dist/session/workspace/git-worktree.d.ts.map +1 -1
- package/dist/session/workspace/git-worktree.js +153 -34
- package/dist/session/workspace/git-worktree.js.map +1 -1
- package/dist/skills/registry.d.ts +15 -0
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +33 -0
- package/dist/skills/registry.js.map +1 -1
- package/dist/store/attachment/index.d.ts +24 -2
- package/dist/store/attachment/index.d.ts.map +1 -1
- package/dist/store/attachment/index.js +52 -5
- package/dist/store/attachment/index.js.map +1 -1
- package/dist/tools/builtins/computer-use.d.ts.map +1 -1
- package/dist/tools/builtins/computer-use.js +39 -2
- package/dist/tools/builtins/computer-use.js.map +1 -1
- package/dist/tools/builtins/lsp.d.ts +1 -1
- package/dist/tools/builtins/run-code.d.ts.map +1 -1
- package/dist/tools/builtins/run-code.js +24 -16
- package/dist/tools/builtins/run-code.js.map +1 -1
- package/dist/tools/builtins/skill.d.ts +2 -1
- package/dist/tools/builtins/skill.d.ts.map +1 -1
- package/dist/tools/builtins/skill.js +250 -6
- package/dist/tools/builtins/skill.js.map +1 -1
- package/dist/tools/coordinator/agent.d.ts.map +1 -1
- package/dist/tools/coordinator/agent.js +100 -30
- package/dist/tools/coordinator/agent.js.map +1 -1
- package/dist/types/agent/base.d.ts +4 -0
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/factory.d.ts +1 -0
- package/dist/types/agent/factory.d.ts.map +1 -1
- package/dist/types/agent/manager.d.ts +1 -1
- package/dist/types/agent/manager.d.ts.map +1 -1
- package/dist/types/agent/scheduler.d.ts +10 -1
- package/dist/types/agent/scheduler.d.ts.map +1 -1
- package/dist/types/authorization/index.d.ts +12 -12
- package/dist/types/bidi/index.d.ts +19 -2
- package/dist/types/bidi/index.d.ts.map +1 -1
- package/dist/types/computer-use/index.d.ts +18 -0
- package/dist/types/computer-use/index.d.ts.map +1 -1
- package/dist/types/connector/execution-context.d.ts +3 -1
- package/dist/types/connector/execution-context.d.ts.map +1 -1
- package/dist/types/execution/index.d.ts +43 -1
- package/dist/types/execution/index.d.ts.map +1 -1
- package/dist/types/hitl/index.d.ts +11 -0
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/message/index.d.ts +31 -1
- package/dist/types/message/index.d.ts.map +1 -1
- package/dist/types/message/index.js +43 -0
- package/dist/types/message/index.js.map +1 -1
- package/dist/types/plugin/index.d.ts +14 -1
- package/dist/types/plugin/index.d.ts.map +1 -1
- package/dist/types/plugin/index.js +1 -0
- package/dist/types/plugin/index.js.map +1 -1
- package/dist/types/provider/error.d.ts +4 -1
- package/dist/types/provider/error.d.ts.map +1 -1
- package/dist/types/provider/interface.d.ts +14 -0
- package/dist/types/provider/interface.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +10 -2
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/sandbox/index.d.ts +15 -10
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/tool/index.d.ts +129 -12
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/types/workspace/ref.d.ts +5 -0
- package/dist/types/workspace/ref.d.ts.map +1 -1
- package/dist/utils/abort.d.ts +8 -0
- package/dist/utils/abort.d.ts.map +1 -1
- package/dist/utils/abort.js +16 -0
- package/dist/utils/abort.js.map +1 -1
- package/package.json +4 -4
- package/src/agents/ReactiveAgent.ts +4 -0
- package/src/agents/SupervisorAgent.ts +4 -0
- package/src/agents/runAgent.ts +8 -0
- package/src/authorization/gate.ts +1 -1
- package/src/connector/index.ts +2 -0
- package/src/connector/mcp/adapter.ts +82 -21
- package/src/connector/mcp/client.ts +2 -1
- package/src/connector/mcp/http-redirect.ts +32 -0
- package/src/connector/mcp/http-sse.ts +5 -0
- package/src/connector/mcp/image-admission.ts +272 -0
- package/src/connector/mcp/stdio.ts +63 -21
- package/src/connector/mcp/streamable-http.ts +3 -0
- package/src/constants/tools/index.ts +1 -1
- package/src/directory/derive-supervisor.ts +5 -0
- package/src/directory/derive.ts +5 -0
- package/src/directory/load.ts +1 -0
- package/src/directory/types.ts +2 -0
- package/src/execution/base.ts +124 -7
- package/src/execution/code-runtime/types.ts +15 -1
- package/src/execution/code-runtime/worker.ts +72 -9
- package/src/execution/errors.ts +24 -0
- package/src/execution/factory.ts +1 -0
- package/src/execution/hybrid.ts +47 -16
- package/src/execution/index.ts +1 -0
- package/src/execution/local.ts +164 -19
- package/src/execution/output.ts +104 -0
- package/src/execution/remote.ts +122 -17
- package/src/manager/agent/lifecycle.ts +1 -0
- package/src/plugin/lifecycle.ts +9 -3
- package/src/process/kill-tree.ts +11 -13
- package/src/provider/errors.ts +40 -1
- package/src/provider/fallback.ts +39 -0
- package/src/provider/idle-timeout.ts +8 -0
- package/src/provider/retry.ts +8 -0
- package/src/public-runtime.ts +23 -2
- package/src/public-types.ts +11 -0
- package/src/registry/tool/execute.ts +230 -64
- package/src/run/command-gate.ts +12 -0
- package/src/run/reporter.ts +7 -1
- package/src/run/workspace-fingerprint.ts +5 -4
- package/src/runtime/bidi/index.ts +1 -1
- package/src/runtime/bidi/session.ts +177 -28
- package/src/runtime/query/executor.ts +987 -172
- package/src/runtime/query/index.ts +59 -6
- package/src/runtime/query/iteration/index.ts +69 -29
- package/src/runtime/query/iteration/phases/advisory.ts +2 -2
- package/src/runtime/query/iteration/phases/tool-review.ts +87 -23
- package/src/runtime/query/iteration/provider-rejected-image.ts +106 -0
- package/src/runtime/query/iteration/stream-turn.ts +12 -2
- package/src/runtime/query/request-rich-content.ts +213 -15
- package/src/runtime/query/result.ts +1 -0
- package/src/runtime/query/resume-pending.ts +83 -1
- package/src/runtime/query/tool-output-budget.ts +52 -17
- package/src/runtime/query/tooling.ts +10 -0
- package/src/sandbox/provider/local.ts +213 -45
- package/src/scheduler/delegating.ts +6 -5
- package/src/scheduler/local.ts +3 -2
- package/src/session/workspace/driver.ts +12 -4
- package/src/session/workspace/git-worktree.ts +173 -34
- package/src/skills/registry.ts +47 -0
- package/src/store/attachment/index.ts +100 -15
- package/src/tools/builtins/computer-use.ts +45 -2
- package/src/tools/builtins/run-code.ts +24 -16
- package/src/tools/builtins/skill.ts +325 -7
- package/src/tools/coordinator/agent.ts +108 -33
- package/src/types/agent/base.ts +4 -0
- package/src/types/agent/factory.ts +1 -0
- package/src/types/agent/manager.ts +1 -1
- package/src/types/agent/scheduler.ts +10 -1
- package/src/types/bidi/index.ts +19 -2
- package/src/types/computer-use/index.ts +19 -0
- package/src/types/connector/execution-context.ts +3 -0
- package/src/types/execution/index.ts +46 -1
- package/src/types/hitl/index.ts +11 -0
- package/src/types/message/index.ts +78 -1
- package/src/types/plugin/index.ts +15 -0
- package/src/types/provider/error.ts +4 -1
- package/src/types/provider/interface.ts +18 -0
- package/src/types/run/events.ts +18 -4
- package/src/types/sandbox/index.ts +15 -10
- package/src/types/tool/index.ts +159 -15
- package/src/types/workspace/ref.ts +5 -0
- package/src/utils/abort.ts +18 -0
package/dist/execution/base.js
CHANGED
|
@@ -2,28 +2,75 @@ import { NAMZU } from '../constants/telemetry/index.js';
|
|
|
2
2
|
import { toErrorMessage } from '../utils/error.js';
|
|
3
3
|
import { SCOPE_ATTRIBUTE } from '../utils/log/types.js';
|
|
4
4
|
import { resolveLogger } from '../utils/logger.js';
|
|
5
|
+
class InitializationSupersededError extends Error {
|
|
6
|
+
constructor(contextId) {
|
|
7
|
+
super(`Execution context "${contextId}" initialization was superseded by teardown`);
|
|
8
|
+
this.name = 'InitializationSupersededError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
5
11
|
export class BaseExecutionContext {
|
|
6
12
|
log;
|
|
7
13
|
ready = false;
|
|
8
14
|
listeners = [];
|
|
15
|
+
lifecycleState = 'idle';
|
|
16
|
+
initializationOperation;
|
|
17
|
+
teardownOperation;
|
|
9
18
|
constructor(log) {
|
|
10
19
|
this.log = resolveLogger(log).child({
|
|
11
20
|
[SCOPE_ATTRIBUTE]: 'execution/base',
|
|
12
21
|
[NAMZU.EXECUTION_TYPE]: this.constructor.name,
|
|
13
22
|
});
|
|
14
23
|
}
|
|
15
|
-
|
|
24
|
+
initialize() {
|
|
25
|
+
if (this.lifecycleState === 'ready')
|
|
26
|
+
return Promise.resolve();
|
|
27
|
+
if (this.lifecycleState === 'initializing' && this.initializationOperation) {
|
|
28
|
+
return this.initializationOperation;
|
|
29
|
+
}
|
|
30
|
+
if (this.lifecycleState === 'tearing-down') {
|
|
31
|
+
return Promise.reject(new Error(`Execution context "${this.id}" cannot initialize while teardown is in progress`));
|
|
32
|
+
}
|
|
33
|
+
if (this.lifecycleState === 'teardown-failed') {
|
|
34
|
+
return Promise.reject(new Error(`Execution context "${this.id}" cannot initialize until its failed teardown is retried`));
|
|
35
|
+
}
|
|
36
|
+
this.lifecycleState = 'initializing';
|
|
37
|
+
const operation = this.performInitialize();
|
|
38
|
+
this.initializationOperation = operation;
|
|
39
|
+
void operation.then(() => this.releaseInitialization(operation), () => this.releaseInitialization(operation));
|
|
40
|
+
return operation;
|
|
41
|
+
}
|
|
42
|
+
async performInitialize() {
|
|
16
43
|
try {
|
|
44
|
+
this.onInitializationStarted();
|
|
17
45
|
await this.doInitialize();
|
|
46
|
+
if (this.lifecycleState !== 'initializing') {
|
|
47
|
+
throw new InitializationSupersededError(this.id);
|
|
48
|
+
}
|
|
49
|
+
this.onInitializationCommitted();
|
|
50
|
+
if (this.lifecycleState !== 'initializing') {
|
|
51
|
+
throw new InitializationSupersededError(this.id);
|
|
52
|
+
}
|
|
18
53
|
this.ready = true;
|
|
19
|
-
this.
|
|
20
|
-
this.emit({ type: 'context_ready', contextId: this.id });
|
|
54
|
+
this.lifecycleState = 'ready';
|
|
21
55
|
this.log.info('Execution context initialized', {
|
|
22
56
|
'namzu.execution.context_id': this.id,
|
|
23
57
|
'namzu.execution.environment': this.environment,
|
|
24
58
|
});
|
|
59
|
+
this.emit({
|
|
60
|
+
type: 'context_initialized',
|
|
61
|
+
contextId: this.id,
|
|
62
|
+
environment: this.environment,
|
|
63
|
+
});
|
|
64
|
+
if (this.lifecycleState !== 'ready')
|
|
65
|
+
return;
|
|
66
|
+
this.emit({ type: 'context_ready', contextId: this.id });
|
|
25
67
|
}
|
|
26
68
|
catch (err) {
|
|
69
|
+
if (err instanceof InitializationSupersededError)
|
|
70
|
+
throw err;
|
|
71
|
+
this.ready = false;
|
|
72
|
+
if (this.lifecycleState === 'initializing')
|
|
73
|
+
this.lifecycleState = 'idle';
|
|
27
74
|
const message = toErrorMessage(err);
|
|
28
75
|
this.emit({ type: 'context_error', contextId: this.id, error: message });
|
|
29
76
|
this.log.error('Execution context initialization failed', {
|
|
@@ -33,18 +80,60 @@ export class BaseExecutionContext {
|
|
|
33
80
|
throw err;
|
|
34
81
|
}
|
|
35
82
|
}
|
|
83
|
+
releaseInitialization(operation) {
|
|
84
|
+
if (this.initializationOperation === operation)
|
|
85
|
+
this.initializationOperation = undefined;
|
|
86
|
+
}
|
|
36
87
|
isReady() {
|
|
37
88
|
return this.ready;
|
|
38
89
|
}
|
|
39
|
-
|
|
90
|
+
teardown() {
|
|
91
|
+
if (this.lifecycleState === 'tearing-down' && this.teardownOperation) {
|
|
92
|
+
return this.teardownOperation;
|
|
93
|
+
}
|
|
94
|
+
if (this.lifecycleState === 'torn-down')
|
|
95
|
+
return Promise.resolve();
|
|
96
|
+
this.ready = false;
|
|
97
|
+
this.lifecycleState = 'tearing-down';
|
|
98
|
+
const operation = this.performTeardown(this.initializationOperation);
|
|
99
|
+
this.teardownOperation = operation;
|
|
100
|
+
void operation.then(() => this.releaseTeardown(operation), () => this.releaseTeardown(operation));
|
|
101
|
+
return operation;
|
|
102
|
+
}
|
|
103
|
+
async performTeardown(pendingInitialization) {
|
|
40
104
|
try {
|
|
105
|
+
// Runs before the first await. Subclasses close public admission here so
|
|
106
|
+
// work cannot slip behind an initialization this teardown must await.
|
|
107
|
+
this.onTeardownRequested();
|
|
108
|
+
if (pendingInitialization) {
|
|
109
|
+
try {
|
|
110
|
+
await pendingInitialization;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Initialization errors are reported by their owner. Cleanup still runs.
|
|
114
|
+
}
|
|
115
|
+
}
|
|
41
116
|
await this.doTeardown();
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
117
|
+
this.lifecycleState = 'torn-down';
|
|
118
|
+
this.log.info('Execution context torn down', {
|
|
119
|
+
'namzu.execution.context_id': this.id,
|
|
120
|
+
});
|
|
45
121
|
this.emit({ type: 'context_teardown', contextId: this.id });
|
|
46
|
-
this.log.info('Execution context torn down', { 'namzu.execution.context_id': this.id });
|
|
47
122
|
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
this.lifecycleState = 'teardown-failed';
|
|
125
|
+
const message = toErrorMessage(err);
|
|
126
|
+
this.emit({ type: 'context_error', contextId: this.id, error: message });
|
|
127
|
+
this.log.error('Execution context teardown failed', {
|
|
128
|
+
'namzu.execution.context_id': this.id,
|
|
129
|
+
'exception.message': message,
|
|
130
|
+
});
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
releaseTeardown(operation) {
|
|
135
|
+
if (this.teardownOperation === operation)
|
|
136
|
+
this.teardownOperation = undefined;
|
|
48
137
|
}
|
|
49
138
|
on(listener) {
|
|
50
139
|
this.listeners.push(listener);
|
|
@@ -66,5 +155,11 @@ export class BaseExecutionContext {
|
|
|
66
155
|
}
|
|
67
156
|
}
|
|
68
157
|
}
|
|
158
|
+
/** Fence subclass-owned public admission before initialization begins. */
|
|
159
|
+
onInitializationStarted() { }
|
|
160
|
+
/** Reopen admission only after Base has proved initialization was not superseded. */
|
|
161
|
+
onInitializationCommitted() { }
|
|
162
|
+
/** Fence subclass-owned public admission synchronously when teardown is requested. */
|
|
163
|
+
onTeardownRequested() { }
|
|
69
164
|
}
|
|
70
165
|
//# sourceMappingURL=base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/execution/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAe,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/execution/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,16 @@ export interface HostCallResult {
|
|
|
39
39
|
readonly value?: unknown;
|
|
40
40
|
readonly error?: string;
|
|
41
41
|
}
|
|
42
|
+
/** Authority and provenance for one call from a running program. */
|
|
43
|
+
export interface HostCallContext {
|
|
44
|
+
/** Unique within this program execution. */
|
|
45
|
+
readonly runtimeToolCallId: string;
|
|
46
|
+
/**
|
|
47
|
+
* Revoked when the caller cancels or the program's own wall clock expires.
|
|
48
|
+
* A conforming host threads this into the operation it starts.
|
|
49
|
+
*/
|
|
50
|
+
readonly signal: AbortSignal;
|
|
51
|
+
}
|
|
42
52
|
/**
|
|
43
53
|
* What the host will answer.
|
|
44
54
|
*
|
|
@@ -47,7 +57,7 @@ export interface HostCallResult {
|
|
|
47
57
|
* exactly the point: the program's reach is the run's reach, resolved at
|
|
48
58
|
* the moment of the call rather than frozen when the program started.
|
|
49
59
|
*/
|
|
50
|
-
export type HostCallHandler = (request: HostCallRequest) => Promise<HostCallResult>;
|
|
60
|
+
export type HostCallHandler = (request: HostCallRequest, context: HostCallContext) => Promise<HostCallResult>;
|
|
51
61
|
export interface RunCodeOptions {
|
|
52
62
|
/** The program. Untrusted text, from the model. */
|
|
53
63
|
readonly source: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/execution/code-runtime/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/execution/code-runtime/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,CAC7B,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,eAAe,KACpB,OAAO,CAAC,cAAc,CAAC,CAAA;AAE5B,MAAM,WAAW,cAAc;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAA;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC7B;AAED,MAAM,MAAM,cAAc,GACvB;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAA;AAEnC,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,SAAS;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;KACpB,EAAE,CAAA;CACH;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;CACpD;AAED,gEAAgE;AAChE,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;gBAElD,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE;CAOjE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/execution/code-runtime/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/execution/code-runtime/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAyFH,gEAAgE;AAChE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACpC,OAAO,CAA8C;IAE9D,YAAY,OAAqD;QAChE,KAAK,CACJ,uBAAuB,OAAO,CAAC,IAAI,2CAA2C,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAClJ,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/execution/code-runtime/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,MAAM,YAAY,CAAA;AA2FnB,qBAAa,iBAAkB,YAAW,WAAW;IACpD,QAAQ,CAAC,EAAE,oBAAmB;IAExB,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/execution/code-runtime/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,aAAa,EAClB,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,MAAM,YAAY,CAAA;AA2FnB,qBAAa,iBAAkB,YAAW,WAAW;IACpD,QAAQ,CAAC,EAAE,oBAAmB;IAExB,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAmO1D"}
|
|
@@ -94,6 +94,16 @@ export class WorkerCodeRuntime {
|
|
|
94
94
|
const calls = [];
|
|
95
95
|
let output = '';
|
|
96
96
|
let truncated = false;
|
|
97
|
+
// A withdrawn caller owns admission. Do not start an isolate merely to
|
|
98
|
+
// discover the signal was already aborted after construction.
|
|
99
|
+
if (options.signal?.aborted) {
|
|
100
|
+
return {
|
|
101
|
+
outcome: { status: 'cancelled' },
|
|
102
|
+
output,
|
|
103
|
+
outputTruncated: truncated,
|
|
104
|
+
calls,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
97
107
|
const appendOutput = (lines) => {
|
|
98
108
|
for (const line of lines) {
|
|
99
109
|
if (truncated)
|
|
@@ -131,6 +141,9 @@ export class WorkerCodeRuntime {
|
|
|
131
141
|
});
|
|
132
142
|
return await new Promise((resolve) => {
|
|
133
143
|
let settled = false;
|
|
144
|
+
let terminal;
|
|
145
|
+
const inFlight = new Set();
|
|
146
|
+
const operation = new AbortController();
|
|
134
147
|
const finish = (result) => {
|
|
135
148
|
// The Promise already ignores a second `resolve`, so removing
|
|
136
149
|
// this guard changes no result — a mutation removing it
|
|
@@ -142,16 +155,40 @@ export class WorkerCodeRuntime {
|
|
|
142
155
|
if (settled)
|
|
143
156
|
return;
|
|
144
157
|
settled = true;
|
|
158
|
+
// Terminating the worker only stops the program. Host work already
|
|
159
|
+
// admitted through onHostCall lives outside it, so revoke the signal
|
|
160
|
+
// that was handed to every such call before reporting settlement.
|
|
161
|
+
if (!operation.signal.aborted) {
|
|
162
|
+
operation.abort(new Error(`Code runtime settled with status ${result.outcome.status}`));
|
|
163
|
+
}
|
|
145
164
|
clearTimeout(deadline);
|
|
146
165
|
options.signal?.removeEventListener('abort', onAbort);
|
|
147
166
|
void worker.terminate();
|
|
148
|
-
|
|
167
|
+
// A late, non-cooperative host call must not mutate a result the
|
|
168
|
+
// caller already received.
|
|
169
|
+
resolve({ ...result, calls: [...calls] });
|
|
170
|
+
};
|
|
171
|
+
const finishTerminalWhenHostCallsSettle = () => {
|
|
172
|
+
if (terminal && inFlight.size === 0)
|
|
173
|
+
finish(terminal);
|
|
149
174
|
};
|
|
150
175
|
const deadline = setTimeout(() => {
|
|
151
|
-
|
|
176
|
+
operation.abort(new Error(`Code runtime exceeded ${options.timeoutMs}ms`));
|
|
177
|
+
finish({
|
|
178
|
+
outcome: { status: 'timed-out' },
|
|
179
|
+
output,
|
|
180
|
+
outputTruncated: truncated,
|
|
181
|
+
calls,
|
|
182
|
+
});
|
|
152
183
|
}, options.timeoutMs);
|
|
153
184
|
const onAbort = () => {
|
|
154
|
-
|
|
185
|
+
operation.abort(options.signal?.reason);
|
|
186
|
+
finish({
|
|
187
|
+
outcome: { status: 'cancelled' },
|
|
188
|
+
output,
|
|
189
|
+
outputTruncated: truncated,
|
|
190
|
+
calls,
|
|
191
|
+
});
|
|
155
192
|
};
|
|
156
193
|
options.signal?.addEventListener('abort', onAbort, { once: true });
|
|
157
194
|
if (options.signal?.aborted) {
|
|
@@ -171,13 +208,19 @@ export class WorkerCodeRuntime {
|
|
|
171
208
|
kind: 'call-result',
|
|
172
209
|
id,
|
|
173
210
|
ok: false,
|
|
174
|
-
error: new HostCallDeniedError({
|
|
211
|
+
error: new HostCallDeniedError({
|
|
212
|
+
name,
|
|
213
|
+
allowed: options.allowedCalls,
|
|
214
|
+
}).message,
|
|
175
215
|
});
|
|
176
216
|
return;
|
|
177
217
|
}
|
|
178
|
-
|
|
179
|
-
|
|
218
|
+
const runtimeToolCallId = String(id);
|
|
219
|
+
const hostCall = Promise.resolve()
|
|
220
|
+
.then(() => options.onHostCall({ name, input: message.input }, { runtimeToolCallId, signal: operation.signal }))
|
|
180
221
|
.then((result) => {
|
|
222
|
+
if (settled)
|
|
223
|
+
return;
|
|
181
224
|
calls.push({ name, ok: result.ok });
|
|
182
225
|
worker.postMessage({
|
|
183
226
|
kind: 'call-result',
|
|
@@ -188,6 +231,8 @@ export class WorkerCodeRuntime {
|
|
|
188
231
|
});
|
|
189
232
|
})
|
|
190
233
|
.catch((err) => {
|
|
234
|
+
if (settled)
|
|
235
|
+
return;
|
|
191
236
|
calls.push({ name, ok: false });
|
|
192
237
|
worker.postMessage({
|
|
193
238
|
kind: 'call-result',
|
|
@@ -195,7 +240,12 @@ export class WorkerCodeRuntime {
|
|
|
195
240
|
ok: false,
|
|
196
241
|
error: err instanceof Error ? err.message : String(err),
|
|
197
242
|
});
|
|
243
|
+
})
|
|
244
|
+
.finally(() => {
|
|
245
|
+
inFlight.delete(hostCall);
|
|
246
|
+
finishTerminalWhenHostCallsSettle();
|
|
198
247
|
});
|
|
248
|
+
inFlight.add(hostCall);
|
|
199
249
|
return;
|
|
200
250
|
}
|
|
201
251
|
if (message.kind === 'print') {
|
|
@@ -203,12 +253,17 @@ export class WorkerCodeRuntime {
|
|
|
203
253
|
return;
|
|
204
254
|
}
|
|
205
255
|
if (message.kind === 'done') {
|
|
206
|
-
|
|
256
|
+
// A program may start a host call without awaiting it. The worker
|
|
257
|
+
// declaring its JavaScript body complete is not evidence that the
|
|
258
|
+
// effect it started is complete, so keep the runtime open until the
|
|
259
|
+
// already-admitted host calls settle (or the deadline revokes them).
|
|
260
|
+
terminal = {
|
|
207
261
|
outcome: { status: 'completed', result: message.result },
|
|
208
262
|
output,
|
|
209
263
|
outputTruncated: truncated,
|
|
210
264
|
calls,
|
|
211
|
-
}
|
|
265
|
+
};
|
|
266
|
+
finishTerminalWhenHostCallsSettle();
|
|
212
267
|
return;
|
|
213
268
|
}
|
|
214
269
|
if (message.kind === 'error') {
|
|
@@ -236,7 +291,10 @@ export class WorkerCodeRuntime {
|
|
|
236
291
|
// `error` message — a hard crash, or a program that called
|
|
237
292
|
// `process.exit` through something we failed to withhold.
|
|
238
293
|
finish({
|
|
239
|
-
outcome: {
|
|
294
|
+
outcome: {
|
|
295
|
+
status: 'failed',
|
|
296
|
+
error: `The program exited with code ${code}.`,
|
|
297
|
+
},
|
|
240
298
|
output,
|
|
241
299
|
outputTruncated: truncated,
|
|
242
300
|
calls,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/execution/code-runtime/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAGN,mBAAmB,GAEnB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;GAMG;AACH,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDrB,CAAA;AAED,MAAM,OAAO,iBAAiB;IACpB,EAAE,GAAG,gBAAgB,CAAA;IAE9B,KAAK,CAAC,GAAG,CAAC,OAAuB;QAChC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QAC7C,MAAM,KAAK,GAAoC,EAAE,CAAA;QACjD,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,SAAS,GAAG,KAAK,CAAA;QAErB,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAQ,EAAE;YACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,IAAI,SAAS;oBAAE,OAAM;gBACrB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,CAAA;gBAC9D,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;oBACtD,uDAAuD;oBACvD,4DAA4D;oBAC5D,gBAAgB;oBAChB,SAAS,GAAG,IAAI,CAAA;oBAChB,OAAM;gBACP,CAAC;gBACD,MAAM,GAAG,IAAI,CAAA;YACd,CAAC;QACF,CAAC,CAAA;QAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE;YACxC,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;YACtC,uCAAuC;YACvC,EAAE;YACF,8DAA8D;YAC9D,8DAA8D;YAC9D,+DAA+D;YAC/D,mEAAmE;YACnE,sDAAsD;YACtD,mEAAmE;YACnE,mEAAmE;YACnE,6DAA6D;YAC7D,GAAG,EAAE,EAAE;YACP,kEAAkE;YAClE,iEAAiE;YACjE,yDAAyD;YACzD,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACZ,CAAC,CAAA;QAEF,OAAO,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;YACnD,IAAI,OAAO,GAAG,KAAK,CAAA;YACnB,MAAM,MAAM,GAAG,CAAC,MAAqB,EAAQ,EAAE;gBAC9C,8DAA8D;gBAC9D,wDAAwD;gBACxD,0DAA0D;gBAC1D,+DAA+D;gBAC/D,6DAA6D;gBAC7D,8DAA8D;gBAC9D,0DAA0D;gBAC1D,IAAI,OAAO;oBAAE,OAAM;gBACnB,OAAO,GAAG,IAAI,CAAA;gBACd,YAAY,CAAC,QAAQ,CAAC,CAAA;gBACtB,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBACrD,KAAK,MAAM,CAAC,SAAS,EAAE,CAAA;gBACvB,OAAO,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/execution/code-runtime/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class CommandCancellationUnsupportedError extends Error {
|
|
2
|
+
readonly contextId: string;
|
|
3
|
+
readonly code: "command_cancellation_unsupported";
|
|
4
|
+
constructor(contextId: string);
|
|
5
|
+
}
|
|
6
|
+
export declare class RemoteExecutionBusyError extends Error {
|
|
7
|
+
readonly contextId: string;
|
|
8
|
+
readonly activeCommandCount: number;
|
|
9
|
+
readonly code: "remote_execution_busy";
|
|
10
|
+
constructor(contextId: string, activeCommandCount: number);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/execution/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,mCAAoC,SAAQ,KAAK;IAGjD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAFtC,QAAQ,CAAC,IAAI,EAAG,kCAAkC,CAAS;gBAEtC,SAAS,EAAE,MAAM;CAMtC;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAIjD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IAJpC,QAAQ,CAAC,IAAI,EAAG,uBAAuB,CAAS;gBAGtC,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM;CAOpC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class CommandCancellationUnsupportedError extends Error {
|
|
2
|
+
contextId;
|
|
3
|
+
code = 'command_cancellation_unsupported';
|
|
4
|
+
constructor(contextId) {
|
|
5
|
+
super(`Remote execution context "${contextId}" cannot accept command cancellation because its generic executor has no reservation and terminal-acknowledgement protocol. No remote command was started. Use the Sandbox.exec() contract for cancellable remote command execution.`);
|
|
6
|
+
this.contextId = contextId;
|
|
7
|
+
this.name = 'CommandCancellationUnsupportedError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class RemoteExecutionBusyError extends Error {
|
|
11
|
+
contextId;
|
|
12
|
+
activeCommandCount;
|
|
13
|
+
code = 'remote_execution_busy';
|
|
14
|
+
constructor(contextId, activeCommandCount) {
|
|
15
|
+
super(`Remote execution context "${contextId}" still owns ${activeCommandCount} active command${activeCommandCount === 1 ? '' : 's'}. Disconnect or teardown was refused; wait for the command${activeCommandCount === 1 ? '' : 's'} to settle, then retry.`);
|
|
16
|
+
this.contextId = contextId;
|
|
17
|
+
this.activeCommandCount = activeCommandCount;
|
|
18
|
+
this.name = 'RemoteExecutionBusyError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/execution/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mCAAoC,SAAQ,KAAK;IAGxC;IAFZ,IAAI,GAAG,kCAA2C,CAAA;IAE3D,YAAqB,SAAiB;QACrC,KAAK,CACJ,6BAA6B,SAAS,sOAAsO,CAC5Q,CAAA;QAHmB,cAAS,GAAT,SAAS,CAAQ;QAIrC,IAAI,CAAC,IAAI,GAAG,qCAAqC,CAAA;IAClD,CAAC;CACD;AAED,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAIxC;IACA;IAJD,IAAI,GAAG,uBAAgC,CAAA;IAEhD,YACU,SAAiB,EACjB,kBAA0B;QAEnC,KAAK,CACJ,6BAA6B,SAAS,gBAAgB,kBAAkB,kBAAkB,kBAAkB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,6DAA6D,kBAAkB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,yBAAyB,CACtP,CAAA;QALQ,cAAS,GAAT,SAAS,CAAQ;QACjB,uBAAkB,GAAlB,kBAAkB,CAAQ;QAKnC,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACvC,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/execution/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAExF,qBAAa,uBAAuB;IACnC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,oBAAoB;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/execution/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAExF,qBAAa,uBAAuB;IACnC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,oBAAoB;IAmCnE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,4BAA4B,GAAG,qBAAqB;IAIhF,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,6BAA6B,GAAG,sBAAsB;IAInF,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,6BAA6B,GAAG,sBAAsB;CAGnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/execution/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAsC,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAqC,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,sBAAsB,EAAsC,MAAM,aAAa,CAAA;AAExF,MAAM,OAAO,uBAAuB;IACnC,MAAM,CAAC,MAAM,CAAC,MAA8B;QAC3C,QAAQ,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5B,KAAK,OAAO;gBACX,OAAO,uBAAuB,CAAC,WAAW,CAAC;oBAC1C,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK,EAAE,MAAM,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/execution/factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAsC,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAqC,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,sBAAsB,EAAsC,MAAM,aAAa,CAAA;AAExF,MAAM,OAAO,uBAAuB;IACnC,MAAM,CAAC,MAAM,CAAC,MAA8B;QAC3C,QAAQ,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5B,KAAK,OAAO;gBACX,OAAO,uBAAuB,CAAC,WAAW,CAAC;oBAC1C,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,cAAc,EAAE,MAAM,CAAC,cAAc;iBACrC,CAAC,CAAA;YAEH,KAAK,QAAQ;gBACZ,OAAO,uBAAuB,CAAC,YAAY,CAAC;oBAC3C,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,YAAY,EAAE,MAAM,CAAC,YAAY;iBACjC,CAAC,CAAA;YAEH,KAAK,QAAQ;gBACZ,OAAO,uBAAuB,CAAC,YAAY,CAAC;oBAC3C,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,eAAe,EAAE,MAAM,CAAC,eAAe;iBACvC,CAAC,CAAA;YAEH,OAAO,CAAC,CAAC,CAAC;gBACT,MAAM,WAAW,GAAU,MAAM,CAAA;gBACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YACnF,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAAqC;QACvD,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAsC;QACzD,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAsC;QACzD,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC3C,CAAC;CACD"}
|
|
@@ -11,6 +11,7 @@ export interface HybridExecutionContextOptions {
|
|
|
11
11
|
envVars?: Record<string, string>;
|
|
12
12
|
capabilities?: ExecutionCapability[];
|
|
13
13
|
shell?: string;
|
|
14
|
+
maxOutputBytes?: number;
|
|
14
15
|
};
|
|
15
16
|
remotes: RemoteTarget[];
|
|
16
17
|
routingStrategy?: ExecutionRoutingStrategy;
|
|
@@ -24,8 +25,12 @@ export declare class HybridExecutionContext extends BaseExecutionContext impleme
|
|
|
24
25
|
private remoteTargets;
|
|
25
26
|
private routingStrategy;
|
|
26
27
|
private roundRobinIndex;
|
|
28
|
+
private admissionsOpen;
|
|
27
29
|
constructor(options: HybridExecutionContextOptions);
|
|
28
30
|
protected doInitialize(): Promise<void>;
|
|
31
|
+
protected onInitializationStarted(): void;
|
|
32
|
+
protected onInitializationCommitted(): void;
|
|
33
|
+
protected onTeardownRequested(): void;
|
|
29
34
|
protected doTeardown(): Promise<void>;
|
|
30
35
|
getLocal(): LocalExecutionContext;
|
|
31
36
|
getRemote(remoteId: string): RemoteExecutionContext | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../src/execution/hybrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,EAC5B,YAAY,EACZ,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,WAAW,6BAA6B;IAC7C,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE;QACN,GAAG,EAAE,MAAM,CAAA;QACX,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAA;QACpC,KAAK,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../src/execution/hybrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,EAC5B,YAAY,EACZ,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,WAAW,6BAA6B;IAC7C,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE;QACN,GAAG,EAAE,MAAM,CAAA;QACX,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAA;QACpC,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,cAAc,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;IACD,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,eAAe,CAAC,EAAE,wBAAwB,CAAA;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,qBAAa,sBAAuB,SAAQ,oBAAqB,YAAW,eAAe;IAC1F,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAW;IAErD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAiD;IACnE,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,cAAc,CAAO;gBAEjB,OAAO,EAAE,6BAA6B;cA+BlC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;cAgB1B,uBAAuB,IAAI,IAAI;cAI/B,yBAAyB,IAAI,IAAI;cAIjC,mBAAmB,IAAI,IAAI;cAI9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3C,QAAQ,IAAI,qBAAqB;IAIjC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAI/D,UAAU,IAAI,sBAAsB,EAAE;IAItC,kBAAkB,IAAI,wBAAwB;IAI9C,kBAAkB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAKtD,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAarC,cAAc,CACnB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC;IA2CzB,QAAQ,IAAI,4BAA4B;IAkBxC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,oBAAoB;CAS5B"}
|
package/dist/execution/hybrid.js
CHANGED
|
@@ -9,6 +9,7 @@ export class HybridExecutionContext extends BaseExecutionContext {
|
|
|
9
9
|
remoteTargets;
|
|
10
10
|
routingStrategy;
|
|
11
11
|
roundRobinIndex = 0;
|
|
12
|
+
admissionsOpen = true;
|
|
12
13
|
constructor(options) {
|
|
13
14
|
super(options.log);
|
|
14
15
|
this.id = options.id;
|
|
@@ -21,6 +22,7 @@ export class HybridExecutionContext extends BaseExecutionContext {
|
|
|
21
22
|
envVars: options.local.envVars,
|
|
22
23
|
capabilities: options.local.capabilities,
|
|
23
24
|
shell: options.local.shell,
|
|
25
|
+
maxOutputBytes: options.local.maxOutputBytes,
|
|
24
26
|
log: options.log,
|
|
25
27
|
});
|
|
26
28
|
this.localCtx.on((event) => this.emit(event));
|
|
@@ -48,13 +50,24 @@ export class HybridExecutionContext extends BaseExecutionContext {
|
|
|
48
50
|
'namzu.execution.routing_strategy': this.routingStrategy,
|
|
49
51
|
});
|
|
50
52
|
}
|
|
53
|
+
onInitializationStarted() {
|
|
54
|
+
this.admissionsOpen = false;
|
|
55
|
+
}
|
|
56
|
+
onInitializationCommitted() {
|
|
57
|
+
this.admissionsOpen = true;
|
|
58
|
+
}
|
|
59
|
+
onTeardownRequested() {
|
|
60
|
+
this.admissionsOpen = false;
|
|
61
|
+
}
|
|
51
62
|
async doTeardown() {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
63
|
+
const contexts = [this.localCtx, ...this.remoteCtxs.values()];
|
|
64
|
+
const results = await Promise.allSettled(contexts.map((context) => context.teardown()));
|
|
65
|
+
const failures = results.flatMap((result) => result.status === 'rejected' ? [result.reason] : []);
|
|
66
|
+
if (failures.length === 1)
|
|
67
|
+
throw failures[0];
|
|
68
|
+
if (failures.length > 1) {
|
|
69
|
+
throw new AggregateError(failures, 'Multiple hybrid execution contexts failed to tear down');
|
|
55
70
|
}
|
|
56
|
-
await Promise.allSettled(teardownPromises);
|
|
57
|
-
await this.localCtx.teardown();
|
|
58
71
|
}
|
|
59
72
|
getLocal() {
|
|
60
73
|
return this.localCtx;
|
|
@@ -80,21 +93,25 @@ export class HybridExecutionContext extends BaseExecutionContext {
|
|
|
80
93
|
await Promise.all(promises);
|
|
81
94
|
}
|
|
82
95
|
async disconnectAllRemotes() {
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
96
|
+
const results = await Promise.allSettled(Array.from(this.remoteCtxs.values(), (remote) => remote.disconnect()));
|
|
97
|
+
const failures = results.flatMap((result) => result.status === 'rejected' ? [result.reason] : []);
|
|
98
|
+
if (failures.length === 1)
|
|
99
|
+
throw failures[0];
|
|
100
|
+
if (failures.length > 1) {
|
|
101
|
+
throw new AggregateError(failures, 'Multiple remote execution contexts failed to disconnect');
|
|
86
102
|
}
|
|
87
|
-
await Promise.allSettled(promises);
|
|
88
103
|
}
|
|
89
104
|
async executeCommand(command, args = [], options) {
|
|
105
|
+
if (!this.admissionsOpen) {
|
|
106
|
+
throw new Error(`Hybrid execution context "${this.id}" is initializing, tearing down, or torn down. Wait for initialization to commit before executing another command.`);
|
|
107
|
+
}
|
|
90
108
|
switch (this.routingStrategy) {
|
|
91
109
|
case 'local-first':
|
|
92
110
|
return this.localCtx.executeCommand(command, args, options);
|
|
93
111
|
case 'remote-first': {
|
|
94
112
|
const connectedRemote = this.getFirstConnectedRemote();
|
|
95
113
|
if (connectedRemote) {
|
|
96
|
-
|
|
97
|
-
return connectedRemote.executeRemote(fullCommand, options);
|
|
114
|
+
return connectedRemote.executeCommand(command, args, options);
|
|
98
115
|
}
|
|
99
116
|
return this.localCtx.executeCommand(command, args, options);
|
|
100
117
|
}
|
|
@@ -112,8 +129,7 @@ export class HybridExecutionContext extends BaseExecutionContext {
|
|
|
112
129
|
if (target === this.localCtx) {
|
|
113
130
|
return this.localCtx.executeCommand(command, args, options);
|
|
114
131
|
}
|
|
115
|
-
|
|
116
|
-
return target.executeRemote(fullCommand, options);
|
|
132
|
+
return target.executeCommand(command, args, options);
|
|
117
133
|
}
|
|
118
134
|
default: {
|
|
119
135
|
const _exhaustive = this.routingStrategy;
|
|
@@ -122,13 +138,17 @@ export class HybridExecutionContext extends BaseExecutionContext {
|
|
|
122
138
|
}
|
|
123
139
|
}
|
|
124
140
|
toConfig() {
|
|
141
|
+
const local = this.localCtx.toConfig();
|
|
125
142
|
return {
|
|
126
143
|
id: this.id,
|
|
127
144
|
environment: 'hybrid',
|
|
128
145
|
local: {
|
|
129
|
-
cwd:
|
|
130
|
-
fsAccess:
|
|
131
|
-
envVars:
|
|
146
|
+
cwd: local.cwd,
|
|
147
|
+
fsAccess: local.fsAccess,
|
|
148
|
+
envVars: local.envVars,
|
|
149
|
+
capabilities: local.capabilities,
|
|
150
|
+
shell: local.shell,
|
|
151
|
+
maxOutputBytes: local.maxOutputBytes,
|
|
132
152
|
},
|
|
133
153
|
remotes: this.remoteTargets.map((t) => ({ ...t })),
|
|
134
154
|
routingStrategy: this.routingStrategy,
|