psyclaw 0.24.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 (270) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -0
  3. package/dist/apps/panel/index.html +3416 -0
  4. package/dist/src/adapters/pi/extension.d.ts +19 -0
  5. package/dist/src/adapters/pi/extension.js +735 -0
  6. package/dist/src/adapters/pi/extension.js.map +1 -0
  7. package/dist/src/adapters/pi/model.d.ts +72 -0
  8. package/dist/src/adapters/pi/model.js +152 -0
  9. package/dist/src/adapters/pi/model.js.map +1 -0
  10. package/dist/src/adapters/pi/resources.d.ts +23 -0
  11. package/dist/src/adapters/pi/resources.js +54 -0
  12. package/dist/src/adapters/pi/resources.js.map +1 -0
  13. package/dist/src/adapters/pi/rpc.d.ts +56 -0
  14. package/dist/src/adapters/pi/rpc.js +248 -0
  15. package/dist/src/adapters/pi/rpc.js.map +1 -0
  16. package/dist/src/adapters/pi/session.d.ts +30 -0
  17. package/dist/src/adapters/pi/session.js +64 -0
  18. package/dist/src/adapters/pi/session.js.map +1 -0
  19. package/dist/src/agents/catalog.d.ts +30 -0
  20. package/dist/src/agents/catalog.js +118 -0
  21. package/dist/src/agents/catalog.js.map +1 -0
  22. package/dist/src/agents/discover.d.ts +28 -0
  23. package/dist/src/agents/discover.js +127 -0
  24. package/dist/src/agents/discover.js.map +1 -0
  25. package/dist/src/agents/import.d.ts +67 -0
  26. package/dist/src/agents/import.js +801 -0
  27. package/dist/src/agents/import.js.map +1 -0
  28. package/dist/src/analysis/hooks.d.ts +81 -0
  29. package/dist/src/analysis/hooks.js +139 -0
  30. package/dist/src/analysis/hooks.js.map +1 -0
  31. package/dist/src/analysis/pre-registration.d.ts +18 -0
  32. package/dist/src/analysis/pre-registration.js +86 -0
  33. package/dist/src/analysis/pre-registration.js.map +1 -0
  34. package/dist/src/branding.d.ts +43 -0
  35. package/dist/src/branding.js +127 -0
  36. package/dist/src/branding.js.map +1 -0
  37. package/dist/src/chat.d.ts +16 -0
  38. package/dist/src/chat.js +67 -0
  39. package/dist/src/chat.js.map +1 -0
  40. package/dist/src/cli.d.ts +2 -0
  41. package/dist/src/cli.js +316 -0
  42. package/dist/src/cli.js.map +1 -0
  43. package/dist/src/core/citations.d.ts +44 -0
  44. package/dist/src/core/citations.js +48 -0
  45. package/dist/src/core/citations.js.map +1 -0
  46. package/dist/src/core/contracts.d.ts +119 -0
  47. package/dist/src/core/contracts.js +2 -0
  48. package/dist/src/core/contracts.js.map +1 -0
  49. package/dist/src/core/docx.d.ts +11 -0
  50. package/dist/src/core/docx.js +46 -0
  51. package/dist/src/core/docx.js.map +1 -0
  52. package/dist/src/core/doi.d.ts +41 -0
  53. package/dist/src/core/doi.js +82 -0
  54. package/dist/src/core/doi.js.map +1 -0
  55. package/dist/src/core/evidence-policy.d.ts +24 -0
  56. package/dist/src/core/evidence-policy.js +308 -0
  57. package/dist/src/core/evidence-policy.js.map +1 -0
  58. package/dist/src/core/filekind.d.ts +15 -0
  59. package/dist/src/core/filekind.js +82 -0
  60. package/dist/src/core/filekind.js.map +1 -0
  61. package/dist/src/core/hash.d.ts +2 -0
  62. package/dist/src/core/hash.js +17 -0
  63. package/dist/src/core/hash.js.map +1 -0
  64. package/dist/src/core/pricing.d.ts +38 -0
  65. package/dist/src/core/pricing.js +110 -0
  66. package/dist/src/core/pricing.js.map +1 -0
  67. package/dist/src/core/redact.d.ts +12 -0
  68. package/dist/src/core/redact.js +48 -0
  69. package/dist/src/core/redact.js.map +1 -0
  70. package/dist/src/core/references.d.ts +55 -0
  71. package/dist/src/core/references.js +102 -0
  72. package/dist/src/core/references.js.map +1 -0
  73. package/dist/src/core/schemas.d.ts +162 -0
  74. package/dist/src/core/schemas.js +160 -0
  75. package/dist/src/core/schemas.js.map +1 -0
  76. package/dist/src/extension.d.ts +1 -0
  77. package/dist/src/extension.js +2 -0
  78. package/dist/src/extension.js.map +1 -0
  79. package/dist/src/index.d.ts +72 -0
  80. package/dist/src/index.js +73 -0
  81. package/dist/src/index.js.map +1 -0
  82. package/dist/src/install/installer.d.ts +147 -0
  83. package/dist/src/install/installer.js +743 -0
  84. package/dist/src/install/installer.js.map +1 -0
  85. package/dist/src/integrations/contracts.d.ts +35 -0
  86. package/dist/src/integrations/contracts.js +27 -0
  87. package/dist/src/integrations/contracts.js.map +1 -0
  88. package/dist/src/integrations/mcp.d.ts +155 -0
  89. package/dist/src/integrations/mcp.js +826 -0
  90. package/dist/src/integrations/mcp.js.map +1 -0
  91. package/dist/src/knowledge-map/contracts.d.ts +20 -0
  92. package/dist/src/knowledge-map/contracts.js +2 -0
  93. package/dist/src/knowledge-map/contracts.js.map +1 -0
  94. package/dist/src/knowledge-map/index.d.ts +4 -0
  95. package/dist/src/knowledge-map/index.js +39 -0
  96. package/dist/src/knowledge-map/index.js.map +1 -0
  97. package/dist/src/literature/contracts.d.ts +106 -0
  98. package/dist/src/literature/contracts.js +2 -0
  99. package/dist/src/literature/contracts.js.map +1 -0
  100. package/dist/src/literature/fulltext.d.ts +7 -0
  101. package/dist/src/literature/fulltext.js +24 -0
  102. package/dist/src/literature/fulltext.js.map +1 -0
  103. package/dist/src/literature/knowledge-map.d.ts +2 -0
  104. package/dist/src/literature/knowledge-map.js +20 -0
  105. package/dist/src/literature/knowledge-map.js.map +1 -0
  106. package/dist/src/literature/ledger.d.ts +3 -0
  107. package/dist/src/literature/ledger.js +17 -0
  108. package/dist/src/literature/ledger.js.map +1 -0
  109. package/dist/src/literature/metadata.d.ts +6 -0
  110. package/dist/src/literature/metadata.js +32 -0
  111. package/dist/src/literature/metadata.js.map +1 -0
  112. package/dist/src/memory/store.d.ts +22 -0
  113. package/dist/src/memory/store.js +73 -0
  114. package/dist/src/memory/store.js.map +1 -0
  115. package/dist/src/orchestration/contracts.d.ts +61 -0
  116. package/dist/src/orchestration/contracts.js +2 -0
  117. package/dist/src/orchestration/contracts.js.map +1 -0
  118. package/dist/src/orchestration/pi-executor.d.ts +28 -0
  119. package/dist/src/orchestration/pi-executor.js +169 -0
  120. package/dist/src/orchestration/pi-executor.js.map +1 -0
  121. package/dist/src/orchestration/runner.d.ts +196 -0
  122. package/dist/src/orchestration/runner.js +991 -0
  123. package/dist/src/orchestration/runner.js.map +1 -0
  124. package/dist/src/orchestration/scheduler.d.ts +8 -0
  125. package/dist/src/orchestration/scheduler.js +335 -0
  126. package/dist/src/orchestration/scheduler.js.map +1 -0
  127. package/dist/src/panel/events.d.ts +20 -0
  128. package/dist/src/panel/events.js +93 -0
  129. package/dist/src/panel/events.js.map +1 -0
  130. package/dist/src/panel/extension.d.ts +8 -0
  131. package/dist/src/panel/extension.js +114 -0
  132. package/dist/src/panel/extension.js.map +1 -0
  133. package/dist/src/panel/literature-map.d.ts +26 -0
  134. package/dist/src/panel/literature-map.js +34 -0
  135. package/dist/src/panel/literature-map.js.map +1 -0
  136. package/dist/src/panel/projection.d.ts +51 -0
  137. package/dist/src/panel/projection.js +288 -0
  138. package/dist/src/panel/projection.js.map +1 -0
  139. package/dist/src/panel/server.d.ts +46 -0
  140. package/dist/src/panel/server.js +1610 -0
  141. package/dist/src/panel/server.js.map +1 -0
  142. package/dist/src/panel/usage.d.ts +53 -0
  143. package/dist/src/panel/usage.js +150 -0
  144. package/dist/src/panel/usage.js.map +1 -0
  145. package/dist/src/project/bootstrap.d.ts +10 -0
  146. package/dist/src/project/bootstrap.js +83 -0
  147. package/dist/src/project/bootstrap.js.map +1 -0
  148. package/dist/src/project/hitl.d.ts +12 -0
  149. package/dist/src/project/hitl.js +43 -0
  150. package/dist/src/project/hitl.js.map +1 -0
  151. package/dist/src/project/jsonl.d.ts +16 -0
  152. package/dist/src/project/jsonl.js +93 -0
  153. package/dist/src/project/jsonl.js.map +1 -0
  154. package/dist/src/project/manuscript.d.ts +21 -0
  155. package/dist/src/project/manuscript.js +74 -0
  156. package/dist/src/project/manuscript.js.map +1 -0
  157. package/dist/src/project/paths.d.ts +38 -0
  158. package/dist/src/project/paths.js +166 -0
  159. package/dist/src/project/paths.js.map +1 -0
  160. package/dist/src/project/versions.d.ts +10 -0
  161. package/dist/src/project/versions.js +14 -0
  162. package/dist/src/project/versions.js.map +1 -0
  163. package/dist/src/psyclaw-theme.d.ts +88 -0
  164. package/dist/src/psyclaw-theme.js +89 -0
  165. package/dist/src/psyclaw-theme.js.map +1 -0
  166. package/dist/src/research/brief.d.ts +11 -0
  167. package/dist/src/research/brief.js +81 -0
  168. package/dist/src/research/brief.js.map +1 -0
  169. package/dist/src/research/ledger.d.ts +12 -0
  170. package/dist/src/research/ledger.js +43 -0
  171. package/dist/src/research/ledger.js.map +1 -0
  172. package/dist/src/run.d.ts +20 -0
  173. package/dist/src/run.js +34 -0
  174. package/dist/src/run.js.map +1 -0
  175. package/dist/src/setup.d.ts +54 -0
  176. package/dist/src/setup.js +221 -0
  177. package/dist/src/setup.js.map +1 -0
  178. package/dist/src/skills/contracts.d.ts +105 -0
  179. package/dist/src/skills/contracts.js +3 -0
  180. package/dist/src/skills/contracts.js.map +1 -0
  181. package/dist/src/skills/preflight.d.ts +10 -0
  182. package/dist/src/skills/preflight.js +39 -0
  183. package/dist/src/skills/preflight.js.map +1 -0
  184. package/dist/src/skills/registry.d.ts +28 -0
  185. package/dist/src/skills/registry.js +556 -0
  186. package/dist/src/skills/registry.js.map +1 -0
  187. package/dist/src/style/artifact.d.ts +6 -0
  188. package/dist/src/style/artifact.js +61 -0
  189. package/dist/src/style/artifact.js.map +1 -0
  190. package/dist/src/style/cli-ui.d.ts +41 -0
  191. package/dist/src/style/cli-ui.js +119 -0
  192. package/dist/src/style/cli-ui.js.map +1 -0
  193. package/dist/src/style/contracts.d.ts +34 -0
  194. package/dist/src/style/contracts.js +2 -0
  195. package/dist/src/style/contracts.js.map +1 -0
  196. package/dist/src/style/registry.d.ts +16 -0
  197. package/dist/src/style/registry.js +50 -0
  198. package/dist/src/style/registry.js.map +1 -0
  199. package/dist/src/trust/manifest.d.ts +42 -0
  200. package/dist/src/trust/manifest.js +53 -0
  201. package/dist/src/trust/manifest.js.map +1 -0
  202. package/dist/src/trust/sbom.d.ts +54 -0
  203. package/dist/src/trust/sbom.js +77 -0
  204. package/dist/src/trust/sbom.js.map +1 -0
  205. package/dist/src/tui/app.d.ts +3 -0
  206. package/dist/src/tui/app.js +103 -0
  207. package/dist/src/tui/app.js.map +1 -0
  208. package/dist/src/tui/model.d.ts +13 -0
  209. package/dist/src/tui/model.js +25 -0
  210. package/dist/src/tui/model.js.map +1 -0
  211. package/dist/src/updates/check.d.ts +43 -0
  212. package/dist/src/updates/check.js +68 -0
  213. package/dist/src/updates/check.js.map +1 -0
  214. package/dist/src/updates/manifest.d.ts +19 -0
  215. package/dist/src/updates/manifest.js +58 -0
  216. package/dist/src/updates/manifest.js.map +1 -0
  217. package/dist/src/updates/registry.d.ts +21 -0
  218. package/dist/src/updates/registry.js +82 -0
  219. package/dist/src/updates/registry.js.map +1 -0
  220. package/dist/src/updates/skills.d.ts +15 -0
  221. package/dist/src/updates/skills.js +39 -0
  222. package/dist/src/updates/skills.js.map +1 -0
  223. package/dist/src/updates/status.d.ts +7 -0
  224. package/dist/src/updates/status.js +37 -0
  225. package/dist/src/updates/status.js.map +1 -0
  226. package/dist/src/updates/update.d.ts +43 -0
  227. package/dist/src/updates/update.js +126 -0
  228. package/dist/src/updates/update.js.map +1 -0
  229. package/dist/src/wizard.d.ts +7 -0
  230. package/dist/src/wizard.js +90 -0
  231. package/dist/src/wizard.js.map +1 -0
  232. package/dist/src/workflows/analysis-delegation.d.ts +3 -0
  233. package/dist/src/workflows/analysis-delegation.js +96 -0
  234. package/dist/src/workflows/analysis-delegation.js.map +1 -0
  235. package/dist/src/workflows/expert-review-runner.d.ts +29 -0
  236. package/dist/src/workflows/expert-review-runner.js +35 -0
  237. package/dist/src/workflows/expert-review-runner.js.map +1 -0
  238. package/dist/src/workflows/expert-review.d.ts +140 -0
  239. package/dist/src/workflows/expert-review.js +111 -0
  240. package/dist/src/workflows/expert-review.js.map +1 -0
  241. package/dist/src/workflows/institutional-fulltext.d.ts +16 -0
  242. package/dist/src/workflows/institutional-fulltext.js +110 -0
  243. package/dist/src/workflows/institutional-fulltext.js.map +1 -0
  244. package/dist/src/workflows/literature-review.d.ts +3 -0
  245. package/dist/src/workflows/literature-review.js +76 -0
  246. package/dist/src/workflows/literature-review.js.map +1 -0
  247. package/dist/src/workflows/meta-analysis.d.ts +38 -0
  248. package/dist/src/workflows/meta-analysis.js +185 -0
  249. package/dist/src/workflows/meta-analysis.js.map +1 -0
  250. package/dist/src/workflows/publish.d.ts +51 -0
  251. package/dist/src/workflows/publish.js +153 -0
  252. package/dist/src/workflows/publish.js.map +1 -0
  253. package/dist/src/workflows/spec.d.ts +51 -0
  254. package/dist/src/workflows/spec.js +157 -0
  255. package/dist/src/workflows/spec.js.map +1 -0
  256. package/dist/src/workflows/style-contract.d.ts +24 -0
  257. package/dist/src/workflows/style-contract.js +23 -0
  258. package/dist/src/workflows/style-contract.js.map +1 -0
  259. package/dist/src/workflows/writing-review.d.ts +15 -0
  260. package/dist/src/workflows/writing-review.js +82 -0
  261. package/dist/src/workflows/writing-review.js.map +1 -0
  262. package/package.json +73 -0
  263. package/package.json.psyclaw +21 -0
  264. package/skills/core/citation-audit/SKILL.md +9 -0
  265. package/skills/core/evidence-capture/SKILL.md +9 -0
  266. package/skills/core/manifest.json +15 -0
  267. package/skills/core/research-brief/SKILL.md +11 -0
  268. package/skills/core/research-intake/SKILL.md +9 -0
  269. package/skills/recommended/catalog.json +52 -0
  270. package/skills/recommended/mcp-catalog.json +118 -0
