@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,440 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* File System Abstraction
|
|
4
|
+
*
|
|
5
|
+
* Provides an abstraction layer for file system operations in the compiler.
|
|
6
|
+
* This allows the compiler to work with in-memory file systems (for server-side
|
|
7
|
+
* compilation) or the actual file system (for CLI usage).
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
43
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
44
|
+
};
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.MemoryFileSystem = exports.NodeFileSystem = void 0;
|
|
47
|
+
exports.getDefaultFileSystem = getDefaultFileSystem;
|
|
48
|
+
const fs = __importStar(require("fs-extra"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const adm_zip_1 = __importDefault(require("adm-zip"));
|
|
51
|
+
/**
|
|
52
|
+
* Default file system implementation that uses Node.js fs module.
|
|
53
|
+
*/
|
|
54
|
+
class NodeFileSystem {
|
|
55
|
+
exists(filePath) {
|
|
56
|
+
return fs.existsSync(filePath);
|
|
57
|
+
}
|
|
58
|
+
readFile(filePath) {
|
|
59
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
60
|
+
}
|
|
61
|
+
isDirectory(filePath) {
|
|
62
|
+
return this.exists(filePath) && fs.statSync(filePath).isDirectory();
|
|
63
|
+
}
|
|
64
|
+
readdir(dirPath) {
|
|
65
|
+
return fs.readdirSync(dirPath);
|
|
66
|
+
}
|
|
67
|
+
resolve(...pathSegments) {
|
|
68
|
+
return path.resolve(...pathSegments);
|
|
69
|
+
}
|
|
70
|
+
dirname(filePath) {
|
|
71
|
+
return path.dirname(filePath);
|
|
72
|
+
}
|
|
73
|
+
join(...pathSegments) {
|
|
74
|
+
return path.join(...pathSegments);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.NodeFileSystem = NodeFileSystem;
|
|
78
|
+
/**
|
|
79
|
+
* In-memory file system for server-side compilation.
|
|
80
|
+
* Files are provided as a map of path -> content.
|
|
81
|
+
*/
|
|
82
|
+
class MemoryFileSystem {
|
|
83
|
+
constructor(files = {}) {
|
|
84
|
+
this.files = new Map();
|
|
85
|
+
// Normalize paths when adding initial files
|
|
86
|
+
for (const [path, content] of Object.entries(files)) {
|
|
87
|
+
this.addFile(path, content);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Add or update a file in the in-memory file system.
|
|
92
|
+
*/
|
|
93
|
+
addFile(filePath, content) {
|
|
94
|
+
this.files.set(this.normalizePath(filePath), content);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Add multiple files at once.
|
|
98
|
+
*/
|
|
99
|
+
addFiles(files) {
|
|
100
|
+
for (const [filePath, content] of Object.entries(files)) {
|
|
101
|
+
this.addFile(filePath, content);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exists(filePath) {
|
|
105
|
+
return this.files.has(this.normalizePath(filePath));
|
|
106
|
+
}
|
|
107
|
+
readFile(filePath) {
|
|
108
|
+
const normalizedPath = this.normalizePath(filePath);
|
|
109
|
+
const content = this.files.get(normalizedPath);
|
|
110
|
+
if (content === undefined) {
|
|
111
|
+
throw new Error(`File not found: ${filePath}`);
|
|
112
|
+
}
|
|
113
|
+
return content;
|
|
114
|
+
}
|
|
115
|
+
isDirectory(filePath) {
|
|
116
|
+
// In memory FS: treat as directory if any file starts with this path
|
|
117
|
+
const normalizedPath = this.normalizePath(filePath);
|
|
118
|
+
const dirPrefix = normalizedPath.endsWith('/') ? normalizedPath : normalizedPath + '/';
|
|
119
|
+
for (const file of this.files.keys()) {
|
|
120
|
+
if (file.startsWith(dirPrefix)) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
readdir(dirPath) {
|
|
127
|
+
const normalizedDir = this.normalizePath(dirPath);
|
|
128
|
+
const dirPrefix = normalizedDir.endsWith('/') ? normalizedDir : normalizedDir + '/';
|
|
129
|
+
const files = new Set();
|
|
130
|
+
for (const file of this.files.keys()) {
|
|
131
|
+
if (file.startsWith(dirPrefix)) {
|
|
132
|
+
// Get the relative path from the directory
|
|
133
|
+
const relativePath = file.substring(dirPrefix.length);
|
|
134
|
+
// Only include immediate children (not nested)
|
|
135
|
+
const slashIndex = relativePath.indexOf('/');
|
|
136
|
+
const fileName = slashIndex === -1 ? relativePath : relativePath.substring(0, slashIndex);
|
|
137
|
+
if (fileName) {
|
|
138
|
+
files.add(fileName);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return Array.from(files);
|
|
143
|
+
}
|
|
144
|
+
resolve(...pathSegments) {
|
|
145
|
+
return path.posix.join('/', ...pathSegments);
|
|
146
|
+
}
|
|
147
|
+
dirname(filePath) {
|
|
148
|
+
return path.posix.dirname(filePath);
|
|
149
|
+
}
|
|
150
|
+
join(...pathSegments) {
|
|
151
|
+
return path.posix.join(...pathSegments);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Validate package name against npm/semver standards.
|
|
155
|
+
* Prevents path traversal and injection attacks.
|
|
156
|
+
*/
|
|
157
|
+
validatePackageName(name) {
|
|
158
|
+
// Allow dots, hyphens, and alphanumeric in npm-style scoped packages
|
|
159
|
+
const pattern = /^@[a-z0-9.-]+\/[a-z0-9.-]+$/;
|
|
160
|
+
if (!pattern.test(name)) {
|
|
161
|
+
throw new Error(`Invalid package name: ${name}. Must match @namespace/package format.`);
|
|
162
|
+
}
|
|
163
|
+
// Additional security checks
|
|
164
|
+
if (name.includes('..') || name.includes('/./') || name.includes('//')) {
|
|
165
|
+
throw new Error(`Security violation: Invalid characters in package name: ${name}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Validate semantic version format.
|
|
170
|
+
*/
|
|
171
|
+
validateVersion(version) {
|
|
172
|
+
const semverPattern = /^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/;
|
|
173
|
+
if (!semverPattern.test(version)) {
|
|
174
|
+
throw new Error(`Invalid version format: ${version}. Must be semantic version (e.g., 1.0.0)`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Validate ZIP package structure before extraction.
|
|
179
|
+
* Prevents: zip bombs, path traversal, symlink attacks.
|
|
180
|
+
*/
|
|
181
|
+
validateZipStructure(zip) {
|
|
182
|
+
const entries = zip.getEntries();
|
|
183
|
+
let fileCount = 0;
|
|
184
|
+
let totalSize = 0;
|
|
185
|
+
for (const entry of entries) {
|
|
186
|
+
fileCount++;
|
|
187
|
+
totalSize += entry.header.size;
|
|
188
|
+
// Check file count limit
|
|
189
|
+
if (fileCount > MemoryFileSystem.MAX_FILE_COUNT) {
|
|
190
|
+
throw new Error(`Package contains too many files (max: ${MemoryFileSystem.MAX_FILE_COUNT})`);
|
|
191
|
+
}
|
|
192
|
+
// Check total size
|
|
193
|
+
if (totalSize > MemoryFileSystem.MAX_PACKAGE_SIZE) {
|
|
194
|
+
throw new Error(`Package too large (max: ${MemoryFileSystem.MAX_PACKAGE_SIZE} bytes)`);
|
|
195
|
+
}
|
|
196
|
+
// Validate entry path (security checks)
|
|
197
|
+
this.validateZipEntry(entry);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Validate a single ZIP entry for security issues.
|
|
202
|
+
*/
|
|
203
|
+
validateZipEntry(entry) {
|
|
204
|
+
const entryPath = entry.entryName;
|
|
205
|
+
// 1. Path traversal prevention
|
|
206
|
+
if (entryPath.includes('..') || entryPath.startsWith('/') || entryPath.startsWith('\\')) {
|
|
207
|
+
throw new Error(`Security violation: Path traversal attempt (${entryPath})`);
|
|
208
|
+
}
|
|
209
|
+
// 2. Absolute path prevention
|
|
210
|
+
if (path.isAbsolute(entryPath)) {
|
|
211
|
+
throw new Error(`Security violation: Absolute path (${entryPath})`);
|
|
212
|
+
}
|
|
213
|
+
// 3. File size limit
|
|
214
|
+
if (entry.header.size > MemoryFileSystem.MAX_FILE_SIZE) {
|
|
215
|
+
throw new Error(`File too large: ${entryPath} (${entry.header.size} bytes, max: ${MemoryFileSystem.MAX_FILE_SIZE})`);
|
|
216
|
+
}
|
|
217
|
+
// 4. Prevent null bytes in paths
|
|
218
|
+
if (entryPath.includes('\0')) {
|
|
219
|
+
throw new Error(`Security violation: Null byte in path (${entryPath})`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Add a package from a ZIP Buffer to the in-memory file system.
|
|
224
|
+
* Extracts the .pdpkg (ZIP) and stores all files with the package path prefix.
|
|
225
|
+
* SECURITY: Validates package name, version, and ZIP structure.
|
|
226
|
+
*
|
|
227
|
+
* @param packageName - Full package name (e.g., "@namespace/package-name")
|
|
228
|
+
* @param version - Package version (e.g., "1.0.0")
|
|
229
|
+
* @param packageBuffer - Buffer containing the .pdpkg (ZIP) file
|
|
230
|
+
*/
|
|
231
|
+
async addPackage(packageName, version, packageBuffer) {
|
|
232
|
+
// 1. VALIDATE INPUTS
|
|
233
|
+
this.validatePackageName(packageName);
|
|
234
|
+
this.validateVersion(version);
|
|
235
|
+
// 2. CHECK BUFFER SIZE
|
|
236
|
+
if (packageBuffer.length > MemoryFileSystem.MAX_PACKAGE_SIZE) {
|
|
237
|
+
throw new Error(`Package too large: ${packageBuffer.length} bytes (max: ${MemoryFileSystem.MAX_PACKAGE_SIZE})`);
|
|
238
|
+
}
|
|
239
|
+
// 3. OPEN AND VALIDATE ZIP STRUCTURE
|
|
240
|
+
const zip = new adm_zip_1.default(packageBuffer);
|
|
241
|
+
this.validateZipStructure(zip);
|
|
242
|
+
// 4. EXTRACT TO MEMORY
|
|
243
|
+
const packagePath = this.getPackagePath(packageName, version);
|
|
244
|
+
const entries = zip.getEntries();
|
|
245
|
+
for (const entry of entries) {
|
|
246
|
+
// Skip directories
|
|
247
|
+
if (entry.isDirectory) {
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
// Get file content
|
|
251
|
+
const content = entry.getData().toString('utf8');
|
|
252
|
+
const entryPath = entry.entryName;
|
|
253
|
+
// Build virtual path: /packages/@namespace/package@version/path/to/file
|
|
254
|
+
const filePath = this.join(packagePath, entryPath);
|
|
255
|
+
this.addFile(filePath, content);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Recursively load a directory's contents into the in-memory file system.
|
|
260
|
+
*
|
|
261
|
+
* @param sourceDir - Directory to read from disk
|
|
262
|
+
* @param targetPath - Virtual path in memory file system
|
|
263
|
+
*/
|
|
264
|
+
async loadDirectoryToMemory(sourceDir, targetPath) {
|
|
265
|
+
const entries = await fs.readdir(sourceDir);
|
|
266
|
+
for (const entry of entries) {
|
|
267
|
+
const sourcePath = path.join(sourceDir, entry);
|
|
268
|
+
const stat = await fs.stat(sourcePath);
|
|
269
|
+
if (stat.isDirectory()) {
|
|
270
|
+
// Recursively load subdirectories
|
|
271
|
+
const subTargetPath = this.join(targetPath, entry);
|
|
272
|
+
await this.loadDirectoryToMemory(sourcePath, subTargetPath);
|
|
273
|
+
}
|
|
274
|
+
else if (stat.isFile()) {
|
|
275
|
+
// Read file content and add to memory
|
|
276
|
+
const content = await fs.readFile(sourcePath, 'utf-8');
|
|
277
|
+
const filePath = this.join(targetPath, entry);
|
|
278
|
+
this.addFile(filePath, content);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Add a package from the registry to the in-memory file system.
|
|
284
|
+
* Downloads the package tarball and extracts it to memory.
|
|
285
|
+
*
|
|
286
|
+
* @param packageRef - Package reference (e.g., "@namespace/package@1.0.0")
|
|
287
|
+
* @param downloadFn - Optional function to download package, receives (packageName, version) and returns {tarball: Buffer, metadata: any}
|
|
288
|
+
*/
|
|
289
|
+
async addPackageFromRegistry(packageRef, downloadFn) {
|
|
290
|
+
// Parse package reference
|
|
291
|
+
const { packageName, version } = this.parsePackageReference(packageRef);
|
|
292
|
+
if (!downloadFn) {
|
|
293
|
+
throw new Error('downloadFn is required to fetch packages from registry. Pass RegistryClient.downloadPackageBuffer');
|
|
294
|
+
}
|
|
295
|
+
// Download package
|
|
296
|
+
const packageData = await downloadFn(packageName, version);
|
|
297
|
+
// Extract to memory
|
|
298
|
+
await this.addPackage(packageName, version, packageData.tarball);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get the virtual file system path for a package.
|
|
302
|
+
*
|
|
303
|
+
* @param packageName - Full package name (e.g., "@namespace/package-name")
|
|
304
|
+
* @param version - Package version (e.g., "1.0.0")
|
|
305
|
+
* @returns Virtual path (e.g., "/packages/@namespace/package-name@1.0.0")
|
|
306
|
+
*/
|
|
307
|
+
getPackagePath(packageName, version) {
|
|
308
|
+
return `/packages/${packageName}@${version}`;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Parse a package reference into name and version.
|
|
312
|
+
*
|
|
313
|
+
* @param packageRef - Package reference (e.g., "@namespace/package@1.0.0")
|
|
314
|
+
* @returns Object with packageName and version
|
|
315
|
+
*/
|
|
316
|
+
parsePackageReference(packageRef) {
|
|
317
|
+
// Handle scoped packages: @namespace/package@version
|
|
318
|
+
const match = packageRef.match(/^(@[^/]+\/[^@]+)@(.+)$/);
|
|
319
|
+
if (!match) {
|
|
320
|
+
throw new Error(`Invalid package reference: ${packageRef}. Expected format: @namespace/package@version`);
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
packageName: match[1],
|
|
324
|
+
version: match[2]
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Normalize path to use forward slashes and ensure consistency.
|
|
329
|
+
*/
|
|
330
|
+
normalizePath(filePath) {
|
|
331
|
+
// Convert backslashes to forward slashes
|
|
332
|
+
let normalized = filePath.replace(/\\/g, '/');
|
|
333
|
+
// Remove leading ./ if present
|
|
334
|
+
if (normalized.startsWith('./')) {
|
|
335
|
+
normalized = normalized.substring(2);
|
|
336
|
+
}
|
|
337
|
+
// Remove leading / for consistency (treat all paths as relative)
|
|
338
|
+
if (normalized.startsWith('/')) {
|
|
339
|
+
normalized = normalized.substring(1);
|
|
340
|
+
}
|
|
341
|
+
// Ensure no trailing slash for files
|
|
342
|
+
if (normalized.endsWith('/') && normalized.length > 1) {
|
|
343
|
+
normalized = normalized.substring(0, normalized.length - 1);
|
|
344
|
+
}
|
|
345
|
+
return normalized;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Get all files under a base path.
|
|
349
|
+
*
|
|
350
|
+
* @param basePath - Optional base path to filter files
|
|
351
|
+
* @returns Map of file paths to content
|
|
352
|
+
*/
|
|
353
|
+
getAllFiles(basePath) {
|
|
354
|
+
if (!basePath) {
|
|
355
|
+
return new Map(this.files);
|
|
356
|
+
}
|
|
357
|
+
const normalizedBase = this.normalizePath(basePath);
|
|
358
|
+
const prefix = normalizedBase.endsWith('/') ? normalizedBase : normalizedBase + '/';
|
|
359
|
+
const filtered = new Map();
|
|
360
|
+
for (const [filePath, content] of this.files.entries()) {
|
|
361
|
+
if (filePath.startsWith(prefix) || filePath === normalizedBase) {
|
|
362
|
+
filtered.set(filePath, content);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return filtered;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Calculate total size of files under base path.
|
|
369
|
+
*
|
|
370
|
+
* @param basePath - Base path to calculate size for
|
|
371
|
+
* @returns Object with size in bytes and file count
|
|
372
|
+
*/
|
|
373
|
+
getTotalSize(basePath) {
|
|
374
|
+
const files = this.getAllFiles(basePath);
|
|
375
|
+
let totalSize = 0;
|
|
376
|
+
for (const content of files.values()) {
|
|
377
|
+
totalSize += Buffer.byteLength(content, 'utf-8');
|
|
378
|
+
}
|
|
379
|
+
return {
|
|
380
|
+
size: totalSize,
|
|
381
|
+
files: files.size
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Create a .pdpkg tarball Buffer from in-memory files.
|
|
386
|
+
* Used for server-side package creation without disk writes.
|
|
387
|
+
* SECURITY: Scans for secrets before packing.
|
|
388
|
+
*
|
|
389
|
+
* @param basePath - Base path in memory filesystem (e.g., "/my-package")
|
|
390
|
+
* @param manifest - Package manifest.json content
|
|
391
|
+
* @param options - Optional filter for files
|
|
392
|
+
* @returns Buffer containing gzipped tarball
|
|
393
|
+
*/
|
|
394
|
+
async createPackageBuffer(basePath, manifest, options) {
|
|
395
|
+
// 1. Validate manifest
|
|
396
|
+
if (!manifest.name || !manifest.version || !manifest.description) {
|
|
397
|
+
throw new Error('Invalid manifest: missing required fields (name, version, description)');
|
|
398
|
+
}
|
|
399
|
+
// 2. Get all files from memory
|
|
400
|
+
const files = this.getAllFiles(basePath);
|
|
401
|
+
// 3. Scan for secrets in all files
|
|
402
|
+
const { SecurityManager } = await Promise.resolve().then(() => __importStar(require('../security')));
|
|
403
|
+
for (const [filePath, content] of files.entries()) {
|
|
404
|
+
const secretScan = await SecurityManager.scanForSecrets(content);
|
|
405
|
+
if (secretScan.hasSecrets) {
|
|
406
|
+
const types = secretScan.secrets.map(s => s.type).join(', ');
|
|
407
|
+
throw new Error(`Secrets detected in ${filePath}: ${types}`);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// 4. Create ZIP package (consistent with .pdpkg format)
|
|
411
|
+
const zip = new adm_zip_1.default();
|
|
412
|
+
// Add files to ZIP
|
|
413
|
+
for (const [filePath, content] of files.entries()) {
|
|
414
|
+
if (options?.filter && !options.filter(filePath)) {
|
|
415
|
+
continue; // Skip filtered files
|
|
416
|
+
}
|
|
417
|
+
const relativePath = filePath.startsWith(basePath)
|
|
418
|
+
? filePath.substring(basePath.length + 1)
|
|
419
|
+
: filePath;
|
|
420
|
+
// Add file to ZIP (AdmZip handles directory creation)
|
|
421
|
+
zip.addFile(relativePath, Buffer.from(content, 'utf-8'));
|
|
422
|
+
}
|
|
423
|
+
// Add manifest.json
|
|
424
|
+
zip.addFile('manifest.json', Buffer.from(JSON.stringify(manifest, null, 2), 'utf-8'));
|
|
425
|
+
// Return ZIP buffer
|
|
426
|
+
return zip.toBuffer();
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
exports.MemoryFileSystem = MemoryFileSystem;
|
|
430
|
+
// Security constants
|
|
431
|
+
MemoryFileSystem.MAX_PACKAGE_SIZE = 50 * 1024 * 1024; // 50MB
|
|
432
|
+
MemoryFileSystem.MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB per file
|
|
433
|
+
MemoryFileSystem.MAX_FILE_COUNT = 1000;
|
|
434
|
+
/**
|
|
435
|
+
* Get the default file system (Node.js fs).
|
|
436
|
+
*/
|
|
437
|
+
function getDefaultFileSystem() {
|
|
438
|
+
return new NodeFileSystem();
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=file-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../../src/lib/compiler/file-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic Claude API JSON Formatter
|
|
3
|
+
*
|
|
4
|
+
* Formats compiled prompts for Anthropic Claude API with system field and messages.
|
|
5
|
+
*/
|
|
6
|
+
import { OutputFormatter, CompiledPrompt } from '../types';
|
|
7
|
+
export declare class AnthropicFormatter implements OutputFormatter {
|
|
8
|
+
name: string;
|
|
9
|
+
fileExtension: string;
|
|
10
|
+
mimeType: string;
|
|
11
|
+
format(compiled: CompiledPrompt): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Extract a specific section from markdown content.
|
|
14
|
+
*/
|
|
15
|
+
private extractSection;
|
|
16
|
+
/**
|
|
17
|
+
* Remove a specific section from markdown content.
|
|
18
|
+
*/
|
|
19
|
+
private removeSection;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../src/lib/compiler/formatters/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE3D,qBAAa,kBAAmB,YAAW,eAAe;IACxD,IAAI,SAA6B;IACjC,aAAa,SAAW;IACxB,QAAQ,SAAsB;IAExB,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAqCvD;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,aAAa;CAsBtB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Anthropic Claude API JSON Formatter
|
|
4
|
+
*
|
|
5
|
+
* Formats compiled prompts for Anthropic Claude API with system field and messages.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.AnthropicFormatter = void 0;
|
|
9
|
+
class AnthropicFormatter {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.name = 'provider-json:anthropic';
|
|
12
|
+
this.fileExtension = '.json';
|
|
13
|
+
this.mimeType = 'application/json';
|
|
14
|
+
}
|
|
15
|
+
async format(compiled) {
|
|
16
|
+
let systemMessage;
|
|
17
|
+
let userMessage = compiled.content || '';
|
|
18
|
+
// Extract system message if present
|
|
19
|
+
if (compiled.content && compiled.content.includes('## System')) {
|
|
20
|
+
const systemContent = this.extractSection(compiled.content, 'System');
|
|
21
|
+
if (systemContent) {
|
|
22
|
+
systemMessage = systemContent;
|
|
23
|
+
userMessage = this.removeSection(compiled.content, 'System');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Add extracted contexts to user message
|
|
27
|
+
if (compiled.contexts && compiled.contexts.length > 0) {
|
|
28
|
+
const contextContent = compiled.contexts.join('\n\n');
|
|
29
|
+
userMessage = `${contextContent}\n\n${userMessage}`;
|
|
30
|
+
}
|
|
31
|
+
const apiRequest = {
|
|
32
|
+
model: 'claude-3-sonnet-20240229',
|
|
33
|
+
messages: [
|
|
34
|
+
{
|
|
35
|
+
role: 'user',
|
|
36
|
+
content: userMessage.trim()
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
};
|
|
40
|
+
// Only add system field if we have system content
|
|
41
|
+
if (systemMessage) {
|
|
42
|
+
apiRequest.system = systemMessage;
|
|
43
|
+
}
|
|
44
|
+
return JSON.stringify(apiRequest, null, 2);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Extract a specific section from markdown content.
|
|
48
|
+
*/
|
|
49
|
+
extractSection(content, sectionName) {
|
|
50
|
+
const lines = content.split('\n');
|
|
51
|
+
let inSection = false;
|
|
52
|
+
const sectionContent = [];
|
|
53
|
+
for (const line of lines) {
|
|
54
|
+
const trimmed = line.trim();
|
|
55
|
+
if (trimmed === `## ${sectionName}`) {
|
|
56
|
+
inSection = true;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
else if (trimmed.startsWith('## ') && inSection) {
|
|
60
|
+
break; // Reached next section
|
|
61
|
+
}
|
|
62
|
+
else if (inSection) {
|
|
63
|
+
sectionContent.push(line);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (sectionContent.length === 0) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
return sectionContent.join('\n').trim();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Remove a specific section from markdown content.
|
|
73
|
+
*/
|
|
74
|
+
removeSection(content, sectionName) {
|
|
75
|
+
const lines = content.split('\n');
|
|
76
|
+
let inSection = false;
|
|
77
|
+
const resultLines = [];
|
|
78
|
+
for (const line of lines) {
|
|
79
|
+
const trimmed = line.trim();
|
|
80
|
+
if (trimmed === `## ${sectionName}`) {
|
|
81
|
+
inSection = true;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
else if (trimmed.startsWith('## ') && inSection) {
|
|
85
|
+
inSection = false;
|
|
86
|
+
}
|
|
87
|
+
if (!inSection) {
|
|
88
|
+
resultLines.push(line);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return resultLines.join('\n').trim();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.AnthropicFormatter = AnthropicFormatter;
|
|
95
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../../src/lib/compiler/formatters/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown Output Formatter
|
|
3
|
+
*
|
|
4
|
+
* Formats compiled prompts as human-readable markdown with optional YAML frontmatter.
|
|
5
|
+
*/
|
|
6
|
+
import { OutputFormatter, CompiledPrompt } from '../types';
|
|
7
|
+
export declare class MarkdownFormatter implements OutputFormatter {
|
|
8
|
+
name: string;
|
|
9
|
+
fileExtension: string;
|
|
10
|
+
mimeType: string;
|
|
11
|
+
format(compiled: CompiledPrompt): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Clean metadata dictionary for YAML display, converting complex objects to strings.
|
|
14
|
+
*/
|
|
15
|
+
private cleanMetadataForDisplay;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../../src/lib/compiler/formatters/markdown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE3D,qBAAa,iBAAkB,YAAW,eAAe;IACvD,IAAI,SAAc;IAClB,aAAa,SAAS;IACtB,QAAQ,SAAmB;IAErB,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCvD;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAgChC"}
|