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.
Files changed (54) hide show
  1. package/README.md +61 -0
  2. package/dist/commands/list.d.ts +3 -0
  3. package/dist/commands/list.d.ts.map +1 -0
  4. package/dist/commands/list.js +46 -0
  5. package/dist/commands/list.js.map +1 -0
  6. package/dist/commands/login.d.ts +3 -0
  7. package/dist/commands/login.d.ts.map +1 -0
  8. package/dist/commands/login.js +78 -0
  9. package/dist/commands/login.js.map +1 -0
  10. package/dist/commands/logout.d.ts +3 -0
  11. package/dist/commands/logout.d.ts.map +1 -0
  12. package/dist/commands/logout.js +19 -0
  13. package/dist/commands/logout.js.map +1 -0
  14. package/dist/commands/pull.d.ts +3 -0
  15. package/dist/commands/pull.d.ts.map +1 -0
  16. package/dist/commands/pull.js +92 -0
  17. package/dist/commands/pull.js.map +1 -0
  18. package/dist/commands/push.d.ts +3 -0
  19. package/dist/commands/push.d.ts.map +1 -0
  20. package/dist/commands/push.js +179 -0
  21. package/dist/commands/push.js.map +1 -0
  22. package/dist/commands/update.d.ts +3 -0
  23. package/dist/commands/update.d.ts.map +1 -0
  24. package/dist/commands/update.js +21 -0
  25. package/dist/commands/update.js.map +1 -0
  26. package/dist/commands/versions.d.ts +3 -0
  27. package/dist/commands/versions.d.ts.map +1 -0
  28. package/dist/commands/versions.js +61 -0
  29. package/dist/commands/versions.js.map +1 -0
  30. package/dist/commands/whoami.d.ts +3 -0
  31. package/dist/commands/whoami.d.ts.map +1 -0
  32. package/dist/commands/whoami.js +29 -0
  33. package/dist/commands/whoami.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +43 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/lib/api.d.ts +65 -0
  39. package/dist/lib/api.d.ts.map +1 -0
  40. package/dist/lib/api.js +68 -0
  41. package/dist/lib/api.js.map +1 -0
  42. package/dist/lib/auth.d.ts +15 -0
  43. package/dist/lib/auth.d.ts.map +1 -0
  44. package/dist/lib/auth.js +69 -0
  45. package/dist/lib/auth.js.map +1 -0
  46. package/dist/lib/config.d.ts +16 -0
  47. package/dist/lib/config.d.ts.map +1 -0
  48. package/dist/lib/config.js +89 -0
  49. package/dist/lib/config.js.map +1 -0
  50. package/dist/lib/update-check.d.ts +5 -0
  51. package/dist/lib/update-check.d.ts.map +1 -0
  52. package/dist/lib/update-check.js +74 -0
  53. package/dist/lib/update-check.js.map +1 -0
  54. 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,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerList(program: Command): void;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -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,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerLogin(program: Command): void;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -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,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerLogout(program: Command): void;
3
+ //# sourceMappingURL=logout.d.ts.map
@@ -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,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerPull(program: Command): void;
3
+ //# sourceMappingURL=pull.d.ts.map
@@ -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,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerPush(program: Command): void;
3
+ //# sourceMappingURL=push.d.ts.map
@@ -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,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerUpdate(program: Command, currentVersion: string): void;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -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,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerVersions(program: Command): void;
3
+ //# sourceMappingURL=versions.d.ts.map
@@ -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"}