@clawstore/clawstore 1.0.0 → 1.0.1
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/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/src/__tests__/cli-sim.test.d.ts +9 -0
- package/dist/src/__tests__/cli-sim.test.d.ts.map +1 -0
- package/dist/src/__tests__/cli-sim.test.js +275 -0
- package/dist/src/__tests__/cli-sim.test.js.map +1 -0
- package/dist/src/__tests__/e2e.test.d.ts +10 -0
- package/dist/src/__tests__/e2e.test.d.ts.map +1 -0
- package/dist/src/__tests__/e2e.test.js +159 -0
- package/dist/src/__tests__/e2e.test.js.map +1 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +452 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands.d.ts +10 -0
- package/dist/src/commands.d.ts.map +1 -0
- package/dist/src/commands.js +196 -0
- package/dist/src/commands.js.map +1 -0
- package/dist/src/constants.d.ts +28 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +65 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/core/agent-manager.d.ts +34 -0
- package/dist/src/core/agent-manager.d.ts.map +1 -0
- package/dist/src/core/agent-manager.js +268 -0
- package/dist/src/core/agent-manager.js.map +1 -0
- package/dist/src/core/package-installer.d.ts +30 -0
- package/dist/src/core/package-installer.d.ts.map +1 -0
- package/dist/src/core/package-installer.js +308 -0
- package/dist/src/core/package-installer.js.map +1 -0
- package/dist/src/core/packager.d.ts +20 -0
- package/dist/src/core/packager.d.ts.map +1 -0
- package/dist/src/core/packager.js +178 -0
- package/dist/src/core/packager.js.map +1 -0
- package/dist/src/core/skill-installer.d.ts +33 -0
- package/dist/src/core/skill-installer.d.ts.map +1 -0
- package/dist/src/core/skill-installer.js +179 -0
- package/dist/src/core/skill-installer.js.map +1 -0
- package/dist/src/core/store-client.d.ts +47 -0
- package/dist/src/core/store-client.d.ts.map +1 -0
- package/dist/src/core/store-client.js +111 -0
- package/dist/src/core/store-client.js.map +1 -0
- package/dist/src/core/workspace.d.ts +29 -0
- package/dist/src/core/workspace.d.ts.map +1 -0
- package/dist/src/core/workspace.js +242 -0
- package/dist/src/core/workspace.js.map +1 -0
- package/dist/src/types.d.ts +114 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/checksum.d.ts +4 -0
- package/dist/src/utils/checksum.d.ts.map +1 -0
- package/dist/src/utils/checksum.js +15 -0
- package/dist/src/utils/checksum.js.map +1 -0
- package/dist/src/utils/output.d.ts +13 -0
- package/dist/src/utils/output.d.ts.map +1 -0
- package/dist/src/utils/output.js +70 -0
- package/dist/src/utils/output.js.map +1 -0
- package/dist/src/utils/zip.d.ts +13 -0
- package/dist/src/utils/zip.d.ts.map +1 -0
- package/dist/src/utils/zip.js +50 -0
- package/dist/src/utils/zip.js.map +1 -0
- package/package.json +4 -2
- package/src/cli.ts +10 -9
- package/src/commands.ts +21 -2
- package/src/constants.ts +1 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { OpenClawPluginApi } from "openclaw/plugin-sdk/core";
|
|
2
|
+
import type { ClawstoreConfig } from "./src/types.js";
|
|
3
|
+
declare const plugin: {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
configSchema: {
|
|
8
|
+
parse(value: unknown): Partial<ClawstoreConfig>;
|
|
9
|
+
uiHints: {
|
|
10
|
+
apiBaseUrl: {
|
|
11
|
+
label: string;
|
|
12
|
+
};
|
|
13
|
+
autoCheckUpdates: {
|
|
14
|
+
label: string;
|
|
15
|
+
};
|
|
16
|
+
autoInstallSkills: {
|
|
17
|
+
label: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
register(api: OpenClawPluginApi): void;
|
|
22
|
+
};
|
|
23
|
+
export default plugin;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAgCtD,QAAA,MAAM,MAAM;;;;;qBA1BG,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;;;;;;;;;;;;;kBAgCjC,iBAAiB;CAIhC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { registerClawstoreCli } from "./src/cli.js";
|
|
2
|
+
import { registerClawstoreCommand } from "./src/commands.js";
|
|
3
|
+
import { DEFAULT_API_BASE_URL } from "./src/constants.js";
|
|
4
|
+
const clawstoreConfigSchema = {
|
|
5
|
+
parse(value) {
|
|
6
|
+
if (value === undefined || value === null)
|
|
7
|
+
return {};
|
|
8
|
+
if (typeof value !== "object" || Array.isArray(value))
|
|
9
|
+
return {};
|
|
10
|
+
const raw = value;
|
|
11
|
+
return {
|
|
12
|
+
apiBaseUrl: typeof raw.apiBaseUrl === "string" && raw.apiBaseUrl.trim()
|
|
13
|
+
? raw.apiBaseUrl.trim()
|
|
14
|
+
: DEFAULT_API_BASE_URL,
|
|
15
|
+
autoCheckUpdates: typeof raw.autoCheckUpdates === "boolean"
|
|
16
|
+
? raw.autoCheckUpdates
|
|
17
|
+
: true,
|
|
18
|
+
autoInstallSkills: typeof raw.autoInstallSkills === "boolean"
|
|
19
|
+
? raw.autoInstallSkills
|
|
20
|
+
: true,
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
uiHints: {
|
|
24
|
+
apiBaseUrl: { label: "Clawstore API URL" },
|
|
25
|
+
autoCheckUpdates: { label: "Auto-check Updates" },
|
|
26
|
+
autoInstallSkills: { label: "Auto-install Skills" },
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
const plugin = {
|
|
30
|
+
id: "clawstore",
|
|
31
|
+
name: "Clawstore",
|
|
32
|
+
description: "Agent marketplace for OpenClaw — browse, install, manage and pack AI employee agents.",
|
|
33
|
+
configSchema: clawstoreConfigSchema,
|
|
34
|
+
register(api) {
|
|
35
|
+
registerClawstoreCli(api);
|
|
36
|
+
registerClawstoreCommand(api);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
export default plugin;
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,qBAAqB,GAAG;IAC5B,KAAK,CAAC,KAAc;QAClB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACjE,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,OAAO;YACL,UAAU,EACR,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;gBACzD,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;gBACvB,CAAC,CAAC,oBAAoB;YAC1B,gBAAgB,EACd,OAAO,GAAG,CAAC,gBAAgB,KAAK,SAAS;gBACvC,CAAC,CAAC,GAAG,CAAC,gBAAgB;gBACtB,CAAC,CAAC,IAAI;YACV,iBAAiB,EACf,OAAO,GAAG,CAAC,iBAAiB,KAAK,SAAS;gBACxC,CAAC,CAAC,GAAG,CAAC,iBAAiB;gBACvB,CAAC,CAAC,IAAI;SACX,CAAC;IACJ,CAAC;IACD,OAAO,EAAE;QACP,UAAU,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;QAC1C,gBAAgB,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;QACjD,iBAAiB,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE;KACpD;CACF,CAAC;AAEF,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,uFAAuF;IACzF,YAAY,EAAE,qBAAqB;IACnC,QAAQ,CAAC,GAAsB;QAC7B,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1B,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI simulation test — walks through the full lifecycle:
|
|
3
|
+
* install -> installed -> status -> disable -> enable -> pack -> doctor -> uninstall
|
|
4
|
+
*
|
|
5
|
+
* Uses the E-commerce Persona package as the test subject.
|
|
6
|
+
* Run: npx tsx src/__tests__/cli-sim.test.ts
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=cli-sim.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-sim.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/cli-sim.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI simulation test — walks through the full lifecycle:
|
|
3
|
+
* install -> installed -> status -> disable -> enable -> pack -> doctor -> uninstall
|
|
4
|
+
*
|
|
5
|
+
* Uses the E-commerce Persona package as the test subject.
|
|
6
|
+
* Run: npx tsx src/__tests__/cli-sim.test.ts
|
|
7
|
+
*/
|
|
8
|
+
import { resolve, join } from "node:path";
|
|
9
|
+
import { mkdir, rm, access } from "node:fs/promises";
|
|
10
|
+
import { tmpdir } from "node:os";
|
|
11
|
+
async function exists(p) {
|
|
12
|
+
try {
|
|
13
|
+
await access(p);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// ─── Capture log output ─────────────────────────────────────────────
|
|
21
|
+
function createLogger() {
|
|
22
|
+
const output = [];
|
|
23
|
+
return {
|
|
24
|
+
log: (msg) => {
|
|
25
|
+
output.push(msg);
|
|
26
|
+
console.log(msg);
|
|
27
|
+
},
|
|
28
|
+
output,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// ─── Main test flow ─────────────────────────────────────────────────
|
|
32
|
+
async function main() {
|
|
33
|
+
const PERSONA_ROOT = resolve(import.meta.dirname ?? ".", "../../../../Persona");
|
|
34
|
+
const ECOMMERCE_PKG = join(PERSONA_ROOT, "E-commerce");
|
|
35
|
+
const DIST_DIR = join(tmpdir(), `clawstore-cli-test-${Date.now()}`);
|
|
36
|
+
console.log("╔════════════════════════════════════════════════════════════╗");
|
|
37
|
+
console.log("║ Clawstore CLI Simulation Test ║");
|
|
38
|
+
console.log("╚════════════════════════════════════════════════════════════╝");
|
|
39
|
+
console.log(`\n Persona root: ${PERSONA_ROOT}`);
|
|
40
|
+
console.log(` Test package: ${ECOMMERCE_PKG}`);
|
|
41
|
+
console.log(` Temp dist: ${DIST_DIR}\n`);
|
|
42
|
+
await mkdir(DIST_DIR, { recursive: true });
|
|
43
|
+
// Dynamic imports
|
|
44
|
+
const { installAgent } = await import("../core/package-installer.js");
|
|
45
|
+
const { listInstalledAgents, getAgentStatus, enableAgent, disableAgent } = await import("../core/agent-manager.js");
|
|
46
|
+
const { packAgent } = await import("../core/packager.js");
|
|
47
|
+
const { diagnose, formatDiagnosticReport } = await import("../core/workspace.js");
|
|
48
|
+
const { validatePackage } = await import("../core/package-installer.js");
|
|
49
|
+
let step = 0;
|
|
50
|
+
// ─────────────────────────────────────────────────────────────────
|
|
51
|
+
// Step 1: openclaw clawstore doctor
|
|
52
|
+
// ─────────────────────────────────────────────────────────────────
|
|
53
|
+
step++;
|
|
54
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
55
|
+
console.log(` Step ${step}: openclaw clawstore doctor`);
|
|
56
|
+
console.log(`${"─".repeat(60)}`);
|
|
57
|
+
const report = await diagnose();
|
|
58
|
+
console.log(formatDiagnosticReport(report));
|
|
59
|
+
// ─────────────────────────────────────────────────────────────────
|
|
60
|
+
// Step 2: openclaw clawstore install ./Persona/E-commerce
|
|
61
|
+
// ─────────────────────────────────────────────────────────────────
|
|
62
|
+
step++;
|
|
63
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
64
|
+
console.log(` Step ${step}: openclaw clawstore install ${ECOMMERCE_PKG}`);
|
|
65
|
+
console.log(`${"─".repeat(60)}`);
|
|
66
|
+
const installLogger = createLogger();
|
|
67
|
+
const installResult = await installAgent({
|
|
68
|
+
packagePath: ECOMMERCE_PKG,
|
|
69
|
+
force: true,
|
|
70
|
+
log: installLogger.log,
|
|
71
|
+
});
|
|
72
|
+
console.log(`\n >> Result state: ${installResult.state}`);
|
|
73
|
+
if (installResult.error)
|
|
74
|
+
console.log(` >> Error: ${installResult.error}`);
|
|
75
|
+
// ─────────────────────────────────────────────────────────────────
|
|
76
|
+
// Step 3: openclaw clawstore installed
|
|
77
|
+
// ─────────────────────────────────────────────────────────────────
|
|
78
|
+
step++;
|
|
79
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
80
|
+
console.log(` Step ${step}: openclaw clawstore installed`);
|
|
81
|
+
console.log(`${"─".repeat(60)}`);
|
|
82
|
+
const agents = await listInstalledAgents();
|
|
83
|
+
if (agents.length === 0) {
|
|
84
|
+
console.log("\n No agents installed.");
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log(`\n Installed agents: ${agents.length}\n`);
|
|
88
|
+
agents.forEach((a, i) => {
|
|
89
|
+
const status = a.enabled ? "enabled" : "disabled";
|
|
90
|
+
console.log(` ${i + 1}. ${a.id}`);
|
|
91
|
+
console.log(` ${a.name}`);
|
|
92
|
+
console.log(` v${a.version} · ${a.category} · ${status}`);
|
|
93
|
+
console.log(` Installed: ${a.installed_at.slice(0, 10)}`);
|
|
94
|
+
console.log(` Files: ${a.files.length}`);
|
|
95
|
+
console.log(` Skills: ${a.skills.join(", ") || "none"}`);
|
|
96
|
+
console.log();
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// ─────────────────────────────────────────────────────────────────
|
|
100
|
+
// Step 4: openclaw clawstore status sellex-ecommerce-ops
|
|
101
|
+
// ─────────────────────────────────────────────────────────────────
|
|
102
|
+
step++;
|
|
103
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
104
|
+
console.log(` Step ${step}: openclaw clawstore status sellex-ecommerce-ops`);
|
|
105
|
+
console.log(`${"─".repeat(60)}`);
|
|
106
|
+
const agentStatus = await getAgentStatus("sellex-ecommerce-ops");
|
|
107
|
+
if (agentStatus) {
|
|
108
|
+
const { agent, fileHealth, skillHealth } = agentStatus;
|
|
109
|
+
console.log(`\n Agent: ${agent.id}`);
|
|
110
|
+
console.log(` Name: ${agent.name}`);
|
|
111
|
+
console.log(` Version: ${agent.version}`);
|
|
112
|
+
console.log(` Category: ${agent.category}`);
|
|
113
|
+
console.log(` Status: ${agent.enabled ? "enabled" : "disabled"}`);
|
|
114
|
+
console.log(` Installed: ${agent.installed_at}`);
|
|
115
|
+
console.log(` Files:`);
|
|
116
|
+
for (const f of fileHealth) {
|
|
117
|
+
console.log(` - ${f.file} [${f.exists ? "OK" : "MISSING"}]`);
|
|
118
|
+
}
|
|
119
|
+
if (skillHealth.length > 0) {
|
|
120
|
+
console.log(` Skills:`);
|
|
121
|
+
for (const s of skillHealth) {
|
|
122
|
+
console.log(` - ${s.skillId} [${s.installed ? "installed" : "not installed"}]`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (agent.backup_path) {
|
|
126
|
+
console.log(` Backup: ${agent.backup_path}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// ─────────────────────────────────────────────────────────────────
|
|
130
|
+
// Step 5: openclaw clawstore disable sellex-ecommerce-ops
|
|
131
|
+
// ─────────────────────────────────────────────────────────────────
|
|
132
|
+
step++;
|
|
133
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
134
|
+
console.log(` Step ${step}: openclaw clawstore disable sellex-ecommerce-ops`);
|
|
135
|
+
console.log(`${"─".repeat(60)}`);
|
|
136
|
+
const disabledResult = await disableAgent("sellex-ecommerce-ops");
|
|
137
|
+
if (disabledResult) {
|
|
138
|
+
console.log(`\n Disabled: ${disabledResult.agent.name} (${disabledResult.agent.id})`);
|
|
139
|
+
console.log(` Workspace files backed up and removed.`);
|
|
140
|
+
console.log(` Backup: ${disabledResult.backupPath}`);
|
|
141
|
+
}
|
|
142
|
+
// ─────────────────────────────────────────────────────────────────
|
|
143
|
+
// Step 6: openclaw clawstore enable sellex-ecommerce-ops
|
|
144
|
+
// ─────────────────────────────────────────────────────────────────
|
|
145
|
+
step++;
|
|
146
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
147
|
+
console.log(` Step ${step}: openclaw clawstore enable sellex-ecommerce-ops`);
|
|
148
|
+
console.log(`${"─".repeat(60)}`);
|
|
149
|
+
const enabledResult = await enableAgent("sellex-ecommerce-ops");
|
|
150
|
+
if (enabledResult) {
|
|
151
|
+
console.log(`\n Enabled: ${enabledResult.name} (${enabledResult.id})`);
|
|
152
|
+
}
|
|
153
|
+
// ─────────────────────────────────────────────────────────────────
|
|
154
|
+
// Step 7: openclaw clawstore pack ./Persona/E-commerce
|
|
155
|
+
// ─────────────────────────────────────────────────────────────────
|
|
156
|
+
step++;
|
|
157
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
158
|
+
console.log(` Step ${step}: openclaw clawstore pack ${ECOMMERCE_PKG} --output ${DIST_DIR}`);
|
|
159
|
+
console.log(`${"─".repeat(60)}`);
|
|
160
|
+
const packLogger = createLogger();
|
|
161
|
+
const packResult = await packAgent({
|
|
162
|
+
packagePath: ECOMMERCE_PKG,
|
|
163
|
+
outputDir: DIST_DIR,
|
|
164
|
+
log: packLogger.log,
|
|
165
|
+
});
|
|
166
|
+
if (packResult) {
|
|
167
|
+
console.log(`\n >> Pack result: ${packResult.zipPath}`);
|
|
168
|
+
console.log(` >> Size: ${packResult.sizeKb.toFixed(1)} KB`);
|
|
169
|
+
console.log(` >> Manifest ID: ${packResult.manifest.id}`);
|
|
170
|
+
console.log(` >> Skills detected: ${packResult.manifest.skills.map(s => s.id).join(", ")}`);
|
|
171
|
+
}
|
|
172
|
+
// ─────────────────────────────────────────────────────────────────
|
|
173
|
+
// Step 8: Verify the packed ZIP can be installed
|
|
174
|
+
// ─────────────────────────────────────────────────────────────────
|
|
175
|
+
if (packResult) {
|
|
176
|
+
step++;
|
|
177
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
178
|
+
console.log(` Step ${step}: openclaw clawstore install ${packResult.zipPath} (from ZIP)`);
|
|
179
|
+
console.log(`${"─".repeat(60)}`);
|
|
180
|
+
const zipLogger = createLogger();
|
|
181
|
+
const zipResult = await installAgent({
|
|
182
|
+
packagePath: packResult.zipPath,
|
|
183
|
+
force: true,
|
|
184
|
+
skipSkills: true, // ZIP re-install: skip skills since already attempted
|
|
185
|
+
log: zipLogger.log,
|
|
186
|
+
});
|
|
187
|
+
console.log(`\n >> ZIP install result: ${zipResult.state}`);
|
|
188
|
+
}
|
|
189
|
+
// ─────────────────────────────────────────────────────────────────
|
|
190
|
+
// Step 9: Install a second Persona to a DIFFERENT OpenClaw agent
|
|
191
|
+
// (multi-agent support)
|
|
192
|
+
// ─────────────────────────────────────────────────────────────────
|
|
193
|
+
step++;
|
|
194
|
+
const CROSSBORDER_PKG = join(PERSONA_ROOT, "Cross-border");
|
|
195
|
+
const SECOND_AGENT = "sales";
|
|
196
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
197
|
+
console.log(` Step ${step}: openclaw clawstore install ${CROSSBORDER_PKG} --agent ${SECOND_AGENT}`);
|
|
198
|
+
console.log(`${"─".repeat(60)}`);
|
|
199
|
+
const cb_logger = createLogger();
|
|
200
|
+
await installAgent({
|
|
201
|
+
packagePath: CROSSBORDER_PKG,
|
|
202
|
+
force: true,
|
|
203
|
+
skipSkills: true,
|
|
204
|
+
agent: SECOND_AGENT,
|
|
205
|
+
log: cb_logger.log,
|
|
206
|
+
});
|
|
207
|
+
// Show installed list per agent
|
|
208
|
+
const mainAgents = await listInstalledAgents("main");
|
|
209
|
+
const salesAgents = await listInstalledAgents(SECOND_AGENT);
|
|
210
|
+
console.log(`\n Installed on "main": ${mainAgents.length}`);
|
|
211
|
+
for (const a of mainAgents) {
|
|
212
|
+
console.log(` - ${a.id} v${a.version} (${a.enabled ? "enabled" : "disabled"})`);
|
|
213
|
+
}
|
|
214
|
+
console.log(` Installed on "${SECOND_AGENT}": ${salesAgents.length}`);
|
|
215
|
+
for (const a of salesAgents) {
|
|
216
|
+
console.log(` - ${a.id} v${a.version} (${a.enabled ? "enabled" : "disabled"})`);
|
|
217
|
+
}
|
|
218
|
+
// ─────────────────────────────────────────────────────────────────
|
|
219
|
+
// Step 10: openclaw clawstore uninstall sellex-ecommerce-ops
|
|
220
|
+
// ─────────────────────────────────────────────────────────────────
|
|
221
|
+
step++;
|
|
222
|
+
console.log(`\n${"─".repeat(60)}`);
|
|
223
|
+
console.log(` Step ${step}: openclaw clawstore uninstall sellex-ecommerce-ops`);
|
|
224
|
+
console.log(`${"─".repeat(60)}`);
|
|
225
|
+
const { unregisterAgent, backupCurrentWorkspace, removeAgentFiles, getInstalledAgent } = await import("../core/agent-manager.js");
|
|
226
|
+
const agent = await getInstalledAgent("sellex-ecommerce-ops");
|
|
227
|
+
if (agent) {
|
|
228
|
+
console.log(`\n Uninstalling: ${agent.name} (${agent.id})`);
|
|
229
|
+
console.log(` Version: ${agent.version}\n`);
|
|
230
|
+
console.log(" [1/3] Creating safety backup ...");
|
|
231
|
+
const backupPath = await backupCurrentWorkspace(agent.id, "uninstall");
|
|
232
|
+
console.log(` [1/3] Creating safety backup ... OK (${backupPath})`);
|
|
233
|
+
console.log(" [2/3] Removing agent files ...");
|
|
234
|
+
const removed = await removeAgentFiles(agent);
|
|
235
|
+
console.log(` [2/3] Removing agent files ... OK (${removed} files removed)`);
|
|
236
|
+
console.log(" [3/3] Updating registry ...");
|
|
237
|
+
await unregisterAgent(agent.id);
|
|
238
|
+
console.log(" [3/3] Updating registry ... OK");
|
|
239
|
+
console.log(`\n Uninstalled: ${agent.name}`);
|
|
240
|
+
console.log(` Backup saved: ${backupPath}`);
|
|
241
|
+
}
|
|
242
|
+
// Final state
|
|
243
|
+
const finalMainAgents = await listInstalledAgents("main");
|
|
244
|
+
const finalSalesAgents = await listInstalledAgents(SECOND_AGENT);
|
|
245
|
+
console.log(`\n Remaining on "main": ${finalMainAgents.length}`);
|
|
246
|
+
for (const a of finalMainAgents) {
|
|
247
|
+
console.log(` - ${a.id} v${a.version}`);
|
|
248
|
+
}
|
|
249
|
+
console.log(` Remaining on "${SECOND_AGENT}": ${finalSalesAgents.length}`);
|
|
250
|
+
for (const a of finalSalesAgents) {
|
|
251
|
+
console.log(` - ${a.id} v${a.version}`);
|
|
252
|
+
}
|
|
253
|
+
// ─────────────────────────────────────────────────────────────────
|
|
254
|
+
// Cleanup all agents
|
|
255
|
+
// ─────────────────────────────────────────────────────────────────
|
|
256
|
+
for (const a of finalMainAgents) {
|
|
257
|
+
await unregisterAgent(a.id, "main");
|
|
258
|
+
}
|
|
259
|
+
for (const a of finalSalesAgents) {
|
|
260
|
+
await unregisterAgent(a.id, SECOND_AGENT);
|
|
261
|
+
}
|
|
262
|
+
// Cleanup temp
|
|
263
|
+
try {
|
|
264
|
+
await rm(DIST_DIR, { recursive: true, force: true });
|
|
265
|
+
}
|
|
266
|
+
catch { }
|
|
267
|
+
console.log("\n╔════════════════════════════════════════════════════════════╗");
|
|
268
|
+
console.log("║ All CLI simulation steps completed successfully! ║");
|
|
269
|
+
console.log("╚════════════════════════════════════════════════════════════╝\n");
|
|
270
|
+
}
|
|
271
|
+
main().catch((err) => {
|
|
272
|
+
console.error("\nTest failed:", err);
|
|
273
|
+
process.exit(1);
|
|
274
|
+
});
|
|
275
|
+
//# sourceMappingURL=cli-sim.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-sim.test.js","sourceRoot":"","sources":["../../../src/__tests__/cli-sim.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end test for the Clawstore plugin core modules.
|
|
3
|
+
*
|
|
4
|
+
* Verifies: workspace resolution, manifest validation, install/uninstall
|
|
5
|
+
* flow, pack, and diagnostic report — all against the local Persona packages.
|
|
6
|
+
*
|
|
7
|
+
* Run: npx tsx src/__tests__/e2e.test.ts
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=e2e.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/e2e.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End-to-end test for the Clawstore plugin core modules.
|
|
3
|
+
*
|
|
4
|
+
* Verifies: workspace resolution, manifest validation, install/uninstall
|
|
5
|
+
* flow, pack, and diagnostic report — all against the local Persona packages.
|
|
6
|
+
*
|
|
7
|
+
* Run: npx tsx src/__tests__/e2e.test.ts
|
|
8
|
+
*/
|
|
9
|
+
import { resolve, join } from "node:path";
|
|
10
|
+
import { mkdir, rm, writeFile, access } from "node:fs/promises";
|
|
11
|
+
import { tmpdir } from "node:os";
|
|
12
|
+
// ─── Test infra ─────────────────────────────────────────────────────
|
|
13
|
+
let passed = 0;
|
|
14
|
+
let failed = 0;
|
|
15
|
+
function assert(condition, label) {
|
|
16
|
+
if (condition) {
|
|
17
|
+
console.log(` ✓ ${label}`);
|
|
18
|
+
passed++;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.error(` ✗ ${label}`);
|
|
22
|
+
failed++;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function exists(p) {
|
|
26
|
+
try {
|
|
27
|
+
await access(p);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// ─── Override paths to use temp dirs ────────────────────────────────
|
|
35
|
+
const TEST_HOME = join(tmpdir(), `clawstore-test-${Date.now()}`);
|
|
36
|
+
const TEST_WORKSPACE = join(TEST_HOME, "workspace");
|
|
37
|
+
// We need to override the constants before importing modules
|
|
38
|
+
process.env.CLAWSTORE_TEST_HOME = TEST_HOME;
|
|
39
|
+
// ─── Dynamic imports (after env setup) ──────────────────────────────
|
|
40
|
+
async function runTests() {
|
|
41
|
+
console.log("\n═══ Clawstore Plugin E2E Tests ═══\n");
|
|
42
|
+
// Setup temp dirs
|
|
43
|
+
await mkdir(TEST_WORKSPACE, { recursive: true });
|
|
44
|
+
await mkdir(join(TEST_HOME, "clawstore"), { recursive: true });
|
|
45
|
+
// We'll test the core modules directly
|
|
46
|
+
const { validatePackage, loadManifest } = await import("../core/package-installer.js");
|
|
47
|
+
const { loadRegistry, saveRegistry, registerAgent, unregisterAgent, enableAgent, disableAgent, listInstalledAgents } = await import("../core/agent-manager.js");
|
|
48
|
+
const { computeSha256 } = await import("../utils/checksum.js");
|
|
49
|
+
const { formatDiagnosticReport } = await import("../core/workspace.js");
|
|
50
|
+
// ─── Test: Persona package paths ────────────────────────────────
|
|
51
|
+
const personaRoot = resolve(import.meta.dirname ?? ".", "../../../../Persona");
|
|
52
|
+
const ecommercePkg = join(personaRoot, "E-commerce");
|
|
53
|
+
console.log(" Test group: Package Validation\n");
|
|
54
|
+
// 1. E-commerce package should be valid
|
|
55
|
+
const ecomResult = await validatePackage(ecommercePkg);
|
|
56
|
+
assert(ecomResult.valid === true, "E-commerce package is valid");
|
|
57
|
+
assert(ecomResult.manifest !== null, "E-commerce manifest loaded");
|
|
58
|
+
assert(ecomResult.manifest?.id === "sellex-ecommerce-ops", "E-commerce agent ID correct");
|
|
59
|
+
assert(ecomResult.manifest?.version === "2.0.0", "E-commerce version is 2.0.0");
|
|
60
|
+
// 2. Manifest fields
|
|
61
|
+
const manifest = await loadManifest(ecommercePkg);
|
|
62
|
+
assert(manifest.name.includes("E-commerce"), "manifest name contains E-commerce");
|
|
63
|
+
assert(manifest.skills.length === 4, "manifest has 4 skills");
|
|
64
|
+
assert(manifest.entry_files.length >= 3, "manifest has >= 3 entry_files");
|
|
65
|
+
// 3. Non-existent package should fail
|
|
66
|
+
const fakeResult = await validatePackage(join(personaRoot, "NonExistent"));
|
|
67
|
+
assert(fakeResult.valid === false, "Non-existent package fails validation");
|
|
68
|
+
// ─── Test: Checksum ─────────────────────────────────────────────
|
|
69
|
+
console.log("\n Test group: Checksum\n");
|
|
70
|
+
const testFile = join(TEST_HOME, "test_checksum.txt");
|
|
71
|
+
await writeFile(testFile, "Hello Clawstore!", "utf-8");
|
|
72
|
+
const cs = await computeSha256(testFile);
|
|
73
|
+
assert(cs.startsWith("sha256:"), "Checksum starts with sha256:");
|
|
74
|
+
assert(cs.length > 10, "Checksum has reasonable length");
|
|
75
|
+
// ─── Test: Registry CRUD ────────────────────────────────────────
|
|
76
|
+
console.log("\n Test group: Registry CRUD\n");
|
|
77
|
+
// Override the registry file for testing
|
|
78
|
+
const testRegistryFile = join(TEST_HOME, "clawstore", "installed_agents.json");
|
|
79
|
+
await writeFile(testRegistryFile, JSON.stringify({ agents: {} }), "utf-8");
|
|
80
|
+
// Since the module uses hardcoded paths, we'll test the registry functions
|
|
81
|
+
// by directly using load/save with the real file path
|
|
82
|
+
const emptyReg = await loadRegistry();
|
|
83
|
+
assert(Object.keys(emptyReg.agents).length === 0, "Empty registry has no agents");
|
|
84
|
+
// Register a test agent
|
|
85
|
+
await registerAgent({
|
|
86
|
+
id: "test-agent",
|
|
87
|
+
name: "Test Agent",
|
|
88
|
+
version: "1.0.0",
|
|
89
|
+
category: "test",
|
|
90
|
+
author: "Test",
|
|
91
|
+
enabled: true,
|
|
92
|
+
installed_at: new Date().toISOString(),
|
|
93
|
+
updated_at: new Date().toISOString(),
|
|
94
|
+
source: "/tmp/test",
|
|
95
|
+
install_path: TEST_WORKSPACE,
|
|
96
|
+
backup_path: "",
|
|
97
|
+
files: ["SOUL.md"],
|
|
98
|
+
skills: [],
|
|
99
|
+
});
|
|
100
|
+
const regAfterAdd = await loadRegistry();
|
|
101
|
+
assert(regAfterAdd.agents["test-agent"] !== undefined, "Agent registered successfully");
|
|
102
|
+
assert(regAfterAdd.agents["test-agent"].name === "Test Agent", "Agent name correct");
|
|
103
|
+
// Enable/disable
|
|
104
|
+
const disabled = await disableAgent("test-agent");
|
|
105
|
+
assert(disabled?.agent.enabled === false, "Agent disabled");
|
|
106
|
+
const enabled = await enableAgent("test-agent");
|
|
107
|
+
assert(enabled?.enabled === true, "Agent re-enabled");
|
|
108
|
+
// List
|
|
109
|
+
const list = await listInstalledAgents();
|
|
110
|
+
assert(list.length >= 1, "Listed agents includes test-agent");
|
|
111
|
+
// Unregister
|
|
112
|
+
const removed = await unregisterAgent("test-agent");
|
|
113
|
+
assert(removed?.id === "test-agent", "Agent unregistered");
|
|
114
|
+
const regAfterRemove = await loadRegistry();
|
|
115
|
+
assert(regAfterRemove.agents["test-agent"] === undefined, "Agent removed from registry");
|
|
116
|
+
// ─── Test: Diagnostic report formatting ─────────────────────────
|
|
117
|
+
console.log("\n Test group: Diagnostic Formatting\n");
|
|
118
|
+
const mockReport = {
|
|
119
|
+
checks: [
|
|
120
|
+
{ label: "OpenClaw home", path: "/test", status: "ok" },
|
|
121
|
+
{ label: "Workspace", path: "/test/ws", status: "fail", detail: "NOT FOUND" },
|
|
122
|
+
],
|
|
123
|
+
allOk: false,
|
|
124
|
+
};
|
|
125
|
+
const formatted = formatDiagnosticReport(mockReport);
|
|
126
|
+
assert(formatted.includes("Clawstore Doctor"), "Report has title");
|
|
127
|
+
assert(formatted.includes("OK"), "Report has OK status");
|
|
128
|
+
assert(formatted.includes("FAIL"), "Report has FAIL status");
|
|
129
|
+
assert(formatted.includes("Some issues found"), "Report shows issues summary");
|
|
130
|
+
// ─── Test: Multiple Persona packages ────────────────────────────
|
|
131
|
+
console.log("\n Test group: Cross-Persona Validation\n");
|
|
132
|
+
const personas = [
|
|
133
|
+
"Cross-border", "Knowledge-blogger", "Development", "Retail-store",
|
|
134
|
+
"Design", "Manufacturing", "Legal", "Finance-tax", "Headhunting",
|
|
135
|
+
];
|
|
136
|
+
for (const name of personas) {
|
|
137
|
+
const pkgPath = join(personaRoot, name);
|
|
138
|
+
if (await exists(pkgPath)) {
|
|
139
|
+
const result = await validatePackage(pkgPath);
|
|
140
|
+
assert(result.valid === true, `${name} package is valid`);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
assert(false, `${name} package directory exists`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// ─── Cleanup ────────────────────────────────────────────────────
|
|
147
|
+
try {
|
|
148
|
+
await rm(TEST_HOME, { recursive: true, force: true });
|
|
149
|
+
}
|
|
150
|
+
catch { /* ignore */ }
|
|
151
|
+
// ─── Summary ────────────────────────────────────────────────────
|
|
152
|
+
console.log(`\n═══ Results: ${passed} passed, ${failed} failed ═══\n`);
|
|
153
|
+
process.exit(failed > 0 ? 1 : 0);
|
|
154
|
+
}
|
|
155
|
+
runTests().catch((err) => {
|
|
156
|
+
console.error("Test runner failed:", err);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=e2e.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../../src/__tests__/e2e.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAiClE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAybjE"}
|