psyclaw 0.25.2 → 0.26.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 (271) hide show
  1. package/README.md +111 -60
  2. package/{apps → dist/apps}/panel/index.html +50 -28
  3. package/dist/src/adapters/pi/extension.d.ts +19 -0
  4. package/dist/src/adapters/pi/extension.js +735 -0
  5. package/dist/src/adapters/pi/extension.js.map +1 -0
  6. package/dist/src/adapters/pi/model.d.ts +72 -0
  7. package/dist/src/adapters/pi/model.js +152 -0
  8. package/dist/src/adapters/pi/model.js.map +1 -0
  9. package/dist/src/adapters/pi/resources.d.ts +23 -0
  10. package/dist/src/adapters/pi/resources.js +54 -0
  11. package/dist/src/adapters/pi/resources.js.map +1 -0
  12. package/dist/src/adapters/pi/rpc.d.ts +58 -0
  13. package/dist/src/adapters/pi/rpc.js +253 -0
  14. package/dist/src/adapters/pi/rpc.js.map +1 -0
  15. package/dist/src/adapters/pi/session.d.ts +30 -0
  16. package/dist/src/adapters/pi/session.js +64 -0
  17. package/dist/src/adapters/pi/session.js.map +1 -0
  18. package/dist/src/agents/catalog.d.ts +30 -0
  19. package/dist/src/agents/catalog.js +118 -0
  20. package/dist/src/agents/catalog.js.map +1 -0
  21. package/dist/src/agents/discover.d.ts +28 -0
  22. package/dist/src/agents/discover.js +127 -0
  23. package/dist/src/agents/discover.js.map +1 -0
  24. package/dist/src/agents/import.d.ts +67 -0
  25. package/dist/src/agents/import.js +789 -0
  26. package/dist/src/agents/import.js.map +1 -0
  27. package/dist/src/analysis/hooks.d.ts +81 -0
  28. package/dist/src/analysis/hooks.js +139 -0
  29. package/dist/src/analysis/hooks.js.map +1 -0
  30. package/dist/src/analysis/pre-registration.d.ts +18 -0
  31. package/dist/src/analysis/pre-registration.js +86 -0
  32. package/dist/src/analysis/pre-registration.js.map +1 -0
  33. package/dist/src/branding.d.ts +44 -0
  34. package/dist/src/branding.js +128 -0
  35. package/dist/src/branding.js.map +1 -0
  36. package/dist/src/chat.d.ts +16 -0
  37. package/dist/src/chat.js +95 -0
  38. package/dist/src/chat.js.map +1 -0
  39. package/dist/src/cli.d.ts +2 -0
  40. package/dist/src/cli.js +316 -0
  41. package/dist/src/cli.js.map +1 -0
  42. package/dist/src/core/citations.d.ts +44 -0
  43. package/dist/src/core/citations.js +48 -0
  44. package/dist/src/core/citations.js.map +1 -0
  45. package/dist/src/core/contracts.d.ts +119 -0
  46. package/dist/src/core/contracts.js +2 -0
  47. package/dist/src/core/contracts.js.map +1 -0
  48. package/dist/src/core/docx.d.ts +11 -0
  49. package/dist/src/core/docx.js +46 -0
  50. package/dist/src/core/docx.js.map +1 -0
  51. package/dist/src/core/doi.d.ts +41 -0
  52. package/dist/src/core/doi.js +82 -0
  53. package/dist/src/core/doi.js.map +1 -0
  54. package/dist/src/core/evidence-policy.d.ts +24 -0
  55. package/dist/src/core/evidence-policy.js +308 -0
  56. package/dist/src/core/evidence-policy.js.map +1 -0
  57. package/dist/src/core/filekind.d.ts +15 -0
  58. package/dist/src/core/filekind.js +82 -0
  59. package/dist/src/core/filekind.js.map +1 -0
  60. package/dist/src/core/hash.d.ts +2 -0
  61. package/dist/src/core/hash.js +17 -0
  62. package/dist/src/core/hash.js.map +1 -0
  63. package/dist/src/core/pricing.d.ts +38 -0
  64. package/dist/src/core/pricing.js +110 -0
  65. package/dist/src/core/pricing.js.map +1 -0
  66. package/dist/src/core/redact.d.ts +12 -0
  67. package/dist/src/core/redact.js +48 -0
  68. package/dist/src/core/redact.js.map +1 -0
  69. package/dist/src/core/references.d.ts +55 -0
  70. package/dist/src/core/references.js +102 -0
  71. package/dist/src/core/references.js.map +1 -0
  72. package/dist/src/core/schemas.d.ts +162 -0
  73. package/dist/src/core/schemas.js +160 -0
  74. package/dist/src/core/schemas.js.map +1 -0
  75. package/dist/src/extension.d.ts +1 -0
  76. package/dist/src/extension.js +2 -0
  77. package/dist/src/extension.js.map +1 -0
  78. package/dist/src/index.d.ts +72 -0
  79. package/dist/src/index.js +73 -0
  80. package/dist/src/index.js.map +1 -0
  81. package/dist/src/install/installer.d.ts +147 -0
  82. package/dist/src/install/installer.js +721 -0
  83. package/dist/src/install/installer.js.map +1 -0
  84. package/dist/src/integrations/contracts.d.ts +35 -0
  85. package/dist/src/integrations/contracts.js +27 -0
  86. package/dist/src/integrations/contracts.js.map +1 -0
  87. package/dist/src/integrations/mcp.d.ts +155 -0
  88. package/dist/src/integrations/mcp.js +826 -0
  89. package/dist/src/integrations/mcp.js.map +1 -0
  90. package/dist/src/knowledge-map/contracts.d.ts +20 -0
  91. package/dist/src/knowledge-map/contracts.js +2 -0
  92. package/dist/src/knowledge-map/contracts.js.map +1 -0
  93. package/dist/src/knowledge-map/index.d.ts +4 -0
  94. package/dist/src/knowledge-map/index.js +39 -0
  95. package/dist/src/knowledge-map/index.js.map +1 -0
  96. package/dist/src/literature/contracts.d.ts +106 -0
  97. package/dist/src/literature/contracts.js +2 -0
  98. package/dist/src/literature/contracts.js.map +1 -0
  99. package/dist/src/literature/fulltext.d.ts +7 -0
  100. package/dist/src/literature/fulltext.js +24 -0
  101. package/dist/src/literature/fulltext.js.map +1 -0
  102. package/dist/src/literature/knowledge-map.d.ts +2 -0
  103. package/dist/src/literature/knowledge-map.js +20 -0
  104. package/dist/src/literature/knowledge-map.js.map +1 -0
  105. package/dist/src/literature/ledger.d.ts +3 -0
  106. package/dist/src/literature/ledger.js +17 -0
  107. package/dist/src/literature/ledger.js.map +1 -0
  108. package/dist/src/literature/metadata.d.ts +6 -0
  109. package/dist/src/literature/metadata.js +32 -0
  110. package/dist/src/literature/metadata.js.map +1 -0
  111. package/dist/src/memory/store.d.ts +22 -0
  112. package/dist/src/memory/store.js +73 -0
  113. package/dist/src/memory/store.js.map +1 -0
  114. package/dist/src/orchestration/contracts.d.ts +61 -0
  115. package/dist/src/orchestration/contracts.js +2 -0
  116. package/dist/src/orchestration/contracts.js.map +1 -0
  117. package/dist/src/orchestration/pi-executor.d.ts +28 -0
  118. package/dist/src/orchestration/pi-executor.js +169 -0
  119. package/dist/src/orchestration/pi-executor.js.map +1 -0
  120. package/dist/src/orchestration/runner.d.ts +196 -0
  121. package/dist/src/orchestration/runner.js +991 -0
  122. package/dist/src/orchestration/runner.js.map +1 -0
  123. package/dist/src/orchestration/scheduler.d.ts +8 -0
  124. package/dist/src/orchestration/scheduler.js +335 -0
  125. package/dist/src/orchestration/scheduler.js.map +1 -0
  126. package/dist/src/panel/events.d.ts +20 -0
  127. package/dist/src/panel/events.js +93 -0
  128. package/dist/src/panel/events.js.map +1 -0
  129. package/dist/src/panel/extension.d.ts +8 -0
  130. package/dist/src/panel/extension.js +115 -0
  131. package/dist/src/panel/extension.js.map +1 -0
  132. package/dist/src/panel/literature-map.d.ts +26 -0
  133. package/dist/src/panel/literature-map.js +34 -0
  134. package/dist/src/panel/literature-map.js.map +1 -0
  135. package/dist/src/panel/projection.d.ts +51 -0
  136. package/dist/src/panel/projection.js +288 -0
  137. package/dist/src/panel/projection.js.map +1 -0
  138. package/dist/src/panel/server.d.ts +46 -0
  139. package/dist/src/panel/server.js +1610 -0
  140. package/dist/src/panel/server.js.map +1 -0
  141. package/dist/src/panel/usage.d.ts +53 -0
  142. package/dist/src/panel/usage.js +150 -0
  143. package/dist/src/panel/usage.js.map +1 -0
  144. package/dist/src/project/bootstrap.d.ts +10 -0
  145. package/dist/src/project/bootstrap.js +83 -0
  146. package/dist/src/project/bootstrap.js.map +1 -0
  147. package/dist/src/project/hitl.d.ts +12 -0
  148. package/dist/src/project/hitl.js +43 -0
  149. package/dist/src/project/hitl.js.map +1 -0
  150. package/dist/src/project/jsonl.d.ts +16 -0
  151. package/dist/src/project/jsonl.js +93 -0
  152. package/dist/src/project/jsonl.js.map +1 -0
  153. package/dist/src/project/manuscript.d.ts +21 -0
  154. package/dist/src/project/manuscript.js +74 -0
  155. package/dist/src/project/manuscript.js.map +1 -0
  156. package/dist/src/project/paths.d.ts +38 -0
  157. package/dist/src/project/paths.js +166 -0
  158. package/dist/src/project/paths.js.map +1 -0
  159. package/dist/src/project/versions.d.ts +10 -0
  160. package/dist/src/project/versions.js +14 -0
  161. package/dist/src/project/versions.js.map +1 -0
  162. package/dist/src/psyclaw-theme.d.ts +88 -0
  163. package/dist/src/psyclaw-theme.js +89 -0
  164. package/dist/src/psyclaw-theme.js.map +1 -0
  165. package/dist/src/research/brief.d.ts +11 -0
  166. package/dist/src/research/brief.js +81 -0
  167. package/dist/src/research/brief.js.map +1 -0
  168. package/dist/src/research/ledger.d.ts +12 -0
  169. package/dist/src/research/ledger.js +43 -0
  170. package/dist/src/research/ledger.js.map +1 -0
  171. package/dist/src/run.d.ts +20 -0
  172. package/dist/src/run.js +34 -0
  173. package/dist/src/run.js.map +1 -0
  174. package/dist/src/setup.d.ts +54 -0
  175. package/dist/src/setup.js +221 -0
  176. package/dist/src/setup.js.map +1 -0
  177. package/dist/src/skills/contracts.d.ts +105 -0
  178. package/dist/src/skills/contracts.js +3 -0
  179. package/dist/src/skills/contracts.js.map +1 -0
  180. package/dist/src/skills/preflight.d.ts +10 -0
  181. package/dist/src/skills/preflight.js +39 -0
  182. package/dist/src/skills/preflight.js.map +1 -0
  183. package/dist/src/skills/registry.d.ts +28 -0
  184. package/dist/src/skills/registry.js +540 -0
  185. package/dist/src/skills/registry.js.map +1 -0
  186. package/dist/src/style/artifact.d.ts +6 -0
  187. package/dist/src/style/artifact.js +61 -0
  188. package/dist/src/style/artifact.js.map +1 -0
  189. package/dist/src/style/cli-ui.d.ts +41 -0
  190. package/dist/src/style/cli-ui.js +119 -0
  191. package/dist/src/style/cli-ui.js.map +1 -0
  192. package/dist/src/style/contracts.d.ts +34 -0
  193. package/dist/src/style/contracts.js +2 -0
  194. package/dist/src/style/contracts.js.map +1 -0
  195. package/dist/src/style/registry.d.ts +16 -0
  196. package/dist/src/style/registry.js +50 -0
  197. package/dist/src/style/registry.js.map +1 -0
  198. package/dist/src/trust/manifest.d.ts +42 -0
  199. package/dist/src/trust/manifest.js +53 -0
  200. package/dist/src/trust/manifest.js.map +1 -0
  201. package/dist/src/trust/sbom.d.ts +54 -0
  202. package/dist/src/trust/sbom.js +77 -0
  203. package/dist/src/trust/sbom.js.map +1 -0
  204. package/dist/src/tui/app.d.ts +3 -0
  205. package/dist/src/tui/app.js +103 -0
  206. package/dist/src/tui/app.js.map +1 -0
  207. package/dist/src/tui/model.d.ts +13 -0
  208. package/dist/src/tui/model.js +25 -0
  209. package/dist/src/tui/model.js.map +1 -0
  210. package/dist/src/updates/check.d.ts +43 -0
  211. package/dist/src/updates/check.js +68 -0
  212. package/dist/src/updates/check.js.map +1 -0
  213. package/dist/src/updates/manifest.d.ts +19 -0
  214. package/dist/src/updates/manifest.js +58 -0
  215. package/dist/src/updates/manifest.js.map +1 -0
  216. package/dist/src/updates/registry.d.ts +21 -0
  217. package/dist/src/updates/registry.js +82 -0
  218. package/dist/src/updates/registry.js.map +1 -0
  219. package/dist/src/updates/skills.d.ts +15 -0
  220. package/dist/src/updates/skills.js +39 -0
  221. package/dist/src/updates/skills.js.map +1 -0
  222. package/dist/src/updates/status.d.ts +7 -0
  223. package/dist/src/updates/status.js +37 -0
  224. package/dist/src/updates/status.js.map +1 -0
  225. package/dist/src/updates/update.d.ts +43 -0
  226. package/dist/src/updates/update.js +128 -0
  227. package/dist/src/updates/update.js.map +1 -0
  228. package/dist/src/wizard.d.ts +7 -0
  229. package/dist/src/wizard.js +90 -0
  230. package/dist/src/wizard.js.map +1 -0
  231. package/dist/src/workflows/analysis-delegation.d.ts +3 -0
  232. package/dist/src/workflows/analysis-delegation.js +96 -0
  233. package/dist/src/workflows/analysis-delegation.js.map +1 -0
  234. package/dist/src/workflows/expert-review-runner.d.ts +29 -0
  235. package/dist/src/workflows/expert-review-runner.js +35 -0
  236. package/dist/src/workflows/expert-review-runner.js.map +1 -0
  237. package/dist/src/workflows/expert-review.d.ts +140 -0
  238. package/dist/src/workflows/expert-review.js +111 -0
  239. package/dist/src/workflows/expert-review.js.map +1 -0
  240. package/dist/src/workflows/institutional-fulltext.d.ts +16 -0
  241. package/dist/src/workflows/institutional-fulltext.js +110 -0
  242. package/dist/src/workflows/institutional-fulltext.js.map +1 -0
  243. package/dist/src/workflows/literature-review.d.ts +3 -0
  244. package/dist/src/workflows/literature-review.js +76 -0
  245. package/dist/src/workflows/literature-review.js.map +1 -0
  246. package/dist/src/workflows/meta-analysis.d.ts +38 -0
  247. package/dist/src/workflows/meta-analysis.js +185 -0
  248. package/dist/src/workflows/meta-analysis.js.map +1 -0
  249. package/dist/src/workflows/publish.d.ts +51 -0
  250. package/dist/src/workflows/publish.js +153 -0
  251. package/dist/src/workflows/publish.js.map +1 -0
  252. package/dist/src/workflows/spec.d.ts +51 -0
  253. package/dist/src/workflows/spec.js +157 -0
  254. package/dist/src/workflows/spec.js.map +1 -0
  255. package/dist/src/workflows/style-contract.d.ts +24 -0
  256. package/dist/src/workflows/style-contract.js +23 -0
  257. package/dist/src/workflows/style-contract.js.map +1 -0
  258. package/dist/src/workflows/writing-review.d.ts +15 -0
  259. package/dist/src/workflows/writing-review.js +82 -0
  260. package/dist/src/workflows/writing-review.js.map +1 -0
  261. package/package.json +20 -8
  262. package/scripts/rebrand-pi.mjs +3 -3
  263. package/scripts/__pycache__/build_dist.cpython-314.pyc +0 -0
  264. package/scripts/__pycache__/build_whitepaper_docx.cpython-314.pyc +0 -0
  265. package/scripts/build_preprint_docx.py +0 -729
  266. package/scripts/build_preprint_figures.py +0 -238
  267. package/scripts/build_three_line_table_fixture.py +0 -56
  268. package/scripts/build_whitepaper_docx.py +0 -768
  269. package/scripts/check-branding.mjs +0 -159
  270. package/scripts/copy-panel.mjs +0 -11
  271. package/scripts/verify_docx.py +0 -41
