akribes 0.21.17
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/CHANGELOG.md +30 -0
- package/LICENSE +21 -0
- package/README.md +160 -0
- package/dist/client.d.ts +240 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +272 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +196 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +274 -0
- package/dist/errors.js.map +1 -0
- package/dist/execution/index.d.ts +3 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +3 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/replay.d.ts +37 -0
- package/dist/execution/replay.d.ts.map +1 -0
- package/dist/execution/replay.js +59 -0
- package/dist/execution/replay.js.map +1 -0
- package/dist/execution/steps.d.ts +327 -0
- package/dist/execution/steps.d.ts.map +1 -0
- package/dist/execution/steps.js +1068 -0
- package/dist/execution/steps.js.map +1 -0
- package/dist/http.d.ts +53 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +141 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/runStream.d.ts +176 -0
- package/dist/runStream.d.ts.map +1 -0
- package/dist/runStream.js +408 -0
- package/dist/runStream.js.map +1 -0
- package/dist/sse.d.ts +46 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +218 -0
- package/dist/sse.js.map +1 -0
- package/dist/sub/bench.d.ts +182 -0
- package/dist/sub/bench.d.ts.map +1 -0
- package/dist/sub/bench.js +420 -0
- package/dist/sub/bench.js.map +1 -0
- package/dist/sub/channels.d.ts +22 -0
- package/dist/sub/channels.d.ts.map +1 -0
- package/dist/sub/channels.js +32 -0
- package/dist/sub/channels.js.map +1 -0
- package/dist/sub/clients.d.ts +79 -0
- package/dist/sub/clients.d.ts.map +1 -0
- package/dist/sub/clients.js +190 -0
- package/dist/sub/clients.js.map +1 -0
- package/dist/sub/documents.d.ts +113 -0
- package/dist/sub/documents.d.ts.map +1 -0
- package/dist/sub/documents.js +329 -0
- package/dist/sub/documents.js.map +1 -0
- package/dist/sub/evals.d.ts +71 -0
- package/dist/sub/evals.d.ts.map +1 -0
- package/dist/sub/evals.js +86 -0
- package/dist/sub/evals.js.map +1 -0
- package/dist/sub/events.d.ts +65 -0
- package/dist/sub/events.d.ts.map +1 -0
- package/dist/sub/events.js +154 -0
- package/dist/sub/events.js.map +1 -0
- package/dist/sub/executions.d.ts +255 -0
- package/dist/sub/executions.d.ts.map +1 -0
- package/dist/sub/executions.js +322 -0
- package/dist/sub/executions.js.map +1 -0
- package/dist/sub/mcp.d.ts +51 -0
- package/dist/sub/mcp.d.ts.map +1 -0
- package/dist/sub/mcp.js +42 -0
- package/dist/sub/mcp.js.map +1 -0
- package/dist/sub/projects.d.ts +73 -0
- package/dist/sub/projects.d.ts.map +1 -0
- package/dist/sub/projects.js +101 -0
- package/dist/sub/projects.js.map +1 -0
- package/dist/sub/scripts.d.ts +58 -0
- package/dist/sub/scripts.d.ts.map +1 -0
- package/dist/sub/scripts.js +82 -0
- package/dist/sub/scripts.js.map +1 -0
- package/dist/sub/tokens.d.ts +126 -0
- package/dist/sub/tokens.d.ts.map +1 -0
- package/dist/sub/tokens.js +105 -0
- package/dist/sub/tokens.js.map +1 -0
- package/dist/sub/versions.d.ts +29 -0
- package/dist/sub/versions.d.ts.map +1 -0
- package/dist/sub/versions.js +52 -0
- package/dist/sub/versions.js.map +1 -0
- package/dist/tokenSafety.d.ts +15 -0
- package/dist/tokenSafety.d.ts.map +1 -0
- package/dist/tokenSafety.js +24 -0
- package/dist/tokenSafety.js.map +1 -0
- package/dist/types.d.ts +1147 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +132 -0
- package/dist/types.js.map +1 -0
- package/dist/workflowEvents.d.ts +297 -0
- package/dist/workflowEvents.d.ts.map +1 -0
- package/dist/workflowEvents.js +612 -0
- package/dist/workflowEvents.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed, normalized workflow events.
|
|
3
|
+
*
|
|
4
|
+
* Layer 2 on top of the raw {@link EngineEvent} wire shape. Where the raw
|
|
5
|
+
* `{ type, payload }` exists for full fidelity, `WorkflowEvent` is a
|
|
6
|
+
* discriminated union that covers the high-traffic variants and funnels
|
|
7
|
+
* everything else through an `other` catch-all.
|
|
8
|
+
*
|
|
9
|
+
* Use {@link toWorkflowEvent} to convert raw engine events to the typed shape,
|
|
10
|
+
* and {@link categoryOf} to bucket events for callback-style registries like
|
|
11
|
+
* {@link RunStream}'s `.on.<category>()` surface.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Walk a (possibly legacy-nested) `SubScript` payload into its flat
|
|
15
|
+
* components: the innermost `script_name` / `parent_task`, an ancestor
|
|
16
|
+
* chain ordered outermost → immediate parent, and the recovered leaf
|
|
17
|
+
* event. Idempotent on already-flat payloads (the engine emits the flat
|
|
18
|
+
* shape natively post-#993).
|
|
19
|
+
*/
|
|
20
|
+
function flattenSubScriptPayload(payload) {
|
|
21
|
+
let scriptName = typeof payload.script_name === 'string' ? payload.script_name : '';
|
|
22
|
+
let parentTask = typeof payload.parent_task === 'string' ? payload.parent_task : '';
|
|
23
|
+
let parentNodeId = typeof payload.parent_node_id === 'number' ? payload.parent_node_id : null;
|
|
24
|
+
let attempt = typeof payload.attempt === 'number' ? payload.attempt : null;
|
|
25
|
+
// Start with whatever the payload already carries in parent_path.
|
|
26
|
+
const parentPath = Array.isArray(payload.parent_path)
|
|
27
|
+
? payload.parent_path
|
|
28
|
+
.filter((f) => !!f && typeof f === 'object')
|
|
29
|
+
.map((f) => ({
|
|
30
|
+
scriptName: typeof f.script_name === 'string' ? f.script_name : '',
|
|
31
|
+
parentTask: typeof f.parent_task === 'string' ? f.parent_task : '',
|
|
32
|
+
parentNodeId: typeof f.parent_node_id === 'number' ? f.parent_node_id : null,
|
|
33
|
+
attempt: typeof f.attempt === 'number' ? f.attempt : null,
|
|
34
|
+
}))
|
|
35
|
+
: [];
|
|
36
|
+
let cur = payload.child;
|
|
37
|
+
// Walk through nested SubScripts (legacy emissions). Hard cap so a
|
|
38
|
+
// malformed cycle can't hang the reducer — chains beyond 64 levels
|
|
39
|
+
// would already have been pathological under the recursive shape.
|
|
40
|
+
for (let depth = 0; depth < 64; depth += 1) {
|
|
41
|
+
if (!cur || typeof cur !== 'object')
|
|
42
|
+
break;
|
|
43
|
+
const evt = cur;
|
|
44
|
+
if (evt.type !== 'SubScript')
|
|
45
|
+
break;
|
|
46
|
+
if (!evt.payload || typeof evt.payload !== 'object')
|
|
47
|
+
break;
|
|
48
|
+
const inner = evt.payload;
|
|
49
|
+
// Promote the current frame onto the path — it becomes an ancestor
|
|
50
|
+
// of whatever lives inside this nested envelope. Any frames the
|
|
51
|
+
// nested envelope already carried slot in between.
|
|
52
|
+
if (Array.isArray(inner.parent_path)) {
|
|
53
|
+
for (const f of inner.parent_path) {
|
|
54
|
+
if (!f || typeof f !== 'object')
|
|
55
|
+
continue;
|
|
56
|
+
const ff = f;
|
|
57
|
+
parentPath.push({
|
|
58
|
+
scriptName: typeof ff.script_name === 'string' ? ff.script_name : '',
|
|
59
|
+
parentTask: typeof ff.parent_task === 'string' ? ff.parent_task : '',
|
|
60
|
+
parentNodeId: typeof ff.parent_node_id === 'number' ? ff.parent_node_id : null,
|
|
61
|
+
attempt: typeof ff.attempt === 'number' ? ff.attempt : null,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
parentPath.push({ scriptName, parentTask, parentNodeId, attempt });
|
|
66
|
+
scriptName = typeof inner.script_name === 'string' ? inner.script_name : '';
|
|
67
|
+
parentTask = typeof inner.parent_task === 'string' ? inner.parent_task : '';
|
|
68
|
+
parentNodeId = typeof inner.parent_node_id === 'number' ? inner.parent_node_id : null;
|
|
69
|
+
attempt = typeof inner.attempt === 'number' ? inner.attempt : null;
|
|
70
|
+
cur = inner.child;
|
|
71
|
+
}
|
|
72
|
+
return { scriptName, parentTask, parentPath, leaf: cur };
|
|
73
|
+
}
|
|
74
|
+
/** All-zero totals — used as the default for legacy wire payloads. */
|
|
75
|
+
const EMPTY_WORKFLOW_TOTALS = {
|
|
76
|
+
totalInputTokens: 0,
|
|
77
|
+
totalOutputTokens: 0,
|
|
78
|
+
totalCachedInputTokens: 0,
|
|
79
|
+
totalThinkingTokens: 0,
|
|
80
|
+
totalToolTokens: 0,
|
|
81
|
+
totalCostUsd: 0,
|
|
82
|
+
taskCount: 0,
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Parse a `WorkflowEnd` payload, accepting both the new (#1173) shape
|
|
86
|
+
* (`{ value, total_input_tokens, ... }`) and the legacy bare-value shape
|
|
87
|
+
* (`<output>`). Disambiguation: an object with both a `value` key and
|
|
88
|
+
* any `total_*`/`task_count` key is interpreted as the new shape.
|
|
89
|
+
*/
|
|
90
|
+
function parseWorkflowEndPayload(payload) {
|
|
91
|
+
const AGG_KEYS = [
|
|
92
|
+
'total_input_tokens',
|
|
93
|
+
'total_output_tokens',
|
|
94
|
+
'total_cached_input_tokens',
|
|
95
|
+
'total_thinking_tokens',
|
|
96
|
+
'total_tool_tokens',
|
|
97
|
+
'total_cost_usd',
|
|
98
|
+
'task_count',
|
|
99
|
+
];
|
|
100
|
+
if (isRecord(payload)) {
|
|
101
|
+
const hasValue = 'value' in payload;
|
|
102
|
+
const hasAnyAgg = AGG_KEYS.some((k) => k in payload);
|
|
103
|
+
if (hasValue && hasAnyAgg) {
|
|
104
|
+
const totals = {
|
|
105
|
+
totalInputTokens: typeof payload.total_input_tokens === 'number' ? payload.total_input_tokens : 0,
|
|
106
|
+
totalOutputTokens: typeof payload.total_output_tokens === 'number' ? payload.total_output_tokens : 0,
|
|
107
|
+
totalCachedInputTokens: typeof payload.total_cached_input_tokens === 'number' ? payload.total_cached_input_tokens : 0,
|
|
108
|
+
totalThinkingTokens: typeof payload.total_thinking_tokens === 'number' ? payload.total_thinking_tokens : 0,
|
|
109
|
+
totalToolTokens: typeof payload.total_tool_tokens === 'number' ? payload.total_tool_tokens : 0,
|
|
110
|
+
totalCostUsd: typeof payload.total_cost_usd === 'number' ? payload.total_cost_usd : 0,
|
|
111
|
+
taskCount: typeof payload.task_count === 'number' ? payload.task_count : 0,
|
|
112
|
+
};
|
|
113
|
+
return { output: payload.value, totals };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Legacy bare-value form: the payload IS the workflow output.
|
|
117
|
+
return { output: payload, totals: { ...EMPTY_WORKFLOW_TOTALS } };
|
|
118
|
+
}
|
|
119
|
+
/** Return the high-level category of a typed {@link WorkflowEvent}. */
|
|
120
|
+
export function categoryOf(evt) {
|
|
121
|
+
switch (evt.kind) {
|
|
122
|
+
case 'start':
|
|
123
|
+
case 'end':
|
|
124
|
+
case 'taskStart':
|
|
125
|
+
case 'taskEnd':
|
|
126
|
+
return 'progress';
|
|
127
|
+
case 'agentChunk':
|
|
128
|
+
return 'output';
|
|
129
|
+
case 'toolCallStart':
|
|
130
|
+
case 'toolCallEnd':
|
|
131
|
+
return 'tool';
|
|
132
|
+
case 'checkpoint':
|
|
133
|
+
case 'toolApproval':
|
|
134
|
+
case 'breakpoint':
|
|
135
|
+
return 'suspend';
|
|
136
|
+
case 'error':
|
|
137
|
+
return 'error';
|
|
138
|
+
case 'validationFailure':
|
|
139
|
+
return 'output';
|
|
140
|
+
case 'subScript':
|
|
141
|
+
// A sub-script envelope is a forwarder; categorize by the inner event
|
|
142
|
+
// so existing `.on.<category>()` subscribers see chained-pipeline
|
|
143
|
+
// events under the same bucket they'd already receive direct events.
|
|
144
|
+
return categoryOf(evt.child);
|
|
145
|
+
case 'runtimeStep':
|
|
146
|
+
return 'runtime';
|
|
147
|
+
case 'other':
|
|
148
|
+
return 'other';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function isDuration(v) {
|
|
152
|
+
return (typeof v === 'object' && v !== null &&
|
|
153
|
+
typeof v.secs === 'number' &&
|
|
154
|
+
typeof v.nanos === 'number');
|
|
155
|
+
}
|
|
156
|
+
function toMs(d) {
|
|
157
|
+
if (!isDuration(d))
|
|
158
|
+
return 0;
|
|
159
|
+
return d.secs * 1000 + Math.round(d.nanos / 1_000_000);
|
|
160
|
+
}
|
|
161
|
+
function isRecord(v) {
|
|
162
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
163
|
+
}
|
|
164
|
+
function normalizeUsage(raw) {
|
|
165
|
+
if (!isRecord(raw))
|
|
166
|
+
return null;
|
|
167
|
+
const inputTokens = typeof raw.input_tokens === 'number' ? raw.input_tokens : 0;
|
|
168
|
+
const outputTokens = typeof raw.output_tokens === 'number' ? raw.output_tokens : 0;
|
|
169
|
+
const cachedInputTokens = typeof raw.cached_input_tokens === 'number' ? raw.cached_input_tokens : 0;
|
|
170
|
+
// Older servers may not emit this field — default to 0 to preserve
|
|
171
|
+
// wire-format compatibility. Anthropic on current servers emits non-zero
|
|
172
|
+
// when the call involves cache creation.
|
|
173
|
+
const cacheWriteInputTokens = typeof raw.cache_write_input_tokens === 'number' ? raw.cache_write_input_tokens : 0;
|
|
174
|
+
const model = typeof raw.model === 'string' ? raw.model : '';
|
|
175
|
+
const provider = typeof raw.provider === 'string' ? raw.provider : '';
|
|
176
|
+
return { inputTokens, outputTokens, cachedInputTokens, cacheWriteInputTokens, model, provider };
|
|
177
|
+
}
|
|
178
|
+
function normalizeValidationErrors(raw) {
|
|
179
|
+
if (!Array.isArray(raw))
|
|
180
|
+
return [];
|
|
181
|
+
const out = [];
|
|
182
|
+
for (const item of raw) {
|
|
183
|
+
if (!isRecord(item))
|
|
184
|
+
continue;
|
|
185
|
+
const stage = typeof item.stage === 'string' ? item.stage : '';
|
|
186
|
+
const message = typeof item.message === 'string' ? item.message : '';
|
|
187
|
+
const path = typeof item.path === 'string' ? item.path : null;
|
|
188
|
+
out.push({ stage, message, path });
|
|
189
|
+
}
|
|
190
|
+
return out;
|
|
191
|
+
}
|
|
192
|
+
function normalizeUnableRecord(raw) {
|
|
193
|
+
if (!isRecord(raw))
|
|
194
|
+
return { reason: '', missing: [], category: '' };
|
|
195
|
+
const reason = typeof raw.reason === 'string' ? raw.reason : '';
|
|
196
|
+
const category = typeof raw.category === 'string' ? raw.category : '';
|
|
197
|
+
const missing = Array.isArray(raw.missing)
|
|
198
|
+
? raw.missing.filter((m) => typeof m === 'string')
|
|
199
|
+
: [];
|
|
200
|
+
return { reason, missing, category };
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Normalize a serde-tagged `SuspendTrigger` wire payload (snake_case) into
|
|
204
|
+
* the SDK's camelCase {@link SuspendTrigger}. Unknown `kind` values are
|
|
205
|
+
* forwarded verbatim under the catch-all arm so future server versions
|
|
206
|
+
* don't crash older SDKs.
|
|
207
|
+
*
|
|
208
|
+
* Missing / malformed input defaults to `DagPosition` — matching the
|
|
209
|
+
* `#[serde(default)]` on the Rust side.
|
|
210
|
+
*/
|
|
211
|
+
export function normalizeSuspendTrigger(raw) {
|
|
212
|
+
if (!isRecord(raw) || typeof raw.kind !== 'string') {
|
|
213
|
+
return { kind: 'DagPosition' };
|
|
214
|
+
}
|
|
215
|
+
const kind = raw.kind;
|
|
216
|
+
switch (kind) {
|
|
217
|
+
case 'DagPosition':
|
|
218
|
+
return { kind: 'DagPosition' };
|
|
219
|
+
case 'ValidationExhausted': {
|
|
220
|
+
const taskName = typeof raw.task_name === 'string' ? raw.task_name : '';
|
|
221
|
+
const retryCount = typeof raw.retry_count === 'number' ? raw.retry_count : 0;
|
|
222
|
+
const lastAttempt = typeof raw.last_attempt === 'string' ? raw.last_attempt : '';
|
|
223
|
+
const validationErrors = normalizeValidationErrors(raw.validation_errors);
|
|
224
|
+
return { kind: 'ValidationExhausted', taskName, retryCount, lastAttempt, validationErrors };
|
|
225
|
+
}
|
|
226
|
+
case 'AgentUnable': {
|
|
227
|
+
const taskName = typeof raw.task_name === 'string' ? raw.task_name : '';
|
|
228
|
+
const unable = normalizeUnableRecord(raw.unable);
|
|
229
|
+
return { kind: 'AgentUnable', taskName, unable };
|
|
230
|
+
}
|
|
231
|
+
default:
|
|
232
|
+
// Forward-compat: unknown discriminants pass through under the
|
|
233
|
+
// catch-all arm — raw fields (snake_case, verbatim) live under `raw`
|
|
234
|
+
// so callers can opt in without dropping data.
|
|
235
|
+
return { kind, raw: { ...raw } };
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function normalizeErrorKind(raw) {
|
|
239
|
+
const known = [
|
|
240
|
+
'RateLimit', 'AuthError', 'TokenLimit',
|
|
241
|
+
// #1296: legacy umbrella + new status-specific kinds.
|
|
242
|
+
'ServerError', 'ServerError500', 'BadGateway502', 'ServiceUnavailable503', 'GatewayTimeout504',
|
|
243
|
+
'NetworkError', 'ParseError', 'Cancelled', 'Timeout', 'ScriptError',
|
|
244
|
+
'AuthorRaise', 'ScriptDepthExceeded', 'Panic', 'Internal',
|
|
245
|
+
];
|
|
246
|
+
if (typeof raw === 'string' && known.includes(raw))
|
|
247
|
+
return raw;
|
|
248
|
+
return 'ServerError';
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* `ErrorKind` is the bucket; this maps each bucket to the action a client
|
|
252
|
+
* should take. Mirrors the server's `SuggestedAction` derivation so the
|
|
253
|
+
* SDK never needs to ship a second copy of the policy.
|
|
254
|
+
*/
|
|
255
|
+
function suggestedActionFor(kind) {
|
|
256
|
+
switch (kind) {
|
|
257
|
+
case 'RateLimit':
|
|
258
|
+
case 'ServerError':
|
|
259
|
+
// #1296: status-specific 5xx variants all share the umbrella `retry`
|
|
260
|
+
// suggestion; per-variant backoff comes from `recommendedBackoffMs`.
|
|
261
|
+
case 'ServerError500':
|
|
262
|
+
case 'BadGateway502':
|
|
263
|
+
case 'ServiceUnavailable503':
|
|
264
|
+
case 'GatewayTimeout504':
|
|
265
|
+
case 'NetworkError':
|
|
266
|
+
return 'retry';
|
|
267
|
+
case 'AuthError':
|
|
268
|
+
return 'fix-config';
|
|
269
|
+
case 'TokenLimit':
|
|
270
|
+
case 'Timeout':
|
|
271
|
+
return 'fix-input';
|
|
272
|
+
case 'ScriptError':
|
|
273
|
+
case 'ScriptDepthExceeded':
|
|
274
|
+
case 'ParseError':
|
|
275
|
+
return 'fix-script';
|
|
276
|
+
case 'AuthorRaise':
|
|
277
|
+
return 'handle-author-failure';
|
|
278
|
+
case 'Cancelled':
|
|
279
|
+
return 'none';
|
|
280
|
+
case 'Panic':
|
|
281
|
+
case 'Internal':
|
|
282
|
+
return 'report';
|
|
283
|
+
default: {
|
|
284
|
+
const _exhaustive = kind;
|
|
285
|
+
void _exhaustive;
|
|
286
|
+
return 'report';
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const TRANSIENT_KINDS = [
|
|
291
|
+
'RateLimit', 'ServerError', 'NetworkError',
|
|
292
|
+
// #1296: status-specific 5xx variants — all transient with per-status backoff.
|
|
293
|
+
'ServerError500', 'BadGateway502', 'ServiceUnavailable503', 'GatewayTimeout504',
|
|
294
|
+
];
|
|
295
|
+
/**
|
|
296
|
+
* Normalize one of the 5 raw `Runtime*` engine events into a `runtimeStep`
|
|
297
|
+
* `WorkflowEvent` snapshot. Each emission is a single-event DELTA — not a
|
|
298
|
+
* running total — matching the contract documented on the `runtimeStep`
|
|
299
|
+
* union arm in {@link WorkflowEvent}. The `RunStream` accumulator turns
|
|
300
|
+
* deltas into cumulative snapshots for `.on.runtime(cb)` subscribers.
|
|
301
|
+
*
|
|
302
|
+
* Field semantics by event type:
|
|
303
|
+
* * `RuntimeStart`: populates `runtimeName` + `language`; status='running'.
|
|
304
|
+
* * `RuntimeStdout`: populates `stdout` with the chunk; status='running'.
|
|
305
|
+
* * `RuntimeStderr`: populates `stderr` with the chunk; status='running'.
|
|
306
|
+
* * `RuntimeEnd`: populates `exitCode` + `durationMs`; status='completed'.
|
|
307
|
+
* * `RuntimeError`: populates `errorKind` + `errorMessage`; status='error'.
|
|
308
|
+
*
|
|
309
|
+
* Malformed payloads degrade to an empty-field snapshot at the same status
|
|
310
|
+
* (rather than throwing) so a partial server bug doesn't crash the SDK.
|
|
311
|
+
*/
|
|
312
|
+
function normalizeRuntimeEvent(type, payload) {
|
|
313
|
+
const p = isRecord(payload) ? payload : {};
|
|
314
|
+
const taskName = typeof p.task_name === 'string' ? p.task_name : '';
|
|
315
|
+
// Start with a fully-defaulted snapshot, then overlay only the fields the
|
|
316
|
+
// event's type implies. Keeps each arm to two lines of meaningful diff.
|
|
317
|
+
const base = {
|
|
318
|
+
kind: 'runtimeStep',
|
|
319
|
+
taskName,
|
|
320
|
+
runtimeName: '',
|
|
321
|
+
language: '',
|
|
322
|
+
status: 'running',
|
|
323
|
+
stdout: '',
|
|
324
|
+
stderr: '',
|
|
325
|
+
exitCode: null,
|
|
326
|
+
durationMs: null,
|
|
327
|
+
errorKind: null,
|
|
328
|
+
errorMessage: null,
|
|
329
|
+
};
|
|
330
|
+
switch (type) {
|
|
331
|
+
case 'RuntimeStart':
|
|
332
|
+
return {
|
|
333
|
+
...base,
|
|
334
|
+
runtimeName: typeof p.runtime_name === 'string' ? p.runtime_name : '',
|
|
335
|
+
language: typeof p.language === 'string' ? p.language : '',
|
|
336
|
+
};
|
|
337
|
+
case 'RuntimeStdout':
|
|
338
|
+
return { ...base, stdout: typeof p.chunk === 'string' ? p.chunk : '' };
|
|
339
|
+
case 'RuntimeStderr':
|
|
340
|
+
return { ...base, stderr: typeof p.chunk === 'string' ? p.chunk : '' };
|
|
341
|
+
case 'RuntimeEnd':
|
|
342
|
+
// Terminal-success envelope — `completed` even when exit_code != 0
|
|
343
|
+
// (non-zero is still a clean exit from the sandbox's perspective).
|
|
344
|
+
return {
|
|
345
|
+
...base,
|
|
346
|
+
status: 'completed',
|
|
347
|
+
exitCode: typeof p.exit_code === 'number' ? p.exit_code : 0,
|
|
348
|
+
durationMs: typeof p.duration_ms === 'number' ? p.duration_ms : 0,
|
|
349
|
+
};
|
|
350
|
+
case 'RuntimeError':
|
|
351
|
+
// `kind` mirrors the Rust `RuntimeError` enum
|
|
352
|
+
// (`Timeout`/`OomKilled`/`SandboxUnavailable`/`Internal`/
|
|
353
|
+
// `NotConfigured`) — kept as a plain string so future variants pass
|
|
354
|
+
// through without an SDK release.
|
|
355
|
+
return {
|
|
356
|
+
...base,
|
|
357
|
+
status: 'error',
|
|
358
|
+
errorKind: typeof p.kind === 'string' ? p.kind : '',
|
|
359
|
+
errorMessage: typeof p.message === 'string' ? p.message : '',
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
function normalizeErrorSource(raw) {
|
|
364
|
+
if (!isRecord(raw))
|
|
365
|
+
return {};
|
|
366
|
+
const out = {};
|
|
367
|
+
if (typeof raw.task === 'string')
|
|
368
|
+
out.task = raw.task;
|
|
369
|
+
if (typeof raw.agent === 'string')
|
|
370
|
+
out.agent = raw.agent;
|
|
371
|
+
if (typeof raw.provider === 'string')
|
|
372
|
+
out.provider = raw.provider;
|
|
373
|
+
if (typeof raw.model === 'string')
|
|
374
|
+
out.model = raw.model;
|
|
375
|
+
if (typeof raw.tool_ref === 'string')
|
|
376
|
+
out.toolRef = raw.tool_ref;
|
|
377
|
+
if (typeof raw.script === 'string')
|
|
378
|
+
out.script = raw.script;
|
|
379
|
+
if (typeof raw.line === 'number')
|
|
380
|
+
out.line = raw.line;
|
|
381
|
+
return out;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Convert a raw {@link EngineEvent} to a typed {@link WorkflowEvent}. Unknown
|
|
385
|
+
* variants are funneled through `{ kind: 'other', typeName, payload }`
|
|
386
|
+
* preserving the original wire name.
|
|
387
|
+
*/
|
|
388
|
+
export function toWorkflowEvent(raw) {
|
|
389
|
+
const { type, payload } = raw;
|
|
390
|
+
switch (type) {
|
|
391
|
+
case 'WorkflowStart': {
|
|
392
|
+
// payload: usize (total tasks)
|
|
393
|
+
const totalTasks = typeof payload === 'number' ? payload : 0;
|
|
394
|
+
return { kind: 'start', totalTasks };
|
|
395
|
+
}
|
|
396
|
+
case 'WorkflowEnd': {
|
|
397
|
+
// Issue #1173: payload is now `{value, total_input_tokens, ...}`.
|
|
398
|
+
// Legacy emissions (pre-#1173) put the bare output value directly
|
|
399
|
+
// under `payload`. Detect the new shape by the presence of a
|
|
400
|
+
// `value` key plus at least one `total_*` key; otherwise treat
|
|
401
|
+
// `payload` itself as the output value and default totals to
|
|
402
|
+
// zero. Mirrors the Rust `WorkflowEndPayload::Deserialize` rule.
|
|
403
|
+
const { output, totals } = parseWorkflowEndPayload(payload);
|
|
404
|
+
return { kind: 'end', output, durationMs: 0, totals };
|
|
405
|
+
}
|
|
406
|
+
case 'TaskStart': {
|
|
407
|
+
// payload: [name, on_error]
|
|
408
|
+
if (Array.isArray(payload)) {
|
|
409
|
+
const task = typeof payload[0] === 'string' ? payload[0] : '';
|
|
410
|
+
const onError = typeof payload[1] === 'string' ? payload[1] : null;
|
|
411
|
+
return { kind: 'taskStart', task, onError };
|
|
412
|
+
}
|
|
413
|
+
return { kind: 'taskStart', task: '', onError: null };
|
|
414
|
+
}
|
|
415
|
+
case 'TaskEnd': {
|
|
416
|
+
// payload is a struct variant: { task, on_error_label, value, duration,
|
|
417
|
+
// attempt, usage, variant, ... }. Historical tuple shape is also
|
|
418
|
+
// accepted for back-compat with older wire captures.
|
|
419
|
+
if (isRecord(payload)) {
|
|
420
|
+
const task = typeof payload.task === 'string' ? payload.task : '';
|
|
421
|
+
const output = payload.value;
|
|
422
|
+
const durationMs = toMs(payload.duration);
|
|
423
|
+
const usage = normalizeUsage(payload.usage);
|
|
424
|
+
// Pre-#206 servers omit `variant` entirely; default to "success" to
|
|
425
|
+
// mirror the Rust `#[serde(default)]` on `TaskEndVariant`.
|
|
426
|
+
const variant = typeof payload.variant === 'string' ? payload.variant : 'success';
|
|
427
|
+
return { kind: 'taskEnd', task, output, durationMs, usage, variant };
|
|
428
|
+
}
|
|
429
|
+
if (Array.isArray(payload)) {
|
|
430
|
+
const task = typeof payload[0] === 'string' ? payload[0] : '';
|
|
431
|
+
const output = payload[2];
|
|
432
|
+
const durationMs = toMs(payload[3]);
|
|
433
|
+
const usage = payload.length >= 5 ? normalizeUsage(payload[4]) : null;
|
|
434
|
+
return { kind: 'taskEnd', task, output, durationMs, usage, variant: 'success' };
|
|
435
|
+
}
|
|
436
|
+
return { kind: 'taskEnd', task: '', output: undefined, durationMs: 0, usage: null, variant: 'success' };
|
|
437
|
+
}
|
|
438
|
+
case 'AgentOutput': {
|
|
439
|
+
if (isRecord(payload)) {
|
|
440
|
+
const task = typeof payload.task_name === 'string' ? payload.task_name : '';
|
|
441
|
+
const agent = typeof payload.agent_name === 'string' ? payload.agent_name : null;
|
|
442
|
+
const taskId = typeof payload.task_id === 'string' ? payload.task_id : '';
|
|
443
|
+
const chunk = typeof payload.chunk === 'string' ? payload.chunk : '';
|
|
444
|
+
return { kind: 'agentChunk', task, agent, taskId, chunk };
|
|
445
|
+
}
|
|
446
|
+
return { kind: 'agentChunk', task: '', agent: null, taskId: '', chunk: '' };
|
|
447
|
+
}
|
|
448
|
+
case 'ToolCallStart': {
|
|
449
|
+
if (isRecord(payload)) {
|
|
450
|
+
const task = typeof payload.task_name === 'string' ? payload.task_name : '';
|
|
451
|
+
const tool = typeof payload.tool_name === 'string' ? payload.tool_name : '';
|
|
452
|
+
const server = typeof payload.server_name === 'string' ? payload.server_name : '';
|
|
453
|
+
return { kind: 'toolCallStart', task, tool, server, input: payload.input };
|
|
454
|
+
}
|
|
455
|
+
return { kind: 'toolCallStart', task: '', tool: '', server: '', input: undefined };
|
|
456
|
+
}
|
|
457
|
+
case 'ToolCallEnd': {
|
|
458
|
+
if (isRecord(payload)) {
|
|
459
|
+
const task = typeof payload.task_name === 'string' ? payload.task_name : '';
|
|
460
|
+
const tool = typeof payload.tool_name === 'string' ? payload.tool_name : '';
|
|
461
|
+
// Core emits `{ secs, nanos }` under `duration`; older flattened shape
|
|
462
|
+
// used `duration_ms` — accept both to stay resilient.
|
|
463
|
+
const durationMs = isDuration(payload.duration)
|
|
464
|
+
? toMs(payload.duration)
|
|
465
|
+
: typeof payload.duration_ms === 'number' ? payload.duration_ms : 0;
|
|
466
|
+
return { kind: 'toolCallEnd', task, tool, output: payload.output, durationMs };
|
|
467
|
+
}
|
|
468
|
+
return { kind: 'toolCallEnd', task: '', tool: '', output: undefined, durationMs: 0 };
|
|
469
|
+
}
|
|
470
|
+
case 'Suspended': {
|
|
471
|
+
if (isRecord(payload)) {
|
|
472
|
+
const name = typeof payload.checkpoint_name === 'string' ? payload.checkpoint_name : '';
|
|
473
|
+
const token = typeof payload.token === 'string' ? payload.token : '';
|
|
474
|
+
const prompt = typeof payload.prompt === 'string' ? payload.prompt : '';
|
|
475
|
+
const schema = payload.schema;
|
|
476
|
+
const timeoutSecs = typeof payload.timeout_secs === 'number' ? payload.timeout_secs : null;
|
|
477
|
+
// Older servers omit `trigger` entirely; normalizer defaults to
|
|
478
|
+
// `DagPosition` to match the Rust `#[serde(default)]`.
|
|
479
|
+
const trigger = normalizeSuspendTrigger(payload.trigger);
|
|
480
|
+
return { kind: 'checkpoint', name, token, prompt, schema, timeoutSecs, trigger };
|
|
481
|
+
}
|
|
482
|
+
return { kind: 'checkpoint', name: '', token: '', prompt: '', schema: null, timeoutSecs: null, trigger: { kind: 'DagPosition' } };
|
|
483
|
+
}
|
|
484
|
+
case 'ToolApprovalPending': {
|
|
485
|
+
if (isRecord(payload)) {
|
|
486
|
+
const token = typeof payload.token === 'string' ? payload.token : '';
|
|
487
|
+
const toolRef = typeof payload.tool_ref === 'string' ? payload.tool_ref : '';
|
|
488
|
+
const executionId = typeof payload.execution_id === 'string' ? payload.execution_id : null;
|
|
489
|
+
const nodeId = typeof payload.node_id === 'number' ? payload.node_id : null;
|
|
490
|
+
return { kind: 'toolApproval', token, toolRef, args: payload.args, executionId, nodeId };
|
|
491
|
+
}
|
|
492
|
+
return { kind: 'toolApproval', token: '', toolRef: '', args: undefined, executionId: null, nodeId: null };
|
|
493
|
+
}
|
|
494
|
+
case 'Breakpoint': {
|
|
495
|
+
if (isRecord(payload)) {
|
|
496
|
+
const token = typeof payload.token === 'string' ? payload.token : '';
|
|
497
|
+
const nodeId = typeof payload.node_id === 'number' ? payload.node_id : 0;
|
|
498
|
+
const env = isRecord(payload.env_snapshot) ? payload.env_snapshot : {};
|
|
499
|
+
return { kind: 'breakpoint', token, nodeId, env };
|
|
500
|
+
}
|
|
501
|
+
return { kind: 'breakpoint', token: '', nodeId: 0, env: {} };
|
|
502
|
+
}
|
|
503
|
+
case 'Error': {
|
|
504
|
+
if (isRecord(payload)) {
|
|
505
|
+
const message = typeof payload.message === 'string' ? payload.message : String(payload.message ?? '');
|
|
506
|
+
const errorKind = normalizeErrorKind(payload.kind);
|
|
507
|
+
// Codes are kebab-cased AKRIBES-E-... strings; we forward them as
|
|
508
|
+
// opaque tags rather than enumerating, so a newer server's code
|
|
509
|
+
// surfaces verbatim instead of getting collapsed.
|
|
510
|
+
const code = typeof payload.code === 'string' ? payload.code : null;
|
|
511
|
+
const userMessage = typeof payload.user_message === 'string' ? payload.user_message : message;
|
|
512
|
+
const retryAfterMs = typeof payload.retry_after_ms === 'number'
|
|
513
|
+
? payload.retry_after_ms
|
|
514
|
+
: null;
|
|
515
|
+
const source = normalizeErrorSource(payload.source);
|
|
516
|
+
const suggestedAction = suggestedActionFor(errorKind);
|
|
517
|
+
const retryable = retryAfterMs !== null
|
|
518
|
+
|| TRANSIENT_KINDS.includes(errorKind);
|
|
519
|
+
return {
|
|
520
|
+
kind: 'error',
|
|
521
|
+
message,
|
|
522
|
+
errorKind,
|
|
523
|
+
code,
|
|
524
|
+
userMessage,
|
|
525
|
+
retryAfterMs,
|
|
526
|
+
suggestedAction,
|
|
527
|
+
retryable,
|
|
528
|
+
source,
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
// Legacy: bare-string error payload from an older server. Fill the
|
|
532
|
+
// structured fields with sensible defaults so consumers don't
|
|
533
|
+
// branch.
|
|
534
|
+
const message = typeof payload === 'string' ? payload : '';
|
|
535
|
+
return {
|
|
536
|
+
kind: 'error',
|
|
537
|
+
message,
|
|
538
|
+
errorKind: 'ServerError',
|
|
539
|
+
code: null,
|
|
540
|
+
userMessage: message,
|
|
541
|
+
retryAfterMs: null,
|
|
542
|
+
suggestedAction: 'retry',
|
|
543
|
+
retryable: true,
|
|
544
|
+
source: {},
|
|
545
|
+
};
|
|
546
|
+
}
|
|
547
|
+
case 'ValidationFailure': {
|
|
548
|
+
if (isRecord(payload)) {
|
|
549
|
+
const taskName = typeof payload.task_name === 'string' ? payload.task_name : '';
|
|
550
|
+
const attempt = typeof payload.attempt === 'number' ? payload.attempt : 0;
|
|
551
|
+
const modelResponse = typeof payload.model_response === 'string' ? payload.model_response : '';
|
|
552
|
+
const missingFields = Array.isArray(payload.missing_fields)
|
|
553
|
+
? payload.missing_fields.filter((s) => typeof s === 'string')
|
|
554
|
+
: [];
|
|
555
|
+
const extraFields = Array.isArray(payload.extra_fields)
|
|
556
|
+
? payload.extra_fields.filter((s) => typeof s === 'string')
|
|
557
|
+
: [];
|
|
558
|
+
const typeErrors = Array.isArray(payload.type_errors)
|
|
559
|
+
? payload.type_errors.filter((s) => typeof s === 'string')
|
|
560
|
+
: [];
|
|
561
|
+
const stopReason = typeof payload.stop_reason === 'string' ? payload.stop_reason : null;
|
|
562
|
+
return {
|
|
563
|
+
kind: 'validationFailure',
|
|
564
|
+
taskName,
|
|
565
|
+
attempt,
|
|
566
|
+
modelResponse,
|
|
567
|
+
missingFields,
|
|
568
|
+
extraFields,
|
|
569
|
+
typeErrors,
|
|
570
|
+
stopReason,
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
return {
|
|
574
|
+
kind: 'validationFailure',
|
|
575
|
+
taskName: '',
|
|
576
|
+
attempt: 0,
|
|
577
|
+
modelResponse: '',
|
|
578
|
+
missingFields: [],
|
|
579
|
+
extraFields: [],
|
|
580
|
+
typeErrors: [],
|
|
581
|
+
stopReason: null,
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
case 'RuntimeStart':
|
|
585
|
+
case 'RuntimeStdout':
|
|
586
|
+
case 'RuntimeStderr':
|
|
587
|
+
case 'RuntimeEnd':
|
|
588
|
+
case 'RuntimeError':
|
|
589
|
+
return normalizeRuntimeEvent(type, payload);
|
|
590
|
+
case 'SubScript': {
|
|
591
|
+
// Wire shape (akribes-core EngineEvent::SubScript, post-#993):
|
|
592
|
+
// { script_name, parent_task, parent_node_id?, attempt?,
|
|
593
|
+
// parent_path: SubScriptFrame[], child: EngineEvent (leaf) }
|
|
594
|
+
// Legacy wire shape (pre-#993) wrapped each call-stack level
|
|
595
|
+
// recursively in its own SubScript envelope. We unwrap the legacy
|
|
596
|
+
// shape on the fly so consumers always see the flat shape:
|
|
597
|
+
// `parentPath` holds the ancestor chain (outermost → immediate
|
|
598
|
+
// parent), and `child` is the normalized leaf event.
|
|
599
|
+
if (isRecord(payload)) {
|
|
600
|
+
const { scriptName, parentTask, parentPath, leaf } = flattenSubScriptPayload(payload);
|
|
601
|
+
const child = leaf && isRecord(leaf) && typeof leaf.type === 'string'
|
|
602
|
+
? toWorkflowEvent(leaf)
|
|
603
|
+
: { kind: 'other', typeName: '', payload: leaf };
|
|
604
|
+
return { kind: 'subScript', scriptName, parentTask, parentPath, child };
|
|
605
|
+
}
|
|
606
|
+
return { kind: 'subScript', scriptName: '', parentTask: '', parentPath: [], child: { kind: 'other', typeName: '', payload } };
|
|
607
|
+
}
|
|
608
|
+
default:
|
|
609
|
+
return { kind: 'other', typeName: type, payload };
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
//# sourceMappingURL=workflowEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowEvents.js","sourceRoot":"","sources":["../src/workflowEvents.ts"],"names":[],"mappings":"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"}
|