psyclaw 0.27.6 → 0.27.12

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 (64) hide show
  1. package/README.md +17 -14
  2. package/dist/apps/panel/index.html +11 -11
  3. package/dist/src/adapters/pi/extension.js +593 -101
  4. package/dist/src/adapters/pi/extension.js.map +1 -1
  5. package/dist/src/agents/import.js +2 -1
  6. package/dist/src/agents/import.js.map +1 -1
  7. package/dist/src/analysis/hooks.d.ts +19 -2
  8. package/dist/src/analysis/hooks.js +48 -7
  9. package/dist/src/analysis/hooks.js.map +1 -1
  10. package/dist/src/branding.d.ts +2 -2
  11. package/dist/src/branding.js +2 -2
  12. package/dist/src/branding.js.map +1 -1
  13. package/dist/src/chat.js +5 -2
  14. package/dist/src/chat.js.map +1 -1
  15. package/dist/src/cli.js +21 -6
  16. package/dist/src/cli.js.map +1 -1
  17. package/dist/src/index.d.ts +2 -0
  18. package/dist/src/index.js +2 -0
  19. package/dist/src/index.js.map +1 -1
  20. package/dist/src/install/installer.js +3 -0
  21. package/dist/src/install/installer.js.map +1 -1
  22. package/dist/src/integrations/mcp-runtime.d.ts +13 -0
  23. package/dist/src/integrations/mcp-runtime.js +48 -0
  24. package/dist/src/integrations/mcp-runtime.js.map +1 -1
  25. package/dist/src/orchestration/runner.js +1 -0
  26. package/dist/src/orchestration/runner.js.map +1 -1
  27. package/dist/src/panel/events.d.ts +2 -1
  28. package/dist/src/panel/events.js +2 -5
  29. package/dist/src/panel/events.js.map +1 -1
  30. package/dist/src/panel/server.js +44 -18
  31. package/dist/src/panel/server.js.map +1 -1
  32. package/dist/src/project/approvals.d.ts +50 -0
  33. package/dist/src/project/approvals.js +62 -0
  34. package/dist/src/project/approvals.js.map +1 -0
  35. package/dist/src/project/bootstrap.d.ts +17 -0
  36. package/dist/src/project/bootstrap.js +87 -1
  37. package/dist/src/project/bootstrap.js.map +1 -1
  38. package/dist/src/project/paths.js +5 -2
  39. package/dist/src/project/paths.js.map +1 -1
  40. package/dist/src/research/ledger.d.ts +3 -2
  41. package/dist/src/research/ledger.js +47 -2
  42. package/dist/src/research/ledger.js.map +1 -1
  43. package/dist/src/skills/user-skills.d.ts +65 -0
  44. package/dist/src/skills/user-skills.js +340 -0
  45. package/dist/src/skills/user-skills.js.map +1 -0
  46. package/dist/src/style/cli-ui.js +19 -30
  47. package/dist/src/style/cli-ui.js.map +1 -1
  48. package/dist/src/telemetry/export.d.ts +8 -6
  49. package/dist/src/telemetry/export.js +81 -18
  50. package/dist/src/telemetry/export.js.map +1 -1
  51. package/dist/src/tui/provider-picker.d.ts +2 -0
  52. package/dist/src/tui/provider-picker.js +10 -0
  53. package/dist/src/tui/provider-picker.js.map +1 -1
  54. package/dist/src/tui/skill-manager.d.ts +3 -0
  55. package/dist/src/tui/skill-manager.js +11 -1
  56. package/dist/src/tui/skill-manager.js.map +1 -1
  57. package/dist/src/updates/update.js +10 -17
  58. package/dist/src/updates/update.js.map +1 -1
  59. package/dist/src/wizard.js +22 -8
  60. package/dist/src/wizard.js.map +1 -1
  61. package/dist/src/workflows/analysis-delegation.js +2 -2
  62. package/dist/src/workflows/analysis-delegation.js.map +1 -1
  63. package/package.json +2 -2
  64. package/scripts/rebrand-pi.mjs +94 -4
@@ -1,5 +1,6 @@
1
- import { writeFile } from "node:fs/promises";
1
+ import { writeFile, readFile } from "node:fs/promises";
2
2
  import { randomUUID } from "node:crypto";
3
+ import { join } from "node:path";
3
4
  import { CONTRACT_VERSION } from "../core/contracts.js";
4
5
  import { asHandoff, asProject } from "../core/schemas.js";
5
6
  import { atomicWriteFile } from "./jsonl.js";
@@ -35,6 +36,91 @@ export async function bootstrapProject(options) {
35
36
  }
36
37
  return project;
37
38
  }
