psyclaw 0.26.3 → 0.27.0

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 (42) hide show
  1. package/README.md +35 -8
  2. package/dist/src/adapters/pi/extension.js +274 -119
  3. package/dist/src/adapters/pi/extension.js.map +1 -1
  4. package/dist/src/branding.d.ts +9 -0
  5. package/dist/src/branding.js +23 -0
  6. package/dist/src/branding.js.map +1 -1
  7. package/dist/src/chat.d.ts +3 -0
  8. package/dist/src/chat.js +22 -6
  9. package/dist/src/chat.js.map +1 -1
  10. package/dist/src/cli.js +20 -8
  11. package/dist/src/cli.js.map +1 -1
  12. package/dist/src/index.d.ts +2 -0
  13. package/dist/src/index.js +2 -0
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/setup.d.ts +1 -1
  16. package/dist/src/setup.js +12 -4
  17. package/dist/src/setup.js.map +1 -1
  18. package/dist/src/skills/recommended.d.ts +75 -0
  19. package/dist/src/skills/recommended.js +291 -0
  20. package/dist/src/skills/recommended.js.map +1 -0
  21. package/dist/src/style/cli-ui.js +2 -1
  22. package/dist/src/style/cli-ui.js.map +1 -1
  23. package/dist/src/telemetry/export.d.ts +24 -0
  24. package/dist/src/telemetry/export.js +264 -0
  25. package/dist/src/telemetry/export.js.map +1 -0
  26. package/dist/src/tui/skill-manager.d.ts +49 -0
  27. package/dist/src/tui/skill-manager.js +133 -0
  28. package/dist/src/tui/skill-manager.js.map +1 -0
  29. package/dist/src/updates/registry.d.ts +1 -0
  30. package/dist/src/updates/registry.js +19 -0
  31. package/dist/src/updates/registry.js.map +1 -1
  32. package/dist/src/updates/update.d.ts +32 -4
  33. package/dist/src/updates/update.js +163 -6
  34. package/dist/src/updates/update.js.map +1 -1
  35. package/package.json +4 -3
  36. package/scripts/rebrand-pi.mjs +16 -12
  37. package/skills/core/citation-audit/SKILL.md +9 -9
  38. package/skills/core/evidence-capture/SKILL.md +9 -9
  39. package/skills/core/manifest.json +15 -15
  40. package/skills/core/research-brief/SKILL.md +8 -8
  41. package/skills/core/research-intake/SKILL.md +9 -9
  42. package/skills/recommended/catalog.json +14 -13
@@ -1,5 +1,5 @@
1
1
  import { access } from "node:fs/promises";
2
- import { join } from "node:path";
2
+ import { dirname, join } from "node:path";
3
3
  import { PI_AI, PI_CODING_AGENT, resolvePsyClawManifest } from "./manifest.js";
4
4
  import { compareSemver } from "./status.js";
5
5
  /** Reject anything that is not a plain, installable semver (guards the spawn). */
@@ -27,14 +27,171 @@ async function packageManagerAt(root) {
27
27
  }
