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.
- package/README.md +35 -8
- package/dist/src/adapters/pi/extension.js +274 -119
- package/dist/src/adapters/pi/extension.js.map +1 -1
- package/dist/src/branding.d.ts +9 -0
- package/dist/src/branding.js +23 -0
- package/dist/src/branding.js.map +1 -1
- package/dist/src/chat.d.ts +3 -0
- package/dist/src/chat.js +22 -6
- package/dist/src/chat.js.map +1 -1
- package/dist/src/cli.js +20 -8
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/setup.d.ts +1 -1
- package/dist/src/setup.js +12 -4
- package/dist/src/setup.js.map +1 -1
- package/dist/src/skills/recommended.d.ts +75 -0
- package/dist/src/skills/recommended.js +291 -0
- package/dist/src/skills/recommended.js.map +1 -0
- package/dist/src/style/cli-ui.js +2 -1
- package/dist/src/style/cli-ui.js.map +1 -1
- package/dist/src/telemetry/export.d.ts +24 -0
- package/dist/src/telemetry/export.js +264 -0
- package/dist/src/telemetry/export.js.map +1 -0
- package/dist/src/tui/skill-manager.d.ts +49 -0
- package/dist/src/tui/skill-manager.js +133 -0
- package/dist/src/tui/skill-manager.js.map +1 -0
- package/dist/src/updates/registry.d.ts +1 -0
- package/dist/src/updates/registry.js +19 -0
- package/dist/src/updates/registry.js.map +1 -1
- package/dist/src/updates/update.d.ts +32 -4
- package/dist/src/updates/update.js +163 -6
- package/dist/src/updates/update.js.map +1 -1
- package/package.json +4 -3
- package/scripts/rebrand-pi.mjs +16 -12
- package/skills/core/citation-audit/SKILL.md +9 -9
- package/skills/core/evidence-capture/SKILL.md +9 -9
- package/skills/core/manifest.json +15 -15
- package/skills/core/research-brief/SKILL.md +8 -8
- package/skills/core/research-intake/SKILL.md +9 -9
- 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"
|
|
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
|
|
36
|
-
*
|
|
37
|
-
*
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
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.
|
|
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.
|
|
62
|
-
"@earendil-works/pi-coding-agent": "0.84.
|
|
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",
|
package/scripts/rebrand-pi.mjs
CHANGED
|
@@ -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
|
|
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.
|
|
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.
|
|
110
|
-
//
|
|
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
|
|
116
|
-
\`
|
|
117
|
-
\`
|
|
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
|
|
147
|
-
|
|
148
|
-
?
|
|
149
|
-
|
|
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.
|
|
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-
|
|
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":"
|
|
31
|
-
{"id":"markitdown-
|
|
32
|
-
{"id":"paper-search-mcp","sourceKind":"github","ref":"
|
|
33
|
-
{"id":"session-handoff","sourceKind":"github","
|
|
34
|
-
{"id":"zotero-translators","sourceKind":"github","ref":"
|
|
35
|
-
{"id":"scansci-pdf","sourceKind":"github","ref":"
|
|
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":"
|
|
40
|
-
{"id":"corpus2skill","sourceKind":"github","ref":"
|
|
41
|
-
{"id":"academic-reference-matcher","sourceKind":"github","
|
|
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":"
|
|
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":"
|
|
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
|
}
|