@clawstore/clawstore 1.0.0 → 1.0.2

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 (69) hide show
  1. package/clawstore-clawstore-1.0.2.tgz +0 -0
  2. package/dist/index.d.ts +24 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +40 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/__tests__/cli-sim.test.d.ts +9 -0
  7. package/dist/src/__tests__/cli-sim.test.d.ts.map +1 -0
  8. package/dist/src/__tests__/cli-sim.test.js +275 -0
  9. package/dist/src/__tests__/cli-sim.test.js.map +1 -0
  10. package/dist/src/__tests__/e2e.test.d.ts +10 -0
  11. package/dist/src/__tests__/e2e.test.d.ts.map +1 -0
  12. package/dist/src/__tests__/e2e.test.js +159 -0
  13. package/dist/src/__tests__/e2e.test.js.map +1 -0
  14. package/dist/src/cli.d.ts +3 -0
  15. package/dist/src/cli.d.ts.map +1 -0
  16. package/dist/src/cli.js +470 -0
  17. package/dist/src/cli.js.map +1 -0
  18. package/dist/src/commands.d.ts +10 -0
  19. package/dist/src/commands.d.ts.map +1 -0
  20. package/dist/src/commands.js +208 -0
  21. package/dist/src/commands.js.map +1 -0
  22. package/dist/src/constants.d.ts +28 -0
  23. package/dist/src/constants.d.ts.map +1 -0
  24. package/dist/src/constants.js +65 -0
  25. package/dist/src/constants.js.map +1 -0
  26. package/dist/src/core/agent-manager.d.ts +34 -0
  27. package/dist/src/core/agent-manager.d.ts.map +1 -0
  28. package/dist/src/core/agent-manager.js +268 -0
  29. package/dist/src/core/agent-manager.js.map +1 -0
  30. package/dist/src/core/package-installer.d.ts +30 -0
  31. package/dist/src/core/package-installer.d.ts.map +1 -0
  32. package/dist/src/core/package-installer.js +308 -0
  33. package/dist/src/core/package-installer.js.map +1 -0
  34. package/dist/src/core/packager.d.ts +20 -0
  35. package/dist/src/core/packager.d.ts.map +1 -0
  36. package/dist/src/core/packager.js +178 -0
  37. package/dist/src/core/packager.js.map +1 -0
  38. package/dist/src/core/skill-installer.d.ts +33 -0
  39. package/dist/src/core/skill-installer.d.ts.map +1 -0
  40. package/dist/src/core/skill-installer.js +179 -0
  41. package/dist/src/core/skill-installer.js.map +1 -0
  42. package/dist/src/core/store-client.d.ts +47 -0
  43. package/dist/src/core/store-client.d.ts.map +1 -0
  44. package/dist/src/core/store-client.js +111 -0
  45. package/dist/src/core/store-client.js.map +1 -0
  46. package/dist/src/core/workspace.d.ts +29 -0
  47. package/dist/src/core/workspace.d.ts.map +1 -0
  48. package/dist/src/core/workspace.js +242 -0
  49. package/dist/src/core/workspace.js.map +1 -0
  50. package/dist/src/types.d.ts +114 -0
  51. package/dist/src/types.d.ts.map +1 -0
  52. package/dist/src/types.js +3 -0
  53. package/dist/src/types.js.map +1 -0
  54. package/dist/src/utils/checksum.d.ts +4 -0
  55. package/dist/src/utils/checksum.d.ts.map +1 -0
  56. package/dist/src/utils/checksum.js +15 -0
  57. package/dist/src/utils/checksum.js.map +1 -0
  58. package/dist/src/utils/output.d.ts +13 -0
  59. package/dist/src/utils/output.d.ts.map +1 -0
  60. package/dist/src/utils/output.js +70 -0
  61. package/dist/src/utils/output.js.map +1 -0
  62. package/dist/src/utils/zip.d.ts +13 -0
  63. package/dist/src/utils/zip.d.ts.map +1 -0
  64. package/dist/src/utils/zip.js +50 -0
  65. package/dist/src/utils/zip.js.map +1 -0
  66. package/package.json +4 -2
  67. package/src/cli.ts +29 -11
  68. package/src/commands.ts +33 -3
  69. package/src/constants.ts +1 -0
