erosolar-cli 1.7.79 → 1.7.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/agents/erosolar-code.rules.json +0 -5
  2. package/agents/general.rules.json +0 -5
  3. package/dist/bin/erosolar.js +2 -0
  4. package/dist/bin/erosolar.js.map +1 -1
  5. package/dist/capabilities/filesystemCapability.d.ts.map +1 -1
  6. package/dist/capabilities/filesystemCapability.js +1 -2
  7. package/dist/capabilities/filesystemCapability.js.map +1 -1
  8. package/dist/contracts/agent-schemas.json +12 -20
  9. package/dist/contracts/unified-schema.json +1 -1
  10. package/dist/core/agent.d.ts +3 -38
  11. package/dist/core/agent.d.ts.map +1 -1
  12. package/dist/core/agent.js +8 -283
  13. package/dist/core/agent.js.map +1 -1
  14. package/dist/core/contextManager.js +8 -8
  15. package/dist/core/contextManager.js.map +1 -1
  16. package/dist/core/errors/apiKeyErrors.js +1 -1
  17. package/dist/core/errors/apiKeyErrors.js.map +1 -1
  18. package/dist/core/isolatedVerifier.js +22 -274
  19. package/dist/core/isolatedVerifier.js.map +1 -1
  20. package/dist/core/modelDiscovery.d.ts.map +1 -1
  21. package/dist/core/modelDiscovery.js +28 -23
  22. package/dist/core/modelDiscovery.js.map +1 -1
  23. package/dist/core/secretStore.d.ts +0 -9
  24. package/dist/core/secretStore.d.ts.map +1 -1
  25. package/dist/core/secretStore.js +2 -52
  26. package/dist/core/secretStore.js.map +1 -1
  27. package/dist/core/types.d.ts +1 -9
  28. package/dist/core/types.d.ts.map +1 -1
  29. package/dist/headless/headlessApp.d.ts.map +1 -1
  30. package/dist/headless/headlessApp.js +0 -16
  31. package/dist/headless/headlessApp.js.map +1 -1
  32. package/dist/plugins/providers/google/index.js +2 -3
  33. package/dist/plugins/providers/google/index.js.map +1 -1
  34. package/dist/providers/anthropicProvider.d.ts.map +1 -1
  35. package/dist/providers/anthropicProvider.js +19 -76
  36. package/dist/providers/anthropicProvider.js.map +1 -1
  37. package/dist/providers/googleProvider.d.ts.map +1 -1
  38. package/dist/providers/googleProvider.js +1 -23
  39. package/dist/providers/googleProvider.js.map +1 -1
  40. package/dist/providers/openaiChatCompletionsProvider.d.ts +1 -2
  41. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -1
  42. package/dist/providers/openaiChatCompletionsProvider.js +4 -121
  43. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -1
  44. package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
  45. package/dist/providers/openaiResponsesProvider.js +18 -55
  46. package/dist/providers/openaiResponsesProvider.js.map +1 -1
  47. package/dist/runtime/agentController.d.ts +0 -4
  48. package/dist/runtime/agentController.d.ts.map +1 -1
  49. package/dist/runtime/agentController.js +3 -32
  50. package/dist/runtime/agentController.js.map +1 -1
  51. package/dist/security/persistence-research.d.ts +2 -0
  52. package/dist/security/persistence-research.d.ts.map +1 -1
  53. package/dist/security/persistence-research.js +2 -0
  54. package/dist/security/persistence-research.js.map +1 -1
  55. package/dist/security/security-testing-framework.d.ts +2 -0
  56. package/dist/security/security-testing-framework.d.ts.map +1 -1
  57. package/dist/security/security-testing-framework.js +2 -0
  58. package/dist/security/security-testing-framework.js.map +1 -1
  59. package/dist/shell/bracketedPasteManager.d.ts +5 -8
  60. package/dist/shell/bracketedPasteManager.d.ts.map +1 -1
  61. package/dist/shell/bracketedPasteManager.js +43 -27
  62. package/dist/shell/bracketedPasteManager.js.map +1 -1
  63. package/dist/shell/composableMessage.d.ts +1 -1
  64. package/dist/shell/composableMessage.js +2 -2
  65. package/dist/shell/composableMessage.js.map +1 -1
  66. package/dist/shell/inputProcessor.d.ts +55 -0
  67. package/dist/shell/inputProcessor.d.ts.map +1 -0
  68. package/dist/shell/inputProcessor.js +171 -0
  69. package/dist/shell/inputProcessor.js.map +1 -0
  70. package/dist/shell/interactiveShell.d.ts +48 -7
  71. package/dist/shell/interactiveShell.d.ts.map +1 -1
  72. package/dist/shell/interactiveShell.js +340 -172
  73. package/dist/shell/interactiveShell.js.map +1 -1
  74. package/dist/shell/shellApp.d.ts.map +1 -1
  75. package/dist/shell/shellApp.js +3 -54
  76. package/dist/shell/shellApp.js.map +1 -1
  77. package/dist/shell/systemPrompt.d.ts +1 -1
  78. package/dist/shell/systemPrompt.d.ts.map +1 -1
  79. package/dist/shell/systemPrompt.js +57 -15
  80. package/dist/shell/systemPrompt.js.map +1 -1
  81. package/dist/shell/updateManager.js +2 -4
  82. package/dist/shell/updateManager.js.map +1 -1
  83. package/dist/subagents/taskRunner.js +2 -2
  84. package/dist/subagents/taskRunner.js.map +1 -1
  85. package/dist/tools/cloudTools.d.ts +2 -0
  86. package/dist/tools/cloudTools.d.ts.map +1 -1
  87. package/dist/tools/cloudTools.js +2 -0
  88. package/dist/tools/cloudTools.js.map +1 -1
  89. package/dist/tools/fileTools.d.ts.map +1 -1
  90. package/dist/tools/fileTools.js +3 -31
  91. package/dist/tools/fileTools.js.map +1 -1
  92. package/dist/ui/ShellUIAdapter.d.ts +2 -10
  93. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  94. package/dist/ui/ShellUIAdapter.js +11 -123
  95. package/dist/ui/ShellUIAdapter.js.map +1 -1
  96. package/dist/ui/keyboardShortcuts.d.ts.map +1 -1
  97. package/dist/ui/keyboardShortcuts.js +2 -12
  98. package/dist/ui/keyboardShortcuts.js.map +1 -1
  99. package/dist/ui/persistentPrompt.d.ts +0 -24
  100. package/dist/ui/persistentPrompt.d.ts.map +1 -1
  101. package/dist/ui/persistentPrompt.js +4 -86
  102. package/dist/ui/persistentPrompt.js.map +1 -1
  103. package/dist/ui/toolDisplay.d.ts.map +1 -1
  104. package/dist/ui/toolDisplay.js +0 -652
  105. package/dist/ui/toolDisplay.js.map +1 -1
  106. package/package.json +10 -10
  107. package/dist/core/cliTestHarness.d.ts +0 -200
  108. package/dist/core/cliTestHarness.d.ts.map +0 -1
  109. package/dist/core/cliTestHarness.js +0 -549
  110. package/dist/core/cliTestHarness.js.map +0 -1
  111. package/dist/core/multilinePasteHandler.d.ts +0 -35
  112. package/dist/core/multilinePasteHandler.d.ts.map +0 -1
  113. package/dist/core/multilinePasteHandler.js +0 -80
  114. package/dist/core/multilinePasteHandler.js.map +0 -1
  115. package/dist/tools/exploreTools.d.ts +0 -7
  116. package/dist/tools/exploreTools.d.ts.map +0 -1
  117. package/dist/tools/exploreTools.js +0 -344
  118. package/dist/tools/exploreTools.js.map +0 -1
