@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.
Files changed (123) hide show
  1. package/dist/.build-fingerprint +1 -1
  2. package/dist/activities/attach-session.d.ts +34 -0
  3. package/dist/activities/attach-session.js +95 -0
  4. package/dist/activities/attach-session.js.map +1 -0
  5. package/dist/activities/discover-mcp-server.d.ts +9 -0
  6. package/dist/activities/discover-mcp-server.js +6 -1
  7. package/dist/activities/discover-mcp-server.js.map +1 -1
  8. package/dist/activities/execute-cursor/connect-backfill.d.ts +2 -1
  9. package/dist/activities/execute-cursor/connect-backfill.js +2 -2
  10. package/dist/activities/execute-cursor/connect-backfill.js.map +1 -1
  11. package/dist/activities/execute-cursor/fetch-interceptor.js +31 -0
  12. package/dist/activities/execute-cursor/fetch-interceptor.js.map +1 -1
  13. package/dist/activities/execute-cursor/index.js +70 -3
  14. package/dist/activities/execute-cursor/index.js.map +1 -1
  15. package/dist/activities/execute-cursor/mcp-resolver.d.ts +7 -1
  16. package/dist/activities/execute-cursor/mcp-resolver.js +15 -2
  17. package/dist/activities/execute-cursor/mcp-resolver.js.map +1 -1
  18. package/dist/activities/execute-cursor/sdk-warmup.d.ts +44 -0
  19. package/dist/activities/execute-cursor/sdk-warmup.js +61 -0
  20. package/dist/activities/execute-cursor/sdk-warmup.js.map +1 -0
  21. package/dist/activities/execute-deep-agent/setup.js +48 -5
  22. package/dist/activities/execute-deep-agent/setup.js.map +1 -1
  23. package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +9 -1
  24. package/dist/activities/execute-deep-agent/subagent-transformer.js +19 -5
  25. package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
  26. package/dist/client/stigmer-client.d.ts +13 -1
  27. package/dist/client/stigmer-client.js +40 -5
  28. package/dist/client/stigmer-client.js.map +1 -1
  29. package/dist/client/token-claims.d.ts +9 -6
  30. package/dist/client/token-claims.js +22 -6
  31. package/dist/client/token-claims.js.map +1 -1
  32. package/dist/main.d.ts +8 -1
  33. package/dist/main.js +122 -2
  34. package/dist/main.js.map +1 -1
  35. package/dist/middleware/index.d.ts +0 -1
  36. package/dist/middleware/index.js +0 -1
  37. package/dist/middleware/index.js.map +1 -1
  38. package/dist/otel-metrics.d.ts +10 -1
  39. package/dist/otel-metrics.js +22 -1
  40. package/dist/otel-metrics.js.map +1 -1
  41. package/dist/pool-member.d.ts +61 -0
  42. package/dist/pool-member.js +51 -0
  43. package/dist/pool-member.js.map +1 -0
  44. package/dist/runner-manager.d.ts +7 -0
  45. package/dist/runner-manager.js +39 -1
  46. package/dist/runner-manager.js.map +1 -1
  47. package/dist/runner.js +15 -1
  48. package/dist/runner.js.map +1 -1
  49. package/dist/shared/cold-start-timing.d.ts +89 -0
  50. package/dist/shared/cold-start-timing.js +166 -0
  51. package/dist/shared/cold-start-timing.js.map +1 -0
  52. package/dist/shared/connect-backfill.d.ts +2 -1
  53. package/dist/shared/connect-backfill.js +4 -2
  54. package/dist/shared/connect-backfill.js.map +1 -1
  55. package/dist/shared/mcp-manager.d.ts +5 -15
  56. package/dist/shared/mcp-manager.js +5 -32
  57. package/dist/shared/mcp-manager.js.map +1 -1
  58. package/dist/shared/mcp-resolver.d.ts +15 -5
  59. package/dist/shared/mcp-resolver.js +23 -6
  60. package/dist/shared/mcp-resolver.js.map +1 -1
  61. package/dist/shared/mcp-transport-guard.d.ts +53 -0
  62. package/dist/shared/mcp-transport-guard.js +70 -0
  63. package/dist/shared/mcp-transport-guard.js.map +1 -0
  64. package/dist/shared/tool-kind.js +6 -0
  65. package/dist/shared/tool-kind.js.map +1 -1
  66. package/dist/tools/index.d.ts +27 -0
  67. package/dist/tools/index.js +27 -0
  68. package/dist/tools/index.js.map +1 -0
  69. package/dist/tools/think-tool.js.map +1 -0
  70. package/dist/tools/url-guard.d.ts +64 -0
  71. package/dist/tools/url-guard.js +211 -0
  72. package/dist/tools/url-guard.js.map +1 -0
  73. package/dist/tools/web-fetch-tool.d.ts +53 -0
  74. package/dist/tools/web-fetch-tool.js +216 -0
  75. package/dist/tools/web-fetch-tool.js.map +1 -0
  76. package/package.json +4 -2
  77. package/src/__tests__/otel-metrics.test.ts +6 -0
  78. package/src/__tests__/pool-member.test.ts +76 -0
  79. package/src/activities/__tests__/attach-session.test.ts +133 -0
  80. package/src/activities/__tests__/discover-mcp-server.test.ts +34 -11
  81. package/src/activities/attach-session.ts +112 -0
  82. package/src/activities/discover-mcp-server.ts +19 -1
  83. package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +77 -0
  84. package/src/activities/execute-cursor/__tests__/sdk-warmup.test.ts +45 -0
  85. package/src/activities/execute-cursor/connect-backfill.ts +3 -0
  86. package/src/activities/execute-cursor/fetch-interceptor.ts +39 -0
  87. package/src/activities/execute-cursor/index.ts +72 -3
  88. package/src/activities/execute-cursor/mcp-resolver.ts +21 -2
  89. package/src/activities/execute-cursor/sdk-warmup.ts +68 -0
  90. package/src/activities/execute-deep-agent/__tests__/subagent-transformer.test.ts +24 -0
  91. package/src/activities/execute-deep-agent/setup.ts +48 -7
  92. package/src/activities/execute-deep-agent/subagent-transformer.ts +27 -2
  93. package/src/client/__tests__/stigmer-client.test.ts +77 -2
  94. package/src/client/__tests__/token-claims.test.ts +15 -1
  95. package/src/client/stigmer-client.ts +51 -6
  96. package/src/client/token-claims.ts +29 -6
  97. package/src/main.ts +139 -2
  98. package/src/middleware/index.ts +0 -1
  99. package/src/otel-metrics.ts +25 -1
  100. package/src/pool-member.ts +99 -0
  101. package/src/runner-manager.ts +52 -0
  102. package/src/runner.ts +15 -0
  103. package/src/shared/__tests__/cold-start-timing.test.ts +271 -0
  104. package/src/shared/__tests__/connect-backfill.test.ts +11 -11
  105. package/src/shared/__tests__/mcp-manager.test.ts +2 -73
  106. package/src/shared/__tests__/mcp-resolver.test.ts +108 -0
  107. package/src/shared/__tests__/mcp-transport-guard.test.ts +71 -0
  108. package/src/shared/cold-start-timing.ts +197 -0
  109. package/src/shared/connect-backfill.ts +5 -1
  110. package/src/shared/mcp-manager.ts +4 -41
  111. package/src/shared/mcp-resolver.ts +29 -6
  112. package/src/shared/mcp-transport-guard.ts +81 -0
  113. package/src/shared/tool-kind.ts +6 -0
  114. package/src/tools/__tests__/url-guard.test.ts +137 -0
  115. package/src/tools/__tests__/web-fetch-tool.test.ts +193 -0
  116. package/src/tools/index.ts +28 -0
  117. package/src/tools/url-guard.ts +232 -0
  118. package/src/tools/web-fetch-tool.ts +275 -0
  119. package/dist/middleware/think-tool.js.map +0 -1
  120. /package/dist/{middleware → tools}/think-tool.d.ts +0 -0
  121. /package/dist/{middleware → tools}/think-tool.js +0 -0
  122. /package/src/{middleware → tools}/__tests__/think-tool.test.ts +0 -0
  123. /package/src/{middleware → tools}/think-tool.ts +0 -0