package/README.md CHANGED
@@ -1,60 +1,111 @@
1
- # psyclaw
2
-
3
- 面向社会科学研究者的 Pi 科研智能体层。
4
-
5
- ## 版本沿革
6
-
7
- `PsyClaw v0.25.2` 以 `psypi v0.4.1` 的完整实现为基线完成产品改名和源码迁移。`F:\Projects\psypi\psypi` 保留为历史仓库;此后的正式开发、发布和 `psyclaw` 命令均以本仓库为准。为避免中断已有模型、主题、安装包和生态 Skill 配置,运行时继续兼容既有 Pi profile;研究项目状态则统一写入 `.psyclaw/`。
8
-
9
- psyclaw 的目标不是再造一个重量级 Agent,而是在官方 Pi 之上提供少量、可审计、可组合的科研契约:研究项目状态、Claim-Evidence-Provenance 账本、完整性门禁、可恢复工作流、受控记忆和按需技能。统计计算交给成熟库或外接 MCP;Pi 的会话、模型、Skill、Package 和 TUI/RPC 能力继续由 Pi 提供。
10
-
11
- 当前仓库已完成第一条 M1/MVP-0 可运行切片,并落地 M2 的技能注册与受限多智能体编排基础、M3 的只读并行契约、真实 stdio MCP transport(argv/显式 env/超时隔离)、Skill 恶意正文 preflight、许可证/SBOM 门与 M4 的 literature-review/analysis-delegation/writing-review 三个 workflow 包。官方 Pi 的 `AgentSession`、`SessionManager`、`DefaultResourceLoader`、模型网关和严格 JSONL RPC 已由 adapter 接入;完成项目级 package 安装后提供原生只读 `/agents` 多智能体入口,面板扩展可选安装。联网检索、统计计算和并行写入仍按规划后置。先阅读:
12
-
13
- - [开工纪要](docs/开工纪要.md)
14
- - [架构蓝图](docs/架构蓝图.md)
15
- - [多智能体开发与运行框架](docs/多智能体开发与运行框架.md)
16
- - [评测框架](docs/评测框架.md)
17
- - [技能与生态准入清单](docs/技能与生态准入清单.md)
18
- - [威胁模型](docs/威胁模型.md)
19
-
20
- 代号:`psyclaw`。当前可用命令:
21
-
22
- ```text
23
- pnpm install
24
- pnpm build
25
- pnpm exec pi install -l . # 一次性把 psyclaw 作为项目级 Pi package 启用
26
- pnpm exec pi --approve # 运行 Pi 时信任已审查的项目 package
27
- node dist/src/cli.js init "研究问题" --paradigm survey-observational
28
- node dist/src/cli.js evidence add notes/source.md --level user
29
- node dist/src/cli.js brief
30
- node dist/src/cli.js workflow literature-review
31
- node dist/src/cli.js serve --port 8787
32
- node dist/src/cli.js agents
33
- node dist/src/cli.js install claude-code --yes # 当前 agent 全局命令仍为 discover-only
34
- node dist/src/cli.js import claude-code --yes
35
- node dist/src/cli.js shell
36
- /skills # 查看推荐 Skill 的启用状态
37
- /skills enable <skill-id> # 启用项目级 Skill
38
- /skills disable <skill-id> # 禁用项目级 Skill
39
- /mcp # 查看推荐 MCP 的启用状态
40
- /mcp enable <mcp-id> # 启用项目级 MCP
41
- /mcp disable <mcp-id> # 禁用项目级 MCP
42
- /install skill|mcp <id> # 生成安装预检计划
43
- pnpm exec pi --extension ./dist/src/extension.js --approve # 未安装 package 时的临时入口
44
- pi --extension ./dist/src/panel/extension.js # 可选:在 Pi 中启停 /panel
45
- ```
46
-
47
- 在 `pi-workbench` 中使用时,先在研究项目根目录安装 psyclaw package:
48
-
49
- ```text
50
- pi install -l F:\Projects\psyclaw\psyclaw
51
- pi-workbench
52
- ```
53
-
54
- workbench 启动的每个 Pi 会话都会加载 psyclaw 的 `/research`、`/brief`、`/agents` 和 `/panel` 命令。在 Pi 中执行 `/panel` 后,用浏览器打开提示的 `http://127.0.0.1:8787` 地址即可查看当前项目的只读运行状态。
55
-
56
- `brief` 与 `workflow` 在证据门禁失败时退出码为 `2`,并保留 manifest 与 HANDOFF,不生成貌似完成的正文。`serve` 启动本机面板:运行事实、Agent/Skill 和模型目录为只读;模型配置表单是唯一明确的本地写入入口,会将 provider 元数据写入 Pi `models.json`,API key 交给 Pi `auth.json` 管理。
57
-
58
- 内置 agent 下载器/安装器:`agents`/`scan` 只读识别本机其他智能体(Claude Code、OpenAI Codex、Gemini CLI、opencode、Aider、Cursor、Windsurf、Continue、Orca、Copilot CLI)的配置与技能目录,绝不读取凭据内容;安装计划必须有来源、版本、artifact SHA、许可证/依赖审计和 SBOM,缺任何一项都会 `blocked`。当前 agent catalog 只有全局 npm/pipx 命令,尚未绑定可验证 staging artifact,因此即使人工确认也保持 `agent-staging-required`,不会执行全局安装;`import <id> --yes` 将其他 agent 的允许 Skill 文件以来源/SHA-256 溯源导入 `.psyclaw/imports/`;`shell` 启动 ink 交互式表格 TUI(↑/↓ 选择、`i` 安装、`m` 导入、`r` 重扫、`q` 退出)。
59
-
60
- Pi 集成分两层:完成一次 `pi install -l .` 后,项目级 package 默认加载 `src/extension.ts`,注册研究命令和原生只读 `/agents`;未安装时可用上面的 `--extension` 临时入口。worker 通过独立 Pi RPC 子进程、`read/grep/find/ls` 工具和结构化 WorkerReport 回传,但进程边界仍不是 OS sandbox。`src/panel/extension.ts` 是可选扩展,使用 `/panel [--port 8787]` 启停仅绑定 `127.0.0.1` 的只读可视化界面。面板的 Agents/Skills 下载页只展示发现结果、来源、版本、许可证、SHA、风险和审批前计划;模型页读取 Pi 本地模型注册表,并在没有对应注册项时显示 psyclaw 的 DeepSeek 模板元数据。页面只显示环境变量名称,不接收或显示 API key;`configured` 只表示环境变量存在,不代表实际认证成功。模型适配沿用 Pi `models.json`/`registerProvider` 契约,DeepSeek helper 只输出 `$DEEPSEEK_API_KEY` 引用。
1
+ # PsyClaw
2
+
3
+ PsyClaw 是面向社会科学研究的 Pi 工作台。它把研究项目、证据来源、Claim-Evidence 账本、完整性门禁、人工裁决、可恢复工作流和本地面板接到官方 Pi runtime 上;它不替代统计软件,也不会把未经核验的引用、结果或审稿意见写成事实。
4
+
5
+ 当前版本:`0.26.0`。本仓库以 `psypi v0.4.1` 的完整工作台为功能基线完成改名;`psypi` 仓库保留为历史仓库,正式命令和后续发布均使用 `psyclaw`。
6
+
7
+ ## 安装
8
+
9
+ 需要 Node.js `>=22.19.0`。官方 npm 源:
10
+
11
+ ```powershell
12
+ npm install -g psyclaw@0.26.0
13
+ ```
14
+
15
+ 中国大陆网络较慢或无法访问官方源时:
16
+
17
+ ```powershell
18
+ npm install -g psyclaw@0.26.0 --registry=https://registry.npmmirror.com
19
+ ```
20
+
21
+ 确认命令入口:
22
+
23
+ ```powershell
24
+ psyclaw --help
25
+ ```
26
+
27
+ 直接运行 `psyclaw` 会启动交互研究工作台;首次没有模型配置时会进入配置向导。也可显式运行 `psyclaw wizard`,或使用 `psyclaw setup --provider deepseek`。不要把 API key 写进项目、README 或 Git 仓库。
28
+
29
+ ## 五分钟开始
30
+
31
+ 在新的研究目录中建立项目:
32
+
33
+ ```powershell
34
+ mkdir my-study
35
+ cd my-study
36
+ psyclaw init "社交支持与研究生心理健康的关系" --paradigm survey-observational
37
+ psyclaw
38
+ ```
39
+
40
+ 初始化会建立 `.psyclaw/`、`data/raw/`、`data/clean/`、`notes/` 和 `outputs/`。`data/raw/` 是只读保护区;把经确认可用于分析的派生数据放在 `data/clean/`。
41
+
42
+ 登记本地材料并生成离线证据简报:
43
+
44
+ ```powershell
45
+ psyclaw evidence add notes\source.md --level user
46
+ psyclaw brief
47
+ ```
48
+
49
+ ## 常用入口
50
+
51
+ | 需求 | 命令或操作 |
52
+ | --- | --- |
53
+ | 启动研究对话 | `psyclaw` 或 `psyclaw chat` |
54
+ | 创建研究项目 | `psyclaw init <goal> --paradigm <profile>` |
55
+ | 登记本地证据 | `psyclaw evidence add <path> --level user\|fulltext` |
56
+ | 生成离线简报 | `psyclaw brief` |
57
+ | 创建人工裁决模板 | `psyclaw hitl init` |
58
+ | 写研究移交记录 | `psyclaw handoff` |
59
+ | 扫描本机其他 Agent | `psyclaw agents` |
60
+ | 查看 Pi runtime 更新 | `psyclaw check-updates` |
61
+ | 更新 Pi runtime | `psyclaw update --yes` |
62
+ | 打开科研面板 | 在对话中输入 `/panel` |
63
+
64
+ `psyclaw update` 只更新捆绑的 Pi runtime;它不是从 Git 拉取 PsyClaw 源码。全局安装用户通过 `npm install -g psyclaw@<version>` 获取 PsyClaw 新版本;本仓库开发者直接修改源码并构建。
65
+
66
+ ## 开发者本地安装
67
+
68
+ ```powershell
69
+ pnpm install
70
+ pnpm build
71
+ npm link
72
+ psyclaw --help
73
+ ```
74
+
75
+ 开发阶段不需要执行 `psyclaw update`。它会更新 Pi 依赖,不会同步本仓库代码。
76
+
77
+ ## 从旧 Python 版迁移
78
+
79
+ 如果启动时出现 `ModuleNotFoundError: No module named 'psyclaw.cli'`,终端仍解析到旧 Python 安装的 `psyclaw.exe`,而不是 npm 版本。先检查命令顺序:
80
+
81
+ ```powershell
82
+ Get-Command psyclaw -All
83
+ where.exe psyclaw
84
+ ```
85
+
86
+ 保留 npm 的 `psyclaw.cmd`,移除或下调旧 Python 入口所在目录后重新打开终端,再安装当前版本:
87
+
88
+ ```powershell
89
+ npm uninstall -g psyclaw
90
+ npm install -g psyclaw@0.26.0
91
+ psyclaw --help
92
+ ```
93
+
94
+ Python 的卸载器提示 `No files were found to uninstall` 时,不要手工删除不明目录;先用上述命令定位旧入口,再在对应 Python 环境中修复或移除它。
95
+
96
+ ## 文档
97
+
98
+ - [PsyClaw v0.26.0 使用白皮书](docs/PsyClaw使用白皮书_v0.26.0.md)
99
+ - [项目范围与里程碑](docs/开工纪要.md)
100
+ - [架构蓝图](docs/架构蓝图.md)
101
+ - [评测框架](docs/评测框架.md)
102
+ - [文档与交付物规范](docs/文档规范.md)
103
+
104
+ ## 边界
105
+
106
+ - PsyClaw 复用官方 Pi 的 session、model、skill、package 和 extension runtime,不维护 fork。
107
+ - 统计计算委托 Python/R、SPSS/Stata/Mplus 或受信任 MCP;输出必须保存脚本、输入指纹和环境信息。
108
+ - Skill、Plugin 和 MCP 默认只发现、不执行;启用前需要来源、版本/ref、哈希、许可证和依赖状态。
109
+ - 没有可定位证据的事实性 Claim 必须是 `uncertain` 或被阻断;没有审批记录的副作用不能被当作完成。
110
+
111
+ 许可证:MIT。
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>psyclaw 科研工作台 & 交互中心</title>
6
+ <title>PsyClaw 科研工作台 & 交互中心</title>
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
9
  <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