39
+ const PARADIGM_VALUES = new Set([
40
+ "survey-observational",
41
+ "qualitative-thematic",
42
+ "experimental",
43
+ "quasi-experimental",
44
+ "longitudinal-panel",
45
+ "meta-analysis",
46
+ "ethnographic",
47
+ "historical-documentary",
48
+ "policy-legal",
49
+ "mixed-methods",
50
+ ]);
51
+ function hasFrontmatterSchema(text, expected) {
52
+ const match = text.replace(/^\uFEFF/, "").match(/^---[ \t]*\r?\n([\s\S]*?)\r?\n(?:---|\.\.\.)[ \t]*(?:\r?\n|$)/);
53
+ if (!match?.[1])
54
+ return false;
55
+ const escaped = expected.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
56
+ return new RegExp(`(?:^|\\n)\\s*schemaVersion\\s*:\\s*${escaped}(?:\\s|$)`, "i").test(match[1]);
57
+ }
58
+ function frontmatterBody(text) {
59
+ const match = text.replace(/^\uFEFF/, "").match(/^---[ \t]*\r?\n[\s\S]*?\r?\n(?:---|\.\.\.)[ \t]*(?:\r?\n|$)/);
60
+ return match ? text.slice(match[0].length) : text;
61
+ }
62
+ async function readTextIfExists(path) {
63
+ try {
64
+ return await readFile(path, "utf8");
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ /**
71
+ * Detect whether the project already contains compliant analysis documents
72
+ * (the HITL research specification and plan with valid schemas) so `/run` can
73
+ * skip the explicit `/init` step. Returns null when the project is not
74
+ * analysis-ready.
75
+ */
76
+ export async function readAnalysisDocsProject(root) {
77
+ const paths = projectPaths(root);
78
+ const researchSpec = await readTextIfExists(join(paths.root, "notes", "research-spec.md"));
79
+ const plan = await readTextIfExists(join(paths.root, "notes", "plan.md"));
80
+ if (!researchSpec || !plan)
81
+ return null;
82
+ if (!hasFrontmatterSchema(researchSpec, "psyclaw/research-spec/v1"))
83
+ return null;
84
+ if (!hasFrontmatterSchema(plan, "psyclaw/hitl-plan/v1"))
85
+ return null;
86
+ let goal = "";
87
+ const goalDoc = await readTextIfExists(join(paths.root, "notes", "goal.md"));
88
+ if (goalDoc) {
89
+ goal = frontmatterBody(goalDoc)
90
+ .split(/\r?\n/)
91
+ .map((line) => line.trim())
92
+ .find((line) => line.length > 0 && !line.startsWith("#")) ?? "";
93
+ }
94
+ if (!goal) {
95
+ const initial = researchSpec.split(/\r?\n/).find((line) => /initial goal:/i.test(line));
96
+ goal = (initial ?? "").replace(/^[-\s]*initial goal:\s*/i, "").trim();
97
+ }
98
+ if (!goal)
99
+ return null;
100
+ const paradigmLine = researchSpec.split(/\r?\n/).find((line) => /paradigm:/i.test(line));
101
+ const paradigmName = (paradigmLine ?? "").replace(/^[-\s]*paradigm:\s*/i, "").trim().toLowerCase();
102
+ const paradigm = PARADIGM_VALUES.has(paradigmName) ? paradigmName : "survey-observational";
103
+ return { goal, paradigm };
104
+ }
105
+ /**
106
+ * Bootstrap a project from existing compliant analysis documents. This lets
107
+ * `/run` work on a project that was prepared outside the `/init` flow, as long
108
+ * as the required research-spec and plan documents are present and valid.
109
+ */
110
+ export async function bootstrapProjectFromAnalysisDocs(root) {
111
+ const docs = await readAnalysisDocsProject(root);
112
+ if (!docs) {
113
+ throw new Error("项目中缺少合规的分析文档(notes/research-spec.md 与 notes/plan.md 且 schemaVersion 正确);请先运行 /init,或补充这些文档后重试。");
114
+ }
115
+ try {
116
+ return await bootstrapProject({ root, goal: docs.goal, paradigm: docs.paradigm });
117
+ }
118
+ catch (error) {
119
+ // The project file may have been created concurrently or is corrupt;
120
+ // surface the original error so the user can repair it.
121
+ throw error;
122
+ }
123
+ }
38
124
  export async function writeHandoff(root, input) {
39
125
  const paths = projectPaths(root);
40
126
  const handoff = { schemaVersion: "psyclaw/handoff/v1", ...input };
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/project/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/project/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export function projectPaths(root) {
16
16
  plans: resolve(base, PSYCLAW_DIR, "plans"),
17
17
  memory: resolve(base, PSYCLAW_DIR, "memory"),
18
18
  manifests: resolve(base, PSYCLAW_DIR, "manifests"),
19
- raw: resolve(base, "data", "raw"),
19
+ raw: resolve(base, PSYCLAW_DIR, "data", "raw"),
20
20
  clean: resolve(base, "data", "clean"),
21
21
  analysis: resolve(base, "analysis"),
22
22
  analysisScripts: resolve(base, "analysis", "scripts"),
@@ -42,8 +42,9 @@ export async function ensureProjectDirectories(root) {
42
42
  `${PSYCLAW_DIR}/plans`,
43
43
  `${PSYCLAW_DIR}/memory`,
44
44
  `${PSYCLAW_DIR}/manifests`,
45
+ `${PSYCLAW_DIR}/data`,
46
+ `${PSYCLAW_DIR}/data/raw`,
45
47
  "data",
46
- "data/raw",
47
48
  "data/clean",
48
49
  "analysis",
49
50
  "analysis/scripts",
@@ -103,6 +104,8 @@ export async function assertSafeProjectPath(root, target) {
103
104
  protectedRel.startsWith(".git/") ||
104
105
  protectedRel === "data/raw" ||
105
106
  protectedRel.startsWith("data/raw/") ||
107
+ protectedRel === ".psyclaw/data/raw" ||
108
+ protectedRel.startsWith(".psyclaw/data/raw/") ||
106
109
  protectedRel.includes("credential") ||
107
110
  protectedRel.includes("secret")) {
108
111
  throw new Error(`Protected project path is not writable: ${target}`);
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/project/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/project/paths.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { Claim, ClaimEvidenceLink, Evidence } from "../core/contracts.js";
1
+ import { type Claim, type ClaimEvidenceLink, type Evidence, type ResearchProject } from "../core/contracts.js";
2
+ export declare function asCompatibleProject(value: unknown, root: string): ResearchProject;
2
3
  export interface LedgerSnapshot {
3
4
  evidence: Evidence[];
4
5
  claims: Claim[];
@@ -9,4 +10,4 @@ export declare function appendEvidence(root: string, evidence: Evidence): Promis
9
10
  export declare function appendClaim(root: string, claim: Claim): Promise<void>;
10
11
  export declare function appendClaimEvidenceLink(root: string, link: ClaimEvidenceLink): Promise<void>;
11
12
  export declare function readProjectGoal(root: string): Promise<string>;
12
- export declare function readProject(root: string): Promise<import("../core/contracts.js").ResearchProject>;
13
+ export declare function readProject(root: string): Promise<ResearchProject>;
@@ -2,6 +2,51 @@ import { readFile } from "node:fs/promises";
2
2
  import { appendJsonl, readJsonl } from "../project/jsonl.js";
3
3
  import { projectPaths } from "../project/paths.js";
4
4
  import { asClaim, asClaimEvidenceLink, asEvidence, asProject } from "../core/schemas.js";
5
+ import { CONTRACT_VERSION } from "../core/contracts.js";
6
+ const PARADIGM_ALIASES = {
7
+ survey: "survey-observational",
8
+ observational: "survey-observational",
9
+ quantitative: "survey-observational",
10
+ qualitative: "qualitative-thematic",
11
+ thematic: "qualitative-thematic",
12
+ experiment: "experimental",
13
+ quasi_experimental: "quasi-experimental",
14
+ longitudinal: "longitudinal-panel",
15
+ meta_analysis: "meta-analysis",
16
+ ethnography: "ethnographic",
17
+ historical: "historical-documentary",
18
+ policy: "policy-legal",
19
+ mixed: "mixed-methods",
20
+ };
21
+ function normalizeProjectRecord(value, root) {
22
+ if (typeof value !== "object" || value === null || Array.isArray(value))
23
+ return value;
24
+ const record = value;
25
+ const rawParadigm = typeof record.paradigm === "string" ? record.paradigm.trim().toLowerCase() : "";
26
+ const paradigm = PARADIGM_ALIASES[rawParadigm] ?? rawParadigm;
27
+ return {
28
+ id: record.id ?? record.projectId,
29
+ root: record.root ?? root,
30
+ paradigm,
31
+ goal: record.goal ?? record.researchGoal ?? record.research_question,
32
+ policyVersion: record.policyVersion ?? record.schemaVersion ?? CONTRACT_VERSION,
33
+ createdAt: record.createdAt ?? record.created_at,
34
+ };
35
+ }
36
+ export function asCompatibleProject(value, root) {
37
+ try {
38
+ return asProject(normalizeProjectRecord(value, root));
39
+ }
40
+ catch (error) {
41
+ const paradigm = typeof value === "object" && value !== null && "paradigm" in value
42
+ ? String(value.paradigm ?? "")
43
+ : "";
44
+ if (paradigm) {
45
+ throw new Error(`无法识别旧项目的研究范式 '${paradigm}'。请在 .psyclaw/project.json 中改为 survey-observational、qualitative-thematic、experimental、quasi-experimental、longitudinal-panel、meta-analysis、ethnographic、historical-documentary、policy-legal 或 mixed-methods。`);
46
+ }
47
+ throw error;
48
+ }
49
+ }
5
50
  export async function loadLedger(root) {
6
51
  const paths = projectPaths(root);
7
52
  const evidence = (await readJsonl(paths.evidence)).map((value) => asEvidence(value));
@@ -34,10 +79,10 @@ export async function appendClaimEvidenceLink(root, link) {
34
79
  await appendJsonl(projectPaths(root).claims, asClaimEvidenceLink({ ...link, recordType: "claim-evidence-link" }));
35
80
  }
36
81
  export async function readProjectGoal(root) {
37
- const project = asProject(JSON.parse(await readFile(projectPaths(root).project, "utf8")));
82
+ const project = asCompatibleProject(JSON.parse(await readFile(projectPaths(root).project, "utf8")), root);
38
83
  return project.goal;
39
84
  }
40
85
  export async function readProject(root) {
41
- return asProject(JSON.parse(await readFile(projectPaths(root).project, "utf8")));
86
+ return asCompatibleProject(JSON.parse(await readFile(projectPaths(root).project, "utf8")), root);
42
87
  }
43
88
  //# sourceMappingURL=ledger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/research/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AASzF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,CAAC,MAAM,SAAS,CAAU,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,SAAS,CAAU,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC1F,IAAI,UAAU,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ;QACR,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,QAAkB;IACnE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrB,MAAM,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,KAAY;IAC1D,MAAM,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAY,EAAE,IAAuB;IACjF,MAAM,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/research/ledger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * User-installed (non-catalog) skills live in a broader set of host agent
3
+ * directories than the original hardcoded list. These roots are used both by
4
+ * the Pi `resources_discover` handler (which skill directories get loaded) and
5
+ * by the `/skill` management page (which skill rows are shown and can be
6
+ * toggled on/off individually).
7
+ */
8
+ export interface LocalSkillInfo {
9
+ /** Stable key for the management page, derived from the SKILL.md name. */
10
+ id: string;
11
+ name: string;
12
+ description: string;
13
+ /** Directory that directly contains SKILL.md. */
14
+ path: string;
15
+ /** The discovery root this skill was found under. */
16
+ root: string;
17
+ scope: "user" | "project";
18
+ duplicatePaths: string[];
19
+ }
20
+ export interface UserSkillState {
21
+ schemaVersion: "psyclaw/user-skill-state/v1";
22
+ /** Skill ids the user explicitly turned off. Absent list means "all enabled". */
23
+ disabled: string[];
24
+ }
25
+ export declare function localSkillRoots(cwd: string): string[];
26
+ /**
27
+ * Roots whose contents are fully governed by the recommended Skill manager
28
+ * (`.psyclaw/imports/recommended` and `getAgentDir()/skills`). These are
29
+ * excluded from the local *load* path so a disabled recommended Skill is not
30
+ * silently re-enabled by the user-skill scan; the management page still shows
31
+ * them through their recommended rows.
32
+ */
33
+ export declare function managedSkillRoots(cwd: string): string[];
34
+ /** Scan all discovery roots for user-installed skills (used by the manager). */
35
+ export declare function scanLocalSkills(cwd: string, options?: {
36
+ includeManaged?: boolean;
37
+ }): Promise<LocalSkillInfo[]>;
38
+ /** Read only descriptors from already-selected roots, including collections. */
39
+ export declare function skillNamesInPaths(paths: readonly string[]): Promise<string[]>;
40
+ /** Claude command markdown is a prompt resource, not a Skill directory. */
41
+ export declare function enabledLocalPromptPaths(cwd: string): Promise<string[]>;
42
+ export declare function readUserSkillState(root: string): Promise<UserSkillState>;
43
+ export declare function setLocalSkillEnabled(root: string, id: string, enabled: boolean): Promise<void>;
44
+ export declare function setLocalSkillsEnabled(root: string, ids: readonly string[], enabled: boolean): Promise<void>;
45
+ export interface EnabledLocalSkillPaths {
46
+ paths: string[];
47
+ warnings: string[];
48
+ }
49
+ /**
50
+ * Return existing, absolute Skill directories for Pi. Same-name skills are
51
+ * selected once by the root order above; loose markdown commands are not
52
+ * treated as Skills.
53
+ */
54
+ export declare function enabledLocalSkillPaths(cwd: string, options?: {
55
+ excludedNames?: Iterable<string>;
56
+ }): Promise<EnabledLocalSkillPaths>;
57
+ export declare function userSkillId(name: string): string;
58
+ /** Copy one local Skill directory into PsyClaw's user-level Skill directory. */
59
+ export declare function installLocalSkill(source: string, cwd: string, options?: {
60
+ targetRoot?: string;
61
+ }): Promise<{
62
+ name: string;
63
+ source: string;
64
+ target: string;
65
+ }>;