clawdhub 0.0.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/browserAuth.test.js +44 -0
- package/dist/browserAuth.test.js.map +1 -1
- package/dist/cli/clawdbotConfig.d.ts +6 -0
- package/dist/cli/clawdbotConfig.js +110 -0
- package/dist/cli/clawdbotConfig.js.map +1 -0
- package/dist/cli/clawdbotConfig.test.d.ts +1 -0
- package/dist/cli/clawdbotConfig.test.js +133 -0
- package/dist/cli/clawdbotConfig.test.js.map +1 -0
- package/dist/cli/commands/auth.js +3 -3
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/delete.js +9 -7
- package/dist/cli/commands/delete.js.map +1 -1
- package/dist/cli/commands/delete.test.js +2 -2
- package/dist/cli/commands/delete.test.js.map +1 -1
- package/dist/cli/commands/publish.d.ts +1 -0
- package/dist/cli/commands/publish.js +27 -27
- package/dist/cli/commands/publish.js.map +1 -1
- package/dist/cli/commands/publish.test.js +19 -54
- package/dist/cli/commands/publish.test.js.map +1 -1
- package/dist/cli/commands/skills.js +22 -9
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/sync.js +27 -4
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/sync.test.js +47 -12
- package/dist/cli/commands/sync.test.js.map +1 -1
- package/dist/cli/commands/syncHelpers.d.ts +10 -0
- package/dist/cli/commands/syncHelpers.js +21 -7
- package/dist/cli/commands/syncHelpers.js.map +1 -1
- package/dist/cli/commands/syncHelpers.test.d.ts +1 -0
- package/dist/cli/commands/syncHelpers.test.js +22 -0
- package/dist/cli/commands/syncHelpers.test.js.map +1 -0
- package/dist/cli/commands/syncTypes.d.ts +3 -0
- package/dist/cli.js +51 -19
- package/dist/cli.js.map +1 -1
- package/dist/discovery.test.js +22 -0
- package/dist/discovery.test.js.map +1 -1
- package/dist/http.d.ts +15 -2
- package/dist/http.js +21 -0
- package/dist/http.js.map +1 -1
- package/dist/http.test.js +68 -3
- package/dist/http.test.js.map +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/routes.d.ts +9 -1
- package/dist/schema/routes.js +9 -1
- package/dist/schema/routes.js.map +1 -1
- package/dist/schema/schemas.d.ts +97 -0
- package/dist/schema/schemas.js +93 -0
- package/dist/schema/schemas.js.map +1 -1
- package/dist/schema/textFiles.test.d.ts +1 -0
- package/dist/schema/textFiles.test.js +20 -0
- package/dist/schema/textFiles.test.js.map +1 -0
- package/dist/skills.d.ts +9 -0
- package/dist/skills.js +28 -0
- package/dist/skills.js.map +1 -1
- package/dist/skills.test.js +62 -1
- package/dist/skills.test.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -53,5 +53,5 @@ clawdhub sync --root ../clawdis/skills --all --dry-run
|
|
|
53
53
|
|
|
54
54
|
- Site: `https://clawdhub.com` (override via `--site` or `CLAWDHUB_SITE`)
|
|
55
55
|
- Registry: discovered from `/.well-known/clawdhub.json` on the site (override via `--registry` or `CLAWDHUB_REGISTRY`)
|
|
56
|
-
- Workdir: current directory (override via `--workdir`)
|
|
56
|
+
- Workdir: current directory (falls back to Clawdbot workspace if configured; override via `--workdir` or `CLAWDHUB_WORKDIR`)
|
|
57
57
|
- Install dir: `./skills` under workdir (override via `--dir`)
|
package/dist/browserAuth.test.js
CHANGED
|
@@ -14,12 +14,22 @@ describe('browserAuth', () => {
|
|
|
14
14
|
expect(url).toContain('label_b64=');
|
|
15
15
|
expect(url).toContain('state=');
|
|
16
16
|
});
|
|
17
|
+
it('builds auth url without label', () => {
|
|
18
|
+
const url = buildCliAuthUrl({
|
|
19
|
+
siteUrl: 'https://example.com',
|
|
20
|
+
redirectUri: 'http://127.0.0.1:1234/callback',
|
|
21
|
+
state: 'state123',
|
|
22
|
+
});
|
|
23
|
+
expect(url).toContain('https://example.com/cli/auth?');
|
|
24
|
+
expect(url).not.toContain('label_b64=');
|
|
25
|
+
});
|
|
17
26
|
it('accepts only loopback http redirect uris', () => {
|
|
18
27
|
expect(isAllowedLoopbackRedirectUri('http://127.0.0.1:1234/callback')).toBe(true);
|
|
19
28
|
expect(isAllowedLoopbackRedirectUri('http://localhost:1234/callback')).toBe(true);
|
|
20
29
|
expect(isAllowedLoopbackRedirectUri('http://[::1]:1234/callback')).toBe(true);
|
|
21
30
|
expect(isAllowedLoopbackRedirectUri('https://127.0.0.1:1234/callback')).toBe(false);
|
|
22
31
|
expect(isAllowedLoopbackRedirectUri('http://evil.com/callback')).toBe(false);
|
|
32
|
+
expect(isAllowedLoopbackRedirectUri('not a url')).toBe(false);
|
|
23
33
|
});
|
|
24
34
|
it('receives token via loopback server', async () => {
|
|
25
35
|
const server = await startLoopbackAuthServer({ timeoutMs: 2000 });
|
|
@@ -35,5 +45,39 @@ describe('browserAuth', () => {
|
|
|
35
45
|
});
|
|
36
46
|
await expect(server.waitForResult()).resolves.toEqual(payload);
|
|
37
47
|
});
|
|
48
|
+
it('serves callback html', async () => {
|
|
49
|
+
const server = await startLoopbackAuthServer({ timeoutMs: 2000 });
|
|
50
|
+
const response = await fetch(server.redirectUri);
|
|
51
|
+
expect(response.status).toBe(200);
|
|
52
|
+
const text = await response.text();
|
|
53
|
+
expect(text).toContain('ClawdHub CLI Login');
|
|
54
|
+
server.close();
|
|
55
|
+
});
|
|
56
|
+
it('returns 404 for unknown routes', async () => {
|
|
57
|
+
const server = await startLoopbackAuthServer({ timeoutMs: 2000 });
|
|
58
|
+
const response = await fetch(server.redirectUri.replace('/callback', '/nope'));
|
|
59
|
+
expect(response.status).toBe(404);
|
|
60
|
+
server.close();
|
|
61
|
+
});
|
|
62
|
+
it('rejects invalid json payloads', async () => {
|
|
63
|
+
const server = await startLoopbackAuthServer({ timeoutMs: 2000 });
|
|
64
|
+
const tokenUrl = server.redirectUri.replace('/callback', '/token');
|
|
65
|
+
const response = await fetch(tokenUrl, { method: 'POST', body: '{' });
|
|
66
|
+
expect(response.status).toBe(400);
|
|
67
|
+
await expect(server.waitForResult()).rejects.toThrow();
|
|
68
|
+
});
|
|
69
|
+
it('rejects state mismatches', async () => {
|
|
70
|
+
const server = await startLoopbackAuthServer({ timeoutMs: 2000 });
|
|
71
|
+
await fetch(server.redirectUri.replace('/callback', '/token'), {
|
|
72
|
+
method: 'POST',
|
|
73
|
+
headers: { 'Content-Type': 'application/json' },
|
|
74
|
+
body: JSON.stringify({ token: 'clh_test', registry: 'https://example.com', state: 'nope' }),
|
|
75
|
+
});
|
|
76
|
+
await expect(server.waitForResult()).rejects.toThrow(/state mismatch/i);
|
|
77
|
+
});
|
|
78
|
+
it('times out waiting for login', async () => {
|
|
79
|
+
const server = await startLoopbackAuthServer({ timeoutMs: 25 });
|
|
80
|
+
await expect(server.waitForResult()).rejects.toThrow(/timed out waiting for browser login/i);
|
|
81
|
+
});
|
|
38
82
|
});
|
|
39
83
|
//# sourceMappingURL=browserAuth.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserAuth.test.js","sourceRoot":"","sources":["../src/browserAuth.test.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,eAAe,CAAA;AAEtB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,GAAG,GAAG,eAAe,CAAC;YAC1B,OAAO,EAAE,qBAAqB;YAC9B,WAAW,EAAE,gCAAgC;YAC7C,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,UAAU;SAClB,CAAC,CAAA;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAA;QACtD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACnC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,4BAA4B,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjF,MAAM,CAAC,4BAA4B,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjF,MAAM,CAAC,4BAA4B,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7E,MAAM,CAAC,4BAA4B,CAAC,iCAAiC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnF,MAAM,CAAC,4BAA4B,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"browserAuth.test.js","sourceRoot":"","sources":["../src/browserAuth.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { basename, join, resolve } from 'node:path';
|
|
4
|
+
import JSON5 from 'json5';
|
|
5
|
+
export async function resolveClawdbotSkillRoots() {
|
|
6
|
+
const roots = [];
|
|
7
|
+
const labels = {};
|
|
8
|
+
const stateDir = resolveClawdbotStateDir();
|
|
9
|
+
const sharedSkills = resolveUserPath(join(stateDir, 'skills'));
|
|
10
|
+
pushRoot(roots, labels, sharedSkills, 'Shared skills');
|
|
11
|
+
const config = await readClawdbotConfig();
|
|
12
|
+
if (!config)
|
|
13
|
+
return { roots, labels };
|
|
14
|
+
const mainWorkspace = resolveUserPath(config.agents?.defaults?.workspace ?? config.agent?.workspace ?? '');
|
|
15
|
+
if (mainWorkspace) {
|
|
16
|
+
pushRoot(roots, labels, join(mainWorkspace, 'skills'), 'Agent: main');
|
|
17
|
+
}
|
|
18
|
+
const listedAgents = config.agents?.list ?? [];
|
|
19
|
+
for (const entry of listedAgents) {
|
|
20
|
+
const workspace = resolveUserPath(entry?.workspace ?? '');
|
|
21
|
+
if (!workspace)
|
|
22
|
+
continue;
|
|
23
|
+
const name = entry?.name?.trim() || entry?.id?.trim() || 'agent';
|
|
24
|
+
pushRoot(roots, labels, join(workspace, 'skills'), `Agent: ${name}`);
|
|
25
|
+
}
|
|
26
|
+
const agents = config.routing?.agents ?? {};
|
|
27
|
+
for (const [agentId, entry] of Object.entries(agents)) {
|
|
28
|
+
const workspace = resolveUserPath(entry?.workspace ?? '');
|
|
29
|
+
if (!workspace)
|
|
30
|
+
continue;
|
|
31
|
+
const name = entry?.name?.trim() || agentId;
|
|
32
|
+
pushRoot(roots, labels, join(workspace, 'skills'), `Agent: ${name}`);
|
|
33
|
+
}
|
|
34
|
+
const extraDirs = config.skills?.load?.extraDirs ?? [];
|
|
35
|
+
for (const dir of extraDirs) {
|
|
36
|
+
const resolved = resolveUserPath(String(dir));
|
|
37
|
+
if (!resolved)
|
|
38
|
+
continue;
|
|
39
|
+
const label = `Extra: ${basename(resolved) || resolved}`;
|
|
40
|
+
pushRoot(roots, labels, resolved, label);
|
|
41
|
+
}
|
|
42
|
+
return { roots, labels };
|
|
43
|
+
}
|
|
44
|
+
export async function resolveClawdbotDefaultWorkspace() {
|
|
45
|
+
const config = await readClawdbotConfig();
|
|
46
|
+
if (!config)
|
|
47
|
+
return null;
|
|
48
|
+
const defaultsWorkspace = resolveUserPath(config.agents?.defaults?.workspace ?? config.agent?.workspace ?? '');
|
|
49
|
+
if (defaultsWorkspace)
|
|
50
|
+
return defaultsWorkspace;
|
|
51
|
+
const listedAgents = config.agents?.list ?? [];
|
|
52
|
+
const defaultAgent = listedAgents.find((entry) => entry.default) ?? listedAgents.find((entry) => entry.id === 'main');
|
|
53
|
+
const listWorkspace = resolveUserPath(defaultAgent?.workspace ?? '');
|
|
54
|
+
return listWorkspace || null;
|
|
55
|
+
}
|
|
56
|
+
function resolveClawdbotStateDir() {
|
|
57
|
+
const override = process.env.CLAWDBOT_STATE_DIR?.trim();
|
|
58
|
+
if (override)
|
|
59
|
+
return resolveUserPath(override);
|
|
60
|
+
return join(homedir(), '.clawdbot');
|
|
61
|
+
}
|
|
62
|
+
function resolveClawdbotConfigPath() {
|
|
63
|
+
const override = process.env.CLAWDBOT_CONFIG_PATH?.trim();
|
|
64
|
+
if (override)
|
|
65
|
+
return resolveUserPath(override);
|
|
66
|
+
return join(resolveClawdbotStateDir(), 'clawdbot.json');
|
|
67
|
+
}
|
|
68
|
+
function resolveUserPath(input) {
|
|
69
|
+
const trimmed = input.trim();
|
|
70
|
+
if (!trimmed)
|
|
71
|
+
return '';
|
|
72
|
+
if (trimmed.startsWith('~')) {
|
|
73
|
+
return resolve(trimmed.replace(/^~(?=$|[\\/])/, homedir()));
|
|
74
|
+
}
|
|
75
|
+
return resolve(trimmed);
|
|
76
|
+
}
|
|
77
|
+
async function readClawdbotConfig() {
|
|
78
|
+
try {
|
|
79
|
+
const raw = await readFile(resolveClawdbotConfigPath(), 'utf8');
|
|
80
|
+
const parsed = JSON5.parse(raw);
|
|
81
|
+
if (!parsed || typeof parsed !== 'object')
|
|
82
|
+
return null;
|
|
83
|
+
return parsed;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function pushRoot(roots, labels, root, label) {
|
|
90
|
+
const resolved = resolveUserPath(root);
|
|
91
|
+
if (!resolved)
|
|
92
|
+
return;
|
|
93
|
+
if (!roots.includes(resolved))
|
|
94
|
+
roots.push(resolved);
|
|
95
|
+
if (!label)
|
|
96
|
+
return;
|
|
97
|
+
const existing = labels[resolved];
|
|
98
|
+
if (!existing) {
|
|
99
|
+
labels[resolved] = label;
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const parts = existing
|
|
103
|
+
.split(', ')
|
|
104
|
+
.map((part) => part.trim())
|
|
105
|
+
.filter(Boolean);
|
|
106
|
+
if (parts.includes(label))
|
|
107
|
+
return;
|
|
108
|
+
labels[resolved] = `${existing}, ${label}`;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=clawdbotConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clawdbotConfig.js","sourceRoot":"","sources":["../../src/cli/clawdbotConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,KAAK,MAAM,OAAO,CAAA;AAkCzB,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,MAAM,GAA2B,EAAE,CAAA;IAEzC,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAA;IAC1C,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC,CAAA;IAEtD,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAA;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IAErC,MAAM,aAAa,GAAG,eAAe,CACnC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,IAAI,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CACpE,CAAA;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAA;IACvE,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAA;IAC9C,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC,SAAS;YAAE,SAAQ;QACxB,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,OAAO,CAAA;QAChE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA;IAC3C,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC,SAAS;YAAE,SAAQ;QACxB,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,OAAO,CAAA;QAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE,CAAA;IACtD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ;YAAE,SAAQ;QACvB,MAAM,KAAK,GAAG,UAAU,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAA;QACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B;IACnD,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAA;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAExB,MAAM,iBAAiB,GAAG,eAAe,CACvC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,IAAI,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CACpE,CAAA;IACD,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAA;IAE/C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAA;IAC9C,MAAM,YAAY,GAChB,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAA;IAClG,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;IACpE,OAAO,aAAa,IAAI,IAAI,CAAA;AAC9B,CAAC;AAED,SAAS,uBAAuB;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAA;IACvD,IAAI,QAAQ;QAAE,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC9C,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAA;IACzD,IAAI,QAAQ;QAAE,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC9C,OAAO,IAAI,CAAC,uBAAuB,EAAE,EAAE,eAAe,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IACvB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;AACzB,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,yBAAyB,EAAE,EAAE,MAAM,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAA;QACtD,OAAO,MAAwB,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAe,EAAE,MAA8B,EAAE,IAAY,EAAE,KAAc;IAC7F,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAM;IACrB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnD,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAA;QACxB,OAAM;IACR,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ;SACnB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAA;IAClB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAM;IACjC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ,KAAK,KAAK,EAAE,CAAA;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/* @vitest-environment node */
|
|
2
|
+
import { mkdir, mkdtemp, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join, resolve } from 'node:path';
|
|
5
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
6
|
+
import { resolveClawdbotDefaultWorkspace, resolveClawdbotSkillRoots } from './clawdbotConfig.js';
|
|
7
|
+
const originalEnv = { ...process.env };
|
|
8
|
+
afterEach(() => {
|
|
9
|
+
process.env = { ...originalEnv };
|
|
10
|
+
});
|
|
11
|
+
describe('resolveClawdbotSkillRoots', () => {
|
|
12
|
+
it('reads JSON5 config and resolves per-agent + shared skill roots', async () => {
|
|
13
|
+
const base = await mkdtemp(join(tmpdir(), 'clawdhub-clawdbot-'));
|
|
14
|
+
const home = join(base, 'home');
|
|
15
|
+
const stateDir = join(base, 'state');
|
|
16
|
+
const configPath = join(base, 'clawdbot.json');
|
|
17
|
+
process.env.HOME = home;
|
|
18
|
+
process.env.CLAWDBOT_STATE_DIR = stateDir;
|
|
19
|
+
process.env.CLAWDBOT_CONFIG_PATH = configPath;
|
|
20
|
+
const config = `{
|
|
21
|
+
// JSON5 comments + trailing commas supported
|
|
22
|
+
agents: {
|
|
23
|
+
defaults: { workspace: '~/clawd-main', },
|
|
24
|
+
list: [
|
|
25
|
+
{ id: 'work', name: 'Work Bot', workspace: '~/clawd-work', },
|
|
26
|
+
{ id: 'family', workspace: '~/clawd-family', },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
// legacy entries still supported
|
|
30
|
+
agent: { workspace: '~/clawd-legacy', },
|
|
31
|
+
routing: {
|
|
32
|
+
agents: {
|
|
33
|
+
work: { name: 'Work Bot', workspace: '~/clawd-work', },
|
|
34
|
+
family: { workspace: '~/clawd-family' },
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
skills: {
|
|
38
|
+
load: { extraDirs: ['~/shared/skills', '/opt/skills',], },
|
|
39
|
+
},
|
|
40
|
+
}`;
|
|
41
|
+
await writeFile(configPath, config, 'utf8');
|
|
42
|
+
const { roots, labels } = await resolveClawdbotSkillRoots();
|
|
43
|
+
const expectedRoots = [
|
|
44
|
+
resolve(stateDir, 'skills'),
|
|
45
|
+
resolve(home, 'clawd-main', 'skills'),
|
|
46
|
+
resolve(home, 'clawd-work', 'skills'),
|
|
47
|
+
resolve(home, 'clawd-family', 'skills'),
|
|
48
|
+
resolve(home, 'shared', 'skills'),
|
|
49
|
+
resolve('/opt/skills'),
|
|
50
|
+
];
|
|
51
|
+
expect(roots).toEqual(expect.arrayContaining(expectedRoots));
|
|
52
|
+
expect(labels[resolve(stateDir, 'skills')]).toBe('Shared skills');
|
|
53
|
+
expect(labels[resolve(home, 'clawd-main', 'skills')]).toBe('Agent: main');
|
|
54
|
+
expect(labels[resolve(home, 'clawd-work', 'skills')]).toBe('Agent: Work Bot');
|
|
55
|
+
expect(labels[resolve(home, 'clawd-family', 'skills')]).toBe('Agent: family');
|
|
56
|
+
expect(labels[resolve(home, 'shared', 'skills')]).toBe('Extra: skills');
|
|
57
|
+
expect(labels[resolve('/opt/skills')]).toBe('Extra: skills');
|
|
58
|
+
});
|
|
59
|
+
it('resolves default workspace from agents.defaults and agents.list', async () => {
|
|
60
|
+
const base = await mkdtemp(join(tmpdir(), 'clawdhub-clawdbot-default-'));
|
|
61
|
+
const home = join(base, 'home');
|
|
62
|
+
const stateDir = join(base, 'state');
|
|
63
|
+
const configPath = join(base, 'clawdbot.json');
|
|
64
|
+
const workspaceMain = join(base, 'workspace-main');
|
|
65
|
+
const workspaceList = join(base, 'workspace-list');
|
|
66
|
+
process.env.HOME = home;
|
|
67
|
+
process.env.CLAWDBOT_STATE_DIR = stateDir;
|
|
68
|
+
process.env.CLAWDBOT_CONFIG_PATH = configPath;
|
|
69
|
+
const config = `{
|
|
70
|
+
agents: {
|
|
71
|
+
defaults: { workspace: "${workspaceMain}", },
|
|
72
|
+
list: [
|
|
73
|
+
{ id: 'main', workspace: "${workspaceList}", default: true },
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
}`;
|
|
77
|
+
await writeFile(configPath, config, 'utf8');
|
|
78
|
+
const workspace = await resolveClawdbotDefaultWorkspace();
|
|
79
|
+
expect(workspace).toBe(resolve(workspaceMain));
|
|
80
|
+
});
|
|
81
|
+
it('falls back to default agent in agents.list when defaults missing', async () => {
|
|
82
|
+
const base = await mkdtemp(join(tmpdir(), 'clawdhub-clawdbot-list-'));
|
|
83
|
+
const home = join(base, 'home');
|
|
84
|
+
const configPath = join(base, 'clawdbot.json');
|
|
85
|
+
const workspaceMain = join(base, 'workspace-main');
|
|
86
|
+
const workspaceWork = join(base, 'workspace-work');
|
|
87
|
+
process.env.HOME = home;
|
|
88
|
+
process.env.CLAWDBOT_CONFIG_PATH = configPath;
|
|
89
|
+
const config = `{
|
|
90
|
+
agents: {
|
|
91
|
+
list: [
|
|
92
|
+
{ id: 'main', workspace: "${workspaceMain}", default: true },
|
|
93
|
+
{ id: 'work', workspace: "${workspaceWork}" },
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
}`;
|
|
97
|
+
await writeFile(configPath, config, 'utf8');
|
|
98
|
+
const workspace = await resolveClawdbotDefaultWorkspace();
|
|
99
|
+
expect(workspace).toBe(resolve(workspaceMain));
|
|
100
|
+
});
|
|
101
|
+
it('respects CLAWDBOT_STATE_DIR and CLAWDBOT_CONFIG_PATH overrides', async () => {
|
|
102
|
+
const base = await mkdtemp(join(tmpdir(), 'clawdhub-clawdbot-override-'));
|
|
103
|
+
const home = join(base, 'home');
|
|
104
|
+
const stateDir = join(base, 'custom-state');
|
|
105
|
+
const configPath = join(base, 'config', 'clawdbot.json');
|
|
106
|
+
process.env.HOME = home;
|
|
107
|
+
process.env.CLAWDBOT_STATE_DIR = stateDir;
|
|
108
|
+
process.env.CLAWDBOT_CONFIG_PATH = configPath;
|
|
109
|
+
const config = `{
|
|
110
|
+
agent: { workspace: "${join(base, 'workspace-main')}" },
|
|
111
|
+
}`;
|
|
112
|
+
await mkdir(join(base, 'config'), { recursive: true });
|
|
113
|
+
await writeFile(configPath, config, 'utf8');
|
|
114
|
+
const { roots, labels } = await resolveClawdbotSkillRoots();
|
|
115
|
+
expect(roots).toEqual(expect.arrayContaining([
|
|
116
|
+
resolve(stateDir, 'skills'),
|
|
117
|
+
resolve(join(base, 'workspace-main'), 'skills'),
|
|
118
|
+
]));
|
|
119
|
+
expect(labels[resolve(stateDir, 'skills')]).toBe('Shared skills');
|
|
120
|
+
expect(labels[resolve(join(base, 'workspace-main'), 'skills')]).toBe('Agent: main');
|
|
121
|
+
});
|
|
122
|
+
it('returns shared skills root when config is missing', async () => {
|
|
123
|
+
const base = await mkdtemp(join(tmpdir(), 'clawdhub-clawdbot-missing-'));
|
|
124
|
+
const stateDir = join(base, 'state');
|
|
125
|
+
const configPath = join(base, 'missing', 'clawdbot.json');
|
|
126
|
+
process.env.CLAWDBOT_STATE_DIR = stateDir;
|
|
127
|
+
process.env.CLAWDBOT_CONFIG_PATH = configPath;
|
|
128
|
+
const { roots, labels } = await resolveClawdbotSkillRoots();
|
|
129
|
+
expect(roots).toEqual([resolve(stateDir, 'skills')]);
|
|
130
|
+
expect(labels[resolve(stateDir, 'skills')]).toBe('Shared skills');
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=clawdbotConfig.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clawdbotConfig.test.js","sourceRoot":"","sources":["../../src/cli/clawdbotConfig.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { buildCliAuthUrl, startLoopbackAuthServer } from '../../browserAuth.js';
|
|
|
2
2
|
import { readGlobalConfig, writeGlobalConfig } from '../../config.js';
|
|
3
3
|
import { discoverRegistryFromSite } from '../../discovery.js';
|
|
4
4
|
import { apiRequest } from '../../http.js';
|
|
5
|
-
import {
|
|
5
|
+
import { ApiRoutes, ApiV1WhoamiResponseSchema } from '../../schema/index.js';
|
|
6
6
|
import { getRegistry } from '../registry.js';
|
|
7
7
|
import { createSpinner, fail, formatError, openInBrowser, promptHidden } from '../ui.js';
|
|
8
8
|
export async function cmdLoginFlow(opts, options, inputAllowed) {
|
|
@@ -38,7 +38,7 @@ export async function cmdLogin(opts, tokenFlag, inputAllowed) {
|
|
|
38
38
|
const registry = await getRegistry(opts, { cache: true });
|
|
39
39
|
const spinner = createSpinner('Verifying token');
|
|
40
40
|
try {
|
|
41
|
-
const whoami = await apiRequest(registry, { method: 'GET', path: ApiRoutes.
|
|
41
|
+
const whoami = await apiRequest(registry, { method: 'GET', path: ApiRoutes.whoami, token }, ApiV1WhoamiResponseSchema);
|
|
42
42
|
if (!whoami.user)
|
|
43
43
|
fail('Login failed');
|
|
44
44
|
await writeGlobalConfig({ registry, token });
|
|
@@ -64,7 +64,7 @@ export async function cmdWhoami(opts) {
|
|
|
64
64
|
const registry = await getRegistry(opts, { cache: true });
|
|
65
65
|
const spinner = createSpinner('Checking token');
|
|
66
66
|
try {
|
|
67
|
-
const whoami = await apiRequest(registry, { method: 'GET', path: ApiRoutes.
|
|
67
|
+
const whoami = await apiRequest(registry, { method: 'GET', path: ApiRoutes.whoami, token }, ApiV1WhoamiResponseSchema);
|
|
68
68
|
spinner.succeed(whoami.user.handle ?? 'unknown');
|
|
69
69
|
}
|
|
70
70
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC/E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readGlobalConfig } from '../../config.js';
|
|
2
2
|
import { apiRequest } from '../../http.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ApiRoutes, ApiV1DeleteResponseSchema, parseArk } from '../../schema/index.js';
|
|
4
4
|
import { getRegistry } from '../registry.js';
|
|
5
5
|
import { createSpinner, fail, formatError, isInteractive, promptConfirm } from '../ui.js';
|
|
6
6
|
async function requireToken() {
|
|
@@ -26,10 +26,9 @@ export async function cmdDeleteSkill(opts, slugArg, options, inputAllowed) {
|
|
|
26
26
|
const registry = await getRegistry(opts, { cache: true });
|
|
27
27
|
const spinner = createSpinner(`Deleting ${slug}`);
|
|
28
28
|
try {
|
|
29
|
-
const
|
|
30
|
-
const result = await apiRequest(registry, { method: 'POST', path: ApiRoutes.cliSkillDelete, token, body }, ApiCliSkillDeleteResponseSchema);
|
|
29
|
+
const result = await apiRequest(registry, { method: 'DELETE', path: `${ApiRoutes.skills}/${encodeURIComponent(slug)}`, token }, ApiV1DeleteResponseSchema);
|
|
31
30
|
spinner.succeed(`OK. Deleted ${slug}`);
|
|
32
|
-
return parseArk(
|
|
31
|
+
return parseArk(ApiV1DeleteResponseSchema, result, 'Delete response');
|
|
33
32
|
}
|
|
34
33
|
catch (error) {
|
|
35
34
|
spinner.fail(formatError(error));
|
|
@@ -52,10 +51,13 @@ export async function cmdUndeleteSkill(opts, slugArg, options, inputAllowed) {
|
|
|
52
51
|
const registry = await getRegistry(opts, { cache: true });
|
|
53
52
|
const spinner = createSpinner(`Undeleting ${slug}`);
|
|
54
53
|
try {
|
|
55
|
-
const
|
|
56
|
-
|
|
54
|
+
const result = await apiRequest(registry, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
path: `${ApiRoutes.skills}/${encodeURIComponent(slug)}/undelete`,
|
|
57
|
+
token,
|
|
58
|
+
}, ApiV1DeleteResponseSchema);
|
|
57
59
|
spinner.succeed(`OK. Undeleted ${slug}`);
|
|
58
|
-
return parseArk(
|
|
60
|
+
return parseArk(ApiV1DeleteResponseSchema, result, 'Undelete response');
|
|
59
61
|
}
|
|
60
62
|
catch (error) {
|
|
61
63
|
spinner.fail(formatError(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,12 +41,12 @@ describe('delete/undelete', () => {
|
|
|
41
41
|
it('calls delete endpoint with --yes', async () => {
|
|
42
42
|
mockApiRequest.mockResolvedValueOnce({ ok: true });
|
|
43
43
|
await cmdDeleteSkill(makeOpts(), 'demo', { yes: true }, false);
|
|
44
|
-
expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({ method: '
|
|
44
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({ method: 'DELETE', path: '/api/v1/skills/demo' }), expect.anything());
|
|
45
45
|
});
|
|
46
46
|
it('calls undelete endpoint with --yes', async () => {
|
|
47
47
|
mockApiRequest.mockResolvedValueOnce({ ok: true });
|
|
48
48
|
await cmdUndeleteSkill(makeOpts(), 'demo', { yes: true }, false);
|
|
49
|
-
expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({ method: 'POST', path: '/api/
|
|
49
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({ method: 'POST', path: '/api/v1/skills/demo/undelete' }), expect.anything());
|
|
50
50
|
});
|
|
51
51
|
});
|
|
52
52
|
//# sourceMappingURL=delete.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.test.js","sourceRoot":"","sources":["../../../src/cli/commands/delete.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"delete.test.js","sourceRoot":"","sources":["../../../src/cli/commands/delete.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@ import { stat } from 'node:fs/promises';
|
|
|
2
2
|
import { basename, resolve } from 'node:path';
|
|
3
3
|
import semver from 'semver';
|
|
4
4
|
import { readGlobalConfig } from '../../config.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { listTextFiles
|
|
5
|
+
import { apiRequestForm } from '../../http.js';
|
|
6
|
+
import { ApiRoutes, ApiV1PublishResponseSchema } from '../../schema/index.js';
|
|
7
|
+
import { listTextFiles } from '../../skills.js';
|
|
8
8
|
import { getRegistry } from '../registry.js';
|
|
9
9
|
import { sanitizeSlug, titleCase } from '../slug.js';
|
|
10
10
|
import { createSpinner, fail, formatError } from '../ui.js';
|
|
@@ -29,6 +29,8 @@ export async function cmdPublish(opts, folderArg, options) {
|
|
|
29
29
|
.split(',')
|
|
30
30
|
.map((tag) => tag.trim())
|
|
31
31
|
.filter(Boolean);
|
|
32
|
+
const forkOfRaw = options.forkOf?.trim();
|
|
33
|
+
const forkOf = forkOfRaw ? parseForkOf(forkOfRaw) : undefined;
|
|
32
34
|
if (!slug)
|
|
33
35
|
fail('--slug required');
|
|
34
36
|
if (!displayName)
|
|
@@ -46,25 +48,24 @@ export async function cmdPublish(opts, folderArg, options) {
|
|
|
46
48
|
})) {
|
|
47
49
|
fail('SKILL.md required');
|
|
48
50
|
}
|
|
49
|
-
const
|
|
51
|
+
const form = new FormData();
|
|
52
|
+
form.set('payload', JSON.stringify({
|
|
53
|
+
slug,
|
|
54
|
+
displayName,
|
|
55
|
+
version,
|
|
56
|
+
changelog,
|
|
57
|
+
tags,
|
|
58
|
+
...(forkOf ? { forkOf } : {}),
|
|
59
|
+
}));
|
|
50
60
|
let index = 0;
|
|
51
61
|
for (const file of filesOnDisk) {
|
|
52
62
|
index += 1;
|
|
53
63
|
spinner.text = `Uploading ${file.relPath} (${index}/${filesOnDisk.length})`;
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
const sha256 = sha256Hex(file.bytes);
|
|
57
|
-
uploaded.push({
|
|
58
|
-
path: file.relPath,
|
|
59
|
-
size: file.bytes.byteLength,
|
|
60
|
-
storageId,
|
|
61
|
-
sha256,
|
|
62
|
-
contentType: file.contentType ?? undefined,
|
|
63
|
-
});
|
|
64
|
+
const blob = new Blob([Buffer.from(file.bytes)], { type: file.contentType ?? 'text/plain' });
|
|
65
|
+
form.append('files', blob, file.relPath);
|
|
64
66
|
}
|
|
65
67
|
spinner.text = `Publishing ${slug}@${version}`;
|
|
66
|
-
const
|
|
67
|
-
const result = await apiRequest(registry, { method: 'POST', path: ApiRoutes.cliPublish, token, body }, ApiCliPublishResponseSchema);
|
|
68
|
+
const result = await apiRequestForm(registry, { method: 'POST', path: ApiRoutes.skills, token, form }, ApiV1PublishResponseSchema);
|
|
68
69
|
spinner.succeed(`OK. Published ${slug}@${version} (${result.versionId})`);
|
|
69
70
|
}
|
|
70
71
|
catch (error) {
|
|
@@ -72,16 +73,15 @@ export async function cmdPublish(opts, folderArg, options) {
|
|
|
72
73
|
throw error;
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return payload.storageId;
|
|
76
|
+
function parseForkOf(value) {
|
|
77
|
+
const trimmed = value.trim();
|
|
78
|
+
const [slugRaw, versionRaw] = trimmed.split('@');
|
|
79
|
+
const slug = (slugRaw ?? '').trim().toLowerCase();
|
|
80
|
+
if (!slug)
|
|
81
|
+
fail('--fork-of must be <slug> or <slug@version>');
|
|
82
|
+
const version = (versionRaw ?? '').trim();
|
|
83
|
+
if (version && !semver.valid(version))
|
|
84
|
+
fail('--fork-of version must be valid semver');
|
|
85
|
+
return { slug, version: version || undefined };
|
|
86
86
|
}
|
|
87
87
|
//# sourceMappingURL=publish.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/cli/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/cli/commands/publish.ts"],"names":[],"mappings":"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"}
|