incur 0.0.0 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +141 -0
  3. package/SKILL.md +664 -0
  4. package/dist/Cli.d.ts +255 -0
  5. package/dist/Cli.d.ts.map +1 -0
  6. package/dist/Cli.js +900 -0
  7. package/dist/Cli.js.map +1 -0
  8. package/dist/Errors.d.ts +92 -0
  9. package/dist/Errors.d.ts.map +1 -0
  10. package/dist/Errors.js +75 -0
  11. package/dist/Errors.js.map +1 -0
  12. package/dist/Formatter.d.ts +5 -0
  13. package/dist/Formatter.d.ts.map +1 -0
  14. package/dist/Formatter.js +91 -0
  15. package/dist/Formatter.js.map +1 -0
  16. package/dist/Help.d.ts +53 -0
  17. package/dist/Help.d.ts.map +1 -0
  18. package/dist/Help.js +231 -0
  19. package/dist/Help.js.map +1 -0
  20. package/dist/Mcp.d.ts +13 -0
  21. package/dist/Mcp.d.ts.map +1 -0
  22. package/dist/Mcp.js +140 -0
  23. package/dist/Mcp.js.map +1 -0
  24. package/dist/Parser.d.ts +24 -0
  25. package/dist/Parser.d.ts.map +1 -0
  26. package/dist/Parser.js +215 -0
  27. package/dist/Parser.js.map +1 -0
  28. package/dist/Register.d.ts +19 -0
  29. package/dist/Register.d.ts.map +1 -0
  30. package/dist/Register.js +2 -0
  31. package/dist/Register.js.map +1 -0
  32. package/dist/Schema.d.ts +4 -0
  33. package/dist/Schema.d.ts.map +1 -0
  34. package/dist/Schema.js +8 -0
  35. package/dist/Schema.js.map +1 -0
  36. package/dist/Skill.d.ts +29 -0
  37. package/dist/Skill.d.ts.map +1 -0
  38. package/dist/Skill.js +196 -0
  39. package/dist/Skill.js.map +1 -0
  40. package/dist/Skillgen.d.ts +3 -0
  41. package/dist/Skillgen.d.ts.map +1 -0
  42. package/dist/Skillgen.js +67 -0
  43. package/dist/Skillgen.js.map +1 -0
  44. package/dist/SyncMcp.d.ts +23 -0
  45. package/dist/SyncMcp.d.ts.map +1 -0
  46. package/dist/SyncMcp.js +100 -0
  47. package/dist/SyncMcp.js.map +1 -0
  48. package/dist/SyncSkills.d.ts +38 -0
  49. package/dist/SyncSkills.d.ts.map +1 -0
  50. package/dist/SyncSkills.js +163 -0
  51. package/dist/SyncSkills.js.map +1 -0
  52. package/dist/Typegen.d.ts +6 -0
  53. package/dist/Typegen.d.ts.map +1 -0
  54. package/dist/Typegen.js +92 -0
  55. package/dist/Typegen.js.map +1 -0
  56. package/dist/bin.d.ts +14 -0
  57. package/dist/bin.d.ts.map +1 -0
  58. package/dist/bin.js +30 -0
  59. package/dist/bin.js.map +1 -0
  60. package/dist/index.d.ts +15 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +14 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/internal/pm.d.ts +3 -0
  65. package/dist/internal/pm.d.ts.map +1 -0
  66. package/dist/internal/pm.js +11 -0
  67. package/dist/internal/pm.js.map +1 -0
  68. package/dist/internal/types.d.ts +11 -0
  69. package/dist/internal/types.d.ts.map +1 -0
  70. package/dist/internal/types.js +2 -0
  71. package/dist/internal/types.js.map +1 -0
  72. package/dist/internal/utils.d.ts +8 -0
  73. package/dist/internal/utils.d.ts.map +1 -0
  74. package/dist/internal/utils.js +51 -0
  75. package/dist/internal/utils.js.map +1 -0
  76. package/examples/npm/cli.ts +180 -0
  77. package/examples/npm/node_modules/.bin/incur.src +21 -0
  78. package/examples/npm/node_modules/.bin/tsx +21 -0
  79. package/examples/npm/package.json +14 -0
  80. package/examples/npm/tsconfig.json +9 -0
  81. package/examples/presto/cli.ts +246 -0
  82. package/examples/presto/node_modules/.bin/incur.src +21 -0
  83. package/examples/presto/node_modules/.bin/tsx +21 -0
  84. package/examples/presto/package.json +14 -0
  85. package/examples/presto/tsconfig.json +9 -0
  86. package/package.json +53 -2
  87. package/src/Cli.test-d.ts +135 -0
  88. package/src/Cli.test.ts +1373 -0
  89. package/src/Cli.ts +1470 -0
  90. package/src/Errors.test.ts +96 -0
  91. package/src/Errors.ts +139 -0
  92. package/src/Formatter.test.ts +245 -0
  93. package/src/Formatter.ts +106 -0
  94. package/src/Help.test.ts +124 -0
  95. package/src/Help.ts +302 -0
  96. package/src/Mcp.test.ts +254 -0
  97. package/src/Mcp.ts +195 -0
  98. package/src/Parser.test-d.ts +45 -0
  99. package/src/Parser.test.ts +118 -0
  100. package/src/Parser.ts +247 -0
  101. package/src/Register.ts +18 -0
  102. package/src/Schema.test.ts +125 -0
  103. package/src/Schema.ts +8 -0
  104. package/src/Skill.test.ts +293 -0
  105. package/src/Skill.ts +253 -0
  106. package/src/Skillgen.ts +66 -0
  107. package/src/SyncMcp.test.ts +75 -0
  108. package/src/SyncMcp.ts +132 -0
  109. package/src/SyncSkills.test.ts +92 -0
  110. package/src/SyncSkills.ts +205 -0
  111. package/src/Typegen.test.ts +150 -0
  112. package/src/Typegen.ts +107 -0
  113. package/src/bin.ts +33 -0
  114. package/src/e2e.test.ts +1710 -0
  115. package/src/index.ts +14 -0
  116. package/src/internal/pm.test.ts +38 -0
  117. package/src/internal/pm.ts +8 -0
  118. package/src/internal/types.ts +22 -0
  119. package/src/internal/utils.ts +50 -0
  120. package/src/tsconfig.json +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Parser.js","sourceRoot":"","sources":["../src/Parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Type-safe registration interface. Populate via declaration merging or codegen to enable CTA autocomplete.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * // codegen: run `mycli --codegen` to generate this file
