@sloop-dev/skill-forge 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 (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +341 -0
  3. package/bin/skill-forge.js +2 -0
  4. package/dist/commands/add.d.ts +5 -0
  5. package/dist/commands/add.d.ts.map +1 -0
  6. package/dist/commands/add.js +48 -0
  7. package/dist/commands/add.js.map +1 -0
  8. package/dist/commands/call.d.ts +13 -0
  9. package/dist/commands/call.d.ts.map +1 -0
  10. package/dist/commands/call.js +75 -0
  11. package/dist/commands/call.js.map +1 -0
  12. package/dist/commands/gen.d.ts +8 -0
  13. package/dist/commands/gen.d.ts.map +1 -0
  14. package/dist/commands/gen.js +128 -0
  15. package/dist/commands/gen.js.map +1 -0
  16. package/dist/commands/list.d.ts +9 -0
  17. package/dist/commands/list.d.ts.map +1 -0
  18. package/dist/commands/list.js +25 -0
  19. package/dist/commands/list.js.map +1 -0
  20. package/dist/commands/remove.d.ts +4 -0
  21. package/dist/commands/remove.d.ts.map +1 -0
  22. package/dist/commands/remove.js +26 -0
  23. package/dist/commands/remove.js.map +1 -0
  24. package/dist/commands/update.d.ts +10 -0
  25. package/dist/commands/update.d.ts.map +1 -0
  26. package/dist/commands/update.js +64 -0
  27. package/dist/commands/update.js.map +1 -0
  28. package/dist/config/manager.d.ts +9 -0
  29. package/dist/config/manager.d.ts.map +1 -0
  30. package/dist/config/manager.js +72 -0
  31. package/dist/config/manager.js.map +1 -0
  32. package/dist/config/schema.d.ts +21 -0
  33. package/dist/config/schema.d.ts.map +1 -0
  34. package/dist/config/schema.js +2 -0
  35. package/dist/config/schema.js.map +1 -0
  36. package/dist/gen/manifest.d.ts +16 -0
  37. package/dist/gen/manifest.d.ts.map +1 -0
  38. package/dist/gen/manifest.js +32 -0
  39. package/dist/gen/manifest.js.map +1 -0
  40. package/dist/gen/reference-writer.d.ts +19 -0
  41. package/dist/gen/reference-writer.d.ts.map +1 -0
  42. package/dist/gen/reference-writer.js +41 -0
  43. package/dist/gen/reference-writer.js.map +1 -0
  44. package/dist/gen/skill-writer.d.ts +8 -0
  45. package/dist/gen/skill-writer.d.ts.map +1 -0
  46. package/dist/gen/skill-writer.js +19 -0
  47. package/dist/gen/skill-writer.js.map +1 -0
  48. package/dist/index.d.ts +2 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +20 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/tools/cli-runner.d.ts +8 -0
  53. package/dist/tools/cli-runner.d.ts.map +1 -0
  54. package/dist/tools/cli-runner.js +7 -0
  55. package/dist/tools/cli-runner.js.map +1 -0
  56. package/dist/tools/help-parser.d.ts +10 -0
  57. package/dist/tools/help-parser.d.ts.map +1 -0
  58. package/dist/tools/help-parser.js +18 -0
  59. package/dist/tools/help-parser.js.map +1 -0
  60. package/dist/tools/mcp-client.d.ts +21 -0
  61. package/dist/tools/mcp-client.d.ts.map +1 -0
  62. package/dist/tools/mcp-client.js +37 -0
  63. package/dist/tools/mcp-client.js.map +1 -0
  64. package/dist/utils/hash.d.ts +2 -0
  65. package/dist/utils/hash.d.ts.map +1 -0
  66. package/dist/utils/hash.js +20 -0
  67. package/dist/utils/hash.js.map +1 -0
  68. package/dist/utils/process.d.ts +11 -0
  69. package/dist/utils/process.d.ts.map +1 -0
  70. package/dist/utils/process.js +26 -0
  71. package/dist/utils/process.js.map +1 -0
  72. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen.js","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Command } from 'commander';
