@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,14 +13,55 @@
|
|
|
13
13
|
*
|
|
14
14
|
* The Java proxy calls Document.parse(json) which handles $binary
|
|
15
15
|
* natively, and doc.toJson() emits the same format on reads.
|
|
16
|
+
*
|
|
17
|
+
* Every request runs through {@link HttpCheckpointSaver.fetchWithRetry}:
|
|
18
|
+
* bounded exponential backoff on transient failures (classified by
|
|
19
|
+
* http-retry.ts) with a per-request abort timeout. This loop is the ONLY
|
|
20
|
+
* retry layer between an agent execution and its checkpoints — the deep
|
|
21
|
+
* agent activity is deliberately non-retryable at the Temporal level
|
|
22
|
+
* (maximumAttempts: 1; replaying a whole agent run is not safe), so before
|
|
23
|
+
* this existed a single dropped request killed the execution
|
|
24
|
+
* (stigmer/stigmer-cloud#188). Retrying puts is safe by server contract:
|
|
25
|
+
* CheckpointStore documents putCheckpoint/putWrite as keyed save-or-replace
|
|
26
|
+
* upserts. Budget exhaustion still fails loudly — checkpoints are not
|
|
27
|
+
* lossy-tolerable (unlike status updates, see status.ts), and silently
|
|
28
|
+
* dropping one would corrupt resume state.
|
|
16
29
|
*/
|
|
17
30
|
import type { RunnableConfig } from "@langchain/core/runnables";
|
|
18
31
|
import { BaseCheckpointSaver, type Checkpoint, type CheckpointListOptions, type CheckpointTuple, type ChannelVersions } from "@langchain/langgraph-checkpoint";
|
|
19
32
|
import type { CheckpointMetadata, PendingWrite } from "@langchain/langgraph-checkpoint";
|
|
33
|
+
import type { RetryOptions } from "../grpc-retry.js";
|
|
34
|
+
/** Retry policy plus the per-request bound; every field is defaulted. */
|
|
35
|
+
export interface HttpCheckpointSaverOptions extends RetryOptions {
|
|
36
|
+
/**
|
|
37
|
+
* Milliseconds before an in-flight request is aborted and the attempt is
|
|
38
|
+
* classified retryable. Without it a hung connection (the realistic
|
|
39
|
+
* unplanned-pod-kill symptom) stalls forever and the retry never engages.
|
|
40
|
+
*/
|
|
41
|
+
readonly requestTimeoutMs?: number;
|
|
42
|
+
}
|
|
20
43
|
export declare class HttpCheckpointSaver extends BaseCheckpointSaver {
|
|
21
44
|
private readonly baseUrl;
|
|
22
45
|
private readonly headers;
|
|
23
|
-
|
|
46
|
+
private readonly baseDelayMs;
|
|
47
|
+
private readonly backoffFactor;
|
|
48
|
+
private readonly maxRetries;
|
|
49
|
+
private readonly requestTimeoutMs;
|
|
50
|
+
private readonly delay;
|
|
51
|
+
constructor(proxyEndpoint: string, authToken: string, options?: HttpCheckpointSaverOptions);
|
|
52
|
+
/**
|
|
53
|
+
* `fetch` with bounded exponential backoff on transient failures and a
|
|
54
|
+
* per-request abort timeout.
|
|
55
|
+
*
|
|
56
|
+
* Composition contract: on a non-retryable status — or when the budget is
|
|
57
|
+
* exhausted on a retryable one — the last `Response` is RETURNED, so every
|
|
58
|
+
* call site keeps its own `resp.ok` / 404 handling unchanged; this wrapper
|
|
59
|
+
* changes when a response arrives, never what call sites do with it. It
|
|
60
|
+
* throws only what `fetch` itself throws: a network-level rejection that is
|
|
61
|
+
* non-retryable or has exhausted the budget.
|
|
62
|
+
*/
|
|
63
|
+
private fetchWithRetry;
|
|
64
|
+
private backOff;
|
|
24
65
|
private serializeTyped;
|
|
25
66
|
private deserializeTyped;
|
|
26
67
|
getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined>;
|
|
@@ -13,8 +13,22 @@
|
|
|
13
13
|
*
|
|
14
14
|
* The Java proxy calls Document.parse(json) which handles $binary
|
|
15
15
|
* natively, and doc.toJson() emits the same format on reads.
|
|
16
|
+
*
|
|
17
|
+
* Every request runs through {@link HttpCheckpointSaver.fetchWithRetry}:
|
|
18
|
+
* bounded exponential backoff on transient failures (classified by
|
|
19
|
+
* http-retry.ts) with a per-request abort timeout. This loop is the ONLY
|
|
20
|
+
* retry layer between an agent execution and its checkpoints — the deep
|
|
21
|
+
* agent activity is deliberately non-retryable at the Temporal level
|
|
22
|
+
* (maximumAttempts: 1; replaying a whole agent run is not safe), so before
|
|
23
|
+
* this existed a single dropped request killed the execution
|
|
24
|
+
* (stigmer/stigmer-cloud#188). Retrying puts is safe by server contract:
|
|
25
|
+
* CheckpointStore documents putCheckpoint/putWrite as keyed save-or-replace
|
|
26
|
+
* upserts. Budget exhaustion still fails loudly — checkpoints are not
|
|
27
|
+
* lossy-tolerable (unlike status updates, see status.ts), and silently
|
|
28
|
+
* dropping one would corrupt resume state.
|
|
16
29
|
*/
|
|
17
30
|
import { BaseCheckpointSaver, } from "@langchain/langgraph-checkpoint";
|
|
31
|
+
import { isRetryableFetchError, isRetryableHttpStatus } from "../http-retry.js";
|
|
18
32
|
function encodeB64(data) {
|
|
19
33
|
if (typeof Buffer !== "undefined") {
|
|
20
34
|
return Buffer.from(data).toString("base64");
|
|
@@ -54,16 +68,84 @@ function configCheckpointId(config) {
|
|
|
54
68
|
function configOrg(config) {
|
|
55
69
|
return config.configurable?.org;
|
|
56
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Default transient-retry policy. Wider than status.ts's DEFAULT_PERSIST_RETRY
|
|
73
|
+
* (3 retries, ~700 ms) on purpose: a dropped status update is lossy-tolerable,
|
|
74
|
+
* a dropped checkpoint kills the execution, so the budget here is sized to
|
|
75
|
+
* span a pod-restart reroute (~7.75 s of delays across 5 retries). Worst case
|
|
76
|
+
* with every attempt hanging — 6 x 30 s + delays, ~3.7 min — stays well inside
|
|
77
|
+
* the deep-agent activity's 1 h startToCloseTimeout (no heartbeatTimeout).
|
|
78
|
+
*/
|
|
79
|
+
const DEFAULT_RETRY = {
|
|
80
|
+
baseDelayMs: 250,
|
|
81
|
+
backoffFactor: 2,
|
|
82
|
+
maxRetries: 5,
|
|
83
|
+
requestTimeoutMs: 30_000,
|
|
84
|
+
};
|
|
85
|
+
function defaultDelay(ms) {
|
|
86
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
87
|
+
}
|
|
57
88
|
export class HttpCheckpointSaver extends BaseCheckpointSaver {
|
|
58
89
|
baseUrl;
|
|
59
90
|
headers;
|
|
60
|
-
|
|
91
|
+
baseDelayMs;
|
|
92
|
+
backoffFactor;
|
|
93
|
+
maxRetries;
|
|
94
|
+
requestTimeoutMs;
|
|
95
|
+
delay;
|
|
96
|
+
constructor(proxyEndpoint, authToken, options = {}) {
|
|
61
97
|
super();
|
|
62
98
|
this.baseUrl = `${proxyEndpoint.replace(/\/+$/, "")}/v1/proxy/checkpoints`;
|
|
63
99
|
this.headers = {
|
|
64
100
|
Authorization: `Bearer ${authToken}`,
|
|
65
101
|
"Content-Type": "application/json",
|
|
66
102
|
};
|
|
103
|
+
this.baseDelayMs = options.baseDelayMs ?? DEFAULT_RETRY.baseDelayMs;
|
|
104
|
+
this.backoffFactor = options.backoffFactor ?? DEFAULT_RETRY.backoffFactor;
|
|
105
|
+
this.maxRetries = options.maxRetries ?? DEFAULT_RETRY.maxRetries;
|
|
106
|
+
this.requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_RETRY.requestTimeoutMs;
|
|
107
|
+
this.delay = options.delayFn ?? defaultDelay;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* `fetch` with bounded exponential backoff on transient failures and a
|
|
111
|
+
* per-request abort timeout.
|
|
112
|
+
*
|
|
113
|
+
* Composition contract: on a non-retryable status — or when the budget is
|
|
114
|
+
* exhausted on a retryable one — the last `Response` is RETURNED, so every
|
|
115
|
+
* call site keeps its own `resp.ok` / 404 handling unchanged; this wrapper
|
|
116
|
+
* changes when a response arrives, never what call sites do with it. It
|
|
117
|
+
* throws only what `fetch` itself throws: a network-level rejection that is
|
|
118
|
+
* non-retryable or has exhausted the budget.
|
|
119
|
+
*/
|
|
120
|
+
async fetchWithRetry(url, init) {
|
|
121
|
+
for (let attempt = 0;; attempt++) {
|
|
122
|
+
const canRetry = attempt < this.maxRetries;
|
|
123
|
+
let resp;
|
|
124
|
+
try {
|
|
125
|
+
resp = await fetch(url, {
|
|
126
|
+
...init,
|
|
127
|
+
signal: AbortSignal.timeout(this.requestTimeoutMs),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
if (canRetry && isRetryableFetchError(err)) {
|
|
132
|
+
await this.backOff(attempt, String(err));
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
if (canRetry && isRetryableHttpStatus(resp.status)) {
|
|
138
|
+
await this.backOff(attempt, `HTTP ${resp.status} ${resp.statusText}`);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
return resp;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async backOff(attempt, reason) {
|
|
145
|
+
const delayMs = this.baseDelayMs * Math.pow(this.backoffFactor, attempt);
|
|
146
|
+
console.warn(`[HttpCheckpointSaver] retryable failure ` +
|
|
147
|
+
`(attempt ${attempt + 1}/${this.maxRetries + 1}, retry in ${delayMs}ms): ${reason}`);
|
|
148
|
+
await this.delay(delayMs);
|
|
67
149
|
}
|
|
68
150
|
async serializeTyped(obj) {
|
|
69
151
|
const [typeTag, payload] = await this.serde.dumpsTyped(obj);
|
|
@@ -84,7 +166,7 @@ export class HttpCheckpointSaver extends BaseCheckpointSaver {
|
|
|
84
166
|
if (checkpointId) {
|
|
85
167
|
params.set("checkpoint_id", checkpointId);
|
|
86
168
|
}
|
|
87
|
-
const resp = await
|
|
169
|
+
const resp = await this.fetchWithRetry(`${this.baseUrl}/checkpoint?${params}`, {
|
|
88
170
|
headers: this.headers,
|
|
89
171
|
});
|
|
90
172
|
if (resp.status === 404)
|
|
@@ -108,7 +190,7 @@ export class HttpCheckpointSaver extends BaseCheckpointSaver {
|
|
|
108
190
|
if (beforeId) {
|
|
109
191
|
params.set("before", beforeId);
|
|
110
192
|
}
|
|
111
|
-
const resp = await
|
|
193
|
+
const resp = await this.fetchWithRetry(`${this.baseUrl}/checkpoints?${params}`, {
|
|
112
194
|
headers: this.headers,
|
|
113
195
|
});
|
|
114
196
|
if (!resp.ok) {
|
|
@@ -138,7 +220,7 @@ export class HttpCheckpointSaver extends BaseCheckpointSaver {
|
|
|
138
220
|
const orgId = configOrg(config);
|
|
139
221
|
if (orgId)
|
|
140
222
|
doc.org_id = orgId;
|
|
141
|
-
const resp = await
|
|
223
|
+
const resp = await this.fetchWithRetry(`${this.baseUrl}/checkpoint`, {
|
|
142
224
|
method: "PUT",
|
|
143
225
|
headers: this.headers,
|
|
144
226
|
body: JSON.stringify(doc),
|
|
@@ -156,7 +238,7 @@ export class HttpCheckpointSaver extends BaseCheckpointSaver {
|
|
|
156
238
|
}
|
|
157
239
|
async deleteThread(threadId) {
|
|
158
240
|
const params = new URLSearchParams({ thread_id: threadId });
|
|
159
|
-
const resp = await
|
|
241
|
+
const resp = await this.fetchWithRetry(`${this.baseUrl}/thread?${params}`, {
|
|
160
242
|
method: "DELETE",
|
|
161
243
|
headers: this.headers,
|
|
162
244
|
});
|
|
@@ -185,7 +267,7 @@ export class HttpCheckpointSaver extends BaseCheckpointSaver {
|
|
|
185
267
|
doc.org_id = orgId;
|
|
186
268
|
return doc;
|
|
187
269
|
}));
|
|
188
|
-
const resp = await
|
|
270
|
+
const resp = await this.fetchWithRetry(`${this.baseUrl}/writes`, {
|
|
189
271
|
method: "PUT",
|
|
190
272
|
headers: this.headers,
|
|
191
273
|
body: JSON.stringify({ writes: docs }),
|
|
@@ -211,12 +293,18 @@ export class HttpCheckpointSaver extends BaseCheckpointSaver {
|
|
|
211
293
|
},
|
|
212
294
|
};
|
|
213
295
|
}
|
|
214
|
-
const writesResp = await
|
|
296
|
+
const writesResp = await this.fetchWithRetry(`${this.baseUrl}/writes?${new URLSearchParams({
|
|
215
297
|
thread_id: threadId,
|
|
216
298
|
checkpoint_ns: checkpointNs,
|
|
217
299
|
checkpoint_id: doc.checkpoint_id,
|
|
218
300
|
})}`, { headers: this.headers });
|
|
219
|
-
|
|
301
|
+
// Fail loudly, never degrade: this used to map ANY non-ok response to "no
|
|
302
|
+
// pending writes", which silently stripped resume state on a transient
|
|
303
|
+
// 500 — a checkpoint would load without the writes recorded against it.
|
|
304
|
+
if (!writesResp.ok) {
|
|
305
|
+
throw new Error(`Checkpoint writes GET failed: ${writesResp.status} ${writesResp.statusText}`);
|
|
306
|
+
}
|
|
307
|
+
const pendingWrites = await this.parseWrites((await writesResp.json()));
|
|
220
308
|
return {
|
|
221
309
|
config: {
|
|
222
310
|
configurable: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-saver.js","sourceRoot":"","sources":["../../../src/shared/checkpointer/http-saver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http-saver.js","sourceRoot":"","sources":["../../../src/shared/checkpointer/http-saver.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,6 +91,7 @@ export function synthesizeConversationAttachment(channelId, options) {
|
|
|
91
91
|
slug: CONVERSATION_ATTACHMENT_SLUG,
|
|
92
92
|
toolApprovals: [],
|
|
93
93
|
pinnedToolApprovals: [],
|
|
94
|
+
toolApprovalOverrides: [],
|
|
94
95
|
discoveredCapabilitiesEmpty: false,
|
|
95
96
|
connectionType: "http",
|
|
96
97
|
url: options.bridgeEndpoint.replace(/\/+$/, "") + CONVERSATION_ROUTE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-attachment.js","sourceRoot":"","sources":["../../src/shared/conversation-attachment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAKH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,sBAAsB,CAAC;AAEnE;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAExD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAA0C;IAE1C,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC;IACrD,OAAO,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAC9C,SAA6B,EAC7B,OAAqC;IAErC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,IAAI,OAAO,CAAC,cAAc,KAAK,EAAE,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mEAAmE;IACnE,OAAO;QACL,IAAI,EAAE,4BAA4B;QAClC,aAAa,EAAE,EAAE;QACjB,mBAAmB,EAAE,EAAE;QACvB,2BAA2B,EAAE,KAAK;QAClC,cAAc,EAAE,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,kBAAkB;QACpE,OAAO,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE;YAC/D,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,UAAU,EAAE,EAAE;YACnD,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"conversation-attachment.js","sourceRoot":"","sources":["../../src/shared/conversation-attachment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAKH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,sBAAsB,CAAC;AAEnE;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAExD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAA0C;IAE1C,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC;IACrD,OAAO,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAC9C,SAA6B,EAC7B,OAAqC;IAErC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,IAAI,OAAO,CAAC,cAAc,KAAK,EAAE,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mEAAmE;IACnE,OAAO;QACL,IAAI,EAAE,4BAA4B;QAClC,aAAa,EAAE,EAAE;QACjB,mBAAmB,EAAE,EAAE;QACvB,qBAAqB,EAAE,EAAE;QACzB,2BAA2B,EAAE,KAAK;QAClC,cAAc,EAAE,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,kBAAkB;QACpE,OAAO,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE;YAC/D,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,UAAU,EAAE,EAAE;YACnD,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -22,8 +22,12 @@
|
|
|
22
22
|
* OSS callers resolve as the local principal (T05 R2).
|
|
23
23
|
*
|
|
24
24
|
* Approval-free by construction (DD-001 SD-3): empty toolApprovals +
|
|
25
|
-
* pinnedToolApprovals mean mergeApprovalPolicies
|
|
26
|
-
* this server — zero classifier involvement
|
|
25
|
+
* pinnedToolApprovals + toolApprovalOverrides mean mergeApprovalPolicies
|
|
26
|
+
* emits no entries for this server — zero classifier involvement, and no
|
|
27
|
+
* proto surface can target it (the attachment has no McpServerUsage, and
|
|
28
|
+
* since issue #349 an agent's overrides are scoped to their own usage's
|
|
29
|
+
* server, so a same-named override elsewhere cannot reach this one).
|
|
30
|
+
* `discoveredCapabilitiesEmpty`
|
|
27
31
|
* is false and the attachment has no McpServerUsage, so the connect
|
|
28
32
|
* backfill (whose destructiveHint tightener would force-gate
|
|
29
33
|
* delete_record — silently skipped on channels under UNATTENDED mode)
|
|
@@ -48,9 +52,48 @@ export declare const RECORDS_ROUTE = "/records";
|
|
|
48
52
|
*/
|
|
49
53
|
export declare function synthesizeDatastoreAttachment(datastoreUsages: DatastoreUsage[], options: SynthesizedAttachmentOptions): ResolvedMcpServer | undefined;
|
|
50
54
|
/**
|
|
51
|
-
* The
|
|
52
|
-
*
|
|
53
|
-
* the
|
|
54
|
-
*
|
|
55
|
+
* The five record tools the records roster always serves (DD-005; the
|
|
56
|
+
* mcp-server's records roster registers all five unconditionally for the
|
|
57
|
+
* agent audience — only the `org` argument shape varies by audience, see
|
|
58
|
+
* mcp-server/src/domains/records/tools.ts). Because the roster never
|
|
59
|
+
* legitimately narrows, any of these missing from the connected toolset
|
|
60
|
+
* means the store is degraded (issue #325) — the prompt section and the
|
|
61
|
+
* reconciliation both derive from this one list so they cannot drift.
|
|
55
62
|
*/
|
|
56
|
-
export declare
|
|
63
|
+
export declare const EXPECTED_RECORD_TOOLS: readonly ["describe_datastore", "find_records", "insert_record", "update_record", "delete_record"];
|
|
64
|
+
/**
|
|
65
|
+
* Reconcile the record tools actually connected against the roster
|
|
66
|
+
* contract (issue #325). Returns the expected tools absent from
|
|
67
|
+
* `actualToolNames` — empty means healthy. Names are bare tool names
|
|
68
|
+
* exactly as reported by tools/list (the mcp-enabled-tools identity
|
|
69
|
+
* space); extraneous names are ignored.
|
|
70
|
+
*/
|
|
71
|
+
export declare function missingRecordTools(actualToolNames: Iterable<string>): string[];
|
|
72
|
+
/**
|
|
73
|
+
* The operator-facing degradation notice (issue #325): pushed as a
|
|
74
|
+
* MESSAGE_SYSTEM row on the execution status so "declared N datastores,
|
|
75
|
+
* X/5 record tools connected" is visible without reading a transcript.
|
|
76
|
+
* Lives HERE with the rest of the datastore-attachment wording — the
|
|
77
|
+
* harness only threads it.
|
|
78
|
+
*/
|
|
79
|
+
export declare function formatDatastoreDegradationNotice(declaredCount: number, missing: readonly string[]): string;
|
|
80
|
+
/**
|
|
81
|
+
* The datastores prompt section (DD-005 SD-5, the skills-section
|
|
82
|
+
* precedent). Shared by both harnesses so the section text cannot drift
|
|
83
|
+
* (the sender-identity precedent). Two honest renderings (issue #325):
|
|
84
|
+
*
|
|
85
|
+
* - Healthy (`missingToolNames` empty or omitted — the Cursor harness
|
|
86
|
+
* always calls it this way: the Cursor SDK connects MCP itself, so
|
|
87
|
+
* that harness can never observe the live roster):
|
|
88
|
+
* `<available_datastores>` names the attached datastores, points the
|
|
89
|
+
* model at describe_datastore first, and carries a standing
|
|
90
|
+
* failure-disclosure instruction — the only mechanism that covers
|
|
91
|
+
* tools which connected but fail at call time (the WhatsApp-pilot
|
|
92
|
+
* outage shape).
|
|
93
|
+
* - Degraded (deep-agent only, from missingRecordTools against the
|
|
94
|
+
* connected roster): `<unavailable_datastores>` instead — the section
|
|
95
|
+
* must not promise tools the agent does not have. Names the declared
|
|
96
|
+
* datastores, states which record tools are missing, and instructs
|
|
97
|
+
* plain disclosure over improvisation.
|
|
98
|
+
*/
|
|
99
|
+
export declare function formatDatastoresSection(datastoreUsages: DatastoreUsage[], missingToolNames?: readonly string[]): string;
|
|
@@ -22,8 +22,12 @@
|
|
|
22
22
|
* OSS callers resolve as the local principal (T05 R2).
|
|
23
23
|
*
|
|
24
24
|
* Approval-free by construction (DD-001 SD-3): empty toolApprovals +
|
|
25
|
-
* pinnedToolApprovals mean mergeApprovalPolicies
|
|
26
|
-
* this server — zero classifier involvement
|
|
25
|
+
* pinnedToolApprovals + toolApprovalOverrides mean mergeApprovalPolicies
|
|
26
|
+
* emits no entries for this server — zero classifier involvement, and no
|
|
27
|
+
* proto surface can target it (the attachment has no McpServerUsage, and
|
|
28
|
+
* since issue #349 an agent's overrides are scoped to their own usage's
|
|
29
|
+
* server, so a same-named override elsewhere cannot reach this one).
|
|
30
|
+
* `discoveredCapabilitiesEmpty`
|
|
27
31
|
* is false and the attachment has no McpServerUsage, so the connect
|
|
28
32
|
* backfill (whose destructiveHint tightener would force-gate
|
|
29
33
|
* delete_record — silently skipped on channels under UNATTENDED mode)
|
|
@@ -53,6 +57,7 @@ export function synthesizeDatastoreAttachment(datastoreUsages, options) {
|
|
|
53
57
|
slug: DATASTORE_ATTACHMENT_SLUG,
|
|
54
58
|
toolApprovals: [],
|
|
55
59
|
pinnedToolApprovals: [],
|
|
60
|
+
toolApprovalOverrides: [],
|
|
56
61
|
discoveredCapabilitiesEmpty: false,
|
|
57
62
|
};
|
|
58
63
|
if (options.bridgeEndpoint !== null && options.bridgeEndpoint !== "") {
|
|
@@ -77,25 +82,102 @@ export function synthesizeDatastoreAttachment(datastoreUsages, options) {
|
|
|
77
82
|
};
|
|
78
83
|
}
|
|
79
84
|
/**
|
|
80
|
-
* The
|
|
81
|
-
*
|
|
82
|
-
* the
|
|
83
|
-
*
|
|
85
|
+
* The five record tools the records roster always serves (DD-005; the
|
|
86
|
+
* mcp-server's records roster registers all five unconditionally for the
|
|
87
|
+
* agent audience — only the `org` argument shape varies by audience, see
|
|
88
|
+
* mcp-server/src/domains/records/tools.ts). Because the roster never
|
|
89
|
+
* legitimately narrows, any of these missing from the connected toolset
|
|
90
|
+
* means the store is degraded (issue #325) — the prompt section and the
|
|
91
|
+
* reconciliation both derive from this one list so they cannot drift.
|
|
84
92
|
*/
|
|
85
|
-
export
|
|
86
|
-
|
|
93
|
+
export const EXPECTED_RECORD_TOOLS = [
|
|
94
|
+
"describe_datastore",
|
|
95
|
+
"find_records",
|
|
96
|
+
"insert_record",
|
|
97
|
+
"update_record",
|
|
98
|
+
"delete_record",
|
|
99
|
+
];
|
|
100
|
+
/**
|
|
101
|
+
* Reconcile the record tools actually connected against the roster
|
|
102
|
+
* contract (issue #325). Returns the expected tools absent from
|
|
103
|
+
* `actualToolNames` — empty means healthy. Names are bare tool names
|
|
104
|
+
* exactly as reported by tools/list (the mcp-enabled-tools identity
|
|
105
|
+
* space); extraneous names are ignored.
|
|
106
|
+
*/
|
|
107
|
+
export function missingRecordTools(actualToolNames) {
|
|
108
|
+
const present = new Set(actualToolNames);
|
|
109
|
+
return EXPECTED_RECORD_TOOLS.filter((name) => !present.has(name));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The operator-facing degradation notice (issue #325): pushed as a
|
|
113
|
+
* MESSAGE_SYSTEM row on the execution status so "declared N datastores,
|
|
114
|
+
* X/5 record tools connected" is visible without reading a transcript.
|
|
115
|
+
* Lives HERE with the rest of the datastore-attachment wording — the
|
|
116
|
+
* harness only threads it.
|
|
117
|
+
*/
|
|
118
|
+
export function formatDatastoreDegradationNotice(declaredCount, missing) {
|
|
119
|
+
const connected = EXPECTED_RECORD_TOOLS.length - missing.length;
|
|
120
|
+
return (`Datastore record tools unavailable this turn: declared ` +
|
|
121
|
+
`${declaredCount} datastore(s), ${connected}/${EXPECTED_RECORD_TOOLS.length} ` +
|
|
122
|
+
`record tools connected (missing: ${missing.join(", ")}). The agent has ` +
|
|
123
|
+
`been instructed to disclose this instead of answering from memory.`);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The datastores prompt section (DD-005 SD-5, the skills-section
|
|
127
|
+
* precedent). Shared by both harnesses so the section text cannot drift
|
|
128
|
+
* (the sender-identity precedent). Two honest renderings (issue #325):
|
|
129
|
+
*
|
|
130
|
+
* - Healthy (`missingToolNames` empty or omitted — the Cursor harness
|
|
131
|
+
* always calls it this way: the Cursor SDK connects MCP itself, so
|
|
132
|
+
* that harness can never observe the live roster):
|
|
133
|
+
* `<available_datastores>` names the attached datastores, points the
|
|
134
|
+
* model at describe_datastore first, and carries a standing
|
|
135
|
+
* failure-disclosure instruction — the only mechanism that covers
|
|
136
|
+
* tools which connected but fail at call time (the WhatsApp-pilot
|
|
137
|
+
* outage shape).
|
|
138
|
+
* - Degraded (deep-agent only, from missingRecordTools against the
|
|
139
|
+
* connected roster): `<unavailable_datastores>` instead — the section
|
|
140
|
+
* must not promise tools the agent does not have. Names the declared
|
|
141
|
+
* datastores, states which record tools are missing, and instructs
|
|
142
|
+
* plain disclosure over improvisation.
|
|
143
|
+
*/
|
|
144
|
+
export function formatDatastoresSection(datastoreUsages, missingToolNames = []) {
|
|
145
|
+
const entries = datastoreUsages
|
|
87
146
|
.map((u) => u.datastoreRef?.slug)
|
|
88
|
-
.filter((s) => !!s)
|
|
89
|
-
|
|
147
|
+
.filter((s) => !!s)
|
|
148
|
+
.map((slug) => `- ${slug}`);
|
|
149
|
+
if (missingToolNames.length > 0) {
|
|
150
|
+
return [
|
|
151
|
+
"<unavailable_datastores>",
|
|
152
|
+
"This agent is configured to use the datastores listed below, but the",
|
|
153
|
+
"following record tools failed to connect this turn:",
|
|
154
|
+
missingToolNames.join(", ") + ".",
|
|
155
|
+
"Treat these datastores as unreachable for any operation that needs a",
|
|
156
|
+
"missing tool.",
|
|
157
|
+
"",
|
|
158
|
+
...entries,
|
|
159
|
+
"",
|
|
160
|
+
"When the user's request depends on one of these datastores, tell them",
|
|
161
|
+
"plainly that the datastore cannot be reached right now. Never answer",
|
|
162
|
+
"from memory, guess, or improvise a substitute for what the datastore",
|
|
163
|
+
"would have returned.",
|
|
164
|
+
"</unavailable_datastores>",
|
|
165
|
+
].join("\n");
|
|
166
|
+
}
|
|
90
167
|
return [
|
|
91
168
|
"<available_datastores>",
|
|
92
169
|
"You have access to the following datastores through the record tools",
|
|
93
|
-
"
|
|
170
|
+
`(${EXPECTED_RECORD_TOOLS.join(", ")}).`,
|
|
94
171
|
"Before your first operation against a datastore, call describe_datastore to",
|
|
95
172
|
"learn its collections, field encodings, and which operations you are allowed",
|
|
96
173
|
"to perform.",
|
|
97
174
|
"",
|
|
98
175
|
...entries,
|
|
176
|
+
"",
|
|
177
|
+
"If any record tool is missing from your toolset or a record tool call",
|
|
178
|
+
"fails, the datastore is unreachable: tell the user plainly that you cannot",
|
|
179
|
+
"reach it right now, and do not answer from memory, guess, or improvise a",
|
|
180
|
+
"substitute for what it would have returned.",
|
|
99
181
|
"</available_datastores>",
|
|
100
182
|
].join("\n");
|
|
101
183
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datastore-attachment.js","sourceRoot":"","sources":["../../src/shared/datastore-attachment.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"datastore-attachment.js","sourceRoot":"","sources":["../../src/shared/datastore-attachment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP error classification for side-channel proxy retries.
|
|
3
|
+
*
|
|
4
|
+
* The runner reaches stigmer-service's Side-Channel Proxy (`/v1/proxy/...`)
|
|
5
|
+
* over plain `fetch` from several clients — the checkpoint saver today;
|
|
6
|
+
* artifact storage, the LLM proxy, and the registry endpoint are candidates
|
|
7
|
+
* (stigmer/stigmer#468). This module is the one place that answers "is this
|
|
8
|
+
* HTTP failure worth retrying?", the `fetch` twin of grpc-retry.ts: it holds
|
|
9
|
+
* the classification policy only, kept small and separately tested. The
|
|
10
|
+
* bounded-backoff loop that consumes it lives with each client (the
|
|
11
|
+
* grpc-retry/status.ts split).
|
|
12
|
+
*
|
|
13
|
+
* The policy is grounded in what the proxy actually emits, not HTTP folklore.
|
|
14
|
+
* CheckpointerProxyController returns exactly four deterministic errors —
|
|
15
|
+
* 400 (malformed document), 403 (FGA deny), 404 (no such checkpoint), and
|
|
16
|
+
* 413 (the 4 MB cap) — and never a transient status. Transient failures
|
|
17
|
+
* reach the runner only as 5xx (Spring's error handler, ingress 502-504),
|
|
18
|
+
* 408/429 (infrastructure between runner and service), or as network-level
|
|
19
|
+
* fetch rejections. 401/403 stay terminal deliberately: retrying cannot fix
|
|
20
|
+
* an expired or rejected credential.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* True for HTTP statuses that signal a transient condition worth retrying:
|
|
24
|
+
* 408 (request timeout), 429 (throttled), and all 5xx. Every other status is
|
|
25
|
+
* deterministic — the proxy's 4xx errors mean the same request will fail the
|
|
26
|
+
* same way forever.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isRetryableHttpStatus(status: number): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* True for `fetch` rejections that signal a transient transport condition:
|
|
31
|
+
*
|
|
32
|
+
* - `TypeError` — undici's network-failure shape (`fetch failed`, with the
|
|
33
|
+
* ECONNREFUSED/ECONNRESET/DNS cause attached). A deterministic TypeError
|
|
34
|
+
* (e.g. a malformed URL) also matches, which is accepted: such a bug fails
|
|
35
|
+
* every attempt including the first test run, and the bounded budget caps
|
|
36
|
+
* the wasted retries at seconds.
|
|
37
|
+
* - `TimeoutError` — the rejection shape of `AbortSignal.timeout()`, i.e. a
|
|
38
|
+
* hung connection whose attempt we bounded ourselves.
|
|
39
|
+
*
|
|
40
|
+
* A manual abort (`AbortError`) is deliberately NOT retryable: the caller
|
|
41
|
+
* cancelled on purpose.
|
|
42
|
+
*/
|
|
43
|
+
export declare function isRetryableFetchError(err: unknown): boolean;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP error classification for side-channel proxy retries.
|
|
3
|
+
*
|
|
4
|
+
* The runner reaches stigmer-service's Side-Channel Proxy (`/v1/proxy/...`)
|
|
5
|
+
* over plain `fetch` from several clients — the checkpoint saver today;
|
|
6
|
+
* artifact storage, the LLM proxy, and the registry endpoint are candidates
|
|
7
|
+
* (stigmer/stigmer#468). This module is the one place that answers "is this
|
|
8
|
+
* HTTP failure worth retrying?", the `fetch` twin of grpc-retry.ts: it holds
|
|
9
|
+
* the classification policy only, kept small and separately tested. The
|
|
10
|
+
* bounded-backoff loop that consumes it lives with each client (the
|
|
11
|
+
* grpc-retry/status.ts split).
|
|
12
|
+
*
|
|
13
|
+
* The policy is grounded in what the proxy actually emits, not HTTP folklore.
|
|
14
|
+
* CheckpointerProxyController returns exactly four deterministic errors —
|
|
15
|
+
* 400 (malformed document), 403 (FGA deny), 404 (no such checkpoint), and
|
|
16
|
+
* 413 (the 4 MB cap) — and never a transient status. Transient failures
|
|
17
|
+
* reach the runner only as 5xx (Spring's error handler, ingress 502-504),
|
|
18
|
+
* 408/429 (infrastructure between runner and service), or as network-level
|
|
19
|
+
* fetch rejections. 401/403 stay terminal deliberately: retrying cannot fix
|
|
20
|
+
* an expired or rejected credential.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* True for HTTP statuses that signal a transient condition worth retrying:
|
|
24
|
+
* 408 (request timeout), 429 (throttled), and all 5xx. Every other status is
|
|
25
|
+
* deterministic — the proxy's 4xx errors mean the same request will fail the
|
|
26
|
+
* same way forever.
|
|
27
|
+
*/
|
|
28
|
+
export function isRetryableHttpStatus(status) {
|
|
29
|
+
return status === 408 || status === 429 || status >= 500;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* True for `fetch` rejections that signal a transient transport condition:
|
|
33
|
+
*
|
|
34
|
+
* - `TypeError` — undici's network-failure shape (`fetch failed`, with the
|
|
35
|
+
* ECONNREFUSED/ECONNRESET/DNS cause attached). A deterministic TypeError
|
|
36
|
+
* (e.g. a malformed URL) also matches, which is accepted: such a bug fails
|
|
37
|
+
* every attempt including the first test run, and the bounded budget caps
|
|
38
|
+
* the wasted retries at seconds.
|
|
39
|
+
* - `TimeoutError` — the rejection shape of `AbortSignal.timeout()`, i.e. a
|
|
40
|
+
* hung connection whose attempt we bounded ourselves.
|
|
41
|
+
*
|
|
42
|
+
* A manual abort (`AbortError`) is deliberately NOT retryable: the caller
|
|
43
|
+
* cancelled on purpose.
|
|
44
|
+
*/
|
|
45
|
+
export function isRetryableFetchError(err) {
|
|
46
|
+
if (err instanceof TypeError)
|
|
47
|
+
return true;
|
|
48
|
+
return err instanceof Error && err.name === "TimeoutError";
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=http-retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-retry.js","sourceRoot":"","sources":["../../src/shared/http-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,GAAG,YAAY,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC;AAC7D,CAAC"}
|