psyclaw 0.27.5 → 0.27.7

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.
Files changed (39) hide show
  1. package/README.md +9 -7
  2. package/dist/apps/panel/index.html +11 -11
  3. package/dist/src/adapters/pi/extension.js +383 -55
  4. package/dist/src/adapters/pi/extension.js.map +1 -1
  5. package/dist/src/chat.js +2 -2
  6. package/dist/src/chat.js.map +1 -1
  7. package/dist/src/cli.js +1 -4
  8. package/dist/src/cli.js.map +1 -1
  9. package/dist/src/index.d.ts +1 -0
  10. package/dist/src/index.js +1 -0
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/integrations/mcp-runtime.d.ts +26 -0
  13. package/dist/src/integrations/mcp-runtime.js +154 -0
  14. package/dist/src/integrations/mcp-runtime.js.map +1 -0
  15. package/dist/src/panel/events.d.ts +2 -1
  16. package/dist/src/panel/events.js +2 -5
  17. package/dist/src/panel/events.js.map +1 -1
  18. package/dist/src/panel/server.js +28 -8
  19. package/dist/src/panel/server.js.map +1 -1
  20. package/dist/src/project/bootstrap.d.ts +17 -0
  21. package/dist/src/project/bootstrap.js +87 -1
  22. package/dist/src/project/bootstrap.js.map +1 -1
  23. package/dist/src/skills/user-skills.d.ts +57 -0
  24. package/dist/src/skills/user-skills.js +294 -0
  25. package/dist/src/skills/user-skills.js.map +1 -0
  26. package/dist/src/style/cli-ui.js +1 -1
  27. package/dist/src/style/cli-ui.js.map +1 -1
  28. package/dist/src/telemetry/export.d.ts +8 -6
  29. package/dist/src/telemetry/export.js +81 -18
  30. package/dist/src/telemetry/export.js.map +1 -1
  31. package/dist/src/tui/skill-manager.d.ts +3 -0
  32. package/dist/src/tui/skill-manager.js +11 -1
  33. package/dist/src/tui/skill-manager.js.map +1 -1
  34. package/package.json +1 -1
  35. package/scripts/rebrand-pi.mjs +66 -4
  36. package/skills/core/citation-audit/SKILL.md +9 -9
  37. package/skills/core/evidence-capture/SKILL.md +9 -9
  38. package/skills/core/research-brief/SKILL.md +8 -8
  39. package/skills/core/research-intake/SKILL.md +9 -9