@@ -0,0 +1,24 @@
1
+ export type StyleArtifactKind = "manuscript" | "figure" | "table";
2
+ export interface JournalStyleProfile {
3
+ schemaVersion: "psyclaw/journal-style/v1";
4
+ journal: string;
5
+ source: string;
6
+ ref: string;
7
+ version: string;
8
+ license?: string;
9
+ rules: Record<string, string | number | boolean>;
10
+ }
11
+ export interface StyleArtifactContract {
12
+ schemaVersion: "psyclaw/style-artifact/v1";
13
+ kind: StyleArtifactKind;
14
+ id: string;
15
+ version: string;
16
+ format: string;
17
+ profile: string;
18
+ sourceHash?: string;
19
+ scriptPath?: string;
20
+ inputHash?: string;
21
+ }
22
+ export declare const defaultJournalStyle: JournalStyleProfile;
23
+ export declare function validateStyleArtifact(value: StyleArtifactContract): StyleArtifactContract;
24
+ export declare function resolveJournalStyle(profile?: JournalStyleProfile): JournalStyleProfile;
@@ -0,0 +1,23 @@
1
+ export const defaultJournalStyle = {
2
+ schemaVersion: "psyclaw/journal-style/v1",
3
+ journal: "default-scientific",
4
+ source: "psyclaw-built-in",
5
+ ref: "default-v1",
6
+ version: "1.0.0",
7
+ rules: { citations: "author-year-or-numbered", figureFormat: "png-or-pdf", tableFormat: "tsv-or-csv", discloseUncertainty: true },
8
+ };
9
+ export function validateStyleArtifact(value) {
10
+ if (value.schemaVersion !== "psyclaw/style-artifact/v1" || !value.id || !value.version || !value.format || !value.profile)
11
+ throw new Error("invalid psyclaw/style-artifact/v1");
12
+ if ((value.kind === "figure" || value.kind === "table") && (!value.scriptPath || !value.inputHash))
13
+ throw new Error("data-derived figures and tables require scriptPath and inputHash");
14
+ return value;
15
+ }
16
+ export function resolveJournalStyle(profile) {
17
+ if (!profile)
18
+ return defaultJournalStyle;
19
+ if (profile.schemaVersion !== "psyclaw/journal-style/v1" || !profile.source || !profile.ref || !profile.version || !profile.license)
20
+ throw new Error("journal profile requires source, ref, version, and license");
21
+ return profile;
22
+ }
23
+ //# sourceMappingURL=style-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-contract.js","sourceRoot":"","sources":["../../../src/workflows/style-contract.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,MAAM,mBAAmB,GAAwB;IACtD,aAAa,EAAE,0BAA0B;IACzC,OAAO,EAAE,oBAAoB;IAC7B,MAAM,EAAE,kBAAkB;IAC1B,GAAG,EAAE,YAAY;IACjB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,EAAE,SAAS,EAAE,yBAAyB,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,IAAI,EAAE;CAClI,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,KAA4B;IAChE,IAAI,KAAK,CAAC,aAAa,KAAK,2BAA2B,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAChL,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACxL,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,IAAI,CAAC,OAAO;QAAE,OAAO,mBAAmB,CAAC;IACzC,IAAI,OAAO,CAAC,aAAa,KAAK,0BAA0B,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IACnN,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type WorkflowResult, type WorkflowSpec } from "./spec.js";
2
+ export declare const writingReviewSpec: WorkflowSpec;
3
+ export interface ReviewFinding {
4
+ severity: "block" | "warn";
5
+ rule: string;
6
+ claimId?: string;
7
+ message: string;
8
+ }
9
+ export interface ReviewSuggestion {
10
+ severity: "block" | "warn";
11
+ rule: string;
12
+ claimId?: string;
13
+ suggestion: string;
14
+ }
15
+ export declare function runWritingReview(root: string): Promise<WorkflowResult>;
@@ -0,0 +1,82 @@
1
+ import { checkEvidenceSufficiency } from "../core/evidence-policy.js";
2
+ import { loadLedger, readProject } from "../research/ledger.js";
3
+ import { allParadigms, finalizeWorkflow } from "./spec.js";
4
+ import { allocateProjectVersion } from "../project/versions.js";
5
+ export const writingReviewSpec = {
6
+ id: "writing-review",
7
+ version: "1.0.0",
8
+ description: "Audit drafted claims against evidence, honesty, and causal-language rules.",
9
+ paradigms: allParadigms,
10
+ steps: [
11
+ { id: "read", role: "verifier", effect: "read", description: "load claims and evidence" },
12
+ { id: "check", role: "critic", effect: "read", description: "honesty and causal-language heuristics" },
13
+ { id: "write", role: "writer", effect: "write", description: "write findings report" },
14
+ ],
15
+ requiredArtifacts: ["writing-review.md", "review-findings.json", "review-suggestions.json"],
16
+ };
17
+ const CAUSAL_PATTERN = /\b(?:causes?|leads? to|determines?|increases?|decreases?|drives?|improves?)\b/i;
18
+ const CONFIRMATORY_PATTERN = /\b(?:proves?|proven|established)\b/i;
19
+ export async function runWritingReview(root) {
20
+ const project = await readProject(root);
21
+ const ledger = await loadLedger(root);
22
+ const gates = checkEvidenceSufficiency({ ...ledger, paradigm: project.paradigm });
23
+ const version = await allocateProjectVersion(root, "manuscript-revision", `writing-review:${Date.now()}`);
24
+ const gateByClaim = new Map(gates.map((gate) => [gate.claimIds?.[0], gate]));
25
+ const findings = [];
26
+ for (const claim of ledger.claims) {
27
+ const gate = gateByClaim.get(claim.id);
28
+ if (claim.status === "supported" && gate && !gate.ok) {
29
+ findings.push({
30
+ severity: "block",
31
+ rule: "unsupported-claim-asserted-as-supported",
32
+ claimId: claim.id,
33
+ message: `claim ${claim.id} is marked supported but fails its evidence gate`,
34
+ });
35
+ }
36
+ if (claim.kind !== "result" && CAUSAL_PATTERN.test(claim.text)) {
37
+ findings.push({
38
+ severity: "warn",
39
+ rule: "causal-language-without-result-artifact",
40
+ claimId: claim.id,
41
+ message: `claim ${claim.id} uses causal language but is not backed by a result artifact`,
42
+ });
43
+ }
44
+ if (claim.kind === "result" && CONFIRMATORY_PATTERN.test(claim.text)) {
45
+ findings.push({
46
+ severity: "warn",
47
+ rule: "confirmatory-language",
48
+ claimId: claim.id,
49
+ message: `claim ${claim.id} asserts a proof or established fact; prefer uncertainty-qualified language`,
50
+ });
51
+ }
52
+ }
53
+ const report = {
54
+ schemaVersion: "psyclaw/writing-review/v1",
55
+ version,
56
+ findings,
57
+ blockCount: findings.filter((finding) => finding.severity === "block").length,
58
+ suggestions: findings.map((finding) => ({ severity: finding.severity, rule: finding.rule, ...(finding.claimId ? { claimId: finding.claimId } : {}), suggestion: finding.message })),
59
+ };
60
+ const markdown = [
61
+ `# Writing Review ${version}`,
62
+ "",
63
+ `Research goal: ${project.goal}`,
64
+ "",
65
+ "## Findings",
66
+ "",
67
+ ...(findings.length ? findings.map((finding) => `- [${finding.severity}] ${finding.rule}: ${finding.message}`) : ["- None"]),
68
+ "",
69
+ ].join("\n");
70
+ return finalizeWorkflow(root, writingReviewSpec, {
71
+ gates,
72
+ outputs: [
73
+ { path: "writing-review.md", contents: markdown },
74
+ { path: "review-findings.json", contents: `${JSON.stringify(report, null, 2)}\n` },
75
+ { path: "review-suggestions.json", contents: `${JSON.stringify({ schemaVersion: "psyclaw/review-suggestions/v1", version, suggestions: report.suggestions }, null, 2)}\n` },
76
+ { path: `writing-review-${version}.md`, contents: markdown },
77
+ { path: `review-findings-${version}.json`, contents: `${JSON.stringify(report, null, 2)}\n` },
78
+ ],
79
+ completed: ["claims loaded", "honesty heuristics applied", "findings reported"],
80
+ });
81
+ }
82
+ //# sourceMappingURL=writing-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writing-review.js","sourceRoot":"","sources":["../../../src/workflows/writing-review.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "psyclaw",
3
+ "version": "0.24.0",
4
+ "description": "A standalone, evidence-grounded social-science research agent that bundles Pi with PsyClaw's research contracts, evidence gates, and workflows",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Exekiel179/psyclaw.git"
10
+ },
11
+ "homepage": "https://github.com/Exekiel179/psyclaw#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/Exekiel179/psyclaw/issues"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public",
17
+ "registry": "https://registry.npmjs.org/"
18
+ },
19
+ "bin": {
20
+ "psyclaw": "dist/src/cli.js"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "skills",
25
+ "package.json.psyclaw"
26
+ ],
27
+ "engines": {
28
+ "node": ">=22.19.0"
29
+ },
30
+ "keywords": [
31
+ "ai",
32
+ "agent",
33
+ "research",
34
+ "social-science",
35
+ "evidence",
36
+ "pi"
37
+ ],
38
+ "packageManager": "pnpm@10.28.2",
39
+ "pi": {
40
+ "extensions": [
41
+ "./dist/src/extension.js",
42
+ "./dist/src/panel/extension.js"
43
+ ],
44
+ "skills": [
45
+ "./skills/core"
46
+ ]
47
+ },
48
+ "scripts": {
49
+ "build": "tsc -p tsconfig.json && node scripts/copy-panel.mjs",
50
+ "typecheck": "tsc --noEmit -p tsconfig.json",
51
+ "test": "vitest run",
52
+ "test:watch": "vitest",
53
+ "eval": "tsx evals/harness.ts",
54
+ "eval:modules": "tsx evals/modules.ts",
55
+ "check:branding": "node scripts/check-branding.mjs",
56
+ "prepublishOnly": "pnpm check:branding && pnpm build"
57
+ },
58
+ "dependencies": {
59
+ "@earendil-works/pi-ai": "0.84.1",
60
+ "@earendil-works/pi-coding-agent": "0.84.1",
61
+ "ink": "^7.1.1",
62
+ "react": "^19.2.8",
63
+ "typebox": "1.3.7",
64
+ "yaml": "2.9.0"
65
+ },
66
+ "devDependencies": {
67
+ "@types/node": "24.12.4",
68
+ "@types/react": "^19.2.18",
69
+ "tsx": "4.20.3",
70
+ "typescript": "5.9.3",
71
+ "vitest": "4.1.9"
72
+ }
73
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "schemaVersion": "psyclaw/package-governance/v1",
3
+ "id": "psyclaw",
4
+ "apiVersion": "0.24",
5
+ "capabilities": ["research-brief", "evidence-ledger", "integrity-gates"],
6
+ "permissions": {
7
+ "read": ["project-root"],
8
+ "write": [".psyclaw", "notes", "outputs", "data/clean"],
9
+ "network": "disabled-by-default",
10
+ "destructive": "denied-by-default"
11
+ },
12
+ "trust": "builtin",
13
+ "license": {
14
+ "spdx": "MIT",
15
+ "evidenceRef": "LICENSE"
16
+ },
17
+ "source": {
18
+ "kind": "workspace",
19
+ "ref": "psypi@fb0012a1035d18bc1f5c6ae75f66c979f1ae3ee0"
20
+ }
21
+ }
@@ -0,0 +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.
@@ -0,0 +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.
@@ -0,0 +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
+ }
@@ -0,0 +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
+
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
+
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.
@@ -0,0 +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.
@@ -0,0 +1,52 @@
1
+ {
2
+ "schemaVersion": "psyclaw/recommended-skills/v1",
3
+ "documentVersion": "0.2.0",
4
+ "sourceDocument": "学术AI_Skill分享资料.pdf",
5
+ "sourceRef": "local-user-curated",
6
+ "items": [
7
+ { "id": "markitdown", "name": "MarkItDown", "kind": "skill", "stage": "统一", "description": "把 PDF、Word、PPT、Excel、HTML 等转换为结构化 Markdown。", "sourceRef": "https://github.com/microsoft/markitdown" },
8
+ { "id": "markitdown-pro", "name": "MarkItDown Pro", "kind": "skill", "stage": "统一", "description": "字幕优先、转录回退,把 B 站课程和讲座转成带来源状态的 Markdown。", "sourceRef": "https://github.com/LHT666-hub/markItdown-pro" },
9
+ { "id": "session-handoff", "name": "Session Handoff", "kind": "skill", "stage": "接力", "description": "把长任务的目标、进度、阻塞和下一步写成可核验的交接状态。", "sourceRef": "https://github.com/LHT666-hub/session-handoff" },
10
+ { "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
+ { "id": "zotero-translators", "name": "Zotero Translators", "kind": "skill", "stage": "题录", "description": "从出版社和数据库页面提取规范题录、DOI、PDF 和补充材料。", "sourceRef": "https://github.com/zotero/translators" },
12
+ { "id": "scansci-pdf", "name": "ScanSci PDF", "kind": "skill", "stage": "获取", "description": "按开放来源、官方接口和用户授权会话尝试获取论文全文。", "sourceRef": "https://github.com/Rimagination/scansci-pdf" },
13
+ { "id": "scholarbridge", "name": "ScholarBridge", "kind": "skill", "stage": "质控", "description": "连接文献清单、PDF 完整性校验、哈希去重和 Zotero 交接。", "sourceRef": "https://github.com/LHT666-hub/ScholarBridge" },
14
+ { "id": "mentorforge", "name": "MentorForge", "kind": "skill", "stage": "蒸馏", "description": "从学者主页、论文和全文信号卡中提炼可追问的科研方法论。", "sourceRef": "https://github.com/qwqalice/MentorForge" },
15
+ { "id": "supervisor-skills", "name": "Supervisor-Skills", "kind": "skill", "stage": "写作", "description": "覆盖 idea、调研、写作、图表、评审和投稿前检查的科研规范。", "sourceRef": "https://github.com/HKUSTDial/Supervisor-Skills" },
16
+ { "id": "openkb", "name": "OpenKB", "kind": "skill", "stage": "知识库", "description": "把异构资料编译成可链接、可检索、可持续更新的 Wiki。", "sourceRef": "https://github.com/VectifyAI/OpenKB" },
17
+ { "id": "corpus2skill", "name": "Corpus2Skill", "kind": "skill", "stage": "知识库", "description": "将大规模语料编译成可导航的 Skill 树和文档索引。", "sourceRef": "https://github.com/dukesun99/Corpus2Skill" },
18
+ { "id": "academic-reference-matcher", "name": "Academic Reference Matcher", "kind": "skill", "stage": "核验", "description": "逐条拆分 Claim、检索来源并输出 Claim–Reference 对照表。", "sourceRef": "https://github.com/keros68/academic-reference-matcher" },
19
+ { "id": "pskoett-ai-skills", "name": "pskoett AI Skills", "kind": "skill", "stage": "进化", "description": "把失败和纠正沉淀为候选经验,经过验证后晋升为规则或回归测试。", "sourceRef": "https://github.com/pskoett/pskoett-ai-skills" },
20
+ { "id": "omnidistill", "name": "OmniDistill", "kind": "skill", "stage": "蒸馏", "description": "以证据账本统一 Knowledge、Heuristics、Workflows、Anti-patterns 和 Boundaries。", "sourceRef": "https://github.com/LHT666-hub/OmniDistill" },
21
+ { "id": "smartplot", "name": "SmartPlot", "kind": "tool", "stage": "绘图", "description": "科研绘图、样式统一、多面板组图和可见确认的 MCP 控制。", "sourceRef": "https://smartplot.app" },
22
+ { "id": "ars-academic-research-skill", "name": "ARS Academic Research Skill", "kind": "skill", "stage": "科研总线", "description": "用户补充的学术研究技能集合;来源和版本待确认,先作为候选入口。", "sourceRef": "user-provided / source-to-confirm", "status": "discover-only" },
23
+ { "id": "nature-skill-suite", "name": "Nature Skill Suite", "kind": "skill-pack", "stage": "Nature", "description": "Nature 系列科研检索、写作、润色、读文、图表、统计、数据和审稿工作流。", "sourceRef": "local: nature-* skills", "status": "discover-only" },
24
+ { "id": "playwright-mcp", "name": "Microsoft Playwright MCP", "kind": "mcp", "stage": "Web Bridge", "description": "结构化浏览器操作;可使用独立浏览器,也可通过 Chrome 扩展连接已有标签页和登录状态。", "sourceRef": "https://github.com/microsoft/playwright-mcp", "status": "discover-only" },
25
+ { "id": "browserbase-stagehand-mcp", "name": "Browserbase / Stagehand MCP", "kind": "mcp", "stage": "Web Bridge", "description": "通过自然语言控制浏览器,支持托管或本地 MCP;适合需要长时间网页交互的任务。", "sourceRef": "https://github.com/browserbase/mcp-server-browserbase", "status": "discover-only" },
26
+ { "id": "computer-use-mcp", "name": "Computer Use MCP", "kind": "mcp", "stage": "Computer Use", "description": "Windows、macOS、Linux 原生窗口、截图、鼠标键盘和应用控制;必须单独审批权限。", "sourceRef": "https://github.com/zavora-ai/computer-use-mcp", "status": "discover-only" },
27
+ { "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
+ "installPrep": [
30
+ {"id":"markitdown","sourceKind":"github","ref":"fd239d5d2be43d9b68329730206b9312c7d5a388","license":"MIT","command":"python -m pip install markitdown","target":".psyclaw/imports/recommended/markitdown","dependencies":["Python >=3.10"],"status":"review-required","requiresApproval":true,"blockedReason":"Package install is not content-pinned; verify the PyPI version before execution."},
31
+ {"id":"markitdown-pro","sourceKind":"github","ref":"a601bb294f57dc03a681d2b9fa91d4bb5627bd2f","license":"MIT","command":"git clone https://github.com/LHT666-hub/markItdown-pro .psyclaw/imports/recommended/markitdown-pro && git -C .psyclaw/imports/recommended/markitdown-pro checkout a601bb294f57dc03a681d2b9fa91d4bb5627bd2f","target":".psyclaw/imports/recommended/markitdown-pro","dependencies":["Git","Python runtime per repository metadata"],"status":"review-required","requiresApproval":true,"blockedReason":"Repository license is verified, but dependency lock and Skill entrypoint still require preflight."},
32
+ {"id":"paper-search-mcp","sourceKind":"github","ref":"c8b642183bb725f0a7faec89e58b558df09079d1","license":"MIT","command":"git clone https://github.com/openags/paper-search-mcp .psyclaw/mcp-src/paper-search-mcp && git -C .psyclaw/mcp-src/paper-search-mcp checkout c8b642183bb725f0a7faec89e58b558df09079d1","target":".psyclaw/mcp/paper-search-mcp.json","dependencies":["Git","Python/uv per repository metadata"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify package entrypoint and lockfile before registering a stdio server."},
33
+ {"id":"session-handoff","sourceKind":"github","ref":"e18e41900953e0126b6beb0b24387bbaf2178f44","license":"MIT","command":"git clone https://github.com/LHT666-hub/session-handoff .psyclaw/imports/recommended/session-handoff && git -C .psyclaw/imports/recommended/session-handoff checkout e18e41900953e0126b6beb0b24387bbaf2178f44","target":".psyclaw/imports/recommended/session-handoff","dependencies":["Git"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify SKILL.md and dependency tree before activation."},
34
+ {"id":"zotero-translators","sourceKind":"github","ref":"master","license":"unknown","command":"git clone https://github.com/zotero/translators .psyclaw/imports/recommended/zotero-translators && git -C .psyclaw/imports/recommended/zotero-translators checkout master","target":".psyclaw/imports/recommended/zotero-translators","dependencies":["Git","Zotero-compatible translator runtime"],"status":"blocked","requiresApproval":true,"blockedReason":"License and immutable commit were not verified in the current preflight."},
35
+ {"id":"scansci-pdf","sourceKind":"github","ref":"master","license":"Apache-2.0","command":"git clone https://github.com/Rimagination/scansci-pdf .psyclaw/imports/recommended/scansci-pdf && git -C .psyclaw/imports/recommended/scansci-pdf checkout master","target":".psyclaw/imports/recommended/scansci-pdf","dependencies":["Git","repository runtime requirements"],"status":"review-required","requiresApproval":true,"blockedReason":"Immutable commit and executable Skill entrypoint still require preflight."},
36
+ {"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
+ {"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
+ {"id":"supervisor-skills","sourceKind":"github","ref":"aff5de9e5b902df0ef51e955d4c78b22793d763a","license":"NOASSERTION","command":"git clone https://github.com/HKUSTDial/Supervisor-Skills .psyclaw/imports/recommended/supervisor-skills && git -C .psyclaw/imports/recommended/supervisor-skills checkout aff5de9e5b902df0ef51e955d4c78b22793d763a","target":".psyclaw/imports/recommended/supervisor-skills","dependencies":["Git"],"status":"blocked","requiresApproval":true,"blockedReason":"License requires human review before installation."},
39
+ {"id":"openkb","sourceKind":"github","ref":"master","license":"Apache-2.0","command":"git clone https://github.com/VectifyAI/OpenKB .psyclaw/imports/recommended/openkb && git -C .psyclaw/imports/recommended/openkb checkout master","target":".psyclaw/imports/recommended/openkb","dependencies":["Git","repository runtime requirements"],"status":"review-required","requiresApproval":true,"blockedReason":"Immutable commit and dependency lock still require preflight."},
40
+ {"id":"corpus2skill","sourceKind":"github","ref":"e1f036154014d3833f0dabb831115be52ba98aa4","license":"unknown","command":"git clone https://github.com/dukesun99/Corpus2Skill .psyclaw/imports/recommended/corpus2skill && git -C .psyclaw/imports/recommended/corpus2skill checkout e1f036154014d3833f0dabb831115be52ba98aa4","target":".psyclaw/imports/recommended/corpus2skill","dependencies":["Git"],"status":"blocked","requiresApproval":true,"blockedReason":"License is not verified."},
41
+ {"id":"academic-reference-matcher","sourceKind":"github","ref":"189a5ddbeaca8e1a594c28ac5d4c694741c01db9","license":"MIT","command":"git clone https://github.com/keros68/academic-reference-matcher .psyclaw/imports/recommended/academic-reference-matcher && git -C .psyclaw/imports/recommended/academic-reference-matcher checkout 189a5ddbeaca8e1a594c28ac5d4c694741c01db9","target":".psyclaw/imports/recommended/academic-reference-matcher","dependencies":["Git"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify entrypoint and dependency lock before activation."},
42
+ {"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
+ {"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
+ {"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
+ {"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
+ {"id":"nature-skill-suite","sourceKind":"local","ref":null,"license":"unknown","command":"copy reviewed nature-* skills into .psyclaw/imports/recommended/nature-skill-suite","target":".psyclaw/imports/recommended/nature-skill-suite","dependencies":["local skill source"],"status":"review-required","requiresApproval":true,"blockedReason":"Each local Skill needs independent source, version, hash, license and dependency evidence."},
47
+ {"id":"playwright-mcp","sourceKind":"github","ref":"7e0457a7cbf88823bf0146d12c46ae12c6818247","license":"Apache-2.0","command":"npx -y @playwright/mcp@latest","target":".psyclaw/mcp/playwright-mcp.json","dependencies":["Node.js >=18","npm or pnpm"],"status":"review-required","requiresApproval":true,"blockedReason":"npm package version must be pinned before execution; browser-session access requires a separate approval."},
48
+ {"id":"browserbase-stagehand-mcp","sourceKind":"github","ref":"3e6f53461949037d5e65dd425da3ceb1263f11d6","license":"Apache-2.0","command":"npm install --save-dev @browserbasehq/stagehand","target":".psyclaw/mcp/browserbase-stagehand-mcp.json","dependencies":["Node.js","Browserbase credentials if hosted"],"status":"blocked","requiresApproval":true,"blockedReason":"Repository is archived and hosted use requires credentials; do not enable automatically."},
49
+ {"id":"computer-use-mcp","sourceKind":"github","ref":"main","license":"MIT","command":"git clone https://github.com/zavora-ai/computer-use-mcp .psyclaw/imports/recommended/computer-use-mcp && git -C .psyclaw/imports/recommended/computer-use-mcp checkout main","target":".psyclaw/mcp/computer-use-mcp.json","dependencies":["Git","OS accessibility permissions"],"status":"review-required","requiresApproval":true,"blockedReason":"Immutable commit and desktop control permissions require preflight."},
50
+ {"id":"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
+ }
@@ -0,0 +1,118 @@
1
+ {
2
+ "schemaVersion": "psyclaw/recommended-mcp/v1",
3
+ "documentVersion": "0.2.0",
4
+ "sourceDocument": "学术AI_Skill分享资料.pdf + curated research MCP review",
5
+ "sourceRef": "user-curated",
6
+ "items": [
7
+ {
8
+ "id": "paper-search-mcp",
9
+ "name": "Paper Search MCP",
10
+ "stage": "检索",
11
+ "description": "统一 arXiv、PubMed、OpenAlex、Semantic Scholar、Crossref 等来源的搜索、去重和开放全文回退。",
12
+ "sourceRef": "https://github.com/openags/paper-search-mcp",
13
+ "transport": "stdio",
14
+ "risk": "network",
15
+ "writeEffects": false,
16
+ "status": "discover-only"
17
+ },
18
+ {
19
+ "id": "scientific-papers-mcp",
20
+ "name": "Scientific Papers MCP",
21
+ "stage": "开放全文",
22
+ "description": "从 arXiv、OpenAlex、PMC、Europe PMC、bioRxiv/medRxiv 和 CORE 获取论文元数据与开放全文。",
23
+ "sourceRef": "https://github.com/benedict2310/Scientific-Papers-MCP",
24
+ "transport": "stdio",
25
+ "risk": "network",
26
+ "writeEffects": false,
27
+ "status": "discover-only"
28
+ },
29
+ {
30
+ "id": "pubmed-search-mcp",
31
+ "name": "PubMed Search MCP",
32
+ "stage": "生物医学",
33
+ "description": "面向 PubMed、Europe PMC 和开放来源的多源检索、全文、引用网络和 PICO 辅助。",
34
+ "sourceRef": "https://github.com/u9401066/pubmed-search-mcp",
35
+ "transport": "stdio",
36
+ "risk": "network",
37
+ "writeEffects": false,
38
+ "status": "discover-only"
39
+ },
40
+ {
41
+ "id": "zotero-mcp",
42
+ "name": "Zotero MCP",
43
+ "stage": "文献库",
44
+ "description": "搜索本地 Zotero、读取 PDF 文本和批注、生成引用,并在明确授权后管理条目。",
45
+ "sourceRef": "https://github.com/richardjlyon/zotero-mcp",
46
+ "transport": "stdio-or-http",
47
+ "risk": "local-data",
48
+ "writeEffects": true,
49
+ "status": "discover-only"
50
+ },
51
+ {
52
+ "id": "academic-mcp",
53
+ "name": "Academic MCP",
54
+ "stage": "文献图谱",
55
+ "description": "连接 Zotero、Semantic Scholar 和 OpenAlex,支持检索、阅读、作者和引用关系探索。",
56
+ "sourceRef": "https://github.com/veale/academic-mcp",
57
+ "transport": "stdio",
58
+ "risk": "network-and-local-data",
59
+ "writeEffects": false,
60
+ "status": "discover-only"
61
+ },
62
+ {
63
+ "id": "scholar-mcp",
64
+ "name": "Scholar MCP",
65
+ "stage": "引用图谱",
66
+ "description": "跨论文、专利、标准和作者关系检索,支持 DOI、Semantic Scholar、OpenAlex 和引用路径。",
67
+ "sourceRef": "https://github.com/pvliesdonk/scholar-mcp",
68
+ "transport": "stdio",
69
+ "risk": "network",
70
+ "writeEffects": false,
71
+ "status": "discover-only"
72
+ },
73
+ {
74
+ "id": "playwright-mcp",
75
+ "name": "Microsoft Playwright MCP",
76
+ "stage": "机构全文",
77
+ "description": "通过浏览器访问出版社、机构代理和登录后的页面;下载动作必须单独人工确认。",
78
+ "sourceRef": "https://github.com/microsoft/playwright-mcp",
79
+ "transport": "stdio",
80
+ "risk": "browser-session",
81
+ "writeEffects": true,
82
+ "status": "discover-only"
83
+ },
84
+ {
85
+ "id": "mne-mcp",
86
+ "name": "MNE MCP",
87
+ "stage": "神经生理",
88
+ "description": "为 EEG、MEG、iEEG 等 MNE-Python 分析提供受控工具;当前作为本机 MNE skill 的 MCP 候选入口。",
89
+ "sourceRef": "https://github.com/Exekiel179/MNE-MCP",
90
+ "transport": "stdio",
91
+ "risk": "local-data-and-compute",
92
+ "writeEffects": true,
93
+ "status": "discover-only"
94
+ },
95
+ {
96
+ "id": "spss-mcp",
97
+ "name": "SPSS MCP",
98
+ "stage": "统计分析",
99
+ "description": "为 SPSS syntax 执行、输出读取和统计分析提供受控工具;只保存可复现脚本和结果。",
100
+ "sourceRef": "https://github.com/Exekiel179/SPSS-MCP",
101
+ "transport": "stdio",
102
+ "risk": "local-data-and-compute",
103
+ "writeEffects": true,
104
+ "status": "discover-only"
105
+ }
106
+ ],
107
+ "installPrep": [
108
+ {"id":"paper-search-mcp","sourceKind":"github","ref":"c8b642183bb725f0a7faec89e58b558df09079d1","license":"MIT","command":"git clone https://github.com/openags/paper-search-mcp .psyclaw/mcp-src/paper-search-mcp && git -C .psyclaw/mcp-src/paper-search-mcp checkout c8b642183bb725f0a7faec89e58b558df09079d1","target":".psyclaw/mcp/paper-search-mcp.json","dependencies":["Git","Python/uv per repository metadata"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify package entrypoint and lockfile before registering a stdio server."},
109
+ {"id":"scientific-papers-mcp","sourceKind":"github","ref":"646da8d8af653f6b833f3725bae4cafc38a9428e","license":"unknown","command":"git clone https://github.com/benedict2310/Scientific-Papers-MCP .psyclaw/mcp-src/scientific-papers-mcp && git -C .psyclaw/mcp-src/scientific-papers-mcp checkout 646da8d8af653f6b833f3725bae4cafc38a9428e","target":".psyclaw/mcp/scientific-papers-mcp.json","dependencies":["Git","repository runtime requirements"],"status":"blocked","requiresApproval":true,"blockedReason":"License metadata is not verified."},
110
+ {"id":"pubmed-search-mcp","sourceKind":"github","ref":"master","license":"NOASSERTION","command":"git clone https://github.com/u9401066/pubmed-search-mcp .psyclaw/mcp-src/pubmed-search-mcp && git -C .psyclaw/mcp-src/pubmed-search-mcp checkout master","target":".psyclaw/mcp/pubmed-search-mcp.json","dependencies":["Git","PubMed/NCBI access configuration"],"status":"blocked","requiresApproval":true,"blockedReason":"License and immutable commit were not verified."},
111
+ {"id":"zotero-mcp","sourceKind":"github","ref":"d57892db395c38d7782f037bc9fc8222e6a429ae","license":"unknown","command":"git clone https://github.com/richardjlyon/zotero-mcp .psyclaw/mcp-src/zotero-mcp && git -C .psyclaw/mcp-src/zotero-mcp checkout d57892db395c38d7782f037bc9fc8222e6a429ae","target":".psyclaw/mcp/zotero-mcp.json","dependencies":["Git","Zotero local library","Zotero API/token only if explicitly configured"],"status":"blocked","requiresApproval":true,"blockedReason":"License is not verified and local-library write effects require a separate trust decision."},
112
+ {"id":"academic-mcp","sourceKind":"github","ref":"main","license":"MIT","command":"git clone https://github.com/veale/academic-mcp .psyclaw/mcp-src/academic-mcp && git -C .psyclaw/mcp-src/academic-mcp checkout main","target":".psyclaw/mcp/academic-mcp.json","dependencies":["Git","Zotero/OpenAlex/Semantic Scholar configuration per repository metadata"],"status":"review-required","requiresApproval":true,"blockedReason":"Immutable commit and external API terms require preflight."},
113
+ {"id":"scholar-mcp","sourceKind":"github","ref":"f94eac6a49c6d35a83f35148375eebfa08459e9b","license":"MIT","command":"git clone https://github.com/pvliesdonk/scholar-mcp .psyclaw/mcp-src/scholar-mcp && git -C .psyclaw/mcp-src/scholar-mcp checkout f94eac6a49c6d35a83f35148375eebfa08459e9b","target":".psyclaw/mcp/scholar-mcp.json","dependencies":["Git","provider/API configuration per repository metadata"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify executable entrypoint and API terms before registration."},
114
+ {"id":"playwright-mcp","sourceKind":"github","ref":"7e0457a7cbf88823bf0146d12c46ae12c6818247","license":"Apache-2.0","command":"npx -y @playwright/mcp@latest","target":".psyclaw/mcp/playwright-mcp.json","dependencies":["Node.js >=18","npm or pnpm","optional browser extension for existing login session"],"status":"review-required","requiresApproval":true,"blockedReason":"Pin npm package version before execution; browser navigation/download remains separately approved."},
115
+ {"id":"mne-mcp","sourceKind":"github","ref":"627142cb5beebe1a210a8e0fb1e15afbec8b8010","license":"MIT","command":"uvx --from mne-mcp==0.3.0 mne-mcp","target":".psyclaw/mcp/mne-mcp.json","dependencies":["Python >=3.10","uv","MNE-Python data dependencies"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify PyPI artifact hash and local-data write policy before registration."},
116
+ {"id":"spss-mcp","sourceKind":"github","ref":"fb4f020189b28b8acfb23a710875a7f9ae4e1e62","license":"MIT","command":"git clone https://github.com/Exekiel179/SPSS-MCP .psyclaw/mcp-src/spss-mcp && git -C .psyclaw/mcp-src/spss-mcp checkout fb4f020189b28b8acfb23a710875a7f9ae4e1e62","target":".psyclaw/mcp/spss-mcp.json","dependencies":["Git","IBM SPSS Statistics","Python runtime per repository metadata"],"status":"review-required","requiresApproval":true,"blockedReason":"Verify repository entrypoint and SPSS license/runtime before registration."}
117
+ ]
118
+ }