@@ -19,24 +19,24 @@
19
19
  --bg-inner: #090d14;
20
20
  --line: rgba(255, 255, 255, 0.08);
21
21
  --line-highlight: rgba(46, 196, 182, 0.28);
22
-
22
+
23
23
  --ink: #f0f4fc;
24
24
  --ink-muted: #8e9bb2;
25
25
  --ink-faint: #5a667d;
26
-
26
+
27
27
  --accent: #2ec4b6;
28
28
  --accent-glow: rgba(46, 196, 182, 0.25);
29
29
  --accent-ink: #64e5d9;
30
30
  --accent-bg: rgba(46, 196, 182, 0.12);
31
-
31
+
32
32
  --ok: #22c55e;
33
33
  --ok-bg: rgba(34, 197, 94, 0.12);
34
34
  --ok-ink: #4ade80;
35
-
35
+
36
36
  --warn: #f59e0b;
37
37
  --warn-bg: rgba(245, 158, 11, 0.12);
38
38
  --warn-ink: #fbbf24;
39
-
39
+
40
40
  --crit: #f43f5e;
41
41
  --crit-bg: rgba(244, 63, 94, 0.12);
42
42
  --crit-ink: #fb7185;
@@ -54,24 +54,24 @@
54
54
  --bg-inner: #f1f5f9;
