@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.
- package/README.md +162 -0
- package/bin/prompd.js +23 -0
- package/dist/commands/cache.d.ts +3 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +199 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/compile.d.ts +9 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +104 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +212 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +183 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/deps.d.ts +3 -0
- package/dist/commands/deps.d.ts.map +1 -0
- package/dist/commands/deps.js +192 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/explain.d.ts +3 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +227 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/git.d.ts +3 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +306 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +177 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +126 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +326 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/namespace.d.ts +3 -0
- package/dist/commands/namespace.d.ts.map +1 -0
- package/dist/commands/namespace.js +113 -0
- package/dist/commands/namespace.js.map +1 -0
- package/dist/commands/package.d.ts +23 -0
- package/dist/commands/package.d.ts.map +1 -0
- package/dist/commands/package.js +746 -0
- package/dist/commands/package.js.map +1 -0
- package/dist/commands/provider.d.ts +3 -0
- package/dist/commands/provider.d.ts.map +1 -0
- package/dist/commands/provider.js +285 -0
- package/dist/commands/provider.js.map +1 -0
- package/dist/commands/registry.d.ts +9 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +361 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +157 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/show.d.ts +3 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +90 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +95 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +57 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/version.d.ts +3 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +166 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +388 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +164 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +388 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/compiler/file-system.d.ts +178 -0
- package/dist/lib/compiler/file-system.d.ts.map +1 -0
- package/dist/lib/compiler/file-system.js +440 -0
- package/dist/lib/compiler/file-system.js.map +1 -0
- package/dist/lib/compiler/formatters/anthropic.d.ts +21 -0
- package/dist/lib/compiler/formatters/anthropic.d.ts.map +1 -0
- package/dist/lib/compiler/formatters/anthropic.js +95 -0
- package/dist/lib/compiler/formatters/anthropic.js.map +1 -0
- package/dist/lib/compiler/formatters/markdown.d.ts +17 -0
- package/dist/lib/compiler/formatters/markdown.d.ts.map +1 -0
- package/dist/lib/compiler/formatters/markdown.js +114 -0
- package/dist/lib/compiler/formatters/markdown.js.map +1 -0
- package/dist/lib/compiler/formatters/openai.d.ts +21 -0
- package/dist/lib/compiler/formatters/openai.d.ts.map +1 -0
- package/dist/lib/compiler/formatters/openai.js +98 -0
- package/dist/lib/compiler/formatters/openai.js.map +1 -0
- package/dist/lib/compiler/index.d.ts +56 -0
- package/dist/lib/compiler/index.d.ts.map +1 -0
- package/dist/lib/compiler/index.js +165 -0
- package/dist/lib/compiler/index.js.map +1 -0
- package/dist/lib/compiler/language-map.d.ts +31 -0
- package/dist/lib/compiler/language-map.d.ts.map +1 -0
- package/dist/lib/compiler/language-map.js +156 -0
- package/dist/lib/compiler/language-map.js.map +1 -0
- package/dist/lib/compiler/package-resolver.d.ts +68 -0
- package/dist/lib/compiler/package-resolver.d.ts.map +1 -0
- package/dist/lib/compiler/package-resolver.js +254 -0
- package/dist/lib/compiler/package-resolver.js.map +1 -0
- package/dist/lib/compiler/pipeline.d.ts +53 -0
- package/dist/lib/compiler/pipeline.d.ts.map +1 -0
- package/dist/lib/compiler/pipeline.js +209 -0
- package/dist/lib/compiler/pipeline.js.map +1 -0
- package/dist/lib/compiler/prompd-loader.d.ts +108 -0
- package/dist/lib/compiler/prompd-loader.d.ts.map +1 -0
- package/dist/lib/compiler/prompd-loader.js +270 -0
- package/dist/lib/compiler/prompd-loader.js.map +1 -0
- package/dist/lib/compiler/section-override.d.ts +40 -0
- package/dist/lib/compiler/section-override.d.ts.map +1 -0
- package/dist/lib/compiler/section-override.js +296 -0
- package/dist/lib/compiler/section-override.js.map +1 -0
- package/dist/lib/compiler/stages/assets.d.ts +71 -0
- package/dist/lib/compiler/stages/assets.d.ts.map +1 -0
- package/dist/lib/compiler/stages/assets.js +456 -0
- package/dist/lib/compiler/stages/assets.js.map +1 -0
- package/dist/lib/compiler/stages/codegen.d.ts +17 -0
- package/dist/lib/compiler/stages/codegen.d.ts.map +1 -0
- package/dist/lib/compiler/stages/codegen.js +64 -0
- package/dist/lib/compiler/stages/codegen.js.map +1 -0
- package/dist/lib/compiler/stages/dependency.d.ts +38 -0
- package/dist/lib/compiler/stages/dependency.d.ts.map +1 -0
- package/dist/lib/compiler/stages/dependency.js +307 -0
- package/dist/lib/compiler/stages/dependency.js.map +1 -0
- package/dist/lib/compiler/stages/lexical.d.ts +19 -0
- package/dist/lib/compiler/stages/lexical.d.ts.map +1 -0
- package/dist/lib/compiler/stages/lexical.js +92 -0
- package/dist/lib/compiler/stages/lexical.js.map +1 -0
- package/dist/lib/compiler/stages/semantic.d.ts +20 -0
- package/dist/lib/compiler/stages/semantic.d.ts.map +1 -0
- package/dist/lib/compiler/stages/semantic.js +166 -0
- package/dist/lib/compiler/stages/semantic.js.map +1 -0
- package/dist/lib/compiler/stages/template.d.ts +94 -0
- package/dist/lib/compiler/stages/template.d.ts.map +1 -0
- package/dist/lib/compiler/stages/template.js +1044 -0
- package/dist/lib/compiler/stages/template.js.map +1 -0
- package/dist/lib/compiler/types.d.ts +200 -0
- package/dist/lib/compiler/types.d.ts.map +1 -0
- package/dist/lib/compiler/types.js +137 -0
- package/dist/lib/compiler/types.js.map +1 -0
- package/dist/lib/config.d.ts +29 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +375 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/errors.d.ts +19 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +47 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/executor.d.ts +18 -0
- package/dist/lib/executor.d.ts.map +1 -0
- package/dist/lib/executor.js +372 -0
- package/dist/lib/executor.js.map +1 -0
- package/dist/lib/git.d.ts +74 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +254 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/index.d.ts +43 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +108 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/mcp.d.ts +42 -0
- package/dist/lib/mcp.d.ts.map +1 -0
- package/dist/lib/mcp.js +477 -0
- package/dist/lib/mcp.js.map +1 -0
- package/dist/lib/model-updater.d.ts +51 -0
- package/dist/lib/model-updater.d.ts.map +1 -0
- package/dist/lib/model-updater.js +275 -0
- package/dist/lib/model-updater.js.map +1 -0
- package/dist/lib/parser.d.ts +9 -0
- package/dist/lib/parser.d.ts.map +1 -0
- package/dist/lib/parser.js +197 -0
- package/dist/lib/parser.js.map +1 -0
- package/dist/lib/registry.d.ts +183 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +786 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/rpc-server.d.ts +78 -0
- package/dist/lib/rpc-server.d.ts.map +1 -0
- package/dist/lib/rpc-server.js +404 -0
- package/dist/lib/rpc-server.js.map +1 -0
- package/dist/lib/security.d.ts +120 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +478 -0
- package/dist/lib/security.js.map +1 -0
- package/dist/lib/validation.d.ts +106 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +398 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/version.d.ts +29 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +202 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/lib/workflow-engine.d.ts +161 -0
- package/dist/lib/workflow-engine.d.ts.map +1 -0
- package/dist/lib/workflow-engine.js +422 -0
- package/dist/lib/workflow-engine.js.map +1 -0
- package/dist/lib/workflow.d.ts +102 -0
- package/dist/lib/workflow.d.ts.map +1 -0
- package/dist/lib/workflow.js +228 -0
- package/dist/lib/workflow.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +134 -0
- package/dist/server.js.map +1 -0
- package/dist/types/index.d.ts +116 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +144 -0
- package/dist/types/index.js.map +1 -0
- 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,8CAwBC;AApCD,yCAAoC;AACpC,6CAA+B;AAC/B,2CAA6B;AAC7B,mDAAqC;AASrC,SAAgB,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC,CAAC;IAExC,WAAW;SACR,WAAW,CAAC,kDAAkD,CAAC;SAC/D,QAAQ,CAAC,QAAQ,EAAE,gDAAgD,EAAE,GAAG,CAAC;SACzE,MAAM,CAAC,eAAe,EAAE,wCAAwC,CAAC;SACjE,MAAM,CAAC,qBAAqB,EAAE,kCAAkC,CAAC;SACjE,MAAM,CAAC,6BAA6B,EAAE,qBAAqB,CAAC;SAC5D,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,OAAoB,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,wCAAwC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,OAAoB;IAClE,wBAAwB;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1C,uCAAuC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,sCAAsC;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACvD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;QACjE,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAChE,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,mBAAmB,IAAI,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;IAE3C,uBAAuB;IACvB,MAAM,QAAQ,GAAG;QACf,IAAI;QACJ,OAAO;QACP,WAAW;QACX,MAAM;QACN,KAAK,EAAE;YACL,QAAQ;YACR,MAAM;YACN,YAAY;YACZ,OAAO;YACP,WAAW;SACZ;QACD,MAAM,EAAE;YACN,OAAO;YACP,OAAO;YACP,OAAO;SACR;QACD,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;KACpB,CAAC;IAEF,oBAAoB;IACpB,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IAErD,4CAA4C;IAC5C,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG;MACpB,IAAI;QACF,IAAI;WACD,OAAO;kCACgB,IAAI;;;;;;;;;;;;2BAYX,IAAI;;;;;;;;CAQ9B,CAAC;QAEE,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,IAAI,OAAO,KAAK,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,IAAI,OAAO,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -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":"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"}
|
|
@@ -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
|