@stigmer/runner 3.12.3 → 3.12.5
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/.build-fingerprint +1 -1
- package/dist/activities/call-http.js +12 -0
- package/dist/activities/call-http.js.map +1 -1
- package/dist/activities/call-llm.d.ts +18 -0
- package/dist/activities/call-llm.js +56 -2
- package/dist/activities/call-llm.js.map +1 -1
- package/dist/activities/execute-cursor/agent-session-cache.d.ts +72 -0
- package/dist/activities/execute-cursor/agent-session-cache.js +186 -0
- package/dist/activities/execute-cursor/agent-session-cache.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-mcp-config.d.ts +45 -0
- package/dist/activities/execute-cursor/cursor-mcp-config.js +76 -0
- package/dist/activities/execute-cursor/cursor-mcp-config.js.map +1 -0
- package/dist/activities/execute-cursor/index.d.ts +10 -1
- package/dist/activities/execute-cursor/index.js +108 -57
- package/dist/activities/execute-cursor/index.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +13 -2
- package/dist/activities/execute-cursor/prompt-builder.js +11 -0
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/service-tier.d.ts +5 -15
- package/dist/activities/execute-cursor/service-tier.js +5 -21
- package/dist/activities/execute-cursor/service-tier.js.map +1 -1
- package/dist/activities/execute-cursor/session-lifecycle.d.ts +1 -1
- package/dist/activities/execute-cursor/skill-resolver.d.ts +2 -21
- package/dist/activities/execute-cursor/skill-resolver.js +5 -108
- package/dist/activities/execute-cursor/skill-resolver.js.map +1 -1
- package/dist/activities/execute-deep-agent/approval-file-change.d.ts +9 -0
- package/dist/activities/execute-deep-agent/approval-file-change.js +2 -1
- package/dist/activities/execute-deep-agent/approval-file-change.js.map +1 -1
- package/dist/activities/execute-deep-agent/cas-capture-backend.d.ts +18 -1
- package/dist/activities/execute-deep-agent/cas-capture-backend.js +20 -3
- package/dist/activities/execute-deep-agent/cas-capture-backend.js.map +1 -1
- package/dist/activities/execute-deep-agent/index.js +57 -5
- package/dist/activities/execute-deep-agent/index.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +9 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js +10 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/setup.js +31 -16
- package/dist/activities/execute-deep-agent/setup.js.map +1 -1
- package/dist/activities/execute-deep-agent/shell-env.d.ts +8 -5
- package/dist/activities/execute-deep-agent/shell-env.js +10 -7
- package/dist/activities/execute-deep-agent/shell-env.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.js +17 -11
- package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +3 -3
- package/dist/config.js +10 -5
- package/dist/config.js.map +1 -1
- package/dist/encryption/config.js +7 -2
- package/dist/encryption/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/main.js +12 -6
- package/dist/main.js.map +1 -1
- package/dist/middleware/path-normalization.d.ts +49 -49
- package/dist/middleware/path-normalization.js +73 -84
- package/dist/middleware/path-normalization.js.map +1 -1
- package/dist/middleware/types.d.ts +3 -3
- package/dist/payload-codecs.js +2 -1
- package/dist/payload-codecs.js.map +1 -1
- package/dist/runner-manager.d.ts +1 -1
- package/dist/runner-manager.js +42 -22
- package/dist/runner-manager.js.map +1 -1
- package/dist/runner.js +30 -6
- package/dist/runner.js.map +1 -1
- package/dist/shared/args-preview.d.ts +8 -0
- package/dist/shared/args-preview.js +14 -3
- package/dist/shared/args-preview.js.map +1 -1
- package/dist/shared/artifact-storage.d.ts +11 -1
- package/dist/shared/artifact-storage.js +10 -1
- package/dist/shared/artifact-storage.js.map +1 -1
- package/dist/shared/declared-preferences.d.ts +47 -0
- package/dist/shared/declared-preferences.js +64 -0
- package/dist/shared/declared-preferences.js.map +1 -0
- package/dist/shared/fingerprint-secret.d.ts +3 -2
- package/dist/shared/fingerprint-secret.js +5 -3
- package/dist/shared/fingerprint-secret.js.map +1 -1
- package/dist/shared/llm-backend.js +8 -1
- package/dist/shared/llm-backend.js.map +1 -1
- package/dist/shared/mcp-enabled-tools.d.ts +2 -3
- package/dist/shared/mcp-enabled-tools.js +2 -3
- package/dist/shared/mcp-enabled-tools.js.map +1 -1
- package/dist/shared/mcp-resolver.d.ts +20 -15
- package/dist/shared/mcp-resolver.js +11 -12
- package/dist/shared/mcp-resolver.js.map +1 -1
- package/dist/shared/model-client.d.ts +15 -0
- package/dist/shared/model-client.js +57 -13
- package/dist/shared/model-client.js.map +1 -1
- package/dist/shared/placeholder-resolver.d.ts +9 -2
- package/dist/shared/placeholder-resolver.js +9 -2
- package/dist/shared/placeholder-resolver.js.map +1 -1
- package/dist/shared/plan-mode-permissions.d.ts +26 -46
- package/dist/shared/plan-mode-permissions.js +27 -55
- package/dist/shared/plan-mode-permissions.js.map +1 -1
- package/dist/shared/registry-endpoint.d.ts +5 -0
- package/dist/shared/registry-endpoint.js +7 -1
- package/dist/shared/registry-endpoint.js.map +1 -1
- package/dist/shared/runner-credential-keys.d.ts +26 -1
- package/dist/shared/runner-credential-keys.js +34 -1
- package/dist/shared/runner-credential-keys.js.map +1 -1
- package/dist/shared/runner-credential-store.d.ts +77 -0
- package/dist/shared/runner-credential-store.js +111 -0
- package/dist/shared/runner-credential-store.js.map +1 -0
- package/dist/shared/service-tier.d.ts +55 -0
- package/dist/shared/service-tier.js +67 -0
- package/dist/shared/service-tier.js.map +1 -0
- package/dist/shared/skill-mount.d.ts +89 -0
- package/dist/shared/skill-mount.js +142 -0
- package/dist/shared/skill-mount.js.map +1 -0
- package/dist/shared/skill-writer.d.ts +28 -26
- package/dist/shared/skill-writer.js +79 -102
- package/dist/shared/skill-writer.js.map +1 -1
- package/dist/shared/worker-shutdown.d.ts +67 -0
- package/dist/shared/worker-shutdown.js +79 -0
- package/dist/shared/worker-shutdown.js.map +1 -0
- package/dist/shared/workspace/types.d.ts +3 -2
- package/dist/shared/zip-extract.d.ts +10 -3
- package/dist/shared/zip-extract.js +10 -3
- package/dist/shared/zip-extract.js.map +1 -1
- package/dist/workflow-engine/loader.js +38 -1
- package/dist/workflow-engine/loader.js.map +1 -1
- package/dist/workflow-engine/tasks/call-function.d.ts +14 -0
- package/dist/workflow-engine/tasks/call-function.js +49 -5
- package/dist/workflow-engine/tasks/call-function.js.map +1 -1
- package/dist/workflow-engine/tasks/human-input.js +23 -2
- package/dist/workflow-engine/tasks/human-input.js.map +1 -1
- package/dist/workflow-engine/types.d.ts +6 -0
- package/dist/workflow-engine/types.js.map +1 -1
- package/dist/workflows/engine-core.js +36 -8
- package/dist/workflows/engine-core.js.map +1 -1
- package/package.json +15 -11
- package/src/activities/__tests__/call-http.test.ts +36 -0
- package/src/activities/__tests__/call-llm.test.ts +77 -0
- package/src/activities/call-http.ts +17 -0
- package/src/activities/call-llm.ts +78 -2
- package/src/activities/execute-cursor/__tests__/agent-session-cache.test.ts +220 -0
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +50 -0
- package/src/activities/execute-cursor/__tests__/cursor-mcp-config.test.ts +111 -0
- package/src/activities/execute-cursor/__tests__/service-tier.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/skill-resolver.test.ts +3 -94
- package/src/activities/execute-cursor/agent-session-cache.ts +229 -0
- package/src/activities/execute-cursor/cursor-mcp-config.ts +107 -0
- package/src/activities/execute-cursor/index.ts +129 -55
- package/src/activities/execute-cursor/prompt-builder.ts +29 -2
- package/src/activities/execute-cursor/service-tier.ts +5 -29
- package/src/activities/execute-cursor/session-lifecycle.ts +1 -1
- package/src/activities/execute-cursor/skill-resolver.ts +10 -137
- package/src/activities/execute-deep-agent/__tests__/approval-file-change.test.ts +15 -0
- package/src/activities/execute-deep-agent/__tests__/cas-capture-backend.test.ts +75 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-reject.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-approve-all.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-history.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/index.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/plan-mode-path-normalization.test.ts +42 -29
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +52 -0
- package/src/activities/execute-deep-agent/__tests__/sequential-gate-resume.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-plan-mode-permissions.test.ts +11 -8
- package/src/activities/execute-deep-agent/approval-file-change.ts +11 -1
- package/src/activities/execute-deep-agent/cas-capture-backend.ts +20 -3
- package/src/activities/execute-deep-agent/index.ts +57 -5
- package/src/activities/execute-deep-agent/prompt-builder.ts +22 -0
- package/src/activities/execute-deep-agent/setup.ts +36 -19
- package/src/activities/execute-deep-agent/shell-env.ts +10 -7
- package/src/activities/execute-deep-agent/subagent-transformer.ts +19 -12
- package/src/activities/execute-deep-agent/subagent-wiring.ts +3 -3
- package/src/config.ts +10 -5
- package/src/encryption/config.ts +8 -2
- package/src/index.ts +1 -1
- package/src/main.ts +16 -6
- package/src/middleware/__tests__/path-normalization.test.ts +32 -32
- package/src/middleware/path-normalization.ts +78 -90
- package/src/middleware/types.ts +3 -3
- package/src/payload-codecs.ts +2 -1
- package/src/runner-manager.ts +55 -22
- package/src/runner.ts +39 -6
- package/src/shared/__tests__/artifact-storage.test.ts +28 -0
- package/src/shared/__tests__/bedrock-seam.test.ts +5 -5
- package/src/shared/__tests__/declared-preferences.test.ts +109 -0
- package/src/shared/__tests__/foundry-seam.test.ts +5 -5
- package/src/shared/__tests__/model-client.test.ts +99 -0
- package/src/shared/__tests__/plan-mode-permissions.test.ts +15 -44
- package/src/shared/__tests__/runner-credential-store.test.ts +155 -0
- package/src/shared/__tests__/skill-mount.test.ts +238 -0
- package/src/shared/__tests__/skill-writer.test.ts +151 -128
- package/src/shared/__tests__/vertex-adapter.test.ts +30 -3
- package/src/shared/__tests__/vertex-seam.test.ts +5 -5
- package/src/shared/__tests__/worker-shutdown.test.ts +101 -0
- package/src/shared/__tests__/zip-extract.test.ts +46 -11
- package/src/shared/args-preview.ts +17 -3
- package/src/shared/artifact-storage.ts +20 -1
- package/src/shared/declared-preferences.ts +84 -0
- package/src/shared/fingerprint-secret.ts +5 -3
- package/src/shared/llm-backend.ts +7 -1
- package/src/shared/mcp-enabled-tools.ts +2 -3
- package/src/shared/mcp-resolver.ts +20 -20
- package/src/shared/model-client.ts +76 -13
- package/src/shared/placeholder-resolver.ts +9 -2
- package/src/shared/plan-mode-permissions.ts +27 -58
- package/src/shared/registry-endpoint.ts +9 -1
- package/src/shared/runner-credential-keys.ts +36 -1
- package/src/shared/runner-credential-store.ts +115 -0
- package/src/shared/service-tier.ts +78 -0
- package/src/shared/skill-mount.ts +179 -0
- package/src/shared/skill-writer.ts +96 -130
- package/src/shared/worker-shutdown.ts +99 -0
- package/src/shared/workspace/types.ts +3 -2
- package/src/shared/zip-extract.ts +14 -7
- package/src/workflow-engine/__tests__/golden-execution.test.ts +20 -1
- package/src/workflow-engine/__tests__/loader.test.ts +51 -0
- package/src/workflow-engine/__tests__/tasks/call-function.test.ts +105 -0
- package/src/workflow-engine/__tests__/tasks/human-input.test.ts +117 -0
- package/src/workflow-engine/loader.ts +46 -1
- package/src/workflow-engine/tasks/call-function.ts +74 -13
- package/src/workflow-engine/tasks/human-input.ts +33 -5
- package/src/workflow-engine/types.ts +6 -0
- package/src/workflows/engine-core.ts +39 -8
- package/dist/activities/execute-cursor/connect-backfill.d.ts +0 -19
- package/dist/activities/execute-cursor/connect-backfill.js +0 -27
- package/dist/activities/execute-cursor/connect-backfill.js.map +0 -1
- package/dist/activities/execute-cursor/mcp-resolver.d.ts +0 -120
- package/dist/activities/execute-cursor/mcp-resolver.js +0 -194
- package/dist/activities/execute-cursor/mcp-resolver.js.map +0 -1
- package/dist/activities/execute-cursor/placeholder-resolver.d.ts +0 -34
- package/dist/activities/execute-cursor/placeholder-resolver.js +0 -82
- package/dist/activities/execute-cursor/placeholder-resolver.js.map +0 -1
- package/src/activities/execute-cursor/__tests__/mcp-resolver.test.ts +0 -125
- package/src/activities/execute-cursor/connect-backfill.ts +0 -52
- package/src/activities/execute-cursor/mcp-resolver.ts +0 -324
- package/src/activities/execute-cursor/placeholder-resolver.ts +0 -109
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
* Resolves Stigmer McpServerUsage references into an intermediate
|
|
3
3
|
* ResolvedMcpServer format.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
5
|
+
* THE single resolver for both harnesses (oss#387 retired the Cursor
|
|
6
|
+
* harness's near-duplicate): the deep-agent harness
|
|
7
|
+
* (execute-deep-agent/setup.ts), the Cursor harness
|
|
8
|
+
* (execute-cursor/index.ts), the connect backfill
|
|
9
|
+
* (shared/connect-backfill.ts), and the discovery activity
|
|
10
|
+
* (activities/discover-mcp-server.ts, via mcpServerToResolved) all consume
|
|
11
|
+
* it. Each harness maps the result into its SDK format at the last hop:
|
|
12
|
+
* toMcpClientConfig (shared/mcp-manager.ts) for LangChain,
|
|
13
|
+
* toCursorMcpConfig (execute-cursor/cursor-mcp-config.ts) for the Cursor
|
|
14
|
+
* SDK — so a behavioral change here (like the transport guard) lands in
|
|
15
|
+
* both execution paths by construction.
|
|
12
16
|
*/
|
|
13
17
|
import type { McpServerUsage, ToolApprovalOverride } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/spec_pb";
|
|
14
18
|
import type { McpServer } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
@@ -38,8 +42,11 @@ export interface ResolvedMcpServer {
|
|
|
38
42
|
* enabled_tools, falling back to the server's default_enabled_tools when
|
|
39
43
|
* the usage's list is empty (see shared/mcp-enabled-tools.ts). Absent when
|
|
40
44
|
* unrestricted — which keeps synthesized attachment servers (built without
|
|
41
|
-
* a usage) and the discovery path unfiltered by construction.
|
|
42
|
-
*
|
|
45
|
+
* a usage) and the discovery path unfiltered by construction. Enforcement
|
|
46
|
+
* is per-harness: the deep-agent path filters at connect time
|
|
47
|
+
* (connectMcpServers, shared/mcp-manager.ts); the Cursor SDK config cannot
|
|
48
|
+
* hide tools, so that harness denies non-enabled calls in the HITL hook
|
|
49
|
+
* (see hook-script.ts).
|
|
43
50
|
*/
|
|
44
51
|
enabledTools?: string[];
|
|
45
52
|
/**
|
|
@@ -48,11 +55,10 @@ export interface ResolvedMcpServer {
|
|
|
48
55
|
* override to its own server — a flat cross-server list is how an
|
|
49
56
|
* override once leaked onto (or silently un-gated) a same-named tool on
|
|
50
57
|
* another server. Deliberately REQUIRED, not optional: empty means "no
|
|
51
|
-
* overrides", and every construction site — including the
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* (shared/approval-policy.ts).
|
|
58
|
+
* overrides", and every construction site — including the synthesized
|
|
59
|
+
* attachments, which have no usage and therefore no layer 3 — must say so
|
|
60
|
+
* explicitly, so a forgotten site cannot compile. Consumed by
|
|
61
|
+
* mergeApprovalPolicies (shared/approval-policy.ts).
|
|
56
62
|
*/
|
|
57
63
|
toolApprovalOverrides: ToolApprovalOverride[];
|
|
58
64
|
}
|
|
@@ -69,7 +75,6 @@ export interface McpResolutionResult {
|
|
|
69
75
|
*/
|
|
70
76
|
export declare function resolveMcpServers(client: StigmerClient, usages: McpServerUsage[], envVars: Record<string, string>, transportPosture: McpTransportPosture): Promise<McpResolutionResult>;
|
|
71
77
|
export declare function mcpServerToResolved(server: McpServer, slug: string, envVars: Record<string, string>, usageEnabledTools?: readonly string[], usageToolApprovalOverrides?: ToolApprovalOverride[]): ResolvedMcpServer | null;
|
|
72
|
-
export declare function extractMcpServerSlugs(usages: McpServerUsage[]): string[];
|
|
73
78
|
/**
|
|
74
79
|
* Merge MCP server usages from agent (base) and session (overlay).
|
|
75
80
|
*
|
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
* Resolves Stigmer McpServerUsage references into an intermediate
|
|
3
3
|
* ResolvedMcpServer format.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
5
|
+
* THE single resolver for both harnesses (oss#387 retired the Cursor
|
|
6
|
+
* harness's near-duplicate): the deep-agent harness
|
|
7
|
+
* (execute-deep-agent/setup.ts), the Cursor harness
|
|
8
|
+
* (execute-cursor/index.ts), the connect backfill
|
|
9
|
+
* (shared/connect-backfill.ts), and the discovery activity
|
|
10
|
+
* (activities/discover-mcp-server.ts, via mcpServerToResolved) all consume
|
|
11
|
+
* it. Each harness maps the result into its SDK format at the last hop:
|
|
12
|
+
* toMcpClientConfig (shared/mcp-manager.ts) for LangChain,
|
|
13
|
+
* toCursorMcpConfig (execute-cursor/cursor-mcp-config.ts) for the Cursor
|
|
14
|
+
* SDK — so a behavioral change here (like the transport guard) lands in
|
|
15
|
+
* both execution paths by construction.
|
|
12
16
|
*/
|
|
13
17
|
import { assertTransportAllowed, McpTransportError, } from "./mcp-transport-guard.js";
|
|
14
18
|
import { resolveHeaders, resolvePlaceholders, filterEnvToDeclaredKeys, PlaceholderResolutionError, } from "./placeholder-resolver.js";
|
|
@@ -112,11 +116,6 @@ export function mcpServerToResolved(server, slug, envVars, usageEnabledTools, us
|
|
|
112
116
|
return null;
|
|
113
117
|
}
|
|
114
118
|
}
|
|
115
|
-
export function extractMcpServerSlugs(usages) {
|
|
116
|
-
return usages
|
|
117
|
-
.map((u) => u.mcpServerRef?.slug)
|
|
118
|
-
.filter((s) => !!s);
|
|
119
|
-
}
|
|
120
119
|
/**
|
|
121
120
|
* Merge MCP server usages from agent (base) and session (overlay).
|
|
122
121
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-resolver.js","sourceRoot":"","sources":["../../src/shared/mcp-resolver.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp-resolver.js","sourceRoot":"","sources":["../../src/shared/mcp-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
|
|
16
16
|
import { type LlmProvider } from "./llm-proxy.js";
|
|
17
|
+
import { type EffectiveServiceTier } from "./service-tier.js";
|
|
17
18
|
export interface BuildChatModelOptions {
|
|
18
19
|
/** Registry id ("claude-haiku-4.5"), "provider:model", or a provider API id. */
|
|
19
20
|
readonly modelName: string;
|
|
@@ -42,6 +43,20 @@ export interface BuildChatModelOptions {
|
|
|
42
43
|
*/
|
|
43
44
|
readonly timeoutMs?: number;
|
|
44
45
|
readonly maxRetries?: number;
|
|
46
|
+
/**
|
|
47
|
+
* The execution's EFFECTIVE service tier (stigmer/stigmer#361) — already
|
|
48
|
+
* resolved by the caller (resolveEffectiveServiceTier), never
|
|
49
|
+
* UNSPECIFIED. When set, every provider request pins its tier explicitly
|
|
50
|
+
* (OpenAI `service_tier`; Anthropic `service_tier` via invocationKwargs)
|
|
51
|
+
* so the provider ACCOUNT's default can never pick the price — the #357
|
|
52
|
+
* contract, held on the native harness. Deliberately optional:
|
|
53
|
+
* platform-internal utility calls (tool-approval classification, session
|
|
54
|
+
* subjects, structured extraction, workflow llm_call) are not the
|
|
55
|
+
* execution's own turns and send no tier — the provider treats an absent
|
|
56
|
+
* parameter as its standard behavior, and those calls' models are
|
|
57
|
+
* platform-chosen economy models.
|
|
58
|
+
*/
|
|
59
|
+
readonly serviceTier?: EffectiveServiceTier;
|
|
45
60
|
}
|
|
46
61
|
export interface BuiltChatModel {
|
|
47
62
|
readonly model: BaseChatModel;
|
|
@@ -17,6 +17,8 @@ import { ChatOpenAI } from "@langchain/openai";
|
|
|
17
17
|
import { inferProvider, stripProviderPrefix, resolveProxyBaseUrl, buildProxyHeaders, } from "./llm-proxy.js";
|
|
18
18
|
import { resolveAnthropicBackend, checkVertexPrerequisites, checkBedrockPrerequisites, checkFoundryPrerequisites, toVertexModelId, toBedrockModelId, toFoundryDeploymentName, } from "./llm-backend.js";
|
|
19
19
|
import { resolveToApiModelId } from "./model-registry.js";
|
|
20
|
+
import { toAnthropicServiceTier, toOpenAiServiceTier, } from "./service-tier.js";
|
|
21
|
+
import { getRunnerSecret } from "./runner-credential-store.js";
|
|
20
22
|
/**
|
|
21
23
|
* The operator's request-timeout bound. Only a positive integer means
|
|
22
24
|
* "bound the request" — unset, non-numeric, zero, and negative all
|
|
@@ -63,11 +65,11 @@ export async function buildChatModel(opts) {
|
|
|
63
65
|
// tests. Prerequisites are re-checked here (not only in
|
|
64
66
|
// the factories' preflight) so paths that construct models without a
|
|
65
67
|
// runner factory still fail at dispatch with the catalog message instead
|
|
66
|
-
// of mid-request.
|
|
67
|
-
// standard conventions (GCP: CLOUD_ML_REGION + ADC; AWS: AWS_REGION +
|
|
68
|
-
// the credential chain
|
|
69
|
-
// ANTHROPIC_FOUNDRY_API_KEY
|
|
70
|
-
//
|
|
68
|
+
// of mid-request. Ambient credentials are read natively by each SDK from
|
|
69
|
+
// its standard conventions (GCP: CLOUD_ML_REGION + ADC; AWS: AWS_REGION +
|
|
70
|
+
// the credential chain); runner-held keys (AWS_BEARER_TOKEN_BEDROCK,
|
|
71
|
+
// ANTHROPIC_FOUNDRY_API_KEY) are passed explicitly from the credential
|
|
72
|
+
// store because the boot capture empties their env slots (#508).
|
|
71
73
|
let backendCreateClient;
|
|
72
74
|
let wireModelId = apiModelId;
|
|
73
75
|
let maxTokens = opts.maxTokens;
|
|
@@ -84,7 +86,16 @@ export async function buildChatModel(opts) {
|
|
|
84
86
|
if (prereq !== null)
|
|
85
87
|
throw new Error(prereq);
|
|
86
88
|
const { AnthropicBedrock } = await import("@anthropic-ai/bedrock-sdk");
|
|
87
|
-
|
|
89
|
+
// The SDK's own default for `apiKey` is process.env.AWS_BEARER_TOKEN_BEDROCK,
|
|
90
|
+
// which the boot capture has emptied (#508) — hand it the stored value
|
|
91
|
+
// explicitly. `undefined` when absent preserves the SDK's fallthrough to
|
|
92
|
+
// the ambient AWS credential chain (env keys, IRSA, config files).
|
|
93
|
+
const bedrockBearerToken = getRunnerSecret("AWS_BEARER_TOKEN_BEDROCK");
|
|
94
|
+
backendCreateClient = (options) => new AnthropicBedrock({
|
|
95
|
+
apiKey: bedrockBearerToken,
|
|
96
|
+
maxRetries: options.maxRetries,
|
|
97
|
+
timeout: options.timeout,
|
|
98
|
+
});
|
|
88
99
|
wireModelId = toBedrockModelId(apiModelId);
|
|
89
100
|
if (maxTokens === undefined) {
|
|
90
101
|
// LangChain's per-model maxTokens table prefix-matches the model
|
|
@@ -115,15 +126,20 @@ export async function buildChatModel(opts) {
|
|
|
115
126
|
// so refreshed tokens flow without reconstruction (pinned by
|
|
116
127
|
// foundry-seam.test.ts). Endpoint (resource or base URL) and the key
|
|
117
128
|
// are read natively by the SDK from its own env vars.
|
|
129
|
+
// The SDK's own default for `apiKey` is process.env.ANTHROPIC_FOUNDRY_API_KEY,
|
|
130
|
+
// which the boot capture has emptied (#508) — resolve it from the store
|
|
131
|
+
// and hand it over explicitly. The either/or stays intact: exactly one of
|
|
132
|
+
// apiKey / azureADTokenProvider reaches the constructor.
|
|
133
|
+
const foundryApiKey = getRunnerSecret("ANTHROPIC_FOUNDRY_API_KEY")?.trim() || undefined;
|
|
118
134
|
let azureADTokenProvider;
|
|
119
|
-
if (!
|
|
135
|
+
if (!foundryApiKey) {
|
|
120
136
|
const { DefaultAzureCredential, getBearerTokenProvider } = await import("@azure/identity");
|
|
121
137
|
azureADTokenProvider = getBearerTokenProvider(new DefaultAzureCredential(), "https://ai.azure.com/.default");
|
|
122
138
|
}
|
|
123
139
|
backendCreateClient = (options) => new AnthropicFoundry({
|
|
124
140
|
maxRetries: options.maxRetries,
|
|
125
141
|
timeout: options.timeout,
|
|
126
|
-
...(
|
|
142
|
+
...(foundryApiKey ? { apiKey: foundryApiKey } : { azureADTokenProvider }),
|
|
127
143
|
});
|
|
128
144
|
// Unlike the vertex/bedrock ids, the deployment name needs no maxTokens
|
|
129
145
|
// handling: stripping the snapshot date preserves LangChain's per-model
|
|
@@ -137,18 +153,26 @@ export async function buildChatModel(opts) {
|
|
|
137
153
|
const headers = opts.proxyEndpoint && opts.stigmerToken
|
|
138
154
|
? buildProxyHeaders(opts.stigmerToken, opts.headerScope ?? {})
|
|
139
155
|
: undefined;
|
|
140
|
-
// Proxy mode authenticates with the Stigmer token; direct mode falls back
|
|
141
|
-
// the provider's own
|
|
156
|
+
// Proxy mode authenticates with the Stigmer token; direct mode falls back
|
|
157
|
+
// to the provider's own key, resolved from the credential store (the boot
|
|
158
|
+
// capture moved it out of process.env, #508).
|
|
142
159
|
const apiKey = opts.proxyEndpoint
|
|
143
160
|
? (opts.stigmerToken ?? "proxy-managed")
|
|
144
161
|
: provider === "openai"
|
|
145
|
-
? (
|
|
146
|
-
: (
|
|
162
|
+
? (getRunnerSecret("OPENAI_API_KEY") ?? "")
|
|
163
|
+
: (getRunnerSecret("ANTHROPIC_API_KEY") ?? "");
|
|
164
|
+
// maxRetries applies when a timeout is bound (a retry loop under a bound
|
|
165
|
+
// multiplies the wall-clock budget) or when the caller pinned it
|
|
166
|
+
// explicitly (call-llm hands retry ownership to Temporal, #686). Callers
|
|
167
|
+
// that set neither keep LangChain's default retry behavior unchanged.
|
|
168
|
+
const maxRetries = timeoutMs !== undefined || opts.maxRetries !== undefined
|
|
169
|
+
? { maxRetries: opts.maxRetries ?? 0 }
|
|
170
|
+
: {};
|
|
147
171
|
const common = {
|
|
148
172
|
temperature: opts.temperature ?? 0,
|
|
149
173
|
apiKey,
|
|
150
174
|
...(maxTokens ? { maxTokens } : {}),
|
|
151
|
-
...
|
|
175
|
+
...maxRetries,
|
|
152
176
|
};
|
|
153
177
|
// The request timeout lives in a different slot per wrapper: ChatOpenAI
|
|
154
178
|
// reads `timeout` as a constructor field, but ChatAnthropic ignores it
|
|
@@ -168,6 +192,17 @@ export async function buildChatModel(opts) {
|
|
|
168
192
|
const anthropicClientOptionsField = Object.keys(anthropicClientOptions).length > 0
|
|
169
193
|
? { clientOptions: anthropicClientOptions }
|
|
170
194
|
: {};
|
|
195
|
+
// The tier rides the request body per provider dialect (#361): OpenAI
|
|
196
|
+
// takes `service_tier` as a first-class constructor field; ChatAnthropic
|
|
197
|
+
// has no such field, so it rides `invocationKwargs`, which the wrapper
|
|
198
|
+
// spreads into every request body. Both spellings resolve through the
|
|
199
|
+
// shared mapping so no construction site can invent a third one.
|
|
200
|
+
const openAiServiceTierField = opts.serviceTier !== undefined
|
|
201
|
+
? { service_tier: toOpenAiServiceTier(opts.serviceTier) }
|
|
202
|
+
: {};
|
|
203
|
+
const anthropicServiceTierField = opts.serviceTier !== undefined
|
|
204
|
+
? { invocationKwargs: { service_tier: toAnthropicServiceTier(opts.serviceTier) } }
|
|
205
|
+
: {};
|
|
171
206
|
// The two SDKs name the transport-override block differently (OpenAI:
|
|
172
207
|
// `configuration`, Anthropic: `clientOptions`) — encapsulating that here is
|
|
173
208
|
// the whole point, since the shape mismatch is where bugs used to hide.
|
|
@@ -175,6 +210,7 @@ export async function buildChatModel(opts) {
|
|
|
175
210
|
? new ChatOpenAI({
|
|
176
211
|
model: apiModelId,
|
|
177
212
|
...common,
|
|
213
|
+
...openAiServiceTierField,
|
|
178
214
|
...(timeoutMs ? { timeout: timeoutMs } : {}),
|
|
179
215
|
...(baseUrl || headers
|
|
180
216
|
? {
|
|
@@ -192,6 +228,13 @@ export async function buildChatModel(opts) {
|
|
|
192
228
|
// provided) is what lets this construct with no ANTHROPIC_API_KEY.
|
|
193
229
|
// (Backend mode never has a proxy — see the precedence rule above —
|
|
194
230
|
// so the clientOptions here carry at most the timeout.)
|
|
231
|
+
//
|
|
232
|
+
// service_tier deliberately does NOT ride backend requests:
|
|
233
|
+
// standard/priority tiers are an Anthropic-FIRST-PARTY billing
|
|
234
|
+
// concept, and Vertex/Bedrock/Foundry bill through the cloud
|
|
235
|
+
// provider with no tier dimension — an unknown body param there is
|
|
236
|
+
// a request refusal waiting to happen. The account-default price
|
|
237
|
+
// hole this parameter closes does not exist on those backends.
|
|
195
238
|
new ChatAnthropic({
|
|
196
239
|
model: wireModelId,
|
|
197
240
|
...common,
|
|
@@ -201,6 +244,7 @@ export async function buildChatModel(opts) {
|
|
|
201
244
|
: new ChatAnthropic({
|
|
202
245
|
model: apiModelId,
|
|
203
246
|
...common,
|
|
247
|
+
...anthropicServiceTierField,
|
|
204
248
|
...anthropicClientOptionsField,
|
|
205
249
|
});
|
|
206
250
|
return { model, provider, apiModelId };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-client.js","sourceRoot":"","sources":["../../src/shared/model-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"model-client.js","sourceRoot":"","sources":["../../src/shared/model-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Strict placeholder resolver for ${VAR_NAME} syntax in MCP server configs.
|
|
3
3
|
*
|
|
4
|
+
* Port of the Python agent-runner's PlaceholderResolver (strict mode only).
|
|
4
5
|
* Always raises on unresolved placeholders — sending literal ${VAR} as an
|
|
5
|
-
* HTTP header value
|
|
6
|
+
* HTTP header value (e.g. Authorization: Bearer ${API_KEY}) produces
|
|
7
|
+
* cryptic auth failures from the remote server.
|
|
6
8
|
*/
|
|
7
9
|
export declare class PlaceholderResolutionError extends Error {
|
|
8
10
|
readonly variableName: string;
|
|
@@ -17,11 +19,16 @@ export declare class PlaceholderResolutionError extends Error {
|
|
|
17
19
|
export declare function resolvePlaceholders(template: string, envVars: Record<string, string>, context?: string): string;
|
|
18
20
|
/**
|
|
19
21
|
* Resolve placeholders in all values of a headers map.
|
|
22
|
+
*
|
|
23
|
+
* @throws PlaceholderResolutionError if any header value contains an
|
|
24
|
+
* unresolvable placeholder.
|
|
20
25
|
*/
|
|
21
26
|
export declare function resolveHeaders(headers: Record<string, string>, envVars: Record<string, string>): Record<string, string>;
|
|
22
27
|
/**
|
|
23
28
|
* Filter env vars to only keys declared in the MCP server's spec.env.
|
|
24
|
-
*
|
|
29
|
+
*
|
|
30
|
+
* Mirrors the agent-runner's _filter_env_to_declared_keys: prevents
|
|
31
|
+
* secret over-sharing by restricting the subprocess/HTTP environment to
|
|
25
32
|
* explicitly declared variables.
|
|
26
33
|
*/
|
|
27
34
|
export declare function filterEnvToDeclaredKeys(declaredEnv: Record<string, unknown> | undefined, envVars: Record<string, string>, serverSlug: string): Record<string, string>;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Strict placeholder resolver for ${VAR_NAME} syntax in MCP server configs.
|
|
3
3
|
*
|
|
4
|
+
* Port of the Python agent-runner's PlaceholderResolver (strict mode only).
|
|
4
5
|
* Always raises on unresolved placeholders — sending literal ${VAR} as an
|
|
5
|
-
* HTTP header value
|
|
6
|
+
* HTTP header value (e.g. Authorization: Bearer ${API_KEY}) produces
|
|
7
|
+
* cryptic auth failures from the remote server.
|
|
6
8
|
*/
|
|
7
9
|
const PLACEHOLDER_RE = /\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
|
|
8
10
|
export class PlaceholderResolutionError extends Error {
|
|
@@ -32,6 +34,9 @@ export function resolvePlaceholders(template, envVars, context) {
|
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* Resolve placeholders in all values of a headers map.
|
|
37
|
+
*
|
|
38
|
+
* @throws PlaceholderResolutionError if any header value contains an
|
|
39
|
+
* unresolvable placeholder.
|
|
35
40
|
*/
|
|
36
41
|
export function resolveHeaders(headers, envVars) {
|
|
37
42
|
const resolved = {};
|
|
@@ -42,7 +47,9 @@ export function resolveHeaders(headers, envVars) {
|
|
|
42
47
|
}
|
|
43
48
|
/**
|
|
44
49
|
* Filter env vars to only keys declared in the MCP server's spec.env.
|
|
45
|
-
*
|
|
50
|
+
*
|
|
51
|
+
* Mirrors the agent-runner's _filter_env_to_declared_keys: prevents
|
|
52
|
+
* secret over-sharing by restricting the subprocess/HTTP environment to
|
|
46
53
|
* explicitly declared variables.
|
|
47
54
|
*/
|
|
48
55
|
export function filterEnvToDeclaredKeys(declaredEnv, envVars, serverSlug) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeholder-resolver.js","sourceRoot":"","sources":["../../src/shared/placeholder-resolver.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"placeholder-resolver.js","sourceRoot":"","sources":["../../src/shared/placeholder-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,26 +2,25 @@
|
|
|
2
2
|
* The Plan-mode filesystem permission rules — the enforcement twin of
|
|
3
3
|
* `plan-mode-prompt.ts` (which carries the instruction half of the contract).
|
|
4
4
|
*
|
|
5
|
-
* Plan mode is
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
5
|
+
* Plan mode's policy is: reads anywhere in the workspace, writes nowhere.
|
|
6
|
+
* Only the write half needs a RULE. The read boundary that issue #528 built
|
|
7
|
+
* out of rules (workspace read-allow + read-deny, glob-escaped real root) is
|
|
8
|
+
* now STRUCTURAL: every native-harness backend is virtual-rooted
|
|
9
|
+
* (`virtualMode: true` — see cas-capture-backend.ts, issue #754), so every
|
|
10
|
+
* path a tool can express resolves inside the workspace root and traversal
|
|
11
|
+
* is rejected at resolution. A rule cannot widen that, and no workspace-root
|
|
12
|
+
* glob is needed to narrow it — which also retires the whole
|
|
13
|
+
* special-characters-in-the-root hazard (`escapeGlobLiteral` and its
|
|
14
|
+
* end-to-end matcher suite) that the real-path rules carried.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
* path (
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* both; do not "harden" this into one.
|
|
16
|
+
* Paths in these rules are VIRTUAL: "/" is the workspace root, matched by
|
|
17
|
+
* micromatch against the raw tool-call path (dot:true) after the
|
|
18
|
+
* path-normalization middleware has canonicalized it (relative → "/"-rooted;
|
|
19
|
+
* see middleware/path-normalization.ts). The legitimate platform-dir reads
|
|
20
|
+
* (skills, attachments, the approved plan) keep working exactly as before:
|
|
21
|
+
* they are addressed through the `{workspace}/.stigmer` symlink
|
|
22
|
+
* (shared/workspace/stigmer-link.ts), an in-root path string in either
|
|
23
|
+
* dialect.
|
|
25
24
|
*
|
|
26
25
|
* Applied in execute-deep-agent/setup.ts to the parent graph AND threaded
|
|
27
26
|
* into every compiled sub-agent graph: deepagents' parent-permission
|
|
@@ -30,13 +29,6 @@
|
|
|
30
29
|
* (issue #255). Kept as its own side-effect-free module so tests can pin the
|
|
31
30
|
* production rules without dragging in setup.ts's import graph.
|
|
32
31
|
*
|
|
33
|
-
* Rules travel with a companion: every graph that carries them also installs
|
|
34
|
-
* the path-normalization middleware (middleware/path-normalization.ts,
|
|
35
|
-
* issues #429/#528), because deepagents' rule validation refuses
|
|
36
|
-
* workspace-relative paths outright and its `ls`/`glob`/`grep` schema default
|
|
37
|
-
* of "/" would deny the bare first listing. Both are derived from the same
|
|
38
|
-
* expression at each composition site so they cannot drift apart.
|
|
39
|
-
*
|
|
40
32
|
* Invariant: never combine these rules with a shell-capable (sandbox)
|
|
41
33
|
* backend — deepagents rejects that pairing at graph construction (see the
|
|
42
34
|
* cas-capture-backend.ts header). Plan mode guarantees it by construction:
|
|
@@ -45,25 +37,13 @@
|
|
|
45
37
|
*/
|
|
46
38
|
import type { FilesystemPermission } from "deepagents";
|
|
47
39
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* silently never match — bricking every plan-mode read for that workspace.
|
|
53
|
-
* Semantics are pinned end-to-end through deepagents' own matcher by the
|
|
54
|
-
* special-character workspace suite in plan-mode-path-normalization.test.ts.
|
|
55
|
-
*/
|
|
56
|
-
export declare function escapeGlobLiteral(literal: string): string;
|
|
57
|
-
/**
|
|
58
|
-
* Build the plan-mode rule set for a graph whose filesystem backend is
|
|
59
|
-
* rooted at `workspaceRootDir`. The three rules read as the policy:
|
|
60
|
-
* reads allowed in the workspace, reads denied everywhere else, writes
|
|
61
|
-
* denied everywhere.
|
|
40
|
+
* Build the plan-mode rule set. One rule IS the policy: writes denied
|
|
41
|
+
* everywhere ("/**" is every virtual path; deepagents evaluates
|
|
42
|
+
* first-match-wins with a permissive default, so reads stay allowed —
|
|
43
|
+
* workspace-confined structurally, not by rule).
|
|
62
44
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* paths (collapsed slashes, no trailing separator) before matching — a
|
|
67
|
-
* trailing slash in the pattern would silently match nothing.
|
|
45
|
+
* Deliberately parameterless: the pre-#754 signature took the workspace root
|
|
46
|
+
* to build a real-path read fence; resurrecting a root-derived rule would
|
|
47
|
+
* silently mismatch the virtual dialect the enforcement now sees.
|
|
68
48
|
*/
|
|
69
|
-
export declare function buildPlanModePermissions(
|
|
49
|
+
export declare function buildPlanModePermissions(): FilesystemPermission[];
|