@stigmer/server 3.18.0 → 3.19.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 (116) hide show
  1. package/README.md +1 -1
  2. package/dist/boot/compose.d.ts.map +1 -1
  3. package/dist/boot/compose.js +42 -6
  4. package/dist/boot/compose.js.map +1 -1
  5. package/dist/boot/config.d.ts +6 -2
  6. package/dist/boot/config.d.ts.map +1 -1
  7. package/dist/boot/config.js.map +1 -1
  8. package/dist/boot/oauth-redirect-uri.d.ts +54 -0
  9. package/dist/boot/oauth-redirect-uri.d.ts.map +1 -0
  10. package/dist/boot/oauth-redirect-uri.js +37 -0
  11. package/dist/boot/oauth-redirect-uri.js.map +1 -0
  12. package/dist/domain/agentexecution/lifecycle.js +1 -1
  13. package/dist/domain/agentexecution/lifecycle.js.map +1 -1
  14. package/dist/domain/mcpserver/complete-endpoint-auth.d.ts +16 -0
  15. package/dist/domain/mcpserver/complete-endpoint-auth.d.ts.map +1 -0
  16. package/dist/domain/mcpserver/complete-endpoint-auth.js +260 -0
  17. package/dist/domain/mcpserver/complete-endpoint-auth.js.map +1 -0
  18. package/dist/domain/mcpserver/complete-oauth-connect.d.ts.map +1 -1
  19. package/dist/domain/mcpserver/complete-oauth-connect.js +1 -1
  20. package/dist/domain/mcpserver/complete-oauth-connect.js.map +1 -1
  21. package/dist/domain/mcpserver/connect.d.ts +25 -0
  22. package/dist/domain/mcpserver/connect.d.ts.map +1 -1
  23. package/dist/domain/mcpserver/connect.js +8 -23
  24. package/dist/domain/mcpserver/connect.js.map +1 -1
  25. package/dist/domain/mcpserver/controller.d.ts.map +1 -1
  26. package/dist/domain/mcpserver/controller.js +12 -0
  27. package/dist/domain/mcpserver/controller.js.map +1 -1
  28. package/dist/domain/mcpserver/initiate-oauth-connect.d.ts.map +1 -1
  29. package/dist/domain/mcpserver/initiate-oauth-connect.js +38 -14
  30. package/dist/domain/mcpserver/initiate-oauth-connect.js.map +1 -1
  31. package/dist/domain/mcpserver/oauth/dcr.d.ts +10 -1
  32. package/dist/domain/mcpserver/oauth/dcr.d.ts.map +1 -1
  33. package/dist/domain/mcpserver/oauth/dcr.js +1 -9
  34. package/dist/domain/mcpserver/oauth/dcr.js.map +1 -1
  35. package/dist/domain/mcpserver/oauth/discovery.d.ts +43 -20
  36. package/dist/domain/mcpserver/oauth/discovery.d.ts.map +1 -1
  37. package/dist/domain/mcpserver/oauth/discovery.js +69 -54
  38. package/dist/domain/mcpserver/oauth/discovery.js.map +1 -1
  39. package/dist/domain/mcpserver/oauth/preflight.d.ts +27 -1
  40. package/dist/domain/mcpserver/oauth/preflight.d.ts.map +1 -1
  41. package/dist/domain/mcpserver/oauth/preflight.js +1 -26
  42. package/dist/domain/mcpserver/oauth/preflight.js.map +1 -1
  43. package/dist/domain/mcpserver/oauth/refresh.d.ts +2 -1
  44. package/dist/domain/mcpserver/oauth/refresh.d.ts.map +1 -1
  45. package/dist/domain/mcpserver/oauth/refresh.js +1 -1
  46. package/dist/domain/mcpserver/oauth/refresh.js.map +1 -1
  47. package/dist/domain/mcpserver/oauth/token.d.ts +9 -2
  48. package/dist/domain/mcpserver/oauth/token.d.ts.map +1 -1
  49. package/dist/domain/mcpserver/oauth/token.js +2 -8
  50. package/dist/domain/mcpserver/oauth/token.js.map +1 -1
  51. package/dist/domain/workflowexecution/lifecycle.js +1 -1
  52. package/dist/domain/workflowexecution/lifecycle.js.map +1 -1
  53. package/dist/extensions/drivers.d.ts +17 -0
  54. package/dist/extensions/drivers.d.ts.map +1 -1
  55. package/dist/extensions/outbound-egress.d.ts +49 -0
  56. package/dist/extensions/outbound-egress.d.ts.map +1 -0
  57. package/dist/extensions/outbound-egress.js +51 -0
  58. package/dist/extensions/outbound-egress.js.map +1 -0
  59. package/dist/extensions/registry.d.ts +6 -0
  60. package/dist/extensions/registry.d.ts.map +1 -1
  61. package/dist/extensions/registry.js +10 -0
  62. package/dist/extensions/registry.js.map +1 -1
  63. package/dist/index.d.ts +2 -0
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +1 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/pipeline/apiresource-labels.d.ts +14 -0
  68. package/dist/pipeline/apiresource-labels.d.ts.map +1 -1
  69. package/dist/pipeline/apiresource-labels.js +14 -0
  70. package/dist/pipeline/apiresource-labels.js.map +1 -1
  71. package/dist/sandbox/kubernetes.d.ts.map +1 -1
  72. package/dist/sandbox/kubernetes.js +8 -1
  73. package/dist/sandbox/kubernetes.js.map +1 -1
  74. package/dist/sandbox/provisioner.d.ts +20 -5
  75. package/dist/sandbox/provisioner.d.ts.map +1 -1
  76. package/dist/sandbox/provisioner.js.map +1 -1
  77. package/dist/sandbox/steps.d.ts +22 -8
  78. package/dist/sandbox/steps.d.ts.map +1 -1
  79. package/dist/sandbox/steps.js +17 -12
  80. package/dist/sandbox/steps.js.map +1 -1
  81. package/package.json +6 -5
  82. package/src/boot/__tests__/oauth-redirect-uri.test.ts +38 -0
  83. package/src/boot/compose.ts +47 -8
  84. package/src/boot/config.ts +6 -2
  85. package/src/boot/oauth-redirect-uri.ts +53 -0
  86. package/src/domain/agentexecution/lifecycle.ts +1 -1
  87. package/src/domain/mcpserver/__tests__/complete-endpoint-auth.test.ts +270 -0
  88. package/src/domain/mcpserver/__tests__/connect-authorization.test.ts +3 -0
  89. package/src/domain/mcpserver/__tests__/connect.test.ts +31 -0
  90. package/src/domain/mcpserver/__tests__/oauth-handshake.test.ts +1 -1
  91. package/src/domain/mcpserver/complete-endpoint-auth.ts +277 -0
  92. package/src/domain/mcpserver/complete-oauth-connect.ts +1 -0
  93. package/src/domain/mcpserver/connect.ts +21 -15
  94. package/src/domain/mcpserver/controller.ts +16 -0
  95. package/src/domain/mcpserver/initiate-oauth-connect.ts +37 -13
  96. package/src/domain/mcpserver/oauth/__tests__/discovery.test.ts +120 -91
  97. package/src/domain/mcpserver/oauth/__tests__/token-refresh.test.ts +3 -1
  98. package/src/domain/mcpserver/oauth/dcr.ts +2 -1
  99. package/src/domain/mcpserver/oauth/discovery.ts +120 -89
  100. package/src/domain/mcpserver/oauth/preflight.ts +2 -1
  101. package/src/domain/mcpserver/oauth/refresh.ts +2 -1
  102. package/src/domain/mcpserver/oauth/token.ts +4 -3
  103. package/src/domain/workflowexecution/lifecycle.ts +1 -1
  104. package/src/extensions/__tests__/outbound-egress-points.test.ts +58 -0
  105. package/src/extensions/drivers.ts +17 -0
  106. package/src/extensions/outbound-egress.ts +55 -0
  107. package/src/extensions/registry.ts +19 -0
  108. package/src/index.ts +10 -0
  109. package/src/pipeline/apiresource-labels.ts +16 -0
  110. package/src/sandbox/__tests__/docker.integration.test.ts +2 -0
  111. package/src/sandbox/__tests__/kubernetes.test.ts +10 -2
  112. package/src/sandbox/__tests__/local-process.integration.test.ts +3 -0
  113. package/src/sandbox/__tests__/steps.test.ts +72 -19
  114. package/src/sandbox/kubernetes.ts +8 -1
  115. package/src/sandbox/provisioner.ts +20 -5
  116. package/src/sandbox/steps.ts +29 -12
