matex-cli 1.1.13 → 1.2.1
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/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +62 -24
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +61 -17
- package/dist/commands/dev.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/agent-orchestrator.d.ts +21 -0
- package/dist/utils/agent-orchestrator.d.ts.map +1 -0
- package/dist/utils/agent-orchestrator.js +59 -0
- package/dist/utils/agent-orchestrator.js.map +1 -0
- package/dist/utils/command-executor.js +2 -2
- package/dist/utils/command-executor.js.map +1 -1
- package/dist/utils/repo-mapper.d.ts +29 -0
- package/dist/utils/repo-mapper.d.ts.map +1 -0
- package/dist/utils/repo-mapper.js +150 -0
- package/dist/utils/repo-mapper.js.map +1 -0
- package/package.json +1 -1
- package/src/commands/chat.ts +59 -23
- package/src/commands/dev.ts +59 -18
- package/src/index.ts +1 -1
- package/src/utils/agent-orchestrator.ts +63 -0
- package/src/utils/command-executor.ts +2 -2
- package/src/utils/repo-mapper.ts +130 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,WAAW,SA8MlB,CAAC"}
|
package/dist/commands/chat.js
CHANGED
|
@@ -43,6 +43,8 @@ const inquirer_1 = __importDefault(require("inquirer"));
|
|
|
43
43
|
const config_1 = require("../utils/config");
|
|
44
44
|
const client_1 = require("../api/client");
|
|
45
45
|
const spinner_1 = require("../utils/spinner");
|
|
46
|
+
const agent_orchestrator_1 = require("../utils/agent-orchestrator");
|
|
47
|
+
const repo_mapper_1 = require("../utils/repo-mapper");
|
|
46
48
|
exports.chatCommand = new commander_1.Command('chat')
|
|
47
49
|
.description('Start an interactive chat session with MATEX AI')
|
|
48
50
|
.option('-m, --model <model>', 'AI model to use (matexcodex, matexai, elite, matexspirit)', config_1.configManager.getDefaultModel())
|
|
@@ -59,33 +61,37 @@ exports.chatCommand = new commander_1.Command('chat')
|
|
|
59
61
|
// Create API client
|
|
60
62
|
const client = new client_1.MatexAPIClient(apiKey, config_1.configManager.getBaseURL());
|
|
61
63
|
// Welcome message
|
|
62
|
-
|
|
64
|
+
agent_orchestrator_1.AgentOrchestrator.announce('MATEX Multi-Agent Orchestration Session');
|
|
63
65
|
console.log(chalk_1.default.gray(`Model: ${options.model}`));
|
|
64
66
|
console.log(chalk_1.default.gray('Type "exit" or "quit" to end the session\n'));
|
|
65
|
-
//
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
catch (e) { }
|
|
72
|
-
// Conversation history with System Prompt
|
|
67
|
+
// 1. Observation Phase: Generate Repo Map
|
|
68
|
+
agent_orchestrator_1.AgentOrchestrator.announce('Initializing Codex Core Engine...');
|
|
69
|
+
const repoMapper = new repo_mapper_1.RepoMapper(process.cwd());
|
|
70
|
+
const repoMap = await repoMapper.generateMap();
|
|
71
|
+
agent_orchestrator_1.AgentOrchestrator.speak('System', 'Repository Map Generated.');
|
|
72
|
+
// Conversation history with Codex Architecture
|
|
73
73
|
const messages = [
|
|
74
74
|
{
|
|
75
75
|
role: 'system',
|
|
76
|
-
content: `You are
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
76
|
+
content: `You are the MATEX Codex Core (v1.2.0).
|
|
77
|
+
Your architecture is based on the OODA Loop: Observe, Orient, Decide, Act.
|
|
78
|
+
|
|
79
|
+
**1. CONTEXT MANAGEMENT (RepoMap)**:
|
|
80
|
+
The following is a high-level map of the user's project. Use it to understand the structure without reading every file.
|
|
81
|
+
${repoMap}
|
|
82
|
+
|
|
83
|
+
**2. AGENT PERSONAS**:
|
|
84
|
+
- **CodeAgent**: Logic & Architecture.
|
|
85
|
+
- **SyntaxGuard**: Security & Validation.
|
|
86
|
+
- **VisualAgent**: UI/UX & CSS.
|
|
87
|
+
- **CoreAgent**: Backend/API.
|
|
88
|
+
|
|
89
|
+
**3. PROTOCOLS**:
|
|
90
|
+
- **PLANNING**: Always outline your plan before writing code.
|
|
91
|
+
- **SMART CHUNKING**: If you need to read a file details, ask for it. Do not hallucinate content.
|
|
92
|
+
- **SAFETY**: All file operations require approval (approximated by user prompts).
|
|
93
|
+
- **INTERNAL DIALOG**: [Role] Thought: ...
|
|
94
|
+
- **CLEAN OUTPUT**: No artifacts.`
|
|
89
95
|
}
|
|
90
96
|
];
|
|
91
97
|
// Chat loop
|
|
@@ -147,8 +153,40 @@ exports.chatCommand = new commander_1.Command('chat')
|
|
|
147
153
|
spinner_1.spinner.stop();
|
|
148
154
|
// Add assistant response to history
|
|
149
155
|
messages.push({ role: 'assistant', content: response });
|
|
150
|
-
// Display
|
|
151
|
-
|
|
156
|
+
// Enhanced Multi-Agent Display
|
|
157
|
+
const segments = response.split(/(\[CodeAgent\]|\[SyntaxGuard\]|\[VisualAgent\]|\[CoreAgent\])/);
|
|
158
|
+
let hasAgents = false;
|
|
159
|
+
for (let i = 0; i < segments.length; i++) {
|
|
160
|
+
const segment = segments[i].trim();
|
|
161
|
+
if (!segment)
|
|
162
|
+
continue;
|
|
163
|
+
if (segment === '[CodeAgent]') {
|
|
164
|
+
agent_orchestrator_1.AgentOrchestrator.speak('Code', segments[++i]?.split('[')[0].trim());
|
|
165
|
+
hasAgents = true;
|
|
166
|
+
}
|
|
167
|
+
else if (segment === '[SyntaxGuard]') {
|
|
168
|
+
agent_orchestrator_1.AgentOrchestrator.speak('Syntax', segments[++i]?.split('[')[0].trim());
|
|
169
|
+
hasAgents = true;
|
|
170
|
+
}
|
|
171
|
+
else if (segment === '[VisualAgent]') {
|
|
172
|
+
agent_orchestrator_1.AgentOrchestrator.speak('Frontend', segments[++i]?.split('[')[0].trim());
|
|
173
|
+
hasAgents = true;
|
|
174
|
+
}
|
|
175
|
+
else if (segment === '[CoreAgent]') {
|
|
176
|
+
agent_orchestrator_1.AgentOrchestrator.speak('Backend', segments[++i]?.split('[')[0].trim());
|
|
177
|
+
hasAgents = true;
|
|
178
|
+
}
|
|
179
|
+
else if (!hasAgents || i === segments.length - 1) {
|
|
180
|
+
// Final summary or fallback
|
|
181
|
+
if (segment.includes('`')) {
|
|
182
|
+
// If it's code, just print it clean
|
|
183
|
+
console.log('\n' + chalk_1.default.white(segment));
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
console.log('\n' + chalk_1.default.gray(segment));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
152
190
|
console.log();
|
|
153
191
|
// Execute commands if requested
|
|
154
192
|
if (options.execute) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,wDAAgC;AAChC,4CAAgD;AAChD,0CAA4D;AAC5D,8CAA2C;
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,UAAU,SAgNjB,CAAC"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -43,6 +43,8 @@ const inquirer_1 = __importDefault(require("inquirer"));
|
|
|
43
43
|
const config_1 = require("../utils/config");
|
|
44
44
|
const client_1 = require("../api/client");
|
|
45
45
|
const spinner_1 = require("../utils/spinner");
|
|
46
|
+
const agent_orchestrator_1 = require("../utils/agent-orchestrator");
|
|
47
|
+
const repo_mapper_1 = require("../utils/repo-mapper");
|
|
46
48
|
exports.devCommand = new commander_1.Command('dev')
|
|
47
49
|
.description('Start interactive development session with MATEXCodex')
|
|
48
50
|
.option('-m, --model <model>', 'AI model to use', 'matexcodex')
|
|
@@ -59,23 +61,37 @@ exports.devCommand = new commander_1.Command('dev')
|
|
|
59
61
|
// Create API client
|
|
60
62
|
const client = new client_1.MatexAPIClient(apiKey, config_1.configManager.getBaseURL());
|
|
61
63
|
// Welcome message
|
|
62
|
-
|
|
64
|
+
agent_orchestrator_1.AgentOrchestrator.announce('MATEX Multi-Agent Dev Session');
|
|
63
65
|
console.log(chalk_1.default.gray('━'.repeat(50)));
|
|
64
66
|
console.log(chalk_1.default.white(`Model: ${chalk_1.default.cyan(options.model)}`));
|
|
65
67
|
console.log(chalk_1.default.gray('Type your requests, or "exit" to quit\n'));
|
|
66
|
-
//
|
|
68
|
+
// 1. Observation Phase: Generate Repo Map
|
|
69
|
+
agent_orchestrator_1.AgentOrchestrator.announce('Initializing Codex Core Engine...');
|
|
70
|
+
const repoMapper = new repo_mapper_1.RepoMapper(process.cwd());
|
|
71
|
+
const repoMap = await repoMapper.generateMap();
|
|
72
|
+
agent_orchestrator_1.AgentOrchestrator.speak('System', 'Repository Map Generated.');
|
|
73
|
+
// Conversation history with Codex Architecture
|
|
67
74
|
const messages = [
|
|
68
75
|
{
|
|
69
76
|
role: 'system',
|
|
70
|
-
content: `You are
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
content: `You are the MATEX Codex Dev Suite (v1.2.0).
|
|
78
|
+
Your architecture is based on the OODA Loop: Observe, Orient, Decide, Act.
|
|
79
|
+
|
|
80
|
+
**1. CONTEXT MANAGEMENT (RepoMap)**:
|
|
81
|
+
The following is a high-level map of the user's project. Use it to understand the structure without reading every file.
|
|
82
|
+
${repoMap}
|
|
83
|
+
|
|
84
|
+
**2. AGENT PERSONAS**:
|
|
85
|
+
- **CodeAgent**: Logic & Architecture.
|
|
86
|
+
- **SyntaxGuard**: Security & Validation.
|
|
87
|
+
- **VisualAgent**: UI/UX & CSS.
|
|
88
|
+
- **CoreAgent**: Backend/API.
|
|
89
|
+
|
|
90
|
+
**3. PROTOCOLS**:
|
|
91
|
+
- **PLANNING**: Always outline your plan before writing code.
|
|
92
|
+
- **SMART CHUNKING**: If you need to read a file details, ask for it. Do not hallucinate content.
|
|
93
|
+
- **SAFETY**: All file operations require approval (approximated by user prompts).
|
|
94
|
+
- **INTERNAL DIALOG**: [Role] Thought: ...`
|
|
79
95
|
}
|
|
80
96
|
];
|
|
81
97
|
let loopCount = 0;
|
|
@@ -139,13 +155,41 @@ exports.devCommand = new commander_1.Command('dev')
|
|
|
139
155
|
stream: false,
|
|
140
156
|
});
|
|
141
157
|
spinner_1.spinner.stop();
|
|
142
|
-
// Add assistant response to history
|
|
143
|
-
// We don't want to clutter history with failed attempts unless necessary for context?
|
|
144
|
-
// Actually, maintaining history of failures is good for context.
|
|
158
|
+
// Add assistant response to history
|
|
145
159
|
messages.push({ role: 'assistant', content: response });
|
|
146
|
-
// Display
|
|
147
|
-
|
|
148
|
-
|
|
160
|
+
// Enhanced Multi-Agent Display
|
|
161
|
+
const segments = response.split(/(\[CodeAgent\]|\[SyntaxGuard\]|\[VisualAgent\]|\[CoreAgent\])/);
|
|
162
|
+
let hasAgents = false;
|
|
163
|
+
for (let i = 0; i < segments.length; i++) {
|
|
164
|
+
const segment = segments[i].trim();
|
|
165
|
+
if (!segment)
|
|
166
|
+
continue;
|
|
167
|
+
if (segment === '[CodeAgent]') {
|
|
168
|
+
agent_orchestrator_1.AgentOrchestrator.speak('Code', segments[++i]?.split('[')[0].trim());
|
|
169
|
+
hasAgents = true;
|
|
170
|
+
}
|
|
171
|
+
else if (segment === '[SyntaxGuard]') {
|
|
172
|
+
agent_orchestrator_1.AgentOrchestrator.speak('Syntax', segments[++i]?.split('[')[0].trim());
|
|
173
|
+
hasAgents = true;
|
|
174
|
+
}
|
|
175
|
+
else if (segment === '[VisualAgent]') {
|
|
176
|
+
agent_orchestrator_1.AgentOrchestrator.speak('Frontend', segments[++i]?.split('[')[0].trim());
|
|
177
|
+
hasAgents = true;
|
|
178
|
+
}
|
|
179
|
+
else if (segment === '[CoreAgent]') {
|
|
180
|
+
agent_orchestrator_1.AgentOrchestrator.speak('Backend', segments[++i]?.split('[')[0].trim());
|
|
181
|
+
hasAgents = true;
|
|
182
|
+
}
|
|
183
|
+
else if (!hasAgents || i === segments.length - 1) {
|
|
184
|
+
// Final summary or fallback
|
|
185
|
+
if (segment.includes('`')) {
|
|
186
|
+
console.log('\n' + chalk_1.default.white(segment));
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
console.log('\n' + chalk_1.default.gray(segment));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
149
193
|
console.log();
|
|
150
194
|
// Execute commands if requested (or default to true for "seamless" experience?
|
|
151
195
|
// User asked for "seamless", but prompt still asks permission.
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,wDAAgC;AAChC,4CAAgD;AAChD,0CAA4D;AAC5D,8CAA2C;
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,wDAAgC;AAChC,4CAAgD;AAChD,0CAA4D;AAC5D,8CAA2C;AAC3C,oEAAgE;AAChE,sDAAkD;AAErC,QAAA,UAAU,GAAG,IAAI,mBAAO,CAAC,KAAK,CAAC;KACvC,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,YAAY,CAAC;KAC9D,MAAM,CAAC,cAAc,EAAE,2CAA2C,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;IAC3B,IAAI,CAAC;QACD,oBAAoB;QACpB,MAAM,MAAM,GAAG,sBAAa,CAAC,SAAS,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,uBAAc,CAAC,MAAM,EAAE,sBAAa,CAAC,UAAU,EAAE,CAAC,CAAC;QAEtE,kBAAkB;QAClB,sCAAiB,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,UAAU,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAEnE,0CAA0C;QAC1C,sCAAiB,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,wBAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;QAE/C,sCAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;QAE/D,+CAA+C;QAC/C,MAAM,QAAQ,GAAkB;YAC5B;gBACI,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE;;;;;EAK3B,OAAO;;;;;;;;;;;;2CAYkC;aAC1B;SACJ,CAAC;QAEF,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,aAAa;QACb,SAAS,EAAE,CAAC;QACZ,iBAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;YAC/B,QAAQ;YACR,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,iBAAO,CAAC,IAAI,EAAE,CAAC;QAEf,mBAAmB;QACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEnC,mBAAmB;QACnB,IAAI,YAAY,GAAG,IAAI,CAAC;QAExB,OAAO,YAAY,EAAE,CAAC;YAClB,iBAAiB;YACjB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACxC;oBACI,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC;oBAC3B,MAAM,EAAE,EAAE;iBACb;aACJ,CAAC,CAAC;YAEH,iBAAiB;YACjB,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC,CAAC;gBAC9E,MAAM;YACV,CAAC;YAED,mBAAmB;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,SAAS;YACb,CAAC;YAED,8BAA8B;YAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAEpD,0BAA0B;YAC1B,eAAe;YACf,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,IAAI,aAAa,GAAG,SAAS,CAAC;YAE9B,OAAO,SAAS,GAAG,SAAS,EAAE,CAAC;gBAC3B,SAAS,EAAE,CAAC;gBAEZ,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;oBAChB,iBAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACJ,iBAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACjC,CAAC;gBAED,IAAI,CAAC;oBACD,eAAe;oBACf,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;wBAC/B,QAAQ;wBACR,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,WAAW,EAAE,GAAG;wBAChB,UAAU,EAAE,IAAI;wBAChB,MAAM,EAAE,KAAK;qBAChB,CAAC,CAAC;oBAEH,iBAAO,CAAC,IAAI,EAAE,CAAC;oBAEf,oCAAoC;oBACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAExD,+BAA+B;oBAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;oBACjG,IAAI,SAAS,GAAG,KAAK,CAAC;oBAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBACnC,IAAI,CAAC,OAAO;4BAAE,SAAS;wBAEvB,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;4BAC5B,sCAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;4BACrE,SAAS,GAAG,IAAI,CAAC;wBACrB,CAAC;6BAAM,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;4BACrC,sCAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;4BACvE,SAAS,GAAG,IAAI,CAAC;wBACrB,CAAC;6BAAM,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;4BACrC,sCAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;4BACzE,SAAS,GAAG,IAAI,CAAC;wBACrB,CAAC;6BAAM,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;4BACnC,sCAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;4BACxE,SAAS,GAAG,IAAI,CAAC;wBACrB,CAAC;6BAAM,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACjD,4BAA4B;4BAC5B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCACxB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;4BAC7C,CAAC;iCAAM,CAAC;gCACJ,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;4BAC5C,CAAC;wBACL,CAAC;oBACL,CAAC;oBACD,OAAO,CAAC,GAAG,EAAE,CAAC;oBAEd,gFAAgF;oBAChF,gEAAgE;oBAChE,yDAAyD;oBACzD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBAClB,MAAM,EAAE,qBAAqB,EAAE,GAAG,wDAAa,2BAA2B,GAAC,CAAC;wBAC5E,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;wBAErD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;4BAClB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gCACjB,gDAAgD;gCAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;gCACrD,QAAQ,CAAC,IAAI,CAAC;oCACV,IAAI,EAAE,MAAM;oCACZ,OAAO,EAAE,6CAA6C,MAAM,CAAC,MAAM,+BAA+B;iCACrG,CAAC,CAAC;gCACH,SAAS;4BACb,CAAC;iCAAM,CAAC;gCACJ,sBAAsB;gCACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;gCAErE,uBAAuB;gCACvB,QAAQ,CAAC,IAAI,CAAC;oCACV,IAAI,EAAE,MAAM;oCACZ,OAAO,EAAE,iCAAiC,MAAM,CAAC,KAAK,8FAA8F;iCACvJ,CAAC,CAAC;gCACH,gBAAgB;gCAChB,SAAS;4BACb,CAAC;wBACL,CAAC;6BAAM,CAAC;4BACJ,MAAM,CAAC,yBAAyB;wBACpC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,MAAM,CAAC,wBAAwB;oBACnC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBAClB,iBAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC/B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;oBACtD,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,wDAAwD;oBACxE,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;IAEL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -53,7 +53,7 @@ const program = new commander_1.Command();
|
|
|
53
53
|
program
|
|
54
54
|
.name('matex')
|
|
55
55
|
.description('Official CLI tool for MATEX AI - Access powerful AI models from your terminal')
|
|
56
|
-
.version('1.
|
|
56
|
+
.version('1.2.0');
|
|
57
57
|
// ASCII Art Banner
|
|
58
58
|
const banner = `
|
|
59
59
|
${chalk_1.default.cyan('╔═══════════════════════════════════════╗')}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAkD;AAClD,wCAA4C;AAC5C,0CAA8C;AAC9C,8CAAkD;AAClD,0CAA8C;AAC9C,wCAA4C;AAC5C,4CAAgD;AAChD,2CAA+C;AAC/C,yCAA2D;AAC3D,6CAA0C;AAE1C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+EAA+E,CAAC;KAC5F,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type AgentRole = 'Code' | 'Syntax' | 'Frontend' | 'Backend' | 'System';
|
|
2
|
+
export interface AgentConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
icon: string;
|
|
5
|
+
color: (text: string) => string;
|
|
6
|
+
}
|
|
7
|
+
export declare class AgentOrchestrator {
|
|
8
|
+
/**
|
|
9
|
+
* Display an agent's "thought" or action
|
|
10
|
+
*/
|
|
11
|
+
static speak(role: AgentRole, message: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Display a collaboration transition
|
|
14
|
+
*/
|
|
15
|
+
static transition(from: AgentRole, to: AgentRole): void;
|
|
16
|
+
/**
|
|
17
|
+
* Clean system message
|
|
18
|
+
*/
|
|
19
|
+
static announce(message: string): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=agent-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-orchestrator.d.ts","sourceRoot":"","sources":["../../src/utils/agent-orchestrator.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC;AA8BD,qBAAa,iBAAiB;IAC1B;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IAK7C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS;IAMhD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;CAGlC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AgentOrchestrator = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const AGENT_CONFIGS = {
|
|
9
|
+
Code: {
|
|
10
|
+
name: 'CodeAgent',
|
|
11
|
+
icon: '💻',
|
|
12
|
+
color: chalk_1.default.blue,
|
|
13
|
+
},
|
|
14
|
+
Syntax: {
|
|
15
|
+
name: 'SyntaxGuard',
|
|
16
|
+
icon: '🛡️',
|
|
17
|
+
color: chalk_1.default.yellow,
|
|
18
|
+
},
|
|
19
|
+
Frontend: {
|
|
20
|
+
name: 'VisualAgent',
|
|
21
|
+
icon: '🎨',
|
|
22
|
+
color: chalk_1.default.magenta,
|
|
23
|
+
},
|
|
24
|
+
Backend: {
|
|
25
|
+
name: 'CoreAgent',
|
|
26
|
+
icon: '⚙️',
|
|
27
|
+
color: chalk_1.default.cyan,
|
|
28
|
+
},
|
|
29
|
+
System: {
|
|
30
|
+
name: 'Orchestrator',
|
|
31
|
+
icon: '🧠',
|
|
32
|
+
color: chalk_1.default.white,
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
class AgentOrchestrator {
|
|
36
|
+
/**
|
|
37
|
+
* Display an agent's "thought" or action
|
|
38
|
+
*/
|
|
39
|
+
static speak(role, message) {
|
|
40
|
+
const config = AGENT_CONFIGS[role];
|
|
41
|
+
console.log(`\n${config.icon} ${config.color(`${config.name}:`)} ${chalk_1.default.white(message)}`);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Display a collaboration transition
|
|
45
|
+
*/
|
|
46
|
+
static transition(from, to) {
|
|
47
|
+
const fromCfg = AGENT_CONFIGS[from];
|
|
48
|
+
const toCfg = AGENT_CONFIGS[to];
|
|
49
|
+
console.log(chalk_1.default.gray(` └─ ${fromCfg.icon} ➔ ${toCfg.icon} Handover to ${toCfg.name}...`));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Clean system message
|
|
53
|
+
*/
|
|
54
|
+
static announce(message) {
|
|
55
|
+
console.log(chalk_1.default.bold.white(`\n✨ ${message}`));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.AgentOrchestrator = AgentOrchestrator;
|
|
59
|
+
//# sourceMappingURL=agent-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-orchestrator.js","sourceRoot":"","sources":["../../src/utils/agent-orchestrator.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAU1B,MAAM,aAAa,GAAmC;IAClD,IAAI,EAAE;QACF,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,eAAK,CAAC,IAAI;KACpB;IACD,MAAM,EAAE;QACJ,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,eAAK,CAAC,MAAM;KACtB;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,eAAK,CAAC,OAAO;KACvB;IACD,OAAO,EAAE;QACL,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,eAAK,CAAC,IAAI;KACpB;IACD,MAAM,EAAE;QACJ,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,eAAK,CAAC,KAAK;KACrB;CACJ,CAAC;AAEF,MAAa,iBAAiB;IAC1B;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAe,EAAE,OAAe;QACzC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAe,EAAE,EAAa;QAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IACjG,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAe;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;CACJ;AAxBD,8CAwBC"}
|
|
@@ -61,9 +61,9 @@ function isDangerousCommand(command) {
|
|
|
61
61
|
* Ask user for permission to execute command
|
|
62
62
|
*/
|
|
63
63
|
async function askPermission(command) {
|
|
64
|
-
// Clean Codex-style Prompt
|
|
65
|
-
// > ls -R
|
|
64
|
+
// Clean Codex-style Prompt with Multi-Agent Iconography
|
|
66
65
|
console.log();
|
|
66
|
+
console.log(chalk_1.default.yellow('🛡️ SyntaxGuard ') + chalk_1.default.white('Analysis:'));
|
|
67
67
|
console.log(chalk_1.default.gray('> ') + chalk_1.default.white(command.code));
|
|
68
68
|
console.log();
|
|
69
69
|
if (command.dangerous) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../../src/utils/command-executor.ts"],"names":[],"mappings":";;;;;;AAiBA,0CAsBC;AA6BD,sCAqBC;AAKD,wCAYC;AAeD,sDA4CC;AArKD,kDAA0B;AAC1B,iDAAqC;AACrC,+BAAiC;AACjC,wDAAgC;AAEhC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AASlC;;GAEG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC5C,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,uCAAuC;IACvC,MAAM,cAAc,GAAG,2BAA2B,CAAC;IACnD,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7B,8BAA8B;QAC9B,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvF,QAAQ,CAAC,IAAI,CAAC;gBACV,QAAQ;gBACR,IAAI;gBACJ,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC;aACtC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAe;IACvC,MAAM,iBAAiB,GAAG;QACtB,eAAe,EAAE,WAAW;QAC5B,cAAc,EAAE,WAAW;QAC3B,eAAe,EAAE,WAAW;QAC5B,aAAa,EAAE,YAAY;QAC3B,oBAAoB,EAAE,kBAAkB;QACxC,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,uBAAuB;QAChC,eAAe,EAAE,gBAAgB;QACjC,kBAAkB,EAAE,wBAAwB;QAC5C,iBAAiB,EAAE,eAAe;QAClC,eAAe,EAAE,gBAAgB;QACjC,WAAW,EAAE,cAAc;QAC3B,iBAAiB,EAAE,iBAAiB;QACpC,cAAc,EAAE,iBAAiB;KACpC,CAAC;IAEF,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,OAAqB;IACrD,
|
|
1
|
+
{"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../../src/utils/command-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface RepoNode {
|
|
2
|
+
path: string;
|
|
3
|
+
type: 'file' | 'directory';
|
|
4
|
+
children?: RepoNode[];
|
|
5
|
+
summary?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class RepoMapper {
|
|
8
|
+
private rootPath;
|
|
9
|
+
private ignoreList;
|
|
10
|
+
constructor(rootPath: string);
|
|
11
|
+
/**
|
|
12
|
+
* Generate a hierarchical map of the repository
|
|
13
|
+
*/
|
|
14
|
+
generateMap(): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Recursive directory scan
|
|
17
|
+
*/
|
|
18
|
+
private scanDirectory;
|
|
19
|
+
/**
|
|
20
|
+
* Extract key definitions (Classes, Functions) from file content
|
|
21
|
+
* A lightweight "ctags" style summary
|
|
22
|
+
*/
|
|
23
|
+
private extractSummary;
|
|
24
|
+
/**
|
|
25
|
+
* Format the tree into a compressed string for the LLM
|
|
26
|
+
*/
|
|
27
|
+
private formatTree;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=repo-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-mapper.d.ts","sourceRoot":"","sources":["../../src/utils/repo-mapper.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAGhB;gBAEU,QAAQ,EAAE,MAAM;IAI5B;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAM3C;;OAEG;IACH,OAAO,CAAC,aAAa;IAsCrB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAiCtB;;OAEG;IACH,OAAO,CAAC,UAAU;CAiBrB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.RepoMapper = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const agent_orchestrator_1 = require("./agent-orchestrator");
|
|
40
|
+
class RepoMapper {
|
|
41
|
+
constructor(rootPath) {
|
|
42
|
+
this.ignoreList = [
|
|
43
|
+
'.git', 'node_modules', 'dist', 'build', '.next', '.DS_Store',
|
|
44
|
+
'coverage', '.vercel', '.firebase', 'out', 'public'
|
|
45
|
+
];
|
|
46
|
+
this.rootPath = rootPath;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Generate a hierarchical map of the repository
|
|
50
|
+
*/
|
|
51
|
+
async generateMap() {
|
|
52
|
+
agent_orchestrator_1.AgentOrchestrator.speak('System', `Indexing repository at ${this.rootPath}...`);
|
|
53
|
+
const tree = this.scanDirectory(this.rootPath, 0);
|
|
54
|
+
return this.formatTree(tree);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Recursive directory scan
|
|
58
|
+
*/
|
|
59
|
+
scanDirectory(currentPath, depth) {
|
|
60
|
+
const stats = fs.statSync(currentPath);
|
|
61
|
+
const name = path.basename(currentPath);
|
|
62
|
+
if (stats.isFile()) {
|
|
63
|
+
return {
|
|
64
|
+
path: currentPath,
|
|
65
|
+
type: 'file',
|
|
66
|
+
summary: this.extractSummary(currentPath)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// It's a directory
|
|
70
|
+
if (depth > 5)
|
|
71
|
+
return { path: currentPath, type: 'directory', children: [] }; // Max depth safety
|
|
72
|
+
const children = [];
|
|
73
|
+
try {
|
|
74
|
+
const items = fs.readdirSync(currentPath);
|
|
75
|
+
for (const item of items) {
|
|
76
|
+
if (this.ignoreList.includes(item))
|
|
77
|
+
continue;
|
|
78
|
+
const fullPath = path.join(currentPath, item);
|
|
79
|
+
// Simple ignore check for hidden files
|
|
80
|
+
if (item.startsWith('.') && item !== '.gitignore')
|
|
81
|
+
continue;
|
|
82
|
+
children.push(this.scanDirectory(fullPath, depth + 1));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
// Permission denied or other error
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
path: currentPath,
|
|
90
|
+
type: 'directory',
|
|
91
|
+
children: children
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Extract key definitions (Classes, Functions) from file content
|
|
96
|
+
* A lightweight "ctags" style summary
|
|
97
|
+
*/
|
|
98
|
+
extractSummary(filePath) {
|
|
99
|
+
const ext = path.extname(filePath);
|
|
100
|
+
if (!['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs'].includes(ext))
|
|
101
|
+
return '';
|
|
102
|
+
try {
|
|
103
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
104
|
+
const lines = content.split('\n');
|
|
105
|
+
const definitions = [];
|
|
106
|
+
// Very header-heavy regex matching for speed
|
|
107
|
+
for (const line of lines) {
|
|
108
|
+
const trimmed = line.trim();
|
|
109
|
+
if (trimmed.startsWith('export class ')) {
|
|
110
|
+
definitions.push(`Class: ${trimmed.split(' ')[2]}`);
|
|
111
|
+
}
|
|
112
|
+
else if (trimmed.startsWith('function ') || trimmed.startsWith('export function ')) {
|
|
113
|
+
const funcName = trimmed.split('(')[0].split(' ').pop();
|
|
114
|
+
definitions.push(`Func: ${funcName}`);
|
|
115
|
+
}
|
|
116
|
+
else if (trimmed.includes('const ') && trimmed.includes(' = (') && trimmed.includes('=>')) {
|
|
117
|
+
// Arrow functions
|
|
118
|
+
const parts = trimmed.split(' = ');
|
|
119
|
+
const name = parts[0].split(' ').pop();
|
|
120
|
+
if (name && /^[A-Z]/.test(name)) {
|
|
121
|
+
definitions.push(`Component: ${name}`); // React component guess
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return definitions.slice(0, 5).join(', '); // Limit to top 5
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
return '';
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Format the tree into a compressed string for the LLM
|
|
133
|
+
*/
|
|
134
|
+
formatTree(node, indent = '') {
|
|
135
|
+
const name = path.basename(node.path);
|
|
136
|
+
let output = `${indent}${name}`;
|
|
137
|
+
if (node.type === 'file' && node.summary) {
|
|
138
|
+
output += ` [${node.summary}]`;
|
|
139
|
+
}
|
|
140
|
+
output += '\n';
|
|
141
|
+
if (node.children) {
|
|
142
|
+
for (const child of node.children) {
|
|
143
|
+
output += this.formatTree(child, indent + ' ');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return output;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.RepoMapper = RepoMapper;
|
|
150
|
+
//# sourceMappingURL=repo-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-mapper.js","sourceRoot":"","sources":["../../src/utils/repo-mapper.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/commands/chat.ts
CHANGED
|
@@ -4,6 +4,8 @@ import inquirer from 'inquirer';
|
|
|
4
4
|
import { configManager } from '../utils/config';
|
|
5
5
|
import { MatexAPIClient, ChatMessage } from '../api/client';
|
|
6
6
|
import { spinner } from '../utils/spinner';
|
|
7
|
+
import { AgentOrchestrator } from '../utils/agent-orchestrator';
|
|
8
|
+
import { RepoMapper } from '../utils/repo-mapper';
|
|
7
9
|
|
|
8
10
|
export const chatCommand = new Command('chat')
|
|
9
11
|
.description('Start an interactive chat session with MATEX AI')
|
|
@@ -23,34 +25,40 @@ export const chatCommand = new Command('chat')
|
|
|
23
25
|
const client = new MatexAPIClient(apiKey, configManager.getBaseURL());
|
|
24
26
|
|
|
25
27
|
// Welcome message
|
|
26
|
-
|
|
28
|
+
AgentOrchestrator.announce('MATEX Multi-Agent Orchestration Session');
|
|
27
29
|
console.log(chalk.gray(`Model: ${options.model}`));
|
|
28
30
|
console.log(chalk.gray('Type "exit" or "quit" to end the session\n'));
|
|
29
31
|
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
files = fs.readdirSync(process.cwd()).slice(0, 20).join(', ');
|
|
35
|
-
} catch (e) { }
|
|
32
|
+
// 1. Observation Phase: Generate Repo Map
|
|
33
|
+
AgentOrchestrator.announce('Initializing Codex Core Engine...');
|
|
34
|
+
const repoMapper = new RepoMapper(process.cwd());
|
|
35
|
+
const repoMap = await repoMapper.generateMap();
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
AgentOrchestrator.speak('System', 'Repository Map Generated.');
|
|
38
|
+
|
|
39
|
+
// Conversation history with Codex Architecture
|
|
38
40
|
const messages: ChatMessage[] = [
|
|
39
41
|
{
|
|
40
42
|
role: 'system',
|
|
41
|
-
content: `You are
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
content: `You are the MATEX Codex Core (v1.2.0).
|
|
44
|
+
Your architecture is based on the OODA Loop: Observe, Orient, Decide, Act.
|
|
45
|
+
|
|
46
|
+
**1. CONTEXT MANAGEMENT (RepoMap)**:
|
|
47
|
+
The following is a high-level map of the user's project. Use it to understand the structure without reading every file.
|
|
48
|
+
${repoMap}
|
|
49
|
+
|
|
50
|
+
**2. AGENT PERSONAS**:
|
|
51
|
+
- **CodeAgent**: Logic & Architecture.
|
|
52
|
+
- **SyntaxGuard**: Security & Validation.
|
|
53
|
+
- **VisualAgent**: UI/UX & CSS.
|
|
54
|
+
- **CoreAgent**: Backend/API.
|
|
55
|
+
|
|
56
|
+
**3. PROTOCOLS**:
|
|
57
|
+
- **PLANNING**: Always outline your plan before writing code.
|
|
58
|
+
- **SMART CHUNKING**: If you need to read a file details, ask for it. Do not hallucinate content.
|
|
59
|
+
- **SAFETY**: All file operations require approval (approximated by user prompts).
|
|
60
|
+
- **INTERNAL DIALOG**: [Role] Thought: ...
|
|
61
|
+
- **CLEAN OUTPUT**: No artifacts.`
|
|
54
62
|
}
|
|
55
63
|
];
|
|
56
64
|
|
|
@@ -124,8 +132,36 @@ export const chatCommand = new Command('chat')
|
|
|
124
132
|
// Add assistant response to history
|
|
125
133
|
messages.push({ role: 'assistant', content: response });
|
|
126
134
|
|
|
127
|
-
// Display
|
|
128
|
-
|
|
135
|
+
// Enhanced Multi-Agent Display
|
|
136
|
+
const segments = response.split(/(\[CodeAgent\]|\[SyntaxGuard\]|\[VisualAgent\]|\[CoreAgent\])/);
|
|
137
|
+
let hasAgents = false;
|
|
138
|
+
|
|
139
|
+
for (let i = 0; i < segments.length; i++) {
|
|
140
|
+
const segment = segments[i].trim();
|
|
141
|
+
if (!segment) continue;
|
|
142
|
+
|
|
143
|
+
if (segment === '[CodeAgent]') {
|
|
144
|
+
AgentOrchestrator.speak('Code', segments[++i]?.split('[')[0].trim());
|
|
145
|
+
hasAgents = true;
|
|
146
|
+
} else if (segment === '[SyntaxGuard]') {
|
|
147
|
+
AgentOrchestrator.speak('Syntax', segments[++i]?.split('[')[0].trim());
|
|
148
|
+
hasAgents = true;
|
|
149
|
+
} else if (segment === '[VisualAgent]') {
|
|
150
|
+
AgentOrchestrator.speak('Frontend', segments[++i]?.split('[')[0].trim());
|
|
151
|
+
hasAgents = true;
|
|
152
|
+
} else if (segment === '[CoreAgent]') {
|
|
153
|
+
AgentOrchestrator.speak('Backend', segments[++i]?.split('[')[0].trim());
|
|
154
|
+
hasAgents = true;
|
|
155
|
+
} else if (!hasAgents || i === segments.length - 1) {
|
|
156
|
+
// Final summary or fallback
|
|
157
|
+
if (segment.includes('`')) {
|
|
158
|
+
// If it's code, just print it clean
|
|
159
|
+
console.log('\n' + chalk.white(segment));
|
|
160
|
+
} else {
|
|
161
|
+
console.log('\n' + chalk.gray(segment));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
129
165
|
console.log();
|
|
130
166
|
|
|
131
167
|
// Execute commands if requested
|
package/src/commands/dev.ts
CHANGED
|
@@ -4,7 +4,8 @@ import inquirer from 'inquirer';
|
|
|
4
4
|
import { configManager } from '../utils/config';
|
|
5
5
|
import { MatexAPIClient, ChatMessage } from '../api/client';
|
|
6
6
|
import { spinner } from '../utils/spinner';
|
|
7
|
-
import {
|
|
7
|
+
import { AgentOrchestrator } from '../utils/agent-orchestrator';
|
|
8
|
+
import { RepoMapper } from '../utils/repo-mapper';
|
|
8
9
|
|
|
9
10
|
export const devCommand = new Command('dev')
|
|
10
11
|
.description('Start interactive development session with MATEXCodex')
|
|
@@ -24,24 +25,40 @@ export const devCommand = new Command('dev')
|
|
|
24
25
|
const client = new MatexAPIClient(apiKey, configManager.getBaseURL());
|
|
25
26
|
|
|
26
27
|
// Welcome message
|
|
27
|
-
|
|
28
|
+
AgentOrchestrator.announce('MATEX Multi-Agent Dev Session');
|
|
28
29
|
console.log(chalk.gray('━'.repeat(50)));
|
|
29
30
|
console.log(chalk.white(`Model: ${chalk.cyan(options.model)}`));
|
|
30
31
|
console.log(chalk.gray('Type your requests, or "exit" to quit\n'));
|
|
31
32
|
|
|
32
|
-
//
|
|
33
|
+
// 1. Observation Phase: Generate Repo Map
|
|
34
|
+
AgentOrchestrator.announce('Initializing Codex Core Engine...');
|
|
35
|
+
const repoMapper = new RepoMapper(process.cwd());
|
|
36
|
+
const repoMap = await repoMapper.generateMap();
|
|
37
|
+
|
|
38
|
+
AgentOrchestrator.speak('System', 'Repository Map Generated.');
|
|
39
|
+
|
|
40
|
+
// Conversation history with Codex Architecture
|
|
33
41
|
const messages: ChatMessage[] = [
|
|
34
42
|
{
|
|
35
43
|
role: 'system',
|
|
36
|
-
content: `You are
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
content: `You are the MATEX Codex Dev Suite (v1.2.0).
|
|
45
|
+
Your architecture is based on the OODA Loop: Observe, Orient, Decide, Act.
|
|
46
|
+
|
|
47
|
+
**1. CONTEXT MANAGEMENT (RepoMap)**:
|
|
48
|
+
The following is a high-level map of the user's project. Use it to understand the structure without reading every file.
|
|
49
|
+
${repoMap}
|
|
50
|
+
|
|
51
|
+
**2. AGENT PERSONAS**:
|
|
52
|
+
- **CodeAgent**: Logic & Architecture.
|
|
53
|
+
- **SyntaxGuard**: Security & Validation.
|
|
54
|
+
- **VisualAgent**: UI/UX & CSS.
|
|
55
|
+
- **CoreAgent**: Backend/API.
|
|
56
|
+
|
|
57
|
+
**3. PROTOCOLS**:
|
|
58
|
+
- **PLANNING**: Always outline your plan before writing code.
|
|
59
|
+
- **SMART CHUNKING**: If you need to read a file details, ask for it. Do not hallucinate content.
|
|
60
|
+
- **SAFETY**: All file operations require approval (approximated by user prompts).
|
|
61
|
+
- **INTERNAL DIALOG**: [Role] Thought: ...`
|
|
45
62
|
}
|
|
46
63
|
];
|
|
47
64
|
|
|
@@ -117,14 +134,38 @@ export const devCommand = new Command('dev')
|
|
|
117
134
|
|
|
118
135
|
spinner.stop();
|
|
119
136
|
|
|
120
|
-
// Add assistant response to history
|
|
121
|
-
// We don't want to clutter history with failed attempts unless necessary for context?
|
|
122
|
-
// Actually, maintaining history of failures is good for context.
|
|
137
|
+
// Add assistant response to history
|
|
123
138
|
messages.push({ role: 'assistant', content: response });
|
|
124
139
|
|
|
125
|
-
// Display
|
|
126
|
-
|
|
127
|
-
|
|
140
|
+
// Enhanced Multi-Agent Display
|
|
141
|
+
const segments = response.split(/(\[CodeAgent\]|\[SyntaxGuard\]|\[VisualAgent\]|\[CoreAgent\])/);
|
|
142
|
+
let hasAgents = false;
|
|
143
|
+
|
|
144
|
+
for (let i = 0; i < segments.length; i++) {
|
|
145
|
+
const segment = segments[i].trim();
|
|
146
|
+
if (!segment) continue;
|
|
147
|
+
|
|
148
|
+
if (segment === '[CodeAgent]') {
|
|
149
|
+
AgentOrchestrator.speak('Code', segments[++i]?.split('[')[0].trim());
|
|
150
|
+
hasAgents = true;
|
|
151
|
+
} else if (segment === '[SyntaxGuard]') {
|
|
152
|
+
AgentOrchestrator.speak('Syntax', segments[++i]?.split('[')[0].trim());
|
|
153
|
+
hasAgents = true;
|
|
154
|
+
} else if (segment === '[VisualAgent]') {
|
|
155
|
+
AgentOrchestrator.speak('Frontend', segments[++i]?.split('[')[0].trim());
|
|
156
|
+
hasAgents = true;
|
|
157
|
+
} else if (segment === '[CoreAgent]') {
|
|
158
|
+
AgentOrchestrator.speak('Backend', segments[++i]?.split('[')[0].trim());
|
|
159
|
+
hasAgents = true;
|
|
160
|
+
} else if (!hasAgents || i === segments.length - 1) {
|
|
161
|
+
// Final summary or fallback
|
|
162
|
+
if (segment.includes('`')) {
|
|
163
|
+
console.log('\n' + chalk.white(segment));
|
|
164
|
+
} else {
|
|
165
|
+
console.log('\n' + chalk.gray(segment));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
128
169
|
console.log();
|
|
129
170
|
|
|
130
171
|
// Execute commands if requested (or default to true for "seamless" experience?
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
|
|
3
|
+
export type AgentRole = 'Code' | 'Syntax' | 'Frontend' | 'Backend' | 'System';
|
|
4
|
+
|
|
5
|
+
export interface AgentConfig {
|
|
6
|
+
name: string;
|
|
7
|
+
icon: string;
|
|
8
|
+
color: (text: string) => string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const AGENT_CONFIGS: Record<AgentRole, AgentConfig> = {
|
|
12
|
+
Code: {
|
|
13
|
+
name: 'CodeAgent',
|
|
14
|
+
icon: '💻',
|
|
15
|
+
color: chalk.blue,
|
|
16
|
+
},
|
|
17
|
+
Syntax: {
|
|
18
|
+
name: 'SyntaxGuard',
|
|
19
|
+
icon: '🛡️',
|
|
20
|
+
color: chalk.yellow,
|
|
21
|
+
},
|
|
22
|
+
Frontend: {
|
|
23
|
+
name: 'VisualAgent',
|
|
24
|
+
icon: '🎨',
|
|
25
|
+
color: chalk.magenta,
|
|
26
|
+
},
|
|
27
|
+
Backend: {
|
|
28
|
+
name: 'CoreAgent',
|
|
29
|
+
icon: '⚙️',
|
|
30
|
+
color: chalk.cyan,
|
|
31
|
+
},
|
|
32
|
+
System: {
|
|
33
|
+
name: 'Orchestrator',
|
|
34
|
+
icon: '🧠',
|
|
35
|
+
color: chalk.white,
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export class AgentOrchestrator {
|
|
40
|
+
/**
|
|
41
|
+
* Display an agent's "thought" or action
|
|
42
|
+
*/
|
|
43
|
+
static speak(role: AgentRole, message: string) {
|
|
44
|
+
const config = AGENT_CONFIGS[role];
|
|
45
|
+
console.log(`\n${config.icon} ${config.color(`${config.name}:`)} ${chalk.white(message)}`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Display a collaboration transition
|
|
50
|
+
*/
|
|
51
|
+
static transition(from: AgentRole, to: AgentRole) {
|
|
52
|
+
const fromCfg = AGENT_CONFIGS[from];
|
|
53
|
+
const toCfg = AGENT_CONFIGS[to];
|
|
54
|
+
console.log(chalk.gray(` └─ ${fromCfg.icon} ➔ ${toCfg.icon} Handover to ${toCfg.name}...`));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Clean system message
|
|
59
|
+
*/
|
|
60
|
+
static announce(message: string) {
|
|
61
|
+
console.log(chalk.bold.white(`\n✨ ${message}`));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -67,9 +67,9 @@ function isDangerousCommand(command: string): boolean {
|
|
|
67
67
|
* Ask user for permission to execute command
|
|
68
68
|
*/
|
|
69
69
|
export async function askPermission(command: CommandBlock): Promise<boolean> {
|
|
70
|
-
// Clean Codex-style Prompt
|
|
71
|
-
// > ls -R
|
|
70
|
+
// Clean Codex-style Prompt with Multi-Agent Iconography
|
|
72
71
|
console.log();
|
|
72
|
+
console.log(chalk.yellow('🛡️ SyntaxGuard ') + chalk.white('Analysis:'));
|
|
73
73
|
console.log(chalk.gray('> ') + chalk.white(command.code));
|
|
74
74
|
console.log();
|
|
75
75
|
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { AgentOrchestrator } from './agent-orchestrator';
|
|
4
|
+
|
|
5
|
+
export interface RepoNode {
|
|
6
|
+
path: string;
|
|
7
|
+
type: 'file' | 'directory';
|
|
8
|
+
children?: RepoNode[];
|
|
9
|
+
summary?: string; // e.g., "Class: AuthManager, Func: login"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export class RepoMapper {
|
|
13
|
+
private rootPath: string;
|
|
14
|
+
private ignoreList: string[] = [
|
|
15
|
+
'.git', 'node_modules', 'dist', 'build', '.next', '.DS_Store',
|
|
16
|
+
'coverage', '.vercel', '.firebase', 'out', 'public'
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
constructor(rootPath: string) {
|
|
20
|
+
this.rootPath = rootPath;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Generate a hierarchical map of the repository
|
|
25
|
+
*/
|
|
26
|
+
public async generateMap(): Promise<string> {
|
|
27
|
+
AgentOrchestrator.speak('System', `Indexing repository at ${this.rootPath}...`);
|
|
28
|
+
const tree = this.scanDirectory(this.rootPath, 0);
|
|
29
|
+
return this.formatTree(tree);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Recursive directory scan
|
|
34
|
+
*/
|
|
35
|
+
private scanDirectory(currentPath: string, depth: number): RepoNode {
|
|
36
|
+
const stats = fs.statSync(currentPath);
|
|
37
|
+
const name = path.basename(currentPath);
|
|
38
|
+
|
|
39
|
+
if (stats.isFile()) {
|
|
40
|
+
return {
|
|
41
|
+
path: currentPath,
|
|
42
|
+
type: 'file',
|
|
43
|
+
summary: this.extractSummary(currentPath)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// It's a directory
|
|
48
|
+
if (depth > 5) return { path: currentPath, type: 'directory', children: [] }; // Max depth safety
|
|
49
|
+
|
|
50
|
+
const children: RepoNode[] = [];
|
|
51
|
+
try {
|
|
52
|
+
const items = fs.readdirSync(currentPath);
|
|
53
|
+
for (const item of items) {
|
|
54
|
+
if (this.ignoreList.includes(item)) continue;
|
|
55
|
+
|
|
56
|
+
const fullPath = path.join(currentPath, item);
|
|
57
|
+
// Simple ignore check for hidden files
|
|
58
|
+
if (item.startsWith('.') && item !== '.gitignore') continue;
|
|
59
|
+
|
|
60
|
+
children.push(this.scanDirectory(fullPath, depth + 1));
|
|
61
|
+
}
|
|
62
|
+
} catch (error) {
|
|
63
|
+
// Permission denied or other error
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
path: currentPath,
|
|
68
|
+
type: 'directory',
|
|
69
|
+
children: children
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Extract key definitions (Classes, Functions) from file content
|
|
75
|
+
* A lightweight "ctags" style summary
|
|
76
|
+
*/
|
|
77
|
+
private extractSummary(filePath: string): string {
|
|
78
|
+
const ext = path.extname(filePath);
|
|
79
|
+
if (!['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs'].includes(ext)) return '';
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
83
|
+
const lines = content.split('\n');
|
|
84
|
+
const definitions: string[] = [];
|
|
85
|
+
|
|
86
|
+
// Very header-heavy regex matching for speed
|
|
87
|
+
for (const line of lines) {
|
|
88
|
+
const trimmed = line.trim();
|
|
89
|
+
if (trimmed.startsWith('export class ')) {
|
|
90
|
+
definitions.push(`Class: ${trimmed.split(' ')[2]}`);
|
|
91
|
+
} else if (trimmed.startsWith('function ') || trimmed.startsWith('export function ')) {
|
|
92
|
+
const funcName = trimmed.split('(')[0].split(' ').pop();
|
|
93
|
+
definitions.push(`Func: ${funcName}`);
|
|
94
|
+
} else if (trimmed.includes('const ') && trimmed.includes(' = (') && trimmed.includes('=>')) {
|
|
95
|
+
// Arrow functions
|
|
96
|
+
const parts = trimmed.split(' = ');
|
|
97
|
+
const name = parts[0].split(' ').pop();
|
|
98
|
+
if (name && /^[A-Z]/.test(name)) {
|
|
99
|
+
definitions.push(`Component: ${name}`); // React component guess
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return definitions.slice(0, 5).join(', '); // Limit to top 5
|
|
105
|
+
} catch (e) {
|
|
106
|
+
return '';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Format the tree into a compressed string for the LLM
|
|
112
|
+
*/
|
|
113
|
+
private formatTree(node: RepoNode, indent: string = ''): string {
|
|
114
|
+
const name = path.basename(node.path);
|
|
115
|
+
let output = `${indent}${name}`;
|
|
116
|
+
|
|
117
|
+
if (node.type === 'file' && node.summary) {
|
|
118
|
+
output += ` [${node.summary}]`;
|
|
119
|
+
}
|
|
120
|
+
output += '\n';
|
|
121
|
+
|
|
122
|
+
if (node.children) {
|
|
123
|
+
for (const child of node.children) {
|
|
124
|
+
output += this.formatTree(child, indent + ' ');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return output;
|
|
129
|
+
}
|
|
130
|
+
}
|