psyclaw 0.28.1 → 0.28.2

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 (128) hide show
  1. package/README.md +5 -5
  2. package/agents/recommended/catalog.json +1 -1
  3. package/dist/src/adapters/pi/extension.js +43 -9
  4. package/dist/src/adapters/pi/extension.js.map +1 -1
  5. package/dist/src/ars/mode-editor.d.ts +20 -0
  6. package/dist/src/ars/mode-editor.js +57 -0
  7. package/dist/src/ars/mode-editor.js.map +1 -0
  8. package/dist/src/ars/profile.d.ts +4 -1
  9. package/dist/src/ars/profile.js +23 -6
  10. package/dist/src/ars/profile.js.map +1 -1
  11. package/package.json +10 -3
  12. package/vendor/academic-paper-skills/LICENSE +21 -0
  13. package/vendor/academic-paper-skills/NOTICE.md +7 -0
  14. package/vendor/academic-paper-skills/PSYCLAW_SOURCE.json +14 -0
  15. package/vendor/academic-paper-skills/academic-paper-composer/SKILL.md +840 -0
  16. package/vendor/academic-paper-skills/academic-paper-composer/references/section_guides.md +675 -0
  17. package/vendor/academic-paper-skills/academic-paper-composer/references/writing_standards.md +629 -0
  18. package/vendor/academic-paper-skills/academic-paper-composer/scripts/chapter_quality_check.py +470 -0
  19. package/vendor/academic-paper-skills/academic-paper-composer/scripts/final_evaluation.py +550 -0
  20. package/vendor/academic-paper-skills/academic-paper-strategist/SKILL.md +670 -0
  21. package/vendor/academic-paper-skills/academic-paper-strategist/references/quality_standards.md +336 -0
  22. package/vendor/academic-paper-skills/academic-paper-strategist/references/search_strategy.md +459 -0
  23. package/vendor/academic-paper-skills/academic-paper-strategist/scripts/evaluate_samples.py +300 -0
  24. package/vendor/academic-paper-skills/academic-paper-strategist/scripts/gap_analysis.py +399 -0
  25. package/vendor/ars/pi/wrapper.js +9 -0
  26. package/vendor/nature-skills/LICENSE +201 -0
  27. package/vendor/nature-skills/NOTICE.md +7 -0
  28. package/vendor/nature-skills/PSYCLAW_SOURCE.json +19 -0
  29. package/vendor/nature-skills/skills/nature-figure/README.md +107 -0
  30. package/vendor/nature-skills/skills/nature-figure/README_EN.md +107 -0
  31. package/vendor/nature-skills/skills/nature-figure/SKILL.md +154 -0
  32. package/vendor/nature-skills/skills/nature-figure/agents/openai.yaml +4 -0
  33. package/vendor/nature-skills/skills/nature-figure/evals/evals.json +325 -0
  34. package/vendor/nature-skills/skills/nature-figure/manifest.yaml +103 -0
  35. package/vendor/nature-skills/skills/nature-figure/references/ai-graphical-abstract-workflow.md +129 -0
  36. package/vendor/nature-skills/skills/nature-figure/references/api.md +576 -0
  37. package/vendor/nature-skills/skills/nature-figure/references/asset-adaptation.md +72 -0
  38. package/vendor/nature-skills/skills/nature-figure/references/backend-selection.md +118 -0
  39. package/vendor/nature-skills/skills/nature-figure/references/chart-types.md +348 -0
  40. package/vendor/nature-skills/skills/nature-figure/references/common-patterns.md +371 -0
  41. package/vendor/nature-skills/skills/nature-figure/references/demos.md +58 -0
  42. package/vendor/nature-skills/skills/nature-figure/references/design-theory.md +467 -0
  43. package/vendor/nature-skills/skills/nature-figure/references/figure-contract.md +122 -0
  44. package/vendor/nature-skills/skills/nature-figure/references/figure-legend-conventions.md +90 -0
  45. package/vendor/nature-skills/skills/nature-figure/references/multipanel-evidence-architecture.md +268 -0
  46. package/vendor/nature-skills/skills/nature-figure/references/nature-2026-observations.md +124 -0
  47. package/vendor/nature-skills/skills/nature-figure/references/nature-article-requirements.md +149 -0
  48. package/vendor/nature-skills/skills/nature-figure/references/openrouter-image-generation.md +141 -0
  49. package/vendor/nature-skills/skills/nature-figure/references/qa-contract.md +344 -0
  50. package/vendor/nature-skills/skills/nature-figure/references/r-template-index.md +66 -0
  51. package/vendor/nature-skills/skills/nature-figure/references/r-workflow.md +234 -0
  52. package/vendor/nature-skills/skills/nature-figure/references/template-catalog.md +33 -0
  53. package/vendor/nature-skills/skills/nature-figure/references/tutorials.md +260 -0
  54. package/vendor/nature-skills/skills/nature-figure/requirements.txt +1 -0
  55. package/vendor/nature-skills/skills/nature-figure/scripts/audit_figure_collisions.py +742 -0
  56. package/vendor/nature-skills/skills/nature-figure/scripts/audit_panel_alignment.py +933 -0
  57. package/vendor/nature-skills/skills/nature-figure/scripts/audit_pdf_text.py +152 -0
  58. package/vendor/nature-skills/skills/nature-figure/scripts/figure_safety.py +50 -0
  59. package/vendor/nature-skills/skills/nature-figure/scripts/generate_openrouter_schematic.py +260 -0
  60. package/vendor/nature-skills/skills/nature-figure/scripts/nature_figure_backend.py +93 -0
  61. package/vendor/nature-skills/skills/nature-figure/scripts/panel_alignment.R +188 -0
  62. package/vendor/nature-skills/skills/nature-figure/scripts/plot_templates.py +604 -0
  63. package/vendor/nature-skills/skills/nature-figure/scripts/validate_figure.py +835 -0
  64. package/vendor/nature-skills/skills/nature-figure/static/core/contract.md +55 -0
  65. package/vendor/nature-skills/skills/nature-figure/static/core/stance.md +41 -0
  66. package/vendor/nature-skills/skills/nature-figure/static/fragments/backend/python.md +56 -0
  67. package/vendor/nature-skills/skills/nature-figure/static/fragments/backend/r.md +63 -0
  68. package/vendor/nature-skills/skills/nature-figure/tests/test_figure_safety.py +209 -0
  69. package/vendor/nature-skills/skills/nature-polishing/README.md +58 -0
  70. package/vendor/nature-skills/skills/nature-polishing/README_EN.md +58 -0
  71. package/vendor/nature-skills/skills/nature-polishing/SKILL.md +111 -0
  72. package/vendor/nature-skills/skills/nature-polishing/agents/openai.yaml +4 -0
  73. package/vendor/nature-skills/skills/nature-polishing/manifest.yaml +101 -0
  74. package/vendor/nature-skills/skills/nature-polishing/references/latex-layout.md +211 -0
  75. package/vendor/nature-skills/skills/nature-polishing/references/nat-comms-2025-diction.md +73 -0
  76. package/vendor/nature-skills/skills/nature-polishing/references/phrasebank-playbook.md +175 -0
  77. package/vendor/nature-skills/skills/nature-polishing/references/published-article-patterns.md +126 -0
  78. package/vendor/nature-skills/skills/nature-polishing/references/section-moves.md +252 -0
  79. package/vendor/nature-skills/skills/nature-polishing/references/style-guardrails.md +94 -0
  80. package/vendor/nature-skills/skills/nature-polishing/references/writing-strategy.md +160 -0
  81. package/vendor/nature-skills/skills/nature-polishing/static/core/failure-modes.md +29 -0
  82. package/vendor/nature-skills/skills/nature-polishing/static/core/output-format.md +21 -0
  83. package/vendor/nature-skills/skills/nature-polishing/static/core/stance.md +26 -0
  84. package/vendor/nature-skills/skills/nature-polishing/static/fragments/journal/generic.md +17 -0
  85. package/vendor/nature-skills/skills/nature-polishing/static/fragments/journal/nat-comms.md +38 -0
  86. package/vendor/nature-skills/skills/nature-polishing/static/fragments/journal/nat-mach-intell.md +102 -0
  87. package/vendor/nature-skills/skills/nature-polishing/static/fragments/journal/nature.md +19 -0
  88. package/vendor/nature-skills/skills/nature-polishing/static/fragments/language/en.md +19 -0
  89. package/vendor/nature-skills/skills/nature-polishing/static/fragments/language/zh-to-en.md +19 -0
  90. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/algorithmic.md +18 -0
  91. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/hypothesis.md +17 -0
  92. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/methods.md +35 -0
  93. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/research.md +29 -0
  94. package/vendor/nature-skills/skills/nature-polishing/static/fragments/paper_type/review.md +17 -0
  95. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/abstract.md +26 -0
  96. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/conclusion.md +15 -0
  97. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/discussion.md +48 -0
  98. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/intro.md +33 -0
  99. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/methods.md +26 -0
  100. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/results.md +61 -0
  101. package/vendor/nature-skills/skills/nature-polishing/static/fragments/section/title.md +17 -0
  102. package/vendor/nature-skills/skills/nature-ref-verifier/README.md +44 -0
  103. package/vendor/nature-skills/skills/nature-ref-verifier/README_EN.md +44 -0
  104. package/vendor/nature-skills/skills/nature-ref-verifier/SKILL.md +196 -0
  105. package/vendor/nature-skills/skills/nature-ref-verifier/agents/openai.yaml +4 -0
  106. package/vendor/nature-skills/skills/nature-ref-verifier/manifest.yaml +19 -0
  107. package/vendor/nature-skills/skills/nature-ref-verifier/references/common-patterns.md +96 -0
  108. package/vendor/nature-skills/skills/nature-shared/README.md +43 -0
  109. package/vendor/nature-skills/skills/nature-shared/README_EN.md +43 -0
  110. package/vendor/nature-skills/skills/nature-shared/SKILL.md +33 -0
  111. package/vendor/nature-skills/skills/nature-shared/agents/openai.yaml +6 -0
  112. package/vendor/nature-skills/skills/nature-shared/core/consistency-sweep.md +122 -0
  113. package/vendor/nature-skills/skills/nature-shared/core/discussion-argument-language.md +192 -0
  114. package/vendor/nature-skills/skills/nature-shared/core/ethics.md +88 -0
  115. package/vendor/nature-skills/skills/nature-shared/core/main-text-discipline.md +179 -0
  116. package/vendor/nature-skills/skills/nature-shared/core/nature-abstract.md +171 -0
  117. package/vendor/nature-skills/skills/nature-shared/core/nature-introduction.md +164 -0
  118. package/vendor/nature-skills/skills/nature-shared/core/nature-results-discussion.md +215 -0
  119. package/vendor/nature-skills/skills/nature-shared/core/paper-type-taxonomy.md +41 -0
  120. package/vendor/nature-skills/skills/nature-shared/core/reader-workflow.md +21 -0
  121. package/vendor/nature-skills/skills/nature-shared/core/research-compliance.md +192 -0
  122. package/vendor/nature-skills/skills/nature-shared/core/terminology-ledger.md +58 -0
  123. package/vendor/nature-skills/skills/nature-shared/journal-formats/nat-comms.md +139 -0
  124. package/vendor/nature-skills/skills/nature-shared/journal-formats/nature-machine-intelligence.md +431 -0
  125. package/vendor/nature-skills/skills/nature-shared/journal-formats/nature.md +313 -0
  126. package/vendor/nature-skills/skills/nature-shared/manifest.yaml +52 -0
  127. package/vendor/nature-skills/skills/nature-shared/scripts/check_consistency.py +273 -0
  128. package/vendor/nature-skills/skills/nature-shared/tests/test_check_consistency.py +63 -0
