@stigmer/runner 3.9.0 → 3.11.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/README.md +12 -1
- package/dist/.build-fingerprint +1 -1
- package/dist/activities/call-llm.js +9 -10
- package/dist/activities/call-llm.js.map +1 -1
- package/dist/activities/classify-tool-approvals.d.ts +2 -1
- package/dist/activities/classify-tool-approvals.js +28 -2
- package/dist/activities/classify-tool-approvals.js.map +1 -1
- package/dist/activities/discover-mcp-server.d.ts +32 -0
- package/dist/activities/discover-mcp-server.js +162 -27
- package/dist/activities/discover-mcp-server.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.d.ts +8 -0
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js +1 -1
- package/dist/activities/execute-cursor/__test-utils__/cursor-hook-harness.js.map +1 -1
- package/dist/activities/execute-cursor/approval-state.d.ts +28 -2
- package/dist/activities/execute-cursor/approval-state.js +7 -1
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/attachment-resolver.d.ts +14 -0
- package/dist/activities/execute-cursor/attachment-resolver.js +25 -4
- package/dist/activities/execute-cursor/attachment-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/blueprint-resolver.d.ts +1 -9
- package/dist/activities/execute-cursor/blueprint-resolver.js +6 -22
- package/dist/activities/execute-cursor/blueprint-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/env-resolver.js +3 -1
- package/dist/activities/execute-cursor/env-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/error-classifier.d.ts +40 -3
- package/dist/activities/execute-cursor/error-classifier.js +81 -3
- package/dist/activities/execute-cursor/error-classifier.js.map +1 -1
- package/dist/activities/execute-cursor/extract-structured-output.d.ts +29 -0
- package/dist/activities/execute-cursor/extract-structured-output.js +58 -0
- package/dist/activities/execute-cursor/extract-structured-output.js.map +1 -0
- package/dist/activities/execute-cursor/hook-script.d.ts +14 -3
- package/dist/activities/execute-cursor/hook-script.js +72 -10
- package/dist/activities/execute-cursor/hook-script.js.map +1 -1
- package/dist/activities/execute-cursor/index.d.ts +5 -1
- package/dist/activities/execute-cursor/index.js +59 -58
- package/dist/activities/execute-cursor/index.js.map +1 -1
- package/dist/activities/execute-cursor/mcp-resolver.d.ts +24 -1
- package/dist/activities/execute-cursor/mcp-resolver.js +5 -2
- package/dist/activities/execute-cursor/mcp-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +18 -4
- package/dist/activities/execute-cursor/prompt-builder.js +12 -7
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/turn-stream.js +4 -1
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
- package/dist/activities/execute-deep-agent/attachment-injector.d.ts +18 -1
- package/dist/activities/execute-deep-agent/attachment-injector.js +68 -23
- package/dist/activities/execute-deep-agent/attachment-injector.js.map +1 -1
- package/dist/activities/execute-deep-agent/environment.js +3 -1
- package/dist/activities/execute-deep-agent/environment.js.map +1 -1
- package/dist/activities/execute-deep-agent/index.js +15 -0
- package/dist/activities/execute-deep-agent/index.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +7 -7
- package/dist/activities/execute-deep-agent/prompt-builder.js +8 -2
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/setup.d.ts +10 -0
- package/dist/activities/execute-deep-agent/setup.js +65 -26
- package/dist/activities/execute-deep-agent/setup.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +18 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.js +8 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +11 -4
- package/dist/activities/execute-deep-agent/subagent-wiring.js +13 -4
- package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -1
- package/dist/activities/hydrate-workflow-execution.js +3 -1
- package/dist/activities/hydrate-workflow-execution.js.map +1 -1
- package/dist/activities/workflow-event-activities.d.ts +28 -10
- package/dist/activities/workflow-event-activities.js +87 -58
- package/dist/activities/workflow-event-activities.js.map +1 -1
- package/dist/claimcheck/payload-codec.js +21 -1
- package/dist/claimcheck/payload-codec.js.map +1 -1
- package/dist/client/stigmer-client.d.ts +9 -4
- package/dist/client/stigmer-client.js +28 -15
- package/dist/client/stigmer-client.js.map +1 -1
- package/dist/encryption/config.d.ts +32 -0
- package/dist/encryption/config.js +68 -0
- package/dist/encryption/config.js.map +1 -0
- package/dist/encryption/index.d.ts +3 -0
- package/dist/encryption/index.js +3 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/encryption/payload-codec.d.ts +41 -0
- package/dist/encryption/payload-codec.js +130 -0
- package/dist/encryption/payload-codec.js.map +1 -0
- package/dist/payload-codecs.d.ts +16 -0
- package/dist/payload-codecs.js +38 -0
- package/dist/payload-codecs.js.map +1 -0
- package/dist/preflight.d.ts +31 -0
- package/dist/preflight.js +43 -0
- package/dist/preflight.js.map +1 -1
- package/dist/runner-manager.js +5 -15
- package/dist/runner-manager.js.map +1 -1
- package/dist/runner.js +5 -16
- package/dist/runner.js.map +1 -1
- package/dist/shared/approval-policy.d.ts +9 -3
- package/dist/shared/approval-policy.js +15 -6
- package/dist/shared/approval-policy.js.map +1 -1
- package/dist/shared/attachment-naming.d.ts +53 -0
- package/dist/shared/attachment-naming.js +59 -0
- package/dist/shared/attachment-naming.js.map +1 -0
- package/dist/shared/attachment-vision.d.ts +43 -2
- package/dist/shared/attachment-vision.js +72 -6
- package/dist/shared/attachment-vision.js.map +1 -1
- package/dist/shared/caller-identity.d.ts +23 -2
- package/dist/shared/caller-identity.js +36 -5
- package/dist/shared/caller-identity.js.map +1 -1
- package/dist/shared/channel-attachment.js +1 -0
- package/dist/shared/channel-attachment.js.map +1 -1
- package/dist/shared/checkpointer/http-saver.d.ts +42 -1
- package/dist/shared/checkpointer/http-saver.js +96 -8
- package/dist/shared/checkpointer/http-saver.js.map +1 -1
- package/dist/shared/conversation-attachment.js +1 -0
- package/dist/shared/conversation-attachment.js.map +1 -1
- package/dist/shared/datastore-attachment.d.ts +50 -7
- package/dist/shared/datastore-attachment.js +93 -11
- package/dist/shared/datastore-attachment.js.map +1 -1
- package/dist/shared/http-retry.d.ts +43 -0
- package/dist/shared/http-retry.js +50 -0
- package/dist/shared/http-retry.js.map +1 -0
- package/dist/shared/llm-backend.d.ts +275 -0
- package/dist/shared/llm-backend.js +425 -0
- package/dist/shared/llm-backend.js.map +1 -0
- package/dist/shared/llm-proxy.d.ts +8 -0
- package/dist/shared/llm-proxy.js +15 -0
- package/dist/shared/llm-proxy.js.map +1 -1
- package/dist/shared/mcp-enabled-tools.d.ts +57 -0
- package/dist/shared/mcp-enabled-tools.js +86 -0
- package/dist/shared/mcp-enabled-tools.js.map +1 -0
- package/dist/shared/mcp-manager.d.ts +17 -2
- package/dist/shared/mcp-manager.js +37 -25
- package/dist/shared/mcp-manager.js.map +1 -1
- package/dist/shared/mcp-resolver.d.ts +39 -2
- package/dist/shared/mcp-resolver.js +38 -2
- package/dist/shared/mcp-resolver.js.map +1 -1
- package/dist/shared/model-client.d.ts +12 -5
- package/dist/shared/model-client.js +138 -18
- package/dist/shared/model-client.js.map +1 -1
- package/dist/shared/model-error.js +198 -5
- package/dist/shared/model-error.js.map +1 -1
- package/dist/shared/model-registry.d.ts +20 -2
- package/dist/shared/model-registry.js +37 -2
- package/dist/shared/model-registry.js.map +1 -1
- package/dist/shared/plan-mode-permissions.d.ts +26 -0
- package/dist/shared/plan-mode-permissions.js +28 -0
- package/dist/shared/plan-mode-permissions.js.map +1 -0
- package/dist/worker.d.ts +2 -1
- package/dist/worker.js +2 -4
- package/dist/worker.js.map +1 -1
- package/dist/workflow-engine/types.d.ts +18 -0
- package/dist/workflow-engine/types.js.map +1 -1
- package/dist/workflows/call-agent-orchestrator.d.ts +9 -0
- package/dist/workflows/call-agent-orchestrator.js +1 -0
- package/dist/workflows/call-agent-orchestrator.js.map +1 -1
- package/dist/workflows/connect-mcp-server.js +7 -0
- package/dist/workflows/connect-mcp-server.js.map +1 -1
- package/dist/workflows/engine-core.js +23 -2
- package/dist/workflows/engine-core.js.map +1 -1
- package/dist/workflows/execute-from-execution.d.ts +1 -1
- package/dist/workflows/execute-from-execution.js +11 -1
- package/dist/workflows/execute-from-execution.js.map +1 -1
- package/package.json +8 -2
- package/src/__tests__/claimcheck-codec.test.ts +36 -0
- package/src/__tests__/encryption-codec.test.ts +234 -0
- package/src/__tests__/fixtures/encrypted-payload-fixture.json +15 -0
- package/src/__tests__/history-encryption-e2e.test.ts +243 -0
- package/src/__tests__/preflight.test.ts +50 -2
- package/src/activities/__tests__/call-llm.test.ts +75 -0
- package/src/activities/__tests__/classify-tool-approvals.test.ts +117 -1
- package/src/activities/__tests__/discover-mcp-server.hang.test.ts +103 -0
- package/src/activities/__tests__/discover-mcp-server.test.ts +203 -0
- package/src/activities/__tests__/workflow-event-activities.test.ts +107 -8
- package/src/activities/call-llm.ts +9 -16
- package/src/activities/classify-tool-approvals.ts +34 -4
- package/src/activities/discover-mcp-server.ts +190 -32
- package/src/activities/execute-cursor/__test-utils__/cursor-hook-harness.ts +9 -0
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +14 -0
- package/src/activities/execute-cursor/__tests__/attachment-resolver.test.ts +92 -0
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +40 -14
- package/src/activities/execute-cursor/__tests__/error-classifier-extraction.test.ts +208 -0
- package/src/activities/execute-cursor/__tests__/extract-structured-output.test.ts +120 -0
- package/src/activities/execute-cursor/__tests__/hook-script.test.ts +93 -0
- package/src/activities/execute-cursor/__tests__/mcp-resolver.test.ts +125 -0
- package/src/activities/execute-cursor/__tests__/prompt-builder-delegation.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +13 -0
- package/src/activities/execute-cursor/approval-state.ts +30 -1
- package/src/activities/execute-cursor/attachment-resolver.ts +38 -3
- package/src/activities/execute-cursor/blueprint-resolver.ts +7 -27
- package/src/activities/execute-cursor/env-resolver.ts +3 -1
- package/src/activities/execute-cursor/error-classifier.ts +91 -4
- package/src/activities/execute-cursor/extract-structured-output.ts +72 -0
- package/src/activities/execute-cursor/hook-script.ts +74 -10
- package/src/activities/execute-cursor/index.ts +63 -72
- package/src/activities/execute-cursor/mcp-resolver.ts +36 -2
- package/src/activities/execute-cursor/prompt-builder.ts +34 -9
- package/src/activities/execute-cursor/turn-stream.ts +5 -2
- package/src/activities/execute-deep-agent/__tests__/attachment-injector.test.ts +132 -8
- package/src/activities/execute-deep-agent/__tests__/datastore-degradation.test.ts +104 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-reject.test.ts +2 -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__/prompt-builder.test.ts +34 -5
- 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 +173 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +12 -7
- package/src/activities/execute-deep-agent/attachment-injector.ts +94 -30
- package/src/activities/execute-deep-agent/environment.ts +3 -1
- package/src/activities/execute-deep-agent/index.ts +20 -0
- package/src/activities/execute-deep-agent/prompt-builder.ts +20 -10
- package/src/activities/execute-deep-agent/setup.ts +86 -31
- package/src/activities/execute-deep-agent/subagent-transformer.ts +23 -1
- package/src/activities/execute-deep-agent/subagent-wiring.ts +14 -4
- package/src/activities/hydrate-workflow-execution.ts +3 -1
- package/src/activities/workflow-event-activities.ts +96 -69
- package/src/claimcheck/payload-codec.ts +33 -1
- package/src/client/__tests__/stigmer-client.test.ts +8 -8
- package/src/client/stigmer-client.ts +32 -18
- package/src/encryption/config.ts +91 -0
- package/src/encryption/index.ts +3 -0
- package/src/encryption/payload-codec.ts +152 -0
- package/src/payload-codecs.ts +56 -0
- package/src/preflight.ts +45 -0
- package/src/runner-manager.ts +6 -24
- package/src/runner.ts +6 -25
- package/src/shared/__tests__/approval-policy.test.ts +82 -39
- package/src/shared/__tests__/attachment-naming.test.ts +159 -0
- package/src/shared/__tests__/attachment-vision.test.ts +97 -0
- package/src/shared/__tests__/bedrock-adapter.test.ts +213 -0
- package/src/shared/__tests__/bedrock-seam.test.ts +390 -0
- package/src/shared/__tests__/caller-identity.test.ts +25 -0
- package/src/shared/__tests__/channel-attachment.test.ts +1 -1
- package/src/shared/__tests__/connect-backfill.test.ts +1 -0
- package/src/shared/__tests__/conversation-attachment.test.ts +1 -1
- package/src/shared/__tests__/datastore-attachment.test.ts +129 -1
- package/src/shared/__tests__/foundry-adapter.test.ts +276 -0
- package/src/shared/__tests__/foundry-seam.test.ts +482 -0
- package/src/shared/__tests__/http-retry.test.ts +67 -0
- package/src/shared/__tests__/llm-backend.test.ts +616 -0
- package/src/shared/__tests__/mcp-enabled-tools.test.ts +86 -0
- package/src/shared/__tests__/mcp-manager.test.ts +170 -2
- package/src/shared/__tests__/mcp-resolver.test.ts +146 -3
- package/src/shared/__tests__/model-client.test.ts +154 -0
- package/src/shared/__tests__/model-error.test.ts +289 -1
- package/src/shared/__tests__/model-registry.test.ts +71 -0
- package/src/shared/__tests__/synthesized-attachment.test.ts +1 -0
- package/src/shared/__tests__/vertex-adapter.test.ts +169 -0
- package/src/shared/__tests__/vertex-seam.test.ts +295 -0
- package/src/shared/approval-policy.ts +14 -7
- package/src/shared/attachment-naming.ts +78 -0
- package/src/shared/attachment-vision.ts +92 -9
- package/src/shared/caller-identity.ts +40 -5
- package/src/shared/channel-attachment.ts +1 -0
- package/src/shared/checkpointer/__tests__/http-saver.test.ts +196 -1
- package/src/shared/checkpointer/http-saver.ts +117 -9
- package/src/shared/conversation-attachment.ts +1 -0
- package/src/shared/datastore-attachment.ts +106 -11
- package/src/shared/http-retry.ts +50 -0
- package/src/shared/llm-backend.ts +544 -0
- package/src/shared/llm-proxy.ts +15 -0
- package/src/shared/mcp-enabled-tools.ts +105 -0
- package/src/shared/mcp-manager.ts +43 -26
- package/src/shared/mcp-resolver.ts +73 -2
- package/src/shared/model-client.ts +161 -19
- package/src/shared/model-error.ts +222 -4
- package/src/shared/model-registry.ts +50 -2
- package/src/shared/plan-mode-permissions.ts +30 -0
- package/src/worker.ts +4 -5
- package/src/workflow-engine/types.ts +18 -0
- package/src/workflows/__tests__/execute-serverless-workflow.test.ts +68 -2
- package/src/workflows/call-agent-orchestrator.ts +10 -0
- package/src/workflows/connect-mcp-server.ts +7 -0
- package/src/workflows/engine-core.ts +23 -2
- package/src/workflows/execute-from-execution.ts +12 -2
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* "mcpToolPolicies": {
|
|
14
14
|
* "apply_cloud_resource": { "requiresApproval": true, "message": "..." }
|
|
15
15
|
* },
|
|
16
|
+
* "mcpServerEnabledTools": { "planton": ["get_cloud_resource"] },
|
|
16
17
|
* "approvedGrants": [{ "toolName": "edit", "mcpServerSlug": "", "key": "write", "salient": "a.txt", "contentDigest": "<sha256>" }],
|
|
17
18
|
* "approvedGrantTokens": ["<base64(key\nsalient[\ncontentDigest])>"]
|
|
18
19
|
* }
|
|
@@ -146,6 +147,21 @@ export interface ApprovalStateFile {
|
|
|
146
147
|
*/
|
|
147
148
|
leasedCategories: string[];
|
|
148
149
|
mcpToolPolicies: Record<string, McpToolPolicyEntry>;
|
|
150
|
+
/**
|
|
151
|
+
* Per-server effective enabled_tools allow-lists (issue #350), keyed by
|
|
152
|
+
* MCP server slug — ONLY restricted servers appear (an absent slug means
|
|
153
|
+
* unrestricted, so the common case stays an empty object). The Cursor SDK
|
|
154
|
+
* config cannot hide a server's tools, so the hook enforces the manifest
|
|
155
|
+
* instead: on beforeMCPExecution it matches the payload's mcp_server_name
|
|
156
|
+
* against this map and denies a non-listed tool with the non-pausing,
|
|
157
|
+
* permanent "disabled" kind — BEFORE autoApproveAll and grants, because
|
|
158
|
+
* enabled_tools is a capability manifest, not an approval gate (no bypass
|
|
159
|
+
* may resurrect a disabled tool, and no human may be offered "approve" on
|
|
160
|
+
* one). Unlike mcpToolPolicies (name-keyed, server-blind), this map is
|
|
161
|
+
* server-scoped: the hook payload carries the server identity, so equal
|
|
162
|
+
* tool names on different servers cannot cross-grant.
|
|
163
|
+
*/
|
|
164
|
+
mcpServerEnabledTools: Record<string, string[]>;
|
|
149
165
|
approvedGrants: ApprovalGrant[];
|
|
150
166
|
approvedGrantTokens: string[];
|
|
151
167
|
/**
|
|
@@ -271,13 +287,15 @@ export declare function buildApprovalGrants(pendingApprovals: PendingApproval[],
|
|
|
271
287
|
* - leasedCategories: built-in categories with a run-lifetime lease
|
|
272
288
|
* - mcpToolPolicies: per-tool policy for MCP tools requiring approval (leased
|
|
273
289
|
* servers are already absent — dropped upstream by mergeApprovalPolicies)
|
|
290
|
+
* - mcpServerEnabledTools: per-server enabled_tools allow-lists (issue #350,
|
|
291
|
+
* restricted servers only) for the hook's permanent "disabled" arm
|
|
274
292
|
* - approvedGrants / approvedGrantTokens: tools approved in the current HITL
|
|
275
293
|
* cycle, allowed through on reinvocation
|
|
276
294
|
*
|
|
277
295
|
* The static gated built-in set and its category mapping are baked into the
|
|
278
296
|
* generated hook script (from approval-policy.ts), not carried here.
|
|
279
297
|
*/
|
|
280
|
-
export declare function buildApprovalState(mergedPolicies: Map<string, MergedToolPolicy>, globalBypass: boolean, leasedCategories: ReadonlySet<ApprovalCategory>, grants?: ApprovalGrant[], captureMode?: boolean, captureIgnored?: boolean, gitWorkspace?: boolean, unattendedSkip?: boolean): ApprovalStateFile;
|
|
298
|
+
export declare function buildApprovalState(mergedPolicies: Map<string, MergedToolPolicy>, globalBypass: boolean, leasedCategories: ReadonlySet<ApprovalCategory>, grants?: ApprovalGrant[], captureMode?: boolean, captureIgnored?: boolean, gitWorkspace?: boolean, unattendedSkip?: boolean, mcpServerEnabledTools?: Record<string, string[]>): ApprovalStateFile;
|
|
281
299
|
/**
|
|
282
300
|
* Write the approval state file into the session's HITL directory for the hook
|
|
283
301
|
* script to read.
|
|
@@ -312,16 +330,24 @@ export declare function writeApprovalStateFile(hitlDir: string, state: ApprovalS
|
|
|
312
330
|
* classification may never have run).
|
|
313
331
|
* - `fail-closed` — the approval state file was missing, so everything gated
|
|
314
332
|
* denied. A turn-level "the gate itself was broken" fact.
|
|
333
|
+
* - `disabled` — the agent's enabled_tools manifest excludes this MCP
|
|
334
|
+
* tool (issue #350). Permanent for the run and
|
|
335
|
+
* mode-independent: NOT an approval (a human must never be
|
|
336
|
+
* offered "approve" on a manifest-disabled tool), so it is
|
|
337
|
+
* non-pausing and the model adapts — the same consumer
|
|
338
|
+
* semantics as `secret`.
|
|
315
339
|
*
|
|
316
340
|
* An unknown kind string is preserved as-is: it is treated as non-pausing (an
|
|
317
341
|
* unknown deny must never manufacture an approval) but still attributes the
|
|
318
342
|
* blocked call to our own hook.
|
|
319
343
|
*/
|
|
320
|
-
export type DenialKind = "approval" | "unattended" | "secret" | "capture-error" | "fail-closed";
|
|
344
|
+
export type DenialKind = "approval" | "unattended" | "secret" | "capture-error" | "fail-closed" | "disabled";
|
|
321
345
|
/** The one kind that pauses the run for user approval. */
|
|
322
346
|
export declare const APPROVAL_DENIAL_KIND: DenialKind;
|
|
323
347
|
/** The unattended-mode resolution kind (non-pausing; stamped SKIPPED). */
|
|
324
348
|
export declare const UNATTENDED_DENIAL_KIND: DenialKind;
|
|
349
|
+
/** The enabled_tools manifest denial kind (non-pausing, permanent; issue #350). */
|
|
350
|
+
export declare const DISABLED_DENIAL_KIND: DenialKind;
|
|
325
351
|
/**
|
|
326
352
|
* One denial recorded by the preToolUse hook. `token` is the call's identity in
|
|
327
353
|
* the same space as grantToken() (base64 of `toolName \n salientArg`), used to
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* "mcpToolPolicies": {
|
|
14
14
|
* "apply_cloud_resource": { "requiresApproval": true, "message": "..." }
|
|
15
15
|
* },
|
|
16
|
+
* "mcpServerEnabledTools": { "planton": ["get_cloud_resource"] },
|
|
16
17
|
* "approvedGrants": [{ "toolName": "edit", "mcpServerSlug": "", "key": "write", "salient": "a.txt", "contentDigest": "<sha256>" }],
|
|
17
18
|
* "approvedGrantTokens": ["<base64(key\nsalient[\ncontentDigest])>"]
|
|
18
19
|
* }
|
|
@@ -228,13 +229,15 @@ function parseArgs(argsPreview) {
|
|
|
228
229
|
* - leasedCategories: built-in categories with a run-lifetime lease
|
|
229
230
|
* - mcpToolPolicies: per-tool policy for MCP tools requiring approval (leased
|
|
230
231
|
* servers are already absent — dropped upstream by mergeApprovalPolicies)
|
|
232
|
+
* - mcpServerEnabledTools: per-server enabled_tools allow-lists (issue #350,
|
|
233
|
+
* restricted servers only) for the hook's permanent "disabled" arm
|
|
231
234
|
* - approvedGrants / approvedGrantTokens: tools approved in the current HITL
|
|
232
235
|
* cycle, allowed through on reinvocation
|
|
233
236
|
*
|
|
234
237
|
* The static gated built-in set and its category mapping are baked into the
|
|
235
238
|
* generated hook script (from approval-policy.ts), not carried here.
|
|
236
239
|
*/
|
|
237
|
-
export function buildApprovalState(mergedPolicies, globalBypass, leasedCategories, grants, captureMode = false, captureIgnored = false, gitWorkspace = true, unattendedSkip = false) {
|
|
240
|
+
export function buildApprovalState(mergedPolicies, globalBypass, leasedCategories, grants, captureMode = false, captureIgnored = false, gitWorkspace = true, unattendedSkip = false, mcpServerEnabledTools = {}) {
|
|
238
241
|
const approvedGrants = grants ?? [];
|
|
239
242
|
const mcpToolPolicies = {};
|
|
240
243
|
for (const policy of mergedPolicies.values()) {
|
|
@@ -247,6 +250,7 @@ export function buildApprovalState(mergedPolicies, globalBypass, leasedCategorie
|
|
|
247
250
|
autoApproveAll: globalBypass,
|
|
248
251
|
leasedCategories: [...leasedCategories],
|
|
249
252
|
mcpToolPolicies,
|
|
253
|
+
mcpServerEnabledTools,
|
|
250
254
|
approvedGrants,
|
|
251
255
|
// The hook matches a tool call's PRIMARY token (content when it can compute a
|
|
252
256
|
// digest from tool_input, else coarse). A content-identified grant authorizes
|
|
@@ -288,6 +292,8 @@ const DENIAL_LEDGER_FILE = "denials.jsonl";
|
|
|
288
292
|
export const APPROVAL_DENIAL_KIND = "approval";
|
|
289
293
|
/** The unattended-mode resolution kind (non-pausing; stamped SKIPPED). */
|
|
290
294
|
export const UNATTENDED_DENIAL_KIND = "unattended";
|
|
295
|
+
/** The enabled_tools manifest denial kind (non-pausing, permanent; issue #350). */
|
|
296
|
+
export const DISABLED_DENIAL_KIND = "disabled";
|
|
291
297
|
/** The effective kind of a ledger entry (absent → approval, the pre-kind format). */
|
|
292
298
|
export function denialKindOf(entry) {
|
|
293
299
|
return entry.kind || APPROVAL_DENIAL_KIND;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-state.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/approval-state.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"approval-state.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/approval-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,13 @@
|
|
|
22
22
|
* directives are built from the RESOLVED paths, so prompt and filesystem can
|
|
23
23
|
* never disagree.
|
|
24
24
|
*
|
|
25
|
+
* Duplicate filenames are renamed, never overwritten (issue #364): because
|
|
26
|
+
* placement keys purely on the filename, two attachments with the same name
|
|
27
|
+
* contend for one path — the later one takes the platform's `stem-2.ext`
|
|
28
|
+
* rename (shared/attachment-naming.ts, same semantics as the deep-agent
|
|
29
|
+
* injector and the React composer) and the rename is disclosed in the
|
|
30
|
+
* prompt's `<input_files>` section via {@link ResolvedAttachment.renamedFrom}.
|
|
31
|
+
*
|
|
25
32
|
* Error model: fail-hard, matching the native harness's attachment injector.
|
|
26
33
|
* Attachments are explicit user inputs — an execution that silently runs
|
|
27
34
|
* without one produces silently incorrect results (the "plan file wasn't
|
|
@@ -32,9 +39,16 @@ import type { Attachment } from "@stigmer/protos/ai/stigmer/agentic/agentexecuti
|
|
|
32
39
|
import type { ArtifactStorage } from "../../shared/artifact-storage.js";
|
|
33
40
|
import { type VisionBudget, type VisionDegradedReason, type VisionImage } from "../../shared/attachment-vision.js";
|
|
34
41
|
export interface ResolvedAttachment {
|
|
42
|
+
/** The final on-disk basename — after any duplicate rename. */
|
|
35
43
|
filename: string;
|
|
36
44
|
/** Workspace-relative path the agent reads (`.stigmer/inputs/{filename}`). */
|
|
37
45
|
relativePath: string;
|
|
46
|
+
/**
|
|
47
|
+
* The attachment's original filename, present only when a duplicate name
|
|
48
|
+
* was renamed (shared/attachment-naming.ts) — rendered as disclosure in
|
|
49
|
+
* the prompt's `<input_files>` section.
|
|
50
|
+
*/
|
|
51
|
+
renamedFrom?: string;
|
|
38
52
|
/** Present when the attachment was accepted into the turn's vision payload. */
|
|
39
53
|
vision?: VisionImage;
|
|
40
54
|
/**
|
|
@@ -22,6 +22,13 @@
|
|
|
22
22
|
* directives are built from the RESOLVED paths, so prompt and filesystem can
|
|
23
23
|
* never disagree.
|
|
24
24
|
*
|
|
25
|
+
* Duplicate filenames are renamed, never overwritten (issue #364): because
|
|
26
|
+
* placement keys purely on the filename, two attachments with the same name
|
|
27
|
+
* contend for one path — the later one takes the platform's `stem-2.ext`
|
|
28
|
+
* rename (shared/attachment-naming.ts, same semantics as the deep-agent
|
|
29
|
+
* injector and the React composer) and the rename is disclosed in the
|
|
30
|
+
* prompt's `<input_files>` section via {@link ResolvedAttachment.renamedFrom}.
|
|
31
|
+
*
|
|
25
32
|
* Error model: fail-hard, matching the native harness's attachment injector.
|
|
26
33
|
* Attachments are explicit user inputs — an execution that silently runs
|
|
27
34
|
* without one produces silently incorrect results (the "plan file wasn't
|
|
@@ -30,6 +37,7 @@
|
|
|
30
37
|
*/
|
|
31
38
|
import { mkdir, copyFile, readFile, stat, writeFile } from "node:fs/promises";
|
|
32
39
|
import { join, basename } from "node:path";
|
|
40
|
+
import { allocateUniqueName } from "../../shared/attachment-naming.js";
|
|
33
41
|
import { isVisionCandidate, } from "../../shared/attachment-vision.js";
|
|
34
42
|
import { getPlatformDir } from "../../shared/workspace/platform-dir.js";
|
|
35
43
|
import { ensureStigmerSymlink, STIGMER_LOCAL_STATE_DIR } from "../../shared/workspace/stigmer-link.js";
|
|
@@ -60,18 +68,22 @@ export async function resolveAttachments(attachments, options) {
|
|
|
60
68
|
// every resolved path below would dangle (the skill resolver also ensures
|
|
61
69
|
// it, but only when the agent has skills).
|
|
62
70
|
await ensureStigmerSymlink(options.primaryWorkspaceDir, platformDir);
|
|
71
|
+
// Placement keys purely on the filename, so this set is the whole
|
|
72
|
+
// collision domain — sequential resolution means each attachment sees
|
|
73
|
+
// every name claimed before it (see module doc on duplicate handling).
|
|
74
|
+
const takenNames = new Set();
|
|
63
75
|
const results = [];
|
|
64
76
|
for (const attachment of attachments) {
|
|
65
|
-
results.push(await resolveAttachment(attachment, inputsDir, options));
|
|
77
|
+
results.push(await resolveAttachment(attachment, inputsDir, takenNames, options));
|
|
66
78
|
}
|
|
67
79
|
console.log(`[attachment-resolver] resolved ${results.length} attachment(s): ` +
|
|
68
80
|
results.map((r) => r.relativePath).join(", "));
|
|
69
81
|
return results;
|
|
70
82
|
}
|
|
71
|
-
async function resolveAttachment(attachment, inputsDir, options) {
|
|
83
|
+
async function resolveAttachment(attachment, inputsDir, takenNames, options) {
|
|
72
84
|
// Local-mode fast path: the file is already on this machine's disk.
|
|
73
85
|
if (options.mode === "local" && attachment.localPath) {
|
|
74
|
-
const filename = safeInputName(attachment.filename || attachment.localPath);
|
|
86
|
+
const { name: filename, renamedFrom } = allocateUniqueName(safeInputName(attachment.filename || attachment.localPath), takenNames);
|
|
75
87
|
let vision;
|
|
76
88
|
try {
|
|
77
89
|
vision = await materializeLocalFile(attachment, filename, inputsDir, options.visionBudget);
|
|
@@ -83,6 +95,7 @@ async function resolveAttachment(attachment, inputsDir, options) {
|
|
|
83
95
|
return {
|
|
84
96
|
filename,
|
|
85
97
|
relativePath: join(STIGMER_LOCAL_STATE_DIR, INPUTS_SUBDIR, filename),
|
|
98
|
+
...(renamedFrom !== undefined ? { renamedFrom } : {}),
|
|
86
99
|
...visionOutcomeFields(vision),
|
|
87
100
|
};
|
|
88
101
|
}
|
|
@@ -94,7 +107,7 @@ async function resolveAttachment(attachment, inputsDir, options) {
|
|
|
94
107
|
throw new AttachmentResolutionError(attachment.filename, `artifact storage is unavailable, so this attachment ` +
|
|
95
108
|
`(key: ${attachment.storageKey}) cannot be downloaded`);
|
|
96
109
|
}
|
|
97
|
-
const filename = safeInputName(attachment.filename || attachment.storageKey);
|
|
110
|
+
const { name: filename, renamedFrom } = allocateUniqueName(safeInputName(attachment.filename || attachment.storageKey), takenNames);
|
|
98
111
|
let content;
|
|
99
112
|
try {
|
|
100
113
|
content = await options.storage.download(attachment.storageKey);
|
|
@@ -111,6 +124,7 @@ async function resolveAttachment(attachment, inputsDir, options) {
|
|
|
111
124
|
return {
|
|
112
125
|
filename,
|
|
113
126
|
relativePath: join(STIGMER_LOCAL_STATE_DIR, INPUTS_SUBDIR, filename),
|
|
127
|
+
...(renamedFrom !== undefined ? { renamedFrom } : {}),
|
|
114
128
|
...visionOutcomeFields(vision),
|
|
115
129
|
};
|
|
116
130
|
}
|
|
@@ -127,6 +141,13 @@ async function materializeLocalFile(attachment, filename, inputsDir, visionBudge
|
|
|
127
141
|
await copyFile(attachment.localPath, dest);
|
|
128
142
|
return undefined;
|
|
129
143
|
}
|
|
144
|
+
// Blind-model check BEFORE the size check: a blind model's oversized image
|
|
145
|
+
// must report the honest model_no_vision reason, never too_large's "resend
|
|
146
|
+
// smaller" advice — and an in-cap image needn't be read at all.
|
|
147
|
+
if (visionBudget.modelCannotSee()) {
|
|
148
|
+
await copyFile(attachment.localPath, dest);
|
|
149
|
+
return visionBudget.offerBlind();
|
|
150
|
+
}
|
|
130
151
|
const info = await stat(attachment.localPath);
|
|
131
152
|
if (visionBudget.exceedsImageCap(info.size)) {
|
|
132
153
|
await copyFile(attachment.localPath, dest);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-resolver.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/attachment-resolver.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"attachment-resolver.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/attachment-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ import type { SessionSpec } from "@stigmer/protos/ai/stigmer/agentic/session/v1/
|
|
|
18
18
|
import type { WorkspaceEntry } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
|
|
19
19
|
import type { ApiResourceReference } from "@stigmer/protos/ai/stigmer/commons/apiresource/io_pb";
|
|
20
20
|
import type { CloudRepo } from "./session-lifecycle.js";
|
|
21
|
+
export { mergeMcpServerUsages } from "../../shared/mcp-resolver.js";
|
|
21
22
|
export interface ResolvedBlueprint {
|
|
22
23
|
agent: Agent;
|
|
23
24
|
agentSpec: AgentSpec;
|
|
@@ -55,15 +56,6 @@ export declare function resolveBlueprint(client: StigmerClient, session: Session
|
|
|
55
56
|
* Always computed (cheap iteration) but only consumed when mode is cloud.
|
|
56
57
|
*/
|
|
57
58
|
export declare function resolveCloudRepos(workspaceEntries: WorkspaceEntry[]): CloudRepo[];
|
|
58
|
-
/**
|
|
59
|
-
* Merge MCP server usages from agent (base) and session (overlay).
|
|
60
|
-
*
|
|
61
|
-
* Replicates session_context_merge.py::merge_mcp_server_usages():
|
|
62
|
-
* - Agent-level usages are the base set
|
|
63
|
-
* - Session-level usages extend or override by mcp_server_ref.slug
|
|
64
|
-
* - If both reference the same slug, session-level takes precedence
|
|
65
|
-
*/
|
|
66
|
-
export declare function mergeMcpServerUsages(agentUsages: McpServerUsage[], sessionUsages: McpServerUsage[]): McpServerUsage[];
|
|
67
59
|
/**
|
|
68
60
|
* Merge skill refs from agent and session.
|
|
69
61
|
*
|
|
@@ -11,6 +11,12 @@
|
|
|
11
11
|
* containing runner-internal markers are rejected with a warning.
|
|
12
12
|
*/
|
|
13
13
|
import { resolve } from "node:path";
|
|
14
|
+
import { mergeMcpServerUsages } from "../../shared/mcp-resolver.js";
|
|
15
|
+
// Both harnesses must merge agent + session usages identically (session wins
|
|
16
|
+
// per slug — the usage whose enabled_tools the enforcement honors), so the
|
|
17
|
+
// merge lives in shared/mcp-resolver.ts. Re-exported here for its historical
|
|
18
|
+
// home alongside mergeSkillRefs.
|
|
19
|
+
export { mergeMcpServerUsages } from "../../shared/mcp-resolver.js";
|
|
14
20
|
/**
|
|
15
21
|
* Path segments that identify runner-internal directories. Any workspace dir
|
|
16
22
|
* whose resolved absolute path contains one of these is rejected.
|
|
@@ -77,28 +83,6 @@ export function resolveCloudRepos(workspaceEntries) {
|
|
|
77
83
|
// ---------------------------------------------------------------------------
|
|
78
84
|
// MCP and skill merging
|
|
79
85
|
// ---------------------------------------------------------------------------
|
|
80
|
-
/**
|
|
81
|
-
* Merge MCP server usages from agent (base) and session (overlay).
|
|
82
|
-
*
|
|
83
|
-
* Replicates session_context_merge.py::merge_mcp_server_usages():
|
|
84
|
-
* - Agent-level usages are the base set
|
|
85
|
-
* - Session-level usages extend or override by mcp_server_ref.slug
|
|
86
|
-
* - If both reference the same slug, session-level takes precedence
|
|
87
|
-
*/
|
|
88
|
-
export function mergeMcpServerUsages(agentUsages, sessionUsages) {
|
|
89
|
-
const bySlug = new Map();
|
|
90
|
-
for (const usage of agentUsages) {
|
|
91
|
-
const slug = usage.mcpServerRef?.slug;
|
|
92
|
-
if (slug)
|
|
93
|
-
bySlug.set(slug, usage);
|
|
94
|
-
}
|
|
95
|
-
for (const usage of sessionUsages) {
|
|
96
|
-
const slug = usage.mcpServerRef?.slug;
|
|
97
|
-
if (slug)
|
|
98
|
-
bySlug.set(slug, usage);
|
|
99
|
-
}
|
|
100
|
-
return [...bySlug.values()];
|
|
101
|
-
}
|
|
102
86
|
/**
|
|
103
87
|
* Merge skill refs from agent and session.
|
|
104
88
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint-resolver.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/blueprint-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"blueprint-resolver.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/blueprint-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
export async function resolveExecutionEnv(client, executionId) {
|
|
15
15
|
// A desktop runner exchanges its bootstrap credential for a token scoped to
|
|
16
16
|
// this execution's session, so cloud's decrypt gate binds the read (#156).
|
|
17
|
-
// No-op for cloud sandbox and OSS runners.
|
|
17
|
+
// No-op for cloud sandbox and OSS runners. A failed exchange throws and
|
|
18
|
+
// fails the activity: the bootstrap credential no longer decrypts
|
|
19
|
+
// (stigmer-cloud#218), so proceeding would resolve redacted placeholders.
|
|
18
20
|
const scopedToken = await client.acquireScopedRunnerToken({
|
|
19
21
|
agentExecutionId: executionId,
|
|
20
22
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-resolver.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/env-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAqB,EACrB,WAAmB;IAEnB,4EAA4E;IAC5E,2EAA2E;IAC3E,
|
|
1
|
+
{"version":3,"file":"env-resolver.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/env-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAqB,EACrB,WAAmB;IAEnB,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,kEAAkE;IAClE,0EAA0E;IAC1E,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC;QACxD,gBAAgB,EAAE,WAAW;KAC9B,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACpF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAAyB,EAAE,IAAI,CAAC;QAC9C,4DAA4D;QAC5D,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACT,2CAA2C,WAAW,KAAK;gBACzD,oCAAoC,CACvC,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAChD,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAEhC,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;YAC/B,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACvB,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CACT,8CAA8C;QAC5C,cAAc,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI;QACtC,aAAa,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI;QAC5C,gBAAgB,UAAU,CAAC,IAAI,IAAI;QACnC,SAAS,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACrD,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* 3. Surface isRetryable for future workflow-level retry decisions
|
|
8
8
|
*
|
|
9
9
|
* Error detail can come from several sources (in priority order):
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
10
|
+
* - Structured fields, either from a thrown CursorSdkError or lifted from a
|
|
11
|
+
* structured run.wait() error value (highest fidelity)
|
|
12
|
+
* - run.wait() error text (SDK-provided string, often bare/generic)
|
|
12
13
|
* - SDKStatusMessage with status "ERROR" from the stream
|
|
13
14
|
* - ConnectError captured from process unhandledRejection
|
|
14
15
|
* - Text extracted from the failing run.conversation() turn
|
|
@@ -28,7 +29,8 @@ export interface ClassifiedError {
|
|
|
28
29
|
}
|
|
29
30
|
/**
|
|
30
31
|
* Structured fields lifted from a thrown CursorSdkError (errors.d.ts:
|
|
31
|
-
* { code, status, isRetryable, cause, endpoint, requestId, operation })
|
|
32
|
+
* { code, status, isRetryable, cause, endpoint, requestId, operation }) or
|
|
33
|
+
* from a structured run.wait() error value (see extractRunErrorSources).
|
|
32
34
|
* Only the fields used for classification are retained.
|
|
33
35
|
*/
|
|
34
36
|
export interface SdkErrorFields {
|
|
@@ -36,6 +38,41 @@ export interface SdkErrorFields {
|
|
|
36
38
|
status?: number;
|
|
37
39
|
message?: string;
|
|
38
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Error detail lifted from a run.wait() result, split by fidelity: structured
|
|
43
|
+
* values land in sdkError, plain text in sdkResultFields. At most one of the
|
|
44
|
+
* two is set; both undefined means the result carried nothing usable and the
|
|
45
|
+
* classifier's lower-priority sources should decide.
|
|
46
|
+
*/
|
|
47
|
+
export interface RunErrorSources {
|
|
48
|
+
sdkError: SdkErrorFields | undefined;
|
|
49
|
+
sdkResultFields: string | undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Lift error detail from a run.wait() result whose status is "error".
|
|
53
|
+
*
|
|
54
|
+
* The SDK types RunResult.result as `string`, but structured values (Error
|
|
55
|
+
* instances, { code, message } objects) have been observed at runtime, both
|
|
56
|
+
* in `result` and in the undeclared error/message/reason fields (oss#299).
|
|
57
|
+
* A bare String() on those yields "[object Object]", which both destroys the
|
|
58
|
+
* message users see and — worse — shadows the lower-priority classifier
|
|
59
|
+
* sources (stream, rejection, conversation introspection) that often hold
|
|
60
|
+
* the real reason.
|
|
61
|
+
*
|
|
62
|
+
* Walks the candidate fields in order and answers from the FIRST one that
|
|
63
|
+
* yields usable content: strings keep flowing to the string channel
|
|
64
|
+
* (sdkResultFields), structured values are lifted into the same structured
|
|
65
|
+
* channel a thrown CursorSdkError uses (sdkError), and hopeless values are
|
|
66
|
+
* skipped so a later candidate — or the classifier's fallback sources — can
|
|
67
|
+
* win. (The previous `??` chain stopped at the first non-nullish value, so a
|
|
68
|
+
* hopeless object or empty string hid usable text one field later.)
|
|
69
|
+
*
|
|
70
|
+
* Deliberately NO JSON.stringify fallback for unrecognized object shapes:
|
|
71
|
+
* the error arm already logs the raw result in full server-side, and a JSON
|
|
72
|
+
* blob shown to the user would shadow the introspection sources that exist
|
|
73
|
+
* precisely to recover the real reason.
|
|
74
|
+
*/
|
|
75
|
+
export declare function extractRunErrorSources(result: unknown): RunErrorSources;
|
|
39
76
|
interface SynthesizeErrorOpts {
|
|
40
77
|
/** Structured fields from a thrown CursorSdkError — highest-fidelity source. */
|
|
41
78
|
sdkError?: SdkErrorFields;
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* 3. Surface isRetryable for future workflow-level retry decisions
|
|
8
8
|
*
|
|
9
9
|
* Error detail can come from several sources (in priority order):
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
10
|
+
* - Structured fields, either from a thrown CursorSdkError or lifted from a
|
|
11
|
+
* structured run.wait() error value (highest fidelity)
|
|
12
|
+
* - run.wait() error text (SDK-provided string, often bare/generic)
|
|
12
13
|
* - SDKStatusMessage with status "ERROR" from the stream
|
|
13
14
|
* - ConnectError captured from process unhandledRejection
|
|
14
15
|
* - Text extracted from the failing run.conversation() turn
|
|
@@ -18,6 +19,79 @@
|
|
|
18
19
|
* the agent was obtained via resume, the error is upgraded to "agent-stale"
|
|
19
20
|
* so that poisoned-handle recovery fires.
|
|
20
21
|
*/
|
|
22
|
+
/**
|
|
23
|
+
* What String() produces for any plain object. Carries zero signal, so it is
|
|
24
|
+
* refused everywhere: extraction never emits it, and classifyFromSources
|
|
25
|
+
* treats it as absent should any other producer leak it through.
|
|
26
|
+
*/
|
|
27
|
+
const OBJECT_JUNK_STRING = "[object Object]";
|
|
28
|
+
const NO_RUN_ERROR_SOURCES = {
|
|
29
|
+
sdkError: undefined,
|
|
30
|
+
sdkResultFields: undefined,
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Lift error detail from a run.wait() result whose status is "error".
|
|
34
|
+
*
|
|
35
|
+
* The SDK types RunResult.result as `string`, but structured values (Error
|
|
36
|
+
* instances, { code, message } objects) have been observed at runtime, both
|
|
37
|
+
* in `result` and in the undeclared error/message/reason fields (oss#299).
|
|
38
|
+
* A bare String() on those yields "[object Object]", which both destroys the
|
|
39
|
+
* message users see and — worse — shadows the lower-priority classifier
|
|
40
|
+
* sources (stream, rejection, conversation introspection) that often hold
|
|
41
|
+
* the real reason.
|
|
42
|
+
*
|
|
43
|
+
* Walks the candidate fields in order and answers from the FIRST one that
|
|
44
|
+
* yields usable content: strings keep flowing to the string channel
|
|
45
|
+
* (sdkResultFields), structured values are lifted into the same structured
|
|
46
|
+
* channel a thrown CursorSdkError uses (sdkError), and hopeless values are
|
|
47
|
+
* skipped so a later candidate — or the classifier's fallback sources — can
|
|
48
|
+
* win. (The previous `??` chain stopped at the first non-nullish value, so a
|
|
49
|
+
* hopeless object or empty string hid usable text one field later.)
|
|
50
|
+
*
|
|
51
|
+
* Deliberately NO JSON.stringify fallback for unrecognized object shapes:
|
|
52
|
+
* the error arm already logs the raw result in full server-side, and a JSON
|
|
53
|
+
* blob shown to the user would shadow the introspection sources that exist
|
|
54
|
+
* precisely to recover the real reason.
|
|
55
|
+
*/
|
|
56
|
+
export function extractRunErrorSources(result) {
|
|
57
|
+
if (result === null || typeof result !== "object")
|
|
58
|
+
return NO_RUN_ERROR_SOURCES;
|
|
59
|
+
const r = result;
|
|
60
|
+
for (const candidate of [r.result, r.error, r.message, r.reason]) {
|
|
61
|
+
const extracted = extractFromCandidate(candidate);
|
|
62
|
+
if (extracted)
|
|
63
|
+
return extracted;
|
|
64
|
+
}
|
|
65
|
+
return NO_RUN_ERROR_SOURCES;
|
|
66
|
+
}
|
|
67
|
+
function extractFromCandidate(v) {
|
|
68
|
+
if (v == null)
|
|
69
|
+
return undefined;
|
|
70
|
+
if (typeof v === "string") {
|
|
71
|
+
if (v.length === 0 || v === OBJECT_JUNK_STRING)
|
|
72
|
+
return undefined;
|
|
73
|
+
return { sdkError: undefined, sdkResultFields: v };
|
|
74
|
+
}
|
|
75
|
+
if (typeof v === "object") {
|
|
76
|
+
// Covers Error instances too: their message (and, on SDK/Node error
|
|
77
|
+
// shapes, code/status) are readable as plain properties.
|
|
78
|
+
const o = v;
|
|
79
|
+
const fields = {};
|
|
80
|
+
if (typeof o.code === "string" && o.code.length > 0)
|
|
81
|
+
fields.code = o.code;
|
|
82
|
+
if (typeof o.status === "number")
|
|
83
|
+
fields.status = o.status;
|
|
84
|
+
if (typeof o.message === "string" && o.message.length > 0)
|
|
85
|
+
fields.message = o.message;
|
|
86
|
+
if (fields.code !== undefined || fields.status !== undefined || fields.message !== undefined) {
|
|
87
|
+
return { sdkError: fields, sdkResultFields: undefined };
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
// Remaining primitives (number, boolean, ...) stringify losslessly.
|
|
92
|
+
const text = String(v);
|
|
93
|
+
return text.length > 0 ? { sdkError: undefined, sdkResultFields: text } : undefined;
|
|
94
|
+
}
|
|
21
95
|
const AUTH_PATTERNS = [
|
|
22
96
|
"unauthenticated", "unauthorized", "401", "forbidden",
|
|
23
97
|
"permission_denied", "invalid api key", "not logged in",
|
|
@@ -117,7 +191,11 @@ function classifyFromSources(opts) {
|
|
|
117
191
|
}
|
|
118
192
|
}
|
|
119
193
|
if (opts.sdkResultFields) {
|
|
120
|
-
|
|
194
|
+
// "Cursor run failed" is the SDK's bare generic; "[object Object]" is
|
|
195
|
+
// String()-coerced junk from any producer that bypassed the shape-aware
|
|
196
|
+
// extraction. Neither carries signal — fall through to better sources.
|
|
197
|
+
const isBareGeneric = opts.sdkResultFields === "Cursor run failed"
|
|
198
|
+
|| opts.sdkResultFields === OBJECT_JUNK_STRING;
|
|
121
199
|
if (!isBareGeneric) {
|
|
122
200
|
const { category, retryable } = classifyText(opts.sdkResultFields);
|
|
123
201
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-classifier.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/error-classifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"error-classifier.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/error-classifier.ts"],"names":[],"mappings":"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"}
|