matex-cli 1.2.10 → 1.2.11
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.map +1 -1
- package/dist/utils/agent-orchestrator.js +4 -0
- package/dist/utils/agent-orchestrator.js.map +1 -1
- package/dist/utils/patcher.d.ts.map +1 -1
- package/dist/utils/patcher.js +14 -5
- 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 +4 -0
- package/src/utils/patcher.ts +15 -5
- 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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"}
|
|
@@ -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,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IAM7C;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IAO7C;;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',
|
|
@@ -68,6 +69,7 @@ class AgentOrchestrator {
|
|
|
68
69
|
*/
|
|
69
70
|
static speak(role, message) {
|
|
70
71
|
const config = AGENT_CONFIGS[role] || AGENT_CONFIGS.System;
|
|
72
|
+
tui_1.TUI.drawStatusBar(`${config.name} is speaking...`);
|
|
71
73
|
console.log(`\n${config.icon} ${config.color(`${config.name}:`)} ${chalk_1.default.white(message)}`);
|
|
72
74
|
}
|
|
73
75
|
/**
|
|
@@ -75,6 +77,7 @@ class AgentOrchestrator {
|
|
|
75
77
|
*/
|
|
76
78
|
static think(role, thought) {
|
|
77
79
|
const config = AGENT_CONFIGS[role] || AGENT_CONFIGS.System;
|
|
80
|
+
tui_1.TUI.drawStatusBar(`${config.name} is thinking...`);
|
|
78
81
|
const indent = ' ';
|
|
79
82
|
console.log(`${indent}${config.color('🧠')} ${chalk_1.default.gray(`${config.name} thinking:`)} ${chalk_1.default.italic.gray(`"${thought}"`)}`);
|
|
80
83
|
}
|
|
@@ -84,6 +87,7 @@ class AgentOrchestrator {
|
|
|
84
87
|
static transition(from, to) {
|
|
85
88
|
const fromCfg = AGENT_CONFIGS[from] || AGENT_CONFIGS.System;
|
|
86
89
|
const toCfg = AGENT_CONFIGS[to] || AGENT_CONFIGS.System;
|
|
90
|
+
tui_1.TUI.drawStatusBar(`Handover: ${fromCfg.name} ➔ ${toCfg.name}`);
|
|
87
91
|
console.log(chalk_1.default.gray(` └─ ${fromCfg.icon} ➔ ${toCfg.icon} Handover to ${toCfg.name}...`));
|
|
88
92
|
}
|
|
89
93
|
/**
|
|
@@ -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;IAmCzE;;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,9 +37,11 @@ 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');
|
|
@@ -46,16 +49,19 @@ class Patcher {
|
|
|
46
49
|
const normalizedContent = content.replace(/\r\n/g, '\n');
|
|
47
50
|
const normalizedSearch = block.search.replace(/\r\n/g, '\n');
|
|
48
51
|
if (!normalizedContent.includes(normalizedSearch)) {
|
|
52
|
+
tui_1.TUI.drawStatusBar(`Error: Search block not found in ${block.filePath}.`);
|
|
49
53
|
return {
|
|
50
54
|
success: false,
|
|
51
|
-
error: `Search block not found in ${block.filePath}
|
|
55
|
+
error: `Search block not found in ${block.filePath}.`
|
|
52
56
|
};
|
|
53
57
|
}
|
|
54
58
|
const updatedContent = normalizedContent.replace(normalizedSearch, block.replace.replace(/\r\n/g, '\n'));
|
|
55
59
|
fs_1.default.writeFileSync(fullPath, updatedContent, 'utf8');
|
|
60
|
+
tui_1.TUI.drawStatusBar(`Success: ${block.filePath} patched.`);
|
|
56
61
|
return { success: true };
|
|
57
62
|
}
|
|
58
63
|
catch (err) {
|
|
64
|
+
tui_1.TUI.drawStatusBar(`Error applying patch to ${block.filePath}: ${err.message}`);
|
|
59
65
|
return { success: false, error: err.message };
|
|
60
66
|
}
|
|
61
67
|
}
|
|
@@ -63,16 +69,19 @@ class Patcher {
|
|
|
63
69
|
* Visualize the diff in a premium "Bro" style
|
|
64
70
|
*/
|
|
65
71
|
static showDiff(block) {
|
|
66
|
-
|
|
72
|
+
process.stdout.write('\n');
|
|
73
|
+
console.log(chalk_1.default.bgCyan.black(` 💎 PROPOSED SURGICAL EDIT: ${block.filePath} `));
|
|
74
|
+
console.log(chalk_1.default.cyan('╒' + '═'.repeat(70) + '╕'));
|
|
67
75
|
const searchLines = block.search.split('\n');
|
|
68
76
|
const replaceLines = block.replace.split('\n');
|
|
69
77
|
searchLines.forEach(line => {
|
|
70
|
-
console.log(chalk_1.default.red(
|
|
78
|
+
console.log(chalk_1.default.red('│ - ') + chalk_1.default.red(line));
|
|
71
79
|
});
|
|
72
|
-
console.log(chalk_1.default.gray('
|
|
80
|
+
console.log(chalk_1.default.gray('╞' + '┄'.repeat(70) + '╡'));
|
|
73
81
|
replaceLines.forEach(line => {
|
|
74
|
-
console.log(chalk_1.default.green(
|
|
82
|
+
console.log(chalk_1.default.green('│ + ') + chalk_1.default.green(line));
|
|
75
83
|
});
|
|
84
|
+
console.log(chalk_1.default.cyan('╘' + '═'.repeat(70) + '╛'));
|
|
76
85
|
console.log();
|
|
77
86
|
}
|
|
78
87
|
}
|
|
@@ -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
|
|
|
@@ -72,6 +73,7 @@ export class AgentOrchestrator {
|
|
|
72
73
|
*/
|
|
73
74
|
static speak(role: AgentRole, message: string) {
|
|
74
75
|
const config = AGENT_CONFIGS[role] || AGENT_CONFIGS.System;
|
|
76
|
+
TUI.drawStatusBar(`${config.name} is speaking...`);
|
|
75
77
|
console.log(`\n${config.icon} ${config.color(`${config.name}:`)} ${chalk.white(message)}`);
|
|
76
78
|
}
|
|
77
79
|
|
|
@@ -80,6 +82,7 @@ export class AgentOrchestrator {
|
|
|
80
82
|
*/
|
|
81
83
|
static think(role: AgentRole, thought: string) {
|
|
82
84
|
const config = AGENT_CONFIGS[role] || AGENT_CONFIGS.System;
|
|
85
|
+
TUI.drawStatusBar(`${config.name} is thinking...`);
|
|
83
86
|
const indent = ' ';
|
|
84
87
|
console.log(`${indent}${config.color('🧠')} ${chalk.gray(`${config.name} thinking:`)} ${chalk.italic.gray(`"${thought}"`)}`);
|
|
85
88
|
}
|
|
@@ -90,6 +93,7 @@ export class AgentOrchestrator {
|
|
|
90
93
|
static transition(from: AgentRole, to: AgentRole) {
|
|
91
94
|
const fromCfg = AGENT_CONFIGS[from] || AGENT_CONFIGS.System;
|
|
92
95
|
const toCfg = AGENT_CONFIGS[to] || AGENT_CONFIGS.System;
|
|
96
|
+
TUI.drawStatusBar(`Handover: ${fromCfg.name} ➔ ${toCfg.name}`);
|
|
93
97
|
console.log(chalk.gray(` └─ ${fromCfg.icon} ➔ ${toCfg.icon} Handover to ${toCfg.name}...`));
|
|
94
98
|
}
|
|
95
99
|
|
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,10 +41,12 @@ 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
|
|
|
@@ -54,17 +57,20 @@ export class Patcher {
|
|
|
54
57
|
const normalizedSearch = block.search.replace(/\r\n/g, '\n');
|
|
55
58
|
|
|
56
59
|
if (!normalizedContent.includes(normalizedSearch)) {
|
|
60
|
+
TUI.drawStatusBar(`Error: Search block not found in ${block.filePath}.`);
|
|
57
61
|
return {
|
|
58
62
|
success: false,
|
|
59
|
-
error: `Search block not found in ${block.filePath}
|
|
63
|
+
error: `Search block not found in ${block.filePath}.`
|
|
60
64
|
};
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
const updatedContent = normalizedContent.replace(normalizedSearch, block.replace.replace(/\r\n/g, '\n'));
|
|
64
68
|
fs.writeFileSync(fullPath, updatedContent, 'utf8');
|
|
65
69
|
|
|
70
|
+
TUI.drawStatusBar(`Success: ${block.filePath} patched.`);
|
|
66
71
|
return { success: true };
|
|
67
72
|
} catch (err: any) {
|
|
73
|
+
TUI.drawStatusBar(`Error applying patch to ${block.filePath}: ${err.message}`);
|
|
68
74
|
return { success: false, error: err.message };
|
|
69
75
|
}
|
|
70
76
|
}
|
|
@@ -73,17 +79,21 @@ export class Patcher {
|
|
|
73
79
|
* Visualize the diff in a premium "Bro" style
|
|
74
80
|
*/
|
|
75
81
|
static showDiff(block: EditBlock) {
|
|
76
|
-
|
|
82
|
+
process.stdout.write('\n');
|
|
83
|
+
console.log(chalk.bgCyan.black(` 💎 PROPOSED SURGICAL EDIT: ${block.filePath} `));
|
|
84
|
+
console.log(chalk.cyan('╒' + '═'.repeat(70) + '╕'));
|
|
85
|
+
|
|
77
86
|
const searchLines = block.search.split('\n');
|
|
78
87
|
const replaceLines = block.replace.split('\n');
|
|
79
88
|
|
|
80
89
|
searchLines.forEach(line => {
|
|
81
|
-
console.log(chalk.red(
|
|
90
|
+
console.log(chalk.red('│ - ') + chalk.red(line));
|
|
82
91
|
});
|
|
83
|
-
console.log(chalk.gray('
|
|
92
|
+
console.log(chalk.gray('╞' + '┄'.repeat(70) + '╡'));
|
|
84
93
|
replaceLines.forEach(line => {
|
|
85
|
-
console.log(chalk.green(
|
|
94
|
+
console.log(chalk.green('│ + ') + chalk.green(line));
|
|
86
95
|
});
|
|
96
|
+
console.log(chalk.cyan('╘' + '═'.repeat(70) + '╛'));
|
|
87
97
|
console.log();
|
|
88
98
|
}
|
|
89
99
|
}
|
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
|
+
}
|