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.
- package/README.md +17 -14
- package/dist/apps/panel/index.html +11 -11
- package/dist/src/adapters/pi/extension.js +593 -101
- package/dist/src/adapters/pi/extension.js.map +1 -1
- package/dist/src/agents/import.js +2 -1
- package/dist/src/agents/import.js.map +1 -1
- package/dist/src/analysis/hooks.d.ts +19 -2
- package/dist/src/analysis/hooks.js +48 -7
- package/dist/src/analysis/hooks.js.map +1 -1
- package/dist/src/branding.d.ts +2 -2
- package/dist/src/branding.js +2 -2
- package/dist/src/branding.js.map +1 -1
- package/dist/src/chat.js +5 -2
- package/dist/src/chat.js.map +1 -1
- package/dist/src/cli.js +21 -6
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/install/installer.js +3 -0
- package/dist/src/install/installer.js.map +1 -1
- package/dist/src/integrations/mcp-runtime.d.ts +13 -0
- package/dist/src/integrations/mcp-runtime.js +48 -0
- package/dist/src/integrations/mcp-runtime.js.map +1 -1
- package/dist/src/orchestration/runner.js +1 -0
- package/dist/src/orchestration/runner.js.map +1 -1
- package/dist/src/panel/events.d.ts +2 -1
- package/dist/src/panel/events.js +2 -5
- package/dist/src/panel/events.js.map +1 -1
- package/dist/src/panel/server.js +44 -18
- package/dist/src/panel/server.js.map +1 -1
- package/dist/src/project/approvals.d.ts +50 -0
- package/dist/src/project/approvals.js +62 -0
- package/dist/src/project/approvals.js.map +1 -0
- package/dist/src/project/bootstrap.d.ts +17 -0
- package/dist/src/project/bootstrap.js +87 -1
- package/dist/src/project/bootstrap.js.map +1 -1
- package/dist/src/project/paths.js +5 -2
- package/dist/src/project/paths.js.map +1 -1
- package/dist/src/research/ledger.d.ts +3 -2
- package/dist/src/research/ledger.js +47 -2
- package/dist/src/research/ledger.js.map +1 -1
- package/dist/src/skills/user-skills.d.ts +65 -0
- package/dist/src/skills/user-skills.js +340 -0
- package/dist/src/skills/user-skills.js.map +1 -0
- package/dist/src/style/cli-ui.js +19 -30
- package/dist/src/style/cli-ui.js.map +1 -1
- package/dist/src/telemetry/export.d.ts +8 -6
- package/dist/src/telemetry/export.js +81 -18
- package/dist/src/telemetry/export.js.map +1 -1
- package/dist/src/tui/provider-picker.d.ts +2 -0
- package/dist/src/tui/provider-picker.js +10 -0
- package/dist/src/tui/provider-picker.js.map +1 -1
- package/dist/src/tui/skill-manager.d.ts +3 -0
- package/dist/src/tui/skill-manager.js +11 -1
- package/dist/src/tui/skill-manager.js.map +1 -1
- package/dist/src/updates/update.js +10 -17
- package/dist/src/updates/update.js.map +1 -1
- package/dist/src/wizard.js +22 -8
- package/dist/src/wizard.js.map +1 -1
- package/dist/src/workflows/analysis-delegation.js +2 -2
- package/dist/src/workflows/analysis-delegation.js.map +1 -1
- package/package.json +2 -2
- 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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
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":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG,UAAmB,CAAC;AAE/C,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC;QACnD,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,gBAAgB,CAAC;QACtD,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC;QAClD,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC;QAChD,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,gBAAgB,CAAC;QACtD,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,qBAAqB,CAAC;QAChE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC;QAC/C,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC;QACxC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC;QAC1C,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC;QAC5C,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC;QAClD,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;
|
|
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
|
|
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<
|
|
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 =
|
|
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
|
|
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;
|
|
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
|
+
}>;
|