7
+ * declare module 'incur' {
8
+ * interface Register {
9
+ * commands: {
10
+ * get: { args: { id: number }; options: {} }
11
+ * list: { args: {}; options: { limit: number } }
12
+ * }
13
+ * }
14
+ * }
15
+ * ```
16
+ */
17
+ export interface Register {
18
+ }
19
+ //# sourceMappingURL=Register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Register.d.ts","sourceRoot":"","sources":["../src/Register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,QAAQ;CAAG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Register.js","sourceRoot":"","sources":["../src/Register.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+ /** Converts a Zod schema to a JSON Schema object. Strips the `$schema` meta-property. */
3
+ export declare function toJsonSchema(schema: z.ZodType): Record<string, unknown>;
4
+ //# sourceMappingURL=Schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIvE"}
package/dist/Schema.js ADDED
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ /** Converts a Zod schema to a JSON Schema object. Strips the `$schema` meta-property. */
3
+ export function toJsonSchema(schema) {
4
+ const result = z.toJSONSchema(schema);
5
+ delete result.$schema;
6
+ return result;
7
+ }
8
+ //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAA4B,CAAA;IAChE,OAAO,MAAM,CAAC,OAAO,CAAA;IACrB,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { z } from 'zod';
2
+ /** Information about a single command, passed to `generate()`. */
3
+ export type CommandInfo = {
4
+ name: string;
5
+ description?: string | undefined;
6
+ args?: z.ZodObject<any> | undefined;
7
+ env?: z.ZodObject<any> | undefined;
8
+ hint?: string | undefined;
9
+ options?: z.ZodObject<any> | undefined;
10
+ output?: z.ZodType | undefined;
11
+ examples?: {
12
+ command: string;
13
+ description?: string;
14
+ }[] | undefined;
15
+ };
16
+ /** A skill file entry with its directory name and content. */
17
+ export type File = {
18
+ /** Directory name relative to output root (empty string for depth 0). */
19
+ dir: string;
20
+ /** Markdown content. */
21
+ content: string;
22
+ };
23
+ /** Generates a Markdown skill file from a CLI name and collected command data. */
24
+ export declare function generate(name: string, commands: CommandInfo[], groups?: Map<string, string>): string;
25
+ /** Splits commands into skill files grouped by depth. */
26
+ export declare function split(name: string, commands: CommandInfo[], depth: number, groups?: Map<string, string>): File[];
27
+ /** Computes a deterministic hash of command structure for staleness detection. */
28
+ export declare function hash(commands: CommandInfo[]): string;
29
+ //# sourceMappingURL=Skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skill.d.ts","sourceRoot":"","sources":["../src/Skill.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAI5B,kEAAkE;AAClE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;IACnC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;IACtC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,SAAS,CAAA;IAC9B,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,SAAS,CAAA;CACnE,CAAA;AAED,8DAA8D;AAC9D,MAAM,MAAM,IAAI,GAAG;IACjB,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAA;IACX,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa,GACtC,MAAM,CAmBR;AAED,yDAAyD;AACzD,wBAAgB,KAAK,CACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa,GACtC,IAAI,EAAE,CAkBR;AAsHD,kFAAkF;AAClF,wBAAgB,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAUpD"}
package/dist/Skill.js ADDED
@@ -0,0 +1,196 @@
1
+ import { createHash } from 'node:crypto';
2
+ import * as Schema from './Schema.js';
3
+ /** Generates a Markdown skill file from a CLI name and collected command data. */
4
+ export function generate(name, commands, groups = new Map()) {
5
+ const hasGroups = groups.size > 0;
6
+ if (!hasGroups)
7
+ return commands.map((cmd) => renderCommandBody(name, cmd)).join('\n\n');
8
+ const sections = [`# ${name}`];
9
+ let lastGroup;
10
+ for (const cmd of commands) {
11
+ const segment = cmd.name.split(' ')[0];
12
+ if (segment !== lastGroup) {
13
+ lastGroup = segment;
14
+ const desc = groups.get(segment);
15
+ const heading = desc ? `## ${name} ${segment}\n\n${desc}` : `## ${name} ${segment}`;
16
+ sections.push(heading);
17
+ }
18
+ sections.push(renderCommandBody(name, cmd, 3));
19
+ }
20
+ return sections.join('\n\n');
21
+ }
22
+ /** Splits commands into skill files grouped by depth. */
23
+ export function split(name, commands, depth, groups = new Map()) {
24
+ if (depth === 0)
25
+ return [{ dir: '', content: renderGroup(name, name, commands, groups, name) }];
26
+ const buckets = new Map();
27
+ for (const cmd of commands) {
28
+ const segments = cmd.name.split(' ');
29
+ const key = segments.slice(0, depth).join('-');
30
+ const bucket = buckets.get(key) ?? [];
31
+ bucket.push(cmd);
32
+ buckets.set(key, bucket);
33
+ }
34
+ return [...buckets.entries()]
35
+ .sort(([a], [b]) => a.localeCompare(b))
36
+ .map(([dir, cmds]) => {
37
+ const prefix = cmds[0].name.split(' ').slice(0, depth).join(' ');
38
+ return { dir, content: renderGroup(name, `${name} ${prefix}`, cmds, groups, prefix) };
39
+ });
40
+ }
41
+ /** @internal Renders a group-level frontmatter + command bodies. */
42
+ function renderGroup(cli, title, cmds, groups, prefix) {
43
+ const groupDesc = prefix ? groups.get(prefix) : undefined;
44
+ const childDescs = cmds.map((c) => c.description).filter(Boolean);
45
+ const descParts = [];
46
+ if (groupDesc)
47
+ descParts.push(groupDesc.replace(/\.$/, ''));
48
+ if (childDescs.length > 0)
49
+ descParts.push(childDescs.join(', '));
50
+ const description = descParts.join('. ') || undefined;
51
+ const slug = title.replace(/\s+/g, '-');
52
+ const fm = ['---', `name: ${slug}`];
53
+ if (description)
54
+ fm.push(`description: ${description}. Run \`${title} --help\` for usage details.`);
55
+ fm.push(`command: ${title}`, '---');
56
+ const body = cmds.map((cmd) => renderCommandBody(cli, cmd)).join('\n\n---\n\n');
57
+ return `${fm.join('\n')}\n\n${body}`;
58
+ }
59
+ /** @internal Renders a command's heading and sections without frontmatter. */
60
+ function renderCommandBody(cli, cmd, level = 1) {
61
+ const fullName = `${cli} ${cmd.name}`;
62
+ const sections = [];
63
+ const h = (n) => '#'.repeat(n);
64
+ let heading = `${h(level)} ${fullName}`;
65
+ if (cmd.description)
66
+ heading += `\n\n${cmd.description}`;
67
+ sections.push(heading);
68
+ const sub = h(level + 1);
69
+ // Arguments table
70
+ if (cmd.args) {
71
+ const shape = cmd.args.shape;
72
+ const json = Schema.toJsonSchema(cmd.args);
73
+ const required = new Set(json.required ?? []);
74
+ const properties = json.properties;
75
+ const rows = Object.entries(shape).map(([key, field]) => {
76
+ const prop = properties?.[key];
77
+ const type = resolveTypeName(prop);
78
+ const req = required.has(key) ? 'yes' : 'no';
79
+ const desc = field.description ?? '';
80
+ return `| \`${key}\` | \`${type}\` | ${req} | ${desc} |`;
81
+ });
82
+ sections.push(`${sub} Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n${rows.join('\n')}`);
83
+ }
84
+ // Environment Variables table
85
+ if (cmd.env) {
86
+ const shape = cmd.env.shape;
87
+ const json = Schema.toJsonSchema(cmd.env);
88
+ const required = new Set(json.required ?? []);
89
+ const properties = json.properties;
90
+ const rows = Object.entries(shape).map(([key, field]) => {
91
+ const prop = properties?.[key];
92
+ const type = resolveTypeName(prop);
93
+ const def = prop?.default !== undefined ? String(prop.default) : '';
94
+ const req = required.has(key) ? 'yes' : 'no';
95
+ const desc = field.description ?? '';
96
+ return `| \`${key}\` | \`${type}\` | ${req} | ${def ? `\`${def}\`` : ''} | ${desc} |`;
97
+ });
98
+ sections.push(`${sub} Environment Variables\n\n| Name | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n${rows.join('\n')}`);
99
+ }
100
+ // Options table
101
+ if (cmd.options) {
102
+ const shape = cmd.options.shape;
103
+ const json = Schema.toJsonSchema(cmd.options);
104
+ const properties = json.properties;
105
+ const rows = Object.entries(shape).map(([key, field]) => {
106
+ const prop = properties?.[key];
107
+ const type = resolveTypeName(prop);
108
+ const def = prop?.default !== undefined ? String(prop.default) : '';
109
+ const desc = field.description ?? '';
110
+ return `| \`--${key}\` | \`${type}\` | ${def ? `\`${def}\`` : ''} | ${desc} |`;
111
+ });
112
+ sections.push(`${sub} Options\n\n| Flag | Type | Default | Description |\n|------|------|---------|-------------|\n${rows.join('\n')}`);
113
+ }
114
+ // Output table
115
+ if (cmd.output) {
116
+ const outputSchema = Schema.toJsonSchema(cmd.output);
117
+ const table = schemaToTable(outputSchema);
118
+ if (table)
119
+ sections.push(`${sub} Output\n\n${table}`);
120
+ else {
121
+ const type = resolveTypeName(outputSchema);
122
+ sections.push(`${sub} Output\n\nType: \`${type}\``);
123
+ }
124
+ }
125
+ // Examples
126
+ if (cmd.examples && cmd.examples.length > 0) {
127
+ const lines = cmd.examples.map((ex) => {
128
+ const comment = ex.description ? `# ${ex.description}\n` : '';
129
+ return `${comment}${cli} ${ex.command}`;
130
+ });
131
+ sections.push(`${sub} Examples\n\n\`\`\`sh\n${lines.join('\n\n')}\n\`\`\``);
132
+ }
133
+ // Hint
134
+ if (cmd.hint)
135
+ sections.push(`> ${cmd.hint}`);
136
+ return sections.join('\n\n');
137
+ }
138
+ /** Computes a deterministic hash of command structure for staleness detection. */
139
+ export function hash(commands) {
140
+ const data = commands.map((cmd) => ({
141
+ name: cmd.name,
142
+ description: cmd.description,
143
+ args: cmd.args ? Schema.toJsonSchema(cmd.args) : undefined,
144
+ env: cmd.env ? Schema.toJsonSchema(cmd.env) : undefined,
145
+ options: cmd.options ? Schema.toJsonSchema(cmd.options) : undefined,
146
+ output: cmd.output ? Schema.toJsonSchema(cmd.output) : undefined,
147
+ }));
148
+ return createHash('sha256').update(JSON.stringify(data)).digest('hex').slice(0, 16);
149
+ }
150
+ /** @internal Renders a JSON Schema object as a Markdown table. Returns `undefined` for non-object schemas. */
151
+ function schemaToTable(schema, prefix = '') {
152
+ if (schema.type !== 'object')
153
+ return undefined;
154
+ const properties = schema.properties;
155
+ if (!properties || Object.keys(properties).length === 0)
156
+ return undefined;
157
+ const required = new Set(schema.required ?? []);
158
+ const rows = [];
159
+ for (const [key, prop] of Object.entries(properties)) {
160
+ const name = prefix ? `${prefix}.${key}` : key;
161
+ const type = resolveTypeName(prop);
162
+ const req = required.has(key) ? 'yes' : 'no';
163
+ const desc = prop.description ?? '';
164
+ rows.push(`| \`${name}\` | \`${type}\` | ${req} | ${desc} |`);
165
+ // Expand nested objects inline
166
+ if (prop.type === 'object' && prop.properties) {
167
+ const nested = schemaToTable(prop, name);
168
+ if (nested) {
169
+ const lines = nested.split('\n');
170
+ rows.push(...lines.slice(2)); // skip header + separator
171
+ }
172
+ }
173
+ // Expand array item objects inline
174
+ if (prop.type === 'array' && prop.items) {
175
+ const items = prop.items;
176
+ if (items.type === 'object' && items.properties) {
177
+ const nested = schemaToTable(items, `${name}[]`);
178
+ if (nested) {
179
+ const lines = nested.split('\n');
180
+ rows.push(...lines.slice(2));
181
+ }
182
+ }
183
+ }
184
+ }
185
+ return `| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n${rows.join('\n')}`;
186
+ }
187
+ /** @internal Resolves a simple type name from a JSON Schema property. */
188
+ function resolveTypeName(prop) {
189
+ if (!prop)
190
+ return 'unknown';
191
+ const type = prop.type;
192
+ if (type)
193
+ return type === 'integer' ? 'number' : type;
194
+ return 'unknown';
195
+ }
196
+ //# sourceMappingURL=Skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skill.js","sourceRoot":"","sources":["../src/Skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Imports a CLI from `input`, generates Markdown skill files, and writes them to `output`. */
2
+ export declare function generate(input: string, output: string, depth?: number): Promise<string[]>;
3
+ //# sourceMappingURL=Skillgen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skillgen.d.ts","sourceRoot":"","sources":["../src/Skillgen.ts"],"names":[],"mappings":"AAOA,+FAA+F;AAC/F,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAuB1F"}
@@ -0,0 +1,67 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import * as Cli from './Cli.js';
4
+ import { importCli } from './internal/utils.js';
5
+ import * as Skill from './Skill.js';
6
+ /** Imports a CLI from `input`, generates Markdown skill files, and writes them to `output`. */
7
+ export async function generate(input, output, depth = 1) {
8
+ const cli = await importCli(input);
9
+ const commands = Cli.toCommands.get(cli);
10
+ if (!commands)
11
+ throw new Error('No commands registered on this CLI instance');
12
+ const groups = new Map();
13
+ if (cli.description)
14
+ groups.set(cli.name, cli.description);
15
+ const entries = collectEntries(commands, [], groups);
16
+ const files = Skill.split(cli.name, entries, depth, groups);
17
+ if (depth > 0)
18
+ await fs.rm(output, { recursive: true, force: true });
19
+ const written = [];
20
+ for (const file of files) {
21
+ const filePath = file.dir
22
+ ? path.join(output, file.dir, 'SKILL.md')
23
+ : path.join(output, 'SKILL.md');
24
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
25
+ await fs.writeFile(filePath, `${file.content}\n`);
26
+ written.push(filePath);
27
+ }
28
+ return written;
29
+ }
30
+ /** Recursively collects leaf commands as `Skill.CommandInfo` and group descriptions. */
31
+ function collectEntries(commands, prefix, groups = new Map()) {
32
+ const result = [];
33
+ for (const [name, entry] of commands) {
34
+ const path = [...prefix, name];
35
+ if ('_group' in entry && entry._group) {
36
+ if (entry.description)
37
+ groups.set(path.join(' '), entry.description);
38
+ result.push(...collectEntries(entry.commands, path, groups));
39
+ }
40
+ else {
41
+ const cmd = { name: path.join(' ') };
42
+ if (entry.description)
43
+ cmd.description = entry.description;
44
+ if (entry.args)
45
+ cmd.args = entry.args;
46
+ if (entry.env)
47
+ cmd.env = entry.env;
48
+ if (entry.hint)
49
+ cmd.hint = entry.hint;
50
+ if (entry.options)
51
+ cmd.options = entry.options;
52
+ if (entry.output)
53
+ cmd.output = entry.output;
54
+ const examples = Cli.formatExamples(entry.examples);
55
+ if (examples) {
56
+ const cmdName = path.join(' ');
57
+ cmd.examples = examples.map((e) => ({
58
+ ...e,
59
+ command: e.command ? `${cmdName} ${e.command}` : cmdName,
60
+ }));
61
+ }
62
+ result.push(cmd);
63
+ }
64
+ }
65
+ return result.sort((a, b) => a.name.localeCompare(b.name));
66
+ }
67
+ //# sourceMappingURL=Skillgen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skillgen.js","sourceRoot":"","sources":["../src/Skillgen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** Registers the CLI as an MCP server via `npx add-mcp` and direct config writes for unsupported agents. */
2
+ export declare function register(name: string, options?: register.Options): Promise<register.Result>;
3
+ export declare namespace register {
4
+ /** Options for registering an MCP server. */
5
+ type Options = {
6
+ /** Target specific agents (e.g. `'claude-code'`, `'cursor'`). */
7
+ agents?: string[] | undefined;
8
+ /** Override the command agents will run. Defaults to `<runner> <name> --mcp`. */
9
+ command?: string | undefined;
10
+ /** Install globally. Defaults to `true`. */
11
+ global?: boolean | undefined;
12
+ };
13
+ /** Result of a register operation. */
14
+ type Result = {
15
+ /** Agents the server was registered with. */
16
+ agents: string[];
17
+ /** The command registered. */
18
+ command: string;
19
+ };
20
+ }
21
+ /** @internal Detects the package specifier used to run this CLI (handles dlx/npx URL and version installs). */
22
+ export declare function detectPackageSpecifier(name: string): string;
23
+ //# sourceMappingURL=SyncMcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncMcp.d.ts","sourceRoot":"","sources":["../src/SyncMcp.ts"],"names":[],"mappings":"AAOA,4GAA4G;AAC5G,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,QAAQ,CAAC,OAAY,GAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAwC1B;AA6BD,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,6CAA6C;IAC7C,KAAK,OAAO,GAAG;QACb,iEAAiE;QACjE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QAC7B,iFAAiF;QACjF,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,4CAA4C;QAC5C,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC7B,CAAA;IAED,sCAAsC;IACtC,KAAK,MAAM,GAAG;QACZ,6CAA6C;QAC7C,MAAM,EAAE,MAAM,EAAE,CAAA;QAChB,8BAA8B;QAC9B,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED,+GAA+G;AAC/G,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB3D"}
@@ -0,0 +1,100 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { dirname, join } from 'node:path';
5
+ import { detectRunner } from './internal/pm.js';
6
+ /** Registers the CLI as an MCP server via `npx add-mcp` and direct config writes for unsupported agents. */
7
+ export async function register(name, options = {}) {
8
+ const runner = detectRunner();
9
+ const command = options.command ?? `${runner} ${detectPackageSpecifier(name)} --mcp`;
10
+ const targetAgents = options.agents ?? [];
11
+ const ampOnly = targetAgents.length === 1 && targetAgents[0] === 'amp';
12
+ const agents = [];
13
+ // Run add-mcp for agents it supports (skip if only targeting Amp)
14
+ if (!ampOnly) {
15
+ const args = [command, '--name', name, '-y'];
16
+ if (options.global !== false)
17
+ args.push('-g');
18
+ for (const agent of targetAgents.filter((a) => a !== 'amp'))
19
+ args.push('-a', agent);
20
+ const [cmd, ...prefix] = runner.split(' ');
21
+ const { stdout } = await exec(cmd, [...prefix, 'add-mcp', ...args]);
22
+ // Extract agent names from add-mcp output (lines like "│ ✓ Claude Code: ~/.claude.json │")
23
+ agents.push(...stdout
24
+ .split('\n')
25
+ .filter((l) => l.includes('✓') || l.includes('✔'))
26
+ .map((l) => l
27
+ .replace(/[│┃|]/g, '')
28
+ .replace(/.*[✓✔]\s*/, '')
29
+ .replace(/:.*/, '')
30
+ .trim())
31
+ .filter(Boolean));
32
+ }
33
+ // Register with Amp directly (add-mcp doesn't support it)
34
+ if (targetAgents.length === 0 || targetAgents.includes('amp')) {
35
+ const registered = registerAmp(name, command);
36
+ if (registered)
37
+ agents.push('Amp');
38
+ }
39
+ return { command, agents };
40
+ }
41
+ /** @internal Registers an MCP server in Amp's settings.json. */
42
+ function registerAmp(name, command) {
43
+ const configPath = join(homedir(), '.config', 'amp', 'settings.json');
44
+ let config = {};
45
+ if (existsSync(configPath)) {
46
+ try {
47
+ config = JSON.parse(readFileSync(configPath, 'utf-8'));
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ const [cmd, ...args] = command.split(' ');
54
+ if (!cmd)
55
+ return false;
56
+ const servers = config['amp.mcpServers'] ?? {};
57
+ servers[name] = { command: cmd, args };
58
+ config['amp.mcpServers'] = servers;
59
+ const dir = dirname(configPath);
60
+ if (!existsSync(dir))
61
+ mkdirSync(dir, { recursive: true });
62
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
63
+ return true;
64
+ }
65
+ /** @internal Detects the package specifier used to run this CLI (handles dlx/npx URL and version installs). */
66
+ export function detectPackageSpecifier(name) {
67
+ const bin = process.argv[1];
68
+ if (!bin)
69
+ return name;
70
+ const match = bin.match(/^(.+)[/\\]node_modules[/\\]/);
71
+ if (!match)
72
+ return name;
73
+ try {
74
+ const pkg = JSON.parse(readFileSync(join(match[1], 'package.json'), 'utf-8'));
75
+ const deps = pkg.dependencies ?? {};
76
+ const spec = deps[name];
77
+ if (!spec || Object.keys(deps).length !== 1)
78
+ return name;
79
+ if (/^https?:\/\//.test(spec) || spec.startsWith('file:'))
80
+ return spec;
81
+ if (/^\d/.test(spec))
82
+ return `${name}@${spec}`;
83
+ }
84
+ catch { }
85
+ return name;
86
+ }
87
+ /** Promisified execFile with stderr in error message. */
88
+ function exec(cmd, args) {
89
+ return new Promise((resolve, reject) => {
90
+ execFile(cmd, args, (error, stdout, stderr) => {
91
+ if (error) {
92
+ const msg = stderr?.trim() || stdout?.trim() || error.message;
93
+ reject(new Error(msg));
94
+ }
95
+ else
96
+ resolve({ stdout, stderr });
97
+ });
98
+ });
99
+ }
100
+ //# sourceMappingURL=SyncMcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncMcp.js","sourceRoot":"","sources":["../src/SyncMcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,4GAA4G;AAC5G,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAA;IACpF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAA;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,KAAK,CAAA;IAEtE,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,kEAAkE;IAClE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7C,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAEnF,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAI,EAAE,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;QAEpE,2FAA2F;QAC3F,MAAM,CAAC,IAAI,CACT,GAAG,MAAM;aACN,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,CAAC;aACE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;aACxB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;aAClB,IAAI,EAAE,CACV;aACA,MAAM,CAAC,OAAO,CAAC,CACnB,CAAA;IACH,CAAC;IAED,0DAA0D;IAC1D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC7C,IAAI,UAAU;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AAC5B,CAAC;AAED,gEAAgE;AAChE,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,CAAA;IAErE,IAAI,MAAM,GAAwB,EAAE,CAAA;IACpC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IAEtB,MAAM,OAAO,GAAwB,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAA;IACnE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;IACtC,MAAM,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAA;IAElC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAEjE,OAAO,IAAI,CAAA;AACb,CAAC;AAsBD,+GAA+G;AAC/G,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC3B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;QAC9E,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAA;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAExD,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;QACtE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,IAAI,CAAA;AACb,CAAC;AAED,yDAAyD;AACzD,SAAS,IAAI,CAAC,GAAW,EAAE,IAAc;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,CAAA;gBAC7D,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;YACxB,CAAC;;gBAAM,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,38 @@
1
+ /** Generates skill files from a command map and installs them via `skills add`. */
2
+ export declare function sync(name: string, commands: Map<string, any>, options?: sync.Options): Promise<sync.Result>;
3
+ export declare namespace sync {
4
+ /** Options for syncing skills. */
5
+ type Options = {
6
+ /** Working directory for resolving `include` globs. Defaults to `process.cwd()`. */
7
+ cwd?: string | undefined;
8
+ /** Grouping depth for skill files. Defaults to `1`. */
9
+ depth?: number | undefined;
10
+ /** CLI description, used as the top-level group description. */
11
+ description?: string | undefined;
12
+ /** Install globally (`~/.config/agents/skills/`) instead of project-local. Defaults to `true`. */
13
+ global?: boolean | undefined;
14
+ /** Glob patterns for directories containing SKILL.md files to include (e.g. `"skills/*"`, `"my-skill"`). Skill name is the parent directory name. */
15
+ include?: string[] | undefined;
16
+ /** Override the package manager runner (e.g. `npx`, `pnpx`, `bunx`). Auto-detected if omitted. */
17
+ runner?: string | undefined;
18
+ };
19
+ /** Result of a sync operation. */
20
+ type Result = {
21
+ /** Installed paths reported by `skills add`. */
22
+ paths: string[];
23
+ /** Synced skills with metadata. */
24
+ skills: Skill[];
25
+ };
26
+ /** A synced skill entry. */
27
+ type Skill = {
28
+ /** Description extracted from the skill frontmatter. */
29
+ description?: string | undefined;
30
+ /** Whether this skill was included from a local file (not generated from commands). */
31
+ external?: boolean | undefined;
32
+ /** Skill directory name. */
33
+ name: string;
34
+ };
35
+ }
36
+ /** Reads the stored skills hash for a CLI. Returns `undefined` if no hash exists. */
37
+ export declare function readHash(name: string): string | undefined;
38
+ //# sourceMappingURL=SyncSkills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncSkills.d.ts","sourceRoot":"","sources":["../src/SyncSkills.ts"],"names":[],"mappings":"AAUA,mFAAmF;AACnF,wBAAsB,IAAI,CACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,OAAO,GAAE,IAAI,CAAC,OAAY,GACzB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAqEtB;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,kCAAkC;IAClC,KAAK,OAAO,GAAG;QACb,oFAAoF;QACpF,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACxB,uDAAuD;QACvD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B,gEAAgE;QAChE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,kGAAkG;QAClG,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC5B,qJAAqJ;QACrJ,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QAC9B,kGAAkG;QAClG,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC5B,CAAA;IACD,kCAAkC;IAClC,KAAK,MAAM,GAAG;QACZ,gDAAgD;QAChD,KAAK,EAAE,MAAM,EAAE,CAAA;QACf,mCAAmC;QACnC,MAAM,EAAE,KAAK,EAAE,CAAA;KAChB,CAAA;IACD,4BAA4B;IAC5B,KAAK,KAAK,GAAG;QACX,wDAAwD;QACxD,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,uFAAuF;QACvF,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC9B,4BAA4B;QAC5B,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAkED,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOzD"}