Binary file
@@ -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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,KAAK,UAAU,MAAM,CAAC,CAAS;IAC7B,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC/D,CAAC;AAED,uEAAuE;AAEvE,SAAS,YAAY;IACnB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,OAAO;QACL,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,MAAM;KACP,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,KAAK,UAAU,IAAI;IACjB,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,IAAI,CAAC,CAAC;IAE7C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,kBAAkB;IAClB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACtE,MAAM,EAAE,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACpH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC1D,MAAM,EAAE,QAAQ,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClF,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAEzE,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,oEAAoE;IACpE,oCAAoC;IACpC,oEAAoE;IACpE,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,6BAA6B,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5C,oEAAoE;IACpE,0DAA0D;IAC1D,oEAAoE;IACpE,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,gCAAgC,aAAa,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,aAAa,GAAG,YAAY,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC;QACvC,WAAW,EAAE,aAAa;QAC1B,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,aAAa,CAAC,GAAG;KACvB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,wBAAwB,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3D,IAAI,aAAa,CAAC,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,eAAe,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IAE3E,oEAAoE;IACpE,uCAAuC;IACvC,oEAAoE;IACpE,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,gCAAgC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,QAAQ,MAAM,MAAM,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oEAAoE;IACpE,yDAAyD;IACzD,oEAAoE;IACpE,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,kDAAkD,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,sBAAsB,CAAC,CAAC;IACjE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,0DAA0D;IAC1D,oEAAoE;IACpE,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,mDAAmD,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAClE,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,iBAAiB,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,aAAa,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,oEAAoE;IACpE,yDAAyD;IACzD,oEAAoE;IACpE,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,kDAAkD,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAChE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1E,CAAC;IAED,oEAAoE;IACpE,uDAAuD;IACvD,oEAAoE;IACpE,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,6BAA6B,aAAa,aAAa,QAAQ,EAAE,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC;QACjC,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,QAAQ;QACnB,GAAG,EAAE,UAAU,CAAC,GAAG;KACpB,CAAC,CAAC;IACH,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,qBAAqB,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,oEAAoE;IACpE,iDAAiD;IACjD,oEAAoE;IACpE,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,gCAAgC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEjC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC;YACnC,WAAW,EAAE,UAAU,CAAC,OAAO;YAC/B,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,IAAI,EAAG,sDAAsD;YACzE,GAAG,EAAE,SAAS,CAAC,GAAG;SACnB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,oEAAoE;IACpE,iEAAiE;IACjE,gCAAgC;IAChC,oEAAoE;IACpE,IAAI,EAAE,CAAC;IACP,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,gCAAgC,eAAe,YAAY,YAAY,EAAE,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,YAAY,CAAC;QACjB,WAAW,EAAE,eAAe;QAC5B,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,SAAS,CAAC,GAAG;KACnB,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,4BAA4B,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;IACrF,CAAC;IAED,oEAAoE;IACpE,6DAA6D;IAC7D,oEAAoE;IACpE,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,qDAAqD,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,EAAE,eAAe,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAClI,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;IAC9D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QAE7C,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,0CAA0C,UAAU,GAAG,CAAC,CAAC;QAErE,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,wCAAwC,OAAO,iBAAiB,CAAC,CAAC;QAE9E,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAEhD,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,cAAc;IACd,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,4BAA4B,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,MAAM,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,oEAAoE;IACpE,qBAAqB;IACrB,oEAAoE;IACpE,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,MAAM,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,MAAM,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,eAAe;IACf,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;AAClF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -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,3 @@
1
+ import type { OpenClawPluginApi } from "openclaw/plugin-sdk/core";
2
+ export declare function registerClawstoreCli(api: OpenClawPluginApi): void;
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -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,CA0cjE"}