@@ -50,6 +50,7 @@ import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/
50
50
 
51
51
  import type { Logger } from "../boot/logger.js";
52
52
  import type { AgentExecutionTemporalConfig } from "../domain/agentexecution/temporal/config.js";
53
+ import type { CallerIdentity } from "../extensions/identity.js";
53
54
  import {
54
55
  WORKFLOW_ROUTING_EXECUTION,
55
56
  type WorkflowExecutionTemporalConfig,
@@ -72,6 +73,17 @@ import { mintSandboxToken, type SandboxLane } from "./lane.js";
72
73
  export const SANDBOX_PROVISIONING_FAILED_PREFIX =
73
74
  "Sandbox provisioning failed: ";
74
75
 
76
+ /**
77
+ * The two facts about the requesting caller a sandbox ensure carries, cut
78
+ * from the chain's CallerIdentity (the domain/identityaccount/actor.ts
79
+ * shape): the id rides into the credential mint, so the session token is
80
+ * minted FOR the caller; the class rides onto the driver's environment,
81
+ * so a driver can decide the workspace's durability by who asked. A step
82
+ * hands `ctx.callerIdentity` in whole; the pick keeps a test's fixture to
83
+ * the two fields the body reads.
84
+ */
85
+ export type SandboxCaller = Pick<CallerIdentity, "identityId" | "callerClass">;
86
+
75
87
  type AgentExecutionCreateDesc = typeof AgentExecutionSchema;
76
88
 
77
89
  export interface EnsureSessionSandboxDeps {
@@ -101,7 +113,7 @@ export function newEnsureSessionSandboxStep(
101
113
  await ensureSessionSandboxForExecution(
102
114
  deps,
103
115
  ctx.newState,
104
- ctx.callerIdentity.identityId,
116
+ ctx.callerIdentity,
105
117
  );
106
118
  },
107
119
  };
@@ -114,15 +126,18 @@ export function newEnsureSessionSandboxStep(
114
126
  * chains' differing context shapes (newState vs loaded execution) meet
115
127
  * at this seam instead.
116
128
  *
117
- * `callerIdentityId` rides into the credential mint (lane.ts): the Java
118
- * ensure step mints session tokens FOR the requesting caller, so the
119
- * capability mint needs the identity the OSS execution-scoped mint never
120
- * did. Empty when the invoking site has no caller.
129
+ * The caller splits two ways (SandboxCaller): `identityId` rides into the
130
+ * credential mint (lane.ts) — the Java ensure step mints session tokens
131
+ * FOR the requesting caller, so the capability mint needs the identity
132
+ * the OSS execution-scoped mint never did — and `callerClass` rides onto
133
+ * the driver's environment as the one request fact a driver may decide
134
+ * durability by. The chain always has a caller: the in-process transport
135
+ * mints `internal` for the server's own calls.
121
136
  */
122
137
  export async function ensureSessionSandboxForExecution(
123
138
  deps: EnsureSessionSandboxDeps,
124
139
  execution: AgentExecution,
125
- callerIdentityId: string,
140
+ caller: SandboxCaller,
126
141
  ): Promise<void> {
127
142
  if (!deps.lane.enabled) {
128
143
  return;
@@ -167,10 +182,11 @@ export async function ensureSessionSandboxForExecution(
167
182
  sessionId,
168
183
  executionId,
169
184
  org: execution.metadata?.org ?? "",
170
- callerIdentityId,
185
+ callerIdentityId: caller.identityId,
171
186
  },
172
187
  deps.logger,
173
188
  ),
189
+ callerClass: caller.callerClass,
174
190
  });
175
191
  } catch (error) {
176
192
  // Non-critical: never fail the launch — but never silent either
@@ -247,7 +263,7 @@ export function newEnsureWorkflowSandboxStep(
247
263
  await ensureWorkflowSandboxForExecution(
248
264
  deps,
249
265
  ctx.newState,
250
- ctx.callerIdentity.identityId,
266
+ ctx.callerIdentity,
251
267
  );
252
268
  },
253
269
  };
