erosolar-cli 1.7.261 → 1.7.263
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/capabilities/securityTestingCapability.d.ts +13 -0
- package/dist/capabilities/securityTestingCapability.d.ts.map +1 -0
- package/dist/capabilities/securityTestingCapability.js +25 -0
- package/dist/capabilities/securityTestingCapability.js.map +1 -0
- package/dist/contracts/agent-schemas.json +15 -0
- package/dist/contracts/tools.schema.json +9 -0
- package/dist/core/hooksSystem.d.ts +65 -0
- package/dist/core/hooksSystem.d.ts.map +1 -0
- package/dist/core/hooksSystem.js +273 -0
- package/dist/core/hooksSystem.js.map +1 -0
- package/dist/core/memorySystem.d.ts +48 -0
- package/dist/core/memorySystem.d.ts.map +1 -0
- package/dist/core/memorySystem.js +271 -0
- package/dist/core/memorySystem.js.map +1 -0
- package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
- package/dist/plugins/tools/nodeDefaults.js +2 -0
- package/dist/plugins/tools/nodeDefaults.js.map +1 -1
- package/dist/plugins/tools/security/securityPlugin.d.ts +3 -0
- package/dist/plugins/tools/security/securityPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/security/securityPlugin.js +12 -0
- package/dist/plugins/tools/security/securityPlugin.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +5 -1
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +118 -9
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/metricsTracker.d.ts +60 -0
- package/dist/shell/metricsTracker.d.ts.map +1 -0
- package/dist/shell/metricsTracker.js +119 -0
- package/dist/shell/metricsTracker.js.map +1 -0
- package/dist/shell/shellApp.d.ts +0 -2
- package/dist/shell/shellApp.d.ts.map +1 -1
- package/dist/shell/shellApp.js +0 -16
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/shell/systemPrompt.d.ts.map +1 -1
- package/dist/shell/systemPrompt.js +4 -1
- package/dist/shell/systemPrompt.js.map +1 -1
- package/dist/shell/terminalInput.d.ts +10 -3
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +33 -14
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/shell/terminalInputAdapter.d.ts +5 -0
- package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
- package/dist/shell/terminalInputAdapter.js +7 -0
- package/dist/shell/terminalInputAdapter.js.map +1 -1
- package/dist/tools/securityTools.d.ts +22 -0
- package/dist/tools/securityTools.d.ts.map +1 -0
- package/dist/tools/securityTools.js +448 -0
- package/dist/tools/securityTools.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory System - Hierarchical persistent memory for AI context
|
|
3
|
+
*
|
|
4
|
+
* Implements a Claude Code-style memory system that loads persistent context
|
|
5
|
+
* from markdown files at multiple levels:
|
|
6
|
+
*
|
|
7
|
+
* 1. Enterprise Policy: /etc/erosolar/EROSOLAR.md (Linux), managed settings
|
|
8
|
+
* 2. User Memory: ~/.erosolar/EROSOLAR.md
|
|
9
|
+
* 3. Project Memory: ./EROSOLAR.md or ./.erosolar/EROSOLAR.md
|
|
10
|
+
*
|
|
11
|
+
* Supports @imports for including external files recursively (max 5 levels).
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
14
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
15
|
+
import { homedir, platform } from 'node:os';
|
|
16
|
+
const MAX_IMPORT_DEPTH = 5;
|
|
17
|
+
const MEMORY_FILE_NAMES = ['EROSOLAR.md', 'CLAUDE.md'];
|
|
18
|
+
const DATA_DIR_NAME = '.erosolar';
|
|
19
|
+
/**
|
|
20
|
+
* Get the path to the enterprise policy memory file
|
|
21
|
+
*/
|
|
22
|
+
function getEnterprisePolicyPath() {
|
|
23
|
+
const plat = platform();
|
|
24
|
+
if (plat === 'darwin') {
|
|
25
|
+
return '/Library/Application Support/Erosolar/EROSOLAR.md';
|
|
26
|
+
}
|
|
27
|
+
if (plat === 'linux') {
|
|
28
|
+
return '/etc/erosolar/EROSOLAR.md';
|
|
29
|
+
}
|
|
30
|
+
if (plat === 'win32') {
|
|
31
|
+
const programData = process.env['PROGRAMDATA'] || 'C:\\ProgramData';
|
|
32
|
+
return join(programData, 'Erosolar', 'EROSOLAR.md');
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the path to the user memory file
|
|
38
|
+
*/
|
|
39
|
+
function getUserMemoryPath() {
|
|
40
|
+
return join(homedir(), DATA_DIR_NAME, 'EROSOLAR.md');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Find project memory file in the workspace
|
|
44
|
+
*/
|
|
45
|
+
function findProjectMemoryPath(workingDir) {
|
|
46
|
+
// Check root level first
|
|
47
|
+
for (const name of MEMORY_FILE_NAMES) {
|
|
48
|
+
const rootPath = join(workingDir, name);
|
|
49
|
+
if (existsSync(rootPath)) {
|
|
50
|
+
return rootPath;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Check .erosolar directory
|
|
54
|
+
for (const name of MEMORY_FILE_NAMES) {
|
|
55
|
+
const nestedPath = join(workingDir, DATA_DIR_NAME, name);
|
|
56
|
+
if (existsSync(nestedPath)) {
|
|
57
|
+
return nestedPath;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Check .claude directory for compatibility
|
|
61
|
+
for (const name of MEMORY_FILE_NAMES) {
|
|
62
|
+
const claudePath = join(workingDir, '.claude', name);
|
|
63
|
+
if (existsSync(claudePath)) {
|
|
64
|
+
return claudePath;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Parse @imports from a memory file content
|
|
71
|
+
*/
|
|
72
|
+
function parseImports(content) {
|
|
73
|
+
const imports = [];
|
|
74
|
+
const lines = content.split('\n');
|
|
75
|
+
for (const line of lines) {
|
|
76
|
+
const trimmed = line.trim();
|
|
77
|
+
// Match @path/to/file.md or @~/path/to/file.md
|
|
78
|
+
if (trimmed.startsWith('@') && !trimmed.startsWith('@{')) {
|
|
79
|
+
const importPath = trimmed.slice(1).trim();
|
|
80
|
+
if (importPath) {
|
|
81
|
+
imports.push(importPath);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return imports;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Remove @import lines from content (they're processed, not displayed)
|
|
89
|
+
*/
|
|
90
|
+
function removeImportLines(content) {
|
|
91
|
+
return content
|
|
92
|
+
.split('\n')
|
|
93
|
+
.filter((line) => {
|
|
94
|
+
const trimmed = line.trim();
|
|
95
|
+
return !trimmed.startsWith('@') || trimmed.startsWith('@{');
|
|
96
|
+
})
|
|
97
|
+
.join('\n')
|
|
98
|
+
.trim();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Resolve an import path relative to the source file
|
|
102
|
+
*/
|
|
103
|
+
function resolveImportPath(importPath, sourceDir) {
|
|
104
|
+
// Handle ~ for home directory
|
|
105
|
+
if (importPath.startsWith('~/') || importPath.startsWith('~\\')) {
|
|
106
|
+
return join(homedir(), importPath.slice(2));
|
|
107
|
+
}
|
|
108
|
+
// Handle absolute paths
|
|
109
|
+
if (isAbsolute(importPath)) {
|
|
110
|
+
return importPath;
|
|
111
|
+
}
|
|
112
|
+
// Relative to source file directory
|
|
113
|
+
return resolve(sourceDir, importPath);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Load a memory file and process its imports recursively
|
|
117
|
+
*/
|
|
118
|
+
function loadMemoryFileWithImports(filePath, depth, visitedPaths, importedPaths) {
|
|
119
|
+
if (depth > MAX_IMPORT_DEPTH) {
|
|
120
|
+
return `<!-- Import depth exceeded (max ${MAX_IMPORT_DEPTH}) for: ${filePath} -->`;
|
|
121
|
+
}
|
|
122
|
+
const normalizedPath = resolve(filePath);
|
|
123
|
+
if (visitedPaths.has(normalizedPath)) {
|
|
124
|
+
return `<!-- Circular import detected: ${filePath} -->`;
|
|
125
|
+
}
|
|
126
|
+
if (!existsSync(filePath)) {
|
|
127
|
+
return `<!-- Import not found: ${filePath} -->`;
|
|
128
|
+
}
|
|
129
|
+
visitedPaths.add(normalizedPath);
|
|
130
|
+
importedPaths.push(normalizedPath);
|
|
131
|
+
let content;
|
|
132
|
+
try {
|
|
133
|
+
content = readFileSync(filePath, 'utf-8');
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
return `<!-- Failed to read: ${filePath} -->`;
|
|
137
|
+
}
|
|
138
|
+
const sourceDir = dirname(normalizedPath);
|
|
139
|
+
const imports = parseImports(content);
|
|
140
|
+
// Process imports and replace with their content
|
|
141
|
+
let processedContent = removeImportLines(content);
|
|
142
|
+
for (const importPath of imports) {
|
|
143
|
+
const resolvedPath = resolveImportPath(importPath, sourceDir);
|
|
144
|
+
const importedContent = loadMemoryFileWithImports(resolvedPath, depth + 1, visitedPaths, importedPaths);
|
|
145
|
+
processedContent += '\n\n' + importedContent;
|
|
146
|
+
}
|
|
147
|
+
return processedContent.trim();
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Load all memory from the hierarchy
|
|
151
|
+
*/
|
|
152
|
+
export function loadMemory(workingDir) {
|
|
153
|
+
const sources = [];
|
|
154
|
+
const allImportedPaths = [];
|
|
155
|
+
const visitedPaths = new Set();
|
|
156
|
+
// 1. Enterprise policy (highest priority, but loaded first so it can be overridden)
|
|
157
|
+
const enterprisePath = getEnterprisePolicyPath();
|
|
158
|
+
if (enterprisePath && existsSync(enterprisePath)) {
|
|
159
|
+
const content = loadMemoryFileWithImports(enterprisePath, 0, visitedPaths, allImportedPaths);
|
|
160
|
+
if (content.trim()) {
|
|
161
|
+
sources.push({
|
|
162
|
+
level: 'enterprise',
|
|
163
|
+
path: enterprisePath,
|
|
164
|
+
content,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// 2. User memory
|
|
169
|
+
const userPath = getUserMemoryPath();
|
|
170
|
+
if (existsSync(userPath)) {
|
|
171
|
+
const content = loadMemoryFileWithImports(userPath, 0, visitedPaths, allImportedPaths);
|
|
172
|
+
if (content.trim()) {
|
|
173
|
+
sources.push({
|
|
174
|
+
level: 'user',
|
|
175
|
+
path: userPath,
|
|
176
|
+
content,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// 3. Project memory
|
|
181
|
+
const projectPath = findProjectMemoryPath(workingDir);
|
|
182
|
+
if (projectPath) {
|
|
183
|
+
const content = loadMemoryFileWithImports(projectPath, 0, visitedPaths, allImportedPaths);
|
|
184
|
+
if (content.trim()) {
|
|
185
|
+
sources.push({
|
|
186
|
+
level: 'project',
|
|
187
|
+
path: projectPath,
|
|
188
|
+
content,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Combine all memory with headers
|
|
193
|
+
const sections = [];
|
|
194
|
+
for (const source of sources) {
|
|
195
|
+
const levelLabel = source.level === 'enterprise'
|
|
196
|
+
? 'Enterprise Policy'
|
|
197
|
+
: source.level === 'user'
|
|
198
|
+
? 'User Guidelines'
|
|
199
|
+
: 'Project Guidelines';
|
|
200
|
+
sections.push(`## ${levelLabel}\n\n${source.content}`);
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
sources,
|
|
204
|
+
combinedContent: sections.join('\n\n---\n\n'),
|
|
205
|
+
importedPaths: allImportedPaths,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get memory content formatted for system prompt injection
|
|
210
|
+
*/
|
|
211
|
+
export function getMemoryForPrompt(workingDir) {
|
|
212
|
+
const memory = loadMemory(workingDir);
|
|
213
|
+
if (!memory.combinedContent.trim()) {
|
|
214
|
+
return '';
|
|
215
|
+
}
|
|
216
|
+
return `
|
|
217
|
+
<persistent-memory>
|
|
218
|
+
The following persistent context has been loaded from memory files.
|
|
219
|
+
Follow these guidelines when working in this workspace.
|
|
220
|
+
|
|
221
|
+
${memory.combinedContent}
|
|
222
|
+
</persistent-memory>
|
|
223
|
+
`;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* List all memory file paths and their status
|
|
227
|
+
*/
|
|
228
|
+
export function listMemoryPaths(workingDir) {
|
|
229
|
+
const paths = [];
|
|
230
|
+
const enterprisePath = getEnterprisePolicyPath();
|
|
231
|
+
if (enterprisePath) {
|
|
232
|
+
paths.push({
|
|
233
|
+
level: 'enterprise',
|
|
234
|
+
path: enterprisePath,
|
|
235
|
+
exists: existsSync(enterprisePath),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
const userPath = getUserMemoryPath();
|
|
239
|
+
paths.push({
|
|
240
|
+
level: 'user',
|
|
241
|
+
path: userPath,
|
|
242
|
+
exists: existsSync(userPath),
|
|
243
|
+
});
|
|
244
|
+
const projectMemoryLocations = [
|
|
245
|
+
join(workingDir, 'EROSOLAR.md'),
|
|
246
|
+
join(workingDir, 'CLAUDE.md'),
|
|
247
|
+
join(workingDir, DATA_DIR_NAME, 'EROSOLAR.md'),
|
|
248
|
+
join(workingDir, '.claude', 'CLAUDE.md'),
|
|
249
|
+
];
|
|
250
|
+
for (const path of projectMemoryLocations) {
|
|
251
|
+
paths.push({
|
|
252
|
+
level: 'project',
|
|
253
|
+
path,
|
|
254
|
+
exists: existsSync(path),
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
return paths;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get the default path for creating a new project memory file
|
|
261
|
+
*/
|
|
262
|
+
export function getDefaultProjectMemoryPath(workingDir) {
|
|
263
|
+
return join(workingDir, 'EROSOLAR.md');
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Get the user memory path for editing
|
|
267
|
+
*/
|
|
268
|
+
export function getUserMemoryEditPath() {
|
|
269
|
+
return getUserMemoryPath();
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=memorySystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memorySystem.js","sourceRoot":"","sources":["../../src/core/memorySystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeDefaults.d.ts","sourceRoot":"","sources":["../../../src/plugins/tools/nodeDefaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nodeDefaults.d.ts","sourceRoot":"","sources":["../../../src/plugins/tools/nodeDefaults.ts"],"names":[],"mappings":"AAiCA,wBAAgB,8BAA8B,IAAI,IAAI,CAoCrD"}
|
|
@@ -27,6 +27,7 @@ import { createFrontendTestingToolPlugin } from './frontendTesting/frontendTesti
|
|
|
27
27
|
import { createBrowserAutomationToolPlugin } from './browser/browserAutomationPlugin.js';
|
|
28
28
|
import { createValidationToolPlugin } from './validation/validationPlugin.js';
|
|
29
29
|
import { createBuildToolPlugin } from './build/buildPlugin.js';
|
|
30
|
+
import { createSecurityToolPlugin } from './security/securityPlugin.js';
|
|
30
31
|
let registered = false;
|
|
31
32
|
export function registerDefaultNodeToolPlugins() {
|
|
32
33
|
if (registered) {
|
|
@@ -60,6 +61,7 @@ export function registerDefaultNodeToolPlugins() {
|
|
|
60
61
|
registerToolPlugin(createBrowserAutomationToolPlugin());
|
|
61
62
|
registerToolPlugin(createValidationToolPlugin());
|
|
62
63
|
registerToolPlugin(createBuildToolPlugin());
|
|
64
|
+
registerToolPlugin(createSecurityToolPlugin());
|
|
63
65
|
registered = true;
|
|
64
66
|
}
|
|
65
67
|
//# sourceMappingURL=nodeDefaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeDefaults.js","sourceRoot":"","sources":["../../../src/plugins/tools/nodeDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAAE,iCAAiC,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"nodeDefaults.js","sourceRoot":"","sources":["../../../src/plugins/tools/nodeDefaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityPlugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/tools/security/securityPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,gBAAgB,CAAC;AAGpE,wBAAgB,wBAAwB,IAAI,UAAU,CAUrD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SecurityTestingCapabilityModule } from '../../../capabilities/securityTestingCapability.js';
|
|
2
|
+
export function createSecurityToolPlugin() {
|
|
3
|
+
return {
|
|
4
|
+
id: 'tool.security.testing',
|
|
5
|
+
description: 'Ethical penetration testing and security analysis tools. For authorized testing only.',
|
|
6
|
+
targets: ['node'],
|
|
7
|
+
create: async (context) => new SecurityTestingCapabilityModule({
|
|
8
|
+
workingDir: context.workingDir,
|
|
9
|
+
}),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=securityPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityPlugin.js","sourceRoot":"","sources":["../../../../src/plugins/tools/security/securityPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,oDAAoD,CAAC;AAErG,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,EAAE,EAAE,uBAAuB;QAC3B,WAAW,EAAE,uFAAuF;QACpG,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,OAA0B,EAAE,EAAE,CAC3C,IAAI,+BAA+B,CAAC;YAClC,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -58,7 +58,7 @@ export declare class InteractiveShell {
|
|
|
58
58
|
private readonly uiAdapter;
|
|
59
59
|
private readonly uiUpdates;
|
|
60
60
|
private readonly _fileChangeTracker;
|
|
61
|
-
private readonly
|
|
61
|
+
private readonly sessionMetrics;
|
|
62
62
|
private statusSubscription;
|
|
63
63
|
private readonly followUpQueue;
|
|
64
64
|
private isDrainingQueue;
|
|
@@ -212,6 +212,10 @@ export declare class InteractiveShell {
|
|
|
212
212
|
private invokeSkillTool;
|
|
213
213
|
private handleThinkingCommand;
|
|
214
214
|
private handleShortcutsCommand;
|
|
215
|
+
private handleMemoryCommand;
|
|
216
|
+
private showMemoryStatus;
|
|
217
|
+
private showMemoryPaths;
|
|
218
|
+
private openMemoryForEdit;
|
|
215
219
|
private showFileChangeSummary;
|
|
216
220
|
private showAlphaZeroMetrics;
|
|
217
221
|
private showImprovementSuggestions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/shell/interactiveShell.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAiCtE,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAwB,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAyB,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/shell/interactiveShell.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,9 @@ import { SkillRepository } from '../skills/skillRepository.js';
|
|
|
19
19
|
import { createSkillTools } from '../tools/skillTools.js';
|
|
20
20
|
import { FileChangeTracker } from './fileChangeTracker.js';
|
|
21
21
|
import { formatShortcutsHelp } from '../ui/shortcutsHelp.js';
|
|
22
|
-
import { MetricsTracker } from '
|
|
22
|
+
import { MetricsTracker } from './metricsTracker.js';
|
|
23
23
|
import { listAvailablePlugins } from '../plugins/index.js';
|
|
24
|
+
import { loadMemory, listMemoryPaths, getDefaultProjectMemoryPath, getUserMemoryEditPath, } from '../core/memorySystem.js';
|
|
24
25
|
import { TerminalInputAdapter } from './terminalInputAdapter.js';
|
|
25
26
|
import { isUpdateInProgress } from './updateManager.js';
|
|
26
27
|
import { writeLock } from '../ui/writeLock.js';
|
|
@@ -93,7 +94,7 @@ export class InteractiveShell {
|
|
|
93
94
|
uiAdapter;
|
|
94
95
|
uiUpdates;
|
|
95
96
|
_fileChangeTracker = new FileChangeTracker(); // Reserved for future file tracking features
|
|
96
|
-
|
|
97
|
+
sessionMetrics; // Session performance tracking
|
|
97
98
|
statusSubscription = null;
|
|
98
99
|
followUpQueue = [];
|
|
99
100
|
isDrainingQueue = false;
|
|
@@ -218,8 +219,10 @@ export class InteractiveShell {
|
|
|
218
219
|
// Use flow mode: input renders inline after content for a unified layout
|
|
219
220
|
// This eliminates the blank space between banner and input area
|
|
220
221
|
this.terminalInput.setFlowMode(true);
|
|
222
|
+
// Set content end row so input renders right after startup content
|
|
223
|
+
this.terminalInput.setContentEndRow(display.getTotalWrittenLines());
|
|
221
224
|
// Initialize Alpha Zero 2 metrics tracking
|
|
222
|
-
this.
|
|
225
|
+
this.sessionMetrics = new MetricsTracker(`${this.profile}-${Date.now()}`);
|
|
223
226
|
this.setupStatusTracking();
|
|
224
227
|
this.refreshContextGauge();
|
|
225
228
|
this.terminalInput.start();
|
|
@@ -1093,6 +1096,17 @@ export class InteractiveShell {
|
|
|
1093
1096
|
case '/discover':
|
|
1094
1097
|
await this.discoverModelsCommand();
|
|
1095
1098
|
break;
|
|
1099
|
+
case '/memory':
|
|
1100
|
+
this.handleMemoryCommand(input);
|
|
1101
|
+
break;
|
|
1102
|
+
case '/clear':
|
|
1103
|
+
display.clear();
|
|
1104
|
+
this.cachedHistory = [];
|
|
1105
|
+
display.showInfo('Conversation cleared.');
|
|
1106
|
+
break;
|
|
1107
|
+
case '/help':
|
|
1108
|
+
this.showHelp();
|
|
1109
|
+
break;
|
|
1096
1110
|
default:
|
|
1097
1111
|
if (!(await this.tryCustomSlashCommand(command, input))) {
|
|
1098
1112
|
display.showWarning(`Unknown command "${command}".`);
|
|
@@ -1401,6 +1415,99 @@ export class InteractiveShell {
|
|
|
1401
1415
|
// Display keyboard shortcuts help (Claude Code style)
|
|
1402
1416
|
display.showSystemMessage(formatShortcutsHelp());
|
|
1403
1417
|
}
|
|
1418
|
+
handleMemoryCommand(input) {
|
|
1419
|
+
const tokens = input.trim().split(/\s+/).slice(1);
|
|
1420
|
+
const action = (tokens.shift() ?? 'show').toLowerCase();
|
|
1421
|
+
switch (action) {
|
|
1422
|
+
case '':
|
|
1423
|
+
case 'show':
|
|
1424
|
+
case 'list': {
|
|
1425
|
+
this.showMemoryStatus();
|
|
1426
|
+
break;
|
|
1427
|
+
}
|
|
1428
|
+
case 'paths': {
|
|
1429
|
+
this.showMemoryPaths();
|
|
1430
|
+
break;
|
|
1431
|
+
}
|
|
1432
|
+
case 'edit': {
|
|
1433
|
+
const level = (tokens[0] ?? 'project').toLowerCase();
|
|
1434
|
+
this.openMemoryForEdit(level);
|
|
1435
|
+
break;
|
|
1436
|
+
}
|
|
1437
|
+
default:
|
|
1438
|
+
display.showWarning('Usage: /memory [show|paths|edit <user|project>]');
|
|
1439
|
+
break;
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
showMemoryStatus() {
|
|
1443
|
+
const memory = loadMemory(this.workingDir);
|
|
1444
|
+
const lines = [];
|
|
1445
|
+
lines.push(theme.bold('Persistent Memory'));
|
|
1446
|
+
lines.push('');
|
|
1447
|
+
if (memory.sources.length === 0) {
|
|
1448
|
+
lines.push(theme.secondary('No memory files found.'));
|
|
1449
|
+
lines.push('');
|
|
1450
|
+
lines.push(`Create ${theme.info('EROSOLAR.md')} in your project to add persistent context.`);
|
|
1451
|
+
lines.push(`Use ${theme.info('/memory edit project')} to create one.`);
|
|
1452
|
+
}
|
|
1453
|
+
else {
|
|
1454
|
+
for (const source of memory.sources) {
|
|
1455
|
+
const levelLabel = source.level === 'enterprise' ? 'Enterprise' :
|
|
1456
|
+
source.level === 'user' ? 'User' : 'Project';
|
|
1457
|
+
const preview = source.content.slice(0, 200).replace(/\n/g, ' ').trim();
|
|
1458
|
+
const truncated = source.content.length > 200 ? '...' : '';
|
|
1459
|
+
lines.push(`${theme.success('●')} ${theme.bold(levelLabel)}: ${source.path}`);
|
|
1460
|
+
lines.push(` ${theme.dim(preview + truncated)}`);
|
|
1461
|
+
lines.push('');
|
|
1462
|
+
}
|
|
1463
|
+
if (memory.importedPaths.length > memory.sources.length) {
|
|
1464
|
+
lines.push(theme.secondary(`Imported ${memory.importedPaths.length - memory.sources.length} additional files via @imports.`));
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
display.showSystemMessage(lines.join('\n'));
|
|
1468
|
+
}
|
|
1469
|
+
showMemoryPaths() {
|
|
1470
|
+
const paths = listMemoryPaths(this.workingDir);
|
|
1471
|
+
const lines = [];
|
|
1472
|
+
lines.push(theme.bold('Memory File Locations'));
|
|
1473
|
+
lines.push('');
|
|
1474
|
+
for (const { level, path, exists } of paths) {
|
|
1475
|
+
const icon = exists ? theme.success('✓') : theme.dim('○');
|
|
1476
|
+
const levelLabel = level.charAt(0).toUpperCase() + level.slice(1);
|
|
1477
|
+
lines.push(`${icon} ${levelLabel}: ${path}`);
|
|
1478
|
+
}
|
|
1479
|
+
lines.push('');
|
|
1480
|
+
lines.push(theme.secondary('Create any of these files to add persistent memory.'));
|
|
1481
|
+
lines.push(theme.secondary('Use @path/to/file.md syntax to import other files.'));
|
|
1482
|
+
display.showSystemMessage(lines.join('\n'));
|
|
1483
|
+
}
|
|
1484
|
+
openMemoryForEdit(level) {
|
|
1485
|
+
let targetPath;
|
|
1486
|
+
if (level === 'user') {
|
|
1487
|
+
targetPath = getUserMemoryEditPath();
|
|
1488
|
+
}
|
|
1489
|
+
else if (level === 'project') {
|
|
1490
|
+
targetPath = getDefaultProjectMemoryPath(this.workingDir);
|
|
1491
|
+
}
|
|
1492
|
+
else {
|
|
1493
|
+
display.showWarning('Specify "user" or "project" to edit. Enterprise memory is read-only.');
|
|
1494
|
+
return;
|
|
1495
|
+
}
|
|
1496
|
+
display.showInfo(`Memory file: ${targetPath}`);
|
|
1497
|
+
display.showInfo('Create or edit this file to add persistent context for the AI.');
|
|
1498
|
+
display.showInfo('');
|
|
1499
|
+
display.showInfo('Example EROSOLAR.md content:');
|
|
1500
|
+
display.showInfo('');
|
|
1501
|
+
display.showInfo(theme.dim(`# Project Guidelines
|
|
1502
|
+
|
|
1503
|
+
When working in this codebase:
|
|
1504
|
+
- Follow TypeScript strict mode conventions
|
|
1505
|
+
- Use functional patterns where appropriate
|
|
1506
|
+
- Run tests before committing
|
|
1507
|
+
|
|
1508
|
+
@./docs/coding-standards.md
|
|
1509
|
+
`));
|
|
1510
|
+
}
|
|
1404
1511
|
showFileChangeSummary() {
|
|
1405
1512
|
const summary = this._fileChangeTracker.getSummary();
|
|
1406
1513
|
const changes = this._fileChangeTracker.getAllChanges();
|
|
@@ -1443,11 +1550,11 @@ export class InteractiveShell {
|
|
|
1443
1550
|
display.showSystemMessage(lines.join('\n'));
|
|
1444
1551
|
}
|
|
1445
1552
|
showAlphaZeroMetrics() {
|
|
1446
|
-
const summary = this.
|
|
1553
|
+
const summary = this.sessionMetrics.getPerformanceSummary();
|
|
1447
1554
|
display.showSystemMessage(summary);
|
|
1448
1555
|
}
|
|
1449
1556
|
showImprovementSuggestions() {
|
|
1450
|
-
const suggestions = this.
|
|
1557
|
+
const suggestions = this.sessionMetrics.getImprovementSuggestions();
|
|
1451
1558
|
if (suggestions.length === 0) {
|
|
1452
1559
|
display.showInfo('No improvement suggestions at this time. Keep using the shell to generate metrics!');
|
|
1453
1560
|
return;
|
|
@@ -1493,9 +1600,7 @@ export class InteractiveShell {
|
|
|
1493
1600
|
}
|
|
1494
1601
|
}
|
|
1495
1602
|
lines.push(theme.secondary('CLI Flags:'));
|
|
1496
|
-
lines.push(' --alpha-zero Enable Alpha Zero 2 RL framework');
|
|
1497
1603
|
lines.push(' --coding Enable enhanced coding tools');
|
|
1498
|
-
lines.push(' --security Enable security research tools');
|
|
1499
1604
|
lines.push(' --all-plugins Enable all optional plugins');
|
|
1500
1605
|
display.showSystemMessage(lines.join('\n'));
|
|
1501
1606
|
}
|
|
@@ -2207,7 +2312,7 @@ export class InteractiveShell {
|
|
|
2207
2312
|
this.autosaveIfEnabled();
|
|
2208
2313
|
// Track metrics with Alpha Zero 2
|
|
2209
2314
|
const elapsedMs = Date.now() - requestStartTime;
|
|
2210
|
-
this.
|
|
2315
|
+
this.sessionMetrics.recordMessage(elapsedMs);
|
|
2211
2316
|
if (!responseText?.trim()) {
|
|
2212
2317
|
display.showWarning('The provider returned an empty response. Check your API key/provider selection or retry the prompt.');
|
|
2213
2318
|
}
|
|
@@ -2225,6 +2330,7 @@ export class InteractiveShell {
|
|
|
2225
2330
|
this.stopStreamingHeartbeat();
|
|
2226
2331
|
this.isProcessing = false;
|
|
2227
2332
|
this.terminalInput.setStreaming(false);
|
|
2333
|
+
this.terminalInput.setContentEndRow(display.getTotalWrittenLines());
|
|
2228
2334
|
this.uiAdapter.endProcessing('Ready for prompts');
|
|
2229
2335
|
this.setIdleStatus();
|
|
2230
2336
|
display.newLine();
|
|
@@ -2314,7 +2420,7 @@ When truly finished with ALL tasks, explicitly state "TASK_FULLY_COMPLETE".`;
|
|
|
2314
2420
|
this.autosaveIfEnabled();
|
|
2315
2421
|
// Track metrics
|
|
2316
2422
|
const elapsedMs = Date.now() - overallStartTime;
|
|
2317
|
-
this.
|
|
2423
|
+
this.sessionMetrics.recordMessage(elapsedMs);
|
|
2318
2424
|
if (!response?.trim()) {
|
|
2319
2425
|
display.showWarning('Model returned an empty response. Retrying this iteration...');
|
|
2320
2426
|
consecutiveNoProgress++;
|
|
@@ -2451,6 +2557,7 @@ What's the next action?`;
|
|
|
2451
2557
|
this.stopStreamingHeartbeat();
|
|
2452
2558
|
this.isProcessing = false;
|
|
2453
2559
|
this.terminalInput.setStreaming(false);
|
|
2560
|
+
this.terminalInput.setContentEndRow(display.getTotalWrittenLines());
|
|
2454
2561
|
this.uiAdapter.endProcessing('Ready for prompts');
|
|
2455
2562
|
this.setIdleStatus();
|
|
2456
2563
|
this.updateStatusMessage(null);
|
|
@@ -2939,6 +3046,7 @@ What's the next action?`;
|
|
|
2939
3046
|
this.stopStreamingHeartbeat();
|
|
2940
3047
|
this.updateStatusMessage(null);
|
|
2941
3048
|
this.terminalInput.setStreaming(false);
|
|
3049
|
+
this.terminalInput.setContentEndRow(display.getTotalWrittenLines());
|
|
2942
3050
|
this.terminalInput.render();
|
|
2943
3051
|
},
|
|
2944
3052
|
onVerificationNeeded: () => {
|
|
@@ -2975,6 +3083,7 @@ What's the next action?`;
|
|
|
2975
3083
|
resetChatBoxAfterModelSwap() {
|
|
2976
3084
|
this.updateStatusMessage(null);
|
|
2977
3085
|
this.terminalInput.setStreaming(false);
|
|
3086
|
+
this.terminalInput.setContentEndRow(display.getTotalWrittenLines());
|
|
2978
3087
|
this.terminalInput.render();
|
|
2979
3088
|
this.ensureReadlineReady();
|
|
2980
3089
|
}
|