@clawstore/clawstore 1.0.7 → 1.0.8

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.
@@ -1,6 +1,6 @@
1
1
  /**
2
- * If the agent is missing from openclaw.json, run `openclaw agents add`.
3
- * Lives in a dedicated module (child_process) away from workspace resolution.
2
+ * Ensure a non-main agent exists in openclaw.json (file-only; avoids shell subprocesses for plugin safety scans).
3
+ * Creates workspace-{agent} and merges `agents.entries` / `agents.list` as needed.
4
4
  */
5
5
  export declare function ensureAgentRegistered(agent: string, log?: (msg: string) => void): Promise<boolean>;
6
6
  //# sourceMappingURL=agent-register.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-register.d.ts","sourceRoot":"","sources":["../../../src/core/agent-register.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GACvC,OAAO,CAAC,OAAO,CAAC,CA4ClB"}
1
+ {"version":3,"file":"agent-register.d.ts","sourceRoot":"","sources":["../../../src/core/agent-register.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GACvC,OAAO,CAAC,OAAO,CAAC,CAsDlB"}
@@ -1,48 +1,73 @@
1
- import { exec } from "node:child_process";
2
- import { readFile, mkdir } from "node:fs/promises";
3
- import { join } from "node:path";
1
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
2
+ import { join, dirname } from "node:path";
4
3
  import { OPENCLAW_HOME, DEFAULT_AGENT } from "../constants.js";
4
+ function isRegistered(config, agent) {
5
+ const agents = config.agents;
6
+ if (!agents || typeof agents !== "object")
7
+ return false;
8
+ if (agents[agent] !== undefined)
9
+ return true;
10
+ const entries = agents.entries;
11
+ if (entries && typeof entries === "object" && !Array.isArray(entries) && entries[agent] !== undefined) {
12
+ return true;
13
+ }
14
+ const list = agents.list;
15
+ if (Array.isArray(list) && list.some((e) => e?.id === agent))
16
+ return true;
17
+ return false;
18
+ }
5
19
  /**
6
- * If the agent is missing from openclaw.json, run `openclaw agents add`.
7
- * Lives in a dedicated module (child_process) away from workspace resolution.
20
+ * Ensure a non-main agent exists in openclaw.json (file-only; avoids shell subprocesses for plugin safety scans).
21
+ * Creates workspace-{agent} and merges `agents.entries` / `agents.list` as needed.
8
22
  */
9
23
  export async function ensureAgentRegistered(agent, log = console.log) {
10
24
  if (agent === DEFAULT_AGENT)
11
25
  return true;
12
26
  const configFile = join(OPENCLAW_HOME, "openclaw.json");
27
+ let config = {};
13
28
  try {
14
29
  const raw = await readFile(configFile, "utf-8");
15
- const config = JSON.parse(raw);
16
- const inMap = config?.agents?.[agent] !== undefined ||
17
- config?.agents?.entries?.[agent] !== undefined;
18
- const inList = Array.isArray(config?.agents?.list) &&
19
- config.agents.list.some((e) => e?.id === agent);
20
- if (inMap || inList)
30
+ config = JSON.parse(raw);
31
+ if (isRegistered(config, agent))
21
32
  return true;
22
33
  }
23
34
  catch {
24
- // config missing or unreadableagent is definitely not registered
35
+ // missing or invalidrewrite below
25
36
  }
26
37
  const workspace = join(OPENCLAW_HOME, `workspace-${agent}`);
27
38
  try {
28
39
  await mkdir(workspace, { recursive: true });
29
40
  }
30
- catch { /* directory may already exist */ }
31
- log(`\n OpenClaw agent "${agent}" is not registered. Auto-registering ...`);
32
- const cmd = `openclaw agents add ${agent} --workspace "${workspace}"`;
33
- return new Promise((resolve) => {
34
- exec(cmd, { timeout: 15_000 }, (err, stdout, stderr) => {
35
- if (err) {
36
- log(` Auto-register failed: ${err.message}`);
37
- if (stderr)
38
- log(` ${stderr.trim()}`);
39
- log(` Please run manually: ${cmd}\n`);
40
- resolve(false);
41
- return;
42
- }
43
- log(` Registered agent "${agent}" ${workspace}`);
44
- resolve(true);
45
- });
46
- });
41
+ catch { /* may exist */ }
42
+ log(`\n OpenClaw agent "${agent}" is not registered. Updating ${configFile} ...`);
43
+ try {
44
+ const raw = await readFile(configFile, "utf-8");
45
+ config = JSON.parse(raw);
46
+ }
47
+ catch {
48
+ config = {};
49
+ }
50
+ if (!config.agents || typeof config.agents !== "object" || Array.isArray(config.agents)) {
51
+ config.agents = {};
52
+ }
53
+ const agents = config.agents;
54
+ const entry = { workspace };
55
+ const prevEntries = agents.entries && typeof agents.entries === "object" && !Array.isArray(agents.entries)
56
+ ? { ...agents.entries }
57
+ : {};
58
+ prevEntries[agent] = entry;
59
+ agents.entries = prevEntries;
60
+ if (Array.isArray(agents.list)) {
61
+ const list = agents.list;
62
+ const idx = list.findIndex((e) => e?.id === agent);
63
+ if (idx >= 0)
64
+ list[idx] = { ...list[idx], id: agent, workspace };
65
+ else
66
+ list.push({ id: agent, workspace });
67
+ }
68
+ await mkdir(dirname(configFile), { recursive: true });
69
+ await writeFile(configFile, `${JSON.stringify(config, null, 2)}\n`, "utf-8");
70
+ log(` Registered agent "${agent}" → ${workspace}`);
71
+ return true;
47
72
  }
48
73
  //# sourceMappingURL=agent-register.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-register.js","sourceRoot":"","sources":["../../../src/core/agent-register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE/D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,MAA6B,OAAO,CAAC,GAAG;IAExC,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,KAAK,GACT,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS;YACrC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAkB,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK,CAAC,CAAC;QAEnE,IAAI,KAAK,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,KAAK,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC,CAAC,iCAAiC,CAAC,CAAC;IAE7C,GAAG,CAAC,uBAAuB,KAAK,2CAA2C,CAAC,CAAC;IAE7E,MAAM,GAAG,GAAG,uBAAuB,KAAK,iBAAiB,SAAS,GAAG,CAAC;IACtE,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACtC,IAAI,CACF,GAAG,EACH,EAAE,OAAO,EAAE,MAAM,EAAE,EACnB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACtB,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9C,IAAI,MAAM;oBAAE,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACtC,GAAG,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACT,CAAC;YACD,GAAG,CAAC,uBAAuB,KAAK,OAAO,SAAS,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"agent-register.js","sourceRoot":"","sources":["../../../src/core/agent-register.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ export declare function checkSkillDependencies(skills: SkillDependency[]): Skill
12
12
  *
13
13
  * Strategy:
14
14
  * 1. Try bundled skills/ in the package directory first
15
- * 2. Fall back to `openclaw plugins install <skill-id>` (npm registry)
15
+ * 2. If not bundled: return instructions to run `openclaw plugins install` manually (no shell from this plugin).
16
16
  */
17
17
  export declare function installSkill(skillId: string, version: string, packagePath?: string, agent?: string): Promise<{
18
18
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"skill-installer.d.ts","sourceRoot":"","sources":["../../../src/core/skill-installer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAuC,MAAM,aAAa,CAAC;AAoDxF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;CACxC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,gBAAgB,EAAE,CA4BpF;AA+BD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,GAAE,MAAsB,GAC5B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAwC3C;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EAAE,EACzB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC3B,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,GAAE,MAAsB,GAC5B,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,GAAG;QAAE,aAAa,CAAC,EAAE;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAgCtH"}
1
+ {"version":3,"file":"skill-installer.d.ts","sourceRoot":"","sources":["../../../src/core/skill-installer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAuC,MAAM,aAAa,CAAC;AAkDxF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;CACxC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,gBAAgB,EAAE,CA4BpF;AA+BD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,GAAE,MAAsB,GAC5B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB3C;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EAAE,EACzB,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC3B,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,GAAE,MAAsB,GAC5B,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,GAAG;QAAE,aAAa,CAAC,EAAE;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAgCtH"}
@@ -1,12 +1,9 @@
1
1
  import { access, readFile, writeFile, mkdir, cp } from "node:fs/promises";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
  import { join, dirname } from "node:path";
4
- import { exec } from "node:child_process";
5
- import { promisify } from "node:util";
6
4
  import semver from "semver";
7
5
  import { OPENCLAW_HOME, DEFAULT_AGENT, agentSkillRegistryFile } from "../constants.js";
8
6
  import { resolveWorkspace } from "./workspace.js";
9
- const execAsync = promisify(exec);
10
7
  async function exists(p) {
11
8
  try {
12
9
  await access(p);
@@ -103,7 +100,7 @@ async function installSkillFromBundle(skillId, packagePath, agent = DEFAULT_AGEN
103
100
  *
104
101
  * Strategy:
105
102
  * 1. Try bundled skills/ in the package directory first
106
- * 2. Fall back to `openclaw plugins install <skill-id>` (npm registry)
103
+ * 2. If not bundled: return instructions to run `openclaw plugins install` manually (no shell from this plugin).
107
104
  */
108
105
  export async function installSkill(skillId, version, packagePath, agent = DEFAULT_AGENT) {
109
106
  if (packagePath) {
@@ -122,27 +119,10 @@ export async function installSkill(skillId, version, packagePath, agent = DEFAUL
122
119
  }
123
120
  }
124
121
  const spec = version && version !== "latest" ? `${skillId}@${version}` : skillId;
125
- try {
126
- const cmd = `openclaw plugins install ${JSON.stringify(spec)}`;
127
- const { stdout, stderr } = await execAsync(cmd, { timeout: 60_000 });
128
- const output = stdout || stderr;
129
- const reg = await loadSkillRegistry(agent);
130
- reg.skills[skillId] = {
131
- skill_id: skillId,
132
- version,
133
- installed_at: new Date().toISOString(),
134
- installed_by: "clawstore",
135
- source: `npm:${spec}`,
136
- };
137
- await saveSkillRegistry(reg, agent);
138
- return { ok: true, message: output.trim() || `installed ${spec}` };
139
- }
140
- catch (err) {
141
- return {
142
- ok: false,
143
- message: `failed to install ${spec}: ${err.message}`,
144
- };
145
- }
122
+ return {
123
+ ok: false,
124
+ message: `not found in Persona bundle; install manually: openclaw plugins install ${JSON.stringify(spec)}`,
125
+ };
146
126
  }
147
127
  /**
148
128
  * Install all required skills for an agent.
@@ -1 +1 @@
1
- {"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../../src/core/skill-installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../../src/core/skill-installer.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "clawstore",
3
3
  "name": "Clawstore",
4
- "version": "1.0.7",
4
+ "version": "1.0.8",
5
5
  "description": "Agent marketplace plugin for OpenClaw — browse, install, manage and pack AI employee agents.",
6
6
  "configSchema": {
7
7
  "type": "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawstore/clawstore",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "Agent marketplace plugin for OpenClaw — browse, install, manage and pack AI employee agents.",
5
5
  "type": "module",
6
6
  "main": "./index.ts",
@@ -1,11 +1,23 @@
1
- import { exec } from "node:child_process";
2
- import { readFile, mkdir } from "node:fs/promises";
3
- import { join } from "node:path";
1
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
2
+ import { join, dirname } from "node:path";
4
3
  import { OPENCLAW_HOME, DEFAULT_AGENT } from "../constants.js";
5
4
 
5
+ function isRegistered(config: Record<string, unknown>, agent: string): boolean {
6
+ const agents = config.agents as Record<string, unknown> | undefined;
7
+ if (!agents || typeof agents !== "object") return false;
8
+ if (agents[agent] !== undefined) return true;
9
+ const entries = agents.entries as Record<string, unknown> | undefined;
10
+ if (entries && typeof entries === "object" && !Array.isArray(entries) && entries[agent] !== undefined) {
11
+ return true;
12
+ }
13
+ const list = agents.list;
14
+ if (Array.isArray(list) && list.some((e: { id?: string }) => e?.id === agent)) return true;
15
+ return false;
16
+ }
17
+
6
18
  /**
7
- * If the agent is missing from openclaw.json, run `openclaw agents add`.
8
- * Lives in a dedicated module (child_process) away from workspace resolution.
19
+ * Ensure a non-main agent exists in openclaw.json (file-only; avoids shell subprocesses for plugin safety scans).
20
+ * Creates workspace-{agent} and merges `agents.entries` / `agents.list` as needed.
9
21
  */
10
22
  export async function ensureAgentRegistered(
11
23
  agent: string,
@@ -14,44 +26,54 @@ export async function ensureAgentRegistered(
14
26
  if (agent === DEFAULT_AGENT) return true;
15
27
 
16
28
  const configFile = join(OPENCLAW_HOME, "openclaw.json");
29
+ let config: Record<string, unknown> = {};
30
+
17
31
  try {
18
32
  const raw = await readFile(configFile, "utf-8");
19
- const config = JSON.parse(raw);
20
-
21
- const inMap =
22
- config?.agents?.[agent] !== undefined ||
23
- config?.agents?.entries?.[agent] !== undefined;
24
- const inList = Array.isArray(config?.agents?.list) &&
25
- config.agents.list.some((e: { id?: string }) => e?.id === agent);
26
-
27
- if (inMap || inList) return true;
33
+ config = JSON.parse(raw) as Record<string, unknown>;
34
+ if (isRegistered(config, agent)) return true;
28
35
  } catch {
29
- // config missing or unreadableagent is definitely not registered
36
+ // missing or invalidrewrite below
30
37
  }
31
38
 
32
39
  const workspace = join(OPENCLAW_HOME, `workspace-${agent}`);
33
40
  try {
34
41
  await mkdir(workspace, { recursive: true });
35
- } catch { /* directory may already exist */ }
36
-
37
- log(`\n OpenClaw agent "${agent}" is not registered. Auto-registering ...`);
38
-
39
- const cmd = `openclaw agents add ${agent} --workspace "${workspace}"`;
40
- return new Promise<boolean>((resolve) => {
41
- exec(
42
- cmd,
43
- { timeout: 15_000 },
44
- (err, stdout, stderr) => {
45
- if (err) {
46
- log(` Auto-register failed: ${err.message}`);
47
- if (stderr) log(` ${stderr.trim()}`);
48
- log(` Please run manually: ${cmd}\n`);
49
- resolve(false);
50
- return;
51
- }
52
- log(` Registered agent "${agent}" → ${workspace}`);
53
- resolve(true);
54
- },
55
- );
56
- });
42
+ } catch { /* may exist */ }
43
+
44
+ log(`\n OpenClaw agent "${agent}" is not registered. Updating ${configFile} ...`);
45
+
46
+ try {
47
+ const raw = await readFile(configFile, "utf-8");
48
+ config = JSON.parse(raw) as Record<string, unknown>;
49
+ } catch {
50
+ config = {};
51
+ }
52
+
53
+ if (!config.agents || typeof config.agents !== "object" || Array.isArray(config.agents)) {
54
+ config.agents = {};
55
+ }
56
+ const agents = config.agents as Record<string, unknown>;
57
+
58
+ const entry = { workspace };
59
+
60
+ const prevEntries =
61
+ agents.entries && typeof agents.entries === "object" && !Array.isArray(agents.entries)
62
+ ? { ...(agents.entries as Record<string, { workspace: string }>) }
63
+ : {};
64
+ prevEntries[agent] = entry;
65
+ agents.entries = prevEntries;
66
+
67
+ if (Array.isArray(agents.list)) {
68
+ const list = agents.list as Array<{ id?: string; workspace?: string }>;
69
+ const idx = list.findIndex((e) => e?.id === agent);
70
+ if (idx >= 0) list[idx] = { ...list[idx], id: agent, workspace };
71
+ else list.push({ id: agent, workspace });
72
+ }
73
+
74
+ await mkdir(dirname(configFile), { recursive: true });
75
+ await writeFile(configFile, `${JSON.stringify(config, null, 2)}\n`, "utf-8");
76
+
77
+ log(` Registered agent "${agent}" → ${workspace}`);
78
+ return true;
57
79
  }
@@ -1,15 +1,11 @@
1
1
  import { access, readFile, writeFile, mkdir, cp } from "node:fs/promises";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
  import { join, dirname } from "node:path";
4
- import { exec } from "node:child_process";
5
- import { promisify } from "node:util";
6
4
  import semver from "semver";
7
5
  import { OPENCLAW_HOME, DEFAULT_AGENT, agentSkillRegistryFile } from "../constants.js";
8
6
  import type { SkillDependency, SkillRegistry, InstalledSkillRecord } from "../types.js";
9
7
  import { resolveWorkspace } from "./workspace.js";
10
8
 
11
- const execAsync = promisify(exec);
12
-
13
9
  async function exists(p: string): Promise<boolean> {
14
10
  try {
15
11
  await access(p);
@@ -129,7 +125,7 @@ async function installSkillFromBundle(
129
125
  *
130
126
  * Strategy:
131
127
  * 1. Try bundled skills/ in the package directory first
132
- * 2. Fall back to `openclaw plugins install <skill-id>` (npm registry)
128
+ * 2. If not bundled: return instructions to run `openclaw plugins install` manually (no shell from this plugin).
133
129
  */
134
130
  export async function installSkill(
135
131
  skillId: string,
@@ -154,28 +150,11 @@ export async function installSkill(
154
150
  }
155
151
 
156
152
  const spec = version && version !== "latest" ? `${skillId}@${version}` : skillId;
157
- try {
158
- const cmd = `openclaw plugins install ${JSON.stringify(spec)}`;
159
- const { stdout, stderr } = await execAsync(cmd, { timeout: 60_000 });
160
- const output = stdout || stderr;
161
-
162
- const reg = await loadSkillRegistry(agent);
163
- reg.skills[skillId] = {
164
- skill_id: skillId,
165
- version,
166
- installed_at: new Date().toISOString(),
167
- installed_by: "clawstore",
168
- source: `npm:${spec}`,
169
- };
170
- await saveSkillRegistry(reg, agent);
171
-
172
- return { ok: true, message: output.trim() || `installed ${spec}` };
173
- } catch (err) {
174
- return {
175
- ok: false,
176
- message: `failed to install ${spec}: ${(err as Error).message}`,
177
- };
178
- }
153
+ return {
154
+ ok: false,
155
+ message:
156
+ `not found in Persona bundle; install manually: openclaw plugins install ${JSON.stringify(spec)}`,
157
+ };
179
158
  }
180
159
 
181
160
  /**