@@ -258,13 +274,13 @@ export function newEnsureWorkflowSandboxStep(
258
274
  * re-provision (lifecycle.ts — the previous sandbox was deprovisioned at
259
275
  * the terminal FAILED, so a recovered execution needs a fresh one before
260
276
  * its fresh workflow starts). Throws Unavailable on provisioning failure
261
- * — the critical posture in both chains. `callerIdentityId` rides into
262
- * the credential mint exactly as on the session body.
277
+ * — the critical posture in both chains. The caller splits exactly as on
278
+ * the session body: id to the mint, class to the environment.
263
279
  */
264
280
  export async function ensureWorkflowSandboxForExecution(
265
281
  deps: EnsureWorkflowSandboxDeps,
266
282
  execution: WorkflowExecution,
267
- callerIdentityId: string,
283
+ caller: SandboxCaller,
268
284
  ): Promise<void> {
269
285
  if (!deps.lane.enabled) {
270
286
  return;
@@ -296,10 +312,11 @@ export async function ensureWorkflowSandboxForExecution(
296
312
  sessionId: "",
297
313
  executionId,
298
314
  org: execution.metadata?.org ?? "",
299
- callerIdentityId,
315
+ callerIdentityId: caller.identityId,
300
316
  },
301
317
  deps.logger,
302
318
  ),
319
+ callerClass: caller.callerClass,
303
320
  });
304
321
  } catch (error) {
305
322
  deps.logger.error(