2
+ export interface ToolSummary {
3
+ name: string;
4
+ type: string;
5
+ command: string;
6
+ }
7
+ export declare function listTools(configPath?: string): Promise<ToolSummary[]>;
8
+ export declare function registerListCommand(program: Command): void;
9
+ //# 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,CAAC;AAGzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAO3E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc1D"}
@@ -0,0 +1,25 @@
1
+ import { loadConfig } from '../config/manager.js';
2
+ export async function listTools(configPath) {
3
+ const config = await loadConfig(configPath);
4
+ return Object.entries(config.tools).map(([name, tool]) => ({
5
+ name,
6
+ type: tool.type,
7
+ command: tool.command,
8
+ }));
9
+ }
10
+ export function registerListCommand(program) {
11
+ program
12
+ .command('list')
13
+ .description('Show all registered tools')
14
+ .action(async () => {
15
+ const tools = await listTools();
16
+ if (tools.length === 0) {
17
+ console.log('No tools registered. Use "skill-forge add" to get started.');
18
+ return;
19
+ }
20
+ for (const tool of tools) {
21
+ console.log(` ${tool.name} (${tool.type}) \u2014 ${tool.command}`);
22
+ }
23
+ });
24
+ }
25
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAQlD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAmB;IACjD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,IAAI;QACJ,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare function removeTool(name: string, configPath?: string): Promise<void>;
3
+ export declare function registerRemoveCommand(program: Command): void;
4
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc5D"}
@@ -0,0 +1,26 @@
1
+ import { loadConfig, saveConfig } from '../config/manager.js';
2
+ export async function removeTool(name, configPath) {
3
+ const config = await loadConfig(configPath);
4
+ if (!config.tools[name]) {
5
+ throw new Error(`'${name}' is not registered. Run 'skill-forge list' to see available tools.`);
6
+ }
7
+ delete config.tools[name];
8
+ await saveConfig(config, configPath);
9
+ }
10
+ export function registerRemoveCommand(program) {
11
+ program
12
+ .command('remove')
13
+ .description('Unregister a tool')
14
+ .argument('<name>', 'Tool name to remove')
15
+ .action(async (name) => {
16
+ try {
17
+ await removeTool(name);
18
+ console.log(`Removed tool '${name}'.`);
19
+ }
20
+ catch (err) {
21
+ console.error(err.message);
22
+ process.exit(1);
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,UAAmB;IAEnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,qEAAqE,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mBAAmB,CAAC;SAChC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Command } from 'commander';
2
+ export interface UpdateOptions {
3
+ command?: string;
4
+ args?: string[];
5
+ env?: Record<string, string>;
6
+ timeout?: number;
7
+ }
8
+ export declare function updateTool(name: string, options: UpdateOptions, configPath?: string): Promise<void>;
9
+ export declare function registerUpdateCommand(program: Command): void;
10
+ //# 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,CAAC;AAGzC,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EACtB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmC5D"}
@@ -0,0 +1,64 @@
1
+ import { loadConfig, saveConfig } from '../config/manager.js';
2
+ export async function updateTool(name, options, configPath) {
3
+ const config = await loadConfig(configPath);
4
+ const tool = config.tools[name];
5
+ if (!tool) {
6
+ throw new Error(`Tool '${name}' not found. Use 'skill-forge add' to register it first.`);
7
+ }
8
+ if (options.command !== undefined) {
9
+ tool.command = options.command;
10
+ }
11
+ if (options.timeout !== undefined) {
12
+ tool.timeout = options.timeout;
13
+ }
14
+ if (tool.type === 'mcp') {
15
+ if (options.args !== undefined) {
16
+ tool.args = options.args;
17
+ }
18
+ // Env is merged, not replaced
19
+ if (options.env !== undefined) {
20
+ tool.env = { ...tool.env, ...options.env };
21
+ }
22
+ }
23
+ config.tools[name] = tool;
24
+ await saveConfig(config, configPath);
25
+ }
26
+ export function registerUpdateCommand(program) {
27
+ program
28
+ .command('update')
29
+ .description('Update settings for a registered tool')
30
+ .argument('<name>', 'Tool name to update')
31
+ .option('--command <cmd>', 'New command to execute')
32
+ .option('--args <items...>', 'New arguments for the command')
33
+ .option('--env <pairs...>', 'Environment variables to add/update as KEY=VALUE')
34
+ .option('--timeout <ms>', 'Timeout in milliseconds', parseInt)
35
+ .action(async (name, opts) => {
36
+ const updateOpts = {};
37
+ if (opts.command)
38
+ updateOpts.command = opts.command;
39
+ if (opts.args)
40
+ updateOpts.args = opts.args;
41
+ if (opts.timeout)
42
+ updateOpts.timeout = opts.timeout;
43
+ if (opts.env) {
44
+ updateOpts.env = {};
45
+ for (const pair of opts.env) {
46
+ const eqIdx = pair.indexOf('=');
47
+ if (eqIdx === -1) {
48
+ console.error(`Invalid env format: "${pair}". Expected KEY=VALUE.`);
49
+ process.exit(1);
50
+ }
51
+ updateOpts.env[pair.slice(0, eqIdx)] = pair.slice(eqIdx + 1);
52
+ }
53
+ }
54
+ try {
55
+ await updateTool(name, updateOpts);
56
+ console.log(`Updated tool '${name}'.`);
57
+ }
58
+ catch (err) {
59
+ console.error(err.message);
60
+ process.exit(1);
61
+ }
62
+ });
63
+ }
64
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SkillForgeConfig } from './schema.js';
2
+ export declare function createDefaultConfig(): SkillForgeConfig;
3
+ export declare function validateConfig(config: unknown): asserts config is SkillForgeConfig;
4
+ export declare function ensureConfigDir(configPath?: string): Promise<void>;
5
+ export declare function loadConfig(configPath?: string): Promise<SkillForgeConfig>;
6
+ export declare function saveConfig(config: SkillForgeConfig, configPath?: string): Promise<void>;
7
+ export declare function getConfigDir(): string;
8
+ export declare function getConfigPath(): string;
9
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAc,MAAM,aAAa,CAAC;AAK3D,wBAAgB,mBAAmB,IAAI,gBAAgB,CAMtD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAclF;AAeD,wBAAsB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAW/E;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7F;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -0,0 +1,72 @@
1
+ import { readFile, writeFile, mkdir, chmod, access } from 'node:fs/promises';
2
+ import { join, dirname } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ const CONFIG_DIR = join(homedir(), '.skill-forge');
5
+ const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
6
+ export function createDefaultConfig() {
7
+ return {
8
+ version: 1,
9
+ tools: {},
10
+ defaults: { timeout: 30000 },
11
+ };
12
+ }
13
+ export function validateConfig(config) {
14
+ if (typeof config !== 'object' || config === null) {
15
+ throw new Error('Config must be a JSON object');
16
+ }
17
+ const c = config;
18
+ if (c.version !== 1) {
19
+ throw new Error(`Unsupported config version: ${c.version}. Expected 1`);
20
+ }
21
+ if (typeof c.tools !== 'object' || c.tools === null) {
22
+ throw new Error('Config must have a "tools" object');
23
+ }
24
+ for (const [name, tool] of Object.entries(c.tools)) {
25
+ validateTool(name, tool);
26
+ }
27
+ }
28
+ function validateTool(name, tool) {
29
+ if (typeof tool !== 'object' || tool === null) {
30
+ throw new Error(`Tool "${name}" must be an object`);
31
+ }
32
+ const t = tool;
33
+ if (t.type !== 'mcp' && t.type !== 'cli') {
34
+ throw new Error(`Tool "${name}" has invalid type "${t.type}". Must be "mcp" or "cli"`);
35
+ }
36
+ if (typeof t.command !== 'string' || t.command.length === 0) {
37
+ throw new Error(`Tool "${name}" must have a non-empty "command" string`);
38
+ }
39
+ }
40
+ export async function ensureConfigDir(configPath) {
41
+ const dir = configPath ? dirname(configPath) : CONFIG_DIR;
42
+ await mkdir(dir, { recursive: true });
43
+ }
44
+ export async function loadConfig(configPath) {
45
+ const path = configPath ?? CONFIG_PATH;
46
+ try {
47
+ await access(path);
48
+ }
49
+ catch {
50
+ return createDefaultConfig();
51
+ }
52
+ const raw = await readFile(path, 'utf-8');
53
+ const config = JSON.parse(raw);
54
+ validateConfig(config);
55
+ return config;
56
+ }
57
+ export async function saveConfig(config, configPath) {
58
+ const path = configPath ?? CONFIG_PATH;
59
+ await ensureConfigDir(configPath);
60
+ await writeFile(path, JSON.stringify(config, null, 2), 'utf-8');
61
+ // Set file permissions to owner-only (600) on Unix-like systems
62
+ if (process.platform !== 'win32') {
63
+ await chmod(path, 0o600);
64
+ }
65
+ }
66
+ export function getConfigDir() {
67
+ return CONFIG_DIR;
68
+ }
69
+ export function getConfigPath() {
70
+ return CONFIG_PATH;
71
+ }
72
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface McpToolConfig {
2
+ type: 'mcp';
3
+ command: string;
4
+ args?: string[];
5
+ env?: Record<string, string>;
6
+ timeout?: number;
7
+ }
8
+ export interface CliToolConfig {
9
+ type: 'cli';
10
+ command: string;
11
+ timeout?: number;
12
+ }
13
+ export type ToolConfig = McpToolConfig | CliToolConfig;
14
+ export interface SkillForgeConfig {
15
+ version: number;
16
+ tools: Record<string, ToolConfig>;
17
+ defaults: {
18
+ timeout: number;
19
+ };
20
+ }
21
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ export interface Manifest {
2
+ generated_at: string;
3
+ tools: Record<string, {
4
+ config_hash: string;
5
+ }>;
6
+ }
7
+ export interface ManifestDiff {
8
+ added: string[];
9
+ removed: string[];
10
+ changed: string[];
11
+ unchanged: string[];
12
+ }
13
+ export declare function loadManifest(dir: string): Promise<Manifest>;
14
+ export declare function saveManifest(dir: string, manifest: Manifest): Promise<void>;
15
+ export declare function diffManifest(previous: Manifest, currentHashes: Record<string, string>): ManifestDiff;
16
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/gen/manifest.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAKjE;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAapG"}
@@ -0,0 +1,32 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ const MANIFEST_FILE = '.skill-forge-manifest.json';
4
+ export async function loadManifest(dir) {
5
+ try {
6
+ const raw = await readFile(join(dir, MANIFEST_FILE), 'utf-8');
7
+ return JSON.parse(raw);
8
+ }
9
+ catch {
10
+ return { generated_at: '', tools: {} };
11
+ }
12
+ }
13
+ export async function saveManifest(dir, manifest) {
14
+ await writeFile(join(dir, MANIFEST_FILE), JSON.stringify(manifest, null, 2), 'utf-8');
15
+ }
16
+ export function diffManifest(previous, currentHashes) {
17
+ const prevNames = new Set(Object.keys(previous.tools));
18
+ const currNames = new Set(Object.keys(currentHashes));
19
+ const added = [...currNames].filter(n => !prevNames.has(n));
20
+ const removed = [...prevNames].filter(n => !currNames.has(n));
21
+ const changed = [], unchanged = [];
22
+ for (const name of currNames) {
23
+ if (prevNames.has(name)) {
24
+ if (previous.tools[name].config_hash !== currentHashes[name])
25
+ changed.push(name);
26
+ else
27
+ unchanged.push(name);
28
+ }
29
+ }
30
+ return { added, removed, changed, unchanged };
31
+ }
32
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/gen/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,aAAa,GAAG,4BAA4B,CAAC;AAcnD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,QAAkB;IAChE,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAkB,EAAE,aAAqC;IACpF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAa,EAAE,EAAE,SAAS,GAAa,EAAE,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,aAAa,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBAC5E,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface McpToolSchema {
2
+ name: string;
3
+ description?: string;
4
+ inputSchema?: {
5
+ type?: string;
6
+ properties?: Record<string, {
7
+ type?: string;
8
+ description?: string;
9
+ }>;
10
+ required?: string[];
11
+ };
12
+ }
13
+ export interface ParsedCommand {
14
+ name: string;
15
+ description: string;
16
+ }
17
+ export declare function generateMcpReference(toolName: string, schemas: McpToolSchema[]): string;
18
+ export declare function generateCliReference(toolName: string, commands: ParsedCommand[], rawHelp: string): string;
19
+ //# sourceMappingURL=reference-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-writer.d.ts","sourceRoot":"","sources":["../../src/gen/reference-writer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACrE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;CAAE;AAGrE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAoBvF;AAGD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAYzG"}
@@ -0,0 +1,41 @@
1
+ // Generate reference markdown for an MCP tool.
2
+ export function generateMcpReference(toolName, schemas) {
3
+ let md = `# ${toolName}\n`;
4
+ for (const schema of schemas) {
5
+ md += `\n## ${schema.name}\n`;
6
+ if (schema.description)
7
+ md += `${schema.description}\n`;
8
+ const props = schema.inputSchema?.properties;
9
+ const required = new Set(schema.inputSchema?.required ?? []);
10
+ if (props && Object.keys(props).length > 0) {
11
+ md += '\n**Parameters:**\n';
12
+ for (const [key, val] of Object.entries(props)) {
13
+ const req = required.has(key) ? ' (required)' : '';
14
+ const desc = val.description ? ` — ${val.description}` : '';
15
+ md += `- \`${key}\`${req}${desc}\n`;
16
+ }
17
+ }
18
+ const exampleArgs = {};
19
+ if (props)
20
+ for (const key of Object.keys(props))
21
+ exampleArgs[key] = '...';
22
+ md += `\n**Example:**\n\`\`\`\nskill-forge call ${toolName} ${schema.name} '${JSON.stringify(exampleArgs)}'\n\`\`\`\n`;
23
+ }
24
+ return md;
25
+ }
26
+ // Generate reference markdown for a CLI tool.
27
+ export function generateCliReference(toolName, commands, rawHelp) {
28
+ let md = `# ${toolName}\n`;
29
+ if (commands.length === 0) {
30
+ md += `\nRun \`${toolName} --help\` for details.\n`;
31
+ if (rawHelp)
32
+ md += `\n**Raw help output:**\n\`\`\`\n${rawHelp}\n\`\`\`\n`;
33
+ return md;
34
+ }
35
+ for (const cmd of commands) {
36
+ md += `\n## ${cmd.name}\n${cmd.description}\n`;
37
+ md += `\n**Example:**\n\`\`\`\nskill-forge call ${toolName} "${cmd.name} ..."\n\`\`\`\n`;
38
+ }
39
+ return md;
40
+ }
41
+ //# sourceMappingURL=reference-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-writer.js","sourceRoot":"","sources":["../../src/gen/reference-writer.ts"],"names":[],"mappings":"AAYA,+CAA+C;AAC/C,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,OAAwB;IAC7E,IAAI,EAAE,GAAG,KAAK,QAAQ,IAAI,CAAC;IAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,EAAE,IAAI,QAAQ,MAAM,CAAC,IAAI,IAAI,CAAC;QAC9B,IAAI,MAAM,CAAC,WAAW;YAAE,EAAE,IAAI,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,EAAE,IAAI,qBAAqB,CAAC;YAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,EAAE,IAAI,OAAO,GAAG,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC;YACtC,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,IAAI,KAAK;YAAE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC1E,EAAE,IAAI,4CAA4C,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC;IACzH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,QAAyB,EAAE,OAAe;IAC/F,IAAI,EAAE,GAAG,KAAK,QAAQ,IAAI,CAAC;IAC3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,EAAE,IAAI,WAAW,QAAQ,0BAA0B,CAAC;QACpD,IAAI,OAAO;YAAE,EAAE,IAAI,mCAAmC,OAAO,YAAY,CAAC;QAC1E,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,EAAE,IAAI,QAAQ,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,WAAW,IAAI,CAAC;QAC/C,EAAE,IAAI,4CAA4C,QAAQ,KAAK,GAAG,CAAC,IAAI,iBAAiB,CAAC;IAC3F,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface ToolInfo {
2
+ name: string;
3
+ type: 'mcp' | 'cli';
4
+ description: string;
5
+ triggers: string[];
6
+ }
7
+ export declare function generateSkillMd(tools: ToolInfo[]): string;
8
+ //# sourceMappingURL=skill-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-writer.d.ts","sourceRoot":"","sources":["../../src/gen/skill-writer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAmBzD"}
@@ -0,0 +1,19 @@
1
+ // Generate the SKILL.md content for skill-forge.
2
+ export function generateSkillMd(tools) {
3
+ const triggerKeywords = tools.flatMap(t => t.triggers).join(', ');
4
+ const toolDescriptions = tools.map(t => t.description).join(', ');
5
+ const description = tools.length > 0
6
+ ? `MCP/CLI tool gateway. ${toolDescriptions}. Use skill-forge call to invoke tools. Use this skill when requests involve: ${triggerKeywords}.`
7
+ : 'MCP/CLI tool gateway. No tools registered yet.';
8
+ let md = `---\nname: skill-forge\ndescription: ${description}\n---\n\n# skill-forge\n\nGateway for registered MCP servers and CLI tools.\n\n## Usage\n\n- MCP: \`skill-forge call <name> <method> '<json>'\`\n- CLI: \`skill-forge call <name> "<command>"\`\n\n## Available Tools\n`;
9
+ if (tools.length === 0) {
10
+ md += '\nNo tools registered. Use `skill-forge add` to register one.\n';
11
+ return md;
12
+ }
13
+ for (const tool of tools) {
14
+ const typeLabel = tool.type.toUpperCase();
15
+ md += `\n### ${tool.name} (${typeLabel})\n${tool.description}\nDetails: references/${tool.name}.md\n`;
16
+ }
17
+ return md;
18
+ }
19
+ //# sourceMappingURL=skill-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-writer.js","sourceRoot":"","sources":["../../src/gen/skill-writer.ts"],"names":[],"mappings":"AAOA,iDAAiD;AACjD,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;QAClC,CAAC,CAAC,yBAAyB,gBAAgB,iFAAiF,eAAe,GAAG;QAC9I,CAAC,CAAC,gDAAgD,CAAC;IAErD,IAAI,EAAE,GAAG,wCAAwC,WAAW,yNAAyN,CAAC;IAEtR,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,EAAE,IAAI,iEAAiE,CAAC;QACxE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,EAAE,IAAI,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,MAAM,IAAI,CAAC,WAAW,yBAAyB,IAAI,CAAC,IAAI,OAAO,CAAC;IACxG,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ import { Command } from 'commander';
2
+ import { registerAddCommand } from './commands/add.js';
3
+ import { registerUpdateCommand } from './commands/update.js';
4
+ import { registerRemoveCommand } from './commands/remove.js';
5
+ import { registerListCommand } from './commands/list.js';
6
+ import { registerCallCommand } from './commands/call.js';
7
+ import { registerGenCommand } from './commands/gen.js';
8
+ const program = new Command();
9
+ program
10
+ .name('skill-forge')
11
+ .description('A CLI middleware that bridges AI agents to MCP servers and CLI tools')
12
+ .version('0.1.0');
13
+ registerAddCommand(program);
14
+ registerUpdateCommand(program);
15
+ registerRemoveCommand(program);
16
+ registerListCommand(program);
17
+ registerCallCommand(program);
18
+ registerGenCommand(program);
19
+ program.parse();
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,sEAAsE,CAAC;KACnF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAE5B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { SpawnResult } from '../utils/process.js';
2
+ export interface CliRunOptions {
3
+ command: string;
4
+ commandString: string;
5
+ timeout: number;
6
+ }
7
+ export declare function runCliTool(opts: CliRunOptions): Promise<SpawnResult>;
8
+ //# sourceMappingURL=cli-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-runner.d.ts","sourceRoot":"","sources":["../../src/tools/cli-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,wBAAsB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAG1E"}
@@ -0,0 +1,7 @@
1
+ import { spawnWithTimeout } from '../utils/process.js';
2
+ // Execute a CLI tool. Command string is split by whitespace (no shell, injection-safe).
3
+ export async function runCliTool(opts) {
4
+ const args = opts.commandString.split(/\s+/).filter(Boolean);
5
+ return spawnWithTimeout(opts.command, args, { timeout: opts.timeout, shell: false });
6
+ }
7
+ //# sourceMappingURL=cli-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../../src/tools/cli-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,MAAM,qBAAqB,CAAC;AAQpE,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAmB;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7D,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACvF,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface ParsedCommand {
2
+ name: string;
3
+ description: string;
4
+ }
5
+ export interface ParsedHelp {
6
+ commands: ParsedCommand[];
7
+ raw: string;
8
+ }
9
+ export declare function parseHelpOutput(output: string): ParsedHelp;
10
+ //# sourceMappingURL=help-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-parser.d.ts","sourceRoot":"","sources":["../../src/tools/help-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;CAAE;AACrE,MAAM,WAAW,UAAU;IAAG,QAAQ,EAAE,aAAa,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAAE;AAGvE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAc1D"}
@@ -0,0 +1,18 @@
1
+ // Best-effort parser for CLI --help output. Extracts subcommands and descriptions.
2
+ export function parseHelpOutput(output) {
3
+ const commands = [];
4
+ const lines = output.split('\n');
5
+ const cmdPattern = /^\s{2,}(\S+)\s{2,}(.+)$/;
6
+ for (const line of lines) {
7
+ const match = line.match(cmdPattern);
8
+ if (match) {
9
+ const name = match[1].trim();
10
+ const description = match[2].trim();
11
+ if (name.startsWith('-'))
12
+ continue; // Skip flags
13
+ commands.push({ name, description });
14
+ }
15
+ }
16
+ return { commands, raw: output };
17
+ }
18
+ //# sourceMappingURL=help-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-parser.js","sourceRoot":"","sources":["../../src/tools/help-parser.ts"],"names":[],"mappings":"AAGA,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,yBAAyB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS,CAAC,aAAa;YACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface McpClientOptions {
2
+ command: string;
3
+ args: string[];
4
+ timeout: number;
5
+ env?: Record<string, string>;
6
+ }
7
+ export declare class McpClient {
8
+ private client;
9
+ private transport;
10
+ private options;
11
+ constructor(options: McpClientOptions);
12
+ connect(): Promise<void>;
13
+ listTools(): Promise<{
14
+ name: string;
15
+ description?: string;
16
+ inputSchema: unknown;
17
+ }[]>;
18
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
19
+ disconnect(): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=mcp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAGD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,gBAAgB;IAc/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,SAAS,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IASpF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}