takotrace 0.0.1
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/DEVELOPMENT.md +37 -0
- package/PRODUCT.md +33 -0
- package/README.md +69 -0
- package/README.zh-CN.md +69 -0
- package/TECHNICAL_DESIGN.md +46 -0
- package/assets/star-takotrace.gif +0 -0
- package/assets/takotrace-logo.png +0 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.js +152 -0
- package/dist/cli.js.map +1 -0
- package/dist/server/claude-client.d.ts +63 -0
- package/dist/server/claude-client.js +512 -0
- package/dist/server/claude-client.js.map +1 -0
- package/dist/server/codex-client.d.ts +57 -0
- package/dist/server/codex-client.js +414 -0
- package/dist/server/codex-client.js.map +1 -0
- package/dist/server/codex-command.d.ts +15 -0
- package/dist/server/codex-command.js +131 -0
- package/dist/server/codex-command.js.map +1 -0
- package/dist/server/http-server.d.ts +39 -0
- package/dist/server/http-server.js +429 -0
- package/dist/server/http-server.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +4 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/multi-provider.d.ts +30 -0
- package/dist/server/multi-provider.js +178 -0
- package/dist/server/multi-provider.js.map +1 -0
- package/dist/server/native-path-opener.d.ts +7 -0
- package/dist/server/native-path-opener.js +45 -0
- package/dist/server/native-path-opener.js.map +1 -0
- package/dist/server/provider.d.ts +27 -0
- package/dist/server/provider.js +2 -0
- package/dist/server/provider.js.map +1 -0
- package/dist/server/rollout-reader.d.ts +9 -0
- package/dist/server/rollout-reader.js +333 -0
- package/dist/server/rollout-reader.js.map +1 -0
- package/dist/server/subagent-assignment.d.ts +9 -0
- package/dist/server/subagent-assignment.js +146 -0
- package/dist/server/subagent-assignment.js.map +1 -0
- package/dist/shared/jsonl.d.ts +6 -0
- package/dist/shared/jsonl.js +23 -0
- package/dist/shared/jsonl.js.map +1 -0
- package/dist/shared/store.d.ts +35 -0
- package/dist/shared/store.js +351 -0
- package/dist/shared/store.js.map +1 -0
- package/dist/shared/trace.d.ts +7 -0
- package/dist/shared/trace.js +256 -0
- package/dist/shared/trace.js.map +1 -0
- package/dist/shared/types.d.ts +144 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/web/assets/SequenceDiagram-D2zGAyJN.js +8 -0
- package/dist/web/assets/favicon-16-DQXCs6B9.png +0 -0
- package/dist/web/assets/favicon-32-By9ik0BF.png +0 -0
- package/dist/web/assets/index-D6VA1lK-.css +1 -0
- package/dist/web/assets/index-vnUrUuB8.js +84 -0
- package/dist/web/assets/takotrace-logo-DtWm9Bax.png +0 -0
- package/dist/web/index.html +29 -0
- package/package.json +57 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface SubagentAssignment {
|
|
2
|
+
availability: 'available' | 'encrypted' | 'not-recorded';
|
|
3
|
+
text?: string;
|
|
4
|
+
source?: 'parent-prompt' | 'child-user-message' | 'parent-rollout';
|
|
5
|
+
taskName?: string;
|
|
6
|
+
agentType?: string;
|
|
7
|
+
forkTurns?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function resolveSubagentAssignment(childThreadId: string, childThread: unknown, parentThread?: unknown): SubagentAssignment;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
export function resolveSubagentAssignment(childThreadId, childThread, parentThread) {
|
|
2
|
+
const parentItems = threadItems(parentThread);
|
|
3
|
+
const childItems = threadItems(childThread);
|
|
4
|
+
const matchingActivity = parentItems.find((item) => isMatchingActivity(item, childThreadId));
|
|
5
|
+
const argumentsValue = parsedArguments(matchingActivity?.arguments);
|
|
6
|
+
const metadata = assignmentMetadata(argumentsValue);
|
|
7
|
+
let encrypted = false;
|
|
8
|
+
for (const item of parentItems) {
|
|
9
|
+
if (!isMatchingPrompt(item, childThreadId))
|
|
10
|
+
continue;
|
|
11
|
+
const prompt = contentValue(item.prompt);
|
|
12
|
+
if (prompt.text) {
|
|
13
|
+
return { availability: 'available', text: prompt.text, source: 'parent-prompt', ...metadata };
|
|
14
|
+
}
|
|
15
|
+
encrypted ||= prompt.encrypted;
|
|
16
|
+
}
|
|
17
|
+
for (const item of [...childItems].reverse()) {
|
|
18
|
+
if (normalizedType(item.type) !== 'usermessage')
|
|
19
|
+
continue;
|
|
20
|
+
const message = messageText(item);
|
|
21
|
+
if (message.text) {
|
|
22
|
+
return { availability: 'available', text: message.text, source: 'child-user-message', ...metadata };
|
|
23
|
+
}
|
|
24
|
+
encrypted ||= message.encrypted;
|
|
25
|
+
}
|
|
26
|
+
if (matchingActivity) {
|
|
27
|
+
const assignedMessage = contentValue(argumentsValue.message);
|
|
28
|
+
const message = assignedMessage.text || assignedMessage.encrypted
|
|
29
|
+
? assignedMessage
|
|
30
|
+
: messageText(argumentsValue);
|
|
31
|
+
if (message.text) {
|
|
32
|
+
return { availability: 'available', text: message.text, source: 'parent-rollout', ...metadata };
|
|
33
|
+
}
|
|
34
|
+
encrypted ||= message.encrypted;
|
|
35
|
+
}
|
|
36
|
+
return { availability: encrypted ? 'encrypted' : 'not-recorded', ...metadata };
|
|
37
|
+
}
|
|
38
|
+
function threadItems(threadValue) {
|
|
39
|
+
const thread = record(threadValue);
|
|
40
|
+
const turns = Array.isArray(thread.turns) ? thread.turns : [];
|
|
41
|
+
return turns.flatMap((turnValue) => {
|
|
42
|
+
const items = record(turnValue).items;
|
|
43
|
+
return Array.isArray(items) ? items.map(itemRecord) : [];
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function itemRecord(value) {
|
|
47
|
+
const item = record(value);
|
|
48
|
+
const notificationItem = record(record(record(item.raw).params).item);
|
|
49
|
+
return Object.keys(notificationItem).length ? { ...notificationItem, ...item } : item;
|
|
50
|
+
}
|
|
51
|
+
function isMatchingPrompt(item, childThreadId) {
|
|
52
|
+
if (normalizedType(item.type) !== 'collabagenttoolcall')
|
|
53
|
+
return false;
|
|
54
|
+
const tool = normalizedType(item.tool);
|
|
55
|
+
if (tool && tool !== 'spawnagent')
|
|
56
|
+
return false;
|
|
57
|
+
const receivers = item.receiverThreadIds ?? item.receiver_thread_ids;
|
|
58
|
+
return Array.isArray(receivers) && receivers.includes(childThreadId);
|
|
59
|
+
}
|
|
60
|
+
function isMatchingActivity(item, childThreadId) {
|
|
61
|
+
if (normalizedType(item.type) !== 'subagentactivity')
|
|
62
|
+
return false;
|
|
63
|
+
return stringValue(item.agentThreadId ?? item.agent_thread_id) === childThreadId;
|
|
64
|
+
}
|
|
65
|
+
function parsedArguments(value) {
|
|
66
|
+
if (typeof value !== 'string')
|
|
67
|
+
return record(value);
|
|
68
|
+
try {
|
|
69
|
+
return record(JSON.parse(value));
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return {};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function assignmentMetadata(argumentsValue) {
|
|
76
|
+
const taskName = safeMetadata(argumentsValue.task_name ?? argumentsValue.taskName);
|
|
77
|
+
const agentType = safeMetadata(argumentsValue.agent_type ?? argumentsValue.agentType);
|
|
78
|
+
const forkTurns = safeMetadata(argumentsValue.fork_turns ?? argumentsValue.forkTurns);
|
|
79
|
+
return {
|
|
80
|
+
...(taskName ? { taskName } : {}),
|
|
81
|
+
...(agentType ? { agentType } : {}),
|
|
82
|
+
...(forkTurns ? { forkTurns } : {}),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function safeMetadata(value) {
|
|
86
|
+
const text = stringValue(value)?.trim();
|
|
87
|
+
return text && !isCiphertext(text) ? text : undefined;
|
|
88
|
+
}
|
|
89
|
+
function messageText(value) {
|
|
90
|
+
const message = record(value);
|
|
91
|
+
if (normalizedType(message.type) === 'encryptedcontent')
|
|
92
|
+
return { encrypted: true };
|
|
93
|
+
const direct = plaintext(message.text);
|
|
94
|
+
if (direct.text)
|
|
95
|
+
return direct;
|
|
96
|
+
let encrypted = direct.encrypted || hasEncryptedContent(message);
|
|
97
|
+
const content = Array.isArray(message.content) ? message.content : [];
|
|
98
|
+
const texts = [];
|
|
99
|
+
for (const entryValue of content) {
|
|
100
|
+
const entry = record(entryValue);
|
|
101
|
+
const type = normalizedType(entry.type);
|
|
102
|
+
if (type === 'encryptedcontent') {
|
|
103
|
+
encrypted = true;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (type !== 'text' && type !== 'inputtext')
|
|
107
|
+
continue;
|
|
108
|
+
const candidate = plaintext(entry.text);
|
|
109
|
+
if (candidate.text)
|
|
110
|
+
texts.push(candidate.text);
|
|
111
|
+
encrypted ||= candidate.encrypted;
|
|
112
|
+
}
|
|
113
|
+
return texts.length ? { text: texts.join('\n'), encrypted } : { encrypted };
|
|
114
|
+
}
|
|
115
|
+
function contentValue(value) {
|
|
116
|
+
if (typeof value === 'string')
|
|
117
|
+
return plaintext(value);
|
|
118
|
+
if (Array.isArray(value))
|
|
119
|
+
return messageText({ content: value });
|
|
120
|
+
return messageText(value);
|
|
121
|
+
}
|
|
122
|
+
function plaintext(value) {
|
|
123
|
+
const text = stringValue(value)?.trim();
|
|
124
|
+
if (!text)
|
|
125
|
+
return { encrypted: false };
|
|
126
|
+
return isCiphertext(text) ? { encrypted: true } : { text, encrypted: false };
|
|
127
|
+
}
|
|
128
|
+
function hasEncryptedContent(value) {
|
|
129
|
+
if (value.encrypted_content !== undefined || value.encryptedContent !== undefined)
|
|
130
|
+
return true;
|
|
131
|
+
return Array.isArray(value.content)
|
|
132
|
+
&& value.content.some((entry) => normalizedType(record(entry).type) === 'encryptedcontent');
|
|
133
|
+
}
|
|
134
|
+
function isCiphertext(value) {
|
|
135
|
+
return /^gAAAA[A-Za-z0-9_-]+={0,2}$/.test(value);
|
|
136
|
+
}
|
|
137
|
+
function normalizedType(value) {
|
|
138
|
+
return typeof value === 'string' ? value.toLowerCase().replaceAll(/[^a-z]/g, '') : '';
|
|
139
|
+
}
|
|
140
|
+
function stringValue(value) {
|
|
141
|
+
return typeof value === 'string' && value ? value : undefined;
|
|
142
|
+
}
|
|
143
|
+
function record(value) {
|
|
144
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=subagent-assignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-assignment.js","sourceRoot":"","sources":["../../src/server/subagent-assignment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class JsonlParser {
|
|
2
|
+
buffer = '';
|
|
3
|
+
push(chunk) {
|
|
4
|
+
this.buffer += chunk.toString();
|
|
5
|
+
const lines = this.buffer.split('\n');
|
|
6
|
+
this.buffer = lines.pop() ?? '';
|
|
7
|
+
return lines.flatMap((line) => this.parseLine(line));
|
|
8
|
+
}
|
|
9
|
+
end() {
|
|
10
|
+
if (!this.buffer.trim()) {
|
|
11
|
+
this.buffer = '';
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
const line = this.buffer;
|
|
15
|
+
this.buffer = '';
|
|
16
|
+
return this.parseLine(line);
|
|
17
|
+
}
|
|
18
|
+
parseLine(line) {
|
|
19
|
+
const value = line.trim();
|
|
20
|
+
return value ? [JSON.parse(value)] : [];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=jsonl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../src/shared/jsonl.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IACd,MAAM,GAAG,EAAE,CAAC;IAEpB,IAAI,CAAC,KAAsB;QACzB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,GAAG;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { AppState, CompactAppState, ConnectionStatus, HistoricalThread, ProviderId, ProviderSelection, TraceEvent, TurnState } from './types.js';
|
|
2
|
+
export interface StoreLimits {
|
|
3
|
+
events: number;
|
|
4
|
+
turnsPerThread: number;
|
|
5
|
+
itemsPerTurn: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class TraceStore {
|
|
8
|
+
private readonly emitter;
|
|
9
|
+
private readonly limits;
|
|
10
|
+
private readonly state;
|
|
11
|
+
private readonly liveThreadIds;
|
|
12
|
+
private readonly currentModelByThread;
|
|
13
|
+
private readonly historicalThreadIdsByProvider;
|
|
14
|
+
private nextSeq;
|
|
15
|
+
constructor(limits?: Partial<StoreLimits>);
|
|
16
|
+
snapshot(): AppState;
|
|
17
|
+
publicSnapshot(): CompactAppState;
|
|
18
|
+
getTurn(threadId: string, turnId: string): TurnState | undefined;
|
|
19
|
+
setConnection(status: ConnectionStatus, details?: {
|
|
20
|
+
provider?: ProviderSelection;
|
|
21
|
+
userAgent?: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
}): void;
|
|
24
|
+
add(input: Omit<TraceEvent, 'seq' | 'at'> & Partial<Pick<TraceEvent, 'at'>>): TraceEvent;
|
|
25
|
+
subscribe(listener: (event: TraceEvent) => void): () => void;
|
|
26
|
+
subscribeState(listener: () => void): () => void;
|
|
27
|
+
synchronizeThreads(values: unknown[], replace?: boolean, provider?: ProviderId): void;
|
|
28
|
+
private reduce;
|
|
29
|
+
private mergeHistoryThread;
|
|
30
|
+
private findEvent;
|
|
31
|
+
private getOrCreateThread;
|
|
32
|
+
private getOrCreateTurn;
|
|
33
|
+
}
|
|
34
|
+
export declare function sanitizeRaw(value: unknown, seen?: WeakSet<object>): unknown;
|
|
35
|
+
export declare function publicHistoricalThread(thread: HistoricalThread): HistoricalThread;
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { addTokenUsage, threadToHistory, tokenUsageDelta } from './trace.js';
|
|
3
|
+
const DEFAULT_LIMITS = {
|
|
4
|
+
events: 2_000,
|
|
5
|
+
turnsPerThread: 100,
|
|
6
|
+
itemsPerTurn: 500,
|
|
7
|
+
};
|
|
8
|
+
export class TraceStore {
|
|
9
|
+
emitter = new EventEmitter();
|
|
10
|
+
limits;
|
|
11
|
+
state = { connection: { status: 'connecting' }, threads: [], events: [] };
|
|
12
|
+
liveThreadIds = new Set();
|
|
13
|
+
currentModelByThread = new Map();
|
|
14
|
+
historicalThreadIdsByProvider = new Map();
|
|
15
|
+
nextSeq = 1;
|
|
16
|
+
constructor(limits = {}) {
|
|
17
|
+
this.limits = { ...DEFAULT_LIMITS, ...limits };
|
|
18
|
+
}
|
|
19
|
+
snapshot() {
|
|
20
|
+
return structuredClone(this.state);
|
|
21
|
+
}
|
|
22
|
+
publicSnapshot() {
|
|
23
|
+
return {
|
|
24
|
+
connection: { ...this.state.connection },
|
|
25
|
+
events: [],
|
|
26
|
+
threads: this.state.threads.map((thread) => ({
|
|
27
|
+
id: thread.id,
|
|
28
|
+
title: thread.title,
|
|
29
|
+
status: thread.status,
|
|
30
|
+
turnsLoaded: thread.turnsLoaded,
|
|
31
|
+
historySource: thread.historySource,
|
|
32
|
+
provider: thread.provider,
|
|
33
|
+
createdAt: thread.createdAt,
|
|
34
|
+
updatedAt: thread.updatedAt,
|
|
35
|
+
cwd: thread.cwd,
|
|
36
|
+
projectFolder: thread.projectFolder,
|
|
37
|
+
tokenUsage: thread.tokenUsage,
|
|
38
|
+
turns: thread.turns.map((turn) => ({
|
|
39
|
+
id: turn.id,
|
|
40
|
+
status: turn.status,
|
|
41
|
+
startedAt: turn.startedAt,
|
|
42
|
+
completedAt: turn.completedAt,
|
|
43
|
+
durationMs: turn.durationMs,
|
|
44
|
+
model: turn.model,
|
|
45
|
+
tokenUsage: turn.tokenUsage,
|
|
46
|
+
summary: compactTurnSummary(turn),
|
|
47
|
+
itemCount: turn.items.length,
|
|
48
|
+
items: [],
|
|
49
|
+
})),
|
|
50
|
+
})),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
getTurn(threadId, turnId) {
|
|
54
|
+
const turn = this.state.threads.find((thread) => thread.id === threadId)
|
|
55
|
+
?.turns.find((entry) => entry.id === turnId);
|
|
56
|
+
if (!turn)
|
|
57
|
+
return undefined;
|
|
58
|
+
return {
|
|
59
|
+
id: turn.id,
|
|
60
|
+
status: turn.status,
|
|
61
|
+
startedAt: turn.startedAt,
|
|
62
|
+
completedAt: turn.completedAt,
|
|
63
|
+
durationMs: turn.durationMs,
|
|
64
|
+
model: turn.model,
|
|
65
|
+
tokenUsage: turn.tokenUsage,
|
|
66
|
+
items: turn.items.map((item) => ({ ...item, raw: sanitizeRaw(item.raw) })),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
setConnection(status, details = {}) {
|
|
70
|
+
this.state.connection = { status, ...details };
|
|
71
|
+
this.emitter.emit('state');
|
|
72
|
+
}
|
|
73
|
+
add(input) {
|
|
74
|
+
const event = { ...input, seq: this.nextSeq++, at: input.at ?? new Date().toISOString() };
|
|
75
|
+
if (event.threadId)
|
|
76
|
+
this.liveThreadIds.add(event.threadId);
|
|
77
|
+
const duplicate = this.findEvent(event);
|
|
78
|
+
if (duplicate) {
|
|
79
|
+
Object.assign(duplicate, event, { seq: duplicate.seq });
|
|
80
|
+
this.reduce(duplicate);
|
|
81
|
+
this.emitter.emit('event', duplicate);
|
|
82
|
+
return duplicate;
|
|
83
|
+
}
|
|
84
|
+
this.state.events.push(event);
|
|
85
|
+
trimStart(this.state.events, this.limits.events);
|
|
86
|
+
this.reduce(event);
|
|
87
|
+
this.emitter.emit('event', event);
|
|
88
|
+
return event;
|
|
89
|
+
}
|
|
90
|
+
subscribe(listener) {
|
|
91
|
+
this.emitter.on('event', listener);
|
|
92
|
+
return () => this.emitter.off('event', listener);
|
|
93
|
+
}
|
|
94
|
+
subscribeState(listener) {
|
|
95
|
+
this.emitter.on('state', listener);
|
|
96
|
+
return () => this.emitter.off('state', listener);
|
|
97
|
+
}
|
|
98
|
+
synchronizeThreads(values, replace = true, provider) {
|
|
99
|
+
const histories = values.flatMap((value) => {
|
|
100
|
+
const thread = threadToHistory(value);
|
|
101
|
+
return thread ? [thread] : [];
|
|
102
|
+
});
|
|
103
|
+
const scope = provider ?? singleHistoryProvider(histories) ?? 'unknown';
|
|
104
|
+
const nextHistoricalIds = new Set(histories.map((thread) => thread.id));
|
|
105
|
+
for (const thread of histories)
|
|
106
|
+
this.mergeHistoryThread(thread);
|
|
107
|
+
if (replace) {
|
|
108
|
+
const previousHistoricalIds = this.historicalThreadIdsByProvider.get(scope) ?? new Set();
|
|
109
|
+
this.state.threads = this.state.threads.filter((thread) => !previousHistoricalIds.has(thread.id) || nextHistoricalIds.has(thread.id) || this.liveThreadIds.has(thread.id));
|
|
110
|
+
this.historicalThreadIdsByProvider.set(scope, nextHistoricalIds);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
const known = this.historicalThreadIdsByProvider.get(scope) ?? new Set();
|
|
114
|
+
for (const id of nextHistoricalIds)
|
|
115
|
+
known.add(id);
|
|
116
|
+
this.historicalThreadIdsByProvider.set(scope, known);
|
|
117
|
+
}
|
|
118
|
+
this.state.threads.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
|
|
119
|
+
this.emitter.emit('state');
|
|
120
|
+
}
|
|
121
|
+
reduce(event) {
|
|
122
|
+
if (!event.threadId)
|
|
123
|
+
return;
|
|
124
|
+
const thread = this.getOrCreateThread(event);
|
|
125
|
+
if (event.model)
|
|
126
|
+
this.currentModelByThread.set(event.threadId, event.model);
|
|
127
|
+
thread.updatedAt = event.at;
|
|
128
|
+
if (event.method === 'thread/started')
|
|
129
|
+
thread.status = 'running';
|
|
130
|
+
if (event.method === 'thread/closed')
|
|
131
|
+
thread.status = 'completed';
|
|
132
|
+
const previousTotal = thread.tokenUsage?.total;
|
|
133
|
+
if (event.tokenUsage)
|
|
134
|
+
thread.tokenUsage = event.tokenUsage;
|
|
135
|
+
if (!event.turnId)
|
|
136
|
+
return;
|
|
137
|
+
const turn = this.getOrCreateTurn(thread, event);
|
|
138
|
+
turn.model = event.model ?? turn.model ?? this.currentModelByThread.get(event.threadId);
|
|
139
|
+
if (event.tokenUsage) {
|
|
140
|
+
turn.tokenUsage = addTokenUsage(turn.tokenUsage, tokenUsageDelta(event.tokenUsage.total, previousTotal, event.tokenUsage.last));
|
|
141
|
+
}
|
|
142
|
+
if (event.method === 'turn/started') {
|
|
143
|
+
turn.status = 'running';
|
|
144
|
+
turn.startedAt ??= event.at;
|
|
145
|
+
if (event.durationMs !== undefined)
|
|
146
|
+
turn.durationMs = event.durationMs;
|
|
147
|
+
thread.status = 'running';
|
|
148
|
+
}
|
|
149
|
+
else if (event.method === 'turn/completed') {
|
|
150
|
+
turn.status = event.status;
|
|
151
|
+
turn.completedAt = event.at;
|
|
152
|
+
turn.durationMs = event.durationMs ?? elapsedMs(turn.startedAt, turn.completedAt) ?? turn.durationMs;
|
|
153
|
+
thread.status = event.status;
|
|
154
|
+
}
|
|
155
|
+
if (event.itemId) {
|
|
156
|
+
const existing = turn.items.find((item) => item.seq === event.seq || eventKey(item) === eventKey(event));
|
|
157
|
+
if (existing)
|
|
158
|
+
Object.assign(existing, event, { seq: existing.seq });
|
|
159
|
+
else
|
|
160
|
+
turn.items.push(event);
|
|
161
|
+
trimStart(turn.items, this.limits.itemsPerTurn);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
mergeHistoryThread(history) {
|
|
165
|
+
let thread = this.state.threads.find((entry) => entry.id === history.id);
|
|
166
|
+
if (!thread) {
|
|
167
|
+
thread = { ...history, turns: [] };
|
|
168
|
+
this.state.threads.push(thread);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
thread.title = history.title;
|
|
172
|
+
thread.createdAt = history.createdAt;
|
|
173
|
+
thread.turnsLoaded ||= history.turnsLoaded;
|
|
174
|
+
thread.historySource = history.historySource ?? thread.historySource;
|
|
175
|
+
thread.provider = history.provider ?? thread.provider;
|
|
176
|
+
thread.cwd = history.cwd ?? thread.cwd;
|
|
177
|
+
thread.projectFolder = history.projectFolder ?? thread.projectFolder;
|
|
178
|
+
if (!thread.tokenUsage || (history.tokenUsage?.total.totalTokens ?? -1) >= thread.tokenUsage.total.totalTokens) {
|
|
179
|
+
thread.tokenUsage = history.tokenUsage ?? thread.tokenUsage;
|
|
180
|
+
}
|
|
181
|
+
if (history.updatedAt >= thread.updatedAt && !this.liveThreadIds.has(history.id)) {
|
|
182
|
+
thread.status = history.status;
|
|
183
|
+
thread.updatedAt = history.updatedAt;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
for (const historicalTurn of history.turns) {
|
|
187
|
+
let turn = thread.turns.find((entry) => entry.id === historicalTurn.id);
|
|
188
|
+
if (!turn) {
|
|
189
|
+
turn = { ...historicalTurn, items: [] };
|
|
190
|
+
thread.turns.push(turn);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
turn.status = historicalTurn.status;
|
|
194
|
+
turn.startedAt = historicalTurn.startedAt ?? turn.startedAt;
|
|
195
|
+
turn.completedAt = historicalTurn.completedAt ?? turn.completedAt;
|
|
196
|
+
turn.durationMs = historicalTurn.durationMs ?? turn.durationMs;
|
|
197
|
+
turn.model = historicalTurn.model ?? turn.model;
|
|
198
|
+
if (!turn.tokenUsage || (historicalTurn.tokenUsage?.totalTokens ?? -1) >= turn.tokenUsage.totalTokens) {
|
|
199
|
+
turn.tokenUsage = historicalTurn.tokenUsage ?? turn.tokenUsage;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
for (const input of historicalTurn.items) {
|
|
203
|
+
const key = eventKey(input);
|
|
204
|
+
const existing = turn.items.find((item) => eventKey(item) === key) ?? this.findEvent(input);
|
|
205
|
+
if (existing) {
|
|
206
|
+
Object.assign(existing, input, { seq: existing.seq });
|
|
207
|
+
if (!turn.items.some((item) => item.seq === existing.seq))
|
|
208
|
+
turn.items.push(existing);
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const event = { ...input, seq: this.nextSeq++ };
|
|
212
|
+
this.state.events.push(event);
|
|
213
|
+
turn.items.push(event);
|
|
214
|
+
}
|
|
215
|
+
normalizeTurnItems(turn.items);
|
|
216
|
+
trimStart(turn.items, this.limits.itemsPerTurn);
|
|
217
|
+
}
|
|
218
|
+
trimStart(thread.turns, this.limits.turnsPerThread);
|
|
219
|
+
const latestModel = [...thread.turns].reverse().find((turn) => turn.model)?.model;
|
|
220
|
+
if (latestModel)
|
|
221
|
+
this.currentModelByThread.set(thread.id, latestModel);
|
|
222
|
+
trimStart(this.state.events, this.limits.events);
|
|
223
|
+
}
|
|
224
|
+
findEvent(event) {
|
|
225
|
+
if (!event.itemId)
|
|
226
|
+
return undefined;
|
|
227
|
+
const key = eventKey(event);
|
|
228
|
+
return this.state.events.find((candidate) => eventKey(candidate) === key);
|
|
229
|
+
}
|
|
230
|
+
getOrCreateThread(event) {
|
|
231
|
+
let thread = this.state.threads.find((entry) => entry.id === event.threadId);
|
|
232
|
+
if (!thread) {
|
|
233
|
+
thread = {
|
|
234
|
+
id: event.threadId,
|
|
235
|
+
title: event.summary || `Session ${event.threadId.slice(0, 8)}`,
|
|
236
|
+
status: event.status,
|
|
237
|
+
turnsLoaded: true,
|
|
238
|
+
provider: event.provider,
|
|
239
|
+
createdAt: event.at,
|
|
240
|
+
updatedAt: event.at,
|
|
241
|
+
turns: [],
|
|
242
|
+
};
|
|
243
|
+
this.state.threads.push(thread);
|
|
244
|
+
}
|
|
245
|
+
return thread;
|
|
246
|
+
}
|
|
247
|
+
getOrCreateTurn(thread, event) {
|
|
248
|
+
let turn = thread.turns.find((entry) => entry.id === event.turnId);
|
|
249
|
+
if (!turn) {
|
|
250
|
+
turn = {
|
|
251
|
+
id: event.turnId,
|
|
252
|
+
status: event.status,
|
|
253
|
+
startedAt: event.at,
|
|
254
|
+
model: event.model ?? this.currentModelByThread.get(event.threadId),
|
|
255
|
+
items: [],
|
|
256
|
+
};
|
|
257
|
+
thread.turns.push(turn);
|
|
258
|
+
trimStart(thread.turns, this.limits.turnsPerThread);
|
|
259
|
+
}
|
|
260
|
+
return turn;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function eventKey(event) {
|
|
264
|
+
return `${event.method}\0${event.threadId}\0${event.turnId ?? ''}\0${event.itemId ?? ''}`;
|
|
265
|
+
}
|
|
266
|
+
function singleHistoryProvider(threads) {
|
|
267
|
+
const providers = new Set(threads.map((thread) => thread.provider).filter((value) => value !== undefined));
|
|
268
|
+
return providers.size === 1 ? providers.values().next().value : undefined;
|
|
269
|
+
}
|
|
270
|
+
function eventOrderTime(event) {
|
|
271
|
+
for (const value of [event.startedAt, event.at, event.completedAt]) {
|
|
272
|
+
if (!value)
|
|
273
|
+
continue;
|
|
274
|
+
const parsed = Date.parse(value);
|
|
275
|
+
if (Number.isFinite(parsed))
|
|
276
|
+
return parsed;
|
|
277
|
+
}
|
|
278
|
+
return undefined;
|
|
279
|
+
}
|
|
280
|
+
function normalizeTurnItems(items) {
|
|
281
|
+
const unique = new Map();
|
|
282
|
+
for (const item of items) {
|
|
283
|
+
const key = eventKey(item);
|
|
284
|
+
const previous = unique.get(key);
|
|
285
|
+
if (previous)
|
|
286
|
+
Object.assign(previous, item, { seq: Math.min(previous.seq, item.seq) });
|
|
287
|
+
else
|
|
288
|
+
unique.set(key, item);
|
|
289
|
+
}
|
|
290
|
+
items.splice(0, items.length, ...unique.values());
|
|
291
|
+
items.sort((left, right) => {
|
|
292
|
+
const leftAt = eventOrderTime(left);
|
|
293
|
+
const rightAt = eventOrderTime(right);
|
|
294
|
+
return leftAt !== undefined && rightAt !== undefined && leftAt !== rightAt
|
|
295
|
+
? leftAt - rightAt
|
|
296
|
+
: left.seq - right.seq;
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
function trimStart(values, limit) {
|
|
300
|
+
if (values.length > limit)
|
|
301
|
+
values.splice(0, values.length - limit);
|
|
302
|
+
}
|
|
303
|
+
function elapsedMs(startedAt, completedAt) {
|
|
304
|
+
if (!startedAt || !completedAt)
|
|
305
|
+
return undefined;
|
|
306
|
+
const duration = Date.parse(completedAt) - Date.parse(startedAt);
|
|
307
|
+
return Number.isFinite(duration) && duration >= 0 ? duration : undefined;
|
|
308
|
+
}
|
|
309
|
+
function compactTurnSummary(turn) {
|
|
310
|
+
const userMessage = turn.items.find((item) => normalizeType(item.type) === 'usermessage');
|
|
311
|
+
if (userMessage?.summary)
|
|
312
|
+
return userMessage.summary;
|
|
313
|
+
let agentMessage;
|
|
314
|
+
for (let index = turn.items.length - 1; index >= 0; index -= 1) {
|
|
315
|
+
if (normalizeType(turn.items[index].type) === 'agentmessage') {
|
|
316
|
+
agentMessage = turn.items[index];
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return agentMessage?.summary || turn.items.find((item) => item.summary)?.summary || `Run ${turn.id}`;
|
|
321
|
+
}
|
|
322
|
+
function normalizeType(value) {
|
|
323
|
+
return value.toLowerCase().replaceAll(/[^a-z]/g, '');
|
|
324
|
+
}
|
|
325
|
+
const RAW_STRING_LIMIT = 32 * 1_024;
|
|
326
|
+
export function sanitizeRaw(value, seen = new WeakSet()) {
|
|
327
|
+
if (typeof value === 'string') {
|
|
328
|
+
if (value.length <= RAW_STRING_LIMIT)
|
|
329
|
+
return value;
|
|
330
|
+
return `${value.slice(0, RAW_STRING_LIMIT)}\n[truncated ${value.length - RAW_STRING_LIMIT} chars]`;
|
|
331
|
+
}
|
|
332
|
+
if (!value || typeof value !== 'object')
|
|
333
|
+
return value;
|
|
334
|
+
if (seen.has(value))
|
|
335
|
+
return '[truncated circular reference]';
|
|
336
|
+
seen.add(value);
|
|
337
|
+
if (Array.isArray(value))
|
|
338
|
+
return value.map((entry) => sanitizeRaw(entry, seen));
|
|
339
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, sanitizeRaw(entry, seen)]));
|
|
340
|
+
}
|
|
341
|
+
export function publicHistoricalThread(thread) {
|
|
342
|
+
const bounded = {
|
|
343
|
+
...thread,
|
|
344
|
+
turns: thread.turns.slice(-DEFAULT_LIMITS.turnsPerThread).map((turn) => ({
|
|
345
|
+
...turn,
|
|
346
|
+
items: turn.items.slice(-DEFAULT_LIMITS.itemsPerTurn),
|
|
347
|
+
})),
|
|
348
|
+
};
|
|
349
|
+
return sanitizeRaw(bounded);
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/shared/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HistoricalThread, RpcNotification, ThreadTokenUsage, TokenUsageBreakdown, TraceEvent } from './types.js';
|
|
2
|
+
export declare function normalizeTokenUsageBreakdown(value: unknown): TokenUsageBreakdown | undefined;
|
|
3
|
+
export declare function normalizeThreadTokenUsage(value: unknown): ThreadTokenUsage | undefined;
|
|
4
|
+
export declare function tokenUsageDelta(current: TokenUsageBreakdown, previous: TokenUsageBreakdown | undefined, fallback: TokenUsageBreakdown): TokenUsageBreakdown;
|
|
5
|
+
export declare function addTokenUsage(current: TokenUsageBreakdown | undefined, delta: TokenUsageBreakdown): TokenUsageBreakdown;
|
|
6
|
+
export declare function notificationToTrace(notification: RpcNotification): Omit<TraceEvent, 'seq'>;
|
|
7
|
+
export declare function threadToHistory(value: unknown): HistoricalThread | undefined;
|