package/README.md CHANGED
@@ -4,7 +4,7 @@ PsyClaw 是面向社会科学研究的智能体工作台。它把研究项目、
4
4
 
5
5
  PsyClaw 自有代码使用 MIT 许可证;随 npm 包内置的 Academic Research Skills 位于 `vendor/ars`,保持上游署名并单独遵循 CC BY-NC 4.0,仅限非商业用途。
6
6
 
7
- 当前版本:`0.28.1`。正式命令、用户配置目录和后续发布统一使用 `psyclaw`。
7
+ 当前版本:`0.28.2`。正式命令、用户配置目录和后续发布统一使用 `psyclaw`。
8
8
 
9
9
  ## 发布流程
10
10
 
@@ -21,19 +21,19 @@ RELEASE_MESSAGE="release: describe the change" pnpm release:push
21
21
  需要 Node.js `>=22.19.0`。官方 npm 源:
22
22
 
23
23
  ```powershell
24
- npm install -g psyclaw@0.28.1
24
+ npm install -g psyclaw@0.28.2
25
25
  ```
26
26
 
27
27
  如果本机 npm 配置把 registry 误写成带有 `~/` 的地址,请显式指定官方源:
28
28
 
29
29
  ```bash
30
- npm install -g psyclaw@0.28.1 --registry=https://registry.npmjs.org/
30
+ npm install -g psyclaw@0.28.2 --registry=https://registry.npmjs.org/
31
31
  ```
