psyclaw 0.26.2 → 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 (44) hide show
  1. package/README.md +38 -9
  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 +32 -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 +4 -1
  16. package/dist/src/setup.js +51 -9
  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 +4 -3
  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/dist/src/wizard.js +10 -3
  36. package/dist/src/wizard.js.map +1 -1
  37. package/package.json +4 -3
  38. package/scripts/rebrand-pi.mjs +28 -14
  39. package/skills/core/citation-audit/SKILL.md +9 -9
  40. package/skills/core/evidence-capture/SKILL.md +9 -9
  41. package/skills/core/manifest.json +15 -15
  42. package/skills/core/research-brief/SKILL.md +8 -8
  43. package/skills/core/research-intake/SKILL.md +9 -9
  44. 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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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from "react";
3
3
  import { Box, Text, render, useInput } from "ink";
4
- import { PROVIDER_PRESETS, providerCredentialSource, saveProviderConfig } from "./setup.js";
4
+ import { PROVIDER_PRESETS, providerCredentialSource, readMacOsLoginShellCredential, saveProviderConfig } from "./setup.js";
5
5
  import { PSYCLAW_ACCENT, PSYCLAW_ERROR, PSYCLAW_OK, PSYCLAW_VERSION } from "./branding.js";
6
6
  function Banner() {
7
7
  return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { gap: 1, alignItems: "center", children: [_jsx(Text, { color: PSYCLAW_ACCENT, bold: true, children: "\u03C8 PsyClaw" }), _jsxs(Text, { color: "black", backgroundColor: PSYCLAW_ACCENT, bold: true, children: [" v", PSYCLAW_VERSION, " "] }), _jsx(Text, { dimColor: true, children: "\u793E\u79D1\u79D1\u7814\u667A\u80FD\u4F53 \u00B7 \u9996\u6B21\u914D\u7F6E\u5411\u5BFC" })] }), _jsx(Text, { dimColor: true, children: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500" })] }));
@@ -22,6 +22,7 @@ function Wizard({ onDone }) {
22
22
  const [modelIndex, setModelIndex] = useState(0);
23
23
  const [apiKey, setApiKey] = useState("");
24
24
  const [credentialSource, setCredentialSource] = useState("checking");
25
+ const [credentialError, setCredentialError] = useState("");
25
26
  const provider = wizardProviders[providerIndex];
26
27
  const model = provider?.models[modelIndex];
27
28
  const apiKeyEnv = provider?.apiKeyEnv ?? "";
@@ -44,7 +45,7 @@ function Wizard({ onDone }) {
44
45
  setStep("done");
45
46
  };
46
47
  useInput((input, key) => {
47
- if (input === "q" && step !== "done") {
48
+ if (input === "q" && step !== "done" && step !== "credential") {
48
49
  onDone({ completed: false });
49
50
  return;
50
51
  }
@@ -76,6 +77,12 @@ function Wizard({ onDone }) {
76
77
  setStep("model");
77
78
  else if (key.return && (keyConfigured || apiKey.trim()))
78
79
  setStep("confirm");
80
+ else if (key.ctrl && input.toLowerCase() === "i" && process.platform === "darwin") {
81
+ setCredentialError("");
82
+ void readMacOsLoginShellCredential(apiKeyEnv)
83
+ .then((value) => value ? setApiKey(value) : setCredentialError(`登录 shell 中未找到 ${apiKeyEnv}`))
84
+ .catch((error) => setCredentialError(error instanceof Error ? error.message : "登录 shell 导入失败"));
85
+ }
79
86
  else if (key.backspace || key.delete)
80
87
  setApiKey((value) => value.slice(0, -1));
81
88
  else if (input && !key.ctrl && !key.meta)
@@ -100,7 +107,7 @@ function Wizard({ onDone }) {
100
107
  });
101
108
  const providerLines = wizardProviders.map((preset) => `${preset.name.padEnd(20)} (环境变量: $${preset.apiKeyEnv})`);
102
109
  const modelLines = provider ? provider.models.map((entry) => `${entry.name.padEnd(26)} [${entry.id}]`) : [];
103
- return (_jsxs(Box, { borderStyle: "round", borderColor: PSYCLAW_ACCENT, paddingX: 2, paddingY: 1, flexDirection: "column", children: [_jsx(Banner, {}), step === "welcome" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "\u6B22\u8FCE\u4F7F\u7528 PsyClaw\uFF01" }), _jsx(Text, { dimColor: true, children: "\u9996\u6B21\u8FD0\u884C\u9700\u914D\u7F6E\u4E00\u4E2A\u6A21\u578B\u63D0\u4F9B\u5546\uFF08API Key \u7531\u672C\u5730\u73AF\u5883\u53D8\u91CF\u5B89\u5168\u7BA1\u7406\uFF0C\u7EDD\u4E0D\u4E0A\u62A5\uFF09\u3002" }), _jsx(Hint, { children: "[Enter] \u5F00\u59CB\u914D\u7F6E \u00B7 [Q] \u9000\u51FA" })] })), step === "provider" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: PSYCLAW_ACCENT, children: "[1/3] \u9009\u62E9\u6A21\u578B\u63D0\u4F9B\u5546 (Provider)" }), _jsx(Selectable, { lines: providerLines, selected: providerIndex }), _jsx(Hint, { children: "[\u2191/\u2193] \u79FB\u52A8\u5149\u6807 \u00B7 [Enter] \u786E\u8BA4\u9009\u62E9 \u00B7 [Q] \u9000\u51FA" })] })), step === "model" && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, color: PSYCLAW_ACCENT, children: ["[2/3] \u9009\u62E9\u9ED8\u8BA4\u6A21\u578B (", provider?.name, ")"] }), _jsx(Selectable, { lines: modelLines, selected: modelIndex }), _jsx(Hint, { children: "[\u2191/\u2193] \u79FB\u52A8\u5149\u6807 \u00B7 [Enter] \u786E\u8BA4\u9009\u62E9 \u00B7 [Q] \u9000\u51FA" })] })), step === "confirm" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: PSYCLAW_ACCENT, children: "[4/4] \u786E\u8BA4\u914D\u7F6E\u5E76\u5199\u5165" }), _jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsxs(Text, { children: ["\u2022 \u63D0\u4F9B\u5546: ", _jsx(Text, { color: PSYCLAW_ACCENT, bold: true, children: provider?.name })] }), _jsxs(Text, { children: ["\u2022 \u6A21 \u578B: ", _jsx(Text, { color: PSYCLAW_ACCENT, bold: true, children: model?.name }), " ", _jsxs(Text, { dimColor: true, children: ["(", model?.id, ")"] })] }), _jsxs(Text, { color: keyConfigured || apiKey.trim() ? PSYCLAW_OK : PSYCLAW_ERROR, bold: true, children: ["\u2022 API Key: ", apiKey.trim() ? "✔ 将保存到用户级凭据文件 auth.json" : `✔ 已检测到 (${credentialSource})`] })] }), _jsx(Hint, { children: "[Enter] \u4FDD\u5B58\u5E76\u542F\u52A8\u5BF9\u8BDD \u00B7 [Esc] \u8FD4\u56DE\u4E0A\u4E00\u6B65 \u00B7 [Q] \u9000\u51FA" })] })), step === "credential" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: PSYCLAW_ACCENT, children: "[3/4] \u914D\u7F6E API Key" }), _jsx(Text, { dimColor: true, children: "\u5DF2\u68C0\u67E5\u5F53\u524D\u8FDB\u7A0B\u3001macOS launchctl \u4E0E\u7528\u6237\u51ED\u636E\u5B58\u50A8\u3002" }), _jsxs(Box, { marginY: 1, children: [_jsx(Text, { children: "Key: " }), _jsx(Text, { color: PSYCLAW_ACCENT, children: apiKey ? "•".repeat(Math.min(apiKey.length, 48)) : keyConfigured ? "已检测到,可直接继续" : "请输入 API Key" })] }), !keyConfigured && !apiKey.trim() && _jsxs(Text, { color: PSYCLAW_ERROR, children: ["\u672A\u68C0\u6D4B\u5230 $", apiKeyEnv] }), _jsx(Hint, { children: "\u76F4\u63A5\u8F93\u5165 Key\uFF08\u5185\u5BB9\u4E0D\u56DE\u663E\uFF09 \u00B7 [Enter] \u7EE7\u7EED \u00B7 [Esc] \u8FD4\u56DE" })] })), step === "done" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: PSYCLAW_OK, bold: true, children: "\u2714 \u914D\u7F6E\u5DF2\u6210\u529F\u5199\u5165 models.json \u4E0E\u73AF\u5883\u7F13\u5B58\uFF01" }), _jsx(Text, { dimColor: true, children: "\u9A6C\u4E0A\u542F\u52A8 PsyClaw \u667A\u80FD\u7814\u7A76\u52A9\u624B\u2026" }), _jsx(Hint, { children: "[Enter] \u7ACB\u5373\u8FDB\u5165\u5BF9\u8BDD \u00B7 [Q] \u9000\u51FA" })] }))] }));
110
+ return (_jsxs(Box, { borderStyle: "round", borderColor: PSYCLAW_ACCENT, paddingX: 2, paddingY: 1, flexDirection: "column", children: [_jsx(Banner, {}), step === "welcome" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "\u6B22\u8FCE\u4F7F\u7528 PsyClaw\uFF01" }), _jsx(Text, { dimColor: true, children: "\u9996\u6B21\u8FD0\u884C\u9700\u914D\u7F6E\u4E00\u4E2A\u6A21\u578B\u63D0\u4F9B\u5546\uFF08API Key \u7531\u672C\u5730\u73AF\u5883\u53D8\u91CF\u5B89\u5168\u7BA1\u7406\uFF0C\u7EDD\u4E0D\u4E0A\u62A5\uFF09\u3002" }), _jsx(Hint, { children: "[Enter] \u5F00\u59CB\u914D\u7F6E \u00B7 [Q] \u9000\u51FA" })] })), step === "provider" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: PSYCLAW_ACCENT, children: "[1/4] \u9009\u62E9\u6A21\u578B\u63D0\u4F9B\u5546 (Provider)" }), _jsx(Selectable, { lines: providerLines, selected: providerIndex }), _jsx(Hint, { children: "[\u2191/\u2193] \u79FB\u52A8\u5149\u6807 \u00B7 [Enter] \u786E\u8BA4\u9009\u62E9 \u00B7 [Q] \u9000\u51FA" })] })), step === "model" && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, color: PSYCLAW_ACCENT, children: ["[2/4] \u9009\u62E9\u9ED8\u8BA4\u6A21\u578B (", provider?.name, ")"] }), _jsx(Selectable, { lines: modelLines, selected: modelIndex }), _jsx(Hint, { children: "[\u2191/\u2193] \u79FB\u52A8\u5149\u6807 \u00B7 [Enter] \u786E\u8BA4\u9009\u62E9 \u00B7 [Q] \u9000\u51FA" })] })), step === "confirm" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: PSYCLAW_ACCENT, children: "[4/4] \u786E\u8BA4\u914D\u7F6E\u5E76\u5199\u5165" }), _jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsxs(Text, { children: ["\u2022 \u63D0\u4F9B\u5546: ", _jsx(Text, { color: PSYCLAW_ACCENT, bold: true, children: provider?.name })] }), _jsxs(Text, { children: ["\u2022 \u6A21 \u578B: ", _jsx(Text, { color: PSYCLAW_ACCENT, bold: true, children: model?.name }), " ", _jsxs(Text, { dimColor: true, children: ["(", model?.id, ")"] })] }), _jsxs(Text, { color: keyConfigured || apiKey.trim() ? PSYCLAW_OK : PSYCLAW_ERROR, bold: true, children: ["\u2022 API Key: ", apiKey.trim() ? "✔ 将保存到用户级凭据文件 auth.json" : `✔ 已检测到 (${credentialSource})`] })] }), _jsx(Hint, { children: "[Enter] \u4FDD\u5B58\u5E76\u542F\u52A8\u5BF9\u8BDD \u00B7 [Esc] \u8FD4\u56DE\u4E0A\u4E00\u6B65 \u00B7 [Q] \u9000\u51FA" })] })), step === "credential" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: PSYCLAW_ACCENT, children: "[3/4] \u914D\u7F6E API Key" }), _jsx(Text, { dimColor: true, children: "\u5DF2\u68C0\u67E5\u5F53\u524D\u8FDB\u7A0B\u3001macOS launchctl \u4E0E\u7528\u6237\u51ED\u636E\u5B58\u50A8\u3002" }), _jsxs(Box, { marginY: 1, children: [_jsx(Text, { children: "Key: " }), _jsx(Text, { color: PSYCLAW_ACCENT, children: apiKey ? "•".repeat(Math.min(apiKey.length, 48)) : keyConfigured ? "已检测到,可直接继续" : "请输入 API Key" })] }), !keyConfigured && !apiKey.trim() && _jsxs(Text, { color: PSYCLAW_ERROR, children: ["\u672A\u68C0\u6D4B\u5230 $", apiKeyEnv] }), credentialError && _jsx(Text, { color: PSYCLAW_ERROR, children: credentialError }), _jsxs(Hint, { children: ["\u76F4\u63A5\u8F93\u5165 Key\uFF08\u5185\u5BB9\u4E0D\u56DE\u663E\uFF09", process.platform === "darwin" ? " · [Ctrl+I] 明确从 login shell 导入并保存" : "", " \u00B7 [Enter] \u7EE7\u7EED \u00B7 [Esc] \u8FD4\u56DE"] })] })), step === "done" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: PSYCLAW_OK, bold: true, children: "\u2714 Provider \u4E0E\u51ED\u636E\u914D\u7F6E\u5DF2\u4FDD\u5B58\uFF01" }), _jsx(Text, { dimColor: true, children: "\u9A6C\u4E0A\u542F\u52A8 PsyClaw \u667A\u80FD\u7814\u7A76\u52A9\u624B\u2026" }), _jsx(Hint, { children: "[Enter] \u7ACB\u5373\u8FDB\u5165\u5BF9\u8BDD \u00B7 [Q] \u9000\u51FA" })] }))] }));
104
111
  }
