@stigmer/runner 3.4.1 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-fingerprint +1 -1
- package/dist/activities/attach-session.d.ts +34 -0
- package/dist/activities/attach-session.js +95 -0
- package/dist/activities/attach-session.js.map +1 -0
- package/dist/activities/discover-mcp-server.d.ts +9 -0
- package/dist/activities/discover-mcp-server.js +6 -1
- package/dist/activities/discover-mcp-server.js.map +1 -1
- package/dist/activities/execute-cursor/connect-backfill.d.ts +2 -1
- package/dist/activities/execute-cursor/connect-backfill.js +2 -2
- package/dist/activities/execute-cursor/connect-backfill.js.map +1 -1
- package/dist/activities/execute-cursor/fetch-interceptor.js +31 -0
- package/dist/activities/execute-cursor/fetch-interceptor.js.map +1 -1
- package/dist/activities/execute-cursor/index.js +70 -3
- package/dist/activities/execute-cursor/index.js.map +1 -1
- package/dist/activities/execute-cursor/mcp-resolver.d.ts +7 -1
- package/dist/activities/execute-cursor/mcp-resolver.js +15 -2
- package/dist/activities/execute-cursor/mcp-resolver.js.map +1 -1
- package/dist/activities/execute-cursor/sdk-warmup.d.ts +44 -0
- package/dist/activities/execute-cursor/sdk-warmup.js +61 -0
- package/dist/activities/execute-cursor/sdk-warmup.js.map +1 -0
- package/dist/activities/execute-deep-agent/setup.js +48 -5
- package/dist/activities/execute-deep-agent/setup.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +9 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.js +19 -5
- package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
- package/dist/client/stigmer-client.d.ts +13 -1
- package/dist/client/stigmer-client.js +40 -5
- package/dist/client/stigmer-client.js.map +1 -1
- package/dist/client/token-claims.d.ts +9 -6
- package/dist/client/token-claims.js +22 -6
- package/dist/client/token-claims.js.map +1 -1
- package/dist/main.d.ts +8 -1
- package/dist/main.js +122 -2
- package/dist/main.js.map +1 -1
- package/dist/middleware/index.d.ts +0 -1
- package/dist/middleware/index.js +0 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/otel-metrics.d.ts +10 -1
- package/dist/otel-metrics.js +22 -1
- package/dist/otel-metrics.js.map +1 -1
- package/dist/pool-member.d.ts +61 -0
- package/dist/pool-member.js +51 -0
- package/dist/pool-member.js.map +1 -0
- package/dist/runner-manager.d.ts +7 -0
- package/dist/runner-manager.js +39 -1
- package/dist/runner-manager.js.map +1 -1
- package/dist/runner.js +15 -1
- package/dist/runner.js.map +1 -1
- package/dist/shared/cold-start-timing.d.ts +89 -0
- package/dist/shared/cold-start-timing.js +166 -0
- package/dist/shared/cold-start-timing.js.map +1 -0
- package/dist/shared/connect-backfill.d.ts +2 -1
- package/dist/shared/connect-backfill.js +4 -2
- package/dist/shared/connect-backfill.js.map +1 -1
- package/dist/shared/mcp-manager.d.ts +5 -15
- package/dist/shared/mcp-manager.js +5 -32
- package/dist/shared/mcp-manager.js.map +1 -1
- package/dist/shared/mcp-resolver.d.ts +15 -5
- package/dist/shared/mcp-resolver.js +23 -6
- package/dist/shared/mcp-resolver.js.map +1 -1
- package/dist/shared/mcp-transport-guard.d.ts +53 -0
- package/dist/shared/mcp-transport-guard.js +70 -0
- package/dist/shared/mcp-transport-guard.js.map +1 -0
- package/dist/shared/tool-kind.js +6 -0
- package/dist/shared/tool-kind.js.map +1 -1
- package/dist/tools/index.d.ts +27 -0
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/think-tool.js.map +1 -0
- package/dist/tools/url-guard.d.ts +64 -0
- package/dist/tools/url-guard.js +211 -0
- package/dist/tools/url-guard.js.map +1 -0
- package/dist/tools/web-fetch-tool.d.ts +53 -0
- package/dist/tools/web-fetch-tool.js +216 -0
- package/dist/tools/web-fetch-tool.js.map +1 -0
- package/package.json +4 -2
- package/src/__tests__/otel-metrics.test.ts +6 -0
- package/src/__tests__/pool-member.test.ts +76 -0
- package/src/activities/__tests__/attach-session.test.ts +133 -0
- package/src/activities/__tests__/discover-mcp-server.test.ts +34 -11
- package/src/activities/attach-session.ts +112 -0
- package/src/activities/discover-mcp-server.ts +19 -1
- package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +77 -0
- package/src/activities/execute-cursor/__tests__/sdk-warmup.test.ts +45 -0
- package/src/activities/execute-cursor/connect-backfill.ts +3 -0
- package/src/activities/execute-cursor/fetch-interceptor.ts +39 -0
- package/src/activities/execute-cursor/index.ts +72 -3
- package/src/activities/execute-cursor/mcp-resolver.ts +21 -2
- package/src/activities/execute-cursor/sdk-warmup.ts +68 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-transformer.test.ts +24 -0
- package/src/activities/execute-deep-agent/setup.ts +48 -7
- package/src/activities/execute-deep-agent/subagent-transformer.ts +27 -2
- package/src/client/__tests__/stigmer-client.test.ts +77 -2
- package/src/client/__tests__/token-claims.test.ts +15 -1
- package/src/client/stigmer-client.ts +51 -6
- package/src/client/token-claims.ts +29 -6
- package/src/main.ts +139 -2
- package/src/middleware/index.ts +0 -1
- package/src/otel-metrics.ts +25 -1
- package/src/pool-member.ts +99 -0
- package/src/runner-manager.ts +52 -0
- package/src/runner.ts +15 -0
- package/src/shared/__tests__/cold-start-timing.test.ts +271 -0
- package/src/shared/__tests__/connect-backfill.test.ts +11 -11
- package/src/shared/__tests__/mcp-manager.test.ts +2 -73
- package/src/shared/__tests__/mcp-resolver.test.ts +108 -0
- package/src/shared/__tests__/mcp-transport-guard.test.ts +71 -0
- package/src/shared/cold-start-timing.ts +197 -0
- package/src/shared/connect-backfill.ts +5 -1
- package/src/shared/mcp-manager.ts +4 -41
- package/src/shared/mcp-resolver.ts +29 -6
- package/src/shared/mcp-transport-guard.ts +81 -0
- package/src/shared/tool-kind.ts +6 -0
- package/src/tools/__tests__/url-guard.test.ts +137 -0
- package/src/tools/__tests__/web-fetch-tool.test.ts +193 -0
- package/src/tools/index.ts +28 -0
- package/src/tools/url-guard.ts +232 -0
- package/src/tools/web-fetch-tool.ts +275 -0
- package/dist/middleware/think-tool.js.map +0 -1
- /package/dist/{middleware → tools}/think-tool.d.ts +0 -0
- /package/dist/{middleware → tools}/think-tool.js +0 -0
- /package/src/{middleware → tools}/__tests__/think-tool.test.ts +0 -0
- /package/src/{middleware → tools}/think-tool.ts +0 -0
package/dist/.build-fingerprint
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"hash":"
|
|
1
|
+
{"hash":"e6e8aaaa8f1d32b4","builtAt":"2026-07-30T18:15:55.955Z","fileCount":265}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Warm-pool attach activities.
|
|
3
|
+
*
|
|
4
|
+
* Registered in the standard activity set (both runner and runner-manager
|
|
5
|
+
* copies) but functional only inside a pool member: they read the pool
|
|
6
|
+
* context registered by the pool boot path (see pool-member.ts) and fail
|
|
7
|
+
* fast everywhere else. The control plane schedules them on the member's
|
|
8
|
+
* control queue `sandbox:{memberId}`, which only a pool member ever polls.
|
|
9
|
+
*
|
|
10
|
+
* Activity contracts (invoked by the cloud ClaimPoolMemberWorkflow):
|
|
11
|
+
*
|
|
12
|
+
* Name: "ProbePoolMember"
|
|
13
|
+
* Input: none
|
|
14
|
+
* Output: string (the member id — proof the member is booted and polling)
|
|
15
|
+
*
|
|
16
|
+
* Name: "AttachSession"
|
|
17
|
+
* Input: (sessionId: string)
|
|
18
|
+
* Output: string (the session task queue now being polled)
|
|
19
|
+
*
|
|
20
|
+
* AttachSession is the claim hand-off: exchange the member's pool_sandbox
|
|
21
|
+
* credential for the session's sandbox token (the control plane authorizes
|
|
22
|
+
* against the claim record), push the session token to every credential sink
|
|
23
|
+
* via the manager, then start the session worker. From the returned ack
|
|
24
|
+
* onward the member serves `session:{sessionId}` like any provisioned
|
|
25
|
+
* sandbox. The control worker keeps polling its (now permanently idle)
|
|
26
|
+
* control queue — the claim deleted the pool row, so nothing dispatches
|
|
27
|
+
* there again, and the worker disappears with the next pod restart; tearing
|
|
28
|
+
* down the worker an activity is running on would deadlock the teardown.
|
|
29
|
+
*/
|
|
30
|
+
import type { Config } from "../config.js";
|
|
31
|
+
export declare function createAttachSessionActivities(config: Config): {
|
|
32
|
+
ProbePoolMember: () => Promise<string>;
|
|
33
|
+
AttachSession: (sessionId: string) => Promise<string>;
|
|
34
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Warm-pool attach activities.
|
|
3
|
+
*
|
|
4
|
+
* Registered in the standard activity set (both runner and runner-manager
|
|
5
|
+
* copies) but functional only inside a pool member: they read the pool
|
|
6
|
+
* context registered by the pool boot path (see pool-member.ts) and fail
|
|
7
|
+
* fast everywhere else. The control plane schedules them on the member's
|
|
8
|
+
* control queue `sandbox:{memberId}`, which only a pool member ever polls.
|
|
9
|
+
*
|
|
10
|
+
* Activity contracts (invoked by the cloud ClaimPoolMemberWorkflow):
|
|
11
|
+
*
|
|
12
|
+
* Name: "ProbePoolMember"
|
|
13
|
+
* Input: none
|
|
14
|
+
* Output: string (the member id — proof the member is booted and polling)
|
|
15
|
+
*
|
|
16
|
+
* Name: "AttachSession"
|
|
17
|
+
* Input: (sessionId: string)
|
|
18
|
+
* Output: string (the session task queue now being polled)
|
|
19
|
+
*
|
|
20
|
+
* AttachSession is the claim hand-off: exchange the member's pool_sandbox
|
|
21
|
+
* credential for the session's sandbox token (the control plane authorizes
|
|
22
|
+
* against the claim record), push the session token to every credential sink
|
|
23
|
+
* via the manager, then start the session worker. From the returned ack
|
|
24
|
+
* onward the member serves `session:{sessionId}` like any provisioned
|
|
25
|
+
* sandbox. The control worker keeps polling its (now permanently idle)
|
|
26
|
+
* control queue — the claim deleted the pool row, so nothing dispatches
|
|
27
|
+
* there again, and the worker disappears with the next pod restart; tearing
|
|
28
|
+
* down the worker an activity is running on would deadlock the teardown.
|
|
29
|
+
*/
|
|
30
|
+
import { StigmerClient } from "../client/stigmer-client.js";
|
|
31
|
+
import { activityStarted, activityFinished } from "../idle-watchdog.js";
|
|
32
|
+
import { getPoolMemberContext } from "../pool-member.js";
|
|
33
|
+
import { TimingRecorder, emitTimingLog } from "../shared/cold-start-timing.js";
|
|
34
|
+
export function createAttachSessionActivities(config) {
|
|
35
|
+
const client = new StigmerClient({
|
|
36
|
+
endpoint: config.stigmerBackendEndpoint,
|
|
37
|
+
token: config.stigmerToken,
|
|
38
|
+
tokenRef: config.stigmerTokenRef,
|
|
39
|
+
runnerTokenRef: config.stigmerRunnerTokenRef,
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
ProbePoolMember: async () => {
|
|
43
|
+
activityStarted();
|
|
44
|
+
try {
|
|
45
|
+
const pool = getPoolMemberContext();
|
|
46
|
+
if (!pool) {
|
|
47
|
+
throw new Error("ProbePoolMember invoked outside a pool member (no pool context registered)");
|
|
48
|
+
}
|
|
49
|
+
return pool.memberId;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
activityFinished();
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
AttachSession: async (sessionId) => {
|
|
56
|
+
activityStarted();
|
|
57
|
+
const timing = new TimingRecorder();
|
|
58
|
+
try {
|
|
59
|
+
const pool = getPoolMemberContext();
|
|
60
|
+
if (!pool) {
|
|
61
|
+
throw new Error("AttachSession invoked outside a pool member (no pool context registered)");
|
|
62
|
+
}
|
|
63
|
+
if (!sessionId) {
|
|
64
|
+
throw new Error("AttachSession requires a session id");
|
|
65
|
+
}
|
|
66
|
+
const scoped = await client.getRunnerScopedToken({ poolClaimSessionId: sessionId }, pool.poolToken);
|
|
67
|
+
timing.mark("exchange_token");
|
|
68
|
+
if (!scoped) {
|
|
69
|
+
// Unlike the desktop exchange, there is no credential to fall back
|
|
70
|
+
// to: a pool token cannot serve session work, so an empty mint is a
|
|
71
|
+
// hard failure and the control plane discards this member.
|
|
72
|
+
throw new Error("control plane minted no session token for the pool claim " +
|
|
73
|
+
`(member=${pool.memberId}, session=${sessionId})`);
|
|
74
|
+
}
|
|
75
|
+
pool.manager.updateToken(scoped.token);
|
|
76
|
+
timing.mark("token_applied");
|
|
77
|
+
await pool.manager.addSession(sessionId);
|
|
78
|
+
timing.mark("session_worker_added");
|
|
79
|
+
const taskQueue = `session:${sessionId}`;
|
|
80
|
+
emitTimingLog("pool_attach", {
|
|
81
|
+
pool_member_id: pool.memberId,
|
|
82
|
+
session_id: sessionId,
|
|
83
|
+
task_queue: taskQueue,
|
|
84
|
+
}, timing);
|
|
85
|
+
console.log(`[attach-session] Pool member ${pool.memberId} attached to session ` +
|
|
86
|
+
`${sessionId} (queue=${taskQueue})`);
|
|
87
|
+
return taskQueue;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
activityFinished();
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=attach-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach-session.js","sourceRoot":"","sources":["../../src/activities/attach-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/E,MAAM,UAAU,6BAA6B,CAAC,MAAc;IAC1D,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC,sBAAsB;QACvC,KAAK,EAAE,MAAM,CAAC,YAAY;QAC1B,QAAQ,EAAE,MAAM,CAAC,eAAe;QAChC,cAAc,EAAE,MAAM,CAAC,qBAAqB;KAC7C,CAAC,CAAC;IAEH,OAAO;QACL,eAAe,EAAE,KAAK,IAAqB,EAAE;YAC3C,eAAe,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC,QAAQ,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACT,gBAAgB,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,SAAiB,EAAmB,EAAE;YAC1D,eAAe,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACzD,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAC9C,EAAE,kBAAkB,EAAE,SAAS,EAAE,EACjC,IAAI,CAAC,SAAS,CACf,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,mEAAmE;oBACnE,oEAAoE;oBACpE,2DAA2D;oBAC3D,MAAM,IAAI,KAAK,CACb,2DAA2D;wBACzD,WAAW,IAAI,CAAC,QAAQ,aAAa,SAAS,GAAG,CACpD,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAE7B,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAEpC,MAAM,SAAS,GAAG,WAAW,SAAS,EAAE,CAAC;gBACzC,aAAa,CAAC,aAAa,EAAE;oBAC3B,cAAc,EAAE,IAAI,CAAC,QAAQ;oBAC7B,UAAU,EAAE,SAAS;oBACrB,UAAU,EAAE,SAAS;iBACtB,EAAE,MAAM,CAAC,CAAC;gBACX,OAAO,CAAC,GAAG,CACT,gCAAgC,IAAI,CAAC,QAAQ,uBAAuB;oBAClE,GAAG,SAAS,WAAW,SAAS,GAAG,CACtC,CAAC;gBACF,OAAO,SAAS,CAAC;YACnB,CAAC;oBAAS,CAAC;gBACT,gBAAgB,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* Output: DiscoverMcpServerOutput
|
|
19
19
|
*/
|
|
20
20
|
import { StigmerClient } from "../client/stigmer-client.js";
|
|
21
|
+
import { type McpTransportPosture } from "../shared/mcp-transport-guard.js";
|
|
21
22
|
import type { McpServer } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
22
23
|
import type { Config } from "../config.js";
|
|
23
24
|
export interface DiscoverMcpServerInput {
|
|
@@ -64,6 +65,14 @@ export declare function extractPreviousState(mcpServer: McpServer): PreviousStat
|
|
|
64
65
|
export declare function injectPlatformEnv(declaredEnvKeys: Set<string>, envVars: Record<string, string>): Record<string, string>;
|
|
65
66
|
export interface DiscoverDeps {
|
|
66
67
|
stigmerClient: StigmerClient;
|
|
68
|
+
/**
|
|
69
|
+
* Whether stdio servers may be spawned here (derive via
|
|
70
|
+
* resolveMcpTransportPosture(config.mode)). Discovery spawns the same
|
|
71
|
+
* subprocess an execution would, so it enforces the same
|
|
72
|
+
* local-runner-only rule — a cloud runner refuses stdio even for
|
|
73
|
+
* tool enumeration.
|
|
74
|
+
*/
|
|
75
|
+
transportPosture: McpTransportPosture;
|
|
67
76
|
}
|
|
68
77
|
export declare function discoverMcpServer(input: DiscoverMcpServerInput, deps: DiscoverDeps): Promise<DiscoverMcpServerOutput>;
|
|
69
78
|
export declare function createDiscoverMcpServerActivities(config: Config): {
|
|
@@ -23,6 +23,7 @@ import { activityStarted, activityFinished } from "../idle-watchdog.js";
|
|
|
23
23
|
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
|
+
import { assertTransportAllowed, resolveMcpTransportPosture, } from "../shared/mcp-transport-guard.js";
|
|
26
27
|
import { detectOAuthChallenge } from "../shared/mcp-oauth-detect.js";
|
|
27
28
|
import { withTimeout } from "../shared/with-timeout.js";
|
|
28
29
|
const SESSION_INIT_TIMEOUT_MS = 270_000;
|
|
@@ -137,6 +138,7 @@ export async function discoverMcpServer(input, deps) {
|
|
|
137
138
|
throw new Error(`MCP server '${slug}' has no valid server type configured ` +
|
|
138
139
|
`(must specify either 'stdio' or 'http' in the spec)`);
|
|
139
140
|
}
|
|
141
|
+
assertTransportAllowed(resolved.slug, resolved.connectionType, deps.transportPosture);
|
|
140
142
|
const connectionConfig = toMcpClientConfig([resolved]);
|
|
141
143
|
const { tools, resourceTemplates } = await connectAndDiscover(slug, connectionConfig);
|
|
142
144
|
const newFp = toolsFingerprint(tools);
|
|
@@ -278,7 +280,10 @@ export function createDiscoverMcpServerActivities(config) {
|
|
|
278
280
|
DiscoverMcpServerCapabilities: async (input) => {
|
|
279
281
|
activityStarted();
|
|
280
282
|
try {
|
|
281
|
-
return await discoverMcpServer(input, {
|
|
283
|
+
return await discoverMcpServer(input, {
|
|
284
|
+
stigmerClient,
|
|
285
|
+
transportPosture: resolveMcpTransportPosture(config.mode),
|
|
286
|
+
});
|
|
282
287
|
}
|
|
283
288
|
finally {
|
|
284
289
|
activityFinished();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover-mcp-server.js","sourceRoot":"","sources":["../../src/activities/discover-mcp-server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"discover-mcp-server.js","sourceRoot":"","sources":["../../src/activities/discover-mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,9 +10,10 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { McpResolutionResult } from "./mcp-resolver.js";
|
|
12
12
|
import type { StigmerClient } from "../../client/stigmer-client.js";
|
|
13
|
+
import type { McpTransportPosture } from "../../shared/mcp-transport-guard.js";
|
|
13
14
|
import type { McpServerUsage } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/spec_pb";
|
|
14
15
|
/**
|
|
15
16
|
* Run connect backfill and return an updated cursor-specific
|
|
16
17
|
* McpResolutionResult with rebuilt cursorConfig.
|
|
17
18
|
*/
|
|
18
|
-
export declare function backfillMcpServersIfNeeded(client: StigmerClient, currentResult: McpResolutionResult, usages: McpServerUsage[], envVars: Record<string, string>, org: string, onHeartbeat?: () => void, secretKeys?: ReadonlySet<string>): Promise<McpResolutionResult>;
|
|
19
|
+
export declare function backfillMcpServersIfNeeded(client: StigmerClient, currentResult: McpResolutionResult, usages: McpServerUsage[], envVars: Record<string, string>, org: string, transportPosture: McpTransportPosture, onHeartbeat?: () => void, secretKeys?: ReadonlySet<string>): Promise<McpResolutionResult>;
|
|
@@ -14,8 +14,8 @@ import { backfillMcpServersIfNeeded as sharedBackfill } from "../../shared/conne
|
|
|
14
14
|
* Run connect backfill and return an updated cursor-specific
|
|
15
15
|
* McpResolutionResult with rebuilt cursorConfig.
|
|
16
16
|
*/
|
|
17
|
-
export async function backfillMcpServersIfNeeded(client, currentResult, usages, envVars, org, onHeartbeat, secretKeys) {
|
|
18
|
-
const updatedServers = await sharedBackfill(client, currentResult.resolvedServers, usages, envVars, org, onHeartbeat, secretKeys);
|
|
17
|
+
export async function backfillMcpServersIfNeeded(client, currentResult, usages, envVars, org, transportPosture, onHeartbeat, secretKeys) {
|
|
18
|
+
const updatedServers = await sharedBackfill(client, currentResult.resolvedServers, usages, envVars, org, transportPosture, onHeartbeat, secretKeys);
|
|
19
19
|
if (updatedServers === currentResult.resolvedServers) {
|
|
20
20
|
return currentResult;
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect-backfill.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/connect-backfill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"connect-backfill.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/connect-backfill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAItD,OAAO,EAAE,0BAA0B,IAAI,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEhG;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAqB,EACrB,aAAkC,EAClC,MAAwB,EACxB,OAA+B,EAC/B,GAAW,EACX,gBAAqC,EACrC,WAAwB,EACxB,UAAgC;IAEhC,MAAM,cAAc,GAAG,MAAM,cAAc,CACzC,MAAM,EACN,aAAa,CAAC,eAAe,EAC7B,MAAM,EACN,OAAO,EACP,GAAG,EACH,gBAAgB,EAChB,WAAW,EACX,UAAU,CACX,CAAC;IAEF,IAAI,cAAc,KAAK,aAAa,CAAC,eAAe,EAAE,CAAC;QACrD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO;QACL,YAAY,EAAE,iBAAiB,CAAC,cAAc,CAAC;QAC/C,eAAe,EAAE,cAAc;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -15,6 +15,16 @@
|
|
|
15
15
|
* When STIGMER_PROXY_ENDPOINT is not set, this module is a no-op.
|
|
16
16
|
*/
|
|
17
17
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
18
|
+
import { TimingRecorder, emitTimingLog } from "../../shared/cold-start-timing.js";
|
|
19
|
+
/**
|
|
20
|
+
* The one REST path worth timing individually: the Cursor SDK calls
|
|
21
|
+
* GET /v1/models inside Agent.create/Agent.resume purely to validate the
|
|
22
|
+
* model id, and in proxy mode that is a runner → Stigmer → Cursor double
|
|
23
|
+
* hop sitting inside the resolve_agent setup segment (issue #209). The
|
|
24
|
+
* emitted `cursor_models_fetch` timeline splits that network cost out of
|
|
25
|
+
* the segment total without touching the SDK.
|
|
26
|
+
*/
|
|
27
|
+
const MODELS_PATH = "/v1/models";
|
|
18
28
|
const CURSOR_DOMAINS = [
|
|
19
29
|
"api2.cursor.sh",
|
|
20
30
|
"api.cursor.com",
|
|
@@ -215,8 +225,12 @@ async function fetchWithUrlRewrite(url, init, config) {
|
|
|
215
225
|
const rewrittenUrl = rewriteUrl(url, config.proxyEndpoint);
|
|
216
226
|
const rewrittenInit = replaceAuth(init, config);
|
|
217
227
|
const path = extractPath(url);
|
|
228
|
+
const modelsTiming = path === MODELS_PATH ? new TimingRecorder() : undefined;
|
|
218
229
|
try {
|
|
219
230
|
const response = await originalFetch(rewrittenUrl, rewrittenInit);
|
|
231
|
+
if (modelsTiming) {
|
|
232
|
+
emitModelsFetchTiming(modelsTiming, config, response.status);
|
|
233
|
+
}
|
|
220
234
|
if (!response.ok) {
|
|
221
235
|
if (isNonCriticalPath(path)) {
|
|
222
236
|
console.debug(`[proxy-interceptor] Non-critical Cursor request failed (expected): ${init?.method ?? "GET"} ${path} → proxy status=${response.status}`);
|
|
@@ -233,6 +247,23 @@ async function fetchWithUrlRewrite(url, init, config) {
|
|
|
233
247
|
throw err;
|
|
234
248
|
}
|
|
235
249
|
}
|
|
250
|
+
/**
|
|
251
|
+
* Emit the `cursor_models_fetch` timeline for one proxied GET /v1/models.
|
|
252
|
+
*
|
|
253
|
+
* `execution_id` comes from the AsyncLocalStorage execution context — the
|
|
254
|
+
* whole ExecuteCursor activity runs inside runWithExecutionContext, so the
|
|
255
|
+
* value is correct even with concurrent activities on one runner process.
|
|
256
|
+
* `recordTimingMetric` deliberately ignores this event (no mapped OTel
|
|
257
|
+
* instrument): it is a forensic stdout line only, joined to the
|
|
258
|
+
* execution_setup timeline by execution_id in cold-start-baseline analysis.
|
|
259
|
+
*/
|
|
260
|
+
function emitModelsFetchTiming(timing, config, httpStatus) {
|
|
261
|
+
timing.mark("models_fetch");
|
|
262
|
+
emitTimingLog("cursor_models_fetch", {
|
|
263
|
+
execution_id: executionContext.getStore()?.executionId ?? config.executionId,
|
|
264
|
+
http_status: httpStatus,
|
|
265
|
+
}, timing);
|
|
266
|
+
}
|
|
236
267
|
/**
|
|
237
268
|
* Connect-RPC-via-fetch path: inject x-stigmer-auth for BiDi proxy
|
|
238
269
|
* authentication without rewriting the URL or replacing authorization.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-interceptor.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/fetch-interceptor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fetch-interceptor.js","sourceRoot":"","sources":["../../../src/activities/execute-cursor/fetch-interceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,7 @@ 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 { TimingRecorder, emitTimingLog } from "../../shared/cold-start-timing.js";
|
|
40
41
|
import { readContextBridge } from "../../shared/context-bridge.js";
|
|
41
42
|
import { readSenderIdentity } from "../../shared/sender-identity.js";
|
|
42
43
|
import { readSessionContext } from "../../shared/session-context.js";
|
|
@@ -49,6 +50,7 @@ import { TodoTracker } from "./todo-tracker.js";
|
|
|
49
50
|
import { StreamingUpdateScheduler, loadStreamingConfig } from "../../shared/streaming-scheduler.js";
|
|
50
51
|
import { createCursorEventRecorder } from "./cursor-event-recorder.js";
|
|
51
52
|
import { resolveMcpServers, toCursorMcpConfig, validateMcpServerEnv } from "./mcp-resolver.js";
|
|
53
|
+
import { resolveMcpTransportPosture } from "../../shared/mcp-transport-guard.js";
|
|
52
54
|
import { injectDatastoreAttachment, synthesizeDatastoreAttachment, } from "../../shared/datastore-attachment.js";
|
|
53
55
|
import { mergeApprovalPolicies } from "./approval-policy.js";
|
|
54
56
|
import { deriveActiveLeases, isUnattendedApprovalMode } from "../../shared/approval-policy.js";
|
|
@@ -135,6 +137,11 @@ turnSeq) {
|
|
|
135
137
|
phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
|
|
136
138
|
startedAt: utcTimestamp(),
|
|
137
139
|
});
|
|
140
|
+
// Cold-start timeline of this turn's setup (warm-agent-surfaces Phase 0):
|
|
141
|
+
// one mark after each phase, emitted as a single structured log line once
|
|
142
|
+
// the Cursor agent is resolved (early returns skip it — partial setups are
|
|
143
|
+
// not comparable cold-start samples).
|
|
144
|
+
const setupTiming = new TimingRecorder();
|
|
138
145
|
// Artifact storage for offloading oversized tool outputs (screenshots, giant
|
|
139
146
|
// dumps) out of the persisted status, and for publishing the plan artifact.
|
|
140
147
|
// Resolved once here so it is available to EVERY persist below. Best-effort via
|
|
@@ -143,6 +150,7 @@ turnSeq) {
|
|
|
143
150
|
// local path). An absent store disables offload (persistStatus still enforces
|
|
144
151
|
// the aggregate size cap) and flips capture mode off (deny-gate fallback).
|
|
145
152
|
const artifactStorage = await resolveUsableArtifactStorage(loadArtifactStorageConfig(config), { executionId });
|
|
153
|
+
setupTiming.mark("resolve_artifact_storage");
|
|
146
154
|
const statusOffload = artifactStorage
|
|
147
155
|
? { artifactStorage, executionId }
|
|
148
156
|
: undefined;
|
|
@@ -231,15 +239,18 @@ turnSeq) {
|
|
|
231
239
|
const execution = await client.getExecution(executionId);
|
|
232
240
|
const spec = execution.spec;
|
|
233
241
|
sessionId = spec.sessionId;
|
|
242
|
+
setupTiming.mark("fetch_execution");
|
|
234
243
|
// Phase 2: Load session and resolve full agent blueprint
|
|
235
244
|
await reportSetupProgress(client, executionId, "Resolving agent blueprint");
|
|
236
245
|
session = await client.getSession(sessionId);
|
|
237
246
|
const blueprint = await resolveBlueprint(client, session, config.workspaceRootDir);
|
|
247
|
+
setupTiming.mark("resolve_blueprint");
|
|
238
248
|
// Phase 2b: Resolve execution environment (MCP server credentials)
|
|
239
249
|
heartbeatPhase = "resolving_environment";
|
|
240
250
|
await reportSetupProgress(client, executionId, "Resolving environment");
|
|
241
251
|
const { envVars, secretKeys } = await resolveExecutionEnv(client, executionId);
|
|
242
252
|
heartbeat();
|
|
253
|
+
setupTiming.mark("resolve_environment");
|
|
243
254
|
// Phase 2c: Provision the workspace (clone git repos / mount local paths)
|
|
244
255
|
// so the LOCAL Cursor agent operates on the actual repo. Cursor previously
|
|
245
256
|
// relied on cloud agents to clone git-repo workspace entries; with cloud
|
|
@@ -251,6 +262,7 @@ turnSeq) {
|
|
|
251
262
|
const workspaceProvision = await provisionCursorWorkspace(config, session, envVars, sessionId ?? "");
|
|
252
263
|
blueprint.workspaceDirs = workspaceProvision.workspaceDirs;
|
|
253
264
|
heartbeat();
|
|
265
|
+
setupTiming.mark("provision_workspace");
|
|
254
266
|
// Git write-back: pushes the session's APPROVED tree to the session
|
|
255
267
|
// branch (stigmer/<session-id>) and keeps one PR open — the same
|
|
256
268
|
// approval-gated model as the deep-agent harness (its
|
|
@@ -337,6 +349,7 @@ turnSeq) {
|
|
|
337
349
|
}
|
|
338
350
|
}
|
|
339
351
|
heartbeat();
|
|
352
|
+
setupTiming.mark("acquire_workspace_lock");
|
|
340
353
|
// Set OTel baggage so downstream calls carry execution context.
|
|
341
354
|
try {
|
|
342
355
|
const { setBaggage, BAGGAGE_EXECUTION_ID, BAGGAGE_SESSION_ID, BAGGAGE_ORG_ID } = await import("../../otel.js");
|
|
@@ -495,11 +508,14 @@ turnSeq) {
|
|
|
495
508
|
}
|
|
496
509
|
// Phase 4: Resolve MCP servers with approval policies
|
|
497
510
|
await reportSetupProgress(client, executionId, "Resolving MCP servers");
|
|
498
|
-
|
|
511
|
+
const transportPosture = resolveMcpTransportPosture(config.mode);
|
|
512
|
+
let mcpResolution = await resolveMcpServers(client, blueprint.mergedMcpServerUsages, envVars, transportPosture);
|
|
513
|
+
setupTiming.mark("resolve_mcp_servers");
|
|
499
514
|
// Phase 4a: Connect backfill for undiscovered MCP servers
|
|
500
515
|
heartbeatPhase = "resolving_mcp_servers";
|
|
501
516
|
const sessionOrg = session.metadata?.org ?? "";
|
|
502
|
-
mcpResolution = await backfillMcpServersIfNeeded(client, mcpResolution, blueprint.mergedMcpServerUsages, envVars, sessionOrg, heartbeat, secretKeys);
|
|
517
|
+
mcpResolution = await backfillMcpServersIfNeeded(client, mcpResolution, blueprint.mergedMcpServerUsages, envVars, sessionOrg, transportPosture, heartbeat, secretKeys);
|
|
518
|
+
setupTiming.mark("backfill_mcp");
|
|
503
519
|
// Phase 4a2: Synthesize the datastore records attachment (T05).
|
|
504
520
|
// Deliberately AFTER resolve + backfill: the attachment has no
|
|
505
521
|
// McpServerUsage and reports discovered capabilities, so the
|
|
@@ -552,6 +568,7 @@ turnSeq) {
|
|
|
552
568
|
primaryWorkspaceDir,
|
|
553
569
|
});
|
|
554
570
|
heartbeat();
|
|
571
|
+
setupTiming.mark("resolve_skills");
|
|
555
572
|
// Phase 5b: Resolve attachments (fail-hard — explicit user inputs; see
|
|
556
573
|
// attachment-resolver.ts). Downloads by storage key through the same
|
|
557
574
|
// artifactStorage resolved for status offload above.
|
|
@@ -562,6 +579,7 @@ turnSeq) {
|
|
|
562
579
|
storage: artifactStorage,
|
|
563
580
|
});
|
|
564
581
|
const attachmentPaths = attachmentResults.map((a) => a.relativePath);
|
|
582
|
+
setupTiming.mark("resolve_attachments");
|
|
565
583
|
// Phase 5b3: Exact-apply approved whole-file writes (HITL "what you approve
|
|
566
584
|
// is what gets applied"). The Cursor deny-only harness reinvokes the model,
|
|
567
585
|
// which regenerates content, so a resource grant alone cannot guarantee the
|
|
@@ -673,6 +691,7 @@ turnSeq) {
|
|
|
673
691
|
stopDenialWatcher = watchDenialLedger(hitlDir, () => {
|
|
674
692
|
turnState.denialLedgerDirty = true;
|
|
675
693
|
});
|
|
694
|
+
setupTiming.mark("install_hitl_gate");
|
|
676
695
|
// Mid-run live capture (DD-32 / DD-33): choose the progress substrate for this
|
|
677
696
|
// turn's workspace shape ONCE (git / non-git CAS / hybrid). It owns its own
|
|
678
697
|
// short-circuit cache across the loop's persists; the floor lives in
|
|
@@ -689,6 +708,7 @@ turnSeq) {
|
|
|
689
708
|
});
|
|
690
709
|
// Phase 5d: Ensure model pricing registry is populated before validation
|
|
691
710
|
await ensurePricingLoaded();
|
|
711
|
+
setupTiming.mark("load_pricing");
|
|
692
712
|
// Phase 6: Validate model selection
|
|
693
713
|
const requestedModel = spec.executionConfig?.modelName || "default";
|
|
694
714
|
const validatedModel = resolveModelId(requestedModel);
|
|
@@ -747,6 +767,12 @@ turnSeq) {
|
|
|
747
767
|
// the activity returns rather than throws, and maximumAttempts is 1).
|
|
748
768
|
heartbeatPhase = "resolving_agent";
|
|
749
769
|
const resolveTimeoutSeconds = Math.round(config.agentResolveTimeoutMs / 1000);
|
|
770
|
+
// Close the span since load_pricing here so the resolve_agent segment
|
|
771
|
+
// below measures the SDK Agent.create/resume call alone, not the
|
|
772
|
+
// progress-report gRPC + options assembly above (issue #209: resolve_agent
|
|
773
|
+
// is the largest user-visible setup segment; this split keeps its
|
|
774
|
+
// historical meaning — the SDK call was already 98%+ of it).
|
|
775
|
+
setupTiming.mark("prepare_agent");
|
|
750
776
|
let resolution = await resolveAgentWithTransportRecovery({
|
|
751
777
|
harnessStateId: threadId,
|
|
752
778
|
createOptions,
|
|
@@ -765,6 +791,17 @@ turnSeq) {
|
|
|
765
791
|
`reason=${resolution.reason}, mode=${resolution.mode}, ` +
|
|
766
792
|
`agentId=${resolution.agentId}, resumed=${resolution.resumed}` +
|
|
767
793
|
(resolution.resumeFailureDetail ? `, failureDetail=${resolution.resumeFailureDetail}` : ""));
|
|
794
|
+
setupTiming.mark("resolve_agent");
|
|
795
|
+
emitTimingLog("execution_setup", {
|
|
796
|
+
execution_id: executionId,
|
|
797
|
+
session_id: sessionId,
|
|
798
|
+
harness: "cursor",
|
|
799
|
+
agent_resumed: resolution.resumed,
|
|
800
|
+
cursor_mode: agentMode,
|
|
801
|
+
mcp_server_count: blueprint.mergedMcpServerUsages.length,
|
|
802
|
+
skill_count: blueprint.mergedSkillRefs.length,
|
|
803
|
+
workspace_entry_count: session.spec?.workspaceEntries?.length ?? 0,
|
|
804
|
+
}, setupTiming);
|
|
768
805
|
errorContext = { model: validatedModel, mode: agentMode, agentId: resolution.agentId };
|
|
769
806
|
// (HITL approval gate already installed in Phase 5c, before agent resolution.)
|
|
770
807
|
// Phase 9: Store new agentId as harness_state_id and persist cursor_mode
|
|
@@ -905,12 +942,42 @@ turnSeq) {
|
|
|
905
942
|
// Fallback: if the Temporal signal doesn't support setMaxListeners
|
|
906
943
|
// (e.g. older SDK), the warning is harmless — ignore.
|
|
907
944
|
}
|
|
945
|
+
// Issue #209 forensics: the SDK acquires the local executor — the piece
|
|
946
|
+
// that actually spawns stdio MCP servers — inside send(), AFTER the
|
|
947
|
+
// execution_setup timeline above has already been emitted. This one-shot
|
|
948
|
+
// timeline makes that previously invisible window measurable:
|
|
949
|
+
// `send_returned` covers the send() call itself, `first_delta` the wait
|
|
950
|
+
// until the SDK's first delta. Primary send only — the recovery retries
|
|
951
|
+
// below rebuild the agent and would skew the user-perceived turn start
|
|
952
|
+
// this measures. No delta (immediate pause/failure) → no line.
|
|
953
|
+
const turnStartTiming = new TimingRecorder();
|
|
954
|
+
let turnFirstEventEmitted = false;
|
|
955
|
+
const primaryOnDelta = makeCursorTurnOnDelta(onDeltaDeps);
|
|
908
956
|
// The stall watchdog is armed inside consumeCursorTurnStream (it needs the
|
|
909
957
|
// run to cancel), stored on turnState.stallWatchdog so this shared onDelta can
|
|
910
958
|
// reset it and the activity's finally can stop it as a backstop.
|
|
911
959
|
const run = await resolution.agent.send(effectivePrompt, {
|
|
912
|
-
onDelta:
|
|
960
|
+
onDelta: (event) => {
|
|
961
|
+
if (!turnFirstEventEmitted) {
|
|
962
|
+
turnFirstEventEmitted = true;
|
|
963
|
+
turnStartTiming.mark("first_delta");
|
|
964
|
+
emitTimingLog("turn_first_event", {
|
|
965
|
+
execution_id: executionId,
|
|
966
|
+
session_id: sessionId,
|
|
967
|
+
harness: "cursor",
|
|
968
|
+
agent_resumed: resolution.resumed,
|
|
969
|
+
mcp_server_count: blueprint.mergedMcpServerUsages.length,
|
|
970
|
+
}, turnStartTiming);
|
|
971
|
+
}
|
|
972
|
+
primaryOnDelta(event);
|
|
973
|
+
},
|
|
913
974
|
});
|
|
975
|
+
// Normally send() resolves before any delta arrives, making send_returned
|
|
976
|
+
// the first segment; if a delta beat it, the line is already emitted and
|
|
977
|
+
// adding a mark now would be meaningless.
|
|
978
|
+
if (!turnFirstEventEmitted) {
|
|
979
|
+
turnStartTiming.mark("send_returned");
|
|
980
|
+
}
|
|
914
981
|
// Everything at an index >= this was produced by THIS turn's stream — the
|
|
915
982
|
// positional turn boundary the approved-command provenance (DD-28) scopes
|
|
916
983
|
// its qualification to. Snapshotted before the accumulator can append.
|