@prompd/cli 0.3.3

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 (223) hide show
  1. package/README.md +162 -0
  2. package/bin/prompd.js +23 -0
  3. package/dist/commands/cache.d.ts +3 -0
  4. package/dist/commands/cache.d.ts.map +1 -0
  5. package/dist/commands/cache.js +199 -0
  6. package/dist/commands/cache.js.map +1 -0
  7. package/dist/commands/compile.d.ts +9 -0
  8. package/dist/commands/compile.d.ts.map +1 -0
  9. package/dist/commands/compile.js +104 -0
  10. package/dist/commands/compile.js.map +1 -0
  11. package/dist/commands/config.d.ts +7 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +212 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/create.d.ts +3 -0
  16. package/dist/commands/create.d.ts.map +1 -0
  17. package/dist/commands/create.js +183 -0
  18. package/dist/commands/create.js.map +1 -0
  19. package/dist/commands/deps.d.ts +3 -0
  20. package/dist/commands/deps.d.ts.map +1 -0
  21. package/dist/commands/deps.js +192 -0
  22. package/dist/commands/deps.js.map +1 -0
  23. package/dist/commands/explain.d.ts +3 -0
  24. package/dist/commands/explain.d.ts.map +1 -0
  25. package/dist/commands/explain.js +227 -0
  26. package/dist/commands/explain.js.map +1 -0
  27. package/dist/commands/git.d.ts +3 -0
  28. package/dist/commands/git.d.ts.map +1 -0
  29. package/dist/commands/git.js +306 -0
  30. package/dist/commands/git.js.map +1 -0
  31. package/dist/commands/init.d.ts +3 -0
  32. package/dist/commands/init.d.ts.map +1 -0
  33. package/dist/commands/init.js +177 -0
  34. package/dist/commands/init.js.map +1 -0
  35. package/dist/commands/list.d.ts +3 -0
  36. package/dist/commands/list.d.ts.map +1 -0
  37. package/dist/commands/list.js +126 -0
  38. package/dist/commands/list.js.map +1 -0
  39. package/dist/commands/mcp.d.ts +3 -0
  40. package/dist/commands/mcp.d.ts.map +1 -0
  41. package/dist/commands/mcp.js +326 -0
  42. package/dist/commands/mcp.js.map +1 -0
  43. package/dist/commands/namespace.d.ts +3 -0
  44. package/dist/commands/namespace.d.ts.map +1 -0
  45. package/dist/commands/namespace.js +113 -0
  46. package/dist/commands/namespace.js.map +1 -0
  47. package/dist/commands/package.d.ts +23 -0
  48. package/dist/commands/package.d.ts.map +1 -0
  49. package/dist/commands/package.js +746 -0
  50. package/dist/commands/package.js.map +1 -0
  51. package/dist/commands/provider.d.ts +3 -0
  52. package/dist/commands/provider.d.ts.map +1 -0
  53. package/dist/commands/provider.js +285 -0
  54. package/dist/commands/provider.js.map +1 -0
  55. package/dist/commands/registry.d.ts +9 -0
  56. package/dist/commands/registry.d.ts.map +1 -0
  57. package/dist/commands/registry.js +361 -0
  58. package/dist/commands/registry.js.map +1 -0
  59. package/dist/commands/run.d.ts +3 -0
  60. package/dist/commands/run.d.ts.map +1 -0
  61. package/dist/commands/run.js +157 -0
  62. package/dist/commands/run.js.map +1 -0
  63. package/dist/commands/show.d.ts +3 -0
  64. package/dist/commands/show.d.ts.map +1 -0
  65. package/dist/commands/show.js +90 -0
  66. package/dist/commands/show.js.map +1 -0
  67. package/dist/commands/uninstall.d.ts +3 -0
  68. package/dist/commands/uninstall.d.ts.map +1 -0
  69. package/dist/commands/uninstall.js +95 -0
  70. package/dist/commands/uninstall.js.map +1 -0
  71. package/dist/commands/validate.d.ts +3 -0
  72. package/dist/commands/validate.d.ts.map +1 -0
  73. package/dist/commands/validate.js +57 -0
  74. package/dist/commands/validate.js.map +1 -0
  75. package/dist/commands/version.d.ts +3 -0
  76. package/dist/commands/version.d.ts.map +1 -0
  77. package/dist/commands/version.js +166 -0
  78. package/dist/commands/version.js.map +1 -0
  79. package/dist/index.d.ts +5 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +388 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/lib/auth.d.ts +164 -0
  84. package/dist/lib/auth.d.ts.map +1 -0
  85. package/dist/lib/auth.js +388 -0
  86. package/dist/lib/auth.js.map +1 -0
  87. package/dist/lib/compiler/file-system.d.ts +178 -0
  88. package/dist/lib/compiler/file-system.d.ts.map +1 -0
  89. package/dist/lib/compiler/file-system.js +440 -0
  90. package/dist/lib/compiler/file-system.js.map +1 -0
  91. package/dist/lib/compiler/formatters/anthropic.d.ts +21 -0
  92. package/dist/lib/compiler/formatters/anthropic.d.ts.map +1 -0
  93. package/dist/lib/compiler/formatters/anthropic.js +95 -0
  94. package/dist/lib/compiler/formatters/anthropic.js.map +1 -0
  95. package/dist/lib/compiler/formatters/markdown.d.ts +17 -0
  96. package/dist/lib/compiler/formatters/markdown.d.ts.map +1 -0
  97. package/dist/lib/compiler/formatters/markdown.js +114 -0
  98. package/dist/lib/compiler/formatters/markdown.js.map +1 -0
  99. package/dist/lib/compiler/formatters/openai.d.ts +21 -0
  100. package/dist/lib/compiler/formatters/openai.d.ts.map +1 -0
  101. package/dist/lib/compiler/formatters/openai.js +98 -0
  102. package/dist/lib/compiler/formatters/openai.js.map +1 -0
  103. package/dist/lib/compiler/index.d.ts +56 -0
  104. package/dist/lib/compiler/index.d.ts.map +1 -0
  105. package/dist/lib/compiler/index.js +165 -0
  106. package/dist/lib/compiler/index.js.map +1 -0
  107. package/dist/lib/compiler/language-map.d.ts +31 -0
  108. package/dist/lib/compiler/language-map.d.ts.map +1 -0
  109. package/dist/lib/compiler/language-map.js +156 -0
  110. package/dist/lib/compiler/language-map.js.map +1 -0
  111. package/dist/lib/compiler/package-resolver.d.ts +68 -0
  112. package/dist/lib/compiler/package-resolver.d.ts.map +1 -0
  113. package/dist/lib/compiler/package-resolver.js +254 -0
  114. package/dist/lib/compiler/package-resolver.js.map +1 -0
  115. package/dist/lib/compiler/pipeline.d.ts +53 -0
  116. package/dist/lib/compiler/pipeline.d.ts.map +1 -0
  117. package/dist/lib/compiler/pipeline.js +209 -0
  118. package/dist/lib/compiler/pipeline.js.map +1 -0
  119. package/dist/lib/compiler/prompd-loader.d.ts +108 -0
  120. package/dist/lib/compiler/prompd-loader.d.ts.map +1 -0
  121. package/dist/lib/compiler/prompd-loader.js +270 -0
  122. package/dist/lib/compiler/prompd-loader.js.map +1 -0
  123. package/dist/lib/compiler/section-override.d.ts +40 -0
  124. package/dist/lib/compiler/section-override.d.ts.map +1 -0
  125. package/dist/lib/compiler/section-override.js +296 -0
  126. package/dist/lib/compiler/section-override.js.map +1 -0
  127. package/dist/lib/compiler/stages/assets.d.ts +71 -0
  128. package/dist/lib/compiler/stages/assets.d.ts.map +1 -0
  129. package/dist/lib/compiler/stages/assets.js +456 -0
  130. package/dist/lib/compiler/stages/assets.js.map +1 -0
  131. package/dist/lib/compiler/stages/codegen.d.ts +17 -0
  132. package/dist/lib/compiler/stages/codegen.d.ts.map +1 -0
  133. package/dist/lib/compiler/stages/codegen.js +64 -0
  134. package/dist/lib/compiler/stages/codegen.js.map +1 -0
  135. package/dist/lib/compiler/stages/dependency.d.ts +38 -0
  136. package/dist/lib/compiler/stages/dependency.d.ts.map +1 -0
  137. package/dist/lib/compiler/stages/dependency.js +307 -0
  138. package/dist/lib/compiler/stages/dependency.js.map +1 -0
  139. package/dist/lib/compiler/stages/lexical.d.ts +19 -0
  140. package/dist/lib/compiler/stages/lexical.d.ts.map +1 -0
  141. package/dist/lib/compiler/stages/lexical.js +92 -0
  142. package/dist/lib/compiler/stages/lexical.js.map +1 -0
  143. package/dist/lib/compiler/stages/semantic.d.ts +20 -0
  144. package/dist/lib/compiler/stages/semantic.d.ts.map +1 -0
  145. package/dist/lib/compiler/stages/semantic.js +166 -0
  146. package/dist/lib/compiler/stages/semantic.js.map +1 -0
  147. package/dist/lib/compiler/stages/template.d.ts +94 -0
  148. package/dist/lib/compiler/stages/template.d.ts.map +1 -0
  149. package/dist/lib/compiler/stages/template.js +1044 -0
  150. package/dist/lib/compiler/stages/template.js.map +1 -0
  151. package/dist/lib/compiler/types.d.ts +200 -0
  152. package/dist/lib/compiler/types.d.ts.map +1 -0
  153. package/dist/lib/compiler/types.js +137 -0
  154. package/dist/lib/compiler/types.js.map +1 -0
  155. package/dist/lib/config.d.ts +29 -0
  156. package/dist/lib/config.d.ts.map +1 -0
  157. package/dist/lib/config.js +375 -0
  158. package/dist/lib/config.js.map +1 -0
  159. package/dist/lib/errors.d.ts +19 -0
  160. package/dist/lib/errors.d.ts.map +1 -0
  161. package/dist/lib/errors.js +47 -0
  162. package/dist/lib/errors.js.map +1 -0
  163. package/dist/lib/executor.d.ts +18 -0
  164. package/dist/lib/executor.d.ts.map +1 -0
  165. package/dist/lib/executor.js +372 -0
  166. package/dist/lib/executor.js.map +1 -0
  167. package/dist/lib/git.d.ts +74 -0
  168. package/dist/lib/git.d.ts.map +1 -0
  169. package/dist/lib/git.js +254 -0
  170. package/dist/lib/git.js.map +1 -0
  171. package/dist/lib/index.d.ts +43 -0
  172. package/dist/lib/index.d.ts.map +1 -0
  173. package/dist/lib/index.js +108 -0
  174. package/dist/lib/index.js.map +1 -0
  175. package/dist/lib/mcp.d.ts +42 -0
  176. package/dist/lib/mcp.d.ts.map +1 -0
  177. package/dist/lib/mcp.js +477 -0
  178. package/dist/lib/mcp.js.map +1 -0
  179. package/dist/lib/model-updater.d.ts +51 -0
  180. package/dist/lib/model-updater.d.ts.map +1 -0
  181. package/dist/lib/model-updater.js +275 -0
  182. package/dist/lib/model-updater.js.map +1 -0
  183. package/dist/lib/parser.d.ts +9 -0
  184. package/dist/lib/parser.d.ts.map +1 -0
  185. package/dist/lib/parser.js +197 -0
  186. package/dist/lib/parser.js.map +1 -0
  187. package/dist/lib/registry.d.ts +183 -0
  188. package/dist/lib/registry.d.ts.map +1 -0
  189. package/dist/lib/registry.js +786 -0
  190. package/dist/lib/registry.js.map +1 -0
  191. package/dist/lib/rpc-server.d.ts +78 -0
  192. package/dist/lib/rpc-server.d.ts.map +1 -0
  193. package/dist/lib/rpc-server.js +404 -0
  194. package/dist/lib/rpc-server.js.map +1 -0
  195. package/dist/lib/security.d.ts +120 -0
  196. package/dist/lib/security.d.ts.map +1 -0
  197. package/dist/lib/security.js +478 -0
  198. package/dist/lib/security.js.map +1 -0
  199. package/dist/lib/validation.d.ts +106 -0
  200. package/dist/lib/validation.d.ts.map +1 -0
  201. package/dist/lib/validation.js +398 -0
  202. package/dist/lib/validation.js.map +1 -0
  203. package/dist/lib/version.d.ts +29 -0
  204. package/dist/lib/version.d.ts.map +1 -0
  205. package/dist/lib/version.js +202 -0
  206. package/dist/lib/version.js.map +1 -0
  207. package/dist/lib/workflow-engine.d.ts +161 -0
  208. package/dist/lib/workflow-engine.d.ts.map +1 -0
  209. package/dist/lib/workflow-engine.js +422 -0
  210. package/dist/lib/workflow-engine.js.map +1 -0
  211. package/dist/lib/workflow.d.ts +102 -0
  212. package/dist/lib/workflow.d.ts.map +1 -0
  213. package/dist/lib/workflow.js +228 -0
  214. package/dist/lib/workflow.js.map +1 -0
  215. package/dist/server.d.ts +8 -0
  216. package/dist/server.d.ts.map +1 -0
  217. package/dist/server.js +134 -0
  218. package/dist/server.js.map +1 -0
  219. package/dist/types/index.d.ts +116 -0
  220. package/dist/types/index.d.ts.map +1 -0
  221. package/dist/types/index.js +144 -0
  222. package/dist/types/index.js.map +1 -0
  223. package/package.json +104 -0
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createInitCommand = createInitCommand;
37
+ const commander_1 = require("commander");
38
+ const fs = __importStar(require("fs-extra"));
39
+ const path = __importStar(require("path"));
40
+ const readline = __importStar(require("readline"));
41
+ function createInitCommand() {
42
+ const initCommand = new commander_1.Command('init');
43
+ initCommand
44
+ .description('Initialize a new Prompd project with prompd.json')
45
+ .argument('[path]', 'Project directory (default: current directory)', '.')
46
+ .option('--name <name>', 'Project name (default: directory name)')
47
+ .option('--version <version>', 'Initial version (default: 1.0.0)')
48
+ .option('--description <description>', 'Project description')
49
+ .option('--author <author>', 'Project author')
50
+ .action(async (projectPath, options) => {
51
+ try {
52
+ await initProject(projectPath, options);
53
+ }
54
+ catch (error) {
55
+ if (error instanceof Error) {
56
+ console.error(`ERROR: Failed to initialize project: ${error.message}`);
57
+ }
58
+ else {
59
+ console.error('ERROR: Failed to initialize project');
60
+ }
61
+ process.exit(1);
62
+ }
63
+ });
64
+ return initCommand;
65
+ }
66
+ async function initProject(projectPath, options) {
67
+ // Resolve absolute path
68
+ const absPath = path.resolve(projectPath);
69
+ // Create directory if it doesn't exist
70
+ if (!await fs.pathExists(absPath)) {
71
+ await fs.mkdirs(absPath);
72
+ console.log(`✓ Created directory: ${absPath}`);
73
+ }
74
+ // Check if prompd.json already exists
75
+ const manifestPath = path.join(absPath, 'prompd.json');
76
+ if (await fs.pathExists(manifestPath)) {
77
+ console.log(`Warning: prompd.json already exists in ${absPath}`);
78
+ const shouldOverwrite = await promptYesNo('Overwrite? (y/N): ');
79
+ if (!shouldOverwrite) {
80
+ console.log('Aborted');
81
+ return;
82
+ }
83
+ }
84
+ // Generate smart defaults
85
+ let name = options.name;
86
+ if (!name) {
87
+ name = path.basename(absPath);
88
+ name = name.toLowerCase();
89
+ name = name.replace(/\s+/g, '-');
90
+ name = name.replace(/_/g, '-');
91
+ }
92
+ const version = options.version || '1.0.0';
93
+ const description = options.description || `Prompd project: ${name}`;
94
+ const author = options.author || 'unknown';
95
+ // Create manifest data
96
+ const manifest = {
97
+ name,
98
+ version,
99
+ description,
100
+ author,
101
+ files: [
102
+ '*.prmd',
103
+ '*.md',
104
+ 'templates/',
105
+ 'docs/',
106
+ 'examples/'
107
+ ],
108
+ ignore: [
109
+ '*.log',
110
+ '*.tmp',
111
+ '.env*'
112
+ ],
113
+ dependencies: {},
114
+ devDependencies: {}
115
+ };
116
+ // Write prompd.json
117
+ await fs.writeJSON(manifestPath, manifest, { spaces: 2 });
118
+ console.log('✓ Created prompd.json');
119
+ console.log(`✓ Initialized Prompd project: ${name}`);
120
+ // Create a sample .prmd file if none exists
121
+ const prmdFiles = await fs.readdir(absPath);
122
+ const hasPrmd = prmdFiles.some(f => f.endsWith('.prmd'));
123
+ if (!hasPrmd) {
124
+ const samplePath = path.join(absPath, 'example.prmd');
125
+ const sampleContent = `---
126
+ id: ${name}-example
127
+ name: ${name} Example
128
+ version: ${version}
129
+ description: Example prompt for ${name}
130
+ parameters:
131
+ - name: name
132
+ type: string
133
+ required: true
134
+ description: Name to greet
135
+ ---
136
+
137
+ # System
138
+ You are a helpful assistant.
139
+
140
+ # User
141
+ Hello {name}! Welcome to ${name}.
142
+
143
+ This is an example .prmd file to get you started.
144
+
145
+ ## Usage
146
+ \`\`\`bash
147
+ prompd run example.prmd --provider openai --model gpt-4o -p name="World"
148
+ \`\`\`
149
+ `;
150
+ await fs.writeFile(samplePath, sampleContent, 'utf-8');
151
+ console.log('✓ Created example.prmd');
152
+ }
153
+ // Print success message
154
+ console.log('\nProject initialized!');
155
+ console.log(` Directory: ${absPath}`);
156
+ console.log(` Name: ${name}`);
157
+ console.log(` Version: ${version}`);
158
+ console.log('\nNext steps:');
159
+ if (absPath !== process.cwd()) {
160
+ console.log(` cd ${path.basename(absPath)}`);
161
+ }
162
+ console.log(' prompd validate example.prmd');
163
+ console.log(` prompd pack . -o ${name}-${version}.pdpkg`);
164
+ }
165
+ function promptYesNo(question) {
166
+ const rl = readline.createInterface({
167
+ input: process.stdin,
168
+ output: process.stdout
169
+ });
170
+ return new Promise((resolve) => {
171
+ rl.question(question, (answer) => {
172
+ rl.close();
173
+ resolve(answer.toLowerCase() === 'y');
174
+ });
175
+ });
176
+ }
177
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createListCommand(): Command;
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,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,iBAAiB,IAAI,OAAO,CA6F3C"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createListCommand = createListCommand;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const path = __importStar(require("path"));
43
+ const glob_1 = require("glob");
44
+ const parser_1 = require("../lib/parser");
45
+ function createListCommand() {
46
+ const command = new commander_1.Command('list');
47
+ command
48
+ .description('List available .prmd files')
49
+ .option('-p, --path <path>', 'Directory to search for .prmd files', '.')
50
+ .option('-d, --detailed', 'Show detailed information')
51
+ .action(async (options) => {
52
+ try {
53
+ const searchPath = path.resolve(options.path);
54
+ const pattern = path.join(searchPath, '**/*.prmd').replace(/\\/g, '/');
55
+ const files = await (0, glob_1.glob)(pattern);
56
+ if (files.length === 0) {
57
+ console.log(`No .prmd files found in ${searchPath}`);
58
+ return;
59
+ }
60
+ console.log(chalk_1.default.cyan(`Prompd files in ${searchPath}:\n`));
61
+ const parser = new parser_1.PrompdParser();
62
+ if (options.detailed) {
63
+ for (const file of files) {
64
+ try {
65
+ const prompd = await parser.parseFile(file);
66
+ const metadata = prompd.metadata;
67
+ console.log(chalk_1.default.blue('📄 ' + (metadata.name || path.basename(file, '.prmd'))));
68
+ console.log(chalk_1.default.gray(` File: ${file}`));
69
+ if (metadata.description) {
70
+ const desc = metadata.description.length > 60
71
+ ? metadata.description.substring(0, 57) + '...'
72
+ : metadata.description;
73
+ console.log(chalk_1.default.gray(` Desc: ${desc}`));
74
+ }
75
+ if (metadata.version) {
76
+ console.log(chalk_1.default.gray(` Ver: ${metadata.version}`));
77
+ }
78
+ if (metadata.parameters && metadata.parameters.length > 0) {
79
+ const paramNames = metadata.parameters.map(p => p.name).join(', ');
80
+ console.log(chalk_1.default.gray(` Params: ${paramNames}`));
81
+ }
82
+ console.log();
83
+ }
84
+ catch (error) {
85
+ console.log(chalk_1.default.red(`❌ ${file} (parse error)`));
86
+ console.log();
87
+ }
88
+ }
89
+ }
90
+ else {
91
+ // Simple table format
92
+ const maxNameWidth = Math.max(20, ...files.map(f => path.basename(f, '.prmd').length));
93
+ const maxPathWidth = Math.max(25, ...files.map(f => f.length));
94
+ console.log(chalk_1.default.cyan('Name'.padEnd(maxNameWidth)) + ' | ' +
95
+ chalk_1.default.cyan('File'.padEnd(maxPathWidth)) + ' | ' +
96
+ chalk_1.default.cyan('Description'));
97
+ console.log('-'.repeat(maxNameWidth + maxPathWidth + 50));
98
+ for (const file of files) {
99
+ try {
100
+ const prompd = await parser.parseFile(file);
101
+ const metadata = prompd.metadata;
102
+ const name = metadata.name || path.basename(file, '.prmd');
103
+ const desc = metadata.description
104
+ ? (metadata.description.length > 40 ? metadata.description.substring(0, 37) + '...' : metadata.description)
105
+ : '';
106
+ console.log(name.padEnd(maxNameWidth) + ' | ' +
107
+ file.padEnd(maxPathWidth) + ' | ' +
108
+ desc);
109
+ }
110
+ catch (error) {
111
+ const name = path.basename(file, '.prmd');
112
+ console.log(name.padEnd(maxNameWidth) + ' | ' +
113
+ file.padEnd(maxPathWidth) + ' | ' +
114
+ chalk_1.default.red('Error reading file'));
115
+ }
116
+ }
117
+ }
118
+ }
119
+ catch (error) {
120
+ console.error(chalk_1.default.red('Error listing files:'), error instanceof Error ? error.message : error);
121
+ process.exit(1);
122
+ }
123
+ });
124
+ return command;
125
+ }
126
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,8CA6FC;AApGD,yCAAoC;AACpC,kDAA0B;AAE1B,2CAA6B;AAC7B,+BAA4B;AAC5B,0CAA6C;AAE7C,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO;SACJ,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,qCAAqC,EAAE,GAAG,CAAC;SACvE,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,MAAM,IAAA,WAAI,EAAC,OAAO,CAAC,CAAC;YAElC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,KAAK,CAAC,CAAC,CAAC;YAE5D,MAAM,MAAM,GAAG,IAAI,qBAAY,EAAE,CAAC;YAElC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;wBAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;wBAEjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;wBAC5C,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;4BACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE;gCAC3C,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;gCAC/C,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;4BACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;wBAC9C,CAAC;wBACD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;4BACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC1D,CAAC;wBACD,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC1D,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC,CAAC;wBACtD,CAAC;wBACD,OAAO,CAAC,GAAG,EAAE,CAAC;oBAChB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAC,CAAC;wBAClD,OAAO,CAAC,GAAG,EAAE,CAAC;oBAChB,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,sBAAsB;gBACtB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACvF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAE/D,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,KAAK;oBAC/C,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,KAAK;oBAC/C,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAC1B,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC;gBAE1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;wBAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;wBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;wBAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW;4BAC/B,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;4BAC3G,CAAC,CAAC,EAAE,CAAC;wBAEP,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK;4BACjC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK;4BACjC,IAAI,CACL,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;wBAC1C,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK;4BACjC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK;4BACjC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAChC,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QAEH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createMCPCommand(): Command;
3
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,gBAAgB,IAAI,OAAO,CAkU1C"}
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createMCPCommand = createMCPCommand;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const fs = __importStar(require("fs-extra"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const mcp_1 = require("../lib/mcp");
46
+ const config_1 = require("../lib/config");
47
+ const security_1 = require("../lib/security");
48
+ function createMCPCommand() {
49
+ const command = new commander_1.Command('mcp');
50
+ command.description('Model Context Protocol (MCP) server operations');
51
+ // Start MCP server
52
+ const startCommand = new commander_1.Command('start');
53
+ startCommand
54
+ .description('Start MCP server to expose .prmd files as tools')
55
+ .option('-d, --directory <dir>', 'Directory containing .prmd files', '.')
56
+ .option('-t, --tool <name:file>', 'Register specific tool (format: name:file.prmd)', [])
57
+ .option('--execute', 'Execute prompts with LLM (default: return templates)')
58
+ .option('--provider <provider>', 'Default LLM provider when executing')
59
+ .option('--model <model>', 'Default model when executing')
60
+ .option('--api-key <key>', 'API key override')
61
+ .option('--allowed-tools <tools>', 'Comma-separated list of allowed tool names')
62
+ .option('--max-request-size <bytes>', 'Maximum request size in bytes', '10000')
63
+ .option('-v, --verbose', 'Enable verbose logging')
64
+ .action(async (options) => {
65
+ try {
66
+ console.log(chalk_1.default.cyan('Starting Prompd MCP Server...'));
67
+ // Load configuration
68
+ const configManager = config_1.ConfigManager.getInstance();
69
+ const config = await configManager.loadConfig();
70
+ // Prepare server config
71
+ const serverConfig = {
72
+ name: 'prompd-mcp-server',
73
+ version: '0.2.3',
74
+ execute: options.execute,
75
+ provider: options.provider || config.defaultProvider,
76
+ model: options.model || config.defaultModel,
77
+ apiKey: options.apiKey,
78
+ allowedTools: options.allowedTools ? options.allowedTools.split(',').map((t) => t.trim()) : undefined,
79
+ maxRequestSize: parseInt(options.maxRequestSize)
80
+ };
81
+ // Create and configure server
82
+ const server = new mcp_1.PrompdMCPServer(serverConfig);
83
+ // Register tools from directory
84
+ if (options.directory) {
85
+ console.log(chalk_1.default.blue(`Registering tools from: ${options.directory}`));
86
+ await server.registerDirectory(options.directory);
87
+ }
88
+ // Register specific tools
89
+ if (options.tool && options.tool.length > 0) {
90
+ for (const toolSpec of options.tool) {
91
+ const [name, file] = toolSpec.split(':');
92
+ if (!name || !file) {
93
+ console.error(chalk_1.default.red(`Invalid tool specification: ${toolSpec}. Use format 'name:file.prmd'`));
94
+ continue;
95
+ }
96
+ console.log(chalk_1.default.blue(`Registering tool: ${name} -> ${file}`));
97
+ await server.registerTool(name, file);
98
+ }
99
+ }
100
+ const registeredPrompts = server.getRegisteredPrompts();
101
+ const registeredWorkflows = server.getRegisteredWorkflows();
102
+ const totalTools = registeredPrompts.length + registeredWorkflows.length;
103
+ console.log(chalk_1.default.green(`✓ Registered ${totalTools} tools:`));
104
+ if (registeredPrompts.length > 0) {
105
+ console.log(chalk_1.default.blue(' Prompts:'));
106
+ for (const tool of registeredPrompts) {
107
+ console.log(chalk_1.default.gray(` - ${tool}`));
108
+ }
109
+ }
110
+ if (registeredWorkflows.length > 0) {
111
+ console.log(chalk_1.default.blue(' Workflows:'));
112
+ for (const tool of registeredWorkflows) {
113
+ console.log(chalk_1.default.gray(` - ${tool} (workflow)`));
114
+ }
115
+ }
116
+ if (options.execute) {
117
+ console.log(chalk_1.default.yellow(`⚡ Execution mode enabled (${serverConfig.provider}/${serverConfig.model})`));
118
+ }
119
+ else {
120
+ console.log(chalk_1.default.blue('📝 Template mode (returning rendered prompts)'));
121
+ }
122
+ console.log(chalk_1.default.cyan('MCP Server ready on stdio'));
123
+ console.log(chalk_1.default.gray('Waiting for MCP client connections...'));
124
+ if (options.verbose) {
125
+ console.log(chalk_1.default.gray('Server configuration:'));
126
+ console.log(chalk_1.default.gray(JSON.stringify(serverConfig, null, 2)));
127
+ }
128
+ // Start server
129
+ await server.start();
130
+ }
131
+ catch (error) {
132
+ console.error(chalk_1.default.red('Error starting MCP server:'), error instanceof Error ? error.message : error);
133
+ process.exit(1);
134
+ }
135
+ });
136
+ // Add tool registration
137
+ const addCommand = new commander_1.Command('add');
138
+ addCommand
139
+ .description('Add a .prmd file or workflow to MCP server configuration')
140
+ .argument('<type>', 'Type: "prompt" or "workflow"')
141
+ .argument('<name>', 'Tool name for MCP')
142
+ .argument('[file]', 'Path to .prmd or .prmdflow file (optional for workflows)')
143
+ .option('--config-file <file>', 'MCP configuration file', path.join(os.homedir(), '.prmd', 'mcp-config.json'))
144
+ .action(async (type, name, file, options) => {
145
+ if (type !== 'prompt' && type !== 'workflow') {
146
+ console.error(chalk_1.default.red('Error: type must be "prompt" or "workflow"'));
147
+ process.exit(1);
148
+ }
149
+ try {
150
+ let resolvedFile = file;
151
+ // Security: Sanitize name first
152
+ const sanitizedName = security_1.SecurityManager.sanitizeToolName(name);
153
+ // Handle workflow discovery if no file specified
154
+ if (type === 'workflow' && !file) {
155
+ // Look for a workflow with this name in common locations
156
+ const searchPaths = [
157
+ `./workflows/${sanitizedName}.prmdflow`,
158
+ `./${sanitizedName}.prmdflow`,
159
+ `./flows/${sanitizedName}.prmdflow`
160
+ ];
161
+ for (const searchPath of searchPaths) {
162
+ if (await fs.pathExists(searchPath)) {
163
+ resolvedFile = searchPath;
164
+ break;
165
+ }
166
+ }
167
+ if (!resolvedFile) {
168
+ console.error(chalk_1.default.red(`Workflow file not found. Tried: ${searchPaths.join(', ')}`));
169
+ console.log(chalk_1.default.yellow('Specify file path explicitly or ensure workflow exists in ./workflows/, ./flows/, or current directory'));
170
+ process.exit(1);
171
+ }
172
+ }
173
+ // Validate file exists
174
+ if (!resolvedFile || !await fs.pathExists(resolvedFile)) {
175
+ console.error(chalk_1.default.red(`File not found: ${resolvedFile}`));
176
+ process.exit(1);
177
+ }
178
+ // Validate file type matches
179
+ if (type === 'prompt' && !resolvedFile.endsWith('.prmd')) {
180
+ console.error(chalk_1.default.red('Prompt files must have .prmd extension'));
181
+ process.exit(1);
182
+ }
183
+ if (type === 'workflow' && !resolvedFile.endsWith('.prmdflow')) {
184
+ console.error(chalk_1.default.red('Workflow files must have .prmdflow extension'));
185
+ process.exit(1);
186
+ }
187
+ // Load or create config
188
+ const configPath = options?.configFile || path.join(os.homedir(), '.prmd', 'mcp-config.json');
189
+ await fs.ensureDir(path.dirname(configPath));
190
+ let mcpConfig = {};
191
+ if (await fs.pathExists(configPath)) {
192
+ mcpConfig = await fs.readJson(configPath);
193
+ }
194
+ if (!mcpConfig.tools) {
195
+ mcpConfig.tools = {};
196
+ }
197
+ // Add tool with sanitized name
198
+ mcpConfig.tools[sanitizedName] = {
199
+ type,
200
+ file: path.resolve(resolvedFile),
201
+ added: new Date().toISOString()
202
+ };
203
+ // Save config
204
+ await fs.writeJson(configPath, mcpConfig, { spaces: 2 });
205
+ console.log(chalk_1.default.green(`✓ Added ${type} '${sanitizedName}' -> ${resolvedFile}`));
206
+ console.log(chalk_1.default.gray(`Config saved to: ${configPath}`));
207
+ }
208
+ catch (error) {
209
+ console.error(chalk_1.default.red(`Error adding ${type}:`), error instanceof Error ? error.message : error);
210
+ process.exit(1);
211
+ }
212
+ });
213
+ // Remove tool
214
+ const removeCommand = new commander_1.Command('remove');
215
+ removeCommand
216
+ .description('Remove a tool from MCP server configuration')
217
+ .argument('<name>', 'Tool name to remove')
218
+ .option('--config-file <file>', 'MCP configuration file', path.join(os.homedir(), '.prmd', 'mcp-config.json'))
219
+ .action(async (name, options) => {
220
+ try {
221
+ const configPath = options.configFile;
222
+ if (!await fs.pathExists(configPath)) {
223
+ console.error(chalk_1.default.red(`Config file not found: ${configPath}`));
224
+ process.exit(1);
225
+ }
226
+ const mcpConfig = await fs.readJson(configPath);
227
+ if (!mcpConfig.tools || !mcpConfig.tools[name]) {
228
+ console.error(chalk_1.default.red(`Tool '${name}' not found in configuration`));
229
+ process.exit(1);
230
+ }
231
+ delete mcpConfig.tools[name];
232
+ await fs.writeJson(configPath, mcpConfig, { spaces: 2 });
233
+ console.log(chalk_1.default.green(`✓ Removed tool '${name}'`));
234
+ }
235
+ catch (error) {
236
+ console.error(chalk_1.default.red('Error removing tool:'), error instanceof Error ? error.message : error);
237
+ process.exit(1);
238
+ }
239
+ });
240
+ // List registered tools
241
+ const listCommand = new commander_1.Command('list');
242
+ listCommand
243
+ .description('List configured MCP tools')
244
+ .option('--config-file <file>', 'MCP configuration file', path.join(os.homedir(), '.prmd', 'mcp-config.json'))
245
+ .action(async (options) => {
246
+ try {
247
+ const configPath = options.configFile;
248
+ if (!await fs.pathExists(configPath)) {
249
+ console.log(chalk_1.default.yellow('No MCP configuration found'));
250
+ console.log(chalk_1.default.gray(`Expected at: ${configPath}`));
251
+ return;
252
+ }
253
+ const mcpConfig = await fs.readJson(configPath);
254
+ if (!mcpConfig.tools || Object.keys(mcpConfig.tools).length === 0) {
255
+ console.log(chalk_1.default.yellow('No tools configured'));
256
+ return;
257
+ }
258
+ console.log(chalk_1.default.cyan('Configured MCP Tools:'));
259
+ console.log();
260
+ for (const [name, toolConfig] of Object.entries(mcpConfig.tools)) {
261
+ const config = toolConfig;
262
+ const exists = await fs.pathExists(config.file);
263
+ const status = exists ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
264
+ console.log(`${status} ${chalk_1.default.bold(name)}`);
265
+ console.log(` File: ${config.file}`);
266
+ console.log(` Added: ${config.added || 'Unknown'}`);
267
+ console.log();
268
+ }
269
+ }
270
+ catch (error) {
271
+ console.error(chalk_1.default.red('Error listing tools:'), error instanceof Error ? error.message : error);
272
+ process.exit(1);
273
+ }
274
+ });
275
+ // Generate Claude Desktop config
276
+ const configCommand = new commander_1.Command('config');
277
+ configCommand
278
+ .description('Generate Claude Desktop MCP configuration')
279
+ .option('--config-file <file>', 'MCP configuration file', path.join(os.homedir(), '.prmd', 'mcp-config.json'))
280
+ .option('--output <file>', 'Output file for Claude Desktop config')
281
+ .option('--server-name <name>', 'MCP server name', 'prompd')
282
+ .action(async (options) => {
283
+ try {
284
+ const configPath = options.configFile;
285
+ if (!await fs.pathExists(configPath)) {
286
+ console.error(chalk_1.default.red(`Config file not found: ${configPath}`));
287
+ process.exit(1);
288
+ }
289
+ // Generate Claude Desktop MCP configuration
290
+ const claudeConfig = {
291
+ mcpServers: {
292
+ [options.serverName]: {
293
+ command: 'prompd',
294
+ args: ['mcp', 'start'],
295
+ env: {}
296
+ }
297
+ }
298
+ };
299
+ if (options.output) {
300
+ await fs.writeJson(options.output, claudeConfig, { spaces: 2 });
301
+ console.log(chalk_1.default.green(`✓ Claude Desktop config written to: ${options.output}`));
302
+ }
303
+ else {
304
+ console.log(chalk_1.default.cyan('Claude Desktop MCP Configuration:'));
305
+ console.log(JSON.stringify(claudeConfig, null, 2));
306
+ }
307
+ console.log();
308
+ console.log(chalk_1.default.yellow('To use with Claude Desktop:'));
309
+ console.log(chalk_1.default.gray('1. Add this configuration to your Claude Desktop settings'));
310
+ console.log(chalk_1.default.gray('2. Restart Claude Desktop'));
311
+ console.log(chalk_1.default.gray('3. Your .prmd files will be available as MCP tools'));
312
+ }
313
+ catch (error) {
314
+ console.error(chalk_1.default.red('Error generating config:'), error instanceof Error ? error.message : error);
315
+ process.exit(1);
316
+ }
317
+ });
318
+ // Add subcommands
319
+ command.addCommand(startCommand);
320
+ command.addCommand(addCommand);
321
+ command.addCommand(removeCommand);
322
+ command.addCommand(listCommand);
323
+ command.addCommand(configCommand);
324
+ return command;
325
+ }
326
+ //# sourceMappingURL=mcp.js.map