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.
- package/agents/erosolar-code.rules.json +0 -5
- package/agents/general.rules.json +0 -5
- package/dist/bin/erosolar.js +2 -0
- package/dist/bin/erosolar.js.map +1 -1
- package/dist/capabilities/filesystemCapability.d.ts.map +1 -1
- package/dist/capabilities/filesystemCapability.js +1 -2
- package/dist/capabilities/filesystemCapability.js.map +1 -1
- package/dist/contracts/agent-schemas.json +12 -20
- package/dist/contracts/unified-schema.json +1 -1
- package/dist/core/agent.d.ts +3 -38
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +8 -283
- package/dist/core/agent.js.map +1 -1
- package/dist/core/contextManager.js +8 -8
- package/dist/core/contextManager.js.map +1 -1
- package/dist/core/errors/apiKeyErrors.js +1 -1
- package/dist/core/errors/apiKeyErrors.js.map +1 -1
- package/dist/core/isolatedVerifier.js +22 -274
- package/dist/core/isolatedVerifier.js.map +1 -1
- package/dist/core/modelDiscovery.d.ts.map +1 -1
- package/dist/core/modelDiscovery.js +28 -23
- package/dist/core/modelDiscovery.js.map +1 -1
- package/dist/core/secretStore.d.ts +0 -9
- package/dist/core/secretStore.d.ts.map +1 -1
- package/dist/core/secretStore.js +2 -52
- package/dist/core/secretStore.js.map +1 -1
- package/dist/core/types.d.ts +1 -9
- package/dist/core/types.d.ts.map +1 -1
- package/dist/headless/headlessApp.d.ts.map +1 -1
- package/dist/headless/headlessApp.js +0 -16
- package/dist/headless/headlessApp.js.map +1 -1
- package/dist/plugins/providers/google/index.js +2 -3
- package/dist/plugins/providers/google/index.js.map +1 -1
- package/dist/providers/anthropicProvider.d.ts.map +1 -1
- package/dist/providers/anthropicProvider.js +19 -76
- package/dist/providers/anthropicProvider.js.map +1 -1
- package/dist/providers/googleProvider.d.ts.map +1 -1
- package/dist/providers/googleProvider.js +1 -23
- package/dist/providers/googleProvider.js.map +1 -1
- package/dist/providers/openaiChatCompletionsProvider.d.ts +1 -2
- package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -1
- package/dist/providers/openaiChatCompletionsProvider.js +4 -121
- package/dist/providers/openaiChatCompletionsProvider.js.map +1 -1
- package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
- package/dist/providers/openaiResponsesProvider.js +18 -55
- package/dist/providers/openaiResponsesProvider.js.map +1 -1
- package/dist/runtime/agentController.d.ts +0 -4
- package/dist/runtime/agentController.d.ts.map +1 -1
- package/dist/runtime/agentController.js +3 -32
- package/dist/runtime/agentController.js.map +1 -1
- package/dist/security/persistence-research.d.ts +2 -0
- package/dist/security/persistence-research.d.ts.map +1 -1
- package/dist/security/persistence-research.js +2 -0
- package/dist/security/persistence-research.js.map +1 -1
- package/dist/security/security-testing-framework.d.ts +2 -0
- package/dist/security/security-testing-framework.d.ts.map +1 -1
- package/dist/security/security-testing-framework.js +2 -0
- package/dist/security/security-testing-framework.js.map +1 -1
- package/dist/shell/bracketedPasteManager.d.ts +5 -8
- package/dist/shell/bracketedPasteManager.d.ts.map +1 -1
- package/dist/shell/bracketedPasteManager.js +43 -27
- package/dist/shell/bracketedPasteManager.js.map +1 -1
- package/dist/shell/composableMessage.d.ts +1 -1
- package/dist/shell/composableMessage.js +2 -2
- package/dist/shell/composableMessage.js.map +1 -1
- package/dist/shell/inputProcessor.d.ts +55 -0
- package/dist/shell/inputProcessor.d.ts.map +1 -0
- package/dist/shell/inputProcessor.js +171 -0
- package/dist/shell/inputProcessor.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +48 -7
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +340 -172
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/shellApp.d.ts.map +1 -1
- package/dist/shell/shellApp.js +3 -54
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/shell/systemPrompt.d.ts +1 -1
- package/dist/shell/systemPrompt.d.ts.map +1 -1
- package/dist/shell/systemPrompt.js +57 -15
- package/dist/shell/systemPrompt.js.map +1 -1
- package/dist/shell/updateManager.js +2 -4
- package/dist/shell/updateManager.js.map +1 -1
- package/dist/subagents/taskRunner.js +2 -2
- package/dist/subagents/taskRunner.js.map +1 -1
- package/dist/tools/cloudTools.d.ts +2 -0
- package/dist/tools/cloudTools.d.ts.map +1 -1
- package/dist/tools/cloudTools.js +2 -0
- package/dist/tools/cloudTools.js.map +1 -1
- package/dist/tools/fileTools.d.ts.map +1 -1
- package/dist/tools/fileTools.js +3 -31
- package/dist/tools/fileTools.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +2 -10
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +11 -123
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/keyboardShortcuts.d.ts.map +1 -1
- package/dist/ui/keyboardShortcuts.js +2 -12
- package/dist/ui/keyboardShortcuts.js.map +1 -1
- package/dist/ui/persistentPrompt.d.ts +0 -24
- package/dist/ui/persistentPrompt.d.ts.map +1 -1
- package/dist/ui/persistentPrompt.js +4 -86
- package/dist/ui/persistentPrompt.js.map +1 -1
- package/dist/ui/toolDisplay.d.ts.map +1 -1
- package/dist/ui/toolDisplay.js +0 -652
- package/dist/ui/toolDisplay.js.map +1 -1
- package/package.json +10 -10
- package/dist/core/cliTestHarness.d.ts +0 -200
- package/dist/core/cliTestHarness.d.ts.map +0 -1
- package/dist/core/cliTestHarness.js +0 -549
- package/dist/core/cliTestHarness.js.map +0 -1
- package/dist/core/multilinePasteHandler.d.ts +0 -35
- package/dist/core/multilinePasteHandler.d.ts.map +0 -1
- package/dist/core/multilinePasteHandler.js +0 -80
- package/dist/core/multilinePasteHandler.js.map +0 -1
- package/dist/tools/exploreTools.d.ts +0 -7
- package/dist/tools/exploreTools.d.ts.map +0 -1
- package/dist/tools/exploreTools.js +0 -344
- 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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"}
|