@@ -10,15 +10,20 @@
10
10
  */
11
11
  /** The `token_type` claim value of a bootstrap-minted embedded runner token. */
12
12
  export const TOKEN_TYPE_EMBEDDED_RUNNER = "embedded_runner";
13
+ /** The `token_type` claim value of a session sandbox token. */
14
+ export const TOKEN_TYPE_SANDBOX = "sandbox";
15
+ /** The `token_type` claim value of a warm-pool member's pre-claim credential. */
16
+ export const TOKEN_TYPE_POOL_SANDBOX = "pool_sandbox";
13
17
  const CLAIM_TOKEN_TYPE = "token_type";
18
+ const CLAIM_SESSION_ID = "session_id";
14
19
  /**
15
- * Extract the `token_type` claim from a JWT without verifying it.
20
+ * Extract one string claim from a JWT without verifying it.
16
21
  *
17
22
  * Returns undefined for null/malformed tokens and for tokens without the
18
- * claim (e.g. a user's Auth0 token) — callers branch on the specific value,
19
- * so "unknown" and "absent" collapse to the same answer.
23
+ * claim — callers branch on the specific value, so "unknown" and "absent"
24
+ * collapse to the same answer.
20
25
  */
21
- export function tokenTypeOf(token) {
26
+ function claimOf(token, claim) {
22
27
  if (!token)
23
28
  return undefined;
24
29
  const parts = token.split(".");
@@ -26,13 +31,24 @@ export function tokenTypeOf(token) {
26
31
  return undefined;
27
32
  try {
28
33
  const payload = JSON.parse(Buffer.from(parts[1], "base64url").toString("utf8"));
29
- const tokenType = payload[CLAIM_TOKEN_TYPE];
30
- return typeof tokenType === "string" ? tokenType : undefined;
34
+ const value = payload[claim];
35
+ return typeof value === "string" ? value : undefined;
31
36
  }
32
37
  catch {
33
38
  return undefined;
34
39
  }
35
40
  }
41
+ /** Extract the `token_type` claim (e.g. a user's Auth0 token has none). */
42
+ export function tokenTypeOf(token) {
43
+ return claimOf(token, CLAIM_TOKEN_TYPE);
44
+ }
45
+ /**
46
+ * Extract the `session_id` claim of a session-scoped token. A claimed pool
47
+ * member reads its post-claim identity from this on restart.
48
+ */
49
+ export function sessionIdClaimOf(token) {
50
+ return claimOf(token, CLAIM_SESSION_ID);
51
+ }
36
52
  /** Whether the token is a bootstrap-minted `embedded_runner` credential. */
37
53
  export function isEmbeddedRunnerToken(token) {
38
54
  return tokenTypeOf(token) === TOKEN_TYPE_EMBEDDED_RUNNER;
@@ -1 +1 @@
1
- {"version":3,"file":"token-claims.js","sourceRoot":"","sources":["../../src/client/token-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;AAE5D,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgC;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC1B,CAAC;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5C,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CAAC,KAAgC;IACpE,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,0BAA0B,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"token-claims.js","sourceRoot":"","sources":["../../src/client/token-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;AAE5D,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C,iFAAiF;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAEtD,MAAM,gBAAgB,GAAG,YAAY,CAAC;AACtC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAEtC;;;;;;GAMG;AACH,SAAS,OAAO,CACd,KAAgC,EAChC,KAAa;IAEb,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC1B,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,KAAgC;IAC1D,OAAO,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,OAAO,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC1C,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CAAC,KAAgC;IACpE,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,0BAA0B,CAAC;AAC3D,CAAC"}
package/dist/main.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * CLI entry point for the unified runner service.
4
4
  *
5
- * Two modes of operation:
5
+ * Three modes of operation:
6
6
  *
7
7
  * 1. Static mode (default): Reads configuration from environment variables,
8
8
  * initializes OTel, creates a single-queue runner. Used by CLI daemon and
@@ -12,6 +12,13 @@
12
12
  * stdin, manages per-session Workers dynamically. Used by the desktop app
13
13
  * via the IPC protocol. Responses go to stdout; logs go to stderr.
14
14
  *
15
+ * 3. Pool mode (STIGMER_POOL_MEMBER_ID set): A warm-pool cloud sandbox. Boots
16
+ * the runner manager, then serves whatever its Secret-injected credential
17
+ * says it is: a pool_sandbox token means "blank member" (poll the
18
+ * sandbox:{memberId} control queue for a claim), a session token means
19
+ * "claimed member that restarted" (go straight to that session's queue).
20
+ * See pool-member.ts for the identity model.
21
+ *
15
22
  * OTel is initialized here (not in the factory) because it mutates
16
23
  * global state that the consumer should control when embedding the
17
24
  * runner as a library.
package/dist/main.js CHANGED
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * CLI entry point for the unified runner service.
4
4
  *
5
- * Two modes of operation:
5
+ * Three modes of operation:
6
6
  *
7
7
  * 1. Static mode (default): Reads configuration from environment variables,
8
8
  * initializes OTel, creates a single-queue runner. Used by CLI daemon and
@@ -12,6 +12,13 @@
12
12
  * stdin, manages per-session Workers dynamically. Used by the desktop app
13
13
  * via the IPC protocol. Responses go to stdout; logs go to stderr.
14
14
  *
15
+ * 3. Pool mode (STIGMER_POOL_MEMBER_ID set): A warm-pool cloud sandbox. Boots
16
+ * the runner manager, then serves whatever its Secret-injected credential
17
+ * says it is: a pool_sandbox token means "blank member" (poll the
18
+ * sandbox:{memberId} control queue for a claim), a session token means
19
+ * "claimed member that restarted" (go straight to that session's queue).
20
+ * See pool-member.ts for the identity model.
21
+ *
15
22
  * OTel is initialized here (not in the factory) because it mutates
16
23
  * global state that the consumer should control when embedding the
17
24
  * runner as a library.
@@ -21,10 +28,12 @@ import { readFileSync, readdirSync } from "node:fs";
21
28
  import { join, relative } from "node:path";
22
29
  import { createInterface } from "node:readline";
23
30
  import { preflightNodeRuntime } from "./preflight.js";
31
+ import { markBoot, emitRunnerBootTiming } from "./shared/cold-start-timing.js";
24
32
  import { loadConfig } from "./config.js";
25
33
  import { initTracing, initMetrics } from "./otel.js";
26
34
  import { createStigmerRunner } from "./runner.js";
27
35
  import { createStigmerRunnerManager } from "./runner-manager.js";
36
+ import { decidePoolBoot, registerPoolMemberContext } from "./pool-member.js";
28
37
  import { buildReadyMessage } from "./ipc-protocol.js";
29
38
  import { handleUnhandledRejection } from "./activities/execute-cursor/rejection-capture.js";
30
39
  import { installProcessPipeGuards, reportFatal } from "./pipe-safety.js";
@@ -154,6 +163,106 @@ async function runManagerMode(config) {
154
163
  // stdin closed (parent process died) — shut down gracefully
155
164
  await manager.shutdown();
156
165
  }
166
+ // ─── Pool Mode ───────────────────────────────────────────────────────────────
167
+ async function runPoolMode(config, memberId) {
168
+ const otelShutdown = await initTracing("stigmer-runner");
169
+ const metricsShutdown = await initMetrics("stigmer-runner");
170
+ // The Secret-injected credential is the single source of truth for what this
171
+ // process serves (the control plane rewrites the Secret at claim time, and
172
+ // secretKeyRef env is read only at pod start — so a restart lands here with
173
+ // the post-claim identity). Decide before any expensive boot work.
174
+ const intent = decidePoolBoot(config.stigmerToken);
175
+ if (intent.kind === "invalid") {
176
+ throw new Error(`Pool member ${memberId} cannot boot: ${intent.reason}`);
177
+ }
178
+ const manager = await createStigmerRunnerManager({
179
+ temporalAddress: config.temporalAddress,
180
+ temporalNamespace: config.temporalNamespace,
181
+ stigmerEndpoint: config.stigmerBackendEndpoint,
182
+ stigmerToken: config.stigmerToken ?? undefined,
183
+ cursorApiKey: config.cursorApiKey || undefined,
184
+ workspaceRootDir: config.workspaceRootDir,
185
+ maxConcurrentActivitiesPerSession: config.maxConcurrentActivities,
186
+ proxyEndpoint: config.proxyEndpoint ?? undefined,
187
+ primaryModel: config.primaryModel,
188
+ checkpointerType: config.checkpointerType,
189
+ checkpointerProxyEndpoint: config.checkpointerProxyEndpoint ?? undefined,
190
+ cloudModeEnabled: config.cloudModeEnabled,
191
+ executionMode: config.mode,
192
+ });
193
+ let taskQueue;
194
+ if (intent.kind === "pool-control") {
195
+ registerPoolMemberContext({
196
+ memberId,
197
+ poolToken: config.stigmerToken,
198
+ manager,
199
+ });
200
+ await manager.addPoolControl(memberId);
201
+ taskQueue = `sandbox:${memberId}`;
202
+ }
203
+ else {
204
+ // Claimed member after a restart: the pool row is gone and nothing will
205
+ // dispatch on the control queue again, so no pool context, no control
206
+ // worker — just serve the session this pod already belongs to.
207
+ console.warn(`[pool-member] ${memberId} restarted post-claim; ` +
208
+ `resuming session ${intent.sessionId}`);
209
+ await manager.addSession(intent.sessionId);
210
+ taskQueue = `session:${intent.sessionId}`;
211
+ }
212
+ // The boot window the pool exists to hide from users: emitted with pool
213
+ // context so the baseline harness can separate member pre-boots (background,
214
+ // free) from user-facing boots.
215
+ markBoot("worker_polling");
216
+ emitRunnerBootTiming({
217
+ task_queue: taskQueue,
218
+ mode: config.mode,
219
+ pool_member_id: memberId,
220
+ pool_rehydrated: intent.kind === "claimed-session",
221
+ });
222
+ console.warn(`[pool-member] ${memberId} ready (queue=${taskQueue})`);
223
+ // Idle-time warm-up (issue #209): pay the Cursor SDK's per-process SQLite
224
+ // cost now, while the member waits for a claim, instead of inside the
225
+ // claimed session's first resolve_agent. Fire-and-forget by design —
226
+ // pool-control members only (a claimed-session restart serves immediately
227
+ // and must not compete with its own executions).
228
+ if (intent.kind === "pool-control") {
229
+ const { warmCursorSdkStateStores } = await import("./activities/execute-cursor/sdk-warmup.js");
230
+ void warmCursorSdkStateStores().then((result) => {
231
+ if (result.warmed) {
232
+ console.log(`[pool-member] Cursor SDK state stores warmed in ${result.durationMs}ms`);
233
+ }
234
+ else {
235
+ console.warn(`[pool-member] Cursor SDK warm-up skipped (non-fatal): ${result.error} ` +
236
+ `(${result.durationMs}ms)`);
237
+ }
238
+ });
239
+ }
240
+ // Park until terminated; the workers poll in the background. Unlike manager
241
+ // mode there is no stdin driver — Kubernetes signals are the only exit.
242
+ await new Promise((resolve) => {
243
+ let shutdownRequested = false;
244
+ const shutdown = (signal) => {
245
+ if (shutdownRequested) {
246
+ console.warn("Shutdown already in progress, ignoring duplicate signal");
247
+ return;
248
+ }
249
+ shutdownRequested = true;
250
+ console.warn(`[pool-member] Received ${signal}, shutting down gracefully...`);
251
+ void manager.shutdown().then(resolve, (err) => {
252
+ console.error("[pool-member] Shutdown failed:", err);
253
+ resolve();
254
+ });
255
+ };
256
+ process.on("SIGTERM", () => shutdown("SIGTERM"));
257
+ process.on("SIGINT", () => shutdown("SIGINT"));
258
+ });
259
+ if (metricsShutdown) {
260
+ await metricsShutdown();
261
+ }
262
+ if (otelShutdown) {
263
+ await otelShutdown();
264
+ }
265
+ }
157
266
  // ─── Static Mode ─────────────────────────────────────────────────────────────
158
267
  async function runStaticMode(config) {
159
268
  const otelShutdown = await initTracing("stigmer-runner");
@@ -272,8 +381,12 @@ async function main() {
272
381
  }
273
382
  process.exit(1);
274
383
  }
384
+ // Cold-start timeline: this first mark's span covers Node startup +
385
+ // entrypoint module loading + preflight (origin = process start).
386
+ markBoot("node_start_and_preflight");
275
387
  checkBuildFreshness();
276
388
  const config = loadConfig();
389
+ markBoot("config_loaded");
277
390
  // Route ALL Cursor SDK traffic through the Stigmer proxy in proxy mode.
278
391
  //
279
392
  // CURSOR_BACKEND_URL controls:
@@ -296,7 +409,10 @@ async function main() {
296
409
  process.env.CURSOR_BACKEND_URL = proxyBase;
297
410
  process.env.CURSOR_API_BASE_URL = proxyBase;
298
411
  }
299
- const runnerMode = process.env.STIGMER_RUNNER_MODE === "manager" ? "manager" : "static";
412
+ const poolMemberId = process.env.STIGMER_POOL_MEMBER_ID?.trim() || undefined;
413
+ const runnerMode = process.env.STIGMER_RUNNER_MODE === "manager" ? "manager"
414
+ : poolMemberId ? "pool"
415
+ : "static";
300
416
  console.warn(`[runner] mode=${runnerMode}, proxy=${config.proxyEndpoint ?? "none"}, ` +
301
417
  `hasToken=${!!config.stigmerToken}, workspace=${config.workspaceRootDir}, ` +
302
418
  `taskQueue=${config.taskQueue}`);
@@ -308,6 +424,10 @@ async function main() {
308
424
  // to exit naturally so its OTel flush completes.
309
425
  process.exit(0);
310
426
  }
427
+ if (runnerMode === "pool") {
428
+ await runPoolMode(config, poolMemberId);
429
+ return;
430
+ }
311
431
  await runStaticMode(config);
312
432
  }
313
433
  main().catch((err) => {
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,6 @@
15
15
  import type { StigmerMiddleware, MiddlewareStackConfig } from "./types.js";
16
16
  import type { GracefulStopMiddleware } from "./graceful-stop.js";
17
17
  import { type CostCapMiddleware } from "./cost-cap.js";
18
- export { createThinkTool } from "./think-tool.js";
19
18
  export type { GracefulStopMiddleware } from "./graceful-stop.js";
20
19
  export type { CostCapMiddleware } from "./cost-cap.js";
21
20
  export type { StigmerMiddleware, MiddlewareStackConfig } from "./types.js";
@@ -20,7 +20,6 @@ import { createApprovalGateMiddleware } from "./approval-gate.js";
20
20
  import { createCostCapMiddleware } from "./cost-cap.js";
21
21
  import { createErrorHintsMiddleware } from "./error-hints.js";
22
22
  import { createOtelSpansMiddleware } from "./otel-spans.js";
23
- export { createThinkTool } from "./think-tool.js";
24
23
  export function buildMiddlewareStack(config = {}) {
25
24
  const stack = [];
26
25
  stack.push(createLoopDetectionMiddleware(config.loopDetection));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAA0B,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAWlD,MAAM,UAAU,oBAAoB,CAClC,SAAgC,EAAE;IAElC,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAEhE,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IAEpE,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAElE,MAAM,YAAY,GAAG,4BAA4B,EAAE,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEzB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE9B,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAExD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAExD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAA0B,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAY5D,MAAM,UAAU,oBAAoB,CAClC,SAAgC,EAAE;IAElC,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAEhE,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IAEpE,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAElE,MAAM,YAAY,GAAG,4BAA4B,EAAE,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEzB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE9B,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAExD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAExD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5D,CAAC"}
@@ -1,7 +1,13 @@
1
1
  /**
2
2
  * OTel metric instrument registry for the unified runner.
3
3
  *
4
- * Matches Go workflow-runner's `pkg/otel/metrics.go` instrument names.
4
+ * Instrument names follow the platform-wide `stigmer.*` convention shared
5
+ * with stigmer-service (SigNoz renders the dots as underscores). The
6
+ * cold-start instruments (runner boot / execution setup / pool attach) are
7
+ * sandbox-runner-specific — they mirror the `stigmer_timing` stdout
8
+ * timelines (see `shared/cold-start-timing.ts`) as dashboard aggregates and
9
+ * have no counterpart in other runners.
10
+ *
5
11
  * All instruments are created lazily on first access. When no
6
12
  * MeterProvider is configured, they are no-ops (OTel global fallback).
7
13
  */
@@ -16,6 +22,9 @@ export interface RunnerInstruments {
16
22
  readonly llmCallCount: Counter;
17
23
  readonly llmTokensInput: Counter;
18
24
  readonly llmTokensOutput: Counter;
25
+ readonly runnerBootDuration: Histogram;
26
+ readonly executionSetupDuration: Histogram;
27
+ readonly poolAttachDuration: Histogram;
19
28
  }
20
29
  export declare function getInstruments(): Promise<RunnerInstruments>;
21
30
  export declare function resetInstruments(): void;
@@ -1,7 +1,13 @@
1
1
  /**
2
2
  * OTel metric instrument registry for the unified runner.
3
3
  *
4
- * Matches Go workflow-runner's `pkg/otel/metrics.go` instrument names.
4
+ * Instrument names follow the platform-wide `stigmer.*` convention shared
5
+ * with stigmer-service (SigNoz renders the dots as underscores). The
6
+ * cold-start instruments (runner boot / execution setup / pool attach) are
7
+ * sandbox-runner-specific — they mirror the `stigmer_timing` stdout
8
+ * timelines (see `shared/cold-start-timing.ts`) as dashboard aggregates and
9
+ * have no counterpart in other runners.
10
+ *
5
11
  * All instruments are created lazily on first access. When no
6
12
  * MeterProvider is configured, they are no-ops (OTel global fallback).
7
13
  */
@@ -45,6 +51,21 @@ export async function getInstruments() {
45
51
  unit: "{token}",
46
52
  description: "Total output tokens produced across LLM calls",
47
53
  }),
54
+ // Cold-start timelines as dashboard aggregates (warm-agent-surfaces).
55
+ // Attribute cardinality is bounded by the emitter's whitelist in
56
+ // cold-start-timing.ts: `mode` / `harness` only, never per-pod values.
57
+ runnerBootDuration: meter.createHistogram("stigmer.runner.boot.duration", {
58
+ unit: "ms",
59
+ description: "Runner process boot: Node start to Temporal worker polling",
60
+ }),
61
+ executionSetupDuration: meter.createHistogram("stigmer.execution.setup.duration", {
62
+ unit: "ms",
63
+ description: "Per-execution setup: activity start to agent ready to stream",
64
+ }),
65
+ poolAttachDuration: meter.createHistogram("stigmer.sandbox.pool.attach.duration", {
66
+ unit: "ms",
67
+ description: "Warm-pool attach hand-off on the member: token exchange to session worker polling",
68
+ }),
48
69
  };
49
70
  return instruments;
50
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"otel-metrics.js","sourceRoot":"","sources":["../src/otel-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAcpC,IAAI,WAAW,GAA6B,IAAI,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE/C,WAAW,GAAG;QACZ,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,yBAAyB,EAAE;YAC7D,WAAW,EAAE,6CAA6C;SAC3D,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,mBAAmB,CAAC,0BAA0B,EAAE;YACrE,WAAW,EAAE,sCAAsC;SACpD,CAAC;QACF,gBAAgB,EAAE,KAAK,CAAC,eAAe,CAAC,2BAA2B,EAAE;YACnE,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,iDAAiD;SAC/D,CAAC;QACF,oBAAoB,EAAE,KAAK,CAAC,eAAe,CAAC,gCAAgC,EAAE;YAC5E,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,uDAAuD;SACrE,CAAC;QACF,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC,6BAA6B,EAAE;YACpE,WAAW,EAAE,yCAAyC;SACvD,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,2BAA2B,EAAE;YAClE,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,2CAA2C;SACzD,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,wBAAwB,EAAE;YAC1D,WAAW,EAAE,+BAA+B;SAC7C,CAAC;QACF,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,0BAA0B,EAAE;YAC9D,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,8CAA8C;SAC5D,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,2BAA2B,EAAE;YAChE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,+CAA+C;SAC7D,CAAC;KACH,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"otel-metrics.js","sourceRoot":"","sources":["../src/otel-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAiBpC,IAAI,WAAW,GAA6B,IAAI,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE/C,WAAW,GAAG;QACZ,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,yBAAyB,EAAE;YAC7D,WAAW,EAAE,6CAA6C;SAC3D,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,mBAAmB,CAAC,0BAA0B,EAAE;YACrE,WAAW,EAAE,sCAAsC;SACpD,CAAC;QACF,gBAAgB,EAAE,KAAK,CAAC,eAAe,CAAC,2BAA2B,EAAE;YACnE,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,iDAAiD;SAC/D,CAAC;QACF,oBAAoB,EAAE,KAAK,CAAC,eAAe,CAAC,gCAAgC,EAAE;YAC5E,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,uDAAuD;SACrE,CAAC;QACF,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC,6BAA6B,EAAE;YACpE,WAAW,EAAE,yCAAyC;SACvD,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,2BAA2B,EAAE;YAClE,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,2CAA2C;SACzD,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,wBAAwB,EAAE;YAC1D,WAAW,EAAE,+BAA+B;SAC7C,CAAC;QACF,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,0BAA0B,EAAE;YAC9D,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,8CAA8C;SAC5D,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,2BAA2B,EAAE;YAChE,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,+CAA+C;SAC7D,CAAC;QACF,sEAAsE;QACtE,iEAAiE;QACjE,uEAAuE;QACvE,kBAAkB,EAAE,KAAK,CAAC,eAAe,CAAC,8BAA8B,EAAE;YACxE,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,4DAA4D;SAC1E,CAAC;QACF,sBAAsB,EAAE,KAAK,CAAC,eAAe,CAAC,kCAAkC,EAAE;YAChF,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,8DAA8D;SAC5E,CAAC;QACF,kBAAkB,EAAE,KAAK,CAAC,eAAe,CAAC,sCAAsC,EAAE;YAChF,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,mFAAmF;SACjG,CAAC;KACH,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Warm-pool member context.
3
+ *
4
+ * A pool member is a blank, pre-booted cloud sandbox (selected by the
5
+ * STIGMER_POOL_MEMBER_ID env) that polls a control queue
6
+ * `sandbox:{memberId}` until the control plane claims it for a session.
7
+ * The claim arrives as the AttachSession activity, which needs two things
8
+ * only the pool boot path knows: the member's identity/credential and a
9
+ * handle to the runner manager (to attach the session worker).
10
+ *
11
+ * This module is that hand-off point — a module-level registry mirroring
12
+ * `in-flight.ts` and the shutdown-signal registry: the boot path writes,
13
+ * the activity reads via the exported getter with zero handle to the boot
14
+ * closure, and every non-pool process (static, desktop manager, tests)
15
+ * simply reads undefined, which is the activity's inert state.
16
+ */
17
+ /** The manager surface the attach path needs — kept minimal for testability. */
18
+ export interface PoolAttachTarget {
19
+ addSession(sessionId: string): Promise<void>;
20
+ updateToken(token: string | null): void;
21
+ }
22
+ export interface PoolMemberContext {
23
+ /** The pool member id this process was provisioned as. */
24
+ readonly memberId: string;
25
+ /**
26
+ * The pool_sandbox credential the member booted with. Captured at
27
+ * registration because the manager's tokenRef is overwritten with the
28
+ * session token during attach — the exchange itself must authenticate
29
+ * with the pool credential.
30
+ */
31
+ readonly poolToken: string;
32
+ /** The live runner manager hosting this member's workers. */
33
+ readonly manager: PoolAttachTarget;
34
+ }
35
+ /** Called once by the pool boot path after the manager is up. */
36
+ export declare function registerPoolMemberContext(context: PoolMemberContext): void;
37
+ /** Undefined everywhere except a booted pool member — the inert switch. */
38
+ export declare function getPoolMemberContext(): PoolMemberContext | undefined;
39
+ /** Test hook: pool membership is process-lifetime state in production. */
40
+ export declare function clearPoolMemberContext(): void;
41
+ /**
42
+ * What a pool-configured process should do, decided from its credential.
43
+ *
44
+ * The Secret-injected STIGMER_TOKEN is the single source of truth for a pool
45
+ * member's identity across restarts: the token is read into the pod's env only
46
+ * at container start, and the control plane rewrites the Secret to the session
47
+ * token when the member is claimed. So a fresh member sees pool_sandbox and
48
+ * polls its control queue, while a claimed member that restarted sees the
49
+ * session token and must go straight to serving that session — its pool row
50
+ * is gone and nothing will ever dispatch on the control queue again.
51
+ */
52
+ export type PoolBootIntent = {
53
+ kind: "pool-control";
54
+ } | {
55
+ kind: "claimed-session";
56
+ sessionId: string;
57
+ } | {
58
+ kind: "invalid";
59
+ reason: string;
60
+ };
61
+ export declare function decidePoolBoot(token: string | null | undefined): PoolBootIntent;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Warm-pool member context.
3
+ *
4
+ * A pool member is a blank, pre-booted cloud sandbox (selected by the
5
+ * STIGMER_POOL_MEMBER_ID env) that polls a control queue
6
+ * `sandbox:{memberId}` until the control plane claims it for a session.
7
+ * The claim arrives as the AttachSession activity, which needs two things
8
+ * only the pool boot path knows: the member's identity/credential and a
9
+ * handle to the runner manager (to attach the session worker).
10
+ *
11
+ * This module is that hand-off point — a module-level registry mirroring
12
+ * `in-flight.ts` and the shutdown-signal registry: the boot path writes,
13
+ * the activity reads via the exported getter with zero handle to the boot
14
+ * closure, and every non-pool process (static, desktop manager, tests)
15
+ * simply reads undefined, which is the activity's inert state.
16
+ */
17
+ import { TOKEN_TYPE_POOL_SANDBOX, TOKEN_TYPE_SANDBOX, tokenTypeOf, sessionIdClaimOf, } from "./client/token-claims.js";
18
+ let _context;
19
+ /** Called once by the pool boot path after the manager is up. */
20
+ export function registerPoolMemberContext(context) {
21
+ _context = context;
22
+ }
23
+ /** Undefined everywhere except a booted pool member — the inert switch. */
24
+ export function getPoolMemberContext() {
25
+ return _context;
26
+ }
27
+ /** Test hook: pool membership is process-lifetime state in production. */
28
+ export function clearPoolMemberContext() {
29
+ _context = undefined;
30
+ }
31
+ export function decidePoolBoot(token) {
32
+ const tokenType = tokenTypeOf(token);
33
+ if (tokenType === TOKEN_TYPE_POOL_SANDBOX) {
34
+ return { kind: "pool-control" };
35
+ }
36
+ if (tokenType === TOKEN_TYPE_SANDBOX) {
37
+ const sessionId = sessionIdClaimOf(token);
38
+ if (!sessionId) {
39
+ return {
40
+ kind: "invalid",
41
+ reason: "session sandbox token carries no session_id claim",
42
+ };
43
+ }
44
+ return { kind: "claimed-session", sessionId };
45
+ }
46
+ return {
47
+ kind: "invalid",
48
+ reason: `expected a pool_sandbox or sandbox token, got token_type=${tokenType ?? "none"}`,
49
+ };
50
+ }
51
+ //# sourceMappingURL=pool-member.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-member.js","sourceRoot":"","sources":["../src/pool-member.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAsBlC,IAAI,QAAuC,CAAC;AAE5C,iEAAiE;AACjE,MAAM,UAAU,yBAAyB,CAAC,OAA0B;IAClE,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB;IACpC,QAAQ,GAAG,SAAS,CAAC;AACvB,CAAC;AAoBD,MAAM,UAAU,cAAc,CAAC,KAAgC;IAC7D,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,SAAS,KAAK,uBAAuB,EAAE,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,mDAAmD;aAC5D,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;IAChD,CAAC;IACD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,4DAA4D,SAAS,IAAI,MAAM,EAAE;KAC1F,CAAC;AACJ,CAAC"}
@@ -76,6 +76,13 @@ export interface StigmerRunnerManager {
76
76
  removeWorkflowExecution(executionId: string): Promise<void>;
77
77
  /** List currently active workflow execution IDs. */
78
78
  activeWorkflowExecutions(): string[];
79
+ /**
80
+ * Start the warm-pool control worker — a Worker polling sandbox:{memberId}
81
+ * for the claim activities (ProbePoolMember, AttachSession). Called once by
82
+ * the pool boot path; the attach flow then adds the claimed session via
83
+ * {@link addSession} like any other host.
84
+ */
85
+ addPoolControl(memberId: string): Promise<void>;
79
86
  /**
80
87
  * Push a refreshed *control-plane* auth token (the host's durable credential,
81
88
  * e.g. the desktop's Auth0 token) to all activity clients.