@@ -0,0 +1,294 @@
1
+ import { lstat, readFile, readdir } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { delimiter, isAbsolute, join, resolve } from "node:path";
4
+ import { getAgentDir } from "@earendil-works/pi-coding-agent";
5
+ import { parse as parseYaml } from "yaml";
6
+ import { atomicWriteFile } from "../project/jsonl.js";
7
+ const USER_SKILL_STATE = "psyclaw/user-skill-state/v1";
8
+ const INSTALL_MANIFEST = "psyclaw-install.json";
9
+ function isRecord(value) {
10
+ return typeof value === "object" && value !== null && !Array.isArray(value);
11
+ }
12
+ function expandConfiguredPath(value, cwd, home) {
13
+ const expanded = value === "~"
14
+ ? home
15
+ : value.startsWith("~/") || value.startsWith("~\\")
16
+ ? join(home, value.slice(2))
17
+ : value;
18
+ return isAbsolute(expanded) ? resolve(expanded) : resolve(cwd, expanded);
19
+ }
20
+ export function localSkillRoots(cwd) {
21
+ const home = homedir();
22
+ const envPaths = (process.env.PSYCLAW_SKILLS_PATH ?? "")
23
+ .split(delimiter)
24
+ .map((path) => path.trim())
25
+ .filter(Boolean)
26
+ .map((path) => expandConfiguredPath(path, cwd, home));
27
+ return [
28
+ // Fixed precedence: explicit project roots, other project roots, then
29
+ // user-level PsyClaw/Pi and other host agents.
30
+ join(cwd, ".psyclaw", "skills"),
31
+ join(cwd, "skills"),
32
+ join(cwd, ".claude", "skills"),
33
+ join(cwd, ".claude", "commands"),
34
+ join(cwd, ".codex", "skills"),
35
+ join(cwd, ".agents", "skills"),
36
+ join(cwd, ".opencode", "skills"),
37
+ join(cwd, ".cc-switch", "skills"),
38
+ join(home, ".psyclaw", "skills"),
39
+ join(home, ".claude", "skills"),
40
+ join(home, ".claude", "commands"),
41
+ join(home, ".codex", "skills"),
42
+ join(home, ".agents", "skills"),
43
+ join(home, ".opencode", "skills"),
44
+ join(home, ".cc-switch", "skills"),
45
+ ...envPaths,
46
+ ];
47
+ }
48
+ /**
49
+ * Roots whose contents are fully governed by the recommended Skill manager
50
+ * (`.psyclaw/imports/recommended` and `getAgentDir()/skills`). These are
51
+ * excluded from the local *load* path so a disabled recommended Skill is not
52
+ * silently re-enabled by the user-skill scan; the management page still shows
53
+ * them through their recommended rows.
54
+ */
55
+ export function managedSkillRoots(cwd) {
56
+ return [
57
+ join(getAgentDir(), "skills"),
58
+ join(cwd, ".psyclaw", "imports", "recommended"),
59
+ ];
60
+ }
61
+ function parseSkillFrontmatter(text) {
62
+ const normalized = text.replace(/^\uFEFF/, "");
63
+ const match = normalized.match(/^---[ \t]*\r?\n([\s\S]*?)\r?\n(?:---|\.\.\.)[ \t]*(?:\r?\n|$)/);
64
+ if (!match?.[1])
65
+ return null;
66
+ try {
67
+ const metadata = parseYaml(match[1]);
68
+ if (!isRecord(metadata))
69
+ return null;
70
+ const name = typeof metadata.name === "string" ? metadata.name.trim() : undefined;
71
+ const description = typeof metadata.description === "string" ? metadata.description.trim() : undefined;
72
+ if (!name)
73
+ return null;
74
+ return { name, ...(description === undefined ? {} : { description }) };
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ }
80
+ async function readLocalSkill(dir, root, scope) {
81
+ try {
82
+ const text = await readFile(join(dir, "SKILL.md"), "utf8");
83
+ const meta = parseSkillFrontmatter(text);
84
+ if (!meta)
85
+ return null;
86
+ return {
87
+ id: meta.name,
88
+ name: meta.name,
89
+ description: meta.description ?? "",
90
+ path: dir,
91
+ root,
92
+ scope,
93
+ duplicatePaths: [],
94
+ };
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ /**
101
+ * A skill directory that carries a `psyclaw-install.json` manifest is a
102
+ * managed recommended install and must not be double-listed as a local skill.
103
+ */
104
+ async function hasInstallManifest(directory) {
105
+ try {
106
+ await readFile(join(directory, INSTALL_MANIFEST), "utf8");
107
+ return true;
108
+ }
109
+ catch {
110
+ return false;
111
+ }
112
+ }
113
+ /**
114
+ * Collect every directory under `root` that directly contains SKILL.md,
115
+ * mirroring Pi's loader semantics (a directory with SKILL.md is a skill and
116
+ * its children are not scanned separately). Hidden dirs and dependency
117
+ * folders are skipped. When `skipManaged` is set, skill directories that are
118
+ * managed recommended installs (carrying a manifest) are excluded.
119
+ */
120
+ async function collectSkillDirs(directory, root, scope, depth, out, skipManaged = false) {
121
+ if (depth > 5)
122
+ return;
123
+ let entries;
124
+ try {
125
+ entries = await readdir(directory, { withFileTypes: true });
126
+ }
127
+ catch {
128
+ return;
129
+ }
130
+ if (entries.some((entry) => entry.isFile() && entry.name === "SKILL.md")) {
131
+ if (skipManaged && (await hasInstallManifest(directory)))
132
+ return;
133
+ const info = await readLocalSkill(directory, root, scope);
134
+ if (info)
135
+ out.push(info);
136
+ return;
137
+ }
138
+ for (const entry of entries) {
139
+ if (entry.name.startsWith(".") || entry.name === "node_modules")
140
+ continue;
141
+ if (!entry.isDirectory() || entry.isSymbolicLink())
142
+ continue;
143
+ await collectSkillDirs(join(directory, entry.name), root, scope, depth + 1, out, skipManaged);
144
+ }
145
+ }
146
+ /** Scan all discovery roots for user-installed skills (used by the manager). */
147
+ export async function scanLocalSkills(cwd, options = {}) {
148
+ const roots = options.includeManaged === false
149
+ ? localSkillRoots(cwd)
150
+ : [...localSkillRoots(cwd), ...managedSkillRoots(cwd)];
151
+ const out = [];
152
+ for (const root of roots) {
153
+ const scope = root.includes(cwd) && !root.startsWith(homedir()) ? "project" : "user";
154
+ // Managed roots carry manifests; skip them so a managed recommended
155
+ // install is not double-listed as a local skill.
156
+ const skipManaged = options.includeManaged !== false && managedSkillRoots(cwd).includes(root);
157
+ await collectSkillDirs(root, root, scope, 0, out, skipManaged);
158
+ }
159
+ const selected = new Map();
160
+ for (const skill of out) {
161
+ const key = skill.name.trim().toLocaleLowerCase();
162
+ const existing = selected.get(key);
163
+ if (existing) {
164
+ if (existing.path !== skill.path && !existing.duplicatePaths.includes(skill.path)) {
165
+ existing.duplicatePaths.push(skill.path);
166
+ }
167
+ continue;
168
+ }
169
+ selected.set(key, skill);
170
+ }
171
+ return [...selected.values()];
172
+ }
173
+ /** Read only descriptors from already-selected roots, including collections. */
174
+ export async function skillNamesInPaths(paths) {
175
+ const names = new Set();
176
+ for (const root of paths) {
177
+ const skills = [];
178
+ await collectSkillDirs(root, root, "project", 0, skills);
179
+ for (const skill of skills)
180
+ names.add(skill.name.trim().toLocaleLowerCase());
181
+ }
182
+ return [...names];
183
+ }
184
+ /** Claude command markdown is a prompt resource, not a Skill directory. */
185
+ export async function enabledLocalPromptPaths(cwd) {
186
+ const roots = [join(cwd, ".claude", "commands"), join(homedir(), ".claude", "commands")];
187
+ const selected = new Set();
188
+ const paths = [];
189
+ for (const root of roots) {
190
+ let entries;
191
+ try {
192
+ entries = await readdir(root, { withFileTypes: true });
193
+ }
194
+ catch {
195
+ continue;
196
+ }
197
+ for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
198
+ if (!entry.isFile() || !entry.name.toLocaleLowerCase().endsWith(".md"))
199
+ continue;
200
+ const key = entry.name.slice(0, -3).toLocaleLowerCase();
201
+ if (selected.has(key))
202
+ continue;
203
+ selected.add(key);
204
+ paths.push(resolve(root, entry.name));
205
+ }
206
+ }
207
+ return paths;
208
+ }
209
+ function userSkillStatePath(root) {
210
+ return join(root, ".psyclaw", "user-skills.json");
211
+ }
212
+ export async function readUserSkillState(root) {
213
+ try {
214
+ const value = JSON.parse(await readFile(userSkillStatePath(root), "utf8"));
215
+ if (!isRecord(value) || value.schemaVersion !== USER_SKILL_STATE)
216
+ throw new Error("invalid state");
217
+ const disabled = Array.isArray(value.disabled)
218
+ ? value.disabled.filter((id) => typeof id === "string")
219
+ : [];
220
+ return { schemaVersion: USER_SKILL_STATE, disabled: [...new Set(disabled)].sort() };
221
+ }
222
+ catch {
223
+ return { schemaVersion: USER_SKILL_STATE, disabled: [] };
224
+ }
225
+ }
226
+ async function saveUserSkillState(root, state) {
227
+ await atomicWriteFile(userSkillStatePath(root), `${JSON.stringify({
228
+ schemaVersion: USER_SKILL_STATE,
229
+ disabled: [...new Set(state.disabled)].sort(),
230
+ }, null, 2)}\n`);
231
+ }
232
+ export async function setLocalSkillEnabled(root, id, enabled) {
233
+ const state = await readUserSkillState(root);
234
+ const current = new Set(state.disabled);
235
+ if (enabled)
236
+ current.delete(id);
237
+ else
238
+ current.add(id);
239
+ await saveUserSkillState(root, { schemaVersion: USER_SKILL_STATE, disabled: [...current] });
240
+ }
241
+ export async function setLocalSkillsEnabled(root, ids, enabled) {
242
+ const state = await readUserSkillState(root);
243
+ const current = new Set(state.disabled);
244
+ for (const id of ids) {
245
+ if (enabled)
246
+ current.delete(id);
247
+ else
248
+ current.add(id);
249
+ }
250
+ await saveUserSkillState(root, { schemaVersion: USER_SKILL_STATE, disabled: [...current] });
251
+ }
252
+ /**
253
+ * Return existing, absolute Skill directories for Pi. Same-name skills are
254
+ * selected once by the root order above; loose markdown commands are not
255
+ * treated as Skills.
256
+ */
257
+ export async function enabledLocalSkillPaths(cwd, options = {}) {
258
+ const state = await readUserSkillState(cwd);
259
+ const disabled = new Set(state.disabled);
260
+ const selectedNames = new Set([...(options.excludedNames ?? [])].map((name) => name.trim().toLocaleLowerCase()));
261
+ const paths = [];
262
+ const warnings = [];
263
+ const seen = new Set();
264
+ for (const root of localSkillRoots(cwd)) {
265
+ const exists = await lstat(root).then((stat) => stat.isDirectory()).catch(() => false);
266
+ if (!exists)
267
+ continue;
268
+ const skills = [];
269
+ const scope = root.includes(cwd) && !root.startsWith(homedir()) ? "project" : "user";
270
+ await collectSkillDirs(root, root, scope, 0, skills);
271
+ if (skills.length === 0)
272
+ continue;
273
+ for (const skill of skills) {
274
+ const nameKey = skill.name.trim().toLocaleLowerCase();
275
+ if (selectedNames.has(nameKey))
276
+ continue;
277
+ if (disabled.has(skill.id)) {
278
+ warnings.push(`User Skill '${skill.id}' is disabled and was not loaded.`);
279
+ continue;
280
+ }
281
+ const key = process.platform === "win32" ? skill.path.toLocaleLowerCase() : skill.path;
282
+ if (!seen.has(key)) {
283
+ seen.add(key);
284
+ selectedNames.add(nameKey);
285
+ paths.push(skill.path);
286
+ }
287
+ }
288
+ }
289
+ return { paths, warnings };
290
+ }
291
+ export function userSkillId(name) {
292
+ return `local:${name}`;
293
+ }
294
+ //# sourceMappingURL=user-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-skills.js","sourceRoot":"","sources":["../../../src/skills/user-skills.ts"],"names":[],"mappings":"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"}
@@ -85,7 +85,7 @@ export function formatCliUsage() {
85
85
  cmd("psyclaw import", "<agent-id> [--yes]", c.white("导入外部智能体技能")),
86
86
  cmd("psyclaw check-updates", "", c.white("检查运行时与生态更新报告")),
87
87
  cmd("psyclaw update", "[--check] [--force]", c.white("升级 PsyClaw 及其内置 Pi(默认直接更新)")),
88
- cmd("psyclaw traces export", "[--output <path>]", c.white("导出脱敏 OTLP 使用路径(Langfuse/LangSmith)")),
88
+ cmd("psyclaw export", "[--output <path>]", c.white("导出包含正文与工具参数的完整 OTLP 使用路径(Langfuse/LangSmith)")),
89
89
  "",
90
90
  ` ${c.darkGray("──────────────────────────────────────────────────────────")}`,
91
91
  ` ${c.gray("文档与源码:")} ${c.cyan(c.underline("https://github.com/Exekiel179/psyclaw"))}`,
@@ -1 +1 @@
1
- {"version":3,"file":"cli-ui.js","sourceRoot":"","sources":["../../../src/style/cli-ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-ui.js","sourceRoot":"","sources":["../../../src/style/cli-ui.ts"],"names":[],"mappings":"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"}
@@ -15,9 +15,9 @@ export interface TraceExportResult {
15
15
  workflowRuns: number;
16
16
  };
17
17
  privacy: {
18
- contentIncluded: false;
19
- originalIdsIncluded: false;
20
- absolutePathsIncluded: false;
18
+ contentIncluded: true;
19
+ originalIdsIncluded: true;
20
+ absolutePathsIncluded: true;
21
21
  };
22
22
  }
23
23
  export interface PanelTraceEvent {
@@ -26,6 +26,8 @@ export interface PanelTraceEvent {
26
26
  at: string;
27
27
  status: "ok" | "error";
28
28
  category?: string;
29
+ /** Full tool input / message text for debugging (not redacted). */
30
+ detail?: string;
29
31
  }
30
32
  export interface PanelTrace {
31
33
  id: string;
@@ -45,9 +47,9 @@ export interface PanelTraceSnapshot {
45
47
  workflowRuns: number;
46
48
  };
47
49
  privacy: {
48
- contentIncluded: false;
49
- originalIdsIncluded: false;
50
- absolutePathsIncluded: false;
50
+ contentIncluded: true;
51
+ originalIdsIncluded: true;
52
+ absolutePathsIncluded: true;
51
53
  };
52
54
  }
53
55
  /** Build a stable, metadata-only trace view for the local Panel without writing an export file. */
@@ -95,20 +95,45 @@ function safeToolCategory(name) {
95
95
  return "shell";
96
96
  return "other";
97
97
  }
98
- function toolCategories(message) {
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) {
99
103
  const content = message.content;
100
104
  if (!Array.isArray(content))
101
105
  return [];
102
- const categories = [];
106
+ const calls = [];
103
107
  for (const part of content) {
104
108
  if (!isRecord(part))
105
109
  continue;
106
110
  const type = part.type;
107
111
  if (type !== "toolCall" && type !== "tool_call" && type !== "tool_use")
108
112
  continue;
109
- categories.push(safeToolCategory(part.name ?? part.toolName));
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) });
110
121
  }
111
- return categories;
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"));
112
137
  }
113
138
  function makeSpan(options) {
114
139
  return {
@@ -136,31 +161,48 @@ function sessionSpans(rows, root, fallback) {
136
161
  name: "psyclaw.session",
137
162
  start,
138
163
  end,
139
- attributes: [attr("psyclaw.source", "pi-session"), attr("psyclaw.version", PSYCLAW_VERSION)],
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
+ ],
140
170
  });
141
171
  const spans = [rootSpan];
142
172
  for (const { row, at } of dated) {
143
173
  if (row.type !== "message" || !isRecord(row.message))
144
174
  continue;
145
175
  const role = row.message.role;
176
+ const text = textContent(row.message);
177
+ const originalId = typeof row.id === "string" ? row.id : undefined;
146
178
  if (role === "user" || role === "assistant") {
147
179
  spans.push(makeSpan({
148
180
  traceId,
149
181
  parentSpanId: rootSpan.spanId,
150
182
  name: role === "user" ? "conversation.user_turn" : "conversation.assistant_turn",
151
183
  start: at,
152
- attributes: [attr("psyclaw.content_included", false)],
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
+ ],
153
189
  status: role === "assistant" && typeof row.message.errorMessage === "string" ? "error" : "ok",
154
190
  }));
155
191
  }
156
192
  if (role === "assistant") {
157
- for (const category of toolCategories(row.message)) {
193
+ for (const call of toolCalls(row.message)) {
158
194
  spans.push(makeSpan({
159
195
  traceId,
160
196
  parentSpanId: rootSpan.spanId,
161
- name: `tool.${category}`,
197
+ name: `tool.${safeToolCategory(call.name)}`,
162
198
  start: at,
163
- attributes: [attr("langsmith.span.kind", "tool"), attr("psyclaw.tool.category", category)],
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
+ ],
164
206
  }));
165
207
  }
166
208
  }
@@ -182,18 +224,32 @@ function workflowSpans(rows, fallback) {
182
224
  start,
183
225
  end,
184
226
  status: blocked ? "error" : "ok",
185
- attributes: [attr("psyclaw.source", "workflow-run"), attr("psyclaw.version", PSYCLAW_VERSION)],
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
+ ],
186
232
  });