105
112
  export function runWizard() {
106
113
  return new Promise((resolve) => {
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/wizard.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAU3F,SAAS,MAAM;IACb,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,aAC9B,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,EAAE,IAAI,qCAAiB,EAClD,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,eAAe,EAAE,cAAc,EAAE,IAAI,yBAAI,eAAe,SAAS,EACrF,KAAC,IAAI,IAAC,QAAQ,6GAAwB,IAClC,EACN,KAAC,IAAI,IAAC,QAAQ,mUAA0D,IACpE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,EAAE,QAAQ,EAAiC;IACvD,OAAO,CACL,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,IAAC,QAAQ,oCAAK,QAAQ,IAAQ,GAC/B,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAkD;IACrF,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,YACnC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,UAAU,GAAG,KAAK,KAAK,QAAQ,CAAC;YACtC,OAAO,CACL,MAAC,GAAG,IAAY,GAAG,EAAE,CAAC,aACpB,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,YAChE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAClB,EACN,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,YAAG,IAAI,GAAQ,CAChD,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,cAAE,IAAI,GAAQ,CACpB,KARO,IAAI,CASR,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAMD,SAAS,MAAM,CAAC,EAAE,MAAM,EAAe;IACrC,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAa,SAAS,CAAC,CAAC;IACxD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAS,UAAU,CAAC,CAAC;IAE7E,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,UAAU,CAAC;IAExF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,QAAQ;YAAE,KAAK,wBAAwB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,MAAM;gBAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrH,OAAO,GAAG,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,kBAAkB,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACrC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS;gBACZ,IAAI,GAAG,CAAC,MAAM;oBAAE,OAAO,CAAC,UAAU,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,GAAG,CAAC,OAAO;oBAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBACrE,IAAI,GAAG,CAAC,SAAS;oBAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjB,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;gBACD,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,GAAG,CAAC,OAAO;oBAAE,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,GAAG,CAAC,SAAS;oBAAE,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBACrG,IAAI,GAAG,CAAC,MAAM;oBAAE,OAAO,CAAC,YAAY,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,GAAG,CAAC,MAAM;oBAAE,OAAO,CAAC,OAAO,CAAC,CAAC;qBAC5B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAAE,OAAO,CAAC,SAAS,CAAC,CAAC;qBACvE,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM;oBAAE,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC1E,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI;oBAAE,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBACrG,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,GAAG,CAAC,MAAM;oBAAE,KAAK,WAAW,EAAE,CAAC;gBACnC,IAAI,GAAG,CAAC,MAAM;oBAAE,OAAO,CAAC,UAAU,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;oBAChC,MAAM,CAAC;wBACL,SAAS,EAAE,IAAI;wBACf,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;wBAChE,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;qBAC1D,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;IAChH,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5G,OAAO,CACL,MAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACpG,KAAC,MAAM,KAAG,EAET,IAAI,KAAK,SAAS,IAAI,CACrB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,6DAAqB,EAC/B,KAAC,IAAI,IAAC,QAAQ,qOAAiD,EAC/D,KAAC,IAAI,6EAA+B,IAChC,CACP,EAEA,IAAI,KAAK,UAAU,IAAI,CACtB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,4EAAiC,EACjE,KAAC,UAAU,IAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,GAAI,EAC7D,KAAC,IAAI,+HAA8C,IAC/C,CACP,EAEA,IAAI,KAAK,OAAO,IAAI,CACnB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,6DAAiB,QAAQ,EAAE,IAAI,SAAS,EACxE,KAAC,UAAU,IAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAI,EACvD,KAAC,IAAI,+HAA8C,IAC/C,CACP,EAEA,IAAI,KAAK,SAAS,IAAI,CACrB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,iEAAsB,EACtD,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,MAAC,IAAI,8CAAQ,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,EAAE,IAAI,kBAAE,QAAQ,EAAE,IAAI,GAAQ,IAAO,EAC7E,MAAC,IAAI,0CAAS,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,EAAE,IAAI,kBAAE,KAAK,EAAE,IAAI,GAAQ,OAAC,MAAC,IAAI,IAAC,QAAQ,wBAAG,KAAK,EAAE,EAAE,SAAS,IAAO,EAC/G,MAAC,IAAI,IAAC,KAAK,EAAE,aAAa,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,uCAChE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW,gBAAgB,GAAG,IACjF,IACH,EACN,KAAC,IAAI,6IAAkD,IACnD,CACP,EAEA,IAAI,KAAK,YAAY,IAAI,CACxB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,2CAAyB,EACzD,KAAC,IAAI,IAAC,QAAQ,uIAAwC,EACtD,MAAC,GAAG,IAAC,OAAO,EAAE,CAAC,aAAE,KAAC,IAAI,wBAAa,EAAA,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,YAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,GAAQ,IAAM,EAC7K,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAC,IAAI,IAAC,KAAK,EAAE,aAAa,2CAAS,SAAS,IAAQ,EACzF,KAAC,IAAI,+IAA+C,IAChD,CACP,EAEA,IAAI,KAAK,MAAM,IAAI,CAClB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,EAAE,IAAI,yHAAoC,EACjE,KAAC,IAAI,IAAC,QAAQ,kGAA4B,EAC1C,KAAC,IAAI,yFAAiC,IAClC,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,QAAmC,CAAC;QACxC,QAAQ,GAAG,MAAM,CACf,KAAC,MAAM,IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACzB,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,GAAI,EACL,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/wizard.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "psyclaw",
3
- "version": "0.26.2",
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,16 +128,28 @@ 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
- const bannerWidth = (rows) => Math.max(...rows.map((row) => Array.from(row.replace(ansiPattern, "")).length));
133
+ const cellWidth = (text) => Array.from(text.replace(ansiPattern, "")).reduce((width, char) => {
134
+ const code = char.codePointAt(0) ?? 0;
135
+ const wide = code >= 0x1100 && (code <= 0x115f || code === 0x2329 || code === 0x232a ||
136
+ (code >= 0x2e80 && code <= 0xa4cf) || (code >= 0xac00 && code <= 0xd7a3) ||
137
+ (code >= 0xf900 && code <= 0xfaff) || (code >= 0xfe10 && code <= 0xfe6f) ||
138
+ (code >= 0xff00 && code <= 0xff60) || (code >= 0x1f300 && code <= 0x1faff));
139
+ return width + (wide ? 2 : 1);
140
+ }, 0);
141
+ const bannerWidth = (rows) => Math.max(...rows.map(cellWidth));
134
142
  const fittingBanners = bannerCandidates.filter((rows) => bannerWidth(rows) <= terminalColumns - 4);
135
- const tinyBanner = [\` ψ PsyClaw v\${process.env.PSYCLAW_VERSION ?? this.version}\`];
136
- const defaultPool = fittingBanners.length > 0 ? fittingBanners : [tinyBanner];
137
- const chosenBanner = process.env.PSYCLAW_PET === "1" && bannerWidth(petBanner) <= terminalColumns - 4
138
- ? petBanner
139
- : defaultPool[Math.floor(Math.random() * defaultPool.length)];
143
+ const tinyBanner = [terminalColumns >= 22
144
+ ? \` ψ PsyClaw v\${process.env.PSYCLAW_VERSION ?? this.version}\`
145
+ : " PsyClaw"];
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} : [];
140
153
  const detailLines = terminalColumns >= 86 ? [
141
154
  \` ${GRAD_PIPELINE}\`,
142
155
  \` ${GRAD_PROTOCOL}\`,
@@ -145,6 +158,7 @@ if (terminalColumns >= 76) detailLines.push(\` ${GRAD_WORKBENCH}\`);
145
158
  const logo = [
146
159
  "",
147
160
  ...chosenBanner,
161
+ ...stackedPet,
148
162
  "",
149
163
  ...detailLines,
150
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.