28
28
  function buildCommand(manager, version) {
29
29
  const spec = `${PI_AI}@${version} ${PI_CODING_AGENT}@${version}`;
30
- return manager === "pnpm" ? `pnpm add --save-exact ${spec}` : `npm install --save-exact ${spec}`;
30
+ return manager === "pnpm"
31
+ ? `pnpm add --save-exact ${spec}`
32
+ : `npm install --save-exact --omit=dev --legacy-peer-deps ${spec}`;
33
+ }
34
+ function buildProductCommand(version) {
35
+ return `npm install --global psyclaw@${version}`;
36
+ }
37
+ async function hasSourceLockfile(root) {
38
+ for (const file of ["pnpm-lock.yaml", "package-lock.json"]) {
39
+ try {
40
+ await access(join(root, file));
41
+ return true;
42
+ }
43
+ catch {
44
+ // keep looking
45
+ }
46
+ }
47
+ return false;
48
+ }
49
+ /**
50
+ * Update the installed PsyClaw product together with the exact Pi runtime
51
+ * declared by that release. Updating the whole product keeps PsyClaw's code,
52
+ * extensions, banner and tested runtime in one user-facing operation.
53
+ * Source checkouts are deliberately not overwritten; developers update them
54
+ * through Git and rebuild explicitly.
55
+ */
56
+ export async function updatePsyClaw(options) {
57
+ const now = options.now ?? (() => new Date().toISOString());
58
+ const startedAt = now();
59
+ const finish = (receipt) => ({
60
+ schemaVersion: "psyclaw/product-update/v1",
61
+ startedAt,
62
+ finishedAt: now(),
63
+ ...receipt,
64
+ });
65
+ const manifest = await resolvePsyClawManifest(options.packageRoot);
66
+ const emptyRuntime = { packageName: PI_CODING_AGENT };
67
+ if (manifest === undefined) {
68
+ return finish({
69
+ ok: false,
70
+ executed: false,
71
+ reasonCode: "update-skipped",
72
+ reason: "psyclaw package.json not found",
73
+ psyclaw: { packageName: "psyclaw" },
74
+ runtime: emptyRuntime,
75
+ commands: [],
76
+ });
77
+ }
78
+ const psyclaw = { packageName: "psyclaw", before: manifest.version };
79
+ const runtime = {
80
+ packageName: PI_CODING_AGENT,
81
+ ...(manifest.piVersion === undefined ? {} : { before: manifest.piVersion }),
82
+ };
83
+ if (await hasSourceLockfile(manifest.root)) {
84
+ return finish({
85
+ ok: false,
86
+ executed: false,
87
+ reasonCode: "update-skipped",
88
+ reason: "source checkout detected; update with Git, then run pnpm install and pnpm build",
89
+ psyclaw,
90
+ runtime,
91
+ commands: [],
92
+ });
93
+ }
94
+ const publishedPsyClawVersion = await options.registry.latestNpm("psyclaw");
95
+ const latestDependencies = publishedPsyClawVersion === undefined
96
+ ? undefined
97
+ : await options.registry.npmDependencies("psyclaw", publishedPsyClawVersion);
98
+ const publishedPiVersion = latestDependencies?.[PI_CODING_AGENT];
99
+ if (publishedPsyClawVersion === undefined || publishedPiVersion === undefined) {
100
+ return finish({
101
+ ok: false,
102
+ executed: false,
103
+ reasonCode: "update-skipped",
104
+ reason: publishedPsyClawVersion === undefined
105
+ ? "latest PsyClaw release unavailable"
106
+ : "latest PsyClaw dependency manifest unavailable",
107
+ psyclaw: { ...psyclaw, ...(publishedPsyClawVersion === undefined ? {} : { latest: publishedPsyClawVersion }) },
108
+ runtime: { ...runtime, ...(publishedPiVersion === undefined ? {} : { latest: publishedPiVersion }) },
109
+ commands: [],
110
+ });
111
+ }
112
+ const latestPsyClaw = publishedPsyClawVersion;
113
+ const latestPi = publishedPiVersion;
114
+ if (!isSafeVersion(latestPsyClaw) || !isSafeVersion(latestPi)) {
115
+ return finish({
116
+ ok: false,
117
+ executed: false,
118
+ reasonCode: "update-skipped",
119
+ reason: !isSafeVersion(latestPsyClaw)
120
+ ? `refusing unsafe PsyClaw version: ${latestPsyClaw}`
121
+ : `refusing unsafe Pi version: ${latestPi}`,
122
+ psyclaw: { ...psyclaw, latest: latestPsyClaw },
123
+ runtime: { ...runtime, latest: latestPi },
124
+ commands: [],
125
+ });
126
+ }
127
+ const selfComparison = compareSemver(manifest.version, latestPsyClaw);
128
+ const runtimeComparison = manifest.piVersion === undefined ? null : compareSemver(manifest.piVersion, latestPi);
129
+ const selfNeedsUpdate = options.force === true || selfComparison === null || selfComparison < 0;
130
+ const runtimeNeedsRepair = selfComparison === 0 && runtimeComparison !== 0;
131
+ const commands = [];
132
+ // Reinstalling the product also installs its tested, exact Pi dependency.
133
+ // Force can repair a locally drifted runtime without composing an untested
134
+ // PsyClaw/Pi version pair.
135
+ if (selfNeedsUpdate || runtimeNeedsRepair) {
136
+ commands.push(buildProductCommand(latestPsyClaw));
137
+ }
138
+ const versions = {
139
+ psyclaw: { ...psyclaw, latest: latestPsyClaw },
140
+ runtime: { ...runtime, latest: latestPi },
141
+ };
142
+ if (commands.length === 0) {
143
+ return finish({
144
+ ok: true,
145
+ executed: false,
146
+ reasonCode: "already-up-to-date",
147
+ psyclaw: { ...versions.psyclaw, after: latestPsyClaw },
148
+ runtime: { ...versions.runtime, after: manifest.piVersion ?? latestPi },
149
+ commands,
150
+ });
151
+ }
152
+ if (options.executor === undefined) {
153
+ return finish({
154
+ ok: true,
155
+ executed: false,
156
+ reasonCode: "update-skipped",
157
+ reason: "check only: no changes applied",
158
+ ...versions,
159
+ commands,
160
+ });
161
+ }
162
+ for (const command of commands) {
163
+ // Do not keep the updater's cwd inside the package npm is replacing. This
164
+ // matters on Windows, where an in-use directory cannot be removed.
165
+ const { exitCode } = await options.executor({ command, cwd: dirname(manifest.root) });
166
+ if (exitCode !== 0) {
167
+ return finish({
168
+ ok: false,
169
+ executed: true,
170
+ reasonCode: "update-failed",
171
+ reason: `update command failed: ${command}`,
172
+ psyclaw: versions.psyclaw,
173
+ runtime: versions.runtime,
174
+ commands,
175
+ exitCode,
176
+ });
177
+ }
178
+ }
179
+ return finish({
180
+ ok: true,
181
+ executed: true,
182
+ reasonCode: "update-applied",
183
+ psyclaw: { ...versions.psyclaw, after: latestPsyClaw },
184
+ runtime: { ...versions.runtime, after: latestPi },
185
+ commands,
186
+ exitCode: 0,
187
+ });
31
188
  }
32
189
  /**
33
190
  * Update the bundled Pi runtime by re-pinning both `@earendil-works/pi-*`
34
191
  * packages to the latest official release. This is the write-side counterpart
35
- * to `checkUpdates`: it is `--yes`/executor-gated, refuses non-semver versions,
36
- * and always returns a structured receipt. Without an executor it is a pure
37
- * plan (no workspace mutation).
192
+ * to `checkUpdates`: it is executor-gated, refuses non-semver versions, and
193
+ * always returns a structured receipt. Without an executor it is a pure plan
194
+ * (no workspace mutation).
38
195
  */
