psyclaw 0.27.12 → 0.27.13

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.
@@ -1,428 +0,0 @@
1
- import { createHash, randomBytes } from "node:crypto";
2
- import { mkdir, readFile, readdir } from "node:fs/promises";
3
- import { dirname, relative, resolve } from "node:path";
4
- import { getAgentDir } from "@earendil-works/pi-coding-agent";
5
- import { PSYCLAW_VERSION } from "../branding.js";
6
- import { atomicWriteFile } from "../project/jsonl.js";
7
- import { projectPaths } from "../project/paths.js";
8
- import { resolvePsyClawManifest } from "../updates/manifest.js";
9
- const attr = (key, value) => ({
10
- key,
11
- value: typeof value === "boolean"
12
- ? { boolValue: value }
13
- : typeof value === "number"
14
- ? { intValue: String(Math.trunc(value)) }
15
- : { stringValue: value },
16
- });
17
- function id(bytes) {
18
- return randomBytes(bytes).toString("hex");
19
- }
20
- function stableId(value) {
21
- return createHash("sha256").update(value).digest("hex").slice(0, 16);
22
- }
23
- function timestamp(value, fallback) {
24
- if (typeof value !== "string")
25
- return fallback;
26
- const parsed = new Date(value);
27
- return Number.isNaN(parsed.getTime()) ? fallback : parsed;
28
- }
29
- function nanos(value) {
30
- return (BigInt(value.getTime()) * 1000000n).toString();
31
- }
32
- function endAfter(start, candidate) {
33
- if (candidate && candidate.getTime() > start.getTime())
34
- return candidate;
35
- return new Date(start.getTime() + 1);
36
- }
37
- function isRecord(value) {
38
- return typeof value === "object" && value !== null && !Array.isArray(value);
39
- }
40
- async function readJsonl(path) {
41
- const text = await readFile(path, "utf8");
42
- const rows = [];
43
- for (const line of text.split(/\r?\n/)) {
44
- if (!line.trim())
45
- continue;
46
- try {
47
- const parsed = JSON.parse(line);
48
- if (isRecord(parsed))
49
- rows.push(parsed);
50
- }
51
- catch {
52
- // A malformed historical line is omitted instead of leaking its text in
53
- // an error message or preventing export of the remaining safe metadata.
54
- }
55
- }
56
- return rows;
57
- }
58
- async function regularJsonlFiles(root) {
59
- const files = [];
60
- async function walk(directory) {
61
- let entries;
62
- try {
63
- entries = await readdir(directory, { withFileTypes: true });
64
- }
65
- catch (error) {
66
- if (error.code === "ENOENT")
67
- return;
68
- throw error;
69
- }
70
- for (const entry of entries) {
71
- const path = resolve(directory, entry.name);
72
- if (entry.isSymbolicLink())
73
- continue;
74
- if (entry.isDirectory())
75
- await walk(path);
76
- else if (entry.isFile() && entry.name.endsWith(".jsonl"))
77
- files.push(path);
78
- }
79
- }
80
- await walk(root);
81
- return files.sort();
82
- }
83
- function safeToolCategory(name) {
84
- if (typeof name !== "string")
85
- return "other";
86
- if (name === "psyclaw_workbench")
87
- return "research_workbench";
88
- if (name === "psyclaw_skill")
89
- return "research_skill";
90
- if (["read", "grep", "find", "ls"].includes(name))
91
- return "file_read";
92
- if (["edit", "write"].includes(name))
93
- return "file_write";
94
- if (["bash", "powershell"].includes(name))
95
- return "shell";
96
- return "other";
97
- }
98
- const MAX_TRACE_TEXT = 12_000;
99
- function truncateTraceText(value) {
100
- return value.length > MAX_TRACE_TEXT ? `${value.slice(0, MAX_TRACE_TEXT)}\n…[truncated]` : value;
101
- }
102
- function toolCalls(message) {
103
- const content = message.content;
104
- if (!Array.isArray(content))
105
- return [];
106
- const calls = [];
107
- for (const part of content) {
108
- if (!isRecord(part))
109
- continue;
110
- const type = part.type;
111
- if (type !== "toolCall" && type !== "tool_call" && type !== "tool_use")
112
- continue;
113
- const name = String(part.name ?? part.toolName ?? "");
114
- const rawInput = part.input ?? part.arguments ?? part.params;
115
- let input = "";
116
- if (typeof rawInput === "string")
117
- input = rawInput;
118
- else if (rawInput !== undefined)
119
- input = JSON.stringify(rawInput);
120
- calls.push({ name, input: truncateTraceText(input) });
121
- }
122
- return calls;
123
- }
124
- function textContent(message) {
125
- const content = message.content;
126
- if (!Array.isArray(content))
127
- return "";
128
- const parts = [];
129
- for (const part of content) {
130
- if (!isRecord(part))
131
- continue;
132
- if (part.type === "text" && typeof part.text === "string" && part.text.trim()) {
133
- parts.push(part.text.trim());
134
- }
135
- }
136
- return truncateTraceText(parts.join("\n"));
137
- }
138
- function makeSpan(options) {
139
- return {
140
- traceId: options.traceId,
141
- spanId: id(8),
142
- ...(options.parentSpanId === undefined ? {} : { parentSpanId: options.parentSpanId }),
143
- name: options.name,
144
- kind: 1,
145
- startTimeUnixNano: nanos(options.start),
146
- endTimeUnixNano: nanos(endAfter(options.start, options.end)),
147
- attributes: options.attributes ?? [],
148
- status: { code: options.status === "error" ? 2 : 1 },
149
- };
150
- }
151
- function sessionSpans(rows, root, fallback) {
152
- const header = rows.find((row) => row.type === "session");
153
- if (!header || typeof header.cwd !== "string" || resolve(header.cwd) !== root)
154
- return [];
155
- const dated = rows.map((row) => ({ row, at: timestamp(row.timestamp, fallback) }));
156
- const start = dated[0]?.at ?? fallback;
157
- const end = dated.at(-1)?.at ?? start;
158
- const traceId = id(16);
159
- const rootSpan = makeSpan({
160
- traceId,
161
- name: "psyclaw.session",
162
- start,
163
- end,
164
- attributes: [
165
- attr("psyclaw.source", "pi-session"),
166
- attr("psyclaw.version", PSYCLAW_VERSION),
167
- attr("psyclaw.session.id", typeof header.id === "string" ? header.id : "unknown"),
168
- attr("psyclaw.session.cwd", root),
169
- ],
170
- });
171
- const spans = [rootSpan];
172
- for (const { row, at } of dated) {
173
- if (row.type !== "message" || !isRecord(row.message))
174
- continue;
175
- const role = row.message.role;
176
- const text = textContent(row.message);
177
- const originalId = typeof row.id === "string" ? row.id : undefined;
178
- if (role === "user" || role === "assistant") {
179
- spans.push(makeSpan({
180
- traceId,
181
- parentSpanId: rootSpan.spanId,
182
- name: role === "user" ? "conversation.user_turn" : "conversation.assistant_turn",
183
- start: at,
184
- attributes: [
185
- attr("psyclaw.content_included", true),
186
- attr("psyclaw.content", text || "(no text content)"),
187
- ...(originalId === undefined ? [] : [attr("psyclaw.original_id", originalId)]),
188
- ],
189
- status: role === "assistant" && typeof row.message.errorMessage === "string" ? "error" : "ok",
190
- }));
191
- }
192
- if (role === "assistant") {
193
- for (const call of toolCalls(row.message)) {
194
- spans.push(makeSpan({
195
- traceId,
196
- parentSpanId: rootSpan.spanId,
197
- name: `tool.${safeToolCategory(call.name)}`,
198
- start: at,
199
- attributes: [
200
- attr("langsmith.span.kind", "tool"),
201
- attr("psyclaw.tool.category", safeToolCategory(call.name)),
202
- attr("psyclaw.tool.name", call.name || "unknown"),
203
- attr("psyclaw.tool.input", call.input || "(no input)"),
204
- ...(originalId === undefined ? [] : [attr("psyclaw.original_id", originalId)]),
205
- ],
206
- }));
207
- }
208
- }
209
- }
210
- return spans;
211
- }
212
- function workflowSpans(rows, fallback) {
213
- const events = rows.filter((row) => row.schemaVersion === "psyclaw/run-event/v1" && typeof row.type === "string");
214
- if (events.length === 0)
215
- return [];
216
- const dated = events.map((row) => ({ row, at: timestamp(row.at, fallback) }));
217
- const start = dated[0]?.at ?? fallback;
218
- const end = dated.at(-1)?.at ?? start;
219
- const traceId = id(16);
220
- const blocked = events.some((row) => row.type === "blocked");
221
- const rootSpan = makeSpan({
222
- traceId,
223
- name: "psyclaw.workflow",
224
- start,
225
- end,
226
- status: blocked ? "error" : "ok",
227
- attributes: [
228
- attr("psyclaw.source", "workflow-run"),
229
- attr("psyclaw.version", PSYCLAW_VERSION),
230
- attr("psyclaw.run.id", typeof rows[0]?.runId === "string" ? rows[0].runId : "unknown"),
231
- ],
232
- });
233
- const spans = [rootSpan];
234
- for (const { row, at } of dated) {
235
- const eventType = String(row.type);
236
- const message = typeof row.message === "string" ? truncateTraceText(row.message) : undefined;
237
- const receipt = isRecord(row.receipt) ? row.receipt : undefined;
238
- const receiptText = receipt !== undefined
239
- ? truncateTraceText(JSON.stringify(receipt))
240
- : undefined;
241
- spans.push(makeSpan({
242
- traceId,
243
- parentSpanId: rootSpan.spanId,
244
- name: `workflow.${eventType}`,
245
- start: at,
246
- status: eventType === "blocked" ? "error" : "ok",
247
- attributes: [
248
- attr("psyclaw.event.type", eventType),
249
- ...(message === undefined ? [] : [attr("psyclaw.event.message", message)]),
250
- ...(receiptText === undefined ? [] : [attr("psyclaw.event.receipt", receiptText)]),
251
- ...(typeof row.taskId === "string" ? [attr("psyclaw.task.id", row.taskId)] : []),
252
- ],
253
- }));
254
- }
255
- return spans;
256
- }
257
- function sessionTrace(rows, root, sourceKey) {
258
- const header = rows.find((row) => row.type === "session");
259
- if (!header || typeof header.cwd !== "string" || resolve(header.cwd) !== root)
260
- return undefined;
261
- const events = [];
262
- for (const [index, row] of rows.entries()) {
263
- if (row.type !== "message" || !isRecord(row.message))
264
- continue;
265
- const role = row.message.role;
266
- const at = timestamp(row.timestamp ?? row.message.timestamp, new Date(0)).toISOString();
267
- if (role === "user" || role === "assistant") {
268
- const text = textContent(row.message);
269
- events.push({
270
- id: stableId(`${sourceKey}:${index}:turn`),
271
- name: role === "user" ? "用户回合" : "助手回合",
272
- at,
273
- status: role === "assistant" && typeof row.message.errorMessage === "string" ? "error" : "ok",
274
- ...(text ? { detail: text } : {}),
275
- });
276
- }
277
- if (role === "assistant") {
278
- for (const [toolIndex, call] of toolCalls(row.message).entries()) {
279
- events.push({
280
- id: stableId(`${sourceKey}:${index}:tool:${toolIndex}`),
281
- name: `工具调用:${call.name || "unknown"}`,
282
- at,
283
- status: "ok",
284
- category: safeToolCategory(call.name),
285
- ...(call.input ? { detail: call.input } : {}),
286
- });
287
- }
288
- }
289
- }
290
- if (events.length === 0)
291
- return undefined;
292
- const traceId = stableId(`session:${sourceKey}`);
293
- return {
294
- id: traceId,
295
- source: "session",
296
- label: `会话 ${traceId.slice(0, 6)}`,
297
- startedAt: events[0].at,
298
- endedAt: events.at(-1).at,
299
- status: events.some((event) => event.status === "error") ? "error" : "ok",
300
- events,
301
- };
302
- }
303
- function workflowTrace(rows, sourceKey) {
304
- const sourceEvents = rows.filter((row) => row.schemaVersion === "psyclaw/run-event/v1" && typeof row.type === "string");
305
- if (sourceEvents.length === 0)
306
- return undefined;
307
- const events = sourceEvents.map((row, index) => {
308
- const eventType = String(row.type);
309
- const message = typeof row.message === "string" ? truncateTraceText(row.message) : undefined;
310
- const receipt = isRecord(row.receipt) ? truncateTraceText(JSON.stringify(row.receipt)) : undefined;
311
- const detail = [message, receipt].filter((part) => part !== undefined && part.length > 0).join("\n");
312
- return {
313
- id: stableId(`${sourceKey}:${index}:${eventType}`),
314
- name: `工作流 ${eventType}`,
315
- at: timestamp(row.at, new Date(0)).toISOString(),
316
- status: eventType === "blocked" ? "error" : "ok",
317
- ...(detail ? { detail } : {}),
318
- };
319
- });
320
- const traceId = stableId(`workflow:${sourceKey}`);
321
- return {
322
- id: traceId,
323
- source: "workflow",
324
- label: `工作流 ${traceId.slice(0, 6)}`,
325
- startedAt: events[0].at,
326
- endedAt: events.at(-1).at,
327
- status: events.some((event) => event.status === "error") ? "error" : "ok",
328
- events,
329
- };
330
- }
331
- /** Build a stable, metadata-only trace view for the local Panel without writing an export file. */
332
- export async function projectTraceSnapshot(options = {}) {
333
- const root = resolve(options.root ?? process.cwd());
334
- const sessionsRoot = resolve(options.agentDir ?? getAgentDir(), "sessions");
335
- const runRoot = projectPaths(root).runs;
336
- const [sessionFiles, runFiles] = await Promise.all([regularJsonlFiles(sessionsRoot), regularJsonlFiles(runRoot)]);
337
- const traces = [];
338
- for (const file of sessionFiles) {
339
- const sourceKey = stableId(relative(sessionsRoot, file).replaceAll("\\", "/"));
340
- const trace = sessionTrace(await readJsonl(file), root, sourceKey);
341
- if (trace)
342
- traces.push(trace);
343
- }
344
- for (const file of runFiles) {
345
- const sourceKey = stableId(relative(runRoot, file).replaceAll("\\", "/"));
346
- const trace = workflowTrace(await readJsonl(file), sourceKey);
347
- if (trace)
348
- traces.push(trace);
349
- }
350
- traces.sort((left, right) => right.startedAt.localeCompare(left.startedAt));
351
- return {
352
- schemaVersion: "psyclaw/panel-traces/v1",
353
- generatedAt: new Date().toISOString(),
354
- traces,
355
- sources: {
356
- sessions: traces.filter((trace) => trace.source === "session").length,
357
- workflowRuns: traces.filter((trace) => trace.source === "workflow").length,
358
- },
359
- privacy: { contentIncluded: true, originalIdsIncluded: true, absolutePathsIncluded: true },
360
- };
361
- }
362
- function safeOutput(root, requested) {
363
- const output = resolve(root, requested);
364
- const rel = relative(root, output).replaceAll("\\", "/");
365
- if (rel === "" || rel === ".." || rel.startsWith("../")) {
366
- throw new Error("Trace export output must stay inside the current project");
367
- }
368
- return output;
369
- }
370
- /** Export metadata-only interaction paths as an OTLP/HTTP JSON payload. */
371
- export async function exportTraces(options = {}) {
372
- const root = resolve(options.root ?? process.cwd());
373
- const output = safeOutput(root, options.output ?? "outputs/psyclaw-export.otlp.json");
374
- const fallback = options.now?.() ?? new Date();
375
- const sessionsRoot = resolve(options.agentDir ?? getAgentDir(), "sessions");
376
- const runRoot = projectPaths(root).runs;
377
- const [sessionFiles, runFiles] = await Promise.all([
378
- regularJsonlFiles(sessionsRoot),
379
- regularJsonlFiles(runRoot),
380
- ]);
381
- const traces = [];
382
- let includedSessions = 0;
383
- for (const file of sessionFiles) {
384
- const spans = sessionSpans(await readJsonl(file), root, fallback);
385
- if (spans.length > 0) {
386
- traces.push(spans);
387
- includedSessions += 1;
388
- }
389
- }
390
- let includedRuns = 0;
391
- for (const file of runFiles) {
392
- const spans = workflowSpans(await readJsonl(file), fallback);
393
- if (spans.length > 0) {
394
- traces.push(spans);
395
- includedRuns += 1;
396
- }
397
- }
398
- const manifest = await resolvePsyClawManifest();
399
- const allSpans = traces.flat();
400
- const payload = {
401
- resourceSpans: [{
402
- resource: {
403
- attributes: [
404
- attr("service.name", "psyclaw"),
405
- attr("service.version", PSYCLAW_VERSION),
406
- ...(manifest?.piVersion ? [attr("psyclaw.pi.version", manifest.piVersion)] : []),
407
- attr("psyclaw.export.content_included", true),
408
- ],
409
- },
410
- scopeSpans: [{
411
- scope: { name: "psyclaw.trace-export", version: PSYCLAW_VERSION },
412
- spans: allSpans,
413
- }],
414
- }],
415
- };
416
- await mkdir(dirname(output), { recursive: true });
417
- await atomicWriteFile(output, `${JSON.stringify(payload, null, 2)}\n`);
418
- return {
419
- schemaVersion: "psyclaw/trace-export-receipt/v1",
420
- format: "otlp-json",
421
- output,
422
- traces: traces.length,
423
- spans: allSpans.length,
424
- sources: { sessions: includedSessions, workflowRuns: includedRuns },
425
- privacy: { contentIncluded: true, originalIdsIncluded: true, absolutePathsIncluded: true },
426
- };
427
- }
428
- //# sourceMappingURL=export.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/telemetry/export.ts"],"names":[],"mappings":"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"}