@tracemarketplace/shared 0.0.2 → 0.0.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.
- package/dist/chunker.d.ts +8 -0
- package/dist/chunker.d.ts.map +1 -0
- package/dist/chunker.js +68 -0
- package/dist/chunker.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validators.d.ts +16 -0
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +2 -0
- package/dist/validators.js.map +1 -1
- package/package.json +1 -1
- package/src/chunker.ts +104 -0
- package/src/index.ts +1 -0
- package/src/types.ts +2 -0
- package/src/validators.ts +2 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NormalizedTrace } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Split a NormalizedTrace into chunks of at most maxOutputTokens output tokens.
|
|
4
|
+
* Always breaks at user-turn boundaries (never mid-assistant-response).
|
|
5
|
+
* If the session fits within one chunk, returns a single-element array with chunk_index=0.
|
|
6
|
+
*/
|
|
7
|
+
export declare function chunkTrace(trace: NormalizedTrace, maxOutputTokens?: number): NormalizedTrace[];
|
|
8
|
+
//# sourceMappingURL=chunker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAQ,MAAM,YAAY,CAAC;AAuDxD;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,eAAe,EACtB,eAAe,SAAoB,GAClC,eAAe,EAAE,CAwCnB"}
|
package/dist/chunker.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { computeContentHash } from "./hash.js";
|
|
2
|
+
const MAX_OUTPUT_TOKENS = 100_000;
|
|
3
|
+
function sumOutputTokens(turns) {
|
|
4
|
+
return turns.reduce((sum, t) => sum + (t.usage?.output_tokens ?? 0), 0);
|
|
5
|
+
}
|
|
6
|
+
function buildChunk(base, turns, chunkIndex, chunkStartTurn) {
|
|
7
|
+
const inputTokens = turns.reduce((s, t) => s + (t.usage?.input_tokens ?? 0), 0);
|
|
8
|
+
const outputTokens = turns.reduce((s, t) => s + (t.usage?.output_tokens ?? 0), 0);
|
|
9
|
+
const toolCallCount = turns.reduce((s, t) => s + t.content.filter((b) => b.type === "tool_use").length, 0);
|
|
10
|
+
const chunk = {
|
|
11
|
+
...base,
|
|
12
|
+
turns,
|
|
13
|
+
chunk_index: chunkIndex,
|
|
14
|
+
chunk_start_turn: chunkStartTurn,
|
|
15
|
+
turn_count: turns.length,
|
|
16
|
+
tool_call_count: toolCallCount,
|
|
17
|
+
has_tool_calls: toolCallCount > 0,
|
|
18
|
+
has_thinking_blocks: turns.some((t) => t.content.some((b) => b.type === "thinking")),
|
|
19
|
+
has_file_changes: turns.some((t) => t.content.some((b) => b.type === "tool_use" &&
|
|
20
|
+
(b.tool_name === "Edit" || b.tool_name === "Write" || b.tool_name === "MultiEdit"))),
|
|
21
|
+
has_shell_commands: turns.some((t) => t.content.some((b) => b.type === "tool_use" && b.tool_name === "Bash")),
|
|
22
|
+
total_input_tokens: inputTokens || null,
|
|
23
|
+
total_output_tokens: outputTokens || null,
|
|
24
|
+
started_at: turns.find((t) => t.timestamp)?.timestamp ?? base.started_at,
|
|
25
|
+
ended_at: [...turns].reverse().find((t) => t.timestamp)?.timestamp ?? base.ended_at,
|
|
26
|
+
};
|
|
27
|
+
// Recompute trace_id and content_hash for this chunk
|
|
28
|
+
chunk.trace_id = computeContentHash(chunk);
|
|
29
|
+
return chunk;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Split a NormalizedTrace into chunks of at most maxOutputTokens output tokens.
|
|
33
|
+
* Always breaks at user-turn boundaries (never mid-assistant-response).
|
|
34
|
+
* If the session fits within one chunk, returns a single-element array with chunk_index=0.
|
|
35
|
+
*/
|
|
36
|
+
export function chunkTrace(trace, maxOutputTokens = MAX_OUTPUT_TOKENS) {
|
|
37
|
+
const totalOutput = trace.total_output_tokens ?? sumOutputTokens(trace.turns);
|
|
38
|
+
// Fast path: fits in one chunk
|
|
39
|
+
if (totalOutput <= maxOutputTokens) {
|
|
40
|
+
return [{ ...trace, chunk_index: 0, chunk_start_turn: 0 }];
|
|
41
|
+
}
|
|
42
|
+
const chunks = [];
|
|
43
|
+
let chunkStartTurn = 0;
|
|
44
|
+
let chunkOutputTokens = 0;
|
|
45
|
+
let chunkTurns = [];
|
|
46
|
+
let chunkIndex = 0;
|
|
47
|
+
for (let i = 0; i < trace.turns.length; i++) {
|
|
48
|
+
const turn = trace.turns[i];
|
|
49
|
+
// Break at user-turn boundary once we've accumulated enough
|
|
50
|
+
if (turn.role === "user" &&
|
|
51
|
+
chunkOutputTokens >= maxOutputTokens &&
|
|
52
|
+
chunkTurns.length > 0) {
|
|
53
|
+
chunks.push(buildChunk(trace, chunkTurns, chunkIndex, chunkStartTurn));
|
|
54
|
+
chunkIndex++;
|
|
55
|
+
chunkStartTurn = i;
|
|
56
|
+
chunkOutputTokens = 0;
|
|
57
|
+
chunkTurns = [];
|
|
58
|
+
}
|
|
59
|
+
chunkTurns.push(turn);
|
|
60
|
+
chunkOutputTokens += turn.usage?.output_tokens ?? 0;
|
|
61
|
+
}
|
|
62
|
+
// Final chunk (may be < maxOutputTokens — that's fine, 2-day rule handles it)
|
|
63
|
+
if (chunkTurns.length > 0) {
|
|
64
|
+
chunks.push(buildChunk(trace, chunkTurns, chunkIndex, chunkStartTurn));
|
|
65
|
+
}
|
|
66
|
+
return chunks;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=chunker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunker.js","sourceRoot":"","sources":["../src/chunker.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from "./scoring.js";
|
|
|
4
4
|
export * from "./utils.js";
|
|
5
5
|
export * from "./validators.js";
|
|
6
6
|
export * from "./redact.js";
|
|
7
|
+
export * from "./chunker.js";
|
|
7
8
|
export { extractClaudeCode } from "./extractors/claude-code.js";
|
|
8
9
|
export { extractCodex } from "./extractors/codex.js";
|
|
9
10
|
export { extractCursor } from "./extractors/cursor.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export * from "./scoring.js";
|
|
|
4
4
|
export * from "./utils.js";
|
|
5
5
|
export * from "./validators.js";
|
|
6
6
|
export * from "./redact.js";
|
|
7
|
+
export * from "./chunker.js";
|
|
7
8
|
export { extractClaudeCode } from "./extractors/claude-code.js";
|
|
8
9
|
export { extractCodex } from "./extractors/codex.js";
|
|
9
10
|
export { extractCursor } from "./extractors/cursor.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/validators.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export declare const NormalizedTraceSchema: z.ZodObject<{
|
|
|
4
4
|
schema_version: z.ZodOptional<z.ZodString>;
|
|
5
5
|
source_tool: z.ZodEnum<["claude_code", "codex_cli", "cursor"]>;
|
|
6
6
|
source_session_id: z.ZodString;
|
|
7
|
+
chunk_index: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
chunk_start_turn: z.ZodDefault<z.ZodNumber>;
|
|
7
9
|
source_version: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
8
10
|
submitted_by: z.ZodOptional<z.ZodString>;
|
|
9
11
|
submitted_at: z.ZodOptional<z.ZodString>;
|
|
@@ -31,6 +33,8 @@ export declare const NormalizedTraceSchema: z.ZodObject<{
|
|
|
31
33
|
}, "strip", z.ZodTypeAny, {
|
|
32
34
|
source_tool: "claude_code" | "codex_cli" | "cursor";
|
|
33
35
|
source_session_id: string;
|
|
36
|
+
chunk_index: number;
|
|
37
|
+
chunk_start_turn: number;
|
|
34
38
|
trace_id?: string | undefined;
|
|
35
39
|
schema_version?: string | undefined;
|
|
36
40
|
source_version?: string | null | undefined;
|
|
@@ -62,6 +66,8 @@ export declare const NormalizedTraceSchema: z.ZodObject<{
|
|
|
62
66
|
source_session_id: string;
|
|
63
67
|
trace_id?: string | undefined;
|
|
64
68
|
schema_version?: string | undefined;
|
|
69
|
+
chunk_index?: number | undefined;
|
|
70
|
+
chunk_start_turn?: number | undefined;
|
|
65
71
|
source_version?: string | null | undefined;
|
|
66
72
|
submitted_by?: string | undefined;
|
|
67
73
|
submitted_at?: string | undefined;
|
|
@@ -94,6 +100,8 @@ export declare const BatchSubmitSchema: z.ZodObject<{
|
|
|
94
100
|
schema_version: z.ZodOptional<z.ZodString>;
|
|
95
101
|
source_tool: z.ZodEnum<["claude_code", "codex_cli", "cursor"]>;
|
|
96
102
|
source_session_id: z.ZodString;
|
|
103
|
+
chunk_index: z.ZodDefault<z.ZodNumber>;
|
|
104
|
+
chunk_start_turn: z.ZodDefault<z.ZodNumber>;
|
|
97
105
|
source_version: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
98
106
|
submitted_by: z.ZodOptional<z.ZodString>;
|
|
99
107
|
submitted_at: z.ZodOptional<z.ZodString>;
|
|
@@ -121,6 +129,8 @@ export declare const BatchSubmitSchema: z.ZodObject<{
|
|
|
121
129
|
}, "strip", z.ZodTypeAny, {
|
|
122
130
|
source_tool: "claude_code" | "codex_cli" | "cursor";
|
|
123
131
|
source_session_id: string;
|
|
132
|
+
chunk_index: number;
|
|
133
|
+
chunk_start_turn: number;
|
|
124
134
|
trace_id?: string | undefined;
|
|
125
135
|
schema_version?: string | undefined;
|
|
126
136
|
source_version?: string | null | undefined;
|
|
@@ -152,6 +162,8 @@ export declare const BatchSubmitSchema: z.ZodObject<{
|
|
|
152
162
|
source_session_id: string;
|
|
153
163
|
trace_id?: string | undefined;
|
|
154
164
|
schema_version?: string | undefined;
|
|
165
|
+
chunk_index?: number | undefined;
|
|
166
|
+
chunk_start_turn?: number | undefined;
|
|
155
167
|
source_version?: string | null | undefined;
|
|
156
168
|
submitted_by?: string | undefined;
|
|
157
169
|
submitted_at?: string | undefined;
|
|
@@ -182,6 +194,8 @@ export declare const BatchSubmitSchema: z.ZodObject<{
|
|
|
182
194
|
traces: {
|
|
183
195
|
source_tool: "claude_code" | "codex_cli" | "cursor";
|
|
184
196
|
source_session_id: string;
|
|
197
|
+
chunk_index: number;
|
|
198
|
+
chunk_start_turn: number;
|
|
185
199
|
trace_id?: string | undefined;
|
|
186
200
|
schema_version?: string | undefined;
|
|
187
201
|
source_version?: string | null | undefined;
|
|
@@ -216,6 +230,8 @@ export declare const BatchSubmitSchema: z.ZodObject<{
|
|
|
216
230
|
source_session_id: string;
|
|
217
231
|
trace_id?: string | undefined;
|
|
218
232
|
schema_version?: string | undefined;
|
|
233
|
+
chunk_index?: number | undefined;
|
|
234
|
+
chunk_start_turn?: number | undefined;
|
|
219
235
|
source_version?: string | null | undefined;
|
|
220
236
|
submitted_by?: string | undefined;
|
|
221
237
|
submitted_at?: string | undefined;
|
package/dist/validators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
package/dist/validators.js
CHANGED
|
@@ -4,6 +4,8 @@ export const NormalizedTraceSchema = z.object({
|
|
|
4
4
|
schema_version: z.string().optional(),
|
|
5
5
|
source_tool: z.enum(["claude_code", "codex_cli", "cursor"]),
|
|
6
6
|
source_session_id: z.string().min(1),
|
|
7
|
+
chunk_index: z.number().int().nonnegative().default(0),
|
|
8
|
+
chunk_start_turn: z.number().int().nonnegative().default(0),
|
|
7
9
|
source_version: z.string().nullable().optional(),
|
|
8
10
|
submitted_by: z.string().optional(),
|
|
9
11
|
submitted_at: z.string().optional(),
|
package/dist/validators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/chunker.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { NormalizedTrace, Turn } from "./types.js";
|
|
2
|
+
import { computeContentHash } from "./hash.js";
|
|
3
|
+
|
|
4
|
+
const MAX_OUTPUT_TOKENS = 100_000;
|
|
5
|
+
|
|
6
|
+
function sumOutputTokens(turns: Turn[]): number {
|
|
7
|
+
return turns.reduce((sum, t) => sum + (t.usage?.output_tokens ?? 0), 0);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function buildChunk(
|
|
11
|
+
base: NormalizedTrace,
|
|
12
|
+
turns: Turn[],
|
|
13
|
+
chunkIndex: number,
|
|
14
|
+
chunkStartTurn: number,
|
|
15
|
+
): NormalizedTrace {
|
|
16
|
+
const inputTokens = turns.reduce((s, t) => s + (t.usage?.input_tokens ?? 0), 0);
|
|
17
|
+
const outputTokens = turns.reduce((s, t) => s + (t.usage?.output_tokens ?? 0), 0);
|
|
18
|
+
const toolCallCount = turns.reduce(
|
|
19
|
+
(s, t) => s + t.content.filter((b) => b.type === "tool_use").length,
|
|
20
|
+
0,
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const chunk: NormalizedTrace = {
|
|
24
|
+
...base,
|
|
25
|
+
turns,
|
|
26
|
+
chunk_index: chunkIndex,
|
|
27
|
+
chunk_start_turn: chunkStartTurn,
|
|
28
|
+
turn_count: turns.length,
|
|
29
|
+
tool_call_count: toolCallCount,
|
|
30
|
+
has_tool_calls: toolCallCount > 0,
|
|
31
|
+
has_thinking_blocks: turns.some((t) =>
|
|
32
|
+
t.content.some((b) => b.type === "thinking"),
|
|
33
|
+
),
|
|
34
|
+
has_file_changes: turns.some((t) =>
|
|
35
|
+
t.content.some(
|
|
36
|
+
(b) =>
|
|
37
|
+
b.type === "tool_use" &&
|
|
38
|
+
(b.tool_name === "Edit" || b.tool_name === "Write" || b.tool_name === "MultiEdit"),
|
|
39
|
+
),
|
|
40
|
+
),
|
|
41
|
+
has_shell_commands: turns.some((t) =>
|
|
42
|
+
t.content.some((b) => b.type === "tool_use" && b.tool_name === "Bash"),
|
|
43
|
+
),
|
|
44
|
+
total_input_tokens: inputTokens || null,
|
|
45
|
+
total_output_tokens: outputTokens || null,
|
|
46
|
+
started_at: turns.find((t) => t.timestamp)?.timestamp ?? base.started_at,
|
|
47
|
+
ended_at: [...turns].reverse().find((t) => t.timestamp)?.timestamp ?? base.ended_at,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// Recompute trace_id and content_hash for this chunk
|
|
51
|
+
chunk.trace_id = computeContentHash(chunk);
|
|
52
|
+
|
|
53
|
+
return chunk;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Split a NormalizedTrace into chunks of at most maxOutputTokens output tokens.
|
|
58
|
+
* Always breaks at user-turn boundaries (never mid-assistant-response).
|
|
59
|
+
* If the session fits within one chunk, returns a single-element array with chunk_index=0.
|
|
60
|
+
*/
|
|
61
|
+
export function chunkTrace(
|
|
62
|
+
trace: NormalizedTrace,
|
|
63
|
+
maxOutputTokens = MAX_OUTPUT_TOKENS,
|
|
64
|
+
): NormalizedTrace[] {
|
|
65
|
+
const totalOutput = trace.total_output_tokens ?? sumOutputTokens(trace.turns);
|
|
66
|
+
|
|
67
|
+
// Fast path: fits in one chunk
|
|
68
|
+
if (totalOutput <= maxOutputTokens) {
|
|
69
|
+
return [{ ...trace, chunk_index: 0, chunk_start_turn: 0 }];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const chunks: NormalizedTrace[] = [];
|
|
73
|
+
let chunkStartTurn = 0;
|
|
74
|
+
let chunkOutputTokens = 0;
|
|
75
|
+
let chunkTurns: Turn[] = [];
|
|
76
|
+
let chunkIndex = 0;
|
|
77
|
+
|
|
78
|
+
for (let i = 0; i < trace.turns.length; i++) {
|
|
79
|
+
const turn = trace.turns[i];
|
|
80
|
+
|
|
81
|
+
// Break at user-turn boundary once we've accumulated enough
|
|
82
|
+
if (
|
|
83
|
+
turn.role === "user" &&
|
|
84
|
+
chunkOutputTokens >= maxOutputTokens &&
|
|
85
|
+
chunkTurns.length > 0
|
|
86
|
+
) {
|
|
87
|
+
chunks.push(buildChunk(trace, chunkTurns, chunkIndex, chunkStartTurn));
|
|
88
|
+
chunkIndex++;
|
|
89
|
+
chunkStartTurn = i;
|
|
90
|
+
chunkOutputTokens = 0;
|
|
91
|
+
chunkTurns = [];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
chunkTurns.push(turn);
|
|
95
|
+
chunkOutputTokens += turn.usage?.output_tokens ?? 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Final chunk (may be < maxOutputTokens — that's fine, 2-day rule handles it)
|
|
99
|
+
if (chunkTurns.length > 0) {
|
|
100
|
+
chunks.push(buildChunk(trace, chunkTurns, chunkIndex, chunkStartTurn));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return chunks;
|
|
104
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from "./scoring.js";
|
|
|
4
4
|
export * from "./utils.js";
|
|
5
5
|
export * from "./validators.js";
|
|
6
6
|
export * from "./redact.js";
|
|
7
|
+
export * from "./chunker.js";
|
|
7
8
|
export { extractClaudeCode } from "./extractors/claude-code.js";
|
|
8
9
|
export { extractCodex } from "./extractors/codex.js";
|
|
9
10
|
export { extractCursor } from "./extractors/cursor.js";
|
package/src/types.ts
CHANGED
|
@@ -69,6 +69,8 @@ export interface NormalizedTrace {
|
|
|
69
69
|
schema_version: string;
|
|
70
70
|
source_tool: SourceTool;
|
|
71
71
|
source_session_id: string;
|
|
72
|
+
chunk_index?: number; // 0-based chunk within the session (set by chunkTrace, default 0)
|
|
73
|
+
chunk_start_turn?: number; // turn offset in the original session (set by chunkTrace, default 0)
|
|
72
74
|
source_version: string | null;
|
|
73
75
|
submitted_by: string;
|
|
74
76
|
submitted_at: string;
|
package/src/validators.ts
CHANGED
|
@@ -5,6 +5,8 @@ export const NormalizedTraceSchema = z.object({
|
|
|
5
5
|
schema_version: z.string().optional(),
|
|
6
6
|
source_tool: z.enum(["claude_code", "codex_cli", "cursor"]),
|
|
7
7
|
source_session_id: z.string().min(1),
|
|
8
|
+
chunk_index: z.number().int().nonnegative().default(0),
|
|
9
|
+
chunk_start_turn: z.number().int().nonnegative().default(0),
|
|
8
10
|
source_version: z.string().nullable().optional(),
|
|
9
11
|
submitted_by: z.string().optional(),
|
|
10
12
|
submitted_at: z.string().optional(),
|