@@ -1,80 +0,0 @@
1
- /**
2
- * Handles multi-line paste detection and summarization
3
- * Provides graceful handling of large text blocks pasted into chat
4
- */
5
- /**
6
- * Detect if text is a multi-line paste (3+ lines)
7
- */
8
- export function isMultilinePaste(text) {
9
- const lines = text.split('\n').filter(line => line.trim().length > 0);
10
- return lines.length >= 3;
11
- }
12
- /**
13
- * Detect likely programming language from content
14
- */
15
- function detectLanguage(text) {
16
- const patterns = {
17
- javascript: /\b(const|let|var|function|async|await|import|export|=>)\b/,
18
- typescript: /\b(interface|type|enum|namespace|declare|as const)\b/,
19
- python: /\b(def|class|import|from|if __name__|async def)\b/,
20
- json: /^\s*[\{\[].*[\}\]]\s*$/,
21
- html: /^<[a-z]/i,
22
- css: /^\s*[\.#\[]?[\w\-]+\s*\{/,
23
- sql: /\b(SELECT|FROM|WHERE|INSERT|UPDATE|DELETE|CREATE|TABLE)\b/i,
24
- bash: /^#!/,
25
- yaml: /^[\w\-]+:\s*\S/m,
26
- };
27
- for (const [lang, pattern] of Object.entries(patterns)) {
28
- if (pattern.test(text)) {
29
- return lang;
30
- }
31
- }
32
- return undefined;
33
- }
34
- /**
35
- * Generate a concise summary of pasted content
36
- */
37
- export function generatePasteSummary(text) {
38
- const lines = text.split('\n');
39
- const nonEmptyLines = lines.filter(line => line.trim().length > 0);
40
- const charCount = text.length;
41
- const lineCount = nonEmptyLines.length;
42
- const language = detectLanguage(text);
43
- // Create preview: first 60 chars or first line
44
- let preview = nonEmptyLines[0]?.substring(0, 60) || '';
45
- if (preview.length === 60) {
46
- preview += '...';
47
- }
48
- // Generate summary description
49
- const summaryParts = [];
50
- if (language) {
51
- summaryParts.push(`${language.toUpperCase()}`);
52
- }
53
- summaryParts.push(`${lineCount} line${lineCount !== 1 ? 's' : ''}`);
54
- summaryParts.push(`${charCount} char${charCount !== 1 ? 's' : ''}`);
55
- const summary = `📋 Pasted: ${summaryParts.join(' • ')}`;
56
- return {
57
- isMultiline: true,
58
- lineCount,
59
- charCount,
60
- preview,
61
- language,
62
- summary,
63
- };
64
- }
65
- /**
66
- * Format a paste summary for display
67
- */
68
- export function formatPasteSummaryForDisplay(summary) {
69
- return `${summary.summary}\n"${summary.preview}"`;
70
- }
71
- export function processPaste(text) {
72
- const summary = generatePasteSummary(text);
73
- const displaySummary = formatPasteSummaryForDisplay(summary);
74
- return {
75
- displaySummary,
76
- fullContent: text,
77
- metadata: summary,
78
- };
79
- }
80
- //# sourceMappingURL=multilinePasteHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multilinePasteHandler.js","sourceRoot":"","sources":["../../src/core/multilinePasteHandler.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { ToolDefinition } from '../core/toolRuntime.js';
2
- /**
3
- * Creates an Explore tool for efficient codebase discovery.
4
- * Single tool call to understand a repo's structure, purpose, and key files.
5
- */
6
- export declare function createExploreTools(workingDir: string): ToolDefinition[];
7
- //# sourceMappingURL=exploreTools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exploreTools.d.ts","sourceRoot":"","sources":["../../src/tools/exploreTools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAsEvE"}
@@ -1,344 +0,0 @@
1
- import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs';
2
- import { join, relative, extname } from 'node:path';
3
- /**
4
- * Creates an Explore tool for efficient codebase discovery.
5
- * Single tool call to understand a repo's structure, purpose, and key files.
6
- */
7
- export function createExploreTools(workingDir) {
8
- return [
9
- {
10
- name: 'explore',
11
- description: 'Efficiently gather codebase context in ONE call. Returns README, package info, structure, and entry points. Use for "what is this repo" questions instead of multiple read_file calls.',
12
- parameters: {
13
- type: 'object',
14
- properties: {
15
- question: {
16
- type: 'string',
17
- description: 'What you want to understand (e.g., "what does this repo do", "find auth code", "how is the API structured")',
18
- },
19
- depth: {
20
- type: 'string',
21
- enum: ['quick', 'normal', 'deep'],
22
- description: 'quick: README + package only (~500 tokens). normal: + structure + entry points (~1500 tokens). deep: + code samples (~3000 tokens).',
23
- },
24
- },
25
- additionalProperties: false,
26
- },
27
- handler: async (args) => {
28
- const depth = normalizeDepth(args['depth']);
29
- const question = typeof args['question'] === 'string' ? args['question'].toLowerCase() : '';
30
- // Determine focus from question
31
- const focus = extractFocusFromQuestion(question);
32
- const sections = [];
33
- // Always include README summary (truncated based on depth)
34
- const readmeLimit = depth === 'quick' ? 800 : depth === 'normal' ? 1200 : 2000;
35
- const readme = findAndSummarizeReadme(workingDir, readmeLimit);
36
- if (readme) {
37
- sections.push(`## README\n${readme}`);
38
- }
39
- // Always include package info
40
- const pkgInfo = getPackageInfo(workingDir);
41
- if (pkgInfo) {
42
- sections.push(`## Package\n${pkgInfo}`);
43
- }
44
- // Normal and deep: add structure
45
- if (depth !== 'quick') {
46
- const structure = getDirectoryStructure(workingDir, focus);
47
- sections.push(`## Structure\n${structure}`);
48
- // Find entry points
49
- const entryPoints = findEntryPoints(workingDir);
50
- if (entryPoints.length > 0) {
51
- sections.push(`## Entry Points\n${entryPoints.join('\n')}`);
52
- }
53
- }
54
- // Deep: add code samples
55
- if (depth === 'deep') {
56
- const samples = getCodeSamples(workingDir, focus);
57
- if (samples) {
58
- sections.push(`## Code Samples\n${samples}`);
59
- }
60
- }
61
- if (sections.length === 0) {
62
- return 'No information found. This may not be a standard code repository.';
63
- }
64
- return sections.join('\n\n');
65
- },
66
- },
67
- ];
68
- }
69
- /**
70
- * Extract focus area from natural language question
71
- */
72
- function extractFocusFromQuestion(question) {
73
- const focusPatterns = [
74
- [/\b(auth|authentication|login|session)\b/i, 'auth'],
75
- [/\b(api|endpoint|route|server)\b/i, 'api'],
76
- [/\b(test|spec|jest|vitest)\b/i, 'test'],
77
- [/\b(config|setting|env)\b/i, 'config'],
78
- [/\b(ui|component|react|vue|frontend)\b/i, 'component'],
79
- [/\b(database|db|model|schema|prisma|sequelize)\b/i, 'model'],
80
- [/\b(util|helper|lib)\b/i, 'util'],
81
- ];
82
- for (const [pattern, focus] of focusPatterns) {
83
- if (pattern.test(question)) {
84
- return focus;
85
- }
86
- }
87
- return undefined;
88
- }
89
- function normalizeDepth(value) {
90
- if (value === 'quick' || value === 'deep') {
91
- return value;
92
- }
93
- return 'normal';
94
- }
95
- function findAndSummarizeReadme(dir, maxChars = 1500) {
96
- const readmeNames = ['README.md', 'readme.md', 'README', 'README.txt', 'README.rst'];
97
- for (const name of readmeNames) {
98
- const path = join(dir, name);
99
- if (existsSync(path)) {
100
- try {
101
- const content = readFileSync(path, 'utf-8');
102
- const summary = content.slice(0, maxChars);
103
- return summary.length < content.length ? summary + '\n...(truncated)' : summary;
104
- }
105
- catch {
106
- return null;
107
- }
108
- }
109
- }
110
- return null;
111
- }
112
- function getPackageInfo(dir) {
113
- const packagePath = join(dir, 'package.json');
114
- if (!existsSync(packagePath)) {
115
- // Try pyproject.toml, Cargo.toml, go.mod
116
- return getAlternativePackageInfo(dir);
117
- }
118
- try {
119
- const pkg = JSON.parse(readFileSync(packagePath, 'utf-8'));
120
- const lines = [];
121
- if (pkg.name)
122
- lines.push(`Name: ${pkg.name}`);
123
- if (pkg.version)
124
- lines.push(`Version: ${pkg.version}`);
125
- if (pkg.description)
126
- lines.push(`Description: ${pkg.description}`);
127
- if (pkg.scripts) {
128
- const scripts = Object.keys(pkg.scripts).slice(0, 8);
129
- lines.push(`Scripts: ${scripts.join(', ')}`);
130
- }
131
- if (pkg.dependencies) {
132
- const deps = Object.keys(pkg.dependencies).slice(0, 10);
133
- lines.push(`Dependencies: ${deps.join(', ')}${Object.keys(pkg.dependencies).length > 10 ? '...' : ''}`);
134
- }
135
- return lines.join('\n');
136
- }
137
- catch {
138
- return null;
139
- }
140
- }
141
- function getAlternativePackageInfo(dir) {
142
- // Python
143
- const pyproject = join(dir, 'pyproject.toml');
144
- if (existsSync(pyproject)) {
145
- try {
146
- const content = readFileSync(pyproject, 'utf-8');
147
- const nameMatch = content.match(/name\s*=\s*"([^"]+)"/);
148
- const versionMatch = content.match(/version\s*=\s*"([^"]+)"/);
149
- const lines = ['Type: Python project'];
150
- if (nameMatch)
151
- lines.push(`Name: ${nameMatch[1]}`);
152
- if (versionMatch)
153
- lines.push(`Version: ${versionMatch[1]}`);
154
- return lines.join('\n');
155
- }
156
- catch {
157
- return null;
158
- }
159
- }
160
- // Rust
161
- const cargoToml = join(dir, 'Cargo.toml');
162
- if (existsSync(cargoToml)) {
163
- try {
164
- const content = readFileSync(cargoToml, 'utf-8');
165
- const nameMatch = content.match(/name\s*=\s*"([^"]+)"/);
166
- return `Type: Rust project${nameMatch ? `\nName: ${nameMatch[1]}` : ''}`;
167
- }
168
- catch {
169
- return null;
170
- }
171
- }
172
- // Go
173
- const goMod = join(dir, 'go.mod');
174
- if (existsSync(goMod)) {
175
- try {
176
- const content = readFileSync(goMod, 'utf-8');
177
- const moduleMatch = content.match(/module\s+(\S+)/);
178
- return `Type: Go project${moduleMatch ? `\nModule: ${moduleMatch[1]}` : ''}`;
179
- }
180
- catch {
181
- return null;
182
- }
183
- }
184
- return null;
185
- }
186
- function getDirectoryStructure(dir, focus) {
187
- const ignored = new Set(['.git', 'node_modules', 'dist', '.next', 'build', 'coverage', '__pycache__', '.venv', 'venv', 'target']);
188
- const lines = [];
189
- const maxEntries = 50;
190
- let count = 0;
191
- function walk(currentDir, depth, prefix) {
192
- if (depth > 3 || count >= maxEntries)
193
- return;
194
- try {
195
- const entries = readdirSync(currentDir, { withFileTypes: true })
196
- .filter(e => !ignored.has(e.name) && !e.name.startsWith('.'))
197
- .sort((a, b) => {
198
- // Directories first
199
- if (a.isDirectory() && !b.isDirectory())
200
- return -1;
201
- if (!a.isDirectory() && b.isDirectory())
202
- return 1;
203
- return a.name.localeCompare(b.name);
204
- });
205
- for (const entry of entries) {
206
- if (count >= maxEntries) {
207
- lines.push(`${prefix}... (truncated)`);
208
- return;
209
- }
210
- const fullPath = join(currentDir, entry.name);
211
- const relPath = relative(dir, fullPath);
212
- // Focus filter
213
- if (focus && !relPath.toLowerCase().includes(focus) && !entry.name.toLowerCase().includes(focus)) {
214
- if (entry.isDirectory()) {
215
- // Still walk into directories to find focused content
216
- walk(fullPath, depth + 1, prefix + ' ');
217
- }
218
- continue;
219
- }
220
- count++;
221
- if (entry.isDirectory()) {
222
- lines.push(`${prefix}${entry.name}/`);
223
- walk(fullPath, depth + 1, prefix + ' ');
224
- }
225
- else {
226
- const stats = statSync(fullPath);
227
- const size = formatSize(stats.size);
228
- lines.push(`${prefix}${entry.name} (${size})`);
229
- }
230
- }
231
- }
232
- catch {
233
- // Ignore errors
234
- }
235
- }
236
- walk(dir, 0, '');
237
- return lines.length > 0 ? lines.join('\n') : '(empty or no accessible files)';
238
- }
239
- function findEntryPoints(dir) {
240
- const entryPoints = [];
241
- // Check package.json for main/bin
242
- const packagePath = join(dir, 'package.json');
243
- if (existsSync(packagePath)) {
244
- try {
245
- const pkg = JSON.parse(readFileSync(packagePath, 'utf-8'));
246
- if (pkg.main)
247
- entryPoints.push(`main: ${pkg.main}`);
248
- if (pkg.bin) {
249
- if (typeof pkg.bin === 'string') {
250
- entryPoints.push(`bin: ${pkg.bin}`);
251
- }
252
- else {
253
- entryPoints.push(`bin: ${Object.values(pkg.bin).slice(0, 3).join(', ')}`);
254
- }
255
- }
256
- }
257
- catch {
258
- // Ignore
259
- }
260
- }
261
- // Look for common entry files
262
- const commonEntries = [
263
- 'src/index.ts', 'src/index.js', 'src/main.ts', 'src/main.js',
264
- 'index.ts', 'index.js', 'main.ts', 'main.js',
265
- 'src/app.ts', 'src/app.js', 'app.ts', 'app.js',
266
- 'src/bin/cli.ts', 'src/bin/cli.js', 'bin/cli.ts', 'bin/cli.js',
267
- 'lib/index.ts', 'lib/index.js',
268
- ];
269
- for (const entry of commonEntries) {
270
- if (existsSync(join(dir, entry))) {
271
- entryPoints.push(`file: ${entry}`);
272
- }
273
- }
274
- return [...new Set(entryPoints)].slice(0, 5);
275
- }
276
- function getCodeSamples(dir, focus) {
277
- const samples = [];
278
- const codeExtensions = new Set(['.ts', '.js', '.tsx', '.jsx', '.py', '.go', '.rs']);
279
- // Find key files to sample
280
- const targetFiles = [];
281
- // Focus-specific or entry point files
282
- if (focus) {
283
- findFilesWithPattern(dir, focus, codeExtensions, targetFiles, 3);
284
- }
285
- // Always try to include main entry
286
- const mainFiles = ['src/index.ts', 'src/main.ts', 'index.ts', 'main.ts', 'src/index.js'];
287
- for (const f of mainFiles) {
288
- const path = join(dir, f);
289
- if (existsSync(path) && !targetFiles.includes(path)) {
290
- targetFiles.push(path);
291
- break;
292
- }
293
- }
294
- // Sample each file
295
- for (const file of targetFiles.slice(0, 2)) {
296
- try {
297
- const content = readFileSync(file, 'utf-8');
298
- const lines = content.split('\n').slice(0, 30); // First 30 lines
299
- const relPath = relative(dir, file);
300
- samples.push(`### ${relPath}\n\`\`\`\n${lines.join('\n')}\n\`\`\``);
301
- }
302
- catch {
303
- // Ignore
304
- }
305
- }
306
- return samples.length > 0 ? samples.join('\n\n') : null;
307
- }
308
- function findFilesWithPattern(dir, pattern, extensions, results, max) {
309
- const ignored = new Set(['.git', 'node_modules', 'dist', '.next', 'build', 'coverage']);
310
- function walk(currentDir, depth) {
311
- if (depth > 4 || results.length >= max)
312
- return;
313
- try {
314
- const entries = readdirSync(currentDir, { withFileTypes: true });
315
- for (const entry of entries) {
316
- if (ignored.has(entry.name))
317
- continue;
318
- if (results.length >= max)
319
- return;
320
- const fullPath = join(currentDir, entry.name);
321
- if (entry.isDirectory()) {
322
- walk(fullPath, depth + 1);
323
- }
324
- else if (extensions.has(extname(entry.name)) &&
325
- (entry.name.toLowerCase().includes(pattern) ||
326
- relative(dir, fullPath).toLowerCase().includes(pattern))) {
327
- results.push(fullPath);
328
- }
329
- }
330
- }
331
- catch {
332
- // Ignore
333
- }
334
- }
335
- walk(dir, 0);
336
- }
337
- function formatSize(bytes) {
338
- if (bytes < 1024)
339
- return `${bytes}B`;
340
- if (bytes < 1024 * 1024)
341
- return `${(bytes / 1024).toFixed(1)}KB`;
342
- return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
343
- }
344
- //# sourceMappingURL=exploreTools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exploreTools.js","sourceRoot":"","sources":["../../src/tools/exploreTools.ts"],"names":[],"mappings":"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"}