@mongodb-js/agent-engine-runner-shared 0.11.3

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 (220) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/LICENSE.md +201 -0
  3. package/README.md +29 -0
  4. package/dist/agent_config.d.ts +167 -0
  5. package/dist/agent_config.d.ts.map +1 -0
  6. package/dist/agent_config.js +544 -0
  7. package/dist/call_interrupted.d.ts +12 -0
  8. package/dist/call_interrupted.d.ts.map +1 -0
  9. package/dist/call_interrupted.js +11 -0
  10. package/dist/checkpoint_workspace.d.ts +25 -0
  11. package/dist/checkpoint_workspace.d.ts.map +1 -0
  12. package/dist/checkpoint_workspace.js +44 -0
  13. package/dist/context.d.ts +235 -0
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/context.js +322 -0
  16. package/dist/db_config.d.ts +28 -0
  17. package/dist/db_config.d.ts.map +1 -0
  18. package/dist/db_config.js +66 -0
  19. package/dist/db_naming.d.ts +54 -0
  20. package/dist/db_naming.d.ts.map +1 -0
  21. package/dist/db_naming.js +94 -0
  22. package/dist/error_reporting.d.ts +67 -0
  23. package/dist/error_reporting.d.ts.map +1 -0
  24. package/dist/error_reporting.js +311 -0
  25. package/dist/generated/workflow/v1/activity_pb.d.ts +342 -0
  26. package/dist/generated/workflow/v1/activity_pb.d.ts.map +1 -0
  27. package/dist/generated/workflow/v1/activity_pb.js +115 -0
  28. package/dist/generated/workflow/v1/common_pb.d.ts +184 -0
  29. package/dist/generated/workflow/v1/common_pb.d.ts.map +1 -0
  30. package/dist/generated/workflow/v1/common_pb.js +86 -0
  31. package/dist/generated/workflow/v1/runtime_pb.d.ts +200 -0
  32. package/dist/generated/workflow/v1/runtime_pb.d.ts.map +1 -0
  33. package/dist/generated/workflow/v1/runtime_pb.js +40 -0
  34. package/dist/generated/workflow/v1/state_pb.d.ts +254 -0
  35. package/dist/generated/workflow/v1/state_pb.d.ts.map +1 -0
  36. package/dist/generated/workflow/v1/state_pb.js +68 -0
  37. package/dist/guardrails_evaluator/core.d.ts +23 -0
  38. package/dist/guardrails_evaluator/core.d.ts.map +1 -0
  39. package/dist/guardrails_evaluator/core.js +122 -0
  40. package/dist/guardrails_evaluator/index.d.ts +10 -0
  41. package/dist/guardrails_evaluator/index.d.ts.map +1 -0
  42. package/dist/guardrails_evaluator/index.js +11 -0
  43. package/dist/guardrails_evaluator/regex.d.ts +20 -0
  44. package/dist/guardrails_evaluator/regex.d.ts.map +1 -0
  45. package/dist/guardrails_evaluator/regex.js +233 -0
  46. package/dist/hooks.d.ts +109 -0
  47. package/dist/hooks.d.ts.map +1 -0
  48. package/dist/hooks.js +216 -0
  49. package/dist/http_path.d.ts +18 -0
  50. package/dist/http_path.d.ts.map +1 -0
  51. package/dist/http_path.js +53 -0
  52. package/dist/index.d.ts +35 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +41 -0
  55. package/dist/launcher.d.ts +130 -0
  56. package/dist/launcher.d.ts.map +1 -0
  57. package/dist/launcher.js +325 -0
  58. package/dist/logger.d.ts +96 -0
  59. package/dist/logger.d.ts.map +1 -0
  60. package/dist/logger.js +204 -0
  61. package/dist/mcp_oauth.d.ts +51 -0
  62. package/dist/mcp_oauth.d.ts.map +1 -0
  63. package/dist/mcp_oauth.js +389 -0
  64. package/dist/mcp_oauth_secret.d.ts +21 -0
  65. package/dist/mcp_oauth_secret.d.ts.map +1 -0
  66. package/dist/mcp_oauth_secret.js +122 -0
  67. package/dist/mcp_tools.d.ts +71 -0
  68. package/dist/mcp_tools.d.ts.map +1 -0
  69. package/dist/mcp_tools.js +301 -0
  70. package/dist/memory_appbound.d.ts +42 -0
  71. package/dist/memory_appbound.d.ts.map +1 -0
  72. package/dist/memory_appbound.js +159 -0
  73. package/dist/memory_writer.d.ts +49 -0
  74. package/dist/memory_writer.d.ts.map +1 -0
  75. package/dist/memory_writer.js +171 -0
  76. package/dist/metrics.d.ts +84 -0
  77. package/dist/metrics.d.ts.map +1 -0
  78. package/dist/metrics.js +205 -0
  79. package/dist/models.d.ts +1458 -0
  80. package/dist/models.d.ts.map +1 -0
  81. package/dist/models.js +1726 -0
  82. package/dist/node_logger.d.ts +43 -0
  83. package/dist/node_logger.d.ts.map +1 -0
  84. package/dist/node_logger.js +158 -0
  85. package/dist/owner_callback.d.ts +16 -0
  86. package/dist/owner_callback.d.ts.map +1 -0
  87. package/dist/owner_callback.js +40 -0
  88. package/dist/progress.d.ts +57 -0
  89. package/dist/progress.d.ts.map +1 -0
  90. package/dist/progress.js +140 -0
  91. package/dist/runtime.d.ts +131 -0
  92. package/dist/runtime.d.ts.map +1 -0
  93. package/dist/runtime.js +351 -0
  94. package/dist/secure_llm_proxy.d.ts +115 -0
  95. package/dist/secure_llm_proxy.d.ts.map +1 -0
  96. package/dist/secure_llm_proxy.js +922 -0
  97. package/dist/secure_wrapper.d.ts +332 -0
  98. package/dist/secure_wrapper.d.ts.map +1 -0
  99. package/dist/secure_wrapper.js +1249 -0
  100. package/dist/server/aer.d.ts +61 -0
  101. package/dist/server/aer.d.ts.map +1 -0
  102. package/dist/server/aer.js +1124 -0
  103. package/dist/server/auth.d.ts +56 -0
  104. package/dist/server/auth.d.ts.map +1 -0
  105. package/dist/server/auth.js +132 -0
  106. package/dist/server/base.d.ts +104 -0
  107. package/dist/server/base.d.ts.map +1 -0
  108. package/dist/server/base.js +150 -0
  109. package/dist/server/callInterrupt.d.ts +49 -0
  110. package/dist/server/callInterrupt.d.ts.map +1 -0
  111. package/dist/server/callInterrupt.js +68 -0
  112. package/dist/server/callback_delivery.d.ts +14 -0
  113. package/dist/server/callback_delivery.d.ts.map +1 -0
  114. package/dist/server/callback_delivery.js +141 -0
  115. package/dist/server/chunk_types.d.ts +50 -0
  116. package/dist/server/chunk_types.d.ts.map +1 -0
  117. package/dist/server/chunk_types.js +62 -0
  118. package/dist/server/cors.d.ts +52 -0
  119. package/dist/server/cors.d.ts.map +1 -0
  120. package/dist/server/cors.js +107 -0
  121. package/dist/server/drain.d.ts +169 -0
  122. package/dist/server/drain.d.ts.map +1 -0
  123. package/dist/server/drain.js +455 -0
  124. package/dist/server/function.d.ts +77 -0
  125. package/dist/server/function.d.ts.map +1 -0
  126. package/dist/server/function.js +337 -0
  127. package/dist/server/http_retry.d.ts +37 -0
  128. package/dist/server/http_retry.d.ts.map +1 -0
  129. package/dist/server/http_retry.js +157 -0
  130. package/dist/server/index.d.ts +7 -0
  131. package/dist/server/index.d.ts.map +1 -0
  132. package/dist/server/index.js +5 -0
  133. package/dist/server/metadata.d.ts +50 -0
  134. package/dist/server/metadata.d.ts.map +1 -0
  135. package/dist/server/metadata.js +193 -0
  136. package/dist/server/oe_url.d.ts +36 -0
  137. package/dist/server/oe_url.d.ts.map +1 -0
  138. package/dist/server/oe_url.js +50 -0
  139. package/dist/server/owner_url.d.ts +35 -0
  140. package/dist/server/owner_url.d.ts.map +1 -0
  141. package/dist/server/owner_url.js +146 -0
  142. package/dist/server/query.d.ts +42 -0
  143. package/dist/server/query.d.ts.map +1 -0
  144. package/dist/server/query.js +28 -0
  145. package/dist/server/tool.d.ts +138 -0
  146. package/dist/server/tool.d.ts.map +1 -0
  147. package/dist/server/tool.js +1017 -0
  148. package/dist/span_names.d.ts +21 -0
  149. package/dist/span_names.d.ts.map +1 -0
  150. package/dist/span_names.js +31 -0
  151. package/dist/structured_logging/constants.d.ts +17 -0
  152. package/dist/structured_logging/constants.d.ts.map +1 -0
  153. package/dist/structured_logging/constants.js +71 -0
  154. package/dist/structured_logging/env.d.ts +18 -0
  155. package/dist/structured_logging/env.d.ts.map +1 -0
  156. package/dist/structured_logging/env.js +39 -0
  157. package/dist/structured_logging/install.d.ts +56 -0
  158. package/dist/structured_logging/install.d.ts.map +1 -0
  159. package/dist/structured_logging/install.js +107 -0
  160. package/dist/structured_logging/layout.d.ts +9 -0
  161. package/dist/structured_logging/layout.d.ts.map +1 -0
  162. package/dist/structured_logging/layout.js +144 -0
  163. package/dist/structured_logging/serialize.d.ts +27 -0
  164. package/dist/structured_logging/serialize.d.ts.map +1 -0
  165. package/dist/structured_logging/serialize.js +61 -0
  166. package/dist/structured_logging/stdio_capture.d.ts +59 -0
  167. package/dist/structured_logging/stdio_capture.d.ts.map +1 -0
  168. package/dist/structured_logging/stdio_capture.js +164 -0
  169. package/dist/structured_logging/uncaught.d.ts +14 -0
  170. package/dist/structured_logging/uncaught.d.ts.map +1 -0
  171. package/dist/structured_logging/uncaught.js +58 -0
  172. package/dist/structured_logging.d.ts +48 -0
  173. package/dist/structured_logging.d.ts.map +1 -0
  174. package/dist/structured_logging.js +47 -0
  175. package/dist/tls_client.d.ts +61 -0
  176. package/dist/tls_client.d.ts.map +1 -0
  177. package/dist/tls_client.js +298 -0
  178. package/dist/tool_api_error.d.ts +62 -0
  179. package/dist/tool_api_error.d.ts.map +1 -0
  180. package/dist/tool_api_error.js +399 -0
  181. package/dist/tool_memory_ownership.d.ts +10 -0
  182. package/dist/tool_memory_ownership.d.ts.map +1 -0
  183. package/dist/tool_memory_ownership.js +36 -0
  184. package/dist/toolpod_handlers.d.ts +126 -0
  185. package/dist/toolpod_handlers.d.ts.map +1 -0
  186. package/dist/toolpod_handlers.js +1016 -0
  187. package/dist/tracing/exporters.d.ts +51 -0
  188. package/dist/tracing/exporters.d.ts.map +1 -0
  189. package/dist/tracing/exporters.js +327 -0
  190. package/dist/tracing/index.d.ts +3 -0
  191. package/dist/tracing/index.d.ts.map +1 -0
  192. package/dist/tracing/index.js +2 -0
  193. package/dist/tracing/setup.d.ts +76 -0
  194. package/dist/tracing/setup.d.ts.map +1 -0
  195. package/dist/tracing/setup.js +436 -0
  196. package/dist/utils.d.ts +204 -0
  197. package/dist/utils.d.ts.map +1 -0
  198. package/dist/utils.js +867 -0
  199. package/dist/workflow/activity.d.ts +71 -0
  200. package/dist/workflow/activity.d.ts.map +1 -0
  201. package/dist/workflow/activity.js +357 -0
  202. package/dist/workflow/attempt.d.ts +12 -0
  203. package/dist/workflow/attempt.d.ts.map +1 -0
  204. package/dist/workflow/attempt.js +96 -0
  205. package/dist/workflow/client.d.ts +46 -0
  206. package/dist/workflow/client.d.ts.map +1 -0
  207. package/dist/workflow/client.js +299 -0
  208. package/dist/workflow/context.d.ts +37 -0
  209. package/dist/workflow/context.d.ts.map +1 -0
  210. package/dist/workflow/context.js +350 -0
  211. package/dist/workflow/heartbeat.d.ts +15 -0
  212. package/dist/workflow/heartbeat.d.ts.map +1 -0
  213. package/dist/workflow/heartbeat.js +78 -0
  214. package/dist/workflow/index.d.ts +14 -0
  215. package/dist/workflow/index.d.ts.map +1 -0
  216. package/dist/workflow/index.js +10 -0
  217. package/dist/workflow/memory.d.ts +17 -0
  218. package/dist/workflow/memory.d.ts.map +1 -0
  219. package/dist/workflow/memory.js +184 -0
  220. package/package.json +73 -0
