@stigmer/runner 3.2.1 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-fingerprint +1 -1
- package/dist/activities/call-transform.js +12 -2
- package/dist/activities/call-transform.js.map +1 -1
- package/dist/activities/call-validate.js +20 -2
- package/dist/activities/call-validate.js.map +1 -1
- package/dist/activities/discover-mcp-server.js +6 -20
- package/dist/activities/discover-mcp-server.js.map +1 -1
- package/dist/activities/execute-cursor/index.d.ts +12 -0
- package/dist/activities/execute-cursor/index.js +53 -12
- package/dist/activities/execute-cursor/index.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +19 -0
- package/dist/activities/execute-cursor/prompt-builder.js +21 -0
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +19 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js +12 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/setup.js +4 -0
- package/dist/activities/execute-deep-agent/setup.js.map +1 -1
- package/dist/activities/workflow-event-activities.js +2 -0
- package/dist/activities/workflow-event-activities.js.map +1 -1
- package/dist/config.d.ts +17 -0
- package/dist/config.js +14 -0
- package/dist/config.js.map +1 -1
- package/dist/runner-manager.d.ts +2 -0
- package/dist/runner-manager.js +2 -1
- package/dist/runner-manager.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.js +2 -1
- package/dist/runner.js.map +1 -1
- package/dist/shared/context-bridge.d.ts +30 -0
- package/dist/shared/context-bridge.js +45 -0
- package/dist/shared/context-bridge.js.map +1 -0
- package/dist/shared/sender-identity.d.ts +50 -0
- package/dist/shared/sender-identity.js +69 -0
- package/dist/shared/sender-identity.js.map +1 -0
- package/dist/shared/with-timeout.d.ts +17 -0
- package/dist/shared/with-timeout.js +34 -0
- package/dist/shared/with-timeout.js.map +1 -0
- package/dist/workflow-engine/do-executor.d.ts +7 -0
- package/dist/workflow-engine/do-executor.js +59 -1
- package/dist/workflow-engine/do-executor.js.map +1 -1
- package/dist/workflow-engine/tasks/call-function.js +68 -1
- package/dist/workflow-engine/tasks/call-function.js.map +1 -1
- package/dist/workflow-engine/types.d.ts +26 -0
- package/dist/workflow-engine/types.js.map +1 -1
- package/dist/workflows/engine-core.js +5 -1
- package/dist/workflows/engine-core.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/config.test.ts +8 -0
- package/src/activities/__tests__/call-validate.test.ts +137 -0
- package/src/activities/__tests__/classify-tool-approvals.test.ts +1 -0
- package/src/activities/__tests__/discover-mcp-server.test.ts +1 -0
- package/src/activities/__tests__/workflow-event-activities.test.ts +60 -0
- package/src/activities/call-transform.ts +20 -2
- package/src/activities/call-validate.ts +27 -2
- package/src/activities/discover-mcp-server.ts +7 -28
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +65 -0
- package/src/activities/execute-cursor/index.ts +71 -15
- package/src/activities/execute-cursor/prompt-builder.ts +44 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-reject.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-approve-all.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-history.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/index.test.ts +1 -0
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +58 -0
- package/src/activities/execute-deep-agent/__tests__/sequential-gate-resume.test.ts +1 -0
- package/src/activities/execute-deep-agent/prompt-builder.ts +35 -0
- package/src/activities/execute-deep-agent/setup.ts +4 -0
- package/src/activities/workflow-event-activities.ts +2 -0
- package/src/config.ts +23 -0
- package/src/runner-manager.ts +6 -1
- package/src/runner.ts +6 -1
- package/src/shared/__tests__/artifact-storage.test.ts +1 -0
- package/src/shared/__tests__/context-bridge.test.ts +51 -0
- package/src/shared/__tests__/sender-identity.test.ts +92 -0
- package/src/shared/__tests__/with-timeout.test.ts +45 -0
- package/src/shared/context-bridge.ts +51 -0
- package/src/shared/sender-identity.ts +85 -0
- package/src/shared/with-timeout.ts +39 -0
- package/src/workflow-engine/__tests__/do-executor.test.ts +155 -0
- package/src/workflow-engine/__tests__/tasks/call-function.test.ts +94 -0
- package/src/workflow-engine/do-executor.ts +65 -1
- package/src/workflow-engine/tasks/call-function.ts +84 -3
- package/src/workflow-engine/types.ts +27 -0
- package/src/workflows/__tests__/execute-serverless-workflow.test.ts +1 -0
- package/src/workflows/engine-core.ts +5 -1
package/dist/.build-fingerprint
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"hash":"
|
|
1
|
+
{"hash":"a3014a172896ae2b","builtAt":"2026-07-19T08:03:00.762Z","fileCount":255}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* throw a non-retryable error until implemented.
|
|
14
14
|
*/
|
|
15
15
|
import { ApplicationFailure } from "@temporalio/activity";
|
|
16
|
-
import { evaluateExpression } from "../workflow-engine/expression.js";
|
|
16
|
+
import { evaluateExpression, isStrictExpr, sanitizeExpr, } from "../workflow-engine/expression.js";
|
|
17
17
|
function normalizeEngine(raw) {
|
|
18
18
|
return raw
|
|
19
19
|
.toUpperCase()
|
|
@@ -23,11 +23,21 @@ export async function transformAction(config, taskInput) {
|
|
|
23
23
|
if (!config.expression) {
|
|
24
24
|
throw ApplicationFailure.nonRetryable("transform: 'expression' is required", "TRANSFORM_MISSING_EXPRESSION");
|
|
25
25
|
}
|
|
26
|
+
if (typeof config.expression !== "string") {
|
|
27
|
+
throw ApplicationFailure.nonRetryable(`transform: 'expression' must be a jq string, got ${typeof config.expression}. ` +
|
|
28
|
+
"Fix the expression in the workflow's transform task_config.", "TRANSFORM_INVALID_EXPRESSION");
|
|
29
|
+
}
|
|
26
30
|
const engine = normalizeEngine(config.engine || "JQ");
|
|
27
31
|
if (engine !== "JQ") {
|
|
28
32
|
throw ApplicationFailure.nonRetryable(`transform: engine '${config.engine}' is not yet supported. Only JQ is currently implemented.`, "TRANSFORM_UNSUPPORTED_ENGINE");
|
|
29
33
|
}
|
|
30
34
|
const data = config.input !== undefined ? config.input : taskInput;
|
|
31
|
-
|
|
35
|
+
// The expression arrives unresolved (deferred code — see the
|
|
36
|
+
// call-function builder). Accept both the strict `${ ... }` wrapper
|
|
37
|
+
// and the bare jq form the converter emits.
|
|
38
|
+
const expression = isStrictExpr(config.expression)
|
|
39
|
+
? sanitizeExpr(config.expression)
|
|
40
|
+
: config.expression;
|
|
41
|
+
return evaluateExpression(expression, data, {});
|
|
32
42
|
}
|
|
33
43
|
//# sourceMappingURL=call-transform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-transform.js","sourceRoot":"","sources":["../../src/activities/call-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"call-transform.js","sourceRoot":"","sources":["../../src/activities/call-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,YAAY,GACb,MAAM,kCAAkC,CAAC;AAQ1C,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,GAAG;SACP,WAAW,EAAE;SACb,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,SAAmB;IAEnB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,kBAAkB,CAAC,YAAY,CACnC,qCAAqC,EACrC,8BAA8B,CAC/B,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,kBAAkB,CAAC,YAAY,CACnC,oDAAoD,OAAO,MAAM,CAAC,UAAU,IAAI;YAC9E,6DAA6D,EAC/D,8BAA8B,CAC/B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAEtD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,kBAAkB,CAAC,YAAY,CACnC,sBAAsB,MAAM,CAAC,MAAM,2DAA2D,EAC9F,8BAA8B,CAC/B,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,6DAA6D;IAC7D,oEAAoE;IACpE,4CAA4C;IAC5C,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;QAChD,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;QACjC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;IAEtB,OAAO,kBAAkB,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* as JQ expressions — a falsy result means the rule failed.
|
|
18
18
|
*/
|
|
19
19
|
import { ApplicationFailure } from "@temporalio/activity";
|
|
20
|
-
import { evaluateExpression } from "../workflow-engine/expression.js";
|
|
20
|
+
import { evaluateExpression, isStrictExpr, sanitizeExpr, } from "../workflow-engine/expression.js";
|
|
21
21
|
function normalizeOnFail(raw) {
|
|
22
22
|
if (!raw)
|
|
23
23
|
return "RAISE";
|
|
@@ -118,7 +118,25 @@ function validateJsonSchema(data, schema) {
|
|
|
118
118
|
async function validateRules(data, rules) {
|
|
119
119
|
const errors = [];
|
|
120
120
|
for (const rule of rules) {
|
|
121
|
-
|
|
121
|
+
// Config guard: the expression must be a jq string. Anything else is
|
|
122
|
+
// a workflow-definition defect (or an upstream resolution bug) — name
|
|
123
|
+
// the rule and what to fix instead of crashing in the jq engine.
|
|
124
|
+
if (typeof rule.expression !== "string" || rule.expression.length === 0) {
|
|
125
|
+
errors.push({
|
|
126
|
+
rule: rule.name,
|
|
127
|
+
message: `Rule '${rule.name}' has an invalid 'expression': expected a jq ` +
|
|
128
|
+
`predicate string, got ${typeof rule.expression}. Fix the rule in ` +
|
|
129
|
+
`the workflow's validate task_config.`,
|
|
130
|
+
});
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
// Rule expressions arrive unresolved (deferred code — see the
|
|
134
|
+
// call-function builder). Accept both the strict `${ ... }` wrapper
|
|
135
|
+
// and a bare jq predicate.
|
|
136
|
+
const expr = isStrictExpr(rule.expression)
|
|
137
|
+
? sanitizeExpr(rule.expression)
|
|
138
|
+
: rule.expression;
|
|
139
|
+
const result = await evaluateExpression(expr, data, {});
|
|
122
140
|
if (!result) {
|
|
123
141
|
errors.push({
|
|
124
142
|
rule: rule.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-validate.js","sourceRoot":"","sources":["../../src/activities/call-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"call-validate.js","sourceRoot":"","sources":["../../src/activities/call-validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ import { StigmerClient } from "../client/stigmer-client.js";
|
|
|
24
24
|
import { mcpServerToResolved } from "../shared/mcp-resolver.js";
|
|
25
25
|
import { toMcpClientConfig } from "../shared/mcp-manager.js";
|
|
26
26
|
import { detectOAuthChallenge } from "../shared/mcp-oauth-detect.js";
|
|
27
|
+
import { withTimeout } from "../shared/with-timeout.js";
|
|
27
28
|
const SESSION_INIT_TIMEOUT_MS = 270_000;
|
|
28
29
|
const PLATFORM_INJECTABLE_MAP = {
|
|
29
30
|
STIGMER_SERVER_ADDRESS: "STIGMER_MCP_PUBLIC_ENDPOINT",
|
|
@@ -185,7 +186,11 @@ async function connectAndDiscover(slug, connectionConfig) {
|
|
|
185
186
|
const tools = [];
|
|
186
187
|
const resourceTemplates = [];
|
|
187
188
|
try {
|
|
188
|
-
|
|
189
|
+
const timeoutMessage = `MCP server '${slug}' did not respond within ` +
|
|
190
|
+
`${Math.round(SESSION_INIT_TIMEOUT_MS / 1000)}s. If this server requires compilation or ` +
|
|
191
|
+
`package installation on first run (e.g. go run, npx), the cold ` +
|
|
192
|
+
`start may have exceeded the discovery timeout.`;
|
|
193
|
+
await withTimeout(SESSION_INIT_TIMEOUT_MS, timeoutMessage, async () => {
|
|
189
194
|
await client.initializeConnections();
|
|
190
195
|
const mcpClient = await client.getClient(slug);
|
|
191
196
|
if (!mcpClient) {
|
|
@@ -259,25 +264,6 @@ async function classifyHttpOAuthFailure(slug, connectionConfig) {
|
|
|
259
264
|
}
|
|
260
265
|
return detectOAuthChallenge(connection.url, connection.headers, slug);
|
|
261
266
|
}
|
|
262
|
-
async function withTimeout(ms, serverSlug, fn) {
|
|
263
|
-
return new Promise((resolve, reject) => {
|
|
264
|
-
const timer = setTimeout(() => {
|
|
265
|
-
reject(new Error(`MCP server '${serverSlug}' did not respond within ` +
|
|
266
|
-
`${Math.round(ms / 1000)}s. If this server requires compilation or ` +
|
|
267
|
-
`package installation on first run (e.g. go run, npx), the cold ` +
|
|
268
|
-
`start may have exceeded the discovery timeout.`));
|
|
269
|
-
}, ms);
|
|
270
|
-
fn()
|
|
271
|
-
.then((result) => {
|
|
272
|
-
clearTimeout(timer);
|
|
273
|
-
resolve(result);
|
|
274
|
-
})
|
|
275
|
-
.catch((err) => {
|
|
276
|
-
clearTimeout(timer);
|
|
277
|
-
reject(err);
|
|
278
|
-
});
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
267
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
282
268
|
// Temporal Activity Factory
|
|
283
269
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover-mcp-server.js","sourceRoot":"","sources":["../../src/activities/discover-mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"discover-mcp-server.js","sourceRoot":"","sources":["../../src/activities/discover-mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,18 @@ export interface BuildPromptInput {
|
|
|
59
59
|
* .build_from_plan): both prompt paths carry the implement-plan directive.
|
|
60
60
|
*/
|
|
61
61
|
buildFromPlan?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Rollover context bridge from `SessionSpec.metadata` (cloud DD-013).
|
|
64
|
+
* Only the enhanced-prompt path consumes it — a resumed agent's native
|
|
65
|
+
* context IS the previous conversation, so it needs no bridge.
|
|
66
|
+
*/
|
|
67
|
+
contextBridge?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Channel sender identity from `SessionSpec.metadata`. Like the bridge,
|
|
70
|
+
* only the enhanced-prompt path consumes it — a resumed agent's native
|
|
71
|
+
* context already carries it from the session's first turn.
|
|
72
|
+
*/
|
|
73
|
+
senderIdentity?: import("../../shared/sender-identity.js").SenderIdentity;
|
|
62
74
|
}
|
|
63
75
|
/**
|
|
64
76
|
* Select and build the appropriate prompt based on resolution reason and
|
|
@@ -37,6 +37,8 @@ import { CursorMode } from "@stigmer/protos/ai/stigmer/agentic/session/v1/enum_p
|
|
|
37
37
|
import { determineCursorMode, isCloudMode } from "./cursor-mode.js";
|
|
38
38
|
import { MessageAccumulator, cancelInProgressSubAgentProtos, collapseRedundantToolCallTwins } from "./message-translator.js";
|
|
39
39
|
import { utcTimestamp, persistStatus, reportSetupProgress, slimStatus } from "../../shared/status.js";
|
|
40
|
+
import { readContextBridge } from "../../shared/context-bridge.js";
|
|
41
|
+
import { readSenderIdentity } from "../../shared/sender-identity.js";
|
|
40
42
|
import { withholdSecretContentFromMessages } from "../../shared/tool-row.js";
|
|
41
43
|
import { StallTimeoutError, formatStallFailure } from "../../shared/stall-watchdog.js";
|
|
42
44
|
import { resolveUsableArtifactStorage, loadArtifactStorageConfig } from "../../shared/artifact-storage.js";
|
|
@@ -85,6 +87,7 @@ import { synthesizeError, formatClassifiedError, shouldRetryWithFreshAgent } fro
|
|
|
85
87
|
import { createAgent, createCloudAgent } from "./session-lifecycle.js";
|
|
86
88
|
import { setMaxListeners } from "node:events";
|
|
87
89
|
import { startHeartbeat } from "../../shared/heartbeat.js";
|
|
90
|
+
import { withTimeout } from "../../shared/with-timeout.js";
|
|
88
91
|
import { getShutdownSignalForQueue } from "../../runner-manager.js";
|
|
89
92
|
/**
|
|
90
93
|
* Creates the activity functions bound to the runner config.
|
|
@@ -203,6 +206,24 @@ turnSeq) {
|
|
|
203
206
|
// Carries model/mode/agentId out to the outer catch so a thrown CursorSdkError
|
|
204
207
|
// can be classified with the same context as the run.wait() error path.
|
|
205
208
|
let errorContext = { model: "default", mode: "local", agentId: "" };
|
|
209
|
+
// Periodic heartbeat for the ENTIRE activity, started before any phase runs.
|
|
210
|
+
// Setup phases make network calls (blueprint resolution, workspace clone, MCP
|
|
211
|
+
// backfill, Agent.create) that can stall; the scattered manual heartbeat()
|
|
212
|
+
// pulses between them leave every individual call uncovered. The production
|
|
213
|
+
// stale-proxy incident hung inside Agent.create with zero heartbeats and
|
|
214
|
+
// surfaced as an opaque 5-minute Temporal timeout. The label names the
|
|
215
|
+
// current phase so a stall is attributed in Temporal heartbeat details, and
|
|
216
|
+
// cancellation stays observable throughout. Safe ONLY because every SDK call
|
|
217
|
+
// below is itself bounded (agentResolveTimeoutMs, stall watchdog) — an
|
|
218
|
+
// unbounded hang under a live heartbeat would keep a dead activity alive
|
|
219
|
+
// forever.
|
|
220
|
+
let heartbeatPhase = "setup";
|
|
221
|
+
const taskQueue = Context.current().info.taskQueue;
|
|
222
|
+
const shutdownSignal = getShutdownSignalForQueue(taskQueue);
|
|
223
|
+
periodicHeartbeat = startHeartbeat(30_000, () => ({
|
|
224
|
+
phase: heartbeatPhase,
|
|
225
|
+
execution: executionId,
|
|
226
|
+
}), { shutdownSignal });
|
|
206
227
|
try {
|
|
207
228
|
// Phase 1: Hydrate execution from DB
|
|
208
229
|
await reportSetupProgress(client, executionId, "Fetching execution");
|
|
@@ -214,6 +235,7 @@ turnSeq) {
|
|
|
214
235
|
session = await client.getSession(sessionId);
|
|
215
236
|
const blueprint = await resolveBlueprint(client, session, config.workspaceRootDir);
|
|
216
237
|
// Phase 2b: Resolve execution environment (MCP server credentials)
|
|
238
|
+
heartbeatPhase = "resolving_environment";
|
|
217
239
|
await reportSetupProgress(client, executionId, "Resolving environment");
|
|
218
240
|
const { envVars, secretKeys } = await resolveExecutionEnv(client, executionId);
|
|
219
241
|
heartbeat();
|
|
@@ -223,6 +245,7 @@ turnSeq) {
|
|
|
223
245
|
// disabled the runner must provision the workspace itself, mirroring the
|
|
224
246
|
// native harness. Git provisioning is idempotent across multi-turn and
|
|
225
247
|
// HITL reinvocations.
|
|
248
|
+
heartbeatPhase = "provisioning_workspace";
|
|
226
249
|
await reportSetupProgress(client, executionId, "Provisioning workspace");
|
|
227
250
|
const workspaceProvision = await provisionCursorWorkspace(config, session, envVars, sessionId ?? "");
|
|
228
251
|
blueprint.workspaceDirs = workspaceProvision.workspaceDirs;
|
|
@@ -473,6 +496,7 @@ turnSeq) {
|
|
|
473
496
|
await reportSetupProgress(client, executionId, "Resolving MCP servers");
|
|
474
497
|
let mcpResolution = await resolveMcpServers(client, blueprint.mergedMcpServerUsages, envVars);
|
|
475
498
|
// Phase 4a: Connect backfill for undiscovered MCP servers
|
|
499
|
+
heartbeatPhase = "resolving_mcp_servers";
|
|
476
500
|
const sessionOrg = session.metadata?.org ?? "";
|
|
477
501
|
mcpResolution = await backfillMcpServersIfNeeded(client, mcpResolution, blueprint.mergedMcpServerUsages, envVars, sessionOrg, heartbeat, secretKeys);
|
|
478
502
|
const mcpConfig = mcpResolution.cursorConfig;
|
|
@@ -684,7 +708,18 @@ turnSeq) {
|
|
|
684
708
|
mcpServers: mcpConfig,
|
|
685
709
|
agents: cursorSubAgents,
|
|
686
710
|
};
|
|
687
|
-
|
|
711
|
+
// Agent.create/Agent.resume have no timeout of their own — a degraded
|
|
712
|
+
// transport (dead proxy connection, stale HTTP/2 session) hangs them
|
|
713
|
+
// forever, which the periodic heartbeat would happily keep alive. The
|
|
714
|
+
// bound converts that hang into an immediate, named transport failure.
|
|
715
|
+
// The message carries "timed out" so the error classifier's network
|
|
716
|
+
// patterns mark it retryable.
|
|
717
|
+
heartbeatPhase = "resolving_agent";
|
|
718
|
+
const resolveTimeoutSeconds = Math.round(config.agentResolveTimeoutMs / 1000);
|
|
719
|
+
let resolution = await withTimeout(config.agentResolveTimeoutMs, () => `Cursor agent ${threadId ? "resume" : "create"} timed out after ${resolveTimeoutSeconds}s ` +
|
|
720
|
+
`(${config.proxyEndpoint ? `via proxy ${config.proxyEndpoint}` : "direct Cursor API connection"}). ` +
|
|
721
|
+
`The transport connection is likely dead. Retry the message; if this persists, ` +
|
|
722
|
+
`check proxy and network health.`, () => resolveAgent(threadId, createOptions, agentMode));
|
|
688
723
|
console.log(`ExecuteCursor agent resolved: execution=${executionId}, ` +
|
|
689
724
|
`reason=${resolution.reason}, mode=${resolution.mode}, ` +
|
|
690
725
|
`agentId=${resolution.agentId}, resumed=${resolution.resumed}` +
|
|
@@ -732,6 +767,8 @@ turnSeq) {
|
|
|
732
767
|
appliedToolCallIds,
|
|
733
768
|
interactionMode,
|
|
734
769
|
buildFromPlan,
|
|
770
|
+
contextBridge: readContextBridge(blueprint.sessionSpec.metadata),
|
|
771
|
+
senderIdentity: readSenderIdentity(blueprint.sessionSpec.metadata),
|
|
735
772
|
});
|
|
736
773
|
// Phase 10a: Inject structured output instruction for Cursor harness
|
|
737
774
|
let effectivePrompt = prompt;
|
|
@@ -806,16 +843,10 @@ turnSeq) {
|
|
|
806
843
|
state: turnState,
|
|
807
844
|
maxCostUsd,
|
|
808
845
|
};
|
|
809
|
-
//
|
|
810
|
-
// (
|
|
811
|
-
//
|
|
812
|
-
|
|
813
|
-
const taskQueue = Context.current().info.taskQueue;
|
|
814
|
-
const shutdownSignal = getShutdownSignalForQueue(taskQueue);
|
|
815
|
-
periodicHeartbeat = startHeartbeat(30_000, () => ({
|
|
816
|
-
phase: "cursor_streaming",
|
|
817
|
-
execution: executionId,
|
|
818
|
-
}), { shutdownSignal });
|
|
846
|
+
// The activity-wide periodic heartbeat (started at entry) keeps Temporal
|
|
847
|
+
// informed during silent SDK operations (long tool calls, MCP requests,
|
|
848
|
+
// model thinking); relabel it for the streaming phase.
|
|
849
|
+
heartbeatPhase = "cursor_streaming";
|
|
819
850
|
// The Cursor SDK registers abort listeners on the cancellation signal for
|
|
820
851
|
// each concurrent tool call (fetch, MCP, shell). With 10+ parallel tools,
|
|
821
852
|
// Node's default limit of 10 triggers MaxListenersExceededWarning. This is
|
|
@@ -1229,6 +1260,8 @@ turnSeq) {
|
|
|
1229
1260
|
attachmentPaths,
|
|
1230
1261
|
pendingApprovals: adjudicatedApprovals,
|
|
1231
1262
|
interactionMode,
|
|
1263
|
+
contextBridge: readContextBridge(blueprint.sessionSpec.metadata),
|
|
1264
|
+
senderIdentity: readSenderIdentity(blueprint.sessionSpec.metadata),
|
|
1232
1265
|
});
|
|
1233
1266
|
console.log(`ExecuteCursor retry with fresh agent: execution=${executionId}, ` +
|
|
1234
1267
|
`newAgentId=${freshAgent.agentId}`);
|
|
@@ -1577,6 +1610,11 @@ turnSeq) {
|
|
|
1577
1610
|
return slimStatus(status);
|
|
1578
1611
|
}
|
|
1579
1612
|
finally {
|
|
1613
|
+
// Stop the activity-wide periodic heartbeat on EVERY exit path
|
|
1614
|
+
// (idempotent). The epilogue and catch stop it at the pause/shutdown
|
|
1615
|
+
// disambiguation points; this covers early returns (e.g. the
|
|
1616
|
+
// pure-reconcile resume) so no orphaned timer survives the activity.
|
|
1617
|
+
periodicHeartbeat?.stop();
|
|
1580
1618
|
// End the OTel turn span + record metrics with the final token snapshot on
|
|
1581
1619
|
// EVERY exit path (idempotent). Placed here so the span covers any recovery
|
|
1582
1620
|
// retry (whose tokens accrue after the primary stream) and never leaks on an
|
|
@@ -1723,7 +1761,8 @@ export function buildPrompt(input) {
|
|
|
1723
1761
|
: userMessage;
|
|
1724
1762
|
}
|
|
1725
1763
|
// First execution, or a fresh agent created after a resume failure: there is
|
|
1726
|
-
// no prior conversation to inherit, so start a new turn with full context
|
|
1764
|
+
// no prior conversation to inherit, so start a new turn with full context —
|
|
1765
|
+
// including the rollover bridge, when the session carries one.
|
|
1727
1766
|
return buildEnhancedPrompt({
|
|
1728
1767
|
instructions,
|
|
1729
1768
|
userMessage,
|
|
@@ -1734,6 +1773,8 @@ export function buildPrompt(input) {
|
|
|
1734
1773
|
attachmentPaths,
|
|
1735
1774
|
interactionMode,
|
|
1736
1775
|
buildFromPlan,
|
|
1776
|
+
contextBridge: input.contextBridge,
|
|
1777
|
+
senderIdentity: input.senderIdentity,
|
|
1737
1778
|
});
|
|
1738
1779
|
}
|
|
1739
1780
|
// ---------------------------------------------------------------------------
|