55
55
  --line: rgba(0, 0, 0, 0.09);
56
56
  --line-highlight: rgba(13, 148, 136, 0.4);
57
-
57
+
58
58
  --ink: #0f172a;
59
59
  --ink-muted: #475569;
60
60
  --ink-faint: #94a3b8;
61
-
61
+
62
62
  --accent: #0d9488;
63
63
  --accent-glow: rgba(13, 148, 136, 0.2);
64
64
  --accent-ink: #0f766e;
65
65
  --accent-bg: rgba(13, 148, 136, 0.1);
66
-
66
+
67
67
  --ok: #16a34a;
68
68
  --ok-bg: rgba(22, 163, 74, 0.1);
69
69
  --ok-ink: #15803d;
70
-
70
+
71
71
  --warn: #d97706;
72
72
  --warn-bg: rgba(217, 119, 6, 0.1);
73
73
  --warn-ink: #b45309;
74
-
74
+
75
75
  --crit: #e11d48;
76
76
  --crit-bg: rgba(225, 29, 72, 0.1);
77
77
  --crit-ink: #be123c;
@@ -89,24 +89,24 @@
89
89
  --bg-inner: #ece4d2;
90
90
  --line: rgba(80, 60, 40, 0.12);
91
91
  --line-highlight: rgba(180, 83, 9, 0.38);
