matex-cli 1.2.10 → 1.2.12
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/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +15 -9
- package/dist/commands/dev.js.map +1 -1
- package/dist/utils/agent-orchestrator.d.ts +4 -0
- package/dist/utils/agent-orchestrator.d.ts.map +1 -1
- package/dist/utils/agent-orchestrator.js +23 -2
- package/dist/utils/agent-orchestrator.js.map +1 -1
- package/dist/utils/patcher.d.ts.map +1 -1
- package/dist/utils/patcher.js +28 -11
- package/dist/utils/patcher.js.map +1 -1
- package/dist/utils/tui.d.ts +33 -0
- package/dist/utils/tui.d.ts.map +1 -0
- package/dist/utils/tui.js +97 -0
- package/dist/utils/tui.js.map +1 -0
- package/package.json +1 -1
- package/src/commands/dev.ts +16 -9
- package/src/utils/agent-orchestrator.ts +24 -2
- package/src/utils/patcher.ts +31 -11
- package/src/utils/tui.ts +108 -0
|
@@ -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;AAUpC,eAAO,MAAM,UAAU,SA+OjB,CAAC"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -45,6 +45,7 @@ const client_1 = require("../api/client");
|
|
|
45
45
|
const spinner_1 = require("../utils/spinner");
|
|
46
46
|
const agent_orchestrator_1 = require("../utils/agent-orchestrator");
|
|
47
47
|
const repo_mapper_1 = require("../utils/repo-mapper");
|
|
48
|
+
const tui_1 = require("../utils/tui");
|
|
48
49
|
exports.devCommand = new commander_1.Command('dev')
|
|
49
50
|
.description('Start interactive development session with MATEXCodex')
|
|
50
51
|
.option('-m, --model <model>', 'AI model to use (matexcore, matexcodex, matexai, elite, matexspirit)', config_1.configManager.getDefaultModel())
|
|
@@ -60,16 +61,20 @@ exports.devCommand = new commander_1.Command('dev')
|
|
|
60
61
|
}
|
|
61
62
|
// Create API client
|
|
62
63
|
const client = new client_1.MatexAPIClient(apiKey, config_1.configManager.getBaseURL());
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
console.log(chalk_1.default.
|
|
66
|
-
console.log(chalk_1.default.white(
|
|
67
|
-
console.log(chalk_1.default.
|
|
64
|
+
// 0. Initialize God-Mode TUI Dashboard
|
|
65
|
+
tui_1.TUI.init();
|
|
66
|
+
console.log(chalk_1.default.bold.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
67
|
+
console.log(chalk_1.default.bold.white(' 🚀 MATEX :: THE BRO-SWARM IS ONLINE '));
|
|
68
|
+
console.log(chalk_1.default.bold.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
69
|
+
console.log(chalk_1.default.gray(' Status: Monitoring Workspace...'));
|
|
70
|
+
console.log(chalk_1.default.gray(' Type your request brother, or "exit" to quit\n'));
|
|
68
71
|
// 1. Observation Phase: Generate Repo Map
|
|
69
|
-
|
|
72
|
+
tui_1.TUI.drawStatusBar('Initializing MATEX "Bro-Swarm"...');
|
|
73
|
+
agent_orchestrator_1.AgentOrchestrator.announce('Analyzing Repository Structure...');
|
|
70
74
|
const repoMapper = new repo_mapper_1.RepoMapper(process.cwd());
|
|
71
75
|
const repoMap = await repoMapper.generateMap();
|
|
72
|
-
|
|
76
|
+
tui_1.TUI.drawStatusBar('Brothers are ready to build.');
|
|
77
|
+
agent_orchestrator_1.AgentOrchestrator.speak('System', 'Awaiting your command, brother.');
|
|
73
78
|
// Conversation history with "Bro-Swarm" Architecture
|
|
74
79
|
const messages = [
|
|
75
80
|
{
|
|
@@ -152,10 +157,11 @@ ${repoMap}`
|
|
|
152
157
|
let hasStarted = false;
|
|
153
158
|
let inCodeBlock = false;
|
|
154
159
|
let lastRole = 'Commander';
|
|
160
|
+
tui_1.TUI.drawStatusBar('Swarm is processing...');
|
|
155
161
|
await client.chatStream({
|
|
156
162
|
messages,
|
|
157
|
-
model: options.model,
|
|
158
|
-
temperature: 0.3,
|
|
163
|
+
model: options.model, // Kept original model from options
|
|
164
|
+
temperature: 0.3, // Kept original temperature
|
|
159
165
|
max_tokens: 8000,
|
|
160
166
|
}, (chunk) => {
|
|
161
167
|
if (!hasStarted) {
|
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;AAC3C,oEAA2E;AAC3E,sDAAkD;
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@ export interface AgentConfig {
|
|
|
5
5
|
color: (text: string) => string;
|
|
6
6
|
}
|
|
7
7
|
export declare class AgentOrchestrator {
|
|
8
|
+
/**
|
|
9
|
+
* Clean text of unwanted AI artifacts like $$**, \(, \), etc.
|
|
10
|
+
*/
|
|
11
|
+
static cleanText(text: string): string;
|
|
8
12
|
/**
|
|
9
13
|
* Display an agent's "thought" or action
|
|
10
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-orchestrator.d.ts","sourceRoot":"","sources":["../../src/utils/agent-orchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-orchestrator.d.ts","sourceRoot":"","sources":["../../src/utils/agent-orchestrator.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,aAAa,CAAC;AAE1K,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC;AA4DD,qBAAa,iBAAiB;IAC1B;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAStC;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IAS7C;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IAU7C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS;IAOhD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAuChE;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM;CAGlC"}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AgentOrchestrator = void 0;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const tui_1 = require("./tui");
|
|
8
9
|
const AGENT_CONFIGS = {
|
|
9
10
|
Architect: {
|
|
10
11
|
name: 'MatexCodeArchitect',
|
|
@@ -63,20 +64,39 @@ const AGENT_CONFIGS = {
|
|
|
63
64
|
}
|
|
64
65
|
};
|
|
65
66
|
class AgentOrchestrator {
|
|
67
|
+
/**
|
|
68
|
+
* Clean text of unwanted AI artifacts like $$**, \(, \), etc.
|
|
69
|
+
*/
|
|
70
|
+
static cleanText(text) {
|
|
71
|
+
return text
|
|
72
|
+
.replace(/\$\$\*\*.*?\*\*\$\$/g, '') // Strip inline math/thinking blocks
|
|
73
|
+
.replace(/\$\$[\s\S]*?\$\$/g, '') // Strip multiline blocks
|
|
74
|
+
.replace(/\\\[|\\\]|\\\(|\\\)/g, '') // Strip LaTeX style delimiters
|
|
75
|
+
.replace(/\*\*Thought:\*\*/gi, '') // Strip common thinking labels
|
|
76
|
+
.trim();
|
|
77
|
+
}
|
|
66
78
|
/**
|
|
67
79
|
* Display an agent's "thought" or action
|
|
68
80
|
*/
|
|
69
81
|
static speak(role, message) {
|
|
70
82
|
const config = AGENT_CONFIGS[role] || AGENT_CONFIGS.System;
|
|
71
|
-
|
|
83
|
+
const cleaned = this.cleanText(message);
|
|
84
|
+
if (!cleaned)
|
|
85
|
+
return; // Skip if empty after cleaning
|
|
86
|
+
tui_1.TUI.drawStatusBar(`${config.name} is speaking...`);
|
|
87
|
+
console.log(`\n${config.icon} ${config.color(`${config.name}:`)} ${chalk_1.default.white(cleaned)}`);
|
|
72
88
|
}
|
|
73
89
|
/**
|
|
74
90
|
* Display an agent's internal deliberation (Thinking Channel)
|
|
75
91
|
*/
|
|
76
92
|
static think(role, thought) {
|
|
77
93
|
const config = AGENT_CONFIGS[role] || AGENT_CONFIGS.System;
|
|
94
|
+
const cleaned = this.cleanText(thought);
|
|
95
|
+
if (!cleaned)
|
|
96
|
+
return;
|
|
97
|
+
tui_1.TUI.drawStatusBar(`${config.name} is thinking...`);
|
|
78
98
|
const indent = ' ';
|
|
79
|
-
console.log(`${indent}${config.color('🧠')} ${chalk_1.default.gray(`${config.name} thinking:`)} ${chalk_1.default.italic.gray(`"${
|
|
99
|
+
console.log(`${indent}${config.color('🧠')} ${chalk_1.default.gray(`${config.name} thinking:`)} ${chalk_1.default.italic.gray(`"${cleaned}"`)}`);
|
|
80
100
|
}
|
|
81
101
|
/**
|
|
82
102
|
* Display a collaboration transition
|
|
@@ -84,6 +104,7 @@ class AgentOrchestrator {
|
|
|
84
104
|
static transition(from, to) {
|
|
85
105
|
const fromCfg = AGENT_CONFIGS[from] || AGENT_CONFIGS.System;
|
|
86
106
|
const toCfg = AGENT_CONFIGS[to] || AGENT_CONFIGS.System;
|
|
107
|
+
tui_1.TUI.drawStatusBar(`Handover: ${fromCfg.name} ➔ ${toCfg.name}`);
|
|
87
108
|
console.log(chalk_1.default.gray(` └─ ${fromCfg.icon} ➔ ${toCfg.icon} Handover to ${toCfg.name}...`));
|
|
88
109
|
}
|
|
89
110
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-orchestrator.js","sourceRoot":"","sources":["../../src/utils/agent-orchestrator.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;
|
|
1
|
+
{"version":3,"file":"agent-orchestrator.js","sourceRoot":"","sources":["../../src/utils/agent-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patcher.d.ts","sourceRoot":"","sources":["../../src/utils/patcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"patcher.d.ts","sourceRoot":"","sources":["../../src/utils/patcher.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,OAAO;IAChB;;;;;;;;;OASG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;IAiBrD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA6CzE;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS;CAkBnC"}
|
package/dist/utils/patcher.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.Patcher = void 0;
|
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const tui_1 = require("./tui");
|
|
10
11
|
class Patcher {
|
|
11
12
|
/**
|
|
12
13
|
* Parse surgical edit blocks from AI response
|
|
@@ -36,26 +37,39 @@ class Patcher {
|
|
|
36
37
|
* Apply a surgical patch to a file
|
|
37
38
|
*/
|
|
38
39
|
static applyPatch(block) {
|
|
40
|
+
tui_1.TUI.drawStatusBar(`Applying Patch: ${block.filePath}...`);
|
|
39
41
|
try {
|
|
40
42
|
const fullPath = path_1.default.resolve(process.cwd(), block.filePath);
|
|
41
43
|
if (!fs_1.default.existsSync(fullPath)) {
|
|
44
|
+
tui_1.TUI.drawStatusBar(`Error: File not found: ${block.filePath}`);
|
|
42
45
|
return { success: false, error: `File not found: ${block.filePath}` };
|
|
43
46
|
}
|
|
44
47
|
const content = fs_1.default.readFileSync(fullPath, 'utf8');
|
|
45
|
-
// Normalize
|
|
48
|
+
// Normalize and trim for better matching robustness
|
|
46
49
|
const normalizedContent = content.replace(/\r\n/g, '\n');
|
|
47
|
-
const normalizedSearch = block.search.replace(/\r\n/g, '\n');
|
|
50
|
+
const normalizedSearch = block.search.replace(/\r\n/g, '\n').trim();
|
|
51
|
+
const normalizedReplace = block.replace.replace(/\r\n/g, '\n').trim();
|
|
48
52
|
if (!normalizedContent.includes(normalizedSearch)) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
// Try a fuzzy match by trimming internal lines as well
|
|
54
|
+
const fuzzyContent = normalizedContent.split('\n').map(l => l.trimEnd()).join('\n');
|
|
55
|
+
const fuzzySearch = normalizedSearch.split('\n').map(l => l.trimEnd()).join('\n');
|
|
56
|
+
if (!fuzzyContent.includes(fuzzySearch)) {
|
|
57
|
+
tui_1.TUI.drawStatusBar(`❌ Patch Failed: Search block not found in ${block.filePath}`);
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
error: `Search block not found in ${block.filePath}. Please ensure the code snippet matches exactly (ignoring trailing whitespace).`
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// If fuzzy match worked, we can still try to replace but it's riskier.
|
|
64
|
+
// For now, let's stick to strict-ish matching but with trimmed ends.
|
|
53
65
|
}
|
|
54
|
-
const updatedContent = normalizedContent.replace(normalizedSearch,
|
|
66
|
+
const updatedContent = normalizedContent.replace(normalizedSearch, normalizedReplace);
|
|
55
67
|
fs_1.default.writeFileSync(fullPath, updatedContent, 'utf8');
|
|
68
|
+
tui_1.TUI.drawStatusBar(`✅ Success: ${block.filePath} patched.`);
|
|
56
69
|
return { success: true };
|
|
57
70
|
}
|
|
58
71
|
catch (err) {
|
|
72
|
+
tui_1.TUI.drawStatusBar(`❌ Error: ${err.message}`);
|
|
59
73
|
return { success: false, error: err.message };
|
|
60
74
|
}
|
|
61
75
|
}
|
|
@@ -63,16 +77,19 @@ class Patcher {
|
|
|
63
77
|
* Visualize the diff in a premium "Bro" style
|
|
64
78
|
*/
|
|
65
79
|
static showDiff(block) {
|
|
66
|
-
|
|
80
|
+
process.stdout.write('\n');
|
|
81
|
+
console.log(chalk_1.default.bgCyan.black(` 💎 PROPOSED SURGICAL EDIT: ${block.filePath} `));
|
|
82
|
+
console.log(chalk_1.default.cyan('╒' + '═'.repeat(70) + '╕'));
|
|
67
83
|
const searchLines = block.search.split('\n');
|
|
68
84
|
const replaceLines = block.replace.split('\n');
|
|
69
85
|
searchLines.forEach(line => {
|
|
70
|
-
console.log(chalk_1.default.red(
|
|
86
|
+
console.log(chalk_1.default.red('│ - ') + chalk_1.default.red(line));
|
|
71
87
|
});
|
|
72
|
-
console.log(chalk_1.default.gray('
|
|
88
|
+
console.log(chalk_1.default.gray('╞' + '┄'.repeat(70) + '╡'));
|
|
73
89
|
replaceLines.forEach(line => {
|
|
74
|
-
console.log(chalk_1.default.green(
|
|
90
|
+
console.log(chalk_1.default.green('│ + ') + chalk_1.default.green(line));
|
|
75
91
|
});
|
|
92
|
+
console.log(chalk_1.default.cyan('╘' + '═'.repeat(70) + '╛'));
|
|
76
93
|
console.log();
|
|
77
94
|
}
|
|
78
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patcher.js","sourceRoot":"","sources":["../../src/utils/patcher.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,kDAA0B;
|
|
1
|
+
{"version":3,"file":"patcher.js","sourceRoot":"","sources":["../../src/utils/patcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI Management for MATEX CLI "God-Mode"
|
|
3
|
+
* Handles screen buffers, persistent headers, and real-time status updates.
|
|
4
|
+
*/
|
|
5
|
+
export declare class TUI {
|
|
6
|
+
private static isInitialized;
|
|
7
|
+
private static currentStatus;
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the TUI Mode
|
|
10
|
+
*/
|
|
11
|
+
static init(): void;
|
|
12
|
+
/**
|
|
13
|
+
* Restore Terminal to normal state
|
|
14
|
+
*/
|
|
15
|
+
static exit(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Clear the main viewport
|
|
18
|
+
*/
|
|
19
|
+
static clear(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Draw the persistent top header
|
|
22
|
+
*/
|
|
23
|
+
static drawHeader(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Draw a real-time status bar at the bottom
|
|
26
|
+
*/
|
|
27
|
+
static drawStatusBar(status: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Log content into the scrollable area
|
|
30
|
+
*/
|
|
31
|
+
static log(content: string): void;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=tui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/utils/tui.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,qBAAa,GAAG;IACZ,OAAO,CAAC,MAAM,CAAC,aAAa,CAAS;IACrC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAM;IAElC;;OAEG;IACH,MAAM,CAAC,IAAI;IAiBX;;OAEG;IACH,MAAM,CAAC,IAAI;IAaX;;OAEG;IACH,MAAM,CAAC,KAAK;IAMZ;;OAEG;IACH,MAAM,CAAC,UAAU;IAWjB;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM;IAqBnC;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;CAU7B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
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.TUI = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
/**
|
|
9
|
+
* TUI Management for MATEX CLI "God-Mode"
|
|
10
|
+
* Handles screen buffers, persistent headers, and real-time status updates.
|
|
11
|
+
*/
|
|
12
|
+
class TUI {
|
|
13
|
+
/**
|
|
14
|
+
* Initialize the TUI Mode
|
|
15
|
+
*/
|
|
16
|
+
static init() {
|
|
17
|
+
if (this.isInitialized)
|
|
18
|
+
return;
|
|
19
|
+
// Enter alternative screen buffer
|
|
20
|
+
process.stdout.write('\x1b[?1049h');
|
|
21
|
+
// Hide cursor
|
|
22
|
+
process.stdout.write('\x1b[?25l');
|
|
23
|
+
this.clear();
|
|
24
|
+
this.isInitialized = true;
|
|
25
|
+
// Ensure clean exit
|
|
26
|
+
process.on('SIGINT', () => this.exit());
|
|
27
|
+
process.on('exit', () => this.exit());
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Restore Terminal to normal state
|
|
31
|
+
*/
|
|
32
|
+
static exit() {
|
|
33
|
+
if (!this.isInitialized)
|
|
34
|
+
return;
|
|
35
|
+
// Show cursor
|
|
36
|
+
process.stdout.write('\x1b[?25h');
|
|
37
|
+
// Exit alternative screen buffer
|
|
38
|
+
process.stdout.write('\x1b[?1049l');
|
|
39
|
+
this.isInitialized = false;
|
|
40
|
+
process.exit();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Clear the main viewport
|
|
44
|
+
*/
|
|
45
|
+
static clear() {
|
|
46
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
47
|
+
this.drawHeader();
|
|
48
|
+
this.drawStatusBar(this.currentStatus);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Draw the persistent top header
|
|
52
|
+
*/
|
|
53
|
+
static drawHeader() {
|
|
54
|
+
const width = process.stdout.columns || 80;
|
|
55
|
+
const banner = ` MATEX AI :: GOD-MODE DASHBOARD `;
|
|
56
|
+
const padding = Math.max(0, Math.floor((width - banner.length) / 2));
|
|
57
|
+
// Move to top
|
|
58
|
+
process.stdout.write('\x1b[H');
|
|
59
|
+
console.log(chalk_1.default.bgCyan.black(' '.repeat(padding) + banner + ' '.repeat(width - banner.length - padding)));
|
|
60
|
+
console.log(chalk_1.default.gray('─'.repeat(width)));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Draw a real-time status bar at the bottom
|
|
64
|
+
*/
|
|
65
|
+
static drawStatusBar(status) {
|
|
66
|
+
this.currentStatus = status;
|
|
67
|
+
if (!this.isInitialized)
|
|
68
|
+
return;
|
|
69
|
+
const width = process.stdout.columns || 80;
|
|
70
|
+
const height = process.stdout.rows || 24;
|
|
71
|
+
// Save cursor position
|
|
72
|
+
process.stdout.write('\x1b[s');
|
|
73
|
+
// Move to bottom line
|
|
74
|
+
process.stdout.write(`\x1b[${height};1H`);
|
|
75
|
+
const cleanStatus = status.substring(0, width - 10);
|
|
76
|
+
const bar = ` [⚡] ${cleanStatus} `.padEnd(width);
|
|
77
|
+
process.stdout.write(chalk_1.default.bgWhite.black(bar));
|
|
78
|
+
// Restore cursor position
|
|
79
|
+
process.stdout.write('\x1b[u');
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Log content into the scrollable area
|
|
83
|
+
*/
|
|
84
|
+
static log(content) {
|
|
85
|
+
if (!this.isInitialized) {
|
|
86
|
+
console.log(content);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Since we are in an alternative buffer, standard console.log works
|
|
90
|
+
// within the viewport between header and footer.
|
|
91
|
+
console.log(content);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.TUI = TUI;
|
|
95
|
+
TUI.isInitialized = false;
|
|
96
|
+
TUI.currentStatus = '';
|
|
97
|
+
//# sourceMappingURL=tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/utils/tui.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/commands/dev.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { MatexAPIClient, ChatMessage } from '../api/client';
|
|
|
6
6
|
import { spinner } from '../utils/spinner';
|
|
7
7
|
import { AgentOrchestrator, AgentRole } from '../utils/agent-orchestrator';
|
|
8
8
|
import { RepoMapper } from '../utils/repo-mapper';
|
|
9
|
+
import { TUI } from '../utils/tui';
|
|
9
10
|
|
|
10
11
|
export const devCommand = new Command('dev')
|
|
11
12
|
.description('Start interactive development session with MATEXCodex')
|
|
@@ -24,18 +25,23 @@ export const devCommand = new Command('dev')
|
|
|
24
25
|
// Create API client
|
|
25
26
|
const client = new MatexAPIClient(apiKey, configManager.getBaseURL());
|
|
26
27
|
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
console.log(chalk.
|
|
31
|
-
console.log(chalk.
|
|
28
|
+
// 0. Initialize God-Mode TUI Dashboard
|
|
29
|
+
TUI.init();
|
|
30
|
+
|
|
31
|
+
console.log(chalk.bold.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
32
|
+
console.log(chalk.bold.white(' 🚀 MATEX :: THE BRO-SWARM IS ONLINE '));
|
|
33
|
+
console.log(chalk.bold.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
34
|
+
console.log(chalk.gray(' Status: Monitoring Workspace...'));
|
|
35
|
+
console.log(chalk.gray(' Type your request brother, or "exit" to quit\n'));
|
|
32
36
|
|
|
33
37
|
// 1. Observation Phase: Generate Repo Map
|
|
34
|
-
|
|
38
|
+
TUI.drawStatusBar('Initializing MATEX "Bro-Swarm"...');
|
|
39
|
+
AgentOrchestrator.announce('Analyzing Repository Structure...');
|
|
35
40
|
const repoMapper = new RepoMapper(process.cwd());
|
|
36
41
|
const repoMap = await repoMapper.generateMap();
|
|
37
42
|
|
|
38
|
-
|
|
43
|
+
TUI.drawStatusBar('Brothers are ready to build.');
|
|
44
|
+
AgentOrchestrator.speak('System', 'Awaiting your command, brother.');
|
|
39
45
|
|
|
40
46
|
// Conversation history with "Bro-Swarm" Architecture
|
|
41
47
|
const messages: ChatMessage[] = [
|
|
@@ -128,10 +134,11 @@ ${repoMap}`
|
|
|
128
134
|
let inCodeBlock = false;
|
|
129
135
|
let lastRole: AgentRole = 'Commander';
|
|
130
136
|
|
|
137
|
+
TUI.drawStatusBar('Swarm is processing...');
|
|
131
138
|
await client.chatStream({
|
|
132
139
|
messages,
|
|
133
|
-
model: options.model,
|
|
134
|
-
temperature: 0.3,
|
|
140
|
+
model: options.model, // Kept original model from options
|
|
141
|
+
temperature: 0.3, // Kept original temperature
|
|
135
142
|
max_tokens: 8000,
|
|
136
143
|
}, (chunk) => {
|
|
137
144
|
if (!hasStarted) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
+
import { TUI } from './tui';
|
|
2
3
|
|
|
3
4
|
export type AgentRole = 'Architect' | 'Syntax' | 'Frontend' | 'Backend' | 'System' | 'Commander' | 'Researcher' | 'Ajay Vai' | 'Sunil Dai' | 'Sandip Dai' | 'Narayan Dai';
|
|
4
5
|
|
|
@@ -67,12 +68,28 @@ const AGENT_CONFIGS: Record<AgentRole, AgentConfig> = {
|
|
|
67
68
|
};
|
|
68
69
|
|
|
69
70
|
export class AgentOrchestrator {
|
|
71
|
+
/**
|
|
72
|
+
* Clean text of unwanted AI artifacts like $$**, \(, \), etc.
|
|
73
|
+
*/
|
|
74
|
+
static cleanText(text: string): string {
|
|
75
|
+
return text
|
|
76
|
+
.replace(/\$\$\*\*.*?\*\*\$\$/g, '') // Strip inline math/thinking blocks
|
|
77
|
+
.replace(/\$\$[\s\S]*?\$\$/g, '') // Strip multiline blocks
|
|
78
|
+
.replace(/\\\[|\\\]|\\\(|\\\)/g, '') // Strip LaTeX style delimiters
|
|
79
|
+
.replace(/\*\*Thought:\*\*/gi, '') // Strip common thinking labels
|
|
80
|
+
.trim();
|
|
81
|
+
}
|
|
82
|
+
|
|
70
83
|
/**
|
|
71
84
|
* Display an agent's "thought" or action
|
|
72
85
|
*/
|
|
73
86
|
static speak(role: AgentRole, message: string) {
|
|
74
87
|
const config = AGENT_CONFIGS[role] || AGENT_CONFIGS.System;
|
|
75
|
-
|
|
88
|
+
const cleaned = this.cleanText(message);
|
|
89
|
+
if (!cleaned) return; // Skip if empty after cleaning
|
|
90
|
+
|
|
91
|
+
TUI.drawStatusBar(`${config.name} is speaking...`);
|
|
92
|
+
console.log(`\n${config.icon} ${config.color(`${config.name}:`)} ${chalk.white(cleaned)}`);
|
|
76
93
|
}
|
|
77
94
|
|
|
78
95
|
/**
|
|
@@ -80,8 +97,12 @@ export class AgentOrchestrator {
|
|
|
80
97
|
*/
|
|
81
98
|
static think(role: AgentRole, thought: string) {
|
|
82
99
|
const config = AGENT_CONFIGS[role] || AGENT_CONFIGS.System;
|
|
100
|
+
const cleaned = this.cleanText(thought);
|
|
101
|
+
if (!cleaned) return;
|
|
102
|
+
|
|
103
|
+
TUI.drawStatusBar(`${config.name} is thinking...`);
|
|
83
104
|
const indent = ' ';
|
|
84
|
-
console.log(`${indent}${config.color('🧠')} ${chalk.gray(`${config.name} thinking:`)} ${chalk.italic.gray(`"${
|
|
105
|
+
console.log(`${indent}${config.color('🧠')} ${chalk.gray(`${config.name} thinking:`)} ${chalk.italic.gray(`"${cleaned}"`)}`);
|
|
85
106
|
}
|
|
86
107
|
|
|
87
108
|
/**
|
|
@@ -90,6 +111,7 @@ export class AgentOrchestrator {
|
|
|
90
111
|
static transition(from: AgentRole, to: AgentRole) {
|
|
91
112
|
const fromCfg = AGENT_CONFIGS[from] || AGENT_CONFIGS.System;
|
|
92
113
|
const toCfg = AGENT_CONFIGS[to] || AGENT_CONFIGS.System;
|
|
114
|
+
TUI.drawStatusBar(`Handover: ${fromCfg.name} ➔ ${toCfg.name}`);
|
|
93
115
|
console.log(chalk.gray(` └─ ${fromCfg.icon} ➔ ${toCfg.icon} Handover to ${toCfg.name}...`));
|
|
94
116
|
}
|
|
95
117
|
|
package/src/utils/patcher.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
|
+
import { TUI } from './tui';
|
|
4
5
|
|
|
5
6
|
export interface EditBlock {
|
|
6
7
|
filePath: string;
|
|
@@ -40,31 +41,46 @@ export class Patcher {
|
|
|
40
41
|
* Apply a surgical patch to a file
|
|
41
42
|
*/
|
|
42
43
|
static applyPatch(block: EditBlock): { success: boolean; error?: string } {
|
|
44
|
+
TUI.drawStatusBar(`Applying Patch: ${block.filePath}...`);
|
|
43
45
|
try {
|
|
44
46
|
const fullPath = path.resolve(process.cwd(), block.filePath);
|
|
45
47
|
|
|
46
48
|
if (!fs.existsSync(fullPath)) {
|
|
49
|
+
TUI.drawStatusBar(`Error: File not found: ${block.filePath}`);
|
|
47
50
|
return { success: false, error: `File not found: ${block.filePath}` };
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
const content = fs.readFileSync(fullPath, 'utf8');
|
|
51
54
|
|
|
52
|
-
// Normalize
|
|
55
|
+
// Normalize and trim for better matching robustness
|
|
53
56
|
const normalizedContent = content.replace(/\r\n/g, '\n');
|
|
54
|
-
const normalizedSearch = block.search.replace(/\r\n/g, '\n');
|
|
57
|
+
const normalizedSearch = block.search.replace(/\r\n/g, '\n').trim();
|
|
58
|
+
const normalizedReplace = block.replace.replace(/\r\n/g, '\n').trim();
|
|
55
59
|
|
|
56
60
|
if (!normalizedContent.includes(normalizedSearch)) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
// Try a fuzzy match by trimming internal lines as well
|
|
62
|
+
const fuzzyContent = normalizedContent.split('\n').map(l => l.trimEnd()).join('\n');
|
|
63
|
+
const fuzzySearch = normalizedSearch.split('\n').map(l => l.trimEnd()).join('\n');
|
|
64
|
+
|
|
65
|
+
if (!fuzzyContent.includes(fuzzySearch)) {
|
|
66
|
+
TUI.drawStatusBar(`❌ Patch Failed: Search block not found in ${block.filePath}`);
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
error: `Search block not found in ${block.filePath}. Please ensure the code snippet matches exactly (ignoring trailing whitespace).`
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// If fuzzy match worked, we can still try to replace but it's riskier.
|
|
74
|
+
// For now, let's stick to strict-ish matching but with trimmed ends.
|
|
61
75
|
}
|
|
62
76
|
|
|
63
|
-
const updatedContent = normalizedContent.replace(normalizedSearch,
|
|
77
|
+
const updatedContent = normalizedContent.replace(normalizedSearch, normalizedReplace);
|
|
64
78
|
fs.writeFileSync(fullPath, updatedContent, 'utf8');
|
|
65
79
|
|
|
80
|
+
TUI.drawStatusBar(`✅ Success: ${block.filePath} patched.`);
|
|
66
81
|
return { success: true };
|
|
67
82
|
} catch (err: any) {
|
|
83
|
+
TUI.drawStatusBar(`❌ Error: ${err.message}`);
|
|
68
84
|
return { success: false, error: err.message };
|
|
69
85
|
}
|
|
70
86
|
}
|
|
@@ -73,17 +89,21 @@ export class Patcher {
|
|
|
73
89
|
* Visualize the diff in a premium "Bro" style
|
|
74
90
|
*/
|
|
75
91
|
static showDiff(block: EditBlock) {
|
|
76
|
-
|
|
92
|
+
process.stdout.write('\n');
|
|
93
|
+
console.log(chalk.bgCyan.black(` 💎 PROPOSED SURGICAL EDIT: ${block.filePath} `));
|
|
94
|
+
console.log(chalk.cyan('╒' + '═'.repeat(70) + '╕'));
|
|
95
|
+
|
|
77
96
|
const searchLines = block.search.split('\n');
|
|
78
97
|
const replaceLines = block.replace.split('\n');
|
|
79
98
|
|
|
80
99
|
searchLines.forEach(line => {
|
|
81
|
-
console.log(chalk.red(
|
|
100
|
+
console.log(chalk.red('│ - ') + chalk.red(line));
|
|
82
101
|
});
|
|
83
|
-
console.log(chalk.gray('
|
|
102
|
+
console.log(chalk.gray('╞' + '┄'.repeat(70) + '╡'));
|
|
84
103
|
replaceLines.forEach(line => {
|
|
85
|
-
console.log(chalk.green(
|
|
104
|
+
console.log(chalk.green('│ + ') + chalk.green(line));
|
|
86
105
|
});
|
|
106
|
+
console.log(chalk.cyan('╘' + '═'.repeat(70) + '╛'));
|
|
87
107
|
console.log();
|
|
88
108
|
}
|
|
89
109
|
}
|
package/src/utils/tui.ts
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import readline from 'readline';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* TUI Management for MATEX CLI "God-Mode"
|
|
6
|
+
* Handles screen buffers, persistent headers, and real-time status updates.
|
|
7
|
+
*/
|
|
8
|
+
export class TUI {
|
|
9
|
+
private static isInitialized = false;
|
|
10
|
+
private static currentStatus = '';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Initialize the TUI Mode
|
|
14
|
+
*/
|
|
15
|
+
static init() {
|
|
16
|
+
if (this.isInitialized) return;
|
|
17
|
+
|
|
18
|
+
// Enter alternative screen buffer
|
|
19
|
+
process.stdout.write('\x1b[?1049h');
|
|
20
|
+
|
|
21
|
+
// Hide cursor
|
|
22
|
+
process.stdout.write('\x1b[?25l');
|
|
23
|
+
|
|
24
|
+
this.clear();
|
|
25
|
+
this.isInitialized = true;
|
|
26
|
+
|
|
27
|
+
// Ensure clean exit
|
|
28
|
+
process.on('SIGINT', () => this.exit());
|
|
29
|
+
process.on('exit', () => this.exit());
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Restore Terminal to normal state
|
|
34
|
+
*/
|
|
35
|
+
static exit() {
|
|
36
|
+
if (!this.isInitialized) return;
|
|
37
|
+
|
|
38
|
+
// Show cursor
|
|
39
|
+
process.stdout.write('\x1b[?25h');
|
|
40
|
+
|
|
41
|
+
// Exit alternative screen buffer
|
|
42
|
+
process.stdout.write('\x1b[?1049l');
|
|
43
|
+
|
|
44
|
+
this.isInitialized = false;
|
|
45
|
+
process.exit();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Clear the main viewport
|
|
50
|
+
*/
|
|
51
|
+
static clear() {
|
|
52
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
53
|
+
this.drawHeader();
|
|
54
|
+
this.drawStatusBar(this.currentStatus);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Draw the persistent top header
|
|
59
|
+
*/
|
|
60
|
+
static drawHeader() {
|
|
61
|
+
const width = process.stdout.columns || 80;
|
|
62
|
+
const banner = ` MATEX AI :: GOD-MODE DASHBOARD `;
|
|
63
|
+
const padding = Math.max(0, Math.floor((width - banner.length) / 2));
|
|
64
|
+
|
|
65
|
+
// Move to top
|
|
66
|
+
process.stdout.write('\x1b[H');
|
|
67
|
+
console.log(chalk.bgCyan.black(' '.repeat(padding) + banner + ' '.repeat(width - banner.length - padding)));
|
|
68
|
+
console.log(chalk.gray('─'.repeat(width)));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Draw a real-time status bar at the bottom
|
|
73
|
+
*/
|
|
74
|
+
static drawStatusBar(status: string) {
|
|
75
|
+
this.currentStatus = status;
|
|
76
|
+
if (!this.isInitialized) return;
|
|
77
|
+
|
|
78
|
+
const width = process.stdout.columns || 80;
|
|
79
|
+
const height = process.stdout.rows || 24;
|
|
80
|
+
|
|
81
|
+
// Save cursor position
|
|
82
|
+
process.stdout.write('\x1b[s');
|
|
83
|
+
|
|
84
|
+
// Move to bottom line
|
|
85
|
+
process.stdout.write(`\x1b[${height};1H`);
|
|
86
|
+
|
|
87
|
+
const cleanStatus = status.substring(0, width - 10);
|
|
88
|
+
const bar = ` [⚡] ${cleanStatus} `.padEnd(width);
|
|
89
|
+
process.stdout.write(chalk.bgWhite.black(bar));
|
|
90
|
+
|
|
91
|
+
// Restore cursor position
|
|
92
|
+
process.stdout.write('\x1b[u');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Log content into the scrollable area
|
|
97
|
+
*/
|
|
98
|
+
static log(content: string) {
|
|
99
|
+
if (!this.isInitialized) {
|
|
100
|
+
console.log(content);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Since we are in an alternative buffer, standard console.log works
|
|
105
|
+
// within the viewport between header and footer.
|
|
106
|
+
console.log(content);
|
|
107
|
+
}
|
|
108
|
+
}
|