187
233
  const spans = [rootSpan];
188
234
  for (const { row, at } of dated) {
189
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;
190
241
  spans.push(makeSpan({
191
242
  traceId,
192
243
  parentSpanId: rootSpan.spanId,
193
244
  name: `workflow.${eventType}`,
194
245
  start: at,
195
246
  status: eventType === "blocked" ? "error" : "ok",
196
- attributes: [attr("psyclaw.event.type", eventType)],
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
+ ],
197
253
  }));
198
254
  }
199
255
  return spans;
@@ -209,21 +265,24 @@ function sessionTrace(rows, root, sourceKey) {
209
265
  const role = row.message.role;
210
266
  const at = timestamp(row.timestamp ?? row.message.timestamp, new Date(0)).toISOString();
211
267
  if (role === "user" || role === "assistant") {
268
+ const text = textContent(row.message);
212
269
  events.push({
213
270
  id: stableId(`${sourceKey}:${index}:turn`),
214
271
  name: role === "user" ? "用户回合" : "助手回合",
215
272
  at,
216
273
  status: role === "assistant" && typeof row.message.errorMessage === "string" ? "error" : "ok",
274
+ ...(text ? { detail: text } : {}),
217
275
  });
218
276
  }
219
277
  if (role === "assistant") {
220
- for (const [toolIndex, category] of toolCategories(row.message).entries()) {
278
+ for (const [toolIndex, call] of toolCalls(row.message).entries()) {
221
279
  events.push({
222
280
  id: stableId(`${sourceKey}:${index}:tool:${toolIndex}`),
223
- name: "工具调用",
281
+ name: `工具调用:${call.name || "unknown"}`,
224
282
  at,
225
283
  status: "ok",
226
- category,
284
+ category: safeToolCategory(call.name),
285
+ ...(call.input ? { detail: call.input } : {}),
227
286
  });
228
287
  }
229
288
  }
@@ -247,11 +306,15 @@ function workflowTrace(rows, sourceKey) {
247
306
  return undefined;
248
307
  const events = sourceEvents.map((row, index) => {
249
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");
250
312
  return {
251
313
  id: stableId(`${sourceKey}:${index}:${eventType}`),
252
314
  name: `工作流 ${eventType}`,
253
315
  at: timestamp(row.at, new Date(0)).toISOString(),
254
316
  status: eventType === "blocked" ? "error" : "ok",
317
+ ...(detail ? { detail } : {}),
255
318
  };
256
319
  });
257
320
  const traceId = stableId(`workflow:${sourceKey}`);
@@ -293,7 +356,7 @@ export async function projectTraceSnapshot(options = {}) {
293
356
  sessions: traces.filter((trace) => trace.source === "session").length,
294
357
  workflowRuns: traces.filter((trace) => trace.source === "workflow").length,
295
358
  },
296
- privacy: { contentIncluded: false, originalIdsIncluded: false, absolutePathsIncluded: false },
359
+ privacy: { contentIncluded: true, originalIdsIncluded: true, absolutePathsIncluded: true },
297
360
  };
298
361
  }
299
362
  function safeOutput(root, requested) {
@@ -307,7 +370,7 @@ function safeOutput(root, requested) {
307
370
  /** Export metadata-only interaction paths as an OTLP/HTTP JSON payload. */
308
371
  export async function exportTraces(options = {}) {
309
372
  const root = resolve(options.root ?? process.cwd());
310
- const output = safeOutput(root, options.output ?? "psyclaw-traces.otlp.json");
373
+ const output = safeOutput(root, options.output ?? "outputs/psyclaw-export.otlp.json");
311
374
  const fallback = options.now?.() ?? new Date();
312
375
  const sessionsRoot = resolve(options.agentDir ?? getAgentDir(), "sessions");
313
376
  const runRoot = projectPaths(root).runs;
@@ -341,7 +404,7 @@ export async function exportTraces(options = {}) {
341
404
  attr("service.name", "psyclaw"),
342
405
  attr("service.version", PSYCLAW_VERSION),
343
406
  ...(manifest?.piVersion ? [attr("psyclaw.pi.version", manifest.piVersion)] : []),
344
- attr("psyclaw.export.content_included", false),
407
+ attr("psyclaw.export.content_included", true),
345
408
  ],
346
409
  },
347
410
  scopeSpans: [{
@@ -359,7 +422,7 @@ export async function exportTraces(options = {}) {
359
422
  traces: traces.length,
360
423
  spans: allSpans.length,
361
424
  sources: { sessions: includedSessions, workflowRuns: includedRuns },
362
- privacy: { contentIncluded: false, originalIdsIncluded: false, absolutePathsIncluded: false },
425
+ privacy: { contentIncluded: true, originalIdsIncluded: true, absolutePathsIncluded: true },
363
426
  };
364
427
  }
365
428
  //# sourceMappingURL=export.js.map