92
-
92
+
93
93
  --ink: #2b261f;
94
94
  --ink-muted: #665c4e;
95
95
  --ink-faint: #9c907e;
96
-
96
+
97
97
  --accent: #b45309;
98
98
  --accent-glow: rgba(180, 83, 9, 0.2);
99
99
  --accent-ink: #92400e;
100
100
  --accent-bg: rgba(180, 83, 9, 0.1);
101
-
101
+
102
102
  --ok: #2e7d32;
103
103
  --ok-bg: rgba(46, 125, 50, 0.1);
104
104
  --ok-ink: #1b5e20;
105
-
105
+
106
106
  --warn: #c2410c;
107
107
  --warn-bg: rgba(194, 65, 12, 0.1);
108
108
  --warn-ink: #9a3412;
109
-
109
+
110
110
  --crit: #b91c1c;
111
111
  --crit-bg: rgba(185, 28, 28, 0.1);
112
112
  --crit-ink: #991b1b;
@@ -124,24 +124,24 @@
124
124
  --bg-inner: #0b1120;
125
125
  --line: rgba(148, 163, 184, 0.14);
126
126
  --line-highlight: rgba(56, 189, 248, 0.38);
127
-
127
+
128
128
  --ink: #f8fafc;
129
129
  --ink-muted: #94a3b8;