39
196
  export async function updateBundledPi(options) {
40
197
  const now = options.now ?? (() => new Date().toISOString());
@@ -107,7 +264,7 @@ export async function updateBundledPi(options) {
107
264
  ok: true,
108
265
  executed: false,
109
266
  reasonCode: "update-skipped",
110
- reason: "dry run: re-run with --yes to apply",
267
+ reason: "dry run: no executor provided",
111
268
  command,
112
269
  after: latestVersion,
113
270
  ...withLatest,
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/updates/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/updates/update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "psyclaw",
3
- "version": "0.26.3",
3
+ "version": "0.27.0",
4
4
  "description": "A standalone, evidence-grounded social-science research agent — a conversation-driven agent that bundles the Pi runtime with psyclaw's research contracts, evidence gates, and workflows",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -58,8 +58,9 @@
58
58
  "prepublishOnly": "pnpm check:branding && pnpm build"
59
59
  },
60
60
  "dependencies": {
61
- "@earendil-works/pi-ai": "0.84.1",
62
- "@earendil-works/pi-coding-agent": "0.84.1",
61
+ "@earendil-works/pi-ai": "0.84.4",
62
+ "@earendil-works/pi-coding-agent": "0.84.4",
63
+ "@earendil-works/pi-tui": "0.84.4",
63
64
  "ink": "^7.1.1",
64
65
  "react": "^19.2.8",
65
66
  "typebox": "1.3.7",
@@ -8,7 +8,7 @@
8
8
  * 3. 3D 侧影电路方块字 (3D Isometric Shadow Block: ██████╗)
9
9
  * 4. 学术罗马衬线体 (Academic Roman Serif: ╔══╗)
10
10
  *
11
- * Pets are opt-in via /pet and only render when the terminal is wide enough.
11
+ * Pets are opt-in via /pet and render below the primary wordmark.
12
12
  */
13
13
  import { execFile } from "node:child_process";
14
14
  import { readFile, rename, rm, writeFile } from "node:fs/promises";
@@ -17,7 +17,7 @@ import { basename, dirname, join } from "node:path";
17
17
  import { fileURLToPath } from "node:url";
18
18
 
19
19
  const NAME = "PsyClaw";
20
- const LOCKED_PI_VERSION = "0.84.1";
20
+ const LOCKED_PI_VERSION = "0.84.4";
21
21
  // Retain the predecessor Pi profile so existing models, themes, packages, and
22
22
  // skills survive the product rename. PsyClaw's project data remains separate.
23
23
  const CONFIG_DIR = `.psy${"pi"}`;
@@ -106,15 +106,16 @@ function buildCustomVariant(fontLines, dogLines = []) {
106
106
  return `[\n${rows.join(",\n")}\n ]`;
107
107
  }
108
108
 
109
- // Every default variant is pet-free. Pet variants are selected only when
110
- // PSYCLAW_PET=1 and the complete row fits the current terminal.
109
+ // Every default variant is pet-free. The pet is appended below the wordmark
110
+ // when enabled so it never forces PsyClaw's primary branding into a smaller
111
+ // layout.
111
112
  const VAR_COMPACT = `[
112
113
  \` \\x1b[1m${GRAD_2ROW_0}\\x1b[0m \\x1b[38;2;148;163;184mv\${process.env.PSYCLAW_VERSION ?? this.version}\\x1b[0m\`,
113
114
  \` \\x1b[1m${GRAD_2ROW_1}\\x1b[0m\`
114
115
  ]`;
115
- const VAR_COMPACT_PET = `[
116
- \` \\x1b[1m${GRAD_2ROW_0}\\x1b[0m ${PUP_SCHOLAR_TOP}\`,
117
- \` \\x1b[1m${GRAD_2ROW_1}\\x1b[0m ${PUP_SCHOLAR_BOT}\`
116
+ const VAR_STACKED_PET = `[
117
+ \` ${PUP_SCHOLAR_TOP}\`,
118
+ \` ${PUP_SCHOLAR_BOT}\`
118
119
  ]`;
119
120
  const VAR_SLANT_CLASSIC = buildCustomVariant(FONT_SLANT_CLASSIC);
120
121
  const VAR_3D_BLOCK = buildCustomVariant(FONT_3D_BLOCK);
@@ -127,7 +128,6 @@ const PSYCLAW_DYNAMIC_BANNER = `const bannerCandidates = [
127
128
  ${VAR_COMPACT}, ${VAR_SLANT_CLASSIC}, ${VAR_3D_BLOCK}, ${VAR_SERIF},
128
129
  ];
129
130
  const compactBanner = ${VAR_COMPACT};
130
- const petBanner = ${VAR_COMPACT_PET};
131
131
  const terminalColumns = process.stdout.columns ?? 80;
132
132
  const ansiPattern = /\\x1b\\[[0-9;]*m/g;
133
133
  const cellWidth = (text) => Array.from(text.replace(ansiPattern, "")).reduce((width, char) => {
@@ -143,10 +143,13 @@ const fittingBanners = bannerCandidates.filter((rows) => bannerWidth(rows) <= te
143
143
  const tinyBanner = [terminalColumns >= 22
144
144
  ? \` ψ PsyClaw v\${process.env.PSYCLAW_VERSION ?? this.version}\`
145
145
  : " PsyClaw"];
146
- const defaultPool = fittingBanners.length > 0 ? fittingBanners : [tinyBanner];
147
- const chosenBanner = process.env.PSYCLAW_PET === "1" && bannerWidth(petBanner) <= terminalColumns - 4
148
- ? petBanner
149
- : defaultPool[Math.floor(Math.random() * defaultPool.length)];
146
+ const chosenBanner = fittingBanners.reduce((largest, candidate) => {
147
+ if (!largest) return candidate;
148
+ if (candidate.length !== largest.length) return candidate.length > largest.length ? candidate : largest;
149
+ return bannerWidth(candidate) > bannerWidth(largest) ? candidate : largest;
150
+ }, undefined) ?? tinyBanner;
151
+ const petEnabled = process.env.PSYCLAW_PET === "1";
152
+ const stackedPet = petEnabled ? ${VAR_STACKED_PET} : [];
150
153
  const detailLines = terminalColumns >= 86 ? [
151
154
  \` ${GRAD_PIPELINE}\`,
152
155
  \` ${GRAD_PROTOCOL}\`,
@@ -155,6 +158,7 @@ if (terminalColumns >= 76) detailLines.push(\` ${GRAD_WORKBENCH}\`);
155
158
  const logo = [
156
159
  "",
157
160
  ...chosenBanner,
161
+ ...stackedPet,
158
162
  "",
159
163
  ...detailLines,
160
164
  "",
@@ -1,9 +1,9 @@
1
- ---
2
- name: citation-audit
3
- description: Check claim-to-evidence links, citation fields, conflicts, and unsupported language before writing a research brief.
4
- license: MIT
5
- ---
6
-
7
- # Citation Audit
8
-
9
- Split factual statements into Claims. Require a qualifying source and locator for every supported Claim, preserve contradictory evidence, and downgrade uncertainty instead of filling gaps. A title match, abstract-only record, or model memory is not proof of a result or causal statement.
1
+ ---
2
+ name: citation-audit
3
+ description: Check claim-to-evidence links, citation fields, conflicts, and unsupported language before writing a research brief.
4
+ license: MIT
5
+ ---
6
+
7
+ # Citation Audit
8
+
9
+ Split factual statements into Claims. Require a qualifying source and locator for every supported Claim, preserve contradictory evidence, and downgrade uncertainty instead of filling gaps. A title match, abstract-only record, or model memory is not proof of a result or causal statement.
@@ -1,9 +1,9 @@
1
- ---
2
- name: evidence-capture
3
- description: Import local or user-provided sources into an append-only evidence ledger with provenance, locator, access status, and SHA-256.
4
- license: MIT
5
- ---
6
-
7
- # Evidence Capture
8
-
9
- Record the original locator, retrieval time, source type, evidence level, exact quote where applicable, page or section locator, and content hash. Treat metadata as metadata, user-provided material as unverified until checked, and failed or partial conversion as an explicit status. Do not download arbitrary full text or write to `data/raw` without an approved, lawful route.
1
+ ---
2
+ name: evidence-capture
3
+ description: Import local or user-provided sources into an append-only evidence ledger with provenance, locator, access status, and SHA-256.
4
+ license: MIT
5
+ ---
6
+
7
+ # Evidence Capture
8
+
9
+ Record the original locator, retrieval time, source type, evidence level, exact quote where applicable, page or section locator, and content hash. Treat metadata as metadata, user-provided material as unverified until checked, and failed or partial conversion as an explicit status. Do not download arbitrary full text or write to `data/raw` without an approved, lawful route.
@@ -1,15 +1,15 @@
1
- {
2
- "schemaVersion": "psyclaw/skill-pack/v1",
3
- "id": "psyclaw-core",
4
- "version": "0.1.0",
5
- "skills": [
6
- "research-intake",
7
- "evidence-capture",
8
- "citation-audit",
9
- "research-brief"
10
- ],
11
- "enabledByDefault": ["research-intake", "evidence-capture", "citation-audit", "research-brief"],
12
- "source": {"kind": "workspace", "ref": "initial-mvp"},
13
- "license": {"spdx": "MIT", "evidenceRef": "../../LICENSE"},
14
- "dependencyStatus": "ready"
15
- }
1
+ {
2
+ "schemaVersion": "psyclaw/skill-pack/v1",
3
+ "id": "psyclaw-core",
4
+ "version": "0.1.0",
5
+ "skills": [
6
+ "research-intake",
7
+ "evidence-capture",
8
+ "citation-audit",
9
+ "research-brief"
10
+ ],
11
+ "enabledByDefault": ["research-intake", "evidence-capture", "citation-audit", "research-brief"],
12
+ "source": {"kind": "workspace", "ref": "initial-mvp"},
13
+ "license": {"spdx": "MIT", "evidenceRef": "../../LICENSE"},
14
+ "dependencyStatus": "ready"
15
+ }
@@ -1,11 +1,11 @@
1
- ---
2
- name: research-brief
3
- description: Produce a concise, evidence-grounded research brief from an approved intake card and audited local evidence ledger.
4
- license: MIT
5
- ---
6
-
7
- # Research Brief
8
-
1
+ ---
2
+ name: research-brief
3
+ description: Produce a concise, evidence-grounded research brief from an approved intake card and audited local evidence ledger.
4
+ license: MIT
5
+ ---
6
+
7
+ # Research Brief
8
+
9
9
  Follow intake -> capture -> ledger -> audit -> write -> handoff. Write only from accepted evidence and label gaps, contradictions, exploratory claims, and human decisions. Include a provenance manifest, verification verdict, and executable handoff; do not invent citations, data, methods, or numerical results.
10
10
 
11
11
  For manuscript outputs, use continuous academic paragraphs rather than bullet-heavy notes. Apply a neutral submission format: Times New Roman for Latin text, SimSun/宋体 fallback for Chinese, black headings and body text, and no decorative color. Before finalization, ensure each factual or literature-dependent paragraph has a verified citation; if sources are insufficient, retrieve more or mark the section uncertain instead of fabricating references.
@@ -1,9 +1,9 @@
1
- ---
2
- name: research-intake
3
- description: Turn a social-science research request into a bounded design card with paradigm, scope, ethics, and output contract.
4
- license: MIT
5
- ---
6
-
7
- # Research Intake
8
-
9
- Collect the research goal, paradigm, population or corpus, time range, language and geography, exploratory versus confirmatory status, ethics constraints, and desired output. Ask for missing blocking fields before any retrieval or analysis. Keep the design card in `.psyclaw/project.json` and never infer consent or access rights.
1
+ ---
2
+ name: research-intake
3
+ description: Turn a social-science research request into a bounded design card with paradigm, scope, ethics, and output contract.
4
+ license: MIT
5
+ ---
6
+
7
+ # Research Intake
8
+
9
+ Collect the research goal, paradigm, population or corpus, time range, language and geography, exploratory versus confirmatory status, ethics constraints, and desired output. Ask for missing blocking fields before any retrieval or analysis. Keep the design card in `.psyclaw/project.json` and never infer consent or access rights.
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "schemaVersion": "psyclaw/recommended-skills/v1",
3
- "documentVersion": "0.2.0",
3
+ "documentVersion": "0.3.0",
4
+ "syncedAt": "2026-08-29",
4
5
  "sourceDocument": "学术AI_Skill分享资料.pdf",
5
6
  "sourceRef": "local-user-curated",
6
7
  "items": [
7
8
  { "id": "markitdown", "name": "MarkItDown", "kind": "skill", "stage": "统一", "description": "把 PDF、Word、PPT、Excel、HTML 等转换为结构化 Markdown。", "sourceRef": "https://github.com/microsoft/markitdown" },
8
- { "id": "markitdown-pro", "name": "MarkItDown Pro", "kind": "skill", "stage": "统一", "description": "字幕优先、转录回退,把 B 站课程和讲座转成带来源状态的 Markdown。", "sourceRef": "https://github.com/LHT666-hub/markItdown-pro" },
9
+ { "id": "markitdown-bilibili", "name": "MarkItDown + Bilibili", "kind": "skill", "stage": "统一", "description": "字幕优先、转录回退,把 B 站课程和讲座转成带来源状态的 Markdown。", "sourceRef": "https://github.com/LHT666-hub/markItdown-pro" },
9
10
  { "id": "session-handoff", "name": "Session Handoff", "kind": "skill", "stage": "接力", "description": "把长任务的目标、进度、阻塞和下一步写成可核验的交接状态。", "sourceRef": "https://github.com/LHT666-hub/session-handoff" },
10
11
  { "id": "paper-search-mcp", "name": "Paper Search MCP", "kind": "mcp", "stage": "检索", "description": "统一 arXiv、PubMed、OpenAlex、Crossref 等开放来源的论文检索和去重。", "sourceRef": "https://github.com/openags/paper-search-mcp" },
11
12
  { "id": "zotero-translators", "name": "Zotero Translators", "kind": "skill", "stage": "题录", "description": "从出版社和数据库页面提取规范题录、DOI、PDF 和补充材料。", "sourceRef": "https://github.com/zotero/translators" },
@@ -27,26 +28,26 @@
27
28
  { "id": "orca-computer-use", "name": "Orca Computer Use", "kind": "integration", "stage": "Computer Use", "description": "本机已有的桌面可视化控制能力,通过 Orca 的版本化 CLI 读取窗口、无障碍树和截图并执行安全操作。", "sourceRef": "local: computer-use skill / ORCA CLI", "status": "available-if-orca" }
28
29
  ],
29
30
  "installPrep": [
30
- {"id":"markitdown","sourceKind":"github","ref":"fd239d5d2be43d9b68329730206b9312c7d5a388","license":"MIT","command":"python -m pip install markitdown","target":".psyclaw/imports/recommended/markitdown","dependencies":["Python >=3.10"],"status":"review-required","requiresApproval":true,"blockedReason":"Package install is not content-pinned; verify the PyPI version before execution."},
31
- {"id":"markitdown-pro","sourceKind":"github","ref":"a601bb294f57dc03a681d2b9fa91d4bb5627bd2f","license":"MIT","command":"git clone https://github.com/LHT666-hub/markItdown-pro .psyclaw/imports/recommended/markitdown-pro && git -C .psyclaw/imports/recommended/markitdown-pro checkout a601bb294f57dc03a681d2b9fa91d4bb5627bd2f","target":".psyclaw/imports/recommended/markitdown-pro","dependencies":["Git","Python runtime per repository metadata"],"status":"review-required","requiresApproval":true,"blockedReason":"Repository license is verified, but dependency lock and Skill entrypoint still require preflight."},
32
- {"id":"paper-search-mcp","sourceKind":"github","ref":"c8b642183bb725f0a7faec89e58b558df09079d1","license":"MIT","command":"git clone https://github.com/openags/paper-search-mcp .psyclaw/mcp-src/paper-search-mcp && git -C .psyclaw/mcp-src/paper-search-mcp checkout c8b642183bb725f0a7faec89e58b558df09079d1","target":".psyclaw/mcp/paper-search-mcp.json","dependencies":["Git","Python/uv per repository metadata"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify package entrypoint and lockfile before registering a stdio server."},
33
- {"id":"session-handoff","sourceKind":"github","ref":"e18e41900953e0126b6beb0b24387bbaf2178f44","license":"MIT","command":"git clone https://github.com/LHT666-hub/session-handoff .psyclaw/imports/recommended/session-handoff && git -C .psyclaw/imports/recommended/session-handoff checkout e18e41900953e0126b6beb0b24387bbaf2178f44","target":".psyclaw/imports/recommended/session-handoff","dependencies":["Git"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify SKILL.md and dependency tree before activation."},
34
- {"id":"zotero-translators","sourceKind":"github","ref":"master","license":"unknown","command":"git clone https://github.com/zotero/translators .psyclaw/imports/recommended/zotero-translators && git -C .psyclaw/imports/recommended/zotero-translators checkout master","target":".psyclaw/imports/recommended/zotero-translators","dependencies":["Git","Zotero-compatible translator runtime"],"status":"blocked","requiresApproval":true,"blockedReason":"License and immutable commit were not verified in the current preflight."},
35
- {"id":"scansci-pdf","sourceKind":"github","ref":"master","license":"Apache-2.0","command":"git clone https://github.com/Rimagination/scansci-pdf .psyclaw/imports/recommended/scansci-pdf && git -C .psyclaw/imports/recommended/scansci-pdf checkout master","target":".psyclaw/imports/recommended/scansci-pdf","dependencies":["Git","repository runtime requirements"],"status":"review-required","requiresApproval":true,"blockedReason":"Immutable commit and executable Skill entrypoint still require preflight."},
31
+ {"id":"markitdown","sourceKind":"github","ref":"9dc0d6579b8739c9d0671ff205e071e3053c7df1","license":"MIT","command":"python -m pip install markitdown","target":".psyclaw/imports/recommended/markitdown","dependencies":["Python >=3.10"],"status":"review-required","requiresApproval":true,"blockedReason":"Package install is not content-pinned; verify the PyPI version before execution."},
32
+ {"id":"markitdown-bilibili","sourceKind":"github","sourceUrl":"https://github.com/LHT666-hub/markItdown-pro.git","ref":"a601bb294f57dc03a681d2b9fa91d4bb5627bd2f","skillPath":"markitdown-bilibili","skillName":"markitdown-bilibili","license":"MIT","target":".psyclaw/imports/recommended/markitdown-bilibili","dependencies":["Python >=3.10","markitdown[all]","yt-dlp","FFmpeg (optional for transcription)"],"status":"review-required","requiresApproval":true,"blockedReason":"Runtime dependencies are installed separately and must pass the Skill doctor before conversion."},
33
+ {"id":"paper-search-mcp","sourceKind":"github","ref":"234678ab231074a7977320978ee0496dcdaddd1f","license":"MIT","command":"git clone https://github.com/openags/paper-search-mcp .psyclaw/mcp-src/paper-search-mcp && git -C .psyclaw/mcp-src/paper-search-mcp checkout 234678ab231074a7977320978ee0496dcdaddd1f","target":".psyclaw/mcp/paper-search-mcp.json","dependencies":["Git","Python/uv per repository metadata"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify package entrypoint and lockfile before registering a stdio server."},
34
+ {"id":"session-handoff","sourceKind":"github","sourceUrl":"https://github.com/LHT666-hub/session-handoff.git","ref":"e18e41900953e0126b6beb0b24387bbaf2178f44","skillPath":"session-handoff","skillName":"session-handoff","license":"MIT","target":".psyclaw/imports/recommended/session-handoff","dependencies":[],"status":"review-required","requiresApproval":true,"blockedReason":"Install manifest and content hash must pass validation before activation."},
35
+ {"id":"zotero-translators","sourceKind":"github","ref":"409a58d4a84c4e2bb5a673aaf018595ba0767b46","license":"unknown","command":"git clone https://github.com/zotero/translators .psyclaw/imports/recommended/zotero-translators && git -C .psyclaw/imports/recommended/zotero-translators checkout 409a58d4a84c4e2bb5a673aaf018595ba0767b46","target":".psyclaw/imports/recommended/zotero-translators","dependencies":["Git","Zotero-compatible translator runtime"],"status":"blocked","requiresApproval":true,"blockedReason":"License was not verified in the current preflight."},
36
+ {"id":"scansci-pdf","sourceKind":"github","ref":"8278ff83d97f3296f8d0a456efe5e0b71b9f2f44","license":"Apache-2.0","command":"git clone https://github.com/Rimagination/scansci-pdf .psyclaw/imports/recommended/scansci-pdf && git -C .psyclaw/imports/recommended/scansci-pdf checkout 8278ff83d97f3296f8d0a456efe5e0b71b9f2f44","target":".psyclaw/imports/recommended/scansci-pdf","dependencies":["Git","repository runtime requirements"],"status":"review-required","requiresApproval":true,"blockedReason":"Executable Skill entrypoint and dependencies still require preflight."},
36
37
  {"id":"scholarbridge","sourceKind":"github","ref":"8e16393534068f4f1e18dfe5ce3b1c15a94a02c4","license":"unknown","command":"git clone https://github.com/LHT666-hub/ScholarBridge .psyclaw/imports/recommended/scholarbridge && git -C .psyclaw/imports/recommended/scholarbridge checkout 8e16393534068f4f1e18dfe5ce3b1c15a94a02c4","target":".psyclaw/imports/recommended/scholarbridge","dependencies":["Git"],"status":"blocked","requiresApproval":true,"blockedReason":"Repository license is not declared by GitHub metadata."},
37
38
  {"id":"mentorforge","sourceKind":"github","ref":"14de3bc28ee7e74273c69fc3e4672426f4b335d0","license":"MIT","command":"git clone https://github.com/qwqalice/MentorForge .psyclaw/imports/recommended/mentorforge && git -C .psyclaw/imports/recommended/mentorforge checkout 14de3bc28ee7e74273c69fc3e4672426f4b335d0","target":".psyclaw/imports/recommended/mentorforge","dependencies":["Git"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify Skill entrypoint and runtime dependencies before activation."},
38
39
  {"id":"supervisor-skills","sourceKind":"github","ref":"aff5de9e5b902df0ef51e955d4c78b22793d763a","license":"NOASSERTION","command":"git clone https://github.com/HKUSTDial/Supervisor-Skills .psyclaw/imports/recommended/supervisor-skills && git -C .psyclaw/imports/recommended/supervisor-skills checkout aff5de9e5b902df0ef51e955d4c78b22793d763a","target":".psyclaw/imports/recommended/supervisor-skills","dependencies":["Git"],"status":"blocked","requiresApproval":true,"blockedReason":"License requires human review before installation."},
39
- {"id":"openkb","sourceKind":"github","ref":"master","license":"Apache-2.0","command":"git clone https://github.com/VectifyAI/OpenKB .psyclaw/imports/recommended/openkb && git -C .psyclaw/imports/recommended/openkb checkout master","target":".psyclaw/imports/recommended/openkb","dependencies":["Git","repository runtime requirements"],"status":"review-required","requiresApproval":true,"blockedReason":"Immutable commit and dependency lock still require preflight."},
40
- {"id":"corpus2skill","sourceKind":"github","ref":"e1f036154014d3833f0dabb831115be52ba98aa4","license":"unknown","command":"git clone https://github.com/dukesun99/Corpus2Skill .psyclaw/imports/recommended/corpus2skill && git -C .psyclaw/imports/recommended/corpus2skill checkout e1f036154014d3833f0dabb831115be52ba98aa4","target":".psyclaw/imports/recommended/corpus2skill","dependencies":["Git"],"status":"blocked","requiresApproval":true,"blockedReason":"License is not verified."},
41
- {"id":"academic-reference-matcher","sourceKind":"github","ref":"189a5ddbeaca8e1a594c28ac5d4c694741c01db9","license":"MIT","command":"git clone https://github.com/keros68/academic-reference-matcher .psyclaw/imports/recommended/academic-reference-matcher && git -C .psyclaw/imports/recommended/academic-reference-matcher checkout 189a5ddbeaca8e1a594c28ac5d4c694741c01db9","target":".psyclaw/imports/recommended/academic-reference-matcher","dependencies":["Git"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify entrypoint and dependency lock before activation."},
40
+ {"id":"openkb","sourceKind":"github","ref":"ff54396e575ee6feb0113b631a34caa082b441cc","license":"Apache-2.0","command":"git clone https://github.com/VectifyAI/OpenKB .psyclaw/imports/recommended/openkb && git -C .psyclaw/imports/recommended/openkb checkout ff54396e575ee6feb0113b631a34caa082b441cc","target":".psyclaw/imports/recommended/openkb","dependencies":["Git","repository runtime requirements"],"status":"review-required","requiresApproval":true,"blockedReason":"Dependency lock still requires preflight."},
41
+ {"id":"corpus2skill","sourceKind":"github","ref":"bdc1e436d97d2b3559b284ff04056178d2677f90","license":"unknown","command":"git clone https://github.com/dukesun99/Corpus2Skill .psyclaw/imports/recommended/corpus2skill && git -C .psyclaw/imports/recommended/corpus2skill checkout bdc1e436d97d2b3559b284ff04056178d2677f90","target":".psyclaw/imports/recommended/corpus2skill","dependencies":["Git"],"status":"blocked","requiresApproval":true,"blockedReason":"License is not verified."},
42
+ {"id":"academic-reference-matcher","sourceKind":"github","sourceUrl":"https://github.com/keros68/academic-reference-matcher.git","ref":"189a5ddbeaca8e1a594c28ac5d4c694741c01db9","skillPath":".","skillName":"academic-reference-matcher","license":"MIT","target":".psyclaw/imports/recommended/academic-reference-matcher","dependencies":[],"status":"review-required","requiresApproval":true,"blockedReason":"Install manifest and content hash must pass validation before activation."},
42
43
  {"id":"pskoett-ai-skills","sourceKind":"github","ref":"20e64cec1529d9c371fdcc20c751b7ef10b68af7","license":"unknown","command":"git clone https://github.com/pskoett/pskoett-ai-skills .psyclaw/imports/recommended/pskoett-ai-skills && git -C .psyclaw/imports/recommended/pskoett-ai-skills checkout 20e64cec1529d9c371fdcc20c751b7ef10b68af7","target":".psyclaw/imports/recommended/pskoett-ai-skills","dependencies":["Git"],"status":"blocked","requiresApproval":true,"blockedReason":"License is not verified."},
43
44
  {"id":"omnidistill","sourceKind":"github","ref":"109141d0f55c0dbaac2563bcf700d6ef99c39f6b","license":"unknown","command":"git clone https://github.com/LHT666-hub/OmniDistill .psyclaw/imports/recommended/omnidistill && git -C .psyclaw/imports/recommended/omnidistill checkout 109141d0f55c0dbaac2563bcf700d6ef99c39f6b","target":".psyclaw/imports/recommended/omnidistill","dependencies":["Git"],"status":"blocked","requiresApproval":true,"blockedReason":"License is not verified."},
44
45
  {"id":"smartplot","sourceKind":"website","ref":null,"license":"unknown","command":null,"target":null,"dependencies":[],"status":"blocked","requiresApproval":true,"blockedReason":"Source is a website rather than a verified package repository."},
45
46
  {"id":"ars-academic-research-skill","sourceKind":"user-provided","ref":null,"license":"unknown","command":null,"target":".psyclaw/imports/recommended/ars-academic-research-skill","dependencies":[],"status":"blocked","requiresApproval":true,"blockedReason":"User-provided source/ref is still required."},
46
47
  {"id":"nature-skill-suite","sourceKind":"local","ref":null,"license":"unknown","command":"copy reviewed nature-* skills into .psyclaw/imports/recommended/nature-skill-suite","target":".psyclaw/imports/recommended/nature-skill-suite","dependencies":["local skill source"],"status":"review-required","requiresApproval":true,"blockedReason":"Each local Skill needs independent source, version, hash, license and dependency evidence."},
47
- {"id":"playwright-mcp","sourceKind":"github","ref":"7e0457a7cbf88823bf0146d12c46ae12c6818247","license":"Apache-2.0","command":"npx -y @playwright/mcp@latest","target":".psyclaw/mcp/playwright-mcp.json","dependencies":["Node.js >=18","npm or pnpm"],"status":"review-required","requiresApproval":true,"blockedReason":"npm package version must be pinned before execution; browser-session access requires a separate approval."},
48
+ {"id":"playwright-mcp","sourceKind":"github","ref":"d0c29a5658b93b6e62435ceaf362a7d7dfc3522d","license":"Apache-2.0","command":"npx -y @playwright/mcp@latest","target":".psyclaw/mcp/playwright-mcp.json","dependencies":["Node.js >=18","npm or pnpm"],"status":"review-required","requiresApproval":true,"blockedReason":"npm package version must be pinned before execution; browser-session access requires a separate approval."},
48
49
  {"id":"browserbase-stagehand-mcp","sourceKind":"github","ref":"3e6f53461949037d5e65dd425da3ceb1263f11d6","license":"Apache-2.0","command":"npm install --save-dev @browserbasehq/stagehand","target":".psyclaw/mcp/browserbase-stagehand-mcp.json","dependencies":["Node.js","Browserbase credentials if hosted"],"status":"blocked","requiresApproval":true,"blockedReason":"Repository is archived and hosted use requires credentials; do not enable automatically."},
49
- {"id":"computer-use-mcp","sourceKind":"github","ref":"main","license":"MIT","command":"git clone https://github.com/zavora-ai/computer-use-mcp .psyclaw/imports/recommended/computer-use-mcp && git -C .psyclaw/imports/recommended/computer-use-mcp checkout main","target":".psyclaw/mcp/computer-use-mcp.json","dependencies":["Git","OS accessibility permissions"],"status":"review-required","requiresApproval":true,"blockedReason":"Immutable commit and desktop control permissions require preflight."},
50
+ {"id":"computer-use-mcp","sourceKind":"github","ref":"5e52308f1ca667cb1433cfd99065fb792db44652","license":"MIT","command":"git clone https://github.com/zavora-ai/computer-use-mcp .psyclaw/imports/recommended/computer-use-mcp && git -C .psyclaw/imports/recommended/computer-use-mcp checkout 5e52308f1ca667cb1433cfd99065fb792db44652","target":".psyclaw/mcp/computer-use-mcp.json","dependencies":["Git","OS accessibility permissions"],"status":"review-required","requiresApproval":true,"blockedReason":"Desktop control permissions require preflight."},
50
51
  {"id":"orca-computer-use","sourceKind":"local","ref":null,"license":"unknown","command":"use installed Orca computer-use integration after capability check","target":".psyclaw/mcp/orca-computer-use.json","dependencies":["Orca CLI"],"status":"review-required","requiresApproval":true,"blockedReason":"Local Orca version and manifest must be checked at runtime."}
51
52
  ]
52
53
  }