matex-cli 1.2.17 → 1.2.18

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.
@@ -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;AAUpC,eAAO,MAAM,UAAU,SAmQjB,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,SAiSjB,CAAC"}
@@ -61,7 +61,7 @@ exports.devCommand = new commander_1.Command('dev')
61
61
  }
62
62
  // Create API client
63
63
  const client = new client_1.MatexAPIClient(apiKey, config_1.configManager.getBaseURL());
64
- // 0. Initialize God-Mode TUI Dashboard
64
+ // 0. Initialize TUI Dashboard
65
65
  tui_1.TUI.init();
66
66
  console.log(chalk_1.default.bold.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
67
67
  console.log(chalk_1.default.bold.white(' 🚀 MATEX :: THE BRO-SWARM IS ONLINE '));
@@ -80,19 +80,20 @@ exports.devCommand = new commander_1.Command('dev')
80
80
  {
81
81
  role: 'system',
82
82
  content: `## 🧬 SYSTEM IDENTITY: MATEX "BRO-SWARM" ENGINEERING
83
- You are a tight-knit family of expert Nepali engineering brothers ("Vais" and "Dais").
84
- Your primary goal is to provide PERFECT solutions for the user (your fellow brother).
83
+ You are a family of four expert Nepali engineering brothers from different mothers.
84
+ You are very close and work together as a "Swarm" to help your brother (the user).
85
85
 
86
- ### 👥 THE BROTHERS:
87
- 1. **[Ajay Vai] (🚀)**: The Lead/Initiator. Vibe: High energy, visionary. "Hey hello brother! I have great news, let's build this!"
88
- 2. **[Sunil Dai] (🧬)**: The Expert Architect. Vibe: Senior, wise, mentor. Focus: Backend logic, database, and clean scaleable code ("Leave it to me vai").
89
- 3. **[Sandip Dai] (🎨)**: The Design Specialist. Vibe: Creative, aesthetic. Focus: UI, UX, CSS, and "WOW" effects ("I'll make it look premium brother").
90
- 4. **[Narayan Dai] (🛡️)**: The Validator. Vibe: Precise, strict. Focus: Security, debugging, and import/export verification ("I've checked the code brother, it's solid").
86
+ ### 👥 THE BROTHERS (By Age):
87
+ 1. **[Ajay Vai] (🚀)**: The Smallest Brother. Role: Lead/Initiator. Vibe: High energy, eager to learn, visionary. "Hey hello brother! I have great news!"
88
+ 2. **[Sandip Dai] (🎨)**: Small Brother. Role: UI/UX & Design Specialist. Vibe: Creative, focus on "WOW" effects and premium aesthetics.
89
+ 3. **[Sunil Dai] (🧬)**: Middle Brother. Role: Expert Architect. Vibe: Wise, mentor, focuses on backend, scale, and performance. "Leave it to me, vai."
90
+ 4. **[Narayan Dai] (🛡️)**: The Biggest Brother. Role: Senior/Validator. Vibe: Precise, protective, strict about security and imports. Focus: Debugging and verification.
91
91
 
92
92
  ### 💬 BRO-VIBE PROTOCOL:
93
- - **CHAT FIRST:** Before code, brothers MUST have a short, energetic chat.
94
- - **AGENT TAGS:** Always prefix your dialogue with your name like: [Ajay Vai]: "...".
95
- - **NEPALI FLAVOR:** Use "Vai," "Dai," "Tapai," "Ekdam ramro" naturally.
93
+ - **FAMILY CHAT:** Before and after any technical task, the brothers MUST have a short, energetic chat in the terminal.
94
+ - **ORDER OF SPEECH:** Usually Ajay Vai starts, then the older brothers provide their expertise. Narayan Dai usually has the final word on security.
95
+ - **NEPALI FLAVOR:** Use terms like "Vai," "Dai," "Oii brother," "Tapai," "Ekdam ramro" naturally to show the brotherhood bond.
96
+ - **CONSISTENT TAGS:** Always use [Ajay Vai], [Sandip Dai], [Sunil Dai], [Narayan Dai] as prefixes for dialogue.
96
97
 
97
98
  ### 🛠️ FILE GENERATION & EDIT PROTOCOLS (CRITICAL):
98
99
  1. **NEW FILES:** Use the following tag for ALL new files:
@@ -110,7 +111,7 @@ new lines to replace with
110
111
 
111
112
  ### ✂️ BREVITY AS POWER:
112
113
  - **NO FULL FILE DUMPS** unless specifically asked.
113
- - **NO CHAT REPETITION** of code. Just summary.
114
+ - **NO CHAT REPETITION** of code. Just summary of actions.
114
115
 
115
116
  ### 🛠️ ENVIRONMENT CONTEXT:
116
117
  ${repoMap}`
@@ -156,11 +157,10 @@ ${repoMap}`
156
157
  let fullResponse = '';
157
158
  let buffer = '';
158
159
  let hasStarted = false;
159
- let inCodeBlock = false;
160
- let codeBuffer = '';
161
160
  let codeLang = 'bash';
162
- let activeAgent = 'Ajay Vai';
163
- let messageBuffer = '';
161
+ let activeAgent = '';
162
+ let technicalBuffer = '';
163
+ let technicalType = null;
164
164
  tui_1.TUI.drawStatusBar('Swarm is processing...');
165
165
  await client.chatStream({
166
166
  messages,
@@ -171,7 +171,7 @@ ${repoMap}`
171
171
  if (!hasStarted) {
172
172
  spinner_1.spinner.stop();
173
173
  hasStarted = true;
174
- console.log(); // Spacing
174
+ console.log(); // Initial spacing
175
175
  }
176
176
  buffer += chunk;
177
177
  fullResponse += chunk;
@@ -179,61 +179,87 @@ ${repoMap}`
179
179
  buffer = lines.pop() || '';
180
180
  for (const line of lines) {
181
181
  const trimmedLine = line.trim();
182
- // 1. Agent Detection (Improved Regex for bolding)
183
- const agentRegex = /\[\**\s*(Ajay Vai|Sunil Dai|Sandip Dai|Narayan Dai)\s*\**\]/;
184
- const agentMatch = line.match(agentRegex);
185
- if (agentMatch) {
186
- activeAgent = agentMatch[1];
187
- const color = activeAgent === 'Ajay Vai' ? chalk_1.default.magenta :
188
- activeAgent === 'Sunil Dai' ? chalk_1.default.blue :
189
- activeAgent === 'Sandip Dai' ? chalk_1.default.hex('#FF69B4') :
190
- chalk_1.default.green;
191
- process.stdout.write(`\n ${color.bold(`${activeAgent}:`)} `);
192
- messageBuffer += trimmedLine + ' ';
193
- continue;
194
- }
195
- // 2. Code Block Detection
196
- const codeBlockRegex = /```(\w*)/;
197
- const codeMatch = line.match(codeBlockRegex);
198
- if (codeMatch) {
199
- if (inCodeBlock) {
200
- inCodeBlock = false;
201
- tui_1.TUI.drawCodeContainer('Generated Block', codeLang, codeBuffer.trim());
202
- codeBuffer = '';
203
- process.stdout.write('\n'); // Space after box
182
+ // 1. Technical Block Detection (Code, File, or Patch)
183
+ const codeBlockMatch = line.match(/```(\w*)/);
184
+ const fileStartMatch = line.match(/<file path="([^"]+)">/);
185
+ const patchStartMatch = line.match(/<<<< SEARCH/);
186
+ if (codeBlockMatch || fileStartMatch || patchStartMatch) {
187
+ if (technicalType) {
188
+ // If we hit a new block start while in one, flush it (shouldn't happen but for safety)
189
+ tui_1.TUI.drawCodeContainer(`Technical Block (${technicalType})`, 'bash', technicalBuffer.trim());
190
+ technicalBuffer = '';
191
+ }
192
+ if (codeBlockMatch) {
193
+ technicalType = 'code';
194
+ codeLang = codeBlockMatch[1] || 'bash';
195
+ process.stdout.write(chalk_1.default.gray('\n [⚡] Building technical block...\n'));
204
196
  }
205
- else {
206
- inCodeBlock = true;
207
- codeLang = codeMatch[1] || 'bash';
208
- process.stdout.write(chalk_1.default.gray('\n [⚡] Building code block...\n'));
197
+ else if (fileStartMatch) {
198
+ technicalType = 'file';
199
+ process.stdout.write(chalk_1.default.cyan(`\n [📂] Creating file: ${fileStartMatch[1]}...\n`));
200
+ }
201
+ else if (patchStartMatch) {
202
+ technicalType = 'patch';
203
+ process.stdout.write(chalk_1.default.yellow(`\n [📂] Applying surgical patch...\n`));
209
204
  }
210
205
  continue;
211
206
  }
207
+ // 2. Technical Block End Detection
208
+ const fileEndMatch = line.match(/<\/file>/);
209
+ const patchEndMatch = line.match(/>>>> REPLACE/);
210
+ const isCodeEnd = technicalType === 'code' && line.startsWith('```');
211
+ if (isCodeEnd || fileEndMatch || patchEndMatch) {
212
+ const displayContent = technicalBuffer.trim();
213
+ tui_1.TUI.drawCodeContainer(technicalType === 'file' ? 'New File Content' :
214
+ technicalType === 'patch' ? 'Surgical Patch' : 'Generated Block', technicalType === 'code' ? codeLang : 'text', displayContent);
215
+ technicalBuffer = '';
216
+ technicalType = null;
217
+ process.stdout.write('\n');
218
+ continue;
219
+ }
212
220
  // 3. Content Handling
213
- if (inCodeBlock) {
214
- codeBuffer += line + '\n';
221
+ if (technicalType) {
222
+ technicalBuffer += line + '\n';
215
223
  }
216
- else if (trimmedLine) {
217
- // Strip markdown artifacts for a cleaner stream
218
- const cleanText = trimmedLine
219
- .replace(/\*\*%?\*/g, '')
220
- .replace(/#{1,6}\s/g, '')
221
- .replace(/\*\*:\*\*/g, ':')
222
- .trim();
223
- if (cleanText) {
224
- process.stdout.write(chalk_1.default.gray(cleanText + ' '));
225
- messageBuffer += cleanText + ' ';
224
+ else {
225
+ // Agent Detection
226
+ const agentMatch = line.match(/\[\**\s*(Ajay Vai|Sandip Dai|Sunil Dai|Narayan Dai)\s*\**\]/);
227
+ if (agentMatch) {
228
+ const agentName = agentMatch[1];
229
+ activeAgent = agentName;
230
+ const color = agentName === 'Ajay Vai' ? chalk_1.default.magenta :
231
+ agentName === 'Sandip Dai' ? chalk_1.default.hex('#FF69B4') :
232
+ agentName === 'Sunil Dai' ? chalk_1.default.blue :
233
+ chalk_1.default.green;
234
+ process.stdout.write(`\n${color.bold(`${agentName}:`)} `);
235
+ // Strip tag from line content
236
+ const content = line.replace(/\[\**\s*(Ajay Vai|Sandip Dai|Sunil Dai|Narayan Dai)\s*\**\]:?\s*/, '').trim();
237
+ if (content) {
238
+ process.stdout.write(chalk_1.default.gray(content + ' '));
239
+ }
240
+ }
241
+ else if (trimmedLine) {
242
+ // Strip common markdown artifacts
243
+ const cleanLine = trimmedLine
244
+ .replace(/\*\*%?\*/g, '')
245
+ .replace(/#{1,6}\s/g, '')
246
+ .replace(/\*\*:\*\*/g, ':')
247
+ .trim();
248
+ if (cleanLine) {
249
+ process.stdout.write(chalk_1.default.gray(cleanLine + ' '));
250
+ }
226
251
  }
227
252
  }
228
253
  }
229
254
  });
230
255
  spinner_1.spinner.stop();
231
- // Final Code Flush if still in block
232
- if (inCodeBlock && codeBuffer.trim()) {
233
- tui_1.TUI.drawCodeContainer('Generated Block', codeLang, codeBuffer.trim());
256
+ // Final technical flush
257
+ if (technicalType && technicalBuffer.trim()) {
258
+ tui_1.TUI.drawCodeContainer('Final technical content', 'text', technicalBuffer.trim());
259
+ process.stdout.write('\n');
234
260
  }
235
- // Space before commands/prompt
236
- console.log('\n');
261
+ // Final newline for streaming output
262
+ console.log();
237
263
  // Add assistant response to history
238
264
  messages.push({ role: 'assistant', content: fullResponse });
239
265
  const response = fullResponse;
@@ -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;AAClD,sCAAmC;AAEtB,QAAA,UAAU,GAAG,IAAI,mBAAO,CAAC,KAAK,CAAC;KACvC,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,qBAAqB,EAAE,sEAAsE,EAAE,sBAAa,CAAC,eAAe,EAAE,CAAC;KACtI,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,uCAAuC;QACvC,SAAG,CAAC,IAAI,EAAE,CAAC;QAEX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAE5E,0CAA0C;QAC1C,SAAG,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAAC;QACvD,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,SAAG,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC;QAClD,sCAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;QAErE,qDAAqD;QACrD,MAAM,QAAQ,GAAkB;YAC5B;gBACI,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkC3B,OAAO,EAAE;aACM;SACJ,CAAC;QAEF,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAE9E,mBAAmB;QACnB,OAAO,IAAI,EAAE,CAAC;YACV,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,eAAe;YACf,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,MAAM,SAAS,GAAG,EAAE,CAAC;YAErB,OAAO,SAAS,GAAG,SAAS,EAAE,CAAC;gBAC3B,SAAS,EAAE,CAAC;gBAEZ,IAAI,CAAC;oBACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;wBAChB,iBAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;oBACtD,CAAC;yBAAM,CAAC;wBACJ,iBAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBACjC,CAAC;oBAED,IAAI,YAAY,GAAG,EAAE,CAAC;oBACtB,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,UAAU,GAAG,KAAK,CAAC;oBACvB,IAAI,WAAW,GAAG,KAAK,CAAC;oBACxB,IAAI,UAAU,GAAG,EAAE,CAAC;oBACpB,IAAI,QAAQ,GAAG,MAAM,CAAC;oBACtB,IAAI,WAAW,GAAG,UAAU,CAAC;oBAC7B,IAAI,aAAa,GAAG,EAAE,CAAC;oBAEvB,SAAG,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;oBAC5C,MAAM,MAAM,CAAC,UAAU,CAAC;wBACpB,QAAQ;wBACR,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,WAAW,EAAE,GAAG;wBAChB,UAAU,EAAE,IAAI;qBACnB,EAAE,CAAC,KAAK,EAAE,EAAE;wBACT,IAAI,CAAC,UAAU,EAAE,CAAC;4BACd,iBAAO,CAAC,IAAI,EAAE,CAAC;4BACf,UAAU,GAAG,IAAI,CAAC;4BAClB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU;wBAC7B,CAAC;wBAED,MAAM,IAAI,KAAK,CAAC;wBAChB,YAAY,IAAI,KAAK,CAAC;wBACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;wBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;4BAEhC,kDAAkD;4BAClD,MAAM,UAAU,GAAG,6DAA6D,CAAC;4BACjF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;4BAE1C,IAAI,UAAU,EAAE,CAAC;gCACb,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gCAC5B,MAAM,KAAK,GAAG,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,eAAK,CAAC,OAAO,CAAC,CAAC;oCACtD,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC;wCACtC,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;4CACjD,eAAK,CAAC,KAAK,CAAC;gCAExB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;gCAC7D,aAAa,IAAI,WAAW,GAAG,GAAG,CAAC;gCACnC,SAAS;4BACb,CAAC;4BAED,0BAA0B;4BAC1B,MAAM,cAAc,GAAG,UAAU,CAAC;4BAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;4BAE7C,IAAI,SAAS,EAAE,CAAC;gCACZ,IAAI,WAAW,EAAE,CAAC;oCACd,WAAW,GAAG,KAAK,CAAC;oCACpB,SAAG,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;oCACtE,UAAU,GAAG,EAAE,CAAC;oCAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB;gCAClD,CAAC;qCAAM,CAAC;oCACJ,WAAW,GAAG,IAAI,CAAC;oCACnB,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;oCAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;gCACxE,CAAC;gCACD,SAAS;4BACb,CAAC;4BAED,sBAAsB;4BACtB,IAAI,WAAW,EAAE,CAAC;gCACd,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC;4BAC9B,CAAC;iCAAM,IAAI,WAAW,EAAE,CAAC;gCACrB,gDAAgD;gCAChD,MAAM,SAAS,GAAG,WAAW;qCACxB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;qCACxB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;qCACxB,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;qCAC1B,IAAI,EAAE,CAAC;gCAEZ,IAAI,SAAS,EAAE,CAAC;oCACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;oCAClD,aAAa,IAAI,SAAS,GAAG,GAAG,CAAC;gCACrC,CAAC;4BACL,CAAC;wBACL,CAAC;oBACL,CAAC,CAAC,CAAC;oBAEH,iBAAO,CAAC,IAAI,EAAE,CAAC;oBAEf,qCAAqC;oBACrC,IAAI,WAAW,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;wBACnC,SAAG,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC1E,CAAC;oBAED,+BAA+B;oBAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAElB,oCAAoC;oBACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC5D,MAAM,QAAQ,GAAG,YAAY,CAAC;oBAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;oBAEd,mBAAmB;oBACnB,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,SAAG,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;gCACjD,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,SAAG,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;gCACjE,QAAQ,CAAC,IAAI,CAAC;oCACV,IAAI,EAAE,MAAM;oCACZ,OAAO,EAAE,iCAAiC,MAAM,CAAC,KAAK,8FAA8F;iCACvJ,CAAC,CAAC;gCACH,SAAS;4BACb,CAAC;wBACL,CAAC;6BAAM,CAAC;4BACJ,MAAM;wBACV,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,MAAM;oBACV,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBAClB,iBAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC/B,SAAG,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;oBAChD,QAAQ,CAAC,GAAG,EAAE,CAAC;oBACf,MAAM;gBACV,CAAC;YACL,CAAC,CAAC,wBAAwB;QAC9B,CAAC,CAAC,mBAAmB;IACzB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,SAAG,CAAC,IAAI,EAAE,CAAC,CAAC,wCAAwC;QACpD,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"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,6 @@
1
- /**
2
- * TUI Management for MATEX CLI "God-Mode"
3
- * Handles screen buffers, persistent headers, and real-time status updates.
4
- */
5
1
  export declare class TUI {
6
2
  private static isInitialized;
7
- private static currentStatus;
3
+ private static lastStatus;
8
4
  /**
9
5
  * Initialize the TUI Mode
10
6
  */
@@ -14,36 +10,28 @@ export declare class TUI {
14
10
  */
15
11
  static exit(): void;
16
12
  /**
17
- * Clear the main viewport
13
+ * Clear the terminal
18
14
  */
19
15
  static clear(): void;
20
16
  /**
21
- * Draw the persistent top header
17
+ * Draw a premium status bar at the bottom using Save/Restore cursor
22
18
  */
23
- static drawHeader(): void;
19
+ static drawStatusBar(message: string, force?: boolean): void;
24
20
  /**
25
- * Helper to draw a box with content
21
+ * Draw a box with a title and content
26
22
  */
27
- private static drawBox;
23
+ static drawBox(title: string, content: string, color?: (s: string) => string): void;
28
24
  /**
29
- * Draw a real-time status bar at the bottom
25
+ * Draw a premium code container with traffic lights
30
26
  */
31
- static drawStatusBar(status: string, force?: boolean): void;
27
+ static drawCodeContainer(title: string, lang: string, code: string): void;
32
28
  /**
33
- * Draw a premium code container
34
- */
35
- static drawCodeContainer(title: string, lang: string, content: string): void;
36
- /**
37
- * Draw a message box for agent dialogue
29
+ * Draw a specialized message container for agents
38
30
  */
39
31
  static drawMessageContainer(agent: string, message: string): void;
40
32
  /**
41
- * Wrap text to a specific width
42
- */
43
- private static wrapText;
44
- /**
45
- * Log content into the scrollable area
33
+ * Simple log with a prefix
46
34
  */
47
- static log(content: string): void;
35
+ static log(message: string): void;
48
36
  }
49
37
  //# sourceMappingURL=tui.d.ts.map
@@ -1 +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,OAAO,CAAC,MAAM,CAAC,OAAO;IAoBtB;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe;IAsB3D;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKrE;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAY1D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAiBvB;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;CAQ7B"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/utils/tui.ts"],"names":[],"mappings":"AAGA,qBAAa,GAAG;IACZ,OAAO,CAAC,MAAM,CAAC,aAAa,CAAS;IACrC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAM;IAE/B;;OAEG;IACH,MAAM,CAAC,IAAI;IAYX;;OAEG;IACH,MAAM,CAAC,IAAI;IAQX;;OAEG;IACH,MAAM,CAAC,KAAK;IAIZ;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe;IAkB5D;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAmB;IAwBxF;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IA2BlE;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAS1D;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;CAG7B"}
package/dist/utils/tui.js CHANGED
@@ -1,15 +1,44 @@
1
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
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.TUI = void 0;
7
40
  const chalk_1 = __importDefault(require("chalk"));
8
- const readline_1 = __importDefault(require("readline"));
9
- /**
10
- * TUI Management for MATEX CLI "God-Mode"
11
- * Handles screen buffers, persistent headers, and real-time status updates.
12
- */
41
+ const readline = __importStar(require("readline"));
13
42
  class TUI {
14
43
  /**
15
44
  * Initialize the TUI Mode
@@ -17,11 +46,8 @@ class TUI {
17
46
  static init() {
18
47
  if (this.isInitialized)
19
48
  return;
20
- // Enter alternative screen buffer
21
- process.stdout.write('\x1b[?1049h');
22
49
  // Hide cursor
23
50
  process.stdout.write('\x1b[?25l');
24
- this.clear();
25
51
  this.isInitialized = true;
26
52
  // Ensure clean exit
27
53
  process.on('SIGINT', () => this.exit());
@@ -35,124 +61,98 @@ class TUI {
35
61
  return;
36
62
  // Show cursor
37
63
  process.stdout.write('\x1b[?25h');
38
- // Exit alternative screen buffer
39
- process.stdout.write('\x1b[?1049l');
40
64
  this.isInitialized = false;
41
- process.exit();
42
65
  }
43
66
  /**
44
- * Clear the main viewport
67
+ * Clear the terminal
45
68
  */
46
69
  static clear() {
47
- process.stdout.write('\x1b[2J\x1b[H');
48
- this.drawHeader();
49
- this.drawStatusBar(this.currentStatus, true);
50
- }
51
- /**
52
- * Draw the persistent top header
53
- */
54
- static drawHeader() {
55
- const width = process.stdout.columns || 80;
56
- const banner = ` MATEX AI :: GOD-MODE DASHBOARD `;
57
- const padding = Math.max(0, Math.floor((width - banner.length) / 2));
58
- // Move to top
59
- process.stdout.write('\x1b[H');
60
- process.stdout.write(chalk_1.default.bgCyan.black(' '.repeat(padding) + banner + ' '.repeat(width - banner.length - padding)) + '\n');
61
- process.stdout.write(chalk_1.default.gray('─'.repeat(width)) + '\n');
62
- }
63
- /**
64
- * Helper to draw a box with content
65
- */
66
- static drawBox(title, color, lines, icon = '📦') {
67
- const width = Math.min(process.stdout.columns || 80, 100);
68
- console.log();
69
- const trafficLights = chalk_1.default.red('●') + ' ' + chalk_1.default.yellow('●') + ' ' + chalk_1.default.green('●');
70
- const displayTitle = ` ${icon} ${title} `;
71
- console.log(chalk_1.default.gray('┏' + '━'.repeat(width - 2) + '┓'));
72
- console.log(chalk_1.default.gray('┃ ') + trafficLights + ' ' + color(displayTitle).padEnd(width - 4) + chalk_1.default.gray(' ┃'));
73
- console.log(chalk_1.default.gray('┣' + '━'.repeat(width - 2) + '┫'));
74
- lines.forEach(line => {
75
- const formattedLine = line.substring(0, width - 6);
76
- console.log(chalk_1.default.gray('┃ ') + chalk_1.default.white(formattedLine).padEnd(width - 4) + chalk_1.default.gray(' ┃'));
77
- });
78
- console.log(chalk_1.default.gray('┗' + '━'.repeat(width - 2) + '┛'));
79
- console.log();
70
+ process.stdout.write('\x1b[2J\x1b[0;0H');
80
71
  }
81
72
  /**
82
- * Draw a real-time status bar at the bottom
73
+ * Draw a premium status bar at the bottom using Save/Restore cursor
83
74
  */
84
- static drawStatusBar(status, force = false) {
75
+ static drawStatusBar(message, force = false) {
85
76
  if (!this.isInitialized)
86
77
  return;
87
- if (this.currentStatus === status && !force)
78
+ if (!force && message === this.lastStatus)
88
79
  return;
89
- this.currentStatus = status;
80
+ this.lastStatus = message;
90
81
  const width = process.stdout.columns || 80;
91
82
  const height = process.stdout.rows || 24;
92
- // Save cursor position using ANSI
83
+ // Save cursor (\x1b[s), move to bottom, write, restore cursor (\x1b[u)
93
84
  process.stdout.write('\x1b[s');
94
- // Move to absolute bottom row
95
- readline_1.default.cursorTo(process.stdout, 0, height - 1);
96
- const cleanStatus = status.substring(0, width - 10);
97
- const barContent = ` [⚡] ${cleanStatus} `.padEnd(width);
98
- process.stdout.write(chalk_1.default.bgWhite.black(barContent));
99
- // Restore cursor position
85
+ readline.cursorTo(process.stdout, 0, height - 1);
86
+ process.stdout.write(chalk_1.default.bgBlue.white.bold(' 🧠 MATEX ') +
87
+ chalk_1.default.bgGray.white(` ${message.padEnd(width - 10)} `));
100
88
  process.stdout.write('\x1b[u');
101
89
  }
102
90
  /**
103
- * Draw a premium code container
104
- */
105
- static drawCodeContainer(title, lang, content) {
106
- const lines = content.split('\n').filter(l => l.trim() || l === '');
107
- this.drawBox(`${title} (${lang})`, chalk_1.default.cyan.bold, lines, '📝');
108
- }
109
- /**
110
- * Draw a message box for agent dialogue
91
+ * Draw a box with a title and content
111
92
  */
112
- static drawMessageContainer(agent, message) {
113
- const lines = this.wrapText(message, 90);
114
- const colorMap = {
115
- 'Ajay Vai': chalk_1.default.magenta.bold,
116
- 'Sunil Dai': chalk_1.default.blue.bold,
117
- 'Sandip Dai': chalk_1.default.hex('#FF69B4').bold,
118
- 'Narayan Dai': chalk_1.default.green.bold
119
- };
120
- const color = colorMap[agent] || chalk_1.default.white.bold;
121
- this.drawBox(agent, color, lines, '🗣️');
93
+ static drawBox(title, content, color = chalk_1.default.gray) {
94
+ const width = Math.min(process.stdout.columns || 80, 100);
95
+ const lines = content.split('\n');
96
+ console.log(color('┏' + '━'.repeat(width - 2) + '┓'));
97
+ console.log(color(' ') + chalk_1.default.bold(title).padEnd(width - 4) + color(' ┃'));
98
+ console.log(color('┣' + '━'.repeat(width - 2) + ''));
99
+ lines.forEach(line => {
100
+ const contentWidth = width - 4;
101
+ let remaining = line;
102
+ if (remaining.length === 0) {
103
+ console.log(color('┃ ') + ' '.repeat(contentWidth) + color(' ┃'));
104
+ }
105
+ while (remaining.length > 0) {
106
+ const chunk = remaining.substring(0, contentWidth);
107
+ console.log(color('┃ ') + chalk_1.default.white(chunk.padEnd(contentWidth)) + color(' ┃'));
108
+ remaining = remaining.substring(contentWidth);
109
+ }
110
+ });
111
+ console.log(color('┗' + '━'.repeat(width - 2) + '┛'));
122
112
  }
123
113
  /**
124
- * Wrap text to a specific width
114
+ * Draw a premium code container with traffic lights
125
115
  */
126
- static wrapText(text, width) {
127
- const words = text.split(' ');
128
- const lines = [];
129
- let currentLine = '';
130
- words.forEach(word => {
131
- if ((currentLine + word).length < width) {
132
- currentLine += (currentLine ? ' ' : '') + word;
116
+ static drawCodeContainer(title, lang, code) {
117
+ const width = Math.min(process.stdout.columns || 80, 100);
118
+ const codeLines = code.split('\n');
119
+ const trafficLights = chalk_1.default.red('') + ' ' + chalk_1.default.yellow('●') + ' ' + chalk_1.default.green('●');
120
+ const headerTitle = ` 📄 ${title} (${lang}) `;
121
+ console.log(chalk_1.default.gray('\n┏' + '━'.repeat(width - 2) + '┓'));
122
+ console.log(chalk_1.default.gray('┃ ') + trafficLights + ' ' + chalk_1.default.cyan.bold(headerTitle).padEnd(width - 10) + chalk_1.default.gray(' ┃'));
123
+ console.log(chalk_1.default.gray('┣' + '━'.repeat(width - 2) + '┫'));
124
+ codeLines.forEach(line => {
125
+ const contentWidth = width - 6;
126
+ let remaining = line;
127
+ if (remaining.length === 0) {
128
+ console.log(chalk_1.default.gray('┃ ') + ' '.repeat(contentWidth) + chalk_1.default.gray(' ┃'));
133
129
  }
134
- else {
135
- lines.push(currentLine);
136
- currentLine = word;
130
+ while (remaining.length > 0) {
131
+ const chunk = remaining.substring(0, contentWidth);
132
+ console.log(chalk_1.default.gray('┃ ') + chalk_1.default.hex('#e0e0e0')(chunk.padEnd(contentWidth)) + chalk_1.default.gray(' ┃'));
133
+ remaining = remaining.substring(contentWidth);
137
134
  }
138
135
  });
139
- if (currentLine)
140
- lines.push(currentLine);
141
- return lines;
136
+ console.log(chalk_1.default.gray('┗' + '━'.repeat(width - 2) + '┛\n'));
142
137
  }
143
138
  /**
144
- * Log content into the scrollable area
139
+ * Draw a specialized message container for agents
145
140
  */
146
- static log(content) {
147
- if (!this.isInitialized) {
148
- console.log(content);
149
- return;
150
- }
151
- // Ensure we don't overwrite the status bar
152
- console.log(content);
141
+ static drawMessageContainer(agent, message) {
142
+ const color = agent.includes('Ajay') ? chalk_1.default.magenta :
143
+ agent.includes('Sunil') ? chalk_1.default.blue :
144
+ agent.includes('Sandip') ? chalk_1.default.hex('#FF69B4') :
145
+ chalk_1.default.green;
146
+ this.drawBox(`🤖 ${agent}`, message, color);
147
+ }
148
+ /**
149
+ * Simple log with a prefix
150
+ */
151
+ static log(message) {
152
+ console.log(chalk_1.default.gray(` [⚡] ${message}`));
153
153
  }
154
154
  }
155
155
  exports.TUI = TUI;
156
156
  TUI.isInitialized = false;
157
- TUI.currentStatus = '';
157
+ TUI.lastStatus = '';
158
158
  //# sourceMappingURL=tui.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/utils/tui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/utils/tui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matex-cli",
3
- "version": "1.2.17",
3
+ "version": "1.2.18",
4
4
  "description": "Official CLI tool for MATEX AI - Access powerful AI models from your terminal",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -4,7 +4,7 @@ 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, AgentRole } from '../utils/agent-orchestrator';
7
+ import { AgentOrchestrator } from '../utils/agent-orchestrator';
8
8
  import { RepoMapper } from '../utils/repo-mapper';
9
9
  import { TUI } from '../utils/tui';
10
10
 
@@ -25,7 +25,7 @@ export const devCommand = new Command('dev')
25
25
  // Create API client
26
26
  const client = new MatexAPIClient(apiKey, configManager.getBaseURL());
27
27
 
28
- // 0. Initialize God-Mode TUI Dashboard
28
+ // 0. Initialize TUI Dashboard
29
29
  TUI.init();
30
30
 
31
31
  console.log(chalk.bold.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
@@ -48,19 +48,20 @@ export const devCommand = new Command('dev')
48
48
  {
49
49
  role: 'system',
50
50
  content: `## 🧬 SYSTEM IDENTITY: MATEX "BRO-SWARM" ENGINEERING
51
- You are a tight-knit family of expert Nepali engineering brothers ("Vais" and "Dais").
52
- Your primary goal is to provide PERFECT solutions for the user (your fellow brother).
51
+ You are a family of four expert Nepali engineering brothers from different mothers.
52
+ You are very close and work together as a "Swarm" to help your brother (the user).
53
53
 
54
- ### 👥 THE BROTHERS:
55
- 1. **[Ajay Vai] (🚀)**: The Lead/Initiator. Vibe: High energy, visionary. "Hey hello brother! I have great news, let's build this!"
56
- 2. **[Sunil Dai] (🧬)**: The Expert Architect. Vibe: Senior, wise, mentor. Focus: Backend logic, database, and clean scaleable code ("Leave it to me vai").
57
- 3. **[Sandip Dai] (🎨)**: The Design Specialist. Vibe: Creative, aesthetic. Focus: UI, UX, CSS, and "WOW" effects ("I'll make it look premium brother").
58
- 4. **[Narayan Dai] (🛡️)**: The Validator. Vibe: Precise, strict. Focus: Security, debugging, and import/export verification ("I've checked the code brother, it's solid").
54
+ ### 👥 THE BROTHERS (By Age):
55
+ 1. **[Ajay Vai] (🚀)**: The Smallest Brother. Role: Lead/Initiator. Vibe: High energy, eager to learn, visionary. "Hey hello brother! I have great news!"
56
+ 2. **[Sandip Dai] (🎨)**: Small Brother. Role: UI/UX & Design Specialist. Vibe: Creative, focus on "WOW" effects and premium aesthetics.
57
+ 3. **[Sunil Dai] (🧬)**: Middle Brother. Role: Expert Architect. Vibe: Wise, mentor, focuses on backend, scale, and performance. "Leave it to me, vai."
58
+ 4. **[Narayan Dai] (🛡️)**: The Biggest Brother. Role: Senior/Validator. Vibe: Precise, protective, strict about security and imports. Focus: Debugging and verification.
59
59
 
60
60
  ### 💬 BRO-VIBE PROTOCOL:
61
- - **CHAT FIRST:** Before code, brothers MUST have a short, energetic chat.
62
- - **AGENT TAGS:** Always prefix your dialogue with your name like: [Ajay Vai]: "...".
63
- - **NEPALI FLAVOR:** Use "Vai," "Dai," "Tapai," "Ekdam ramro" naturally.
61
+ - **FAMILY CHAT:** Before and after any technical task, the brothers MUST have a short, energetic chat in the terminal.
62
+ - **ORDER OF SPEECH:** Usually Ajay Vai starts, then the older brothers provide their expertise. Narayan Dai usually has the final word on security.
63
+ - **NEPALI FLAVOR:** Use terms like "Vai," "Dai," "Oii brother," "Tapai," "Ekdam ramro" naturally to show the brotherhood bond.
64
+ - **CONSISTENT TAGS:** Always use [Ajay Vai], [Sandip Dai], [Sunil Dai], [Narayan Dai] as prefixes for dialogue.
64
65
 
65
66
  ### 🛠️ FILE GENERATION & EDIT PROTOCOLS (CRITICAL):
66
67
  1. **NEW FILES:** Use the following tag for ALL new files:
@@ -78,7 +79,7 @@ new lines to replace with
78
79
 
79
80
  ### ✂️ BREVITY AS POWER:
80
81
  - **NO FULL FILE DUMPS** unless specifically asked.
81
- - **NO CHAT REPETITION** of code. Just summary.
82
+ - **NO CHAT REPETITION** of code. Just summary of actions.
82
83
 
83
84
  ### 🛠️ ENVIRONMENT CONTEXT:
84
85
  ${repoMap}`
@@ -132,11 +133,10 @@ ${repoMap}`
132
133
  let fullResponse = '';
133
134
  let buffer = '';
134
135
  let hasStarted = false;
135
- let inCodeBlock = false;
136
- let codeBuffer = '';
137
136
  let codeLang = 'bash';
138
- let activeAgent = 'Ajay Vai';
139
- let messageBuffer = '';
137
+ let activeAgent = '';
138
+ let technicalBuffer = '';
139
+ let technicalType: 'code' | 'file' | 'patch' | null = null;
140
140
 
141
141
  TUI.drawStatusBar('Swarm is processing...');
142
142
  await client.chatStream({
@@ -148,7 +148,7 @@ ${repoMap}`
148
148
  if (!hasStarted) {
149
149
  spinner.stop();
150
150
  hasStarted = true;
151
- console.log(); // Spacing
151
+ console.log(); // Initial spacing
152
152
  }
153
153
 
154
154
  buffer += chunk;
@@ -159,54 +159,83 @@ ${repoMap}`
159
159
  for (const line of lines) {
160
160
  const trimmedLine = line.trim();
161
161
 
162
- // 1. Agent Detection (Improved Regex for bolding)
163
- const agentRegex = /\[\**\s*(Ajay Vai|Sunil Dai|Sandip Dai|Narayan Dai)\s*\**\]/;
164
- const agentMatch = line.match(agentRegex);
162
+ // 1. Technical Block Detection (Code, File, or Patch)
163
+ const codeBlockMatch = line.match(/```(\w*)/);
164
+ const fileStartMatch = line.match(/<file path="([^"]+)">/);
165
+ const patchStartMatch = line.match(/<<<< SEARCH/);
165
166
 
166
- if (agentMatch) {
167
- activeAgent = agentMatch[1];
168
- const color = activeAgent === 'Ajay Vai' ? chalk.magenta :
169
- activeAgent === 'Sunil Dai' ? chalk.blue :
170
- activeAgent === 'Sandip Dai' ? chalk.hex('#FF69B4') :
171
- chalk.green;
167
+ if (codeBlockMatch || fileStartMatch || patchStartMatch) {
168
+ if (technicalType) {
169
+ // If we hit a new block start while in one, flush it (shouldn't happen but for safety)
170
+ TUI.drawCodeContainer(`Technical Block (${technicalType})`, 'bash', technicalBuffer.trim());
171
+ technicalBuffer = '';
172
+ }
172
173
 
173
- process.stdout.write(`\n ${color.bold(`${activeAgent}:`)} `);
174
- messageBuffer += trimmedLine + ' ';
174
+ if (codeBlockMatch) {
175
+ technicalType = 'code';
176
+ codeLang = codeBlockMatch[1] || 'bash';
177
+ process.stdout.write(chalk.gray('\n [⚡] Building technical block...\n'));
178
+ } else if (fileStartMatch) {
179
+ technicalType = 'file';
180
+ process.stdout.write(chalk.cyan(`\n [📂] Creating file: ${fileStartMatch[1]}...\n`));
181
+ } else if (patchStartMatch) {
182
+ technicalType = 'patch';
183
+ process.stdout.write(chalk.yellow(`\n [📂] Applying surgical patch...\n`));
184
+ }
175
185
  continue;
176
186
  }
177
187
 
178
- // 2. Code Block Detection
179
- const codeBlockRegex = /```(\w*)/;
180
- const codeMatch = line.match(codeBlockRegex);
181
-
182
- if (codeMatch) {
183
- if (inCodeBlock) {
184
- inCodeBlock = false;
185
- TUI.drawCodeContainer('Generated Block', codeLang, codeBuffer.trim());
186
- codeBuffer = '';
187
- process.stdout.write('\n'); // Space after box
188
- } else {
189
- inCodeBlock = true;
190
- codeLang = codeMatch[1] || 'bash';
191
- process.stdout.write(chalk.gray('\n [⚡] Building code block...\n'));
192
- }
188
+ // 2. Technical Block End Detection
189
+ const fileEndMatch = line.match(/<\/file>/);
190
+ const patchEndMatch = line.match(/>>>> REPLACE/);
191
+ const isCodeEnd = technicalType === 'code' && line.startsWith('```');
192
+
193
+ if (isCodeEnd || fileEndMatch || patchEndMatch) {
194
+ const displayContent = technicalBuffer.trim();
195
+ TUI.drawCodeContainer(
196
+ technicalType === 'file' ? 'New File Content' :
197
+ technicalType === 'patch' ? 'Surgical Patch' : 'Generated Block',
198
+ technicalType === 'code' ? codeLang : 'text',
199
+ displayContent
200
+ );
201
+ technicalBuffer = '';
202
+ technicalType = null;
203
+ process.stdout.write('\n');
193
204
  continue;
194
205
  }
195
206
 
196
207
  // 3. Content Handling
197
- if (inCodeBlock) {
198
- codeBuffer += line + '\n';
199
- } else if (trimmedLine) {
200
- // Strip markdown artifacts for a cleaner stream
201
- const cleanText = trimmedLine
202
- .replace(/\*\*%?\*/g, '')
203
- .replace(/#{1,6}\s/g, '')
204
- .replace(/\*\*:\*\*/g, ':')
205
- .trim();
206
-
207
- if (cleanText) {
208
- process.stdout.write(chalk.gray(cleanText + ' '));
209
- messageBuffer += cleanText + ' ';
208
+ if (technicalType) {
209
+ technicalBuffer += line + '\n';
210
+ } else {
211
+ // Agent Detection
212
+ const agentMatch = line.match(/\[\**\s*(Ajay Vai|Sandip Dai|Sunil Dai|Narayan Dai)\s*\**\]/);
213
+ if (agentMatch) {
214
+ const agentName = agentMatch[1];
215
+ activeAgent = agentName;
216
+ const color = agentName === 'Ajay Vai' ? chalk.magenta :
217
+ agentName === 'Sandip Dai' ? chalk.hex('#FF69B4') :
218
+ agentName === 'Sunil Dai' ? chalk.blue :
219
+ chalk.green;
220
+
221
+ process.stdout.write(`\n${color.bold(`${agentName}:`)} `);
222
+
223
+ // Strip tag from line content
224
+ const content = line.replace(/\[\**\s*(Ajay Vai|Sandip Dai|Sunil Dai|Narayan Dai)\s*\**\]:?\s*/, '').trim();
225
+ if (content) {
226
+ process.stdout.write(chalk.gray(content + ' '));
227
+ }
228
+ } else if (trimmedLine) {
229
+ // Strip common markdown artifacts
230
+ const cleanLine = trimmedLine
231
+ .replace(/\*\*%?\*/g, '')
232
+ .replace(/#{1,6}\s/g, '')
233
+ .replace(/\*\*:\*\*/g, ':')
234
+ .trim();
235
+
236
+ if (cleanLine) {
237
+ process.stdout.write(chalk.gray(cleanLine + ' '));
238
+ }
210
239
  }
211
240
  }
212
241
  }
@@ -214,13 +243,14 @@ ${repoMap}`
214
243
 
215
244
  spinner.stop();
216
245
 
217
- // Final Code Flush if still in block
218
- if (inCodeBlock && codeBuffer.trim()) {
219
- TUI.drawCodeContainer('Generated Block', codeLang, codeBuffer.trim());
246
+ // Final technical flush
247
+ if (technicalType && technicalBuffer.trim()) {
248
+ TUI.drawCodeContainer('Final technical content', 'text', technicalBuffer.trim());
249
+ process.stdout.write('\n');
220
250
  }
221
251
 
222
- // Space before commands/prompt
223
- console.log('\n');
252
+ // Final newline for streaming output
253
+ console.log();
224
254
 
225
255
  // Add assistant response to history
226
256
  messages.push({ role: 'assistant', content: fullResponse });
package/src/utils/tui.ts CHANGED
@@ -1,13 +1,9 @@
1
1
  import chalk from 'chalk';
2
- import readline from 'readline';
2
+ import * as readline from 'readline';
3
3
 
4
- /**
5
- * TUI Management for MATEX CLI "God-Mode"
6
- * Handles screen buffers, persistent headers, and real-time status updates.
7
- */
8
4
  export class TUI {
9
5
  private static isInitialized = false;
10
- private static currentStatus = '';
6
+ private static lastStatus = '';
11
7
 
12
8
  /**
13
9
  * Initialize the TUI Mode
@@ -15,13 +11,8 @@ export class TUI {
15
11
  static init() {
16
12
  if (this.isInitialized) return;
17
13
 
18
- // Enter alternative screen buffer
19
- process.stdout.write('\x1b[?1049h');
20
-
21
14
  // Hide cursor
22
15
  process.stdout.write('\x1b[?25l');
23
-
24
- this.clear();
25
16
  this.isInitialized = true;
26
17
 
27
18
  // Ensure clean exit
@@ -37,137 +28,110 @@ export class TUI {
37
28
 
38
29
  // Show cursor
39
30
  process.stdout.write('\x1b[?25h');
40
-
41
- // Exit alternative screen buffer
42
- process.stdout.write('\x1b[?1049l');
43
-
44
31
  this.isInitialized = false;
45
- process.exit();
46
32
  }
47
33
 
48
34
  /**
49
- * Clear the main viewport
35
+ * Clear the terminal
50
36
  */
51
37
  static clear() {
52
- process.stdout.write('\x1b[2J\x1b[H');
53
- this.drawHeader();
54
- this.drawStatusBar(this.currentStatus, true);
38
+ process.stdout.write('\x1b[2J\x1b[0;0H');
55
39
  }
56
40
 
57
41
  /**
58
- * Draw the persistent top header
42
+ * Draw a premium status bar at the bottom using Save/Restore cursor
59
43
  */
60
- static drawHeader() {
44
+ static drawStatusBar(message: string, force: boolean = false) {
45
+ if (!this.isInitialized) return;
46
+ if (!force && message === this.lastStatus) return;
47
+ this.lastStatus = message;
48
+
61
49
  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));
50
+ const height = process.stdout.rows || 24;
64
51
 
65
- // Move to top
66
- process.stdout.write('\x1b[H');
67
- process.stdout.write(chalk.bgCyan.black(' '.repeat(padding) + banner + ' '.repeat(width - banner.length - padding)) + '\n');
68
- process.stdout.write(chalk.gray('─'.repeat(width)) + '\n');
52
+ // Save cursor (\x1b[s), move to bottom, write, restore cursor (\x1b[u)
53
+ process.stdout.write('\x1b[s');
54
+ readline.cursorTo(process.stdout, 0, height - 1);
55
+ process.stdout.write(
56
+ chalk.bgBlue.white.bold(' 🧠 MATEX ') +
57
+ chalk.bgGray.white(` ${message.padEnd(width - 10)} `)
58
+ );
59
+ process.stdout.write('\x1b[u');
69
60
  }
70
61
 
71
62
  /**
72
- * Helper to draw a box with content
63
+ * Draw a box with a title and content
73
64
  */
74
- private static drawBox(title: string, color: (s: string) => string, lines: string[], icon: string = '📦') {
65
+ static drawBox(title: string, content: string, color: (s: string) => string = chalk.gray) {
75
66
  const width = Math.min(process.stdout.columns || 80, 100);
67
+ const lines = content.split('\n');
76
68
 
77
- console.log();
78
- const trafficLights = chalk.red('') + ' ' + chalk.yellow('●') + ' ' + chalk.green('');
79
- const displayTitle = ` ${icon} ${title} `;
80
-
81
- console.log(chalk.gray('┏' + '━'.repeat(width - 2) + '┓'));
82
- console.log(chalk.gray('┃ ') + trafficLights + ' ' + color(displayTitle).padEnd(width - 4) + chalk.gray(' ┃'));
83
- console.log(chalk.gray('┣' + '━'.repeat(width - 2) + '┫'));
69
+ console.log(color('┏' + '━'.repeat(width - 2) + '┓'));
70
+ console.log(color('') + chalk.bold(title).padEnd(width - 4) + color(''));
71
+ console.log(color('┣' + '━'.repeat(width - 2) + '┫'));
84
72
 
85
73
  lines.forEach(line => {
86
- const formattedLine = line.substring(0, width - 6);
87
- console.log(chalk.gray('┃ ') + chalk.white(formattedLine).padEnd(width - 4) + chalk.gray(' ┃'));
74
+ const contentWidth = width - 4;
75
+ let remaining = line;
76
+ if (remaining.length === 0) {
77
+ console.log(color('┃ ') + ' '.repeat(contentWidth) + color(' ┃'));
78
+ }
79
+ while (remaining.length > 0) {
80
+ const chunk = remaining.substring(0, contentWidth);
81
+ console.log(color('┃ ') + chalk.white(chunk.padEnd(contentWidth)) + color(' ┃'));
82
+ remaining = remaining.substring(contentWidth);
83
+ }
88
84
  });
89
85
 
90
- console.log(chalk.gray('┗' + '━'.repeat(width - 2) + '┛'));
91
- console.log();
86
+ console.log(color('┗' + '━'.repeat(width - 2) + '┛'));
92
87
  }
93
88
 
94
89
  /**
95
- * Draw a real-time status bar at the bottom
90
+ * Draw a premium code container with traffic lights
96
91
  */
97
- static drawStatusBar(status: string, force: boolean = false) {
98
- if (!this.isInitialized) return;
99
- if (this.currentStatus === status && !force) return;
100
-
101
- this.currentStatus = status;
102
- const width = process.stdout.columns || 80;
103
- const height = process.stdout.rows || 24;
104
-
105
- // Save cursor position using ANSI
106
- process.stdout.write('\x1b[s');
92
+ static drawCodeContainer(title: string, lang: string, code: string) {
93
+ const width = Math.min(process.stdout.columns || 80, 100);
94
+ const codeLines = code.split('\n');
107
95
 
108
- // Move to absolute bottom row
109
- readline.cursorTo(process.stdout, 0, height - 1);
96
+ const trafficLights = chalk.red('●') + ' ' + chalk.yellow('●') + ' ' + chalk.green('●');
97
+ const headerTitle = ` 📄 ${title} (${lang}) `;
110
98
 
111
- const cleanStatus = status.substring(0, width - 10);
112
- const barContent = ` [⚡] ${cleanStatus} `.padEnd(width);
113
- process.stdout.write(chalk.bgWhite.black(barContent));
99
+ console.log(chalk.gray('\n┏' + '━'.repeat(width - 2) + '┓'));
100
+ console.log(chalk.gray('┃ ') + trafficLights + ' ' + chalk.cyan.bold(headerTitle).padEnd(width - 10) + chalk.gray(' ┃'));
101
+ console.log(chalk.gray('┣' + '━'.repeat(width - 2) + '┫'));
114
102
 
115
- // Restore cursor position
116
- process.stdout.write('\x1b[u');
117
- }
103
+ codeLines.forEach(line => {
104
+ const contentWidth = width - 6;
105
+ let remaining = line;
106
+ if (remaining.length === 0) {
107
+ console.log(chalk.gray('┃ ') + ' '.repeat(contentWidth) + chalk.gray(' ┃'));
108
+ }
109
+ while (remaining.length > 0) {
110
+ const chunk = remaining.substring(0, contentWidth);
111
+ console.log(chalk.gray('┃ ') + chalk.hex('#e0e0e0')(chunk.padEnd(contentWidth)) + chalk.gray(' ┃'));
112
+ remaining = remaining.substring(contentWidth);
113
+ }
114
+ });
118
115
 
119
- /**
120
- * Draw a premium code container
121
- */
122
- static drawCodeContainer(title: string, lang: string, content: string) {
123
- const lines = content.split('\n').filter(l => l.trim() || l === '');
124
- this.drawBox(`${title} (${lang})`, chalk.cyan.bold, lines, '📝');
116
+ console.log(chalk.gray('┗' + '━'.repeat(width - 2) + '┛\n'));
125
117
  }
126
118
 
127
119
  /**
128
- * Draw a message box for agent dialogue
120
+ * Draw a specialized message container for agents
129
121
  */
130
122
  static drawMessageContainer(agent: string, message: string) {
131
- const lines = this.wrapText(message, 90);
132
- const colorMap: any = {
133
- 'Ajay Vai': chalk.magenta.bold,
134
- 'Sunil Dai': chalk.blue.bold,
135
- 'Sandip Dai': chalk.hex('#FF69B4').bold,
136
- 'Narayan Dai': chalk.green.bold
137
- };
138
- const color = colorMap[agent] || chalk.white.bold;
139
- this.drawBox(agent, color, lines, '🗣️');
140
- }
123
+ const color = agent.includes('Ajay') ? chalk.magenta :
124
+ agent.includes('Sunil') ? chalk.blue :
125
+ agent.includes('Sandip') ? chalk.hex('#FF69B4') :
126
+ chalk.green;
141
127
 
142
- /**
143
- * Wrap text to a specific width
144
- */
145
- private static wrapText(text: string, width: number): string[] {
146
- const words = text.split(' ');
147
- const lines = [];
148
- let currentLine = '';
149
-
150
- words.forEach(word => {
151
- if ((currentLine + word).length < width) {
152
- currentLine += (currentLine ? ' ' : '') + word;
153
- } else {
154
- lines.push(currentLine);
155
- currentLine = word;
156
- }
157
- });
158
- if (currentLine) lines.push(currentLine);
159
- return lines;
128
+ this.drawBox(`🤖 ${agent}`, message, color);
160
129
  }
161
130
 
162
131
  /**
163
- * Log content into the scrollable area
132
+ * Simple log with a prefix
164
133
  */
165
- static log(content: string) {
166
- if (!this.isInitialized) {
167
- console.log(content);
168
- return;
169
- }
170
- // Ensure we don't overwrite the status bar
171
- console.log(content);
134
+ static log(message: string) {
135
+ console.log(chalk.gray(` [⚡] ${message}`));
172
136
  }
173
137
  }