130
130
  --ink-faint: #64748b;
131
-
131
+
132
132
  --accent: #38bdf8;
133
133
  --accent-glow: rgba(56, 189, 248, 0.25);
134
134
  --accent-ink: #7dd3fc;
135
135
  --accent-bg: rgba(56, 189, 248, 0.12);
136
-
136
+
137
137
  --ok: #22c55e;
138
138
  --ok-bg: rgba(34, 197, 94, 0.12);
139
139
  --ok-ink: #4ade80;
140
-
140
+
141
141
  --warn: #f59e0b;
142
142
  --warn-bg: rgba(245, 158, 11, 0.12);
143
143
  --warn-ink: #fbbf24;
144
-
144
+
145
145
  --crit: #f43f5e;
146
146
  --crit-bg: rgba(244, 63, 94, 0.12);
147
147
  --crit-ink: #fb7185;
@@ -316,6 +316,28 @@
316
316
  font-size: 0.75rem;
317
317
  font-weight: 600;
318
318
  }
319
+ @media (max-width: 430px) {
320
+ .header { padding: 0.65rem 0.75rem; }
321
+ .header-inner {
322
+ display: grid;
323
+ grid-template-columns: minmax(0, 1fr) auto;
324
+ gap: 0.6rem;
325
+ width: 100%;
326
+ }
327
+ .brand { min-width: 0; gap: 0.5rem; }
328
+ .brand-tag { display: none; }
329
+ .nav-tabs {
330
+ grid-column: 1 / -1;
331
+ grid-row: 2;
332
+ min-width: 0;
333
+ width: 100%;
334
+ }
335
+ .header-status { gap: 0.35rem; }
336
+ .theme-btn { padding-inline: 5px; }
337
+ .pulse-indicator { padding-inline: 0.45rem; }
338
+ #heartbeat-text { display: none; }
339
+ main { padding: 1rem 0.75rem 4rem; }
340
+ }
319
341
  .pulse-dot {
320
342
  width: 7px;
321
343
  height: 7px;
@@ -1100,9 +1122,9 @@
1100
1122
  <a href="#" class="brand">
1101
1123
  <div class="brand-logo">ψ</div>
1102
1124
  <div>
1103
- <div class="brand-title">psyclaw</div>
1125
+ <div class="brand-title">PsyClaw</div>
1104
1126
  </div>
1105
- <span class="brand-tag">工作台 v0.3.2</span>
1127
+ <span class="brand-tag">工作台 v0.24.0</span>
1106
1128
  </a>
1107
1129
 
1108
1130
  <!-- Main Navigation Tabs -->
@@ -1166,7 +1188,7 @@
1166
1188
  <div class="msg-bubble assistant">
1167
1189
  <div class="msg-avatar">ψ</div>
1168
1190
  <div class="msg-content">
1169
- <strong>您好,我是 psyclaw 科研智能助手。</strong><br>
1191
+ <strong>您好,我是 PsyClaw 科研智能助手。</strong><br>
1170
1192
  我基于严密的证据链(Claim-Evidence Ledger)工作。您可以直接向我提问、委托文献综述核验、审查统计方案,或点击上方的快速快捷指令开始。
1171
1193
  </div>
1172
1194
  </div>
@@ -1421,7 +1443,7 @@
1421
1443
  <span class="pill neutral" id="probe-status-pill"><span class="dot"></span> 尚无论断</span>
1422
1444
  <span class="detail-key mono" id="probe-claim-id">—</span>
1423
1445
  </div>
1424
-
1446
+
1425
1447
  <div>
1426
1448
  <h4 style="font-size:1.02rem;color:var(--ink);margin-bottom:0.3rem;" id="probe-source-title">(从真实证据账本加载)</h4>
1427
1449
  <div class="mono" style="font-size:0.78rem;color:var(--ink-muted);" id="probe-doi-link">DOI: —</div>
@@ -2653,11 +2675,11 @@ function applyClaimProbe(idx) {
2653
2675
  });