32
32
 
33
33
  中国大陆网络较慢或无法访问官方源时:
34
34
 
35
35
  ```powershell
36
- npm install -g psyclaw@0.28.1 --registry=https://registry.npmmirror.com
36
+ npm install -g psyclaw@0.28.2 --registry=https://registry.npmmirror.com
37
37
  ```
38
38
 
39
39
  PsyClaw 的 npm 发布包直接携带 Windows x64/arm64 版 `ripgrep` 和 `fd`,Windows 启动时直接使用包内可执行文件,不再联网下载。其他平台缺少这两个工具时仍由锁定的 Pi 原生工具管理器处理:代理环境走 GitHub 官方 API 与 Release,国内 npm registry 环境统一走国内镜像。
@@ -92,7 +92,7 @@ psyclaw brief
92
92
  | 创建项目能力 | `/create-skill`、`/create-hook`、`/create-rule`、`/create-subagent`(均先预览并确认) |
93
93
  | 运行自定义只读角色 | `/agents --agent <id> <task>` 或 `/agents --agents <id,...> <task>`(最多四个隔离 worker) |
94
94
  | 调用已加载 Skill | `/skill:<name>` |
95
- | 使用 PsyClaw ARS | `/ars doctor`,然后 `/ars full <task>` 或 `/ars start` |
95
+ | 使用 PsyClaw ARS | 输入 `ars` 后按 Tab(或 `ars: <task>`);也可用 `/ars doctor` / `/ars full <task>` |
96
96
  | 管理 Plugin | `/plugin`;终端使用 `psyclaw plugin install|remove|list` |
