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.
- package/README.md +9 -7
- package/dist/apps/panel/index.html +11 -11
- package/dist/src/adapters/pi/extension.js +383 -55
- package/dist/src/adapters/pi/extension.js.map +1 -1
- package/dist/src/chat.js +2 -2
- package/dist/src/chat.js.map +1 -1
- package/dist/src/cli.js +1 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/mcp-runtime.d.ts +26 -0
- package/dist/src/integrations/mcp-runtime.js +154 -0
- package/dist/src/integrations/mcp-runtime.js.map +1 -0
- package/dist/src/panel/events.d.ts +2 -1
- package/dist/src/panel/events.js +2 -5
- package/dist/src/panel/events.js.map +1 -1
- package/dist/src/panel/server.js +28 -8
- package/dist/src/panel/server.js.map +1 -1
- package/dist/src/project/bootstrap.d.ts +17 -0
- package/dist/src/project/bootstrap.js +87 -1
- package/dist/src/project/bootstrap.js.map +1 -1
- package/dist/src/skills/user-skills.d.ts +57 -0
- package/dist/src/skills/user-skills.js +294 -0
- package/dist/src/skills/user-skills.js.map +1 -0
- package/dist/src/style/cli-ui.js +1 -1
- package/dist/src/style/cli-ui.js.map +1 -1
- package/dist/src/telemetry/export.d.ts +8 -6
- package/dist/src/telemetry/export.js +81 -18
- package/dist/src/telemetry/export.js.map +1 -1
- package/dist/src/tui/skill-manager.d.ts +3 -0
- package/dist/src/tui/skill-manager.js +11 -1
- package/dist/src/tui/skill-manager.js.map +1 -1
- package/package.json +1 -1
- package/scripts/rebrand-pi.mjs +66 -4
- package/skills/core/citation-audit/SKILL.md +9 -9
- package/skills/core/evidence-capture/SKILL.md +9 -9
- package/skills/core/research-brief/SKILL.md +8 -8
- 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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"}
|
package/dist/src/style/cli-ui.js
CHANGED
|
@@ -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
|
|
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:
|
|
19
|
-
originalIdsIncluded:
|
|
20
|
-
absolutePathsIncluded:
|
|
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:
|
|
49
|
-
originalIdsIncluded:
|
|
50
|
-
absolutePathsIncluded:
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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: [
|
|
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: [
|
|
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
|
|
193
|
+
for (const call of toolCalls(row.message)) {
|
|
158
194
|
spans.push(makeSpan({
|
|
159
195
|
traceId,
|
|
160
196
|
parentSpanId: rootSpan.spanId,
|
|
161
|
-
name: `tool.${
|
|
197
|
+
name: `tool.${safeToolCategory(call.name)}`,
|
|
162
198
|
start: at,
|
|
163
|
-
attributes: [
|
|
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: [
|
|
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: [
|
|
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,
|
|
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:
|
|
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-
|
|
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",
|
|
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:
|
|
425
|
+
privacy: { contentIncluded: true, originalIdsIncluded: true, absolutePathsIncluded: true },
|
|
363
426
|
};
|
|
364
427
|
}
|
|
365
428
|
//# sourceMappingURL=export.js.map
|