2654
2676
  const data = PANEL_CLAIMS[idx];
2655
2677
  document.getElementById("probe-claim-id").textContent = data.id;
2656
-
2678
+
2657
2679
  const statusPill = document.getElementById("probe-status-pill");
2658
2680
  statusPill.className = data.statusClass;
2659
2681
  statusPill.innerHTML = `<span class="dot"></span> ${data.status}`;
2660
-
2682
+
2661
2683
  document.getElementById("probe-source-title").textContent = data.title;
2662
2684
  const doiEl = document.getElementById("probe-doi-link");
2663
2685
  if (data.doiUrl !== "#") {
@@ -2789,7 +2811,7 @@ function selectAuditorClaim(idx) {
2789
2811
  document.getElementById("audit-input-doi").value = d.doi;
2790
2812
  document.getElementById("audit-input-quote").value = d.quote;
2791
2813
  document.getElementById("audit-select-status").value = d.status.includes("缺口") || d.status.includes("不足") ? "uncertain" : "verified";
2792
-
2814
+
2793
2815
  const pill = document.getElementById("auditor-status-pill");
2794
2816
  pill.className = d.statusClass;
2795
2817
  pill.textContent = d.status;
@@ -0,0 +1,19 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ type ToolTextContent = {
3
+ type: "text";
4
+ text: string;
5
+ };
6
+ interface ToolResultShape {
7
+ content: ToolTextContent[];
8
+ details: Record<string, unknown>;
9
+ }
10
+ /**
11
+ * Explicit workflow dispatch shared by the workbench's direct (`workflow`
12
+ * parameter) and natural-language routed paths, so every workflow result has
13
+ * the same `psyclaw/workflow-result/v1` contract.
14
+ */
15
+ export declare function runWorkflowTool(root: string, workflow: string, target?: string, nStudies?: number): Promise<ToolResultShape>;
16
+ /** Turn a natural-language meta-analysis request into a searchable target. */
17
+ export declare function cleanMetaTarget(request: string): string;
18
+ export default function psyclawExtension(pi: ExtensionAPI): void;
19
+ export {};