amulets-cli 0.1.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 +61 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +46 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +78 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +19 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/pull.d.ts +3 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +92 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/push.d.ts +3 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +179 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +21 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/versions.d.ts +3 -0
- package/dist/commands/versions.d.ts.map +1 -0
- package/dist/commands/versions.js +61 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +29 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +65 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +68 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/auth.d.ts +15 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +69 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +89 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/update-check.d.ts +5 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +74 -0
- package/dist/lib/update-check.js.map +1 -0
- package/package.json +37 -0
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Amulets
|
|
2
|
+
|
|
3
|
+
Your private AI skills library — push, version, and sync prompts, skills, and rules across every project.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
# Push a skill from anywhere
|
|
7
|
+
amulets push AGENTS.md -n agents
|
|
8
|
+
|
|
9
|
+
# Pull it into any project
|
|
10
|
+
amulets pull agents
|
|
11
|
+
|
|
12
|
+
# Pin to a specific version
|
|
13
|
+
amulets pull agents -v 1.2.0
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Everything stays private. Only you can access your assets.
|
|
17
|
+
|
|
18
|
+
## Install
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -g amulets-cli
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## CLI
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
amulets login # GitHub OAuth via browser
|
|
28
|
+
amulets push <file-or-folder> # push a file or skill/bundle folder
|
|
29
|
+
amulets pull <name> # pull by name (or owner/name)
|
|
30
|
+
amulets list # list your assets
|
|
31
|
+
amulets versions <name> # list versions of an asset
|
|
32
|
+
amulets whoami # show current user
|
|
33
|
+
amulets logout # remove stored credentials
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Push options
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
-n, --name <name> Asset name (prompted if omitted)
|
|
40
|
+
-v, --version <ver> Semver version [default: 1.0.0]
|
|
41
|
+
-m, --message <msg> Version message
|
|
42
|
+
-t, --tags <tags> Comma-separated tags
|
|
43
|
+
-d, --description <desc> Short description
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Pull options
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
-o, --output <path> Output file or directory
|
|
50
|
+
-v, --version <ver> Version to pull [default: latest]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Asset formats
|
|
54
|
+
|
|
55
|
+
Amulet handles three formats, auto-detected on push:
|
|
56
|
+
|
|
57
|
+
| Format | Detection |
|
|
58
|
+
| ---------- | ------------------------- |
|
|
59
|
+
| **file** | Single file |
|
|
60
|
+
| **skill** | Directory with `SKILL.md` |
|
|
61
|
+
| **bundle** | Any other directory |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0CnD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerList = registerList;
|
|
7
|
+
const ora_1 = __importDefault(require("ora"));
|
|
8
|
+
const api_js_1 = require("../lib/api.js");
|
|
9
|
+
const config_js_1 = require("../lib/config.js");
|
|
10
|
+
function registerList(program) {
|
|
11
|
+
program
|
|
12
|
+
.command('list')
|
|
13
|
+
.description('List your assets')
|
|
14
|
+
.action(async () => {
|
|
15
|
+
const token = await (0, config_js_1.requireToken)();
|
|
16
|
+
const spinner = (0, ora_1.default)('Fetching your assets...').start();
|
|
17
|
+
try {
|
|
18
|
+
const { assets } = await (0, api_js_1.listMyAssets)(token);
|
|
19
|
+
spinner.stop();
|
|
20
|
+
if (assets.length === 0) {
|
|
21
|
+
console.log('No assets found. Use `amulets push` to add one.');
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const rows = assets.map((a) => {
|
|
25
|
+
const versions = a.asset_versions ?? [];
|
|
26
|
+
const latest = versions[0]?.version ?? '—';
|
|
27
|
+
const count = versions.length;
|
|
28
|
+
return { name: a.slug, format: a.asset_format, latest, versions: count };
|
|
29
|
+
});
|
|
30
|
+
const nameWidth = Math.max(4, ...rows.map((r) => r.name.length));
|
|
31
|
+
const formatWidth = Math.max(6, ...rows.map((r) => r.format.length));
|
|
32
|
+
const header = `${'NAME'.padEnd(nameWidth)} ${'FORMAT'.padEnd(formatWidth)} ${'LATEST'.padEnd(8)} VERSIONS`;
|
|
33
|
+
console.log(header);
|
|
34
|
+
console.log('─'.repeat(header.length));
|
|
35
|
+
for (const r of rows) {
|
|
36
|
+
console.log(`${r.name.padEnd(nameWidth)} ${r.format.padEnd(formatWidth)} ${r.latest.padEnd(8)} ${r.versions}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const message = err instanceof api_js_1.ApiError ? err.message : String(err);
|
|
41
|
+
spinner.fail(`Failed to list assets: ${message}`);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;;AAKA,oCA0CC;AA9CD,8CAAqB;AACrB,0CAAsD;AACtD,gDAA+C;AAE/C,SAAgB,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAY,GAAE,CAAA;QAClC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAA;QAEtD,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,qBAAY,EAAC,KAAK,CAAC,CAAA;YAC5C,OAAO,CAAC,IAAI,EAAE,CAAA;YAEd,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;gBAC9D,OAAM;YACR,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC5B,MAAM,QAAQ,GAAG,CAAC,CAAC,cAAc,IAAI,EAAE,CAAA;gBACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,GAAG,CAAA;gBAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAA;gBAC7B,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;YAC1E,CAAC,CAAC,CAAA;YAEF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YAEpE,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAA;YAC9G,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACnB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;YAEtC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CACrG,CAAA;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,iBAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACnE,OAAO,CAAC,IAAI,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAA;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA0BxC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoDpD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerLogin = registerLogin;
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const ora_1 = __importDefault(require("ora"));
|
|
9
|
+
const auth_js_1 = require("../lib/auth.js");
|
|
10
|
+
const config_js_1 = require("../lib/config.js");
|
|
11
|
+
function isWSL() {
|
|
12
|
+
return !!process.env.WSL_DISTRO_NAME || !!process.env.WSLENV;
|
|
13
|
+
}
|
|
14
|
+
function openBrowser(url) {
|
|
15
|
+
const platform = process.platform;
|
|
16
|
+
try {
|
|
17
|
+
if (platform === 'darwin') {
|
|
18
|
+
(0, node_child_process_1.execSync)(`open "${url}"`);
|
|
19
|
+
}
|
|
20
|
+
else if (platform === 'win32') {
|
|
21
|
+
(0, node_child_process_1.execSync)(`start "" "${url}"`);
|
|
22
|
+
}
|
|
23
|
+
else if (isWSL()) {
|
|
24
|
+
(0, node_child_process_1.execSync)(`cmd.exe /c start "" "${url}"`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
(0, node_child_process_1.execSync)(`xdg-open "${url}"`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
console.log(`\nCould not open browser automatically. Please visit:\n${url}\n`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function registerLogin(program) {
|
|
35
|
+
program
|
|
36
|
+
.command('login')
|
|
37
|
+
.description('Authenticate with GitHub via browser')
|
|
38
|
+
.action(async () => {
|
|
39
|
+
const apiUrl = (0, config_js_1.getApiUrl)();
|
|
40
|
+
const port = await (0, auth_js_1.findFreePort)();
|
|
41
|
+
const callbackUrl = `http://localhost:${port}`;
|
|
42
|
+
const loginUrl = `${apiUrl}/cli-auth?callback=${encodeURIComponent(callbackUrl)}`;
|
|
43
|
+
console.log('Opening browser for GitHub authentication...');
|
|
44
|
+
openBrowser(loginUrl);
|
|
45
|
+
const spinner = (0, ora_1.default)({ text: 'Waiting for authentication...', discardStdin: false }).start();
|
|
46
|
+
const { promise: authPromise } = (0, auth_js_1.waitForCLIAuthCallback)(port);
|
|
47
|
+
const onSigint = () => {
|
|
48
|
+
spinner.stop();
|
|
49
|
+
process.exit(0);
|
|
50
|
+
};
|
|
51
|
+
process.once('SIGINT', onSigint);
|
|
52
|
+
let timeoutId;
|
|
53
|
+
try {
|
|
54
|
+
const result = await Promise.race([
|
|
55
|
+
authPromise,
|
|
56
|
+
new Promise((_, reject) => {
|
|
57
|
+
timeoutId = setTimeout(() => reject(new Error('Login timed out after 5 minutes')), 5 * 60 * 1000);
|
|
58
|
+
}),
|
|
59
|
+
]);
|
|
60
|
+
clearTimeout(timeoutId);
|
|
61
|
+
process.off('SIGINT', onSigint);
|
|
62
|
+
(0, config_js_1.writeConfig)({
|
|
63
|
+
token: result.token,
|
|
64
|
+
refresh_token: result.refresh_token,
|
|
65
|
+
expires_at: Date.now() + result.expires_in * 1000,
|
|
66
|
+
});
|
|
67
|
+
spinner.succeed('Logged in successfully.');
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
clearTimeout(timeoutId);
|
|
72
|
+
process.off('SIGINT', onSigint);
|
|
73
|
+
spinner.fail(`Login failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAarD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerLogout = registerLogout;
|
|
4
|
+
const config_js_1 = require("../lib/config.js");
|
|
5
|
+
function registerLogout(program) {
|
|
6
|
+
program
|
|
7
|
+
.command('logout')
|
|
8
|
+
.description('Log out and remove stored credentials')
|
|
9
|
+
.action(() => {
|
|
10
|
+
const config = (0, config_js_1.readConfig)();
|
|
11
|
+
if (!config?.token) {
|
|
12
|
+
console.log('Not logged in.');
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
(0, config_js_1.clearConfig)();
|
|
16
|
+
console.log('Logged out.');
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":";;AAGA,wCAaC;AAfD,gDAA0D;AAE1D,SAAgB,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAA;QAC3B,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;YAC7B,OAAM;QACR,CAAC;QACD,IAAA,uBAAW,GAAE,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsBxC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6DnD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerPull = registerPull;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_stream_1 = require("node:stream");
|
|
10
|
+
const ora_1 = __importDefault(require("ora"));
|
|
11
|
+
const unzipper_1 = __importDefault(require("unzipper"));
|
|
12
|
+
const api_js_1 = require("../lib/api.js");
|
|
13
|
+
const config_js_1 = require("../lib/config.js");
|
|
14
|
+
async function downloadToBuffer(url) {
|
|
15
|
+
const res = await fetch(url);
|
|
16
|
+
if (!res.ok)
|
|
17
|
+
throw new Error(`Download failed: HTTP ${res.status}`);
|
|
18
|
+
const arrayBuffer = await res.arrayBuffer();
|
|
19
|
+
return Buffer.from(arrayBuffer);
|
|
20
|
+
}
|
|
21
|
+
async function unzipBuffer(buffer, outputDir) {
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
node_stream_1.Readable.from(buffer)
|
|
24
|
+
.pipe(unzipper_1.default.Extract({ path: outputDir }))
|
|
25
|
+
.on('close', resolve)
|
|
26
|
+
.on('error', reject);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function registerPull(program) {
|
|
30
|
+
program
|
|
31
|
+
.command('pull <name>')
|
|
32
|
+
.description('Pull an asset from the registry (name or owner/name)')
|
|
33
|
+
.option('-o, --output <path>', 'Output file path (simple asset) or directory (package)')
|
|
34
|
+
.option('-v, --version <version>', 'Version to pull (defaults to latest)', 'latest')
|
|
35
|
+
.action(async (nameArg, options) => {
|
|
36
|
+
const token = await (0, config_js_1.requireToken)();
|
|
37
|
+
let owner;
|
|
38
|
+
let name;
|
|
39
|
+
const parts = nameArg.split('/');
|
|
40
|
+
if (parts.length === 2 && parts[0] && parts[1]) {
|
|
41
|
+
;
|
|
42
|
+
[owner, name] = parts;
|
|
43
|
+
}
|
|
44
|
+
else if (parts.length === 1 && parts[0]) {
|
|
45
|
+
const me = await (0, api_js_1.getMe)(token);
|
|
46
|
+
if (!me.username) {
|
|
47
|
+
console.error('Could not resolve your username. Use <owner/name> format instead.');
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
owner = me.username;
|
|
51
|
+
name = parts[0];
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.error('Error: argument must be a name or <owner/name>');
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
const ownerName = `${owner}/${name}`;
|
|
58
|
+
const spinner = (0, ora_1.default)(`Fetching ${ownerName}@${options.version}...`).start();
|
|
59
|
+
try {
|
|
60
|
+
const data = await (0, api_js_1.getAssetVersion)(owner, name, options.version, token);
|
|
61
|
+
if (data.content !== undefined) {
|
|
62
|
+
// Simple asset
|
|
63
|
+
const outputPath = options.output ?? `${name}.md`;
|
|
64
|
+
const resolvedOutput = node_path_1.default.resolve(outputPath);
|
|
65
|
+
node_fs_1.default.mkdirSync(node_path_1.default.dirname(resolvedOutput), { recursive: true });
|
|
66
|
+
node_fs_1.default.writeFileSync(resolvedOutput, data.content, 'utf-8');
|
|
67
|
+
spinner.succeed(`Pulled ${ownerName}@${data.version} → ${outputPath}`);
|
|
68
|
+
}
|
|
69
|
+
else if (data.download_url) {
|
|
70
|
+
// Skill/bundle package
|
|
71
|
+
const outputDir = options.output ?? name;
|
|
72
|
+
const resolvedDir = node_path_1.default.resolve(outputDir);
|
|
73
|
+
spinner.text = 'Downloading package...';
|
|
74
|
+
const buffer = await downloadToBuffer(data.download_url);
|
|
75
|
+
spinner.text = 'Extracting...';
|
|
76
|
+
node_fs_1.default.mkdirSync(resolvedDir, { recursive: true });
|
|
77
|
+
await unzipBuffer(buffer, resolvedDir);
|
|
78
|
+
spinner.succeed(`Pulled ${ownerName}@${data.version} → ${outputDir}/`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
spinner.fail('Unexpected response from server');
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
const message = err instanceof api_js_1.ApiError ? err.message : String(err);
|
|
87
|
+
spinner.fail(`Pull failed: ${message}`);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoGxC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+GnD"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerPush = registerPush;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const promises_1 = require("node:readline/promises");
|
|
10
|
+
const node_stream_1 = require("node:stream");
|
|
11
|
+
const archiver_1 = __importDefault(require("archiver"));
|
|
12
|
+
const ora_1 = __importDefault(require("ora"));
|
|
13
|
+
const api_js_1 = require("../lib/api.js");
|
|
14
|
+
const config_js_1 = require("../lib/config.js");
|
|
15
|
+
async function promptName(suggestion) {
|
|
16
|
+
const rl = (0, promises_1.createInterface)({ input: process.stdin, output: process.stdout });
|
|
17
|
+
try {
|
|
18
|
+
const p = rl.question('? Asset name › ');
|
|
19
|
+
rl.write(suggestion);
|
|
20
|
+
const answer = await p;
|
|
21
|
+
return answer.trim() || suggestion;
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
rl.close();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function toSlug(name) {
|
|
28
|
+
return name
|
|
29
|
+
.toLowerCase()
|
|
30
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
31
|
+
.replace(/-+/g, '-')
|
|
32
|
+
.replace(/^-|-$/g, '');
|
|
33
|
+
}
|
|
34
|
+
function detectFormat(resolvedPath, isDirectory) {
|
|
35
|
+
if (!isDirectory)
|
|
36
|
+
return 'file';
|
|
37
|
+
if (node_fs_1.default.existsSync(node_path_1.default.join(resolvedPath, 'SKILL.md')))
|
|
38
|
+
return 'skill';
|
|
39
|
+
return 'bundle';
|
|
40
|
+
}
|
|
41
|
+
async function buildFileManifest(folderPath) {
|
|
42
|
+
const entries = [];
|
|
43
|
+
function walk(dir, base) {
|
|
44
|
+
for (const entry of node_fs_1.default.readdirSync(dir, { withFileTypes: true })) {
|
|
45
|
+
const fullPath = node_path_1.default.join(dir, entry.name);
|
|
46
|
+
const relPath = node_path_1.default.join(base, entry.name).replace(/\\/g, '/');
|
|
47
|
+
if (entry.isDirectory()) {
|
|
48
|
+
walk(fullPath, relPath);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const { size } = node_fs_1.default.statSync(fullPath);
|
|
52
|
+
entries.push({ path: relPath, size });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
walk(folderPath, '');
|
|
57
|
+
return entries;
|
|
58
|
+
}
|
|
59
|
+
async function zipFolder(folderPath) {
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
const archive = (0, archiver_1.default)('zip', { zlib: { level: 9 } });
|
|
62
|
+
const chunks = [];
|
|
63
|
+
const passThrough = new node_stream_1.PassThrough();
|
|
64
|
+
passThrough.on('data', (chunk) => chunks.push(chunk));
|
|
65
|
+
passThrough.on('end', () => resolve(Buffer.concat(chunks)));
|
|
66
|
+
passThrough.on('error', reject);
|
|
67
|
+
archive.pipe(passThrough);
|
|
68
|
+
archive.directory(folderPath, false);
|
|
69
|
+
archive.on('error', reject);
|
|
70
|
+
archive.finalize();
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function friendlyPushError(err, version, slug) {
|
|
74
|
+
if (!(err instanceof api_js_1.ApiError)) {
|
|
75
|
+
const msg = String(err);
|
|
76
|
+
if (msg.includes('fetch failed') || msg.includes('ECONNREFUSED') || msg.includes('ENOTFOUND')) {
|
|
77
|
+
return 'Could not reach the server. Check your internet connection.';
|
|
78
|
+
}
|
|
79
|
+
return msg;
|
|
80
|
+
}
|
|
81
|
+
const { status, message } = err;
|
|
82
|
+
if (status === 401)
|
|
83
|
+
return 'Not authenticated. Run `amulets login` first.';
|
|
84
|
+
if (status === 413)
|
|
85
|
+
return 'Package exceeds the 4 MB size limit.';
|
|
86
|
+
if (status === 409 ||
|
|
87
|
+
message.includes('duplicate key') ||
|
|
88
|
+
message.includes('unique constraint')) {
|
|
89
|
+
return `Version ${version} of "${slug}" already exists. Use -v to specify a different version (e.g. -v 1.0.1).`;
|
|
90
|
+
}
|
|
91
|
+
if (message.includes('"latest"')) {
|
|
92
|
+
return '"latest" is a reserved version name. Use a semver version like 1.0.0.';
|
|
93
|
+
}
|
|
94
|
+
if (status >= 500)
|
|
95
|
+
return 'Server error. Please try again later.';
|
|
96
|
+
return message;
|
|
97
|
+
}
|
|
98
|
+
function registerPush(program) {
|
|
99
|
+
program
|
|
100
|
+
.command('push <path>')
|
|
101
|
+
.description('Push an asset (file or skill/bundle folder) to the registry')
|
|
102
|
+
.option('-n, --name <name>', 'Asset name')
|
|
103
|
+
.option('-v, --version <version>', 'Version (semver)', '1.0.0')
|
|
104
|
+
.option('-m, --message <message>', 'Version message')
|
|
105
|
+
.option('-t, --tags <tags>', 'Comma-separated tags (e.g. claude,prompt)')
|
|
106
|
+
.option('-d, --description <description>', 'Short description')
|
|
107
|
+
.action(async (assetPath, options) => {
|
|
108
|
+
const token = await (0, config_js_1.requireToken)();
|
|
109
|
+
const resolvedPath = node_path_1.default.resolve(assetPath);
|
|
110
|
+
if (!node_fs_1.default.existsSync(resolvedPath)) {
|
|
111
|
+
console.error(`Error: path does not exist: ${resolvedPath}`);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
const stats = node_fs_1.default.statSync(resolvedPath);
|
|
115
|
+
const isDirectory = stats.isDirectory();
|
|
116
|
+
const format = detectFormat(resolvedPath, isDirectory);
|
|
117
|
+
const suggestion = toSlug(isDirectory
|
|
118
|
+
? node_path_1.default.basename(resolvedPath)
|
|
119
|
+
: node_path_1.default.basename(resolvedPath, node_path_1.default.extname(resolvedPath)));
|
|
120
|
+
const name = options.name ?? (await promptName(suggestion));
|
|
121
|
+
if (!name) {
|
|
122
|
+
console.error('Error: asset name is required');
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
const slug = toSlug(name);
|
|
126
|
+
const tags = options.tags
|
|
127
|
+
? options.tags
|
|
128
|
+
.split(',')
|
|
129
|
+
.map((t) => t.trim())
|
|
130
|
+
.filter(Boolean)
|
|
131
|
+
: [];
|
|
132
|
+
const spinner = (0, ora_1.default)('Pushing asset...').start();
|
|
133
|
+
try {
|
|
134
|
+
if (format === 'skill' || format === 'bundle') {
|
|
135
|
+
spinner.text = 'Building file manifest...';
|
|
136
|
+
const fileManifest = await buildFileManifest(resolvedPath);
|
|
137
|
+
spinner.text = 'Creating zip archive...';
|
|
138
|
+
const zipBuffer = await zipFolder(resolvedPath);
|
|
139
|
+
spinner.text = 'Uploading package...';
|
|
140
|
+
const formData = new FormData();
|
|
141
|
+
formData.append('metadata', JSON.stringify({
|
|
142
|
+
name,
|
|
143
|
+
slug,
|
|
144
|
+
description: options.description,
|
|
145
|
+
asset_format: format,
|
|
146
|
+
tags,
|
|
147
|
+
version: options.version,
|
|
148
|
+
message: options.message,
|
|
149
|
+
}));
|
|
150
|
+
formData.append('file_manifest', JSON.stringify(fileManifest));
|
|
151
|
+
const zipArrayBuffer = zipBuffer.buffer.slice(zipBuffer.byteOffset, zipBuffer.byteOffset + zipBuffer.byteLength);
|
|
152
|
+
formData.append('package', new Blob([zipArrayBuffer], { type: 'application/zip' }), `${slug}-${options.version}.zip`);
|
|
153
|
+
const result = await (0, api_js_1.pushPackageAsset)(token, formData);
|
|
154
|
+
spinner.succeed(`Pushed ${format}: ${result.asset.slug} @ ${result.version.version}`);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
// Simple asset (single file)
|
|
158
|
+
spinner.text = 'Reading file...';
|
|
159
|
+
const content = node_fs_1.default.readFileSync(resolvedPath, 'utf-8');
|
|
160
|
+
spinner.text = 'Uploading asset...';
|
|
161
|
+
const result = await (0, api_js_1.pushSimpleAsset)(token, {
|
|
162
|
+
name,
|
|
163
|
+
slug,
|
|
164
|
+
description: options.description,
|
|
165
|
+
tags,
|
|
166
|
+
version: options.version,
|
|
167
|
+
message: options.message,
|
|
168
|
+
content,
|
|
169
|
+
});
|
|
170
|
+
spinner.succeed(`Pushed file: ${result.asset.slug} @ ${result.version.version}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
spinner.fail(`Push failed: ${friendlyPushError(err, options.version, slug)}`);
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAgB7E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerUpdate = registerUpdate;
|
|
4
|
+
const update_check_js_1 = require("../lib/update-check.js");
|
|
5
|
+
function registerUpdate(program, currentVersion) {
|
|
6
|
+
program
|
|
7
|
+
.command('update')
|
|
8
|
+
.description('Check for a newer version of amulets-cli')
|
|
9
|
+
.action(async () => {
|
|
10
|
+
process.stdout.write(`Current version: ${currentVersion}\n`);
|
|
11
|
+
process.stdout.write('Checking npm registry...\n');
|
|
12
|
+
const latest = await (0, update_check_js_1.startUpdateCheck)(currentVersion, { force: true });
|
|
13
|
+
if (latest) {
|
|
14
|
+
process.stdout.write((0, update_check_js_1.formatUpdateNotice)(currentVersion, latest));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
process.stdout.write(`\n You are up to date (${currentVersion})\n\n`);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;AAGA,wCAgBC;AAlBD,4DAA6E;AAE7E,SAAgB,cAAc,CAAC,OAAgB,EAAE,cAAsB;IACrE,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,cAAc,IAAI,CAAC,CAAA;QAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAElD,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAgB,EAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAEtE,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,oCAAkB,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAA;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,cAAc,OAAO,CAAC,CAAA;QACxE,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/commands/versions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuDvD"}
|