weave-codex 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSES/MIT.txt +21 -0
- package/README.md +144 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +149 -0
- package/dist/cli.js.map +1 -0
- package/dist/collector.d.ts +19 -0
- package/dist/collector.js +162 -0
- package/dist/collector.js.map +1 -0
- package/dist/config.d.ts +23 -0
- package/dist/config.js +99 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +16 -0
- package/dist/constants.js +42 -0
- package/dist/constants.js.map +1 -0
- package/dist/install.d.ts +14 -0
- package/dist/install.js +177 -0
- package/dist/install.js.map +1 -0
- package/dist/lock.d.ts +7 -0
- package/dist/lock.js +67 -0
- package/dist/lock.js.map +1 -0
- package/dist/log.d.ts +4 -0
- package/dist/log.js +45 -0
- package/dist/log.js.map +1 -0
- package/dist/model.d.ts +58 -0
- package/dist/model.js +5 -0
- package/dist/model.js.map +1 -0
- package/dist/rollout/cursor.d.ts +13 -0
- package/dist/rollout/cursor.js +74 -0
- package/dist/rollout/cursor.js.map +1 -0
- package/dist/rollout/parser.d.ts +26 -0
- package/dist/rollout/parser.js +359 -0
- package/dist/rollout/parser.js.map +1 -0
- package/dist/rollout/types.d.ts +213 -0
- package/dist/rollout/types.js +33 -0
- package/dist/rollout/types.js.map +1 -0
- package/dist/semconv.d.ts +37 -0
- package/dist/semconv.js +41 -0
- package/dist/semconv.js.map +1 -0
- package/dist/spans/emit.d.ts +14 -0
- package/dist/spans/emit.js +143 -0
- package/dist/spans/emit.js.map +1 -0
- package/dist/spans/messages.d.ts +26 -0
- package/dist/spans/messages.js +38 -0
- package/dist/spans/messages.js.map +1 -0
- package/dist/spans/tracer.d.ts +20 -0
- package/dist/spans/tracer.js +43 -0
- package/dist/spans/tracer.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 CoreWeave, Inc.
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// SPDX-PackageName: weave-codex
|
|
4
|
+
/**
|
|
5
|
+
* Turn the Codex rollout line stream into ReconstructedTurn[].
|
|
6
|
+
*
|
|
7
|
+
* Segmentation rules:
|
|
8
|
+
* - A turn is bounded by `turn_context`/`task_started` ... `task_complete`.
|
|
9
|
+
* - Each model round-trip (`chat`) is a run of model-output response items
|
|
10
|
+
* (reasoning, assistant message, function_call) terminated by a `token_count`
|
|
11
|
+
* event, whose `info.last_token_usage` is that call's usage delta.
|
|
12
|
+
* - A tool execution pairs a `function_call` (request) with its
|
|
13
|
+
* `function_call_output` (result) by `call_id`; `mcp_tool_call_end` enriches it.
|
|
14
|
+
* - Timestamps are taken from the rollout lines so spans are backdated.
|
|
15
|
+
*/
|
|
16
|
+
import { EVENT_MSG, RESPONSE_ITEM, ROLLOUT_ITEM } from './types.js';
|
|
17
|
+
const EMPTY_USAGE = {
|
|
18
|
+
inputTokens: 0,
|
|
19
|
+
outputTokens: 0,
|
|
20
|
+
cachedInputTokens: 0,
|
|
21
|
+
reasoningOutputTokens: 0,
|
|
22
|
+
};
|
|
23
|
+
/** Parse one raw line, or null if malformed/blank (kept aligned by the caller). */
|
|
24
|
+
export function parseLineMaybe(raw) {
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(raw);
|
|
27
|
+
return parsed && typeof parsed.type === 'string' ? parsed : null;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function reconstructTurns(lines, context) {
|
|
34
|
+
const turns = [];
|
|
35
|
+
let sessionId = context.fallbackSessionId;
|
|
36
|
+
let cwd;
|
|
37
|
+
let cliVersion;
|
|
38
|
+
let current;
|
|
39
|
+
let consumedLines = 0;
|
|
40
|
+
let abandonedTurns = 0;
|
|
41
|
+
for (let i = 0; i < lines.length; i++) {
|
|
42
|
+
const line = lines[i];
|
|
43
|
+
if (!line)
|
|
44
|
+
continue; // blank/malformed line; still counted toward consumedLines index
|
|
45
|
+
const timestamp = parseTimestamp(line.timestamp);
|
|
46
|
+
if (line.type === ROLLOUT_ITEM.SESSION_META) {
|
|
47
|
+
const meta = line.payload;
|
|
48
|
+
sessionId = meta.id || sessionId;
|
|
49
|
+
cwd = meta.cwd;
|
|
50
|
+
cliVersion = meta.cli_version;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (line.type === ROLLOUT_ITEM.TURN_CONTEXT) {
|
|
54
|
+
const turnContext = line.payload;
|
|
55
|
+
if (current)
|
|
56
|
+
abandonedTurns++; // previous turn never reached task_complete
|
|
57
|
+
current = newTurnBuilder({
|
|
58
|
+
sessionId,
|
|
59
|
+
turnId: turnContext.turn_id,
|
|
60
|
+
model: turnContext.model || context.fallbackModel || 'unknown',
|
|
61
|
+
cwd: turnContext.cwd || cwd,
|
|
62
|
+
cliVersion,
|
|
63
|
+
startTime: timestamp,
|
|
64
|
+
});
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (line.type === ROLLOUT_ITEM.RESPONSE_ITEM && current) {
|
|
68
|
+
applyResponseItem(current, line.payload, timestamp);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (line.type === ROLLOUT_ITEM.EVENT_MSG && current) {
|
|
72
|
+
const finished = applyEvent(current, line.payload, timestamp);
|
|
73
|
+
if (finished) {
|
|
74
|
+
turns.push(finalizeTurn(current));
|
|
75
|
+
current = undefined;
|
|
76
|
+
consumedLines = i + 1;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return { turns, consumedLines, abandonedTurns };
|
|
81
|
+
}
|
|
82
|
+
function newTurnBuilder(init) {
|
|
83
|
+
return {
|
|
84
|
+
...init,
|
|
85
|
+
endTime: init.startTime,
|
|
86
|
+
chats: [],
|
|
87
|
+
tools: [],
|
|
88
|
+
toolsByCallId: new Map(),
|
|
89
|
+
pendingItems: [],
|
|
90
|
+
lastBoundaryTime: init.startTime,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function applyResponseItem(builder, item, timestamp) {
|
|
94
|
+
switch (item.type) {
|
|
95
|
+
case RESPONSE_ITEM.MESSAGE: {
|
|
96
|
+
const message = item;
|
|
97
|
+
const text = textFromContent(message.content);
|
|
98
|
+
if (message.role === 'user') {
|
|
99
|
+
builder.userMessage = builder.userMessage
|
|
100
|
+
? `${builder.userMessage}\n${text}`
|
|
101
|
+
: text;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
beginChatIfNeeded(builder);
|
|
105
|
+
builder.pendingItems.push(item);
|
|
106
|
+
if (text)
|
|
107
|
+
builder.finalAssistantMessage = text;
|
|
108
|
+
}
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
case RESPONSE_ITEM.REASONING: {
|
|
112
|
+
beginChatIfNeeded(builder);
|
|
113
|
+
builder.pendingItems.push(item);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
case RESPONSE_ITEM.FUNCTION_CALL: {
|
|
117
|
+
beginChatIfNeeded(builder);
|
|
118
|
+
builder.pendingItems.push(item);
|
|
119
|
+
const functionCall = item;
|
|
120
|
+
registerTool(builder, {
|
|
121
|
+
callId: functionCall.call_id,
|
|
122
|
+
name: functionCall.name,
|
|
123
|
+
kind: 'function',
|
|
124
|
+
startTime: timestamp,
|
|
125
|
+
endTime: timestamp,
|
|
126
|
+
arguments: functionCall.arguments,
|
|
127
|
+
});
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
case RESPONSE_ITEM.FUNCTION_CALL_OUTPUT: {
|
|
131
|
+
const functionOutput = item;
|
|
132
|
+
const tool = builder.toolsByCallId.get(functionOutput.call_id);
|
|
133
|
+
if (tool) {
|
|
134
|
+
tool.result = renderOutput(functionOutput.output);
|
|
135
|
+
tool.endTime = timestamp;
|
|
136
|
+
}
|
|
137
|
+
builder.lastBoundaryTime = timestamp;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
case RESPONSE_ITEM.LOCAL_SHELL_CALL: {
|
|
141
|
+
const shellCall = item;
|
|
142
|
+
const callId = shellCall.call_id || `shell-${builder.tools.length}`;
|
|
143
|
+
registerTool(builder, {
|
|
144
|
+
callId,
|
|
145
|
+
name: 'local_shell',
|
|
146
|
+
kind: 'local_shell',
|
|
147
|
+
startTime: timestamp,
|
|
148
|
+
endTime: timestamp,
|
|
149
|
+
arguments: safeJson(shellCall.action),
|
|
150
|
+
});
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
case RESPONSE_ITEM.WEB_SEARCH_CALL: {
|
|
154
|
+
const webSearchCall = item;
|
|
155
|
+
registerTool(builder, {
|
|
156
|
+
callId: `web_search-${builder.tools.length}`,
|
|
157
|
+
name: 'web_search',
|
|
158
|
+
kind: 'web_search',
|
|
159
|
+
startTime: timestamp,
|
|
160
|
+
endTime: timestamp,
|
|
161
|
+
arguments: safeJson(webSearchCall.action),
|
|
162
|
+
});
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
case RESPONSE_ITEM.CUSTOM_TOOL_CALL: {
|
|
166
|
+
const customCall = item;
|
|
167
|
+
registerTool(builder, {
|
|
168
|
+
callId: customCall.call_id,
|
|
169
|
+
name: customCall.name,
|
|
170
|
+
kind: 'custom',
|
|
171
|
+
startTime: timestamp,
|
|
172
|
+
endTime: timestamp,
|
|
173
|
+
arguments: customCall.input,
|
|
174
|
+
});
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
case RESPONSE_ITEM.CUSTOM_TOOL_CALL_OUTPUT: {
|
|
178
|
+
const customOutput = item;
|
|
179
|
+
const tool = builder.toolsByCallId.get(customOutput.call_id);
|
|
180
|
+
if (tool) {
|
|
181
|
+
tool.result = renderOutput(customOutput.output);
|
|
182
|
+
tool.endTime = timestamp;
|
|
183
|
+
}
|
|
184
|
+
builder.lastBoundaryTime = timestamp;
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
default:
|
|
188
|
+
return; // forward-compat: ignore item kinds we don't model
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/** Returns true when the turn is complete (task_complete seen). */
|
|
192
|
+
function applyEvent(builder, event, timestamp) {
|
|
193
|
+
switch (event.type) {
|
|
194
|
+
case EVENT_MSG.TOKEN_COUNT: {
|
|
195
|
+
const tokenCount = event;
|
|
196
|
+
closeChat(builder, timestamp, tokenCount.info?.last_token_usage);
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
case EVENT_MSG.MCP_TOOL_CALL_END: {
|
|
200
|
+
const mcpEnd = event;
|
|
201
|
+
const tool = builder.toolsByCallId.get(mcpEnd.call_id);
|
|
202
|
+
if (tool) {
|
|
203
|
+
tool.kind = 'mcp';
|
|
204
|
+
tool.mcpServer = mcpEnd.invocation?.server;
|
|
205
|
+
if (mcpEnd.invocation?.tool)
|
|
206
|
+
tool.name = mcpEnd.invocation.tool;
|
|
207
|
+
tool.result = renderResult(mcpEnd.result);
|
|
208
|
+
tool.endTime = timestamp;
|
|
209
|
+
}
|
|
210
|
+
builder.lastBoundaryTime = timestamp;
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
case EVENT_MSG.AGENT_MESSAGE: {
|
|
214
|
+
const agentMessage = event;
|
|
215
|
+
if (agentMessage.message)
|
|
216
|
+
builder.finalAssistantMessage = agentMessage.message;
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
case EVENT_MSG.TASK_STARTED: {
|
|
220
|
+
const taskStarted = event;
|
|
221
|
+
if (typeof taskStarted.started_at === 'number') {
|
|
222
|
+
builder.startTime = new Date(taskStarted.started_at * 1000);
|
|
223
|
+
// Align the first chat's start to the authoritative turn start so a chat
|
|
224
|
+
// span can't begin before its parent turn. Only before any model output.
|
|
225
|
+
if (builder.pendingItems.length === 0)
|
|
226
|
+
builder.lastBoundaryTime = builder.startTime;
|
|
227
|
+
}
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
case EVENT_MSG.TASK_COMPLETE: {
|
|
231
|
+
const taskComplete = event;
|
|
232
|
+
// Flush any model output not yet closed by a token_count.
|
|
233
|
+
if (builder.pendingItems.length > 0)
|
|
234
|
+
closeChat(builder, timestamp, undefined);
|
|
235
|
+
builder.endTime = timestamp;
|
|
236
|
+
if (taskComplete.last_agent_message) {
|
|
237
|
+
builder.finalAssistantMessage = taskComplete.last_agent_message;
|
|
238
|
+
}
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
default:
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function beginChatIfNeeded(builder) {
|
|
246
|
+
if (builder.pendingItems.length === 0)
|
|
247
|
+
builder.chatStartTime = builder.lastBoundaryTime;
|
|
248
|
+
}
|
|
249
|
+
function closeChat(builder, endTime, usage) {
|
|
250
|
+
if (builder.pendingItems.length === 0 && !usage)
|
|
251
|
+
return;
|
|
252
|
+
const toolCalls = builder.pendingItems
|
|
253
|
+
.filter((item) => item.type === RESPONSE_ITEM.FUNCTION_CALL)
|
|
254
|
+
.map(call => ({
|
|
255
|
+
callId: call.call_id,
|
|
256
|
+
name: call.name,
|
|
257
|
+
arguments: call.arguments,
|
|
258
|
+
}));
|
|
259
|
+
const text = joinText(builder.pendingItems
|
|
260
|
+
.filter((item) => item.type === RESPONSE_ITEM.MESSAGE)
|
|
261
|
+
.map(message => textFromContent(message.content)));
|
|
262
|
+
const reasoning = joinText(builder.pendingItems
|
|
263
|
+
.filter((item) => item.type === RESPONSE_ITEM.REASONING)
|
|
264
|
+
.map(reasoningText));
|
|
265
|
+
const chat = {
|
|
266
|
+
startTime: builder.chatStartTime ?? builder.lastBoundaryTime,
|
|
267
|
+
endTime,
|
|
268
|
+
toolCalls,
|
|
269
|
+
finishReason: toolCalls.length > 0 ? 'tool_call' : 'stop',
|
|
270
|
+
};
|
|
271
|
+
if (text)
|
|
272
|
+
chat.text = text;
|
|
273
|
+
if (reasoning)
|
|
274
|
+
chat.reasoning = reasoning;
|
|
275
|
+
if (usage)
|
|
276
|
+
chat.usage = normalizeUsage(usage);
|
|
277
|
+
builder.chats.push(chat);
|
|
278
|
+
builder.lastBoundaryTime = endTime;
|
|
279
|
+
builder.pendingItems = [];
|
|
280
|
+
builder.chatStartTime = undefined;
|
|
281
|
+
}
|
|
282
|
+
function registerTool(builder, tool) {
|
|
283
|
+
builder.tools.push(tool);
|
|
284
|
+
builder.toolsByCallId.set(tool.callId, tool);
|
|
285
|
+
}
|
|
286
|
+
function finalizeTurn(builder) {
|
|
287
|
+
const usageTotal = builder.chats.reduce((total, chat) => {
|
|
288
|
+
if (!chat.usage)
|
|
289
|
+
return total;
|
|
290
|
+
return {
|
|
291
|
+
inputTokens: total.inputTokens + chat.usage.inputTokens,
|
|
292
|
+
outputTokens: total.outputTokens + chat.usage.outputTokens,
|
|
293
|
+
cachedInputTokens: total.cachedInputTokens + chat.usage.cachedInputTokens,
|
|
294
|
+
reasoningOutputTokens: total.reasoningOutputTokens + chat.usage.reasoningOutputTokens,
|
|
295
|
+
};
|
|
296
|
+
}, { ...EMPTY_USAGE });
|
|
297
|
+
return {
|
|
298
|
+
sessionId: builder.sessionId,
|
|
299
|
+
turnId: builder.turnId,
|
|
300
|
+
conversationId: builder.sessionId,
|
|
301
|
+
model: builder.model,
|
|
302
|
+
startTime: builder.startTime,
|
|
303
|
+
endTime: builder.endTime,
|
|
304
|
+
cwd: builder.cwd,
|
|
305
|
+
cliVersion: builder.cliVersion,
|
|
306
|
+
userMessage: builder.userMessage,
|
|
307
|
+
finalAssistantMessage: builder.finalAssistantMessage,
|
|
308
|
+
chats: builder.chats,
|
|
309
|
+
tools: builder.tools,
|
|
310
|
+
usageTotal,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
// --- Pure helpers -----------------------------------------------------------
|
|
314
|
+
function parseTimestamp(iso) {
|
|
315
|
+
const parsed = new Date(iso);
|
|
316
|
+
return Number.isNaN(parsed.getTime()) ? new Date(0) : parsed;
|
|
317
|
+
}
|
|
318
|
+
function normalizeUsage(usage) {
|
|
319
|
+
return {
|
|
320
|
+
inputTokens: usage.input_tokens ?? 0,
|
|
321
|
+
outputTokens: usage.output_tokens ?? 0,
|
|
322
|
+
cachedInputTokens: usage.cached_input_tokens ?? 0,
|
|
323
|
+
reasoningOutputTokens: usage.reasoning_output_tokens ?? 0,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
function textFromContent(content) {
|
|
327
|
+
if (!Array.isArray(content))
|
|
328
|
+
return '';
|
|
329
|
+
return joinText(content.map(part => part.text ?? ''));
|
|
330
|
+
}
|
|
331
|
+
function reasoningText(reasoning) {
|
|
332
|
+
const summary = joinText((reasoning.summary ?? []).map(part => part.text ?? ''));
|
|
333
|
+
const content = joinText((reasoning.content ?? []).map(part => part.text ?? ''));
|
|
334
|
+
return joinText([summary, content]);
|
|
335
|
+
}
|
|
336
|
+
function joinText(parts) {
|
|
337
|
+
return parts.filter(text => text && text.length > 0).join('\n');
|
|
338
|
+
}
|
|
339
|
+
function renderOutput(output) {
|
|
340
|
+
if (typeof output === 'string')
|
|
341
|
+
return output;
|
|
342
|
+
if (Array.isArray(output))
|
|
343
|
+
return textFromContent(output);
|
|
344
|
+
return safeJson(output);
|
|
345
|
+
}
|
|
346
|
+
function renderResult(result) {
|
|
347
|
+
if (typeof result === 'string')
|
|
348
|
+
return result;
|
|
349
|
+
return safeJson(result);
|
|
350
|
+
}
|
|
351
|
+
function safeJson(value) {
|
|
352
|
+
try {
|
|
353
|
+
return JSON.stringify(value);
|
|
354
|
+
}
|
|
355
|
+
catch {
|
|
356
|
+
return String(value);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/rollout/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript shapes for the subset of the Codex rollout JSONL we consume.
|
|
3
|
+
*
|
|
4
|
+
* These mirror the on-disk format — only the fields the collector reads, not the
|
|
5
|
+
* full set. Field names are the exact wire names (snake_case); any unlisted
|
|
6
|
+
* optional fields are simply ignored at runtime.
|
|
7
|
+
*/
|
|
8
|
+
/** Fields common to every rollout line; `type` discriminates `payload` below. */
|
|
9
|
+
interface RolloutLineBase {
|
|
10
|
+
timestamp: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A rollout line, discriminated by `type` so a `line.type === ...` check narrows
|
|
14
|
+
* `line.payload` to the matching shape without a cast.
|
|
15
|
+
*/
|
|
16
|
+
export type RolloutLine = (RolloutLineBase & {
|
|
17
|
+
type: 'session_meta';
|
|
18
|
+
payload: SessionMetaPayload;
|
|
19
|
+
}) | (RolloutLineBase & {
|
|
20
|
+
type: 'turn_context';
|
|
21
|
+
payload: TurnContextPayload;
|
|
22
|
+
}) | (RolloutLineBase & {
|
|
23
|
+
type: 'response_item';
|
|
24
|
+
payload: ResponseItemPayload;
|
|
25
|
+
}) | (RolloutLineBase & {
|
|
26
|
+
type: 'event_msg';
|
|
27
|
+
payload: EventMsgPayload;
|
|
28
|
+
}) | (RolloutLineBase & {
|
|
29
|
+
type: 'compacted';
|
|
30
|
+
payload: unknown;
|
|
31
|
+
});
|
|
32
|
+
export interface SessionMetaPayload {
|
|
33
|
+
id: string;
|
|
34
|
+
timestamp: string;
|
|
35
|
+
cwd: string;
|
|
36
|
+
originator: string;
|
|
37
|
+
cli_version: string;
|
|
38
|
+
source: string;
|
|
39
|
+
model_provider?: string;
|
|
40
|
+
forked_from_id?: string | null;
|
|
41
|
+
parent_thread_id?: string | null;
|
|
42
|
+
git?: {
|
|
43
|
+
commit_hash?: string;
|
|
44
|
+
branch?: string;
|
|
45
|
+
repository_url?: string;
|
|
46
|
+
} | null;
|
|
47
|
+
}
|
|
48
|
+
export interface TurnContextPayload {
|
|
49
|
+
turn_id: string;
|
|
50
|
+
cwd: string;
|
|
51
|
+
model: string;
|
|
52
|
+
effort?: string;
|
|
53
|
+
summary?: string;
|
|
54
|
+
approval_policy?: string;
|
|
55
|
+
}
|
|
56
|
+
/** Per-call delta (last_token_usage) or running total (total_token_usage). */
|
|
57
|
+
export interface TokenUsage {
|
|
58
|
+
input_tokens: number;
|
|
59
|
+
cached_input_tokens: number;
|
|
60
|
+
output_tokens: number;
|
|
61
|
+
reasoning_output_tokens: number;
|
|
62
|
+
total_tokens: number;
|
|
63
|
+
}
|
|
64
|
+
export interface TokenUsageInfo {
|
|
65
|
+
total_token_usage: TokenUsage;
|
|
66
|
+
last_token_usage: TokenUsage;
|
|
67
|
+
model_context_window?: number | null;
|
|
68
|
+
}
|
|
69
|
+
export interface TokenCountEvent {
|
|
70
|
+
type: 'token_count';
|
|
71
|
+
info?: TokenUsageInfo | null;
|
|
72
|
+
}
|
|
73
|
+
export interface TaskStartedEvent {
|
|
74
|
+
type: 'task_started';
|
|
75
|
+
turn_id: string;
|
|
76
|
+
started_at?: number | null;
|
|
77
|
+
}
|
|
78
|
+
export interface TaskCompleteEvent {
|
|
79
|
+
type: 'task_complete';
|
|
80
|
+
turn_id: string;
|
|
81
|
+
last_agent_message?: string | null;
|
|
82
|
+
completed_at?: number | null;
|
|
83
|
+
duration_ms?: number | null;
|
|
84
|
+
time_to_first_token_ms?: number | null;
|
|
85
|
+
}
|
|
86
|
+
export interface AgentMessageEvent {
|
|
87
|
+
type: 'agent_message';
|
|
88
|
+
message: string;
|
|
89
|
+
}
|
|
90
|
+
export interface AgentReasoningEvent {
|
|
91
|
+
type: 'agent_reasoning';
|
|
92
|
+
text: string;
|
|
93
|
+
}
|
|
94
|
+
export interface McpInvocation {
|
|
95
|
+
server: string;
|
|
96
|
+
tool: string;
|
|
97
|
+
arguments?: unknown;
|
|
98
|
+
}
|
|
99
|
+
export interface McpToolCallEndEvent {
|
|
100
|
+
type: 'mcp_tool_call_end';
|
|
101
|
+
call_id: string;
|
|
102
|
+
invocation: McpInvocation;
|
|
103
|
+
result?: unknown;
|
|
104
|
+
}
|
|
105
|
+
export type EventMsgPayload = TokenCountEvent | TaskStartedEvent | TaskCompleteEvent | AgentMessageEvent | AgentReasoningEvent | McpToolCallEndEvent | {
|
|
106
|
+
type: string;
|
|
107
|
+
};
|
|
108
|
+
/** Content block inside a message; we mainly read text. */
|
|
109
|
+
export interface ContentItem {
|
|
110
|
+
type: string;
|
|
111
|
+
text?: string;
|
|
112
|
+
image_url?: string;
|
|
113
|
+
}
|
|
114
|
+
export interface MessageItem {
|
|
115
|
+
type: 'message';
|
|
116
|
+
role: string;
|
|
117
|
+
content: ContentItem[];
|
|
118
|
+
phase?: string;
|
|
119
|
+
}
|
|
120
|
+
export interface ReasoningSummary {
|
|
121
|
+
type: string;
|
|
122
|
+
text: string;
|
|
123
|
+
}
|
|
124
|
+
export interface ReasoningItem {
|
|
125
|
+
type: 'reasoning';
|
|
126
|
+
summary: ReasoningSummary[];
|
|
127
|
+
content?: Array<{
|
|
128
|
+
type: string;
|
|
129
|
+
text?: string;
|
|
130
|
+
}>;
|
|
131
|
+
encrypted_content?: string | null;
|
|
132
|
+
}
|
|
133
|
+
export interface FunctionCallItem {
|
|
134
|
+
type: 'function_call';
|
|
135
|
+
name: string;
|
|
136
|
+
namespace?: string | null;
|
|
137
|
+
arguments: string;
|
|
138
|
+
call_id: string;
|
|
139
|
+
}
|
|
140
|
+
/** `output` is a plain string OR an array of content items. */
|
|
141
|
+
export type FunctionCallOutput = string | ContentItem[];
|
|
142
|
+
export interface FunctionCallOutputItem {
|
|
143
|
+
type: 'function_call_output';
|
|
144
|
+
call_id: string;
|
|
145
|
+
output: FunctionCallOutput;
|
|
146
|
+
}
|
|
147
|
+
export interface LocalShellExecAction {
|
|
148
|
+
type: 'exec';
|
|
149
|
+
command: string[];
|
|
150
|
+
timeout_ms?: number;
|
|
151
|
+
working_directory?: string;
|
|
152
|
+
}
|
|
153
|
+
export interface LocalShellCallItem {
|
|
154
|
+
type: 'local_shell_call';
|
|
155
|
+
call_id?: string | null;
|
|
156
|
+
status?: string;
|
|
157
|
+
action: LocalShellExecAction;
|
|
158
|
+
}
|
|
159
|
+
export interface WebSearchCallItem {
|
|
160
|
+
type: 'web_search_call';
|
|
161
|
+
status?: string;
|
|
162
|
+
action?: {
|
|
163
|
+
type: string;
|
|
164
|
+
query?: string;
|
|
165
|
+
url?: string;
|
|
166
|
+
pattern?: string;
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export interface CustomToolCallItem {
|
|
170
|
+
type: 'custom_tool_call';
|
|
171
|
+
call_id: string;
|
|
172
|
+
name: string;
|
|
173
|
+
input: string;
|
|
174
|
+
status?: string | null;
|
|
175
|
+
}
|
|
176
|
+
export interface CustomToolCallOutputItem {
|
|
177
|
+
type: 'custom_tool_call_output';
|
|
178
|
+
call_id: string;
|
|
179
|
+
name?: string | null;
|
|
180
|
+
output: FunctionCallOutput;
|
|
181
|
+
}
|
|
182
|
+
export type ResponseItemPayload = MessageItem | ReasoningItem | FunctionCallItem | FunctionCallOutputItem | LocalShellCallItem | WebSearchCallItem | CustomToolCallItem | CustomToolCallOutputItem | {
|
|
183
|
+
type: string;
|
|
184
|
+
};
|
|
185
|
+
/** RolloutItem outer tags: `{ "timestamp", "type": <tag>, "payload": {...} }`. */
|
|
186
|
+
export declare const ROLLOUT_ITEM: {
|
|
187
|
+
readonly SESSION_META: "session_meta";
|
|
188
|
+
readonly RESPONSE_ITEM: "response_item";
|
|
189
|
+
readonly TURN_CONTEXT: "turn_context";
|
|
190
|
+
readonly EVENT_MSG: "event_msg";
|
|
191
|
+
readonly COMPACTED: "compacted";
|
|
192
|
+
};
|
|
193
|
+
/** EventMsg subtypes. NOTE the renames: turn boundaries serialize as task_*. */
|
|
194
|
+
export declare const EVENT_MSG: {
|
|
195
|
+
readonly TASK_STARTED: "task_started";
|
|
196
|
+
readonly TASK_COMPLETE: "task_complete";
|
|
197
|
+
readonly TOKEN_COUNT: "token_count";
|
|
198
|
+
readonly AGENT_MESSAGE: "agent_message";
|
|
199
|
+
readonly AGENT_REASONING: "agent_reasoning";
|
|
200
|
+
readonly MCP_TOOL_CALL_END: "mcp_tool_call_end";
|
|
201
|
+
};
|
|
202
|
+
/** ResponseItem subtypes (each inline-tagged by `type`). */
|
|
203
|
+
export declare const RESPONSE_ITEM: {
|
|
204
|
+
readonly MESSAGE: "message";
|
|
205
|
+
readonly REASONING: "reasoning";
|
|
206
|
+
readonly FUNCTION_CALL: "function_call";
|
|
207
|
+
readonly FUNCTION_CALL_OUTPUT: "function_call_output";
|
|
208
|
+
readonly LOCAL_SHELL_CALL: "local_shell_call";
|
|
209
|
+
readonly CUSTOM_TOOL_CALL: "custom_tool_call";
|
|
210
|
+
readonly CUSTOM_TOOL_CALL_OUTPUT: "custom_tool_call_output";
|
|
211
|
+
readonly WEB_SEARCH_CALL: "web_search_call";
|
|
212
|
+
};
|
|
213
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 CoreWeave, Inc.
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// SPDX-PackageName: weave-codex
|
|
4
|
+
// --- Wire-format discriminator tags (the serde `type` values on disk) ---
|
|
5
|
+
/** RolloutItem outer tags: `{ "timestamp", "type": <tag>, "payload": {...} }`. */
|
|
6
|
+
export const ROLLOUT_ITEM = {
|
|
7
|
+
SESSION_META: 'session_meta',
|
|
8
|
+
RESPONSE_ITEM: 'response_item',
|
|
9
|
+
TURN_CONTEXT: 'turn_context',
|
|
10
|
+
EVENT_MSG: 'event_msg',
|
|
11
|
+
COMPACTED: 'compacted',
|
|
12
|
+
};
|
|
13
|
+
/** EventMsg subtypes. NOTE the renames: turn boundaries serialize as task_*. */
|
|
14
|
+
export const EVENT_MSG = {
|
|
15
|
+
TASK_STARTED: 'task_started', // == TurnStarted
|
|
16
|
+
TASK_COMPLETE: 'task_complete', // == TurnComplete; carries duration_ms
|
|
17
|
+
TOKEN_COUNT: 'token_count', // one per model call; info.last_token_usage = per-call delta
|
|
18
|
+
AGENT_MESSAGE: 'agent_message',
|
|
19
|
+
AGENT_REASONING: 'agent_reasoning',
|
|
20
|
+
MCP_TOOL_CALL_END: 'mcp_tool_call_end', // pairs to a function_call by call_id
|
|
21
|
+
};
|
|
22
|
+
/** ResponseItem subtypes (each inline-tagged by `type`). */
|
|
23
|
+
export const RESPONSE_ITEM = {
|
|
24
|
+
MESSAGE: 'message',
|
|
25
|
+
REASONING: 'reasoning',
|
|
26
|
+
FUNCTION_CALL: 'function_call',
|
|
27
|
+
FUNCTION_CALL_OUTPUT: 'function_call_output', // inline: { type, call_id, output }
|
|
28
|
+
LOCAL_SHELL_CALL: 'local_shell_call',
|
|
29
|
+
CUSTOM_TOOL_CALL: 'custom_tool_call',
|
|
30
|
+
CUSTOM_TOOL_CALL_OUTPUT: 'custom_tool_call_output',
|
|
31
|
+
WEB_SEARCH_CALL: 'web_search_call',
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/rollout/types.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,+BAA+B;AAC/B,gCAAgC;AAwNhC,2EAA2E;AAE3E,kFAAkF;AAClF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;CACd,CAAC;AAEX,gFAAgF;AAChF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,YAAY,EAAE,cAAc,EAAE,iBAAiB;IAC/C,aAAa,EAAE,eAAe,EAAE,uCAAuC;IACvE,WAAW,EAAE,aAAa,EAAE,6DAA6D;IACzF,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB,EAAE,sCAAsC;CACtE,CAAC;AAEX,4DAA4D;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,eAAe;IAC9B,oBAAoB,EAAE,sBAAsB,EAAE,oCAAoC;IAClF,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,uBAAuB,EAAE,yBAAyB;IAClD,eAAe,EAAE,iBAAiB;CAC1B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pieces the OpenTelemetry semantic-conventions package doesn't give us as a
|
|
3
|
+
* usable value. Standard attribute keys and gen_ai.* enum values are imported
|
|
4
|
+
* straight from the package where they're used (see spans/emit.ts); this file
|
|
5
|
+
* holds only what the package doesn't export:
|
|
6
|
+
* - gen_ai.tool.type values (the package exports the key, not the values)
|
|
7
|
+
* - our vendor keys (weave / wandb / codex / mcp)
|
|
8
|
+
*/
|
|
9
|
+
/** `gen_ai.tool.type` values (the spec package exports the key, not the values). */
|
|
10
|
+
export declare const TOOL_TYPE: {
|
|
11
|
+
readonly FUNCTION: "function";
|
|
12
|
+
readonly EXTENSION: "extension";
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* MCP tool-call context. Attached to the same execute_tool span (per the spec)
|
|
16
|
+
* rather than a separate MCP span. Not typed by the spec package.
|
|
17
|
+
*/
|
|
18
|
+
export declare const MCP: {
|
|
19
|
+
readonly SERVER_NAME: "mcp.server.name";
|
|
20
|
+
readonly TOOL_NAME: "mcp.tool.name";
|
|
21
|
+
};
|
|
22
|
+
/** Resource attributes — entity/project routing also goes via the project_id header. */
|
|
23
|
+
export declare const RESOURCE: {
|
|
24
|
+
readonly WANDB_ENTITY: "wandb.entity";
|
|
25
|
+
readonly WANDB_PROJECT: "wandb.project";
|
|
26
|
+
readonly SDK_LANGUAGE: "weave.sdk.language";
|
|
27
|
+
readonly SDK_VERSION: "weave.sdk.version";
|
|
28
|
+
};
|
|
29
|
+
/** Codex-specific vendor extensions (no canonical gen_ai key exists for these). */
|
|
30
|
+
export declare const CODEX: {
|
|
31
|
+
readonly SESSION_ID: "codex.session.id";
|
|
32
|
+
readonly TURN_ID: "codex.turn.id";
|
|
33
|
+
readonly CLI_VERSION: "codex.cli_version";
|
|
34
|
+
readonly CWD: "codex.cwd";
|
|
35
|
+
/** Stamped only once we wire up model price tables; UI sums tokens meanwhile. */
|
|
36
|
+
readonly COST_USD: "codex.usage.cost_usd";
|
|
37
|
+
};
|