@qduc/term2 0.29.0 → 0.30.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.d.ts +13 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +73 -2
- package/dist/agent.js.map +1 -1
- package/dist/build-info.json +3 -3
- package/dist/cli.js +17 -0
- package/dist/cli.js.map +1 -1
- package/dist/components/message/SubagentActivityMessage.d.ts +2 -2
- package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
- package/dist/components/message/SubagentActivityMessage.js +2 -13
- package/dist/components/message/SubagentActivityMessage.js.map +1 -1
- package/dist/components/message/command-message-helpers.d.ts +2 -2
- package/dist/components/message/command-message-helpers.d.ts.map +1 -1
- package/dist/core/index.d.ts +2 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -7
- package/dist/core/index.js.map +1 -1
- package/dist/core/session-runtime.d.ts +72 -0
- package/dist/core/session-runtime.d.ts.map +1 -1
- package/dist/gateway/contracts.d.ts +1 -1
- package/dist/gateway/contracts.d.ts.map +1 -1
- package/dist/gateway/gateway.d.ts +32 -0
- package/dist/gateway/gateway.d.ts.map +1 -1
- package/dist/gateway/gateway.js +36 -1
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/persistence/contracts.d.ts +3 -10
- package/dist/gateway/persistence/contracts.d.ts.map +1 -1
- package/dist/gateway/persistence/contracts.js +2 -31
- package/dist/gateway/persistence/contracts.js.map +1 -1
- package/dist/gateway/runtime-factory.d.ts.map +1 -1
- package/dist/gateway/runtime-factory.js +4 -0
- package/dist/gateway/runtime-factory.js.map +1 -1
- package/dist/gateway/server-session.d.ts +3 -0
- package/dist/gateway/server-session.d.ts.map +1 -1
- package/dist/gateway/server-session.js +17 -20
- package/dist/gateway/server-session.js.map +1 -1
- package/dist/gateway/settings-rpc.d.ts +1 -1
- package/dist/gateway/settings-rpc.d.ts.map +1 -1
- package/dist/gateway/settings-rpc.js +4 -1
- package/dist/gateway/settings-rpc.js.map +1 -1
- package/dist/lib/agent-client.d.ts +8 -0
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +5 -1
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-configuration.d.ts +9 -0
- package/dist/lib/agent-configuration.d.ts.map +1 -1
- package/dist/lib/agent-configuration.js +14 -0
- package/dist/lib/agent-configuration.js.map +1 -1
- package/dist/lib/agent-factory.d.ts +25 -4
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +6 -0
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/lib/subagent-bridge.d.ts +47 -5
- package/dist/lib/subagent-bridge.d.ts.map +1 -1
- package/dist/lib/subagent-bridge.js +112 -4
- package/dist/lib/subagent-bridge.js.map +1 -1
- package/dist/node_modules/@qduc/agent-wire/index.d.ts +73 -0
- package/dist/node_modules/@qduc/agent-wire/index.js +212 -0
- package/dist/node_modules/@qduc/agent-wire/package.json +1 -0
- package/dist/prompts/orchestrator-prompt.test.ts +9 -0
- package/dist/prompts/orchestrator.md +2 -0
- package/dist/prompts/subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/subagent-delegation.js +3 -2
- package/dist/prompts/subagent-delegation.js.map +1 -1
- package/dist/prompts/subagent-delegation.test.ts +1 -0
- package/dist/prompts/subagent-delegation.ts +6 -2
- package/dist/providers/codex.provider.d.ts +3 -0
- package/dist/providers/codex.provider.d.ts.map +1 -1
- package/dist/providers/codex.provider.js +6 -4
- package/dist/providers/codex.provider.js.map +1 -1
- package/dist/providers/grok-auth.d.ts +3 -0
- package/dist/providers/grok-auth.d.ts.map +1 -1
- package/dist/providers/grok-auth.js +3 -1
- package/dist/providers/grok-auth.js.map +1 -1
- package/dist/providers/grok.provider.js +3 -3
- package/dist/providers/grok.provider.js.map +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/oauth-session-account.d.ts +16 -2
- package/dist/providers/oauth-session-account.d.ts.map +1 -1
- package/dist/providers/oauth-session-account.js +8 -17
- package/dist/providers/oauth-session-account.js.map +1 -1
- package/dist/providers/openai.provider.js +1 -1
- package/dist/providers/openai.provider.js.map +1 -1
- package/dist/providers/openrouter.provider.js +1 -1
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/providers/registry.d.ts +20 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +33 -16
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/web-search/exa.provider.d.ts.map +1 -1
- package/dist/providers/web-search/exa.provider.js +6 -3
- package/dist/providers/web-search/exa.provider.js.map +1 -1
- package/dist/providers/web-search/firecrawl.provider.d.ts +8 -0
- package/dist/providers/web-search/firecrawl.provider.d.ts.map +1 -0
- package/dist/providers/web-search/firecrawl.provider.js +59 -0
- package/dist/providers/web-search/firecrawl.provider.js.map +1 -0
- package/dist/providers/web-search/index.d.ts +5 -2
- package/dist/providers/web-search/index.d.ts.map +1 -1
- package/dist/providers/web-search/index.js +3 -1
- package/dist/providers/web-search/index.js.map +1 -1
- package/dist/providers/web-search/registry.d.ts +14 -0
- package/dist/providers/web-search/registry.d.ts.map +1 -1
- package/dist/providers/web-search/registry.js +45 -15
- package/dist/providers/web-search/registry.js.map +1 -1
- package/dist/providers/web-search/searxng.provider.d.ts +8 -0
- package/dist/providers/web-search/searxng.provider.d.ts.map +1 -0
- package/dist/providers/web-search/searxng.provider.js +56 -0
- package/dist/providers/web-search/searxng.provider.js.map +1 -0
- package/dist/providers/web-search/tavily.provider.d.ts.map +1 -1
- package/dist/providers/web-search/tavily.provider.js +8 -3
- package/dist/providers/web-search/tavily.provider.js.map +1 -1
- package/dist/providers/web-search/types.d.ts +14 -1
- package/dist/providers/web-search/types.d.ts.map +1 -1
- package/dist/services/agent-runtime/agent-resolver.d.ts.map +1 -1
- package/dist/services/agent-runtime/agent-resolver.js +1 -0
- package/dist/services/agent-runtime/agent-resolver.js.map +1 -1
- package/dist/services/agent-runtime/agent-runtime.d.ts +6 -1
- package/dist/services/agent-runtime/agent-runtime.d.ts.map +1 -1
- package/dist/services/agent-runtime/agent-runtime.js +11 -2
- package/dist/services/agent-runtime/agent-runtime.js.map +1 -1
- package/dist/services/agent-runtime/agent-spec.d.ts +14 -0
- package/dist/services/agent-runtime/agent-spec.d.ts.map +1 -0
- package/dist/services/agent-runtime/agent-spec.js +49 -0
- package/dist/services/agent-runtime/agent-spec.js.map +1 -0
- package/dist/services/agent-runtime/index.d.ts +3 -1
- package/dist/services/agent-runtime/index.d.ts.map +1 -1
- package/dist/services/agent-runtime/index.js +2 -0
- package/dist/services/agent-runtime/index.js.map +1 -1
- package/dist/services/agent-runtime/legacy-adapter.d.ts.map +1 -1
- package/dist/services/agent-runtime/legacy-adapter.js +5 -1
- package/dist/services/agent-runtime/legacy-adapter.js.map +1 -1
- package/dist/services/agent-runtime/permission-boundary.d.ts +95 -0
- package/dist/services/agent-runtime/permission-boundary.d.ts.map +1 -0
- package/dist/services/agent-runtime/permission-boundary.js +538 -0
- package/dist/services/agent-runtime/permission-boundary.js.map +1 -0
- package/dist/services/agent-runtime/resolved-agent.d.ts +2 -0
- package/dist/services/agent-runtime/resolved-agent.d.ts.map +1 -1
- package/dist/services/agent-runtime/types.d.ts +22 -1
- package/dist/services/agent-runtime/types.d.ts.map +1 -1
- package/dist/services/approval/non-interactive-approval-policy.d.ts.map +1 -1
- package/dist/services/approval/non-interactive-approval-policy.js +10 -0
- package/dist/services/approval/non-interactive-approval-policy.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.d.ts +2 -0
- package/dist/services/approval/shell-auto-approval-resolver.d.ts.map +1 -1
- package/dist/services/approval/shell-auto-approval-resolver.js +4 -2
- package/dist/services/approval/shell-auto-approval-resolver.js.map +1 -1
- package/dist/services/conversation/conversation-adapter-factory.d.ts +1 -1
- package/dist/services/conversation/conversation-adapter-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.d.ts +1 -1
- package/dist/services/conversation/conversation-runtime-factory.d.ts.map +1 -1
- package/dist/services/conversation/conversation-runtime-factory.js +1 -1
- package/dist/services/conversation/conversation-runtime-factory.js.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts +4 -1
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +25 -0
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/session-index/session-index-service.d.ts +1 -1
- package/dist/services/conversation/session-index/session-index-service.d.ts.map +1 -1
- package/dist/services/conversation/session-index/session-index-service.js +1 -1
- package/dist/services/conversation/session-index/session-index-service.js.map +1 -1
- package/dist/services/retry/committed-tool-continuation.d.ts +24 -0
- package/dist/services/retry/committed-tool-continuation.d.ts.map +1 -1
- package/dist/services/retry/committed-tool-continuation.js +26 -0
- package/dist/services/retry/committed-tool-continuation.js.map +1 -1
- package/dist/services/retry/provider-failure-classification.d.ts +2 -0
- package/dist/services/retry/provider-failure-classification.d.ts.map +1 -1
- package/dist/services/retry/provider-failure-classification.js +43 -0
- package/dist/services/retry/provider-failure-classification.js.map +1 -1
- package/dist/services/retry/retry-classifier.d.ts.map +1 -1
- package/dist/services/retry/retry-classifier.js +11 -3
- package/dist/services/retry/retry-classifier.js.map +1 -1
- package/dist/services/sandboxed-code-host/host-worker.d.ts.map +1 -1
- package/dist/services/sandboxed-code-host/host-worker.js +3 -1
- package/dist/services/sandboxed-code-host/host-worker.js.map +1 -1
- package/dist/services/session/continuation-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/continuation-recovery-handler.js +6 -0
- package/dist/services/session/continuation-recovery-handler.js.map +1 -1
- package/dist/services/session/initial-turn-recovery-handler.d.ts +1 -1
- package/dist/services/session/initial-turn-recovery-handler.d.ts.map +1 -1
- package/dist/services/session/initial-turn-recovery-handler.js +6 -0
- package/dist/services/session/initial-turn-recovery-handler.js.map +1 -1
- package/dist/services/session/session-composition.d.ts +3 -0
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +2 -1
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/session/session-input-planner.d.ts +2 -0
- package/dist/services/session/session-input-planner.d.ts.map +1 -1
- package/dist/services/session/session-input-planner.js +4 -6
- package/dist/services/session/session-input-planner.js.map +1 -1
- package/dist/services/settings/settings-env.d.ts.map +1 -1
- package/dist/services/settings/settings-env.js +9 -0
- package/dist/services/settings/settings-env.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +24 -0
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +16 -0
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-sources.d.ts +2 -0
- package/dist/services/settings/settings-sources.d.ts.map +1 -1
- package/dist/services/settings/settings-sources.js +2 -0
- package/dist/services/settings/settings-sources.js.map +1 -1
- package/dist/services/settings/settings-ui-metadata.d.ts.map +1 -1
- package/dist/services/settings/settings-ui-metadata.js +4 -1
- package/dist/services/settings/settings-ui-metadata.js.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js +3 -0
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
- package/dist/services/subagents/execution-runner.d.ts.map +1 -1
- package/dist/services/subagents/execution-runner.js +2 -1
- package/dist/services/subagents/execution-runner.js.map +1 -1
- package/dist/services/subagents/foreground-subagent-lease.d.ts +15 -0
- package/dist/services/subagents/foreground-subagent-lease.d.ts.map +1 -1
- package/dist/services/subagents/foreground-subagent-lease.js +42 -2
- package/dist/services/subagents/foreground-subagent-lease.js.map +1 -1
- package/dist/services/subagents/nested-runner.d.ts +1 -1
- package/dist/services/subagents/nested-runner.d.ts.map +1 -1
- package/dist/services/subagents/nested-runner.js +89 -22
- package/dist/services/subagents/nested-runner.js.map +1 -1
- package/dist/services/subagents/runtime.d.ts.map +1 -1
- package/dist/services/subagents/runtime.js +30 -4
- package/dist/services/subagents/runtime.js.map +1 -1
- package/dist/services/subagents/subagent-async-registry.d.ts +3 -0
- package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
- package/dist/services/subagents/subagent-async-registry.js +53 -8
- package/dist/services/subagents/subagent-async-registry.js.map +1 -1
- package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.js +65 -3
- package/dist/services/subagents/subagent-manager.js.map +1 -1
- package/dist/services/subagents/subagent-role-pool-selector.d.ts +5 -1
- package/dist/services/subagents/subagent-role-pool-selector.d.ts.map +1 -1
- package/dist/services/subagents/subagent-role-pool-selector.js +24 -5
- package/dist/services/subagents/subagent-role-pool-selector.js.map +1 -1
- package/dist/services/subagents/tool-policy.d.ts +2 -2
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js +8 -2
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/services/subagents/types.d.ts +15 -2
- package/dist/services/subagents/types.d.ts.map +1 -1
- package/dist/services/subagents/types.js.map +1 -1
- package/dist/services/subagents/worker-worktree.d.ts +19 -1
- package/dist/services/subagents/worker-worktree.d.ts.map +1 -1
- package/dist/services/subagents/worker-worktree.js +128 -4
- package/dist/services/subagents/worker-worktree.js.map +1 -1
- package/dist/services/workspace/worktree-inventory.d.ts +6 -0
- package/dist/services/workspace/worktree-inventory.d.ts.map +1 -1
- package/dist/services/workspace/worktree-inventory.js +29 -1
- package/dist/services/workspace/worktree-inventory.js.map +1 -1
- package/dist/tools/agent/propose-goal.d.ts +17 -0
- package/dist/tools/agent/propose-goal.d.ts.map +1 -0
- package/dist/tools/agent/propose-goal.js +64 -0
- package/dist/tools/agent/propose-goal.js.map +1 -0
- package/dist/tools/agent/run-subagent-async.d.ts +61 -3
- package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent-async.js +13 -4
- package/dist/tools/agent/run-subagent-async.js.map +1 -1
- package/dist/tools/agent/run-subagent.d.ts +73 -7
- package/dist/tools/agent/run-subagent.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent.js +84 -22
- package/dist/tools/agent/run-subagent.js.map +1 -1
- package/dist/tools/system/run-code/index.d.ts +1 -1
- package/dist/tools/system/run-code/index.d.ts.map +1 -1
- package/dist/tools/system/run-code/index.js +1 -1
- package/dist/tools/system/run-code/index.js.map +1 -1
- package/dist/tools/system/run-code/run-code-agent-capability.d.ts +99 -0
- package/dist/tools/system/run-code/run-code-agent-capability.d.ts.map +1 -0
- package/dist/tools/system/run-code/run-code-agent-capability.js +384 -0
- package/dist/tools/system/run-code/run-code-agent-capability.js.map +1 -0
- package/dist/tools/system/run-code/run-code-runtime.d.ts +9 -0
- package/dist/tools/system/run-code/run-code-runtime.d.ts.map +1 -1
- package/dist/tools/system/run-code/run-code-runtime.js +54 -1
- package/dist/tools/system/run-code/run-code-runtime.js.map +1 -1
- package/dist/tools/system/run-code/run-code.d.ts +12 -1
- package/dist/tools/system/run-code/run-code.d.ts.map +1 -1
- package/dist/tools/system/run-code/run-code.js +48 -1
- package/dist/tools/system/run-code/run-code.js.map +1 -1
- package/dist/tools/tool-names.d.ts +1 -0
- package/dist/tools/tool-names.d.ts.map +1 -1
- package/dist/tools/tool-names.js +1 -0
- package/dist/tools/tool-names.js.map +1 -1
- package/dist/tools/web/web-search.d.ts +18 -0
- package/dist/tools/web/web-search.d.ts.map +1 -1
- package/dist/tools/web/web-search.js +29 -4
- package/dist/tools/web/web-search.js.map +1 -1
- package/dist/types/message.d.ts +1 -0
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js +13 -0
- package/dist/types/message.js.map +1 -1
- package/dist/utils/conversation/conversation-event-handler.js +1 -1
- package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
- package/dist/utils/value-suggestions.d.ts.map +1 -1
- package/dist/utils/value-suggestions.js +2 -0
- package/dist/utils/value-suggestions.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import { resolveAgentSpecForChild, } from '../../../services/agent-runtime/permission-boundary.js';
|
|
2
|
+
import { applyApprovalGrant } from '../../../services/approval/approval-grant-executor.js';
|
|
3
|
+
import { RUN_CODE_LIMITS } from './run-code-runtime.js';
|
|
4
|
+
const ASYNC_LIFECYCLE_MEMBERS = ['start', 'status', 'result', 'cancel'];
|
|
5
|
+
const isFunction = (value) => typeof value === 'function';
|
|
6
|
+
/** True when at least one launch seam exists; gates capability existence. */
|
|
7
|
+
export function isRunCodeAgentBridgeActive(bridge) {
|
|
8
|
+
if (!bridge)
|
|
9
|
+
return false;
|
|
10
|
+
const foreground = isFunction(bridge.runResolvedSubagent);
|
|
11
|
+
const asyncLifecycle = isFunction(bridge.runResolvedSubagentAsync) &&
|
|
12
|
+
isFunction(bridge.getSubagentResult) &&
|
|
13
|
+
isFunction(bridge.getSubagentStatus) &&
|
|
14
|
+
isFunction(bridge.cancelSubagentRun);
|
|
15
|
+
return foreground || asyncLifecycle;
|
|
16
|
+
}
|
|
17
|
+
/** The exact member list a bound bridge can serve; also rendered into the tool description. */
|
|
18
|
+
export function getRunCodeAgentCapabilityMembers(bridge) {
|
|
19
|
+
const members = [];
|
|
20
|
+
if (isFunction(bridge.runResolvedSubagent))
|
|
21
|
+
members.push('run');
|
|
22
|
+
if (isFunction(bridge.runResolvedSubagentAsync) &&
|
|
23
|
+
isFunction(bridge.getSubagentResult) &&
|
|
24
|
+
isFunction(bridge.getSubagentStatus) &&
|
|
25
|
+
isFunction(bridge.cancelSubagentRun)) {
|
|
26
|
+
members.push(...ASYNC_LIFECYCLE_MEMBERS);
|
|
27
|
+
}
|
|
28
|
+
return members;
|
|
29
|
+
}
|
|
30
|
+
const isRecord = (value) => typeof value === 'object' && value !== null;
|
|
31
|
+
const rejectCall = (error) => ({
|
|
32
|
+
kind: 'result',
|
|
33
|
+
result: { ok: false, error },
|
|
34
|
+
});
|
|
35
|
+
const isAbortError = (error) => error instanceof Error && error.name === 'AbortError';
|
|
36
|
+
/**
|
|
37
|
+
* Extracts the pending tool call from a child run-loop interruption. Other
|
|
38
|
+
* interruption kinds — e.g. a child run-budget check-in — are not tool
|
|
39
|
+
* approvals: the caller leaves those pauses unapplied, so the child settles
|
|
40
|
+
* interrupted and the script keeps its existing catchable error.
|
|
41
|
+
*/
|
|
42
|
+
function extractChildToolApproval(interruption) {
|
|
43
|
+
if (!isRecord(interruption) || interruption.type !== 'tool_approval_item')
|
|
44
|
+
return undefined;
|
|
45
|
+
if (typeof interruption.name !== 'string' || interruption.name === '')
|
|
46
|
+
return undefined;
|
|
47
|
+
const argumentsText = typeof interruption.arguments === 'string' ? interruption.arguments : JSON.stringify(interruption.arguments ?? {});
|
|
48
|
+
let argumentsValue = {};
|
|
49
|
+
try {
|
|
50
|
+
argumentsValue = JSON.parse(argumentsText);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Registry evaluation is fail-closed for arguments it cannot inspect.
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
toolName: interruption.name,
|
|
57
|
+
argumentsText,
|
|
58
|
+
arguments: argumentsValue,
|
|
59
|
+
...(typeof interruption.callId === 'string' ? { callId: interruption.callId } : {}),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** `costRecords` and `nestedRunResult` are host-owned: possibly large, possibly not JSON-safe. */
|
|
63
|
+
const projectNestedResult = (result) => {
|
|
64
|
+
const { costRecords: _costRecords, nestedRunResult: _nestedRunResult, ...projected } = result;
|
|
65
|
+
// The host re-serializes capability results through JSON, so any plain-data
|
|
66
|
+
// projection is transportable even without a JsonValue index signature.
|
|
67
|
+
return projected;
|
|
68
|
+
};
|
|
69
|
+
const AGENT_MEMBERS = ['run', 'start', 'status', 'result', 'cancel'];
|
|
70
|
+
const LAUNCH_PARAM_FIELDS = new Set(['spec', 'worktree', 'name', 'continue_run_id']);
|
|
71
|
+
/** Light, admission-time param checks. Deep AgentSpec validation is the boundary's job. */
|
|
72
|
+
function launchParamError(member, params) {
|
|
73
|
+
const accepted = member === 'run' ? new Set(['spec', 'worktree']) : LAUNCH_PARAM_FIELDS;
|
|
74
|
+
for (const key of Object.keys(params)) {
|
|
75
|
+
if (!accepted.has(key))
|
|
76
|
+
return `unsupported param "${key}"; agent.${member} accepts ${[...accepted].join(', ')}.`;
|
|
77
|
+
}
|
|
78
|
+
if (!isRecord(params.spec) || Array.isArray(params.spec))
|
|
79
|
+
return 'spec must be a plain AgentSpec object.';
|
|
80
|
+
if (params.worktree !== undefined && typeof params.worktree !== 'string')
|
|
81
|
+
return 'worktree must be a string.';
|
|
82
|
+
if (params.name !== undefined && typeof params.name !== 'string')
|
|
83
|
+
return 'name must be a string.';
|
|
84
|
+
if (params.continue_run_id !== undefined && typeof params.continue_run_id !== 'string') {
|
|
85
|
+
return 'continue_run_id must be a string.';
|
|
86
|
+
}
|
|
87
|
+
if (member === 'start' && params.continue_run_id !== undefined) {
|
|
88
|
+
return 'continue_run_id is not supported by script agent.start until continuation authority can be verified.';
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
function lifecycleParamError(member, params) {
|
|
93
|
+
const accepted = member === 'status' ? new Set(['runId']) : new Set([member === 'result' ? 'runId' : 'target']);
|
|
94
|
+
for (const key of Object.keys(params)) {
|
|
95
|
+
if (!accepted.has(key))
|
|
96
|
+
return `unsupported param "${key}"; agent.${member} accepts ${[...accepted].join(', ')}.`;
|
|
97
|
+
}
|
|
98
|
+
const required = member === 'cancel' ? 'target' : 'runId';
|
|
99
|
+
if (member !== 'status' && (params[required] === undefined || typeof params[required] !== 'string')) {
|
|
100
|
+
return `${required} must be a string.`;
|
|
101
|
+
}
|
|
102
|
+
if (member === 'status' && params.runId !== undefined && typeof params.runId !== 'string') {
|
|
103
|
+
return 'runId must be a string.';
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The script-only `agent` capability of one run_code invocation.
|
|
109
|
+
*
|
|
110
|
+
* Every launch resolves an untrusted script AgentSpec through
|
|
111
|
+
* `resolveAgentSpecForChild` against the host-bound root authority snapshot
|
|
112
|
+
* before any bridge callback sees it; the boundary result — never the raw
|
|
113
|
+
* spec — is what reaches the host bridge. Start admission is a synchronous
|
|
114
|
+
* check-and-increment before resolution, so a script can never race itself
|
|
115
|
+
* past the launch cap, and an over-cap start is rejected before the manager
|
|
116
|
+
* launches anything while already-admitted siblings continue untouched.
|
|
117
|
+
*/
|
|
118
|
+
export function createRunCodeAgentCapability(deps, invocation) {
|
|
119
|
+
const members = getRunCodeAgentCapabilityMembers(deps);
|
|
120
|
+
if (members.length === 0) {
|
|
121
|
+
throw new Error('run_code agent capability requires a resolved-launch or async lifecycle bridge.');
|
|
122
|
+
}
|
|
123
|
+
// Synchronous admission counter: `prepare` never awaits between the cap
|
|
124
|
+
// check and the increment, so concurrent script starts cannot exceed it.
|
|
125
|
+
let startsAdmitted = 0;
|
|
126
|
+
/**
|
|
127
|
+
* Builds the per-call publisher that surfaces one foreground child approval
|
|
128
|
+
* pause through the session-owned decision owner. The capability attaches it
|
|
129
|
+
* only when the session owner and policy registry are bound; the decision is
|
|
130
|
+
* applied to the pause's exact retained continuation through `pause.apply`,
|
|
131
|
+
* never from script data, and the human wait is bracketed with the host
|
|
132
|
+
* work-clock hooks so paused children do not burn the script timeout.
|
|
133
|
+
*/
|
|
134
|
+
const childApprovalPublisher = (callContext) => {
|
|
135
|
+
const owner = deps.nestedApprovalOwner;
|
|
136
|
+
const registry = deps.approvalPolicyRegistry;
|
|
137
|
+
if (!owner || !registry)
|
|
138
|
+
return undefined;
|
|
139
|
+
return async (pause) => {
|
|
140
|
+
const approvalInfo = extractChildToolApproval(pause.interruption);
|
|
141
|
+
// Not a tool approval (e.g. a child run-budget check-in): leave the pause
|
|
142
|
+
// unapplied so the child settles interrupted and the script keeps its
|
|
143
|
+
// existing catchable error.
|
|
144
|
+
if (!approvalInfo)
|
|
145
|
+
return;
|
|
146
|
+
// The host wraps these on the handler per run; the clock pauses only
|
|
147
|
+
// while every admitted call is waiting.
|
|
148
|
+
handler.onWaiting?.(callContext);
|
|
149
|
+
try {
|
|
150
|
+
const resolution = await owner.request({
|
|
151
|
+
requestId: `${pause.runId}:child-approval:${pause.generation}`,
|
|
152
|
+
sessionId: deps.sessionId ?? 'unknown',
|
|
153
|
+
graphIdentity: deps.graphIdentity ?? {},
|
|
154
|
+
outerRunId: invocation.bridgeRunId,
|
|
155
|
+
nestedCallId: pause.runId,
|
|
156
|
+
toolName: approvalInfo.toolName,
|
|
157
|
+
preparedArguments: approvalInfo.arguments,
|
|
158
|
+
authorityContext: invocation.context,
|
|
159
|
+
approval: {
|
|
160
|
+
agentName: `Script child agent (${pause.role})`,
|
|
161
|
+
toolName: approvalInfo.toolName,
|
|
162
|
+
argumentsText: approvalInfo.argumentsText,
|
|
163
|
+
rawInterruption: null,
|
|
164
|
+
...(approvalInfo.callId !== undefined ? { callId: approvalInfo.callId } : {}),
|
|
165
|
+
},
|
|
166
|
+
signal: callContext.signal,
|
|
167
|
+
revalidate: async () => (await registry.evaluate({
|
|
168
|
+
toolName: approvalInfo.toolName,
|
|
169
|
+
args: approvalInfo.arguments,
|
|
170
|
+
context: invocation.context,
|
|
171
|
+
})).kind,
|
|
172
|
+
grant: (decision) => {
|
|
173
|
+
if (callContext.signal.aborted)
|
|
174
|
+
throw new Error('Tool execution was not approved.');
|
|
175
|
+
// Nested edit tools have no session edit-grant store. Do not claim
|
|
176
|
+
// a durable child edit authorization by mutating the root's state.
|
|
177
|
+
if (decision.answer === 'allow-edit-file-session' || decision.answer === 'allow-edit-folder-session') {
|
|
178
|
+
throw new Error('Session edit grants are unavailable for script child agents.');
|
|
179
|
+
}
|
|
180
|
+
// Session-owned grant memory (allow-session edits, docker, denied
|
|
181
|
+
// reads) applies exactly as the direct child approval path does.
|
|
182
|
+
const applied = applyApprovalGrant({
|
|
183
|
+
sessionId: deps.sessionId ?? 'unknown',
|
|
184
|
+
nestedCompatibility: deps.nestedCompatibility,
|
|
185
|
+
logger: deps.logger,
|
|
186
|
+
}, {
|
|
187
|
+
answer: decision.answer,
|
|
188
|
+
toolName: approvalInfo.toolName,
|
|
189
|
+
rawArguments: approvalInfo.argumentsText,
|
|
190
|
+
callId: approvalInfo.callId,
|
|
191
|
+
interruption: pause.interruption,
|
|
192
|
+
});
|
|
193
|
+
if (!applied.isApproved)
|
|
194
|
+
throw new Error('Tool execution was not approved.');
|
|
195
|
+
// One decision on the exact retained continuation: `apply` consumes
|
|
196
|
+
// only this pause's generation and returns false when stale.
|
|
197
|
+
const resumed = pause.apply(({ handle, interruption }) => {
|
|
198
|
+
handle.approve?.(interruption);
|
|
199
|
+
return true;
|
|
200
|
+
});
|
|
201
|
+
if (!resumed)
|
|
202
|
+
throw new Error('The child approval pause is no longer current.');
|
|
203
|
+
},
|
|
204
|
+
// The child's own loop dispatches after its continuation is approved;
|
|
205
|
+
// the host owns no tool call to run here.
|
|
206
|
+
dispatch: async () => true,
|
|
207
|
+
});
|
|
208
|
+
if (resolution.kind === 'denied') {
|
|
209
|
+
pause.apply(({ handle, interruption }) => {
|
|
210
|
+
handle.reject?.(interruption, { message: resolution.message });
|
|
211
|
+
return true;
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// `approved`: the grant already resumed the exact child continuation.
|
|
215
|
+
// `failed`: the grant threw before or while applying; the lease queue
|
|
216
|
+
// settles the child so the script keeps a truthful outcome.
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
handler.onResumed?.(callContext);
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
};
|
|
223
|
+
const handler = {
|
|
224
|
+
binding: { name: 'agent', kind: 'namespace', members },
|
|
225
|
+
limits: {
|
|
226
|
+
maxCalls: RUN_CODE_LIMITS.maxAgentCalls,
|
|
227
|
+
maxConcurrency: RUN_CODE_LIMITS.maxAgentConcurrency,
|
|
228
|
+
limitExceededMessage: `Agent call limit reached (${RUN_CODE_LIMITS.maxAgentCalls} agent.* calls per script run).`,
|
|
229
|
+
},
|
|
230
|
+
overBudget: ({ usedCalls, maxCalls }) => rejectCall(`Agent call limit reached (${maxCalls} agent.* calls per script run; ${usedCalls} admitted, ${Math.max(0, maxCalls - usedCalls)} remaining). Return the partial results you collected.`),
|
|
231
|
+
onAdmitted: (prepared, context) => {
|
|
232
|
+
const callId = `${invocation.bridgeRunId}:agent:${context.callId}`;
|
|
233
|
+
deps.onCallAdmitted?.(prepared.member, prepared.started, callId);
|
|
234
|
+
},
|
|
235
|
+
onAborted: (prepared, context, reason) => {
|
|
236
|
+
const callId = `${invocation.bridgeRunId}:agent:${context.callId}`;
|
|
237
|
+
deps.onCallSettled?.(prepared.member, prepared.started, callId, 'unknown', reason);
|
|
238
|
+
},
|
|
239
|
+
lane: (prepared) => (prepared.member === 'run' || prepared.member === 'start' ? 'default' : 'serial'),
|
|
240
|
+
prepare: (payload) => {
|
|
241
|
+
const started = Date.now();
|
|
242
|
+
const requested = typeof payload.member === 'string' ? payload.member : '';
|
|
243
|
+
if (!AGENT_MEMBERS.includes(requested)) {
|
|
244
|
+
return rejectCall(`Unknown agent member "${requested}". Available: ${members.join(', ')}.`);
|
|
245
|
+
}
|
|
246
|
+
const member = requested;
|
|
247
|
+
const params = isRecord(payload.params) ? payload.params : {};
|
|
248
|
+
if (member === 'run' || member === 'start') {
|
|
249
|
+
const paramError = launchParamError(member, params);
|
|
250
|
+
if (paramError)
|
|
251
|
+
return rejectCall(`agent.${member} params invalid: ${paramError}`);
|
|
252
|
+
// Admit the start before resolving so the cap holds regardless of what
|
|
253
|
+
// resolution does; a rejected spec consumes its admission like a
|
|
254
|
+
// launched one would, keeping the budget an honest upper bound.
|
|
255
|
+
if (startsAdmitted >= RUN_CODE_LIMITS.maxAgentStarts) {
|
|
256
|
+
return rejectCall(`Agent start limit reached (${RUN_CODE_LIMITS.maxAgentStarts} agent launches per script run; ` +
|
|
257
|
+
`${startsAdmitted} admitted, 0 remaining). Return the partial results you collected; ` +
|
|
258
|
+
'admitted launches are unaffected.');
|
|
259
|
+
}
|
|
260
|
+
startsAdmitted += 1;
|
|
261
|
+
const boundary = resolveAgentSpecForChild(params.spec, {
|
|
262
|
+
settings: deps.settings,
|
|
263
|
+
logger: deps.logger,
|
|
264
|
+
parent: deps.authority.parent,
|
|
265
|
+
readOnly: deps.authority.readOnly,
|
|
266
|
+
planMode: deps.authority.planMode,
|
|
267
|
+
...(typeof params.worktree === 'string' ? { worktree: params.worktree } : {}),
|
|
268
|
+
});
|
|
269
|
+
if (!boundary.ok) {
|
|
270
|
+
return rejectCall(`Agent specification rejected: ${boundary.errors.map((error) => error.message).join('; ')}`);
|
|
271
|
+
}
|
|
272
|
+
return member === 'run'
|
|
273
|
+
? { member, boundary, started }
|
|
274
|
+
: {
|
|
275
|
+
member,
|
|
276
|
+
boundary,
|
|
277
|
+
...(typeof params.name === 'string' ? { name: params.name } : {}),
|
|
278
|
+
started,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
const lifecycleError = lifecycleParamError(member, params);
|
|
282
|
+
if (lifecycleError)
|
|
283
|
+
return rejectCall(`agent.${member} params invalid: ${lifecycleError}`);
|
|
284
|
+
if (member === 'status') {
|
|
285
|
+
return {
|
|
286
|
+
member,
|
|
287
|
+
...(typeof params.runId === 'string' ? { runId: params.runId } : {}),
|
|
288
|
+
started,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
if (member === 'result') {
|
|
292
|
+
return { member, runId: params.runId, started };
|
|
293
|
+
}
|
|
294
|
+
return { member: 'cancel', target: params.target, started };
|
|
295
|
+
},
|
|
296
|
+
invoke: async (prepared, callContext) => {
|
|
297
|
+
const callId = `${invocation.bridgeRunId}:agent:${callContext.callId}`;
|
|
298
|
+
try {
|
|
299
|
+
const outcome = await (async () => {
|
|
300
|
+
if (prepared.member === 'run') {
|
|
301
|
+
try {
|
|
302
|
+
const publisher = childApprovalPublisher(callContext);
|
|
303
|
+
const nested = await deps.runResolvedSubagent.call(undefined, {
|
|
304
|
+
resolvedDefinition: prepared.boundary,
|
|
305
|
+
...(publisher ? { foregroundChildApproval: publisher } : {}),
|
|
306
|
+
}, invocation.context,
|
|
307
|
+
// The host controller signal aborts the child on script timeout or
|
|
308
|
+
// cancellation; the tool call id keeps foreground leases movable.
|
|
309
|
+
{
|
|
310
|
+
toolCall: { callId: `${invocation.bridgeRunId}:agent:${callContext.callId}` },
|
|
311
|
+
signal: callContext.signal,
|
|
312
|
+
});
|
|
313
|
+
if (nested.status === 'interrupted') {
|
|
314
|
+
return rejectCall('Child run interrupted (possibly awaiting a tool approval). The script cannot resume ' +
|
|
315
|
+
'this foreground child; use the direct subagent tool for approval-interactive work.');
|
|
316
|
+
}
|
|
317
|
+
return { kind: 'result', result: { ok: true, result: projectNestedResult(nested) } };
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
if (callContext.signal.aborted || isAbortError(error))
|
|
321
|
+
throw error;
|
|
322
|
+
return rejectCall(error instanceof Error ? error.message : String(error));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
if (prepared.member === 'start') {
|
|
326
|
+
try {
|
|
327
|
+
const handle = await deps.runResolvedSubagentAsync.call(undefined, {
|
|
328
|
+
resolvedDefinition: prepared.boundary,
|
|
329
|
+
...(prepared.name ? { name: prepared.name } : {}),
|
|
330
|
+
});
|
|
331
|
+
return {
|
|
332
|
+
kind: 'result',
|
|
333
|
+
result: {
|
|
334
|
+
ok: true,
|
|
335
|
+
result: {
|
|
336
|
+
runId: handle.runId,
|
|
337
|
+
...(handle.name ? { name: handle.name } : {}),
|
|
338
|
+
role: handle.role,
|
|
339
|
+
status: handle.status,
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
// Launch failures are script-catchable; the background run is never
|
|
346
|
+
// bound to this script's signal, so there is no abort case here.
|
|
347
|
+
return rejectCall(error instanceof Error ? error.message : String(error));
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
if (prepared.member === 'status') {
|
|
351
|
+
const status = deps.getSubagentStatus.call(undefined, prepared.runId !== undefined ? { runId: prepared.runId } : {}, invocation.context);
|
|
352
|
+
return { kind: 'result', result: { ok: true, result: status } };
|
|
353
|
+
}
|
|
354
|
+
if (prepared.member === 'result') {
|
|
355
|
+
try {
|
|
356
|
+
const settled = await deps.getSubagentResult.call(undefined, { runId: prepared.runId }, invocation.context, {
|
|
357
|
+
signal: callContext.signal,
|
|
358
|
+
});
|
|
359
|
+
return { kind: 'result', result: { ok: true, result: projectNestedResult(settled) } };
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
if (callContext.signal.aborted || isAbortError(error))
|
|
363
|
+
throw error;
|
|
364
|
+
return rejectCall(error instanceof Error ? error.message : String(error));
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
const acknowledgement = deps.cancelSubagentRun.call(undefined, { target: prepared.target });
|
|
368
|
+
return { kind: 'result', result: { ok: true, result: acknowledgement } };
|
|
369
|
+
})();
|
|
370
|
+
const result = outcome.kind === 'result' && isRecord(outcome.result) ? outcome.result : undefined;
|
|
371
|
+
const failed = outcome.kind === 'fail' || result?.ok === false;
|
|
372
|
+
const reason = failed && typeof result?.error === 'string' ? result.error : undefined;
|
|
373
|
+
deps.onCallSettled?.(prepared.member, prepared.started, callId, failed ? 'error' : 'ok', reason);
|
|
374
|
+
return outcome;
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
deps.onCallSettled?.(prepared.member, prepared.started, callId, 'error', error instanceof Error ? error.message : String(error));
|
|
378
|
+
throw error;
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
};
|
|
382
|
+
return handler;
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=run-code-agent-capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-code-agent-capability.js","sourceRoot":"","sources":["../../../../source/tools/system/run-code/run-code-agent-capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@ import type { ILoggingService } from '../../../services/service-interfaces.js';
|
|
|
4
4
|
import type { ToolApprovalPolicyRegistry } from '../../../services/approval/tool-approval-policy-registry.js';
|
|
5
5
|
import type { NestedApprovalOwner } from '../../../services/approval/nested-approval-owner.js';
|
|
6
6
|
import { type AnyToolDefinition, type ToolRegistry } from '../../types.js';
|
|
7
|
+
import type { AgentSpecAuthoritySnapshot } from '../../../services/agent-runtime/permission-boundary.js';
|
|
8
|
+
import { type RunCodeAgentSpecBridge } from './run-code-agent-capability.js';
|
|
7
9
|
import type { RunCodeActionOutcome } from './run-code-runtime-contract.js';
|
|
8
10
|
export type { RunCodeActionOutcome, RunCodeActionReceipt, RunCodeCallRecord } from './run-code-runtime-contract.js';
|
|
9
11
|
export declare const TOOL_NAME_RUN_CODE = "run_code";
|
|
@@ -12,6 +14,9 @@ export declare const TOOL_NAME_DESCRIBE = "describe";
|
|
|
12
14
|
export declare const RUN_CODE_LIMITS: {
|
|
13
15
|
readonly maxCalls: 200;
|
|
14
16
|
readonly maxConcurrency: 8;
|
|
17
|
+
readonly maxAgentStarts: 16;
|
|
18
|
+
readonly maxAgentConcurrency: 4;
|
|
19
|
+
readonly maxAgentCalls: 200;
|
|
15
20
|
readonly maxResultChars: 100000;
|
|
16
21
|
readonly maxMediaBytes: number;
|
|
17
22
|
readonly maxMediaTotalBytes: number;
|
|
@@ -67,6 +72,10 @@ export interface RunCodeRuntimeOptions {
|
|
|
67
72
|
nestedApprovalOwner?: NestedApprovalOwner;
|
|
68
73
|
sessionAccess?: import('../../../services/session/session-access-state.js').SessionAccessState;
|
|
69
74
|
nestedCompatibility?: import('../../../services/session/nested-tool-compatibility-state.js').NestedToolCompatibilityState;
|
|
75
|
+
/** Host-owned root authority snapshot; required by the agent capability. */
|
|
76
|
+
agentSpecAuthority?: AgentSpecAuthoritySnapshot;
|
|
77
|
+
/** Host-owned resolved-launch bridge; the agent capability exists only when active. */
|
|
78
|
+
agentBridge?: RunCodeAgentSpecBridge;
|
|
70
79
|
}
|
|
71
80
|
export interface RunCodeRuntimeInput {
|
|
72
81
|
code: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-code-runtime.d.ts","sourceRoot":"","sources":["../../../../source/tools/system/run-code/run-code-runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,OAAO,KAAK,EAGV,SAAS,EACV,MAAM,qDAAqD,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AAC9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAI/F,OAAO,EAA4B,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-code-runtime.d.ts","sourceRoot":"","sources":["../../../../source/tools/system/run-code/run-code-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { renderCompactSignature } from './tools-header.js';
|
|
|
11
11
|
import { MCP_TOOL_BINDING, describeMcpTool, isMcpToolDefinition, validateMcpArguments } from './mcp-script-surface.js';
|
|
12
12
|
import { getScriptedReturnContract, scriptedReturnContractJsonSchema, validateScriptedReturn, } from '../../scripted-return-contract.js';
|
|
13
13
|
import { WORKFLOW_PROHIBITED_TOOLS } from '../../../services/agent-runtime/workflow/workflow-evaluator.js';
|
|
14
|
+
import { createRunCodeAgentCapability, isRunCodeAgentBridgeActive, } from './run-code-agent-capability.js';
|
|
14
15
|
import { resolveWorkspacePath, resolveWorkspacePathPhysically } from '../../utils.js';
|
|
15
16
|
import { parseUpstreamApplyPatch } from '../../file/upstream-apply-patch.js';
|
|
16
17
|
import { TOOL_NAME_APPLY_PATCH } from '../../tool-names.js';
|
|
@@ -22,6 +23,11 @@ export const TOOL_NAME_DESCRIBE = 'describe';
|
|
|
22
23
|
export const RUN_CODE_LIMITS = {
|
|
23
24
|
maxCalls: 200,
|
|
24
25
|
maxConcurrency: 8,
|
|
26
|
+
// Agent capability budgets are separate from the tools ledger by design:
|
|
27
|
+
// launching child agents is scarcer and more expensive than a tool call.
|
|
28
|
+
maxAgentStarts: 16,
|
|
29
|
+
maxAgentConcurrency: 4,
|
|
30
|
+
maxAgentCalls: 200,
|
|
25
31
|
maxResultChars: 100_000,
|
|
26
32
|
maxMediaBytes: 8 * 1024 * 1024,
|
|
27
33
|
maxMediaTotalBytes: 32 * 1024 * 1024,
|
|
@@ -421,6 +427,8 @@ export function createRunCodeRuntime(options) {
|
|
|
421
427
|
const receipts = [];
|
|
422
428
|
const pendingReceiptByCallId = new Map();
|
|
423
429
|
const abortedCallIds = new Set();
|
|
430
|
+
const agentCallIndexes = new Map();
|
|
431
|
+
const abortedAgentCallIds = new Set();
|
|
424
432
|
let rejectedSeq = 0;
|
|
425
433
|
const output = [];
|
|
426
434
|
const consoleValues = [];
|
|
@@ -460,6 +468,29 @@ export function createRunCodeRuntime(options) {
|
|
|
460
468
|
else
|
|
461
469
|
receipts.push(value);
|
|
462
470
|
};
|
|
471
|
+
const recordAgentCall = (member, started, callId, outcome, reason) => {
|
|
472
|
+
if (abortedAgentCallIds.has(callId) && outcome !== 'unknown')
|
|
473
|
+
return;
|
|
474
|
+
let index = agentCallIndexes.get(callId);
|
|
475
|
+
if (index === undefined) {
|
|
476
|
+
index = calls.length;
|
|
477
|
+
agentCallIndexes.set(callId, index);
|
|
478
|
+
calls.push({ tool: `agent.${member}`, outcome: 'unknown', durationMs: 0, callId });
|
|
479
|
+
if (member === 'start')
|
|
480
|
+
recordReceipt(callId, 'agent.start', 'unknown');
|
|
481
|
+
}
|
|
482
|
+
calls[index] = {
|
|
483
|
+
tool: `agent.${member}`,
|
|
484
|
+
outcome,
|
|
485
|
+
durationMs: Date.now() - started,
|
|
486
|
+
callId,
|
|
487
|
+
...(reason ? { reason: clipReason(reason) } : {}),
|
|
488
|
+
};
|
|
489
|
+
if (member === 'start') {
|
|
490
|
+
const actionOutcome = outcome === 'ok' ? 'applied' : outcome === 'error' ? 'failed' : 'unknown';
|
|
491
|
+
recordReceipt(callId, 'agent.start', actionOutcome, reason);
|
|
492
|
+
}
|
|
493
|
+
};
|
|
463
494
|
const tools = {
|
|
464
495
|
binding: {
|
|
465
496
|
name: 'tools',
|
|
@@ -691,6 +722,28 @@ export function createRunCodeRuntime(options) {
|
|
|
691
722
|
}
|
|
692
723
|
},
|
|
693
724
|
};
|
|
725
|
+
const capabilities = { tools };
|
|
726
|
+
if (options.agentBridge && options.agentSpecAuthority && isRunCodeAgentBridgeActive(options.agentBridge)) {
|
|
727
|
+
capabilities.agent = createRunCodeAgentCapability({
|
|
728
|
+
...options.agentBridge,
|
|
729
|
+
authority: options.agentSpecAuthority,
|
|
730
|
+
logger: loggingService,
|
|
731
|
+
// Session-owned child approval surfaces: without an owner the child
|
|
732
|
+
// interruption settles as the catchable interrupted error.
|
|
733
|
+
...(options.nestedApprovalOwner
|
|
734
|
+
? { nestedApprovalOwner: options.nestedApprovalOwner, approvalPolicyRegistry: approvalRegistry }
|
|
735
|
+
: {}),
|
|
736
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
737
|
+
...(options.graphIdentity ? { graphIdentity: options.graphIdentity } : {}),
|
|
738
|
+
...(options.nestedCompatibility ? { nestedCompatibility: options.nestedCompatibility } : {}),
|
|
739
|
+
onCallAdmitted: (member, started, callId) => recordAgentCall(member, started, callId, 'unknown'),
|
|
740
|
+
onCallSettled: (member, started, callId, outcome, reason) => {
|
|
741
|
+
if (outcome === 'unknown' && reason)
|
|
742
|
+
abortedAgentCallIds.add(callId);
|
|
743
|
+
recordAgentCall(member, started, callId, outcome, reason);
|
|
744
|
+
},
|
|
745
|
+
}, { bridgeRunId, context: input.context });
|
|
746
|
+
}
|
|
694
747
|
const settleResolved = async (prepared, raw, callId) => {
|
|
695
748
|
try {
|
|
696
749
|
if (isActionTool(prepared.tool.name)) {
|
|
@@ -732,7 +785,7 @@ export function createRunCodeRuntime(options) {
|
|
|
732
785
|
const result = await new SandboxedCodeHostImpl().run({
|
|
733
786
|
code: input.code,
|
|
734
787
|
inputData: input.inputs,
|
|
735
|
-
capabilities
|
|
788
|
+
capabilities,
|
|
736
789
|
limits: {
|
|
737
790
|
timeoutMs: input.timeout,
|
|
738
791
|
maxCodeBytes: RUN_CODE_LIMITS.maxCodeBytes,
|