97
97
  | 调用已配置 MCP | 模型通过 `psyclaw_mcp` 自动发现并调用 `.psyclaw/mcp/*.json` 中启用的服务器 |
98
98
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": "psyclaw/recommended-agents/v1",
3
- "documentVersion": "0.28.1",
3
+ "documentVersion": "0.28.2",
4
4
  "syncedAt": "2026-09-06",
5
5
  "sourceDocument": "bundled literature/review subagents",
6
6
  "sourceRef": "bundled",
@@ -21,6 +21,7 @@ import { enabledLocalSkillPaths, enabledLocalPromptPaths, readUserSkillState, sc
21
21
  import { RuntimeMcpRegistry, setUserMcpConfigEnabled, } from "../../integrations/mcp-runtime.js";
22
22
  import { SecretInputComponent, ProviderPickerComponent, } from "../../tui/provider-picker.js";
23
23
  import { ARS_REPOSITORY_URL, ARS_UPSTREAM_COMMIT, ARS_UPSTREAM_REF, PSYCLAW_ARS_PROFILE_VERSION, detectNatureArsFillers, formatNatureArsFillerStatus, isArsPiActive, isArsPiTurn, psyclawArsPatch, } from "../../ars/profile.js";
24
+ import { ArsModeEditor, enterArsModeEditorText, isArsModeEditorText } from "../../ars/mode-editor.js";
24
25
  const PARADIGMS = new Set([
25
26
  "survey-observational",
26
27
  "qualitative-thematic",
@@ -1152,6 +1153,18 @@ export default function psyclawExtension(pi) {
1152
1153
  })}`,
1153
1154
  };
1154
1155
  });
1156
+ if (!legacyTestApi && typeof pi.on === "function")
1157
+ pi.on("session_start", (_event, ctx) => {
1158
+ if (!ctx.hasUI || typeof ctx.ui.setEditorComponent !== "function")
1159
+ return;
1160
+ ctx.ui.setEditorComponent((tui, theme, keybindings) => {
1161
+ const editor = new ArsModeEditor(tui, theme, keybindings);
1162
+ editor.onArsModeChange = (active) => {
1163
+ ctx.ui.setStatus("ars", active ? "ARS" : undefined);
1164
+ };
1165
+ return editor;
1166
+ });
1167
+ });
1155
1168
  if (!legacyTestApi && typeof pi.on === "function")
1156
1169
  pi.on("input", (event, ctx) => {
1157
1170
  if (event.source === "extension")
@@ -1165,7 +1178,10 @@ export default function psyclawExtension(pi) {
1165
1178
  pi.on("input", async (event, ctx) => {
1166
1179
  if (event.source === "extension" || isArsPiActive(ctx.sessionManager))
1167
1180
  return;
1168
- if (!/^\/(?:ars-[a-z0-9-]+|skill:(?:deep-research|academic-paper|academic-paper-reviewer|academic-pipeline))(?:\s|$)/i.test(event.text.trim()))
1181
+ const text = event.text.trim();
1182
+ const entersArs = isArsModeEditorText(text)
1183
+ || /^\/(?:ars-[a-z0-9-]+|skill:(?:deep-research|academic-paper|academic-paper-reviewer|academic-pipeline))(?:\s|$)/i.test(text);
1184
+ if (!entersArs)
1169
1185
  return;
1170
1186
  if (!ctx.hasUI)
1171
1187
  return { action: "handled" };
@@ -1451,22 +1467,37 @@ export default function psyclawExtension(pi) {
1451
1467
  });
1452
1468
  if (!legacyTestApi)
1453
1469
  pi.registerCommand("ars", {
1454
- description: "启动或管理 PsyClaw ARS 模式",
1470
+ description: "进入 ARS 对话模式,或管理 doctor/start/full/stop",
1455
1471
  handler: async (args, ctx) => {
1456
1472
  try {
1457
- const [action = "status", ...rest] = args.trim().split(/\s+/).filter(Boolean);
1473
+ const [action, ...rest] = args.trim().split(/\s+/).filter(Boolean);
1474
+ // Bare /ars → conversation mode (ars: + tint). No profile popup.
1475
+ if (!action) {
1476
+ if (!ctx.hasUI) {
1477
+ ctx.ui.notify("当前环境无编辑器;请改用 /ars start 或发送 ars: <任务>。", "info");
1478
+ return;
1479
+ }
1480
+ if (!isArsPiActive(ctx.sessionManager)) {
1481
+ const approved = await ctx.ui.confirm("启用 ARS?", `来源:${ARS_REPOSITORY_URL} @ ${ARS_UPSTREAM_REF}\n许可:CC BY-NC 4.0,仅限非商业用途。关键研究阶段仍会请求确认。`);
1482
+ if (!approved)
1483
+ return;
1484
+ }
1485
+ ctx.ui.setEditorText(enterArsModeEditorText(ctx.ui.getEditorText?.() ?? ""));
1486
+ ctx.ui.setStatus("ars", "ARS");
1487
+ return;
1488
+ }
1458
1489
  if (action === "status") {
1459
1490
  ctx.ui.notify([
1460
1491
  `PsyClaw ARS profile v${PSYCLAW_ARS_PROFILE_VERSION}`,
1461
- "模式:轻量 ARS(不要求 /init /run)",
1492
+ "模式:轻量 ARS(输入 ars 后按 Tab,或以 ars: 前缀对话)",
1462
1493
  `来源:${ARS_REPOSITORY_URL} @ ${ARS_UPSTREAM_REF} (${ARS_UPSTREAM_COMMIT.slice(0, 12)})`,
1463
- "入口:/ars doctor,/ars start,/ars full <task>,/ars stop",
1494
+ "入口:ars: <task>,/ars doctor,/ars start,/ars full <task>,/ars stop",
1464
1495
  formatNatureArsFillerStatus(natureFillersFromCommandContext(ctx)),
1465
1496
  ].join("\n"), "info");
1466
1497
  return;
1467
1498
  }
1468
1499
  if (action === "install") {
1469
- ctx.ui.notify("ARS 可直接使用:运行 /ars start /ars full <task>。", "info");
1500
+ ctx.ui.notify("ARS Nature/compose 技能已内置:输入 ars 后按 Tab,或以 /ars start、/ars full <task> 使用。", "info");
1470
1501
  return;
1471
1502
  }
1472
1503
  if ((action === "start" || action === "full") && !isArsPiActive(ctx.sessionManager)) {
@@ -1484,11 +1515,14 @@ export default function psyclawExtension(pi) {
1484
1515
  ? `/ars-full${rest.length > 0 ? ` ${rest.join(" ")}` : ""}`
1485
1516
  : undefined;
1486
1517
  if (!upstreamCommand) {
1487
- ctx.ui.notify("Usage: /ars [status|doctor|start|full <task>|stop]", "info");
1518
+ ctx.ui.notify("Usage: /ars [status|doctor|start|full <task>|stop] 或直接输入 ars 后按 Tab", "info");
1488
1519
  return;
1489
1520
  }
1490
- if (action === "doctor" || action === "full" || action === "start") {
1491
- ctx.ui.notify(formatNatureArsFillerStatus(natureFillersFromCommandContext(ctx)), "info");
1521
+ if (action === "stop") {
1522
+ ctx.ui.setStatus("ars", undefined);
1523
+ if (ctx.hasUI && isArsModeEditorText(ctx.ui.getEditorText?.() ?? "")) {
1524
+ ctx.ui.setEditorText("");
1525
+ }
1492
1526
  }
1493
1527
  // A queued prompt does not get a fresh system prompt in Pi. Wait so the
1494
1528
  // upstream wrapper can activate ARS and inject its compatibility note.