praisonai 1.2.2 → 1.2.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/dist/agent/simple.js +1 -1
- package/dist/cli/commands/auto.d.ts +12 -0
- package/dist/cli/commands/auto.js +109 -0
- package/dist/cli/commands/autonomy.d.ts +5 -0
- package/dist/cli/commands/autonomy.js +152 -0
- package/dist/cli/commands/cache.d.ts +9 -0
- package/dist/cli/commands/cache.js +143 -0
- package/dist/cli/commands/chat.d.ts +14 -0
- package/dist/cli/commands/chat.js +127 -0
- package/dist/cli/commands/checkpoints.d.ts +5 -0
- package/dist/cli/commands/checkpoints.js +236 -0
- package/dist/cli/commands/context.d.ts +11 -0
- package/dist/cli/commands/context.js +182 -0
- package/dist/cli/commands/cost.d.ts +5 -0
- package/dist/cli/commands/cost.js +146 -0
- package/dist/cli/commands/db.d.ts +9 -0
- package/dist/cli/commands/db.js +149 -0
- package/dist/cli/commands/eval.d.ts +17 -0
- package/dist/cli/commands/eval.js +247 -0
- package/dist/cli/commands/external-agents.d.ts +5 -0
- package/dist/cli/commands/external-agents.js +169 -0
- package/dist/cli/commands/fast-context.d.ts +5 -0
- package/dist/cli/commands/fast-context.js +126 -0
- package/dist/cli/commands/flow.d.ts +5 -0
- package/dist/cli/commands/flow.js +141 -0
- package/dist/cli/commands/git.d.ts +5 -0
- package/dist/cli/commands/git.js +178 -0
- package/dist/cli/commands/graph-rag.d.ts +9 -0
- package/dist/cli/commands/graph-rag.js +131 -0
- package/dist/cli/commands/guardrail.d.ts +11 -0
- package/dist/cli/commands/guardrail.js +156 -0
- package/dist/cli/commands/handoff.d.ts +9 -0
- package/dist/cli/commands/handoff.js +133 -0
- package/dist/cli/commands/help.d.ts +8 -0
- package/dist/cli/commands/help.js +167 -0
- package/dist/cli/commands/image.d.ts +13 -0
- package/dist/cli/commands/image.js +192 -0
- package/dist/cli/commands/interactive.d.ts +6 -0
- package/dist/cli/commands/interactive.js +79 -0
- package/dist/cli/commands/jobs.d.ts +5 -0
- package/dist/cli/commands/jobs.js +282 -0
- package/dist/cli/commands/knowledge.d.ts +9 -0
- package/dist/cli/commands/knowledge.js +226 -0
- package/dist/cli/commands/mcp.d.ts +9 -0
- package/dist/cli/commands/mcp.js +243 -0
- package/dist/cli/commands/memory.d.ts +10 -0
- package/dist/cli/commands/memory.js +198 -0
- package/dist/cli/commands/n8n.d.ts +5 -0
- package/dist/cli/commands/n8n.js +137 -0
- package/dist/cli/commands/observability.d.ts +9 -0
- package/dist/cli/commands/observability.js +145 -0
- package/dist/cli/commands/planning.d.ts +9 -0
- package/dist/cli/commands/planning.js +167 -0
- package/dist/cli/commands/prompt-expand.d.ts +11 -0
- package/dist/cli/commands/prompt-expand.js +100 -0
- package/dist/cli/commands/providers.d.ts +9 -0
- package/dist/cli/commands/providers.js +98 -0
- package/dist/cli/commands/query-rewrite.d.ts +12 -0
- package/dist/cli/commands/query-rewrite.js +102 -0
- package/dist/cli/commands/repo-map.d.ts +5 -0
- package/dist/cli/commands/repo-map.js +151 -0
- package/dist/cli/commands/reranker.d.ts +10 -0
- package/dist/cli/commands/reranker.js +144 -0
- package/dist/cli/commands/research.d.ts +12 -0
- package/dist/cli/commands/research.js +108 -0
- package/dist/cli/commands/router.d.ts +11 -0
- package/dist/cli/commands/router.js +142 -0
- package/dist/cli/commands/run.d.ts +14 -0
- package/dist/cli/commands/run.js +111 -0
- package/dist/cli/commands/sandbox.d.ts +5 -0
- package/dist/cli/commands/sandbox.js +135 -0
- package/dist/cli/commands/scheduler.d.ts +5 -0
- package/dist/cli/commands/scheduler.js +260 -0
- package/dist/cli/commands/session.d.ts +9 -0
- package/dist/cli/commands/session.js +238 -0
- package/dist/cli/commands/skills.d.ts +9 -0
- package/dist/cli/commands/skills.js +256 -0
- package/dist/cli/commands/telemetry.d.ts +9 -0
- package/dist/cli/commands/telemetry.js +146 -0
- package/dist/cli/commands/tools.d.ts +9 -0
- package/dist/cli/commands/tools.js +172 -0
- package/dist/cli/commands/vector.d.ts +10 -0
- package/dist/cli/commands/vector.js +171 -0
- package/dist/cli/commands/version.d.ts +8 -0
- package/dist/cli/commands/version.js +68 -0
- package/dist/cli/commands/voice.d.ts +10 -0
- package/dist/cli/commands/voice.js +162 -0
- package/dist/cli/commands/workflow.d.ts +13 -0
- package/dist/cli/commands/workflow.js +184 -0
- package/dist/cli/config/index.d.ts +6 -0
- package/dist/cli/config/index.js +22 -0
- package/dist/cli/config/load.d.ts +20 -0
- package/dist/cli/config/load.js +229 -0
- package/dist/cli/config/resolve.d.ts +28 -0
- package/dist/cli/config/resolve.js +70 -0
- package/dist/cli/config/schema.d.ts +15 -0
- package/dist/cli/config/schema.js +65 -0
- package/dist/cli/features/autonomy-mode.d.ts +98 -0
- package/dist/cli/features/autonomy-mode.js +266 -0
- package/dist/cli/features/background-jobs.d.ts +155 -0
- package/dist/cli/features/background-jobs.js +416 -0
- package/dist/cli/features/checkpoints.d.ts +126 -0
- package/dist/cli/features/checkpoints.js +288 -0
- package/dist/cli/features/cost-tracker.d.ts +101 -0
- package/dist/cli/features/cost-tracker.js +212 -0
- package/dist/cli/features/external-agents.d.ts +115 -0
- package/dist/cli/features/external-agents.js +294 -0
- package/dist/cli/features/fast-context.d.ts +126 -0
- package/dist/cli/features/fast-context.js +310 -0
- package/dist/cli/features/flow-display.d.ts +100 -0
- package/dist/cli/features/flow-display.js +254 -0
- package/dist/cli/features/git-integration.d.ts +138 -0
- package/dist/cli/features/git-integration.js +374 -0
- package/dist/cli/features/index.d.ts +17 -0
- package/dist/cli/features/index.js +102 -0
- package/dist/cli/features/interactive-tui.d.ts +114 -0
- package/dist/cli/features/interactive-tui.js +326 -0
- package/dist/cli/features/n8n-integration.d.ts +108 -0
- package/dist/cli/features/n8n-integration.js +296 -0
- package/dist/cli/features/repo-map.d.ts +101 -0
- package/dist/cli/features/repo-map.js +350 -0
- package/dist/cli/features/sandbox-executor.d.ts +89 -0
- package/dist/cli/features/sandbox-executor.js +314 -0
- package/dist/cli/features/scheduler.d.ts +111 -0
- package/dist/cli/features/scheduler.js +298 -0
- package/dist/cli/features/slash-commands.d.ts +77 -0
- package/dist/cli/features/slash-commands.js +316 -0
- package/dist/cli/index.d.ts +19 -15
- package/dist/cli/index.js +163 -123
- package/dist/cli/output/errors.d.ts +32 -0
- package/dist/cli/output/errors.js +72 -0
- package/dist/cli/output/index.d.ts +6 -0
- package/dist/cli/output/index.js +22 -0
- package/dist/cli/output/json.d.ts +17 -0
- package/dist/cli/output/json.js +54 -0
- package/dist/cli/output/pretty.d.ts +21 -0
- package/dist/cli/output/pretty.js +106 -0
- package/dist/cli/runtime/env.d.ts +12 -0
- package/dist/cli/runtime/env.js +49 -0
- package/dist/cli/runtime/exit.d.ts +11 -0
- package/dist/cli/runtime/exit.js +49 -0
- package/dist/cli/runtime/index.d.ts +6 -0
- package/dist/cli/runtime/index.js +22 -0
- package/dist/cli/runtime/lazy.d.ts +18 -0
- package/dist/cli/runtime/lazy.js +85 -0
- package/dist/cli/spec/cli-spec.d.ts +87 -0
- package/dist/cli/spec/cli-spec.js +478 -0
- package/dist/cli/spec/index.d.ts +4 -0
- package/dist/cli/spec/index.js +20 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +100 -7
- package/dist/memory/auto-memory.d.ts +136 -0
- package/dist/memory/auto-memory.js +301 -0
- package/dist/memory/file-memory.d.ts +88 -0
- package/dist/memory/file-memory.js +287 -0
- package/dist/memory/index.d.ts +2 -0
- package/dist/memory/index.js +11 -1
- package/dist/workflows/loop.d.ts +0 -0
- package/dist/workflows/loop.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Repo Map - Repository structure visualization and symbol extraction
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.RepoMap = exports.DEFAULT_IGNORE_PATTERNS = void 0;
|
|
40
|
+
exports.createRepoMap = createRepoMap;
|
|
41
|
+
exports.getRepoTree = getRepoTree;
|
|
42
|
+
/**
|
|
43
|
+
* Default ignore patterns
|
|
44
|
+
*/
|
|
45
|
+
exports.DEFAULT_IGNORE_PATTERNS = [
|
|
46
|
+
'node_modules',
|
|
47
|
+
'.git',
|
|
48
|
+
'dist',
|
|
49
|
+
'build',
|
|
50
|
+
'.next',
|
|
51
|
+
'.nuxt',
|
|
52
|
+
'coverage',
|
|
53
|
+
'.cache',
|
|
54
|
+
'__pycache__',
|
|
55
|
+
'.pytest_cache',
|
|
56
|
+
'venv',
|
|
57
|
+
'.venv',
|
|
58
|
+
'*.pyc',
|
|
59
|
+
'*.pyo',
|
|
60
|
+
'.DS_Store',
|
|
61
|
+
'Thumbs.db',
|
|
62
|
+
'*.log',
|
|
63
|
+
'*.lock'
|
|
64
|
+
];
|
|
65
|
+
/**
|
|
66
|
+
* RepoMap class for repository analysis
|
|
67
|
+
*/
|
|
68
|
+
class RepoMap {
|
|
69
|
+
constructor(config) {
|
|
70
|
+
this.config = {
|
|
71
|
+
maxDepth: 10,
|
|
72
|
+
ignorePatterns: exports.DEFAULT_IGNORE_PATTERNS,
|
|
73
|
+
includeSymbols: true,
|
|
74
|
+
maxFiles: 1000,
|
|
75
|
+
...config
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Generate repository map
|
|
80
|
+
*/
|
|
81
|
+
async generate() {
|
|
82
|
+
this.fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
|
|
83
|
+
this.path = await Promise.resolve().then(() => __importStar(require('path')));
|
|
84
|
+
const tree = await this.scanDirectory(this.config.rootPath, 0);
|
|
85
|
+
const { files, directories } = this.countItems(tree);
|
|
86
|
+
const symbols = this.config.includeSymbols ? this.collectSymbols(tree) : [];
|
|
87
|
+
return {
|
|
88
|
+
root: this.config.rootPath,
|
|
89
|
+
tree,
|
|
90
|
+
totalFiles: files,
|
|
91
|
+
totalDirectories: directories,
|
|
92
|
+
symbols,
|
|
93
|
+
summary: this.generateSummary(tree, files, directories, symbols.length)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Scan a directory recursively
|
|
98
|
+
*/
|
|
99
|
+
async scanDirectory(dirPath, depth) {
|
|
100
|
+
const relativePath = this.path.relative(this.config.rootPath, dirPath);
|
|
101
|
+
const stats = await this.fs.stat(dirPath);
|
|
102
|
+
const info = {
|
|
103
|
+
path: dirPath,
|
|
104
|
+
relativePath: relativePath || '.',
|
|
105
|
+
size: stats.size,
|
|
106
|
+
isDirectory: stats.isDirectory()
|
|
107
|
+
};
|
|
108
|
+
if (!stats.isDirectory() || depth >= (this.config.maxDepth || 10)) {
|
|
109
|
+
return info;
|
|
110
|
+
}
|
|
111
|
+
const entries = await this.fs.readdir(dirPath, { withFileTypes: true });
|
|
112
|
+
info.children = [];
|
|
113
|
+
for (const entry of entries) {
|
|
114
|
+
if (this.shouldIgnore(entry.name))
|
|
115
|
+
continue;
|
|
116
|
+
const entryPath = this.path.join(dirPath, entry.name);
|
|
117
|
+
if (entry.isDirectory()) {
|
|
118
|
+
const child = await this.scanDirectory(entryPath, depth + 1);
|
|
119
|
+
info.children.push(child);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const fileStats = await this.fs.stat(entryPath).catch(() => null);
|
|
123
|
+
if (!fileStats)
|
|
124
|
+
continue;
|
|
125
|
+
const fileInfo = {
|
|
126
|
+
path: entryPath,
|
|
127
|
+
relativePath: this.path.relative(this.config.rootPath, entryPath),
|
|
128
|
+
size: fileStats.size,
|
|
129
|
+
isDirectory: false
|
|
130
|
+
};
|
|
131
|
+
if (this.config.includeSymbols && this.isCodeFile(entry.name)) {
|
|
132
|
+
fileInfo.symbols = await this.extractSymbols(entryPath);
|
|
133
|
+
}
|
|
134
|
+
info.children.push(fileInfo);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Sort: directories first, then files alphabetically
|
|
138
|
+
info.children.sort((a, b) => {
|
|
139
|
+
if (a.isDirectory !== b.isDirectory) {
|
|
140
|
+
return a.isDirectory ? -1 : 1;
|
|
141
|
+
}
|
|
142
|
+
return a.relativePath.localeCompare(b.relativePath);
|
|
143
|
+
});
|
|
144
|
+
return info;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if path should be ignored
|
|
148
|
+
*/
|
|
149
|
+
shouldIgnore(name) {
|
|
150
|
+
for (const pattern of this.config.ignorePatterns || []) {
|
|
151
|
+
if (pattern.startsWith('*')) {
|
|
152
|
+
if (name.endsWith(pattern.slice(1)))
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
else if (name === pattern) {
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if file is a code file
|
|
163
|
+
*/
|
|
164
|
+
isCodeFile(name) {
|
|
165
|
+
const codeExtensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.java', '.rb', '.php'];
|
|
166
|
+
return codeExtensions.some(ext => name.endsWith(ext));
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Extract symbols from a file
|
|
170
|
+
*/
|
|
171
|
+
async extractSymbols(filePath) {
|
|
172
|
+
try {
|
|
173
|
+
const content = await this.fs.readFile(filePath, 'utf-8');
|
|
174
|
+
const ext = this.path.extname(filePath);
|
|
175
|
+
switch (ext) {
|
|
176
|
+
case '.ts':
|
|
177
|
+
case '.tsx':
|
|
178
|
+
case '.js':
|
|
179
|
+
case '.jsx':
|
|
180
|
+
return this.extractJSSymbols(content);
|
|
181
|
+
case '.py':
|
|
182
|
+
return this.extractPythonSymbols(content);
|
|
183
|
+
default:
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return [];
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Extract symbols from JavaScript/TypeScript
|
|
193
|
+
*/
|
|
194
|
+
extractJSSymbols(content) {
|
|
195
|
+
const symbols = [];
|
|
196
|
+
const lines = content.split('\n');
|
|
197
|
+
const patterns = [
|
|
198
|
+
{ regex: /^export\s+(?:async\s+)?function\s+(\w+)/m, type: 'function', exported: true },
|
|
199
|
+
{ regex: /^export\s+class\s+(\w+)/m, type: 'class', exported: true },
|
|
200
|
+
{ regex: /^export\s+interface\s+(\w+)/m, type: 'interface', exported: true },
|
|
201
|
+
{ regex: /^export\s+type\s+(\w+)/m, type: 'type', exported: true },
|
|
202
|
+
{ regex: /^export\s+const\s+(\w+)/m, type: 'variable', exported: true },
|
|
203
|
+
{ regex: /^(?:async\s+)?function\s+(\w+)/m, type: 'function' },
|
|
204
|
+
{ regex: /^class\s+(\w+)/m, type: 'class' },
|
|
205
|
+
{ regex: /^interface\s+(\w+)/m, type: 'interface' },
|
|
206
|
+
{ regex: /^type\s+(\w+)/m, type: 'type' },
|
|
207
|
+
{ regex: /^const\s+(\w+)\s*=/m, type: 'variable' },
|
|
208
|
+
];
|
|
209
|
+
for (let i = 0; i < lines.length; i++) {
|
|
210
|
+
const line = lines[i].trim();
|
|
211
|
+
for (const { regex, type, exported } of patterns) {
|
|
212
|
+
const match = line.match(regex);
|
|
213
|
+
if (match) {
|
|
214
|
+
symbols.push({
|
|
215
|
+
name: match[1],
|
|
216
|
+
type,
|
|
217
|
+
line: i + 1,
|
|
218
|
+
exported
|
|
219
|
+
});
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return symbols;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Extract symbols from Python
|
|
228
|
+
*/
|
|
229
|
+
extractPythonSymbols(content) {
|
|
230
|
+
const symbols = [];
|
|
231
|
+
const lines = content.split('\n');
|
|
232
|
+
const patterns = [
|
|
233
|
+
{ regex: /^def\s+(\w+)\s*\(/m, type: 'function' },
|
|
234
|
+
{ regex: /^async\s+def\s+(\w+)\s*\(/m, type: 'function' },
|
|
235
|
+
{ regex: /^class\s+(\w+)/m, type: 'class' },
|
|
236
|
+
];
|
|
237
|
+
for (let i = 0; i < lines.length; i++) {
|
|
238
|
+
const line = lines[i];
|
|
239
|
+
// Skip indented definitions (methods)
|
|
240
|
+
if (line.startsWith(' ') || line.startsWith('\t'))
|
|
241
|
+
continue;
|
|
242
|
+
for (const { regex, type } of patterns) {
|
|
243
|
+
const match = line.match(regex);
|
|
244
|
+
if (match) {
|
|
245
|
+
symbols.push({
|
|
246
|
+
name: match[1],
|
|
247
|
+
type,
|
|
248
|
+
line: i + 1
|
|
249
|
+
});
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return symbols;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Count files and directories
|
|
258
|
+
*/
|
|
259
|
+
countItems(tree) {
|
|
260
|
+
let files = 0;
|
|
261
|
+
let directories = 0;
|
|
262
|
+
const count = (node) => {
|
|
263
|
+
if (node.isDirectory) {
|
|
264
|
+
directories++;
|
|
265
|
+
for (const child of node.children || []) {
|
|
266
|
+
count(child);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
files++;
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
count(tree);
|
|
274
|
+
return { files, directories };
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Collect all symbols from tree
|
|
278
|
+
*/
|
|
279
|
+
collectSymbols(tree) {
|
|
280
|
+
const symbols = [];
|
|
281
|
+
const collect = (node) => {
|
|
282
|
+
if (node.symbols) {
|
|
283
|
+
symbols.push(...node.symbols);
|
|
284
|
+
}
|
|
285
|
+
for (const child of node.children || []) {
|
|
286
|
+
collect(child);
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
collect(tree);
|
|
290
|
+
return symbols;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Generate text summary
|
|
294
|
+
*/
|
|
295
|
+
generateSummary(tree, files, directories, symbolCount) {
|
|
296
|
+
const lines = [];
|
|
297
|
+
lines.push(`Repository: ${this.config.rootPath}`);
|
|
298
|
+
lines.push(`Files: ${files}, Directories: ${directories}, Symbols: ${symbolCount}`);
|
|
299
|
+
lines.push('');
|
|
300
|
+
lines.push(this.renderTree(tree, ''));
|
|
301
|
+
return lines.join('\n');
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Render tree as text
|
|
305
|
+
*/
|
|
306
|
+
renderTree(node, prefix) {
|
|
307
|
+
const lines = [];
|
|
308
|
+
const name = this.path.basename(node.path);
|
|
309
|
+
if (node.isDirectory) {
|
|
310
|
+
lines.push(`${prefix}${name}/`);
|
|
311
|
+
const children = node.children || [];
|
|
312
|
+
for (let i = 0; i < children.length; i++) {
|
|
313
|
+
const isLast = i === children.length - 1;
|
|
314
|
+
const childPrefix = prefix + (isLast ? '└── ' : '├── ');
|
|
315
|
+
const nextPrefix = prefix + (isLast ? ' ' : '│ ');
|
|
316
|
+
lines.push(this.renderTree(children[i], childPrefix).replace(childPrefix, ''));
|
|
317
|
+
// Add children lines with proper prefix
|
|
318
|
+
const childLines = this.renderTree(children[i], nextPrefix).split('\n').slice(1);
|
|
319
|
+
lines.push(...childLines);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
const symbolCount = node.symbols?.length || 0;
|
|
324
|
+
const symbolSuffix = symbolCount > 0 ? ` (${symbolCount} symbols)` : '';
|
|
325
|
+
lines.push(`${prefix}${name}${symbolSuffix}`);
|
|
326
|
+
}
|
|
327
|
+
return lines.join('\n');
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Get tree as simple text format
|
|
331
|
+
*/
|
|
332
|
+
async getTreeText() {
|
|
333
|
+
const result = await this.generate();
|
|
334
|
+
return result.summary;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
exports.RepoMap = RepoMap;
|
|
338
|
+
/**
|
|
339
|
+
* Create a repo map instance
|
|
340
|
+
*/
|
|
341
|
+
function createRepoMap(config) {
|
|
342
|
+
return new RepoMap(config);
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Quick function to get repo tree
|
|
346
|
+
*/
|
|
347
|
+
async function getRepoTree(rootPath, maxDepth) {
|
|
348
|
+
const map = createRepoMap({ rootPath, maxDepth, includeSymbols: false });
|
|
349
|
+
return map.getTreeText();
|
|
350
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox Executor - Safe command execution with restrictions
|
|
3
|
+
*/
|
|
4
|
+
export type SandboxMode = 'disabled' | 'basic' | 'strict' | 'network-isolated';
|
|
5
|
+
export interface SandboxConfig {
|
|
6
|
+
mode: SandboxMode;
|
|
7
|
+
allowedCommands?: string[];
|
|
8
|
+
blockedCommands?: string[];
|
|
9
|
+
blockedPaths?: string[];
|
|
10
|
+
timeout?: number;
|
|
11
|
+
maxOutputSize?: number;
|
|
12
|
+
cwd?: string;
|
|
13
|
+
env?: Record<string, string>;
|
|
14
|
+
}
|
|
15
|
+
export interface ExecutionResult {
|
|
16
|
+
success: boolean;
|
|
17
|
+
stdout: string;
|
|
18
|
+
stderr: string;
|
|
19
|
+
exitCode: number;
|
|
20
|
+
duration: number;
|
|
21
|
+
truncated?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default blocked commands (dangerous operations)
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_BLOCKED_COMMANDS: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Default blocked paths
|
|
29
|
+
*/
|
|
30
|
+
export declare const DEFAULT_BLOCKED_PATHS: string[];
|
|
31
|
+
/**
|
|
32
|
+
* Command validator
|
|
33
|
+
*/
|
|
34
|
+
export declare class CommandValidator {
|
|
35
|
+
private blockedCommands;
|
|
36
|
+
private blockedPaths;
|
|
37
|
+
private allowedCommands?;
|
|
38
|
+
constructor(config?: Partial<SandboxConfig>);
|
|
39
|
+
/**
|
|
40
|
+
* Validate a command
|
|
41
|
+
*/
|
|
42
|
+
validate(command: string): {
|
|
43
|
+
valid: boolean;
|
|
44
|
+
reason?: string;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Sandbox Executor class
|
|
49
|
+
*/
|
|
50
|
+
export declare class SandboxExecutor {
|
|
51
|
+
private config;
|
|
52
|
+
private validator;
|
|
53
|
+
constructor(config?: Partial<SandboxConfig>);
|
|
54
|
+
/**
|
|
55
|
+
* Execute a command in the sandbox
|
|
56
|
+
*/
|
|
57
|
+
execute(command: string): Promise<ExecutionResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Spawn the command
|
|
60
|
+
*/
|
|
61
|
+
private spawn;
|
|
62
|
+
/**
|
|
63
|
+
* Build environment variables based on sandbox mode
|
|
64
|
+
*/
|
|
65
|
+
private buildEnv;
|
|
66
|
+
/**
|
|
67
|
+
* Check if a command would be allowed
|
|
68
|
+
*/
|
|
69
|
+
wouldAllow(command: string): {
|
|
70
|
+
allowed: boolean;
|
|
71
|
+
reason?: string;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Get current sandbox mode
|
|
75
|
+
*/
|
|
76
|
+
getMode(): SandboxMode;
|
|
77
|
+
/**
|
|
78
|
+
* Update sandbox mode
|
|
79
|
+
*/
|
|
80
|
+
setMode(mode: SandboxMode): void;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create a sandbox executor
|
|
84
|
+
*/
|
|
85
|
+
export declare function createSandboxExecutor(config?: Partial<SandboxConfig>): SandboxExecutor;
|
|
86
|
+
/**
|
|
87
|
+
* Quick execute with default sandbox
|
|
88
|
+
*/
|
|
89
|
+
export declare function sandboxExec(command: string, config?: Partial<SandboxConfig>): Promise<ExecutionResult>;
|