@@ -0,0 +1,299 @@
1
+ /** Thin ProtoJSON HTTP client for OE durable attempt, activity, and step APIs. */
2
+ import { fromJson, toJsonString, } from "@bufbuild/protobuf";
3
+ import { ActivityCommandSchema, ActivityContextSchema, ActivityMemoryCommandSchema, ActivityOutcomeSchema, } from "../generated/workflow/v1/activity_pb.js";
4
+ import { WorkflowErrorCode, WorkflowErrorSchema, } from "../generated/workflow/v1/common_pb.js";
5
+ import { AttemptHeartbeatRequestSchema, AttemptStartRequestSchema, AttemptStartResponseSchema, } from "../generated/workflow/v1/runtime_pb.js";
6
+ import { CompleteExecutionCommandSchema, FinalizeStepCommandSchema, FinalizeStepResponseSchema, } from "../generated/workflow/v1/state_pb.js";
7
+ import { fetchPlatform, getFetchOptionsWithTLS } from "../tls_client.js";
8
+ const ATTEMPT_START_PATH = "/executor/attempt/start";
9
+ const ATTEMPT_HEARTBEAT_PATH = "/executor/attempt/heartbeat";
10
+ const ACTIVITY_START_PATH = "/executor/activity/start";
11
+ const ACTIVITY_OUTCOME_PATH = "/executor/activity/outcome";
12
+ const ACTIVITY_MEMORY_PATH = "/executor/activity/memory";
13
+ const STEP_FINALIZE_PATH = "/executor/step/finalize";
14
+ const EXECUTION_COMPLETE_PATH = "/executor/complete";
15
+ const DEFAULT_TIMEOUT_MS = 10_000;
16
+ const STATUS_TO_CODE = {
17
+ 400: WorkflowErrorCode.INVALID_ARGUMENT,
18
+ 401: WorkflowErrorCode.UNAUTHORIZED,
19
+ 403: WorkflowErrorCode.UNAUTHORIZED,
20
+ 404: WorkflowErrorCode.NOT_FOUND,
21
+ 409: WorkflowErrorCode.CONFLICT,
22
+ 412: WorkflowErrorCode.STALE_FENCE,
23
+ };
24
+ export class ActivityDispatch {
25
+ context;
26
+ constructor(context) {
27
+ this.context = context;
28
+ }
29
+ }
30
+ export class ActivityReplay {
31
+ outcome;
32
+ constructor(outcome) {
33
+ this.outcome = outcome;
34
+ }
35
+ }
36
+ export class WorkflowClientError extends Error {
37
+ code;
38
+ constructor(code, message, options) {
39
+ super(message, options);
40
+ this.name = "WorkflowClientError";
41
+ this.code = code;
42
+ }
43
+ }
44
+ /**
45
+ * Encode one protobuf message as a ProtoJSON string using wire field names.
46
+ * Shared so framework adapters post platform-shaped JSON bodies without
47
+ * hand-rolling serialization.
48
+ */
49
+ export function encodeProtoJson(schema, message) {
50
+ return toJsonString(schema, message, { useProtoFieldName: true });
51
+ }
52
+ function codeForStatus(status) {
53
+ return STATUS_TO_CODE[status] ?? WorkflowErrorCode.OUTCOME_UNKNOWN;
54
+ }
55
+ function parseJsonObject(body) {
56
+ let parsed;
57
+ try {
58
+ parsed = JSON.parse(body || "{}");
59
+ }
60
+ catch (error) {
61
+ throw new Error("response is not valid JSON", { cause: error });
62
+ }
63
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
64
+ throw new Error("response must be a ProtoJSON object");
65
+ }
66
+ return parsed;
67
+ }
68
+ function errorFromObject(value) {
69
+ if (value === undefined || value === null)
70
+ return undefined;
71
+ try {
72
+ return fromJson(WorkflowErrorSchema, value, {
73
+ ignoreUnknownFields: true,
74
+ });
75
+ }
76
+ catch {
77
+ return undefined;
78
+ }
79
+ }
80
+ function raiseOnError(status, body, operation) {
81
+ let object;
82
+ try {
83
+ object = parseJsonObject(body);
84
+ }
85
+ catch (error) {
86
+ if (status >= 200 && status < 300)
87
+ return;
88
+ throw new WorkflowClientError(codeForStatus(status), `${operation} failed with HTTP ${status}`, { cause: error });
89
+ }
90
+ // A present `error` member is always a failure, even on 2xx and even when
91
+ // it is not a coded WorkflowError. Matches Python `_raise_error_member`.
92
+ const errorMember = object["error"];
93
+ if (errorMember !== undefined && errorMember !== null) {
94
+ const wrapped = errorFromObject(errorMember);
95
+ if (wrapped?.code) {
96
+ throw new WorkflowClientError(wrapped.code, wrapped.message || `${operation} failed`);
97
+ }
98
+ throw new WorkflowClientError(codeForStatus(status), wrapped?.message || `${operation} failed with HTTP ${status}`);
99
+ }
100
+ const bare = errorFromObject(object);
101
+ if (bare?.code) {
102
+ throw new WorkflowClientError(bare.code, bare.message || `${operation} failed`);
103
+ }
104
+ if (status < 200 || status >= 300) {
105
+ throw new WorkflowClientError(codeForStatus(status), `${operation} failed with HTTP ${status}`);
106
+ }
107
+ }
108
+ function isCompleteWorkflowIdentity(identity) {
109
+ const scope = identity?.tenantScope;
110
+ if (identity === undefined || scope === undefined)
111
+ return false;
112
+ return Boolean(scope.orgId.trim() &&
113
+ scope.projectId.trim() &&
114
+ scope.workspaceId.trim() &&
115
+ identity.sessionId.trim() &&
116
+ identity.executionId.trim());
117
+ }
118
+ function workflowIdentitiesEqual(left, right) {
119
+ if (left === undefined || right === undefined)
120
+ return false;
121
+ return ((left.tenantScope?.orgId ?? "") === (right.tenantScope?.orgId ?? "") &&
122
+ (left.tenantScope?.projectId ?? "") ===
123
+ (right.tenantScope?.projectId ?? "") &&
124
+ (left.tenantScope?.workspaceId ?? "") ===
125
+ (right.tenantScope?.workspaceId ?? "") &&
126
+ left.sessionId === right.sessionId &&
127
+ left.executionId === right.executionId);
128
+ }
129
+ function requireDispatchContext(command, context) {
130
+ // Reject tickets that cannot later record an outcome under this command.
131
+ if (!context.activityId ||
132
+ !context.attemptId ||
133
+ context.fencingToken <= 0n ||
134
+ !isCompleteWorkflowIdentity(context.workflowIdentity)) {
135
+ throw new WorkflowClientError(WorkflowErrorCode.INVALID_ARGUMENT, "activity start response activity_context is missing identity fields");
136
+ }
137
+ if (context.attemptId !== command.attemptId ||
138
+ context.fencingToken !== command.fencingToken ||
139
+ !workflowIdentitiesEqual(context.workflowIdentity, command.workflowIdentity)) {
140
+ throw new WorkflowClientError(WorkflowErrorCode.INVALID_ARGUMENT, "activity start response activity_context does not match the submitted command");
141
+ }
142
+ return context;
143
+ }
144
+ async function readResponseText(response, operation) {
145
+ try {
146
+ return await response.text();
147
+ }
148
+ catch (error) {
149
+ throw new WorkflowClientError(WorkflowErrorCode.OUTCOME_UNKNOWN, `${operation} transport failure: ${error instanceof Error ? error.name : typeof error}`, { cause: error });
150
+ }
151
+ }
152
+ function interpretActivityStartResponse(command, status, body) {
153
+ let object;
154
+ try {
155
+ object = parseJsonObject(body);
156
+ }
157
+ catch (error) {
158
+ throw new WorkflowClientError(status >= 200 && status < 300
159
+ ? WorkflowErrorCode.INVALID_ARGUMENT
160
+ : codeForStatus(status), "activity start response is not valid JSON", { cause: error });
161
+ }
162
+ raiseOnError(status, body, "activity start");
163
+ if (status < 200 || status >= 300) {
164
+ throw new WorkflowClientError(codeForStatus(status), `activity start failed with HTTP ${status}`);
165
+ }
166
+ const outcomeMember = object["outcome"];
167
+ if (outcomeMember !== undefined && outcomeMember !== null) {
168
+ try {
169
+ return new ActivityReplay(fromJson(ActivityOutcomeSchema, outcomeMember, {
170
+ ignoreUnknownFields: true,
171
+ }));
172
+ }
173
+ catch (error) {
174
+ throw new WorkflowClientError(WorkflowErrorCode.INVALID_ARGUMENT, "activity start response is not valid ProtoJSON", { cause: error });
175
+ }
176
+ }
177
+ const contextMember = object["activity_context"];
178
+ if (contextMember !== undefined && contextMember !== null) {
179
+ try {
180
+ return new ActivityDispatch(requireDispatchContext(command, fromJson(ActivityContextSchema, contextMember, {
181
+ ignoreUnknownFields: true,
182
+ })));
183
+ }
184
+ catch (error) {
185
+ if (error instanceof WorkflowClientError)
186
+ throw error;
187
+ throw new WorkflowClientError(WorkflowErrorCode.INVALID_ARGUMENT, "activity start response is not valid ProtoJSON", { cause: error });
188
+ }
189
+ }
190
+ throw new WorkflowClientError(WorkflowErrorCode.INVALID_ARGUMENT, "activity start response carries neither activity_context nor outcome");
191
+ }
192
+ export class WorkflowClient {
193
+ baseUrl;
194
+ fetchFn;
195
+ timeoutMs;
196
+ constructor(oeUrl, options = {}) {
197
+ this.baseUrl = oeUrl.replace(/\/$/, "");
198
+ this.fetchFn = options.fetch ?? fetch;
199
+ this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
200
+ }
201
+ async startAttempt(request) {
202
+ const response = await this.post(ATTEMPT_START_PATH, encodeProtoJson(AttemptStartRequestSchema, request), "attempt start");
203
+ const body = await readResponseText(response, "attempt start");
204
+ let object;
205
+ try {
206
+ object = parseJsonObject(body);
207
+ }
208
+ catch (error) {
209
+ if (response.status === 404)
210
+ return null;
211
+ throw new WorkflowClientError(response.ok
212
+ ? WorkflowErrorCode.INVALID_ARGUMENT
213
+ : codeForStatus(response.status), response.ok
214
+ ? "attempt start response is not valid ProtoJSON"
215
+ : `attempt start failed with HTTP ${response.status}`, { cause: error });
216
+ }
217
+ let parsed;
218
+ try {
219
+ parsed = fromJson(AttemptStartResponseSchema, object, {
220
+ ignoreUnknownFields: true,
221
+ });
222
+ }
223
+ catch (error) {
224
+ if (response.status === 404)
225
+ return null;
226
+ throw new WorkflowClientError(response.ok
227
+ ? WorkflowErrorCode.INVALID_ARGUMENT
228
+ : codeForStatus(response.status), response.ok
229
+ ? "attempt start response is not valid ProtoJSON"
230
+ : `attempt start failed with HTTP ${response.status}`, { cause: error });
231
+ }
232
+ if (parsed.error !== undefined) {
233
+ throw new WorkflowClientError(parsed.error.code, parsed.error.message);
234
+ }
235
+ const bareError = errorFromObject(object);
236
+ if (bareError?.code) {
237
+ throw new WorkflowClientError(bareError.code, bareError.message || "attempt start failed");
238
+ }
239
+ if (!response.ok) {
240
+ if (response.status === 404)
241
+ return null;
242
+ throw new WorkflowClientError(codeForStatus(response.status), `attempt start failed with HTTP ${response.status}`);
243
+ }
244
+ if (parsed.attemptContext === undefined) {
245
+ throw new WorkflowClientError(WorkflowErrorCode.INVALID_ARGUMENT, "attempt start response carries neither attempt_context nor error");
246
+ }
247
+ return parsed.attemptContext;
248
+ }
249
+ async heartbeat(request) {
250
+ const response = await this.post(ATTEMPT_HEARTBEAT_PATH, encodeProtoJson(AttemptHeartbeatRequestSchema, request), "attempt heartbeat");
251
+ raiseOnError(response.status, await readResponseText(response, "attempt heartbeat"), "attempt heartbeat");
252
+ }
253
+ async startActivity(command) {
254
+ const response = await this.post(ACTIVITY_START_PATH, encodeProtoJson(ActivityCommandSchema, command), "activity start");
255
+ return interpretActivityStartResponse(command, response.status, await readResponseText(response, "activity start"));
256
+ }
257
+ async reportOutcome(outcome) {
258
+ const response = await this.post(ACTIVITY_OUTCOME_PATH, encodeProtoJson(ActivityOutcomeSchema, outcome), "activity outcome");
259
+ raiseOnError(response.status, await readResponseText(response, "activity outcome"), "activity outcome");
260
+ }
261
+ async ensureMemoryWritten(command) {
262
+ const response = await this.post(ACTIVITY_MEMORY_PATH, encodeProtoJson(ActivityMemoryCommandSchema, command), "activity memory");
263
+ raiseOnError(response.status, await readResponseText(response, "activity memory"), "activity memory");
264
+ }
265
+ async finalizeStep(command) {
266
+ const response = await this.post(STEP_FINALIZE_PATH, encodeProtoJson(FinalizeStepCommandSchema, command), "step finalization");
267
+ const body = await readResponseText(response, "step finalization");
268
+ raiseOnError(response.status, body, "step finalization");
269
+ let parsed;
270
+ try {
271
+ parsed = fromJson(FinalizeStepResponseSchema, parseJsonObject(body), {
272
+ ignoreUnknownFields: true,
273
+ });
274
+ }
275
+ catch (error) {
276
+ throw new WorkflowClientError(WorkflowErrorCode.INVALID_ARGUMENT, "step finalization response is not valid ProtoJSON", { cause: error });
277
+ }
278
+ return parsed.entries;
279
+ }
280
+ async completeExecution(command) {
281
+ const response = await this.post(EXECUTION_COMPLETE_PATH, encodeProtoJson(CompleteExecutionCommandSchema, command), "execution completion");
282
+ raiseOnError(response.status, await readResponseText(response, "execution completion"), "execution completion");
283
+ }
284
+ async post(path, payload, operation) {
285
+ const url = `${this.baseUrl}${path}`;
286
+ try {
287
+ return await fetchPlatform(url, {
288
+ ...getFetchOptionsWithTLS(url),
289
+ method: "POST",
290
+ headers: { "Content-Type": "application/json" },
291
+ body: payload,
292
+ signal: AbortSignal.timeout(this.timeoutMs),
293
+ }, this.fetchFn);
294
+ }
295
+ catch (error) {
296
+ throw new WorkflowClientError(WorkflowErrorCode.OUTCOME_UNKNOWN, `${operation} transport failure: ${error instanceof Error ? error.name : typeof error}`, { cause: error });
297
+ }
298
+ }
299
+ }
@@ -0,0 +1,37 @@
1
+ /** Request-local durable attempt identity, positions, and observed activities. */
2
+ import { type ActivityCommand } from "../generated/workflow/v1/activity_pb.js";
3
+ import { type ActivityPosition, type OperationPath } from "../generated/workflow/v1/common_pb.js";
4
+ import type { AttemptContext } from "../generated/workflow/v1/runtime_pb.js";
5
+ export interface ChildOperationBoundary {
6
+ name: string;
7
+ occurrenceKey: string;
8
+ }
9
+ export type OperationPathResolver = () => readonly ChildOperationBoundary[];
10
+ export declare class UnsupportedChildOperationFanOutError extends Error {
11
+ constructor(message: string);
12
+ }
13
+ export interface InterruptedActivity {
14
+ readonly command: ActivityCommand;
15
+ readonly controlFlow: unknown;
16
+ }
17
+ export declare function runWithAttemptContext<T>(attempt: AttemptContext, fn: () => T): T;
18
+ export declare function currentAttemptContext(): AttemptContext | null;
19
+ export declare function currentStepOrdinal(): number;
20
+ export declare function currentOperationPath(): OperationPath;
21
+ export declare function runWithOperationPathResolver<T>(resolver: OperationPathResolver, fn: () => T): T;
22
+ export declare function childOperationBoundaryScope<T>(boundary: ChildOperationBoundary, fn: () => T): T;
23
+ export declare function recordObservedActivity(position: ActivityPosition): void;
24
+ export declare function observedActivityPositions(stepOrdinal: number): ActivityPosition[];
25
+ export declare function recordInterruptedActivity(command: ActivityCommand, controlFlow: unknown): void;
26
+ export declare function interruptedActivities(stepOrdinal: number): InterruptedActivity[];
27
+ export declare function setActivityReconstructionIds(activityIds: readonly string[]): void;
28
+ export declare function activityRequiresReconstruction(activityId: string): boolean;
29
+ export declare function recordReconstructedActivityInterrupt(activityId: string): number;
30
+ export declare function advanceStepOrdinal(committedStepOrdinal: number): number;
31
+ export declare function toolActivityKey(toolCallId: string): string;
32
+ export declare function allocateActivityOrdinal(key?: string): number;
33
+ export declare function preallocateActivityOrdinals(keys: readonly string[]): number[];
34
+ export declare function preallocateChildOperationOrdinals(boundaries: readonly ChildOperationBoundary[]): number[];
35
+ export declare function currentPendingChildOperationBatch(): readonly ChildOperationBoundary[];
36
+ export declare function setPendingChildOperationBatch(boundaries: readonly ChildOperationBoundary[]): void;
37
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/workflow/context.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAKlF,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAsB7E,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,SAAS,sBAAsB,EAAE,CAAC;AAS5E,qBAAa,oCAAqC,SAAQ,KAAK;gBACjD,OAAO,EAAE,MAAM;CAI5B;AAqED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAmOD,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,MAAM,CAAC,GACV,CAAC,CAgBH;AAED,wBAAgB,qBAAqB,IAAI,cAAc,GAAG,IAAI,CAE7D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAS3C;AAED,wBAAgB,oBAAoB,IAAI,aAAa,CAOpD;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAC5C,QAAQ,EAAE,qBAAqB,EAC/B,EAAE,EAAE,MAAM,CAAC,GACV,CAAC,CAEH;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,QAAQ,EAAE,sBAAsB,EAChC,EAAE,EAAE,MAAM,CAAC,GACV,CAAC,CAeH;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAEvE;AAED,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,GAClB,gBAAgB,EAAE,CAEpB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,OAAO,GACnB,IAAI,CAEN;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,GAClB,mBAAmB,EAAE,CAEvB;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,IAAI,CAEN;AAED,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED,wBAAgB,oCAAoC,CAClD,UAAU,EAAE,MAAM,GACjB,MAAM,CAIR;AAED,wBAAgB,kBAAkB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAOvE;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,wBAAgB,uBAAuB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAM7E;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,SAAS,sBAAsB,EAAE,GAC5C,MAAM,EAAE,CAOV;AAED,wBAAgB,iCAAiC,IAAI,SAAS,sBAAsB,EAAE,CAErF;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,SAAS,sBAAsB,EAAE,GAC5C,IAAI,CAQN"}