@taj-special/dravix-code 1.2.3 → 1.2.4

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/cli/index.js CHANGED
@@ -3,15 +3,26 @@ import * as path from 'path';
3
3
  import { randomBytes } from 'crypto';
4
4
  import { execSync } from 'child_process';
5
5
  import chalk from 'chalk';
6
- import { banner, printHelp, printError, colors } from '../utils/display.js';
6
+ import { banner, printHelp, printError, colors, VERSION } from '../utils/display.js';
7
7
  import { startRepl } from './repl.js';
8
- import { isLoggedIn, logout, getSavedUser, saveConfig, checkPlan, AUTH_URL } from '../services/auth.js';
9
- import { checkUsage, usageBar, fmtNum, formatResetTime } from '../services/usage.js';
8
+ import { isLoggedIn, logout, saveConfig, AUTH_URL } from '../services/auth.js';
10
9
  const POLL_URL = 'https://dravix.app/cli-auth.php';
11
10
  const SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
12
11
  function link(url) {
13
12
  return `\x1b]8;;${url}\x1b\\${url}\x1b]8;;\x1b\\`;
14
13
  }
14
+ function cx(s) {
15
+ const cols = process.stdout.columns ?? 80;
16
+ return ' '.repeat(Math.max(0, Math.floor((cols - s.length) / 2)));
17
+ }
18
+ function drawStars(count) {
19
+ const starChars = ['✦', '✧', '⋆', '·'];
20
+ for (let i = 0; i < count; i++) {
21
+ const cols = process.stdout.columns ?? 80;
22
+ const x = Math.floor(Math.random() * (cols - 10)) + 5;
23
+ console.log(' '.repeat(x) + colors.subtext(starChars[Math.floor(Math.random() * starChars.length)]));
24
+ }
25
+ }
15
26
  async function pollSession(sessionId) {
16
27
  try {
17
28
  const res = await fetch(`${POLL_URL}?action=poll&session=${sessionId}`);
@@ -25,47 +36,58 @@ async function pollSession(sessionId) {
25
36
  }
26
37
  async function showWelcome() {
27
38
  const cols = process.stdout.columns ?? 80;
28
- const W = Math.min(cols, 64);
29
- const P = colors.primary;
30
- const PB = colors.primary.bold;
31
- const DIM = colors.muted;
32
- const G = colors.success;
33
- const White = colors.text;
34
- const Muted = colors.muted;
35
- const line = () => DIM(' ' + '─'.repeat(W - 4));
36
- const pad = (s, w) => s + ' '.repeat(Math.max(w - s.length, 0));
39
+ const rows = process.stdout.rows ?? 24;
40
+ const boxW = Math.min(cols - 6, 70);
41
+ const indent = ' '.repeat(Math.max(0, Math.floor((cols - boxW) / 2)));
37
42
  console.clear();
38
- banner();
39
- console.log(' ' + White.bold('Welcome to Dravix Code') + Muted(' — your AI coding partner'));
40
- console.log(' ' + Muted('Works like Claude Code, Cursor, Copilot — but in your terminal.') + '\n');
41
- const boxW = Math.min(W - 4, 58);
42
- const inner = boxW - 2;
43
- const BC = DIM;
44
- const row = (icon, text) => {
45
- const content = ` ${icon} ${text}`;
46
- const padded = pad(content, inner);
47
- return ' ' + BC('│') + White(padded) + BC('│');
48
- };
49
- console.log(' ' + BC('╭' + '─'.repeat(boxW - 2) + '╮'));
50
- console.log(' ' + BC('│') + P(pad(' Capabilities', inner)) + BC('│'));
51
- console.log(' ' + BC('├' + '─'.repeat(boxW - 2) + '┤'));
52
- console.log(row(G('✓'), 'Write, edit and create code with AI'));
53
- console.log(row(G('✓'), 'Search and understand any codebase'));
54
- console.log(row(G('✓'), 'Run commands and fix errors automatically'));
55
- console.log(row(G(''), 'Read files, folders and project structure'));
56
- console.log(row(G('✓'), 'Works with TypeScript, Python, Go and more'));
57
- console.log(' ' + BC('╰' + '─'.repeat(boxW - 2) + '╯') + '\n');
58
- console.log(' ' + Muted('Powered by ') +
59
- P.bold('Dravix 3 Titanium') +
60
- Muted(' + ') +
61
- P.bold('Dravix 3.5 Quantum'));
62
- console.log(line() + '\n');
63
- console.log(' ' + Muted('Sign in with your Google account to get started.') + '\n');
43
+ // Stars
44
+ drawStars(5);
45
+ // Brand
46
+ console.log(cx('Taj Special') + colors.subtext('Taj Special'));
47
+ // Logo
48
+ const logoLines = [
49
+ '██████╗ ██████╗ █████╗ ██╗ ██╗██╗██╗ ██╗',
50
+ '██╔══██╗██╔══██╗██╔══██╗██║ ██║██║╚██╗██╔╝',
51
+ '██║ ██║██████╔╝███████║██║ ██║██║ ╚███╔╝',
52
+ '██║ ██║██╔══██╗██╔══██║╚██╗ ██╔╝██║ ██╔██╗',
53
+ '██████╔╝██║ ██║██║ ██║ ╚████╔╝ ██║██╔╝ ██╗',
54
+ '╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ ╚═╝╚═╝ ╚═╝',
55
+ ];
56
+ for (const line of logoLines) {
57
+ console.log(cx(line) + colors.primary.bold(line));
58
+ }
59
+ // CODE subtitle
60
+ console.log(cx('C O D E') + colors.accent.bold('C O D E'));
61
+ // More stars
62
+ drawStars(3);
63
+ console.log('');
64
+ // Input box (centered)
65
+ const innerW = boxW - 6;
66
+ const placeholder = 'Ask me anything...';
67
+ const display = placeholder.length > innerW ? placeholder.slice(0, innerW - 1) + '' : placeholder;
68
+ const pPad = ' '.repeat(Math.max(innerW - display.length, 0));
69
+ console.log(indent + colors.dim('╭' + '─'.repeat(boxW - 2) + '╮'));
70
+ console.log(indent + colors.dim('│') + ' ' + colors.subtext(display) + pPad + ' ' + colors.dim('│'));
71
+ console.log(indent + colors.dim('│') + ' ' + colors.primary('Build') + colors.muted(' · ') + colors.text('Dravix Auto') + colors.muted(' (Titanium + Quantum)') + ' ' + colors.dim('│'));
72
+ console.log(indent + colors.dim('╰' + '─'.repeat(boxW - 2) + '╯'));
73
+ console.log('');
74
+ // Shortcuts
75
+ console.log(indent +
76
+ colors.primary('Tab') + colors.muted(' mode ') +
77
+ colors.primary('Ctrl+P') + colors.muted(' settings ') +
78
+ colors.primary('@') + colors.muted(' file ') +
79
+ colors.primary('$') + colors.muted(' agent ') +
80
+ colors.primary('/') + colors.muted(' commands'));
81
+ console.log('');
82
+ // CTA
64
83
  const enterKey = chalk.bgHex('#312e81').hex('#c7d2fe').bold(' Enter ');
65
- const escKey = chalk.hex('#374151').bold(' Esc ');
66
- console.log(' ' + enterKey + Muted(' Sign in with Google'));
67
- console.log(' ' + escKey + Muted(' Cancel') + '\n');
68
- console.log(line() + '\n');
84
+ const escKey = colors.dim(' Esc ');
85
+ console.log(indent + enterKey + colors.muted(' Sign in with Google'));
86
+ console.log(indent + escKey + colors.muted(' Cancel'));
87
+ // Bottom bar
88
+ const bottomLeft = '~' + path.basename(process.cwd());
89
+ const bottomRight = 'v' + VERSION;
90
+ process.stdout.write(`\x1b[${rows};1H\x1b[2K` + colors.muted(bottomLeft) + ' '.repeat(Math.max(cols - bottomLeft.length - bottomRight.length, 2)) + colors.muted(bottomRight));
69
91
  return new Promise((resolve) => {
70
92
  process.stdin.setRawMode(true);
71
93
  process.stdin.resume();
@@ -91,27 +113,43 @@ async function showWelcome() {
91
113
  async function browserAuth() {
92
114
  const sessionId = randomBytes(16).toString('hex');
93
115
  const authUrl = `${AUTH_URL}?session=${sessionId}`;
94
- const DIM = colors.muted;
95
- const W = colors.text;
96
- const P = colors.primary;
97
116
  const cols = process.stdout.columns ?? 80;
98
- const line = DIM(' ' + '─'.repeat(Math.min(cols - 4, 51)));
117
+ const rows = process.stdout.rows ?? 24;
118
+ const boxW = Math.min(cols - 6, 70);
119
+ const indent = ' '.repeat(Math.max(0, Math.floor((cols - boxW) / 2)));
99
120
  console.clear();
100
- banner();
101
- console.log(line);
102
- console.log('\n ' + DIM('Step 1 — ') + W('Open this link in your browser:') + '\n');
103
- console.log(' ' + colors.primary(link(authUrl)) + '\n');
104
- console.log(' ' + DIM('Step 2 — ') + W('Sign in to your Dravix account and authorize access'));
105
- console.log(' ' + DIM('Step 3 — ') + W('Return here — authentication completes automatically') + '\n');
106
- console.log(line + '\n');
121
+ drawStars(4);
122
+ console.log(cx('Taj Special') + colors.subtext('Taj Special'));
123
+ const logoLines = [
124
+ '██████╗ ██████╗ █████╗ ██╗ ██╗██╗██╗ ██╗',
125
+ '██╔══██╗██╔══██╗██╔══██╗██║ ██║██║╚██╗██╔╝',
126
+ '██║ ██║██████╔╝███████║██║ ██║██║ ╚███╔╝',
127
+ '██║ ██║██╔══██╗██╔══██║╚██╗ ██╔╝██║ ██╔██╗',
128
+ '██████╔╝██║ ██║██║ ██║ ╚████╔╝ ██║██╔╝ ██╗',
129
+ '╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ ╚═╝╚═╝ ╚═╝',
130
+ ];
131
+ for (const line of logoLines) {
132
+ console.log(cx(line) + colors.primary.bold(line));
133
+ }
134
+ console.log(cx('C O D E') + colors.accent.bold('C O D E'));
135
+ drawStars(2);
136
+ console.log('');
137
+ // Auth steps box
138
+ console.log(indent + colors.dim('╭' + '─'.repeat(boxW - 2) + '╮'));
139
+ console.log(indent + colors.dim('│') + ' ' + colors.text('Step 1 — ') + colors.muted('Open this link in your browser:') + ' ' + colors.dim('│'));
140
+ console.log(indent + colors.dim('│') + ' ' + colors.primary(link(authUrl)) + ' ' + colors.dim('│'));
141
+ console.log(indent + colors.dim('│') + ' ' + colors.dim('Step 2 — Sign in and authorize') + ' ' + colors.dim('│'));
142
+ console.log(indent + colors.dim('│') + ' ' + colors.dim('Step 3 — Return here (auto-connects)') + ' ' + colors.dim('│'));
143
+ console.log(indent + colors.dim('╰' + '─'.repeat(boxW - 2) + '╯'));
144
+ console.log('');
145
+ // Spinner
107
146
  let frameIdx = 0;
108
147
  await new Promise((resolve, reject) => {
109
148
  let done = false;
110
149
  const spinnerInterval = setInterval(() => {
111
150
  if (done)
112
151
  return;
113
- process.stdout.write(`\r ${colors.muted(SPINNER[frameIdx % SPINNER.length])} ${colors.muted('Waiting for authentication...')}`);
114
- frameIdx++;
152
+ process.stdout.write(`\r ${colors.muted(SPINNER[frameIdx++ % SPINNER.length])} ${colors.muted('Waiting for authentication...')}`);
115
153
  }, 80);
116
154
  const poll = async () => {
117
155
  if (done)
@@ -122,8 +160,7 @@ async function browserAuth() {
122
160
  clearInterval(spinnerInterval);
123
161
  process.stdout.write('\r\x1b[K');
124
162
  saveConfig({ token: result.token, name: result.name, email: result.email });
125
- console.log(' ' + colors.success('✓') + ' ' + W('Signed in as ') + colors.primary.bold(result.name) + DIM(' · ') + colors.muted(result.email));
126
- console.log(DIM('\n ' + '─'.repeat(47)) + '\n');
163
+ console.log(' ' + colors.success('✓') + ' ' + colors.text('Signed in as ') + colors.primary.bold(result.name));
127
164
  resolve();
128
165
  return;
129
166
  }
@@ -134,8 +171,7 @@ async function browserAuth() {
134
171
  if (!done) {
135
172
  done = true;
136
173
  clearInterval(spinnerInterval);
137
- process.stdout.write('\r\x1b[K');
138
- reject(new Error('Authentication timed out after 5 minutes.'));
174
+ reject(new Error('Authentication timed out.'));
139
175
  }
140
176
  }, 300_000);
141
177
  });
@@ -160,10 +196,7 @@ async function main() {
160
196
  }
161
197
  let justAuthenticated = false;
162
198
  if (arg === '--login') {
163
- if (isLoggedIn()) {
164
- banner();
165
- }
166
- else {
199
+ if (!isLoggedIn()) {
167
200
  await browserAuth();
168
201
  justAuthenticated = true;
169
202
  }
@@ -172,41 +205,55 @@ async function main() {
172
205
  await browserAuth();
173
206
  justAuthenticated = true;
174
207
  }
175
- else {
176
- banner();
177
- }
178
- const { name, email } = getSavedUser();
179
208
  const cwd = (arg && !arg.startsWith('--')) ? path.resolve(arg) : process.cwd();
180
- const token = (await import('../services/auth.js')).getToken() ?? '';
181
- const [plan, usage] = await Promise.all([
182
- email ? checkPlan(email) : Promise.resolve('Free'),
183
- token ? checkUsage(token) : Promise.resolve(null),
184
- ]);
185
- const C = colors.primary;
186
- const DIM = colors.muted;
187
- const W = colors.text;
188
- const planBadge = plan === 'Plus'
189
- ? colors.accent.bold('Plus')
190
- : colors.muted('Free');
191
- console.log(DIM(' ' + '─'.repeat(45)));
192
- console.log(colors.muted(' User ') + W(name ?? 'Unknown') + DIM(' · ') + colors.muted(email ?? ''));
193
- console.log(colors.muted(' Plan ') + planBadge);
194
- if (usage) {
195
- const { bar, pct } = usageBar(usage.tokens_used, usage.limit);
196
- const barColor = pct >= 80 ? colors.error
197
- : pct >= 50 ? colors.warn
198
- : colors.success;
199
- const resetStr = formatResetTime(usage);
200
- console.log(colors.muted(' Tokens ') +
201
- barColor(bar) + ' ' +
202
- colors.subtext(fmtNum(usage.tokens_used) + ' / ' + fmtNum(usage.limit)) +
203
- DIM(' · resets in ' + resetStr));
209
+ // Draw the clean centered app screen
210
+ const cols = process.stdout.columns ?? 80;
211
+ const rows = process.stdout.rows ?? 24;
212
+ const boxW = Math.min(cols - 6, 70);
213
+ const indent = ' '.repeat(Math.max(0, Math.floor((cols - boxW) / 2)));
214
+ console.clear();
215
+ drawStars(5);
216
+ console.log(cx('Taj Special') + colors.subtext('Taj Special'));
217
+ const logoLines = [
218
+ '██████╗ ██████╗ █████╗ ██╗ ██╗██╗██╗ ██╗',
219
+ '██╔══██╗██╔══██╗██╔══██╗██║ ██║██║╚██╗██╔╝',
220
+ '██║ ██║██████╔╝███████║██║ ██║██║ ╚███╔╝',
221
+ '██║ ██║██╔══██╗██╔══██║╚██╗ ██╔╝██║ ██╔██╗',
222
+ '██████╔╝██║ ██║██║ ██║ ╚████╔╝ ██║██╔╝ ██╗',
223
+ '╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ ╚═╝╚═╝ ╚═╝',
224
+ ];
225
+ for (const line of logoLines) {
226
+ console.log(cx(line) + colors.primary.bold(line));
204
227
  }
205
- console.log(colors.muted(' Project ') + W(path.basename(cwd)));
206
- console.log(colors.muted(' Path ') + DIM(cwd));
207
- console.log(DIM(' ' + '─'.repeat(45)));
208
- console.log(colors.muted(' ') + C('Tab') + colors.muted(' path complete ') + C('@') + colors.muted(' file picker ') + C('Ctrl+C') + colors.muted(' cancel ') + C('/help') + colors.muted(' commands'));
209
- process.stdout.write('\n');
228
+ console.log(cx('C O D E') + colors.accent.bold('C O D E'));
229
+ drawStars(3);
230
+ console.log('');
231
+ // Input box
232
+ const innerW = boxW - 6;
233
+ const placeholder = 'Ask me anything...';
234
+ const display = placeholder.length > innerW ? placeholder.slice(0, innerW - 1) + '…' : placeholder;
235
+ const pPad = ' '.repeat(Math.max(innerW - display.length, 0));
236
+ console.log(indent + colors.dim('╭' + '─'.repeat(boxW - 2) + '╮'));
237
+ console.log(indent + colors.dim('│') + ' ' + colors.subtext(display) + pPad + ' ' + colors.dim('│'));
238
+ console.log(indent + colors.dim('│') + ' ' + colors.primary('Build') + colors.muted(' · ') + colors.text('Dravix Auto') + colors.muted(' (Titanium + Quantum)') + ' ' + colors.dim('│'));
239
+ console.log(indent + colors.dim('╰' + '─'.repeat(boxW - 2) + '╯'));
240
+ console.log('');
241
+ // Shortcuts
242
+ console.log(indent +
243
+ colors.primary('Tab') + colors.muted(' mode ') +
244
+ colors.primary('Ctrl+P') + colors.muted(' settings ') +
245
+ colors.primary('@') + colors.muted(' file ') +
246
+ colors.primary('$') + colors.muted(' agent ') +
247
+ colors.primary('/') + colors.muted(' commands'));
248
+ console.log('');
249
+ // Tip
250
+ console.log(indent +
251
+ colors.primary('●') + colors.muted(' Tip ') +
252
+ colors.text('Use syntax ') + colors.primary('{env:VAR_NAME}') + colors.text(' to reference variables'));
253
+ // Bottom bar
254
+ const bottomLeft = '~' + path.basename(cwd);
255
+ const bottomRight = 'v' + VERSION;
256
+ process.stdout.write(`\x1b[${rows};1H\x1b[2K` + colors.muted(bottomLeft) + ' '.repeat(Math.max(cols - bottomLeft.length - bottomRight.length, 2)) + colors.muted(bottomRight));
210
257
  await startRepl(cwd);
211
258
  }
212
259
  main().catch((err) => {
@@ -20,16 +20,35 @@ export const colors = {
20
20
  text: chalk.hex('#e2e8f0'),
21
21
  subtext: chalk.hex('#94a3b8'),
22
22
  };
23
+ function cx(s) {
24
+ const cols = process.stdout.columns ?? 80;
25
+ return ' '.repeat(Math.max(0, Math.floor((cols - s.length) / 2)));
26
+ }
27
+ function drawStars(count) {
28
+ const starChars = ['✦', '✧', '⋆', '·'];
29
+ for (let i = 0; i < count; i++) {
30
+ const cols = process.stdout.columns ?? 80;
31
+ const x = Math.floor(Math.random() * (cols - 10)) + 5;
32
+ console.log(' '.repeat(x) + colors.subtext(starChars[Math.floor(Math.random() * starChars.length)]));
33
+ }
34
+ }
23
35
  export function banner() {
24
- console.log(colors.primary.bold(`
25
- ██████╗ ██████╗ █████╗ ██╗ ██╗██╗██╗ ██╗
26
- ██╔══██╗██╔══██╗██╔══██╗██║ ██║██║╚██╗██╔╝
27
- ██║ ██║██████╔╝███████║██║ ██║██║ ╚███╔╝
28
- ██║ ██║██╔══██╗██╔══██║╚██╗ ██╔╝██║ ██╔██╗
29
- ██████╔╝██║ ██║██║ ██║ ╚████╔╝ ██║██╔╝ ██╗
30
- ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ ╚═╝╚═╝ ╚═╝`));
31
- console.log(colors.primary.bold(' Code') + colors.muted(` v${VERSION} · `) + colors.accent('AI-powered coding assistant'));
32
- console.log(colors.dim(' ─────────────────────────────────────────────\n'));
36
+ console.log('\n');
37
+ drawStars(4);
38
+ console.log(cx('Taj Special') + colors.subtext('Taj Special'));
39
+ const logoLines = [
40
+ '██████╗ ██████╗ █████╗ ██╗ ██╗██╗██╗ ██╗',
41
+ '██╔══██╗██╔══██╗██╔══██╗██║ ██║██║╚██╗██╔╝',
42
+ '██║ ██║██████╔╝███████║██║ ██║██║ ╚███╔╝',
43
+ '██║ ██║██╔══██╗██╔══██║╚██╗ ██╔╝██║ ██╔██╗',
44
+ '██████╔╝██║ ██║██║ ██║ ╚████╔╝ ██║██╔╝ ██╗',
45
+ '╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ ╚═╝╚═╝ ╚═╝',
46
+ ];
47
+ for (const line of logoLines) {
48
+ console.log(cx(line) + colors.primary.bold(line));
49
+ }
50
+ console.log(cx('C O D E') + colors.accent.bold('C O D E'));
51
+ drawStars(3);
33
52
  }
34
53
  export function printAI(chunk) {
35
54
  process.stdout.write(colors.ai(chunk));
@@ -64,10 +83,8 @@ export function printOpResult(result) {
64
83
  const statPad = statStr ? ' ' + statStr : '';
65
84
  console.log(iconStr + labelStr + pathStr + statPad);
66
85
  // Compact mode: only show diff if changes are large (>30 lines)
67
- // For smaller changes, show the actual diff
68
86
  const totalChanges = displayAdds + displayRemoves;
69
87
  if (totalChanges > 30) {
70
- // Very large change — show compact summary only
71
88
  if (result.linesBefore !== undefined && result.linesAfter !== undefined) {
72
89
  const delta = result.linesAfter - result.linesBefore;
73
90
  const deltaStr = delta > 0 ? colors.success(`+${delta}`) : delta < 0 ? colors.error(`${delta}`) : '=0';
@@ -89,8 +106,8 @@ export function printOpResult(result) {
89
106
  console.log(colors.muted(' (formatting / whitespace change)'));
90
107
  return;
91
108
  }
92
- const CONTEXT = 2; // Reduced from 3 to 2 for more compact diffs
93
- const MAX_SIDE = 20; // Reduced from 40 to 20 for more compact diffs
109
+ const CONTEXT = 2;
110
+ const MAX_SIDE = 20;
94
111
  const show = new Uint8Array(diff.length);
95
112
  for (let i = 0; i < diff.length; i++) {
96
113
  if (diff[i].kind !== 'context') {
@@ -250,20 +267,19 @@ ${line}
250
267
 
251
268
  ${colors.primary.bold(' Keyboard shortcuts')}
252
269
  ${line}
253
- ${C('Tab')} ${W('Path autocomplete — navigate project files')}
254
- ${C('@')} ${W('File picker — browse and insert file path')}
255
- ${C('Ctrl+C')} ${W('Cancel AI response while streaming')}
270
+ ${C('Tab')} ${W('Path autocomplete')}
271
+ ${C('@')} ${W('File picker — attach file')}
272
+ ${C('$')} ${W('Run subagent')}
273
+ ${C('Ctrl+C')} ${W('Cancel AI response')}
256
274
  ${C('Ctrl+L')} ${W('Clear screen')}
257
- ${C(' ')} ${W('Enter / exit folder in file picker')}
258
- ${C('↑ ↓')} ${W('Navigate items in picker')}
259
- ${C('Space')} ${W('Select item in file picker')}
275
+ ${C(' ')} ${W('Navigate items')}
260
276
  ${C('Esc')} ${W('Close picker')}
261
277
 
262
278
  ${colors.primary.bold(' Tips')}
263
279
  ${line}
264
280
  ${colors.muted('·')} ${W('Start typing while AI responds — your message queues automatically')}
265
- ${colors.muted('·')} ${W('Mention a filename in your message to auto-inject its content')}
266
- ${colors.muted('·')} ${W('When approving changes:')} ${C('y')} ${DIM('yes')} ${C('a')} ${DIM('always')} ${C('n')} ${DIM('no')}
281
+ ${colors.muted('·')} ${W('Mention a filename to auto-inject its content')}
282
+ ${colors.muted('·')} ${W('Approve changes:')} ${C('y')} ${DIM('yes')} ${C('a')} ${DIM('always')} ${C('n')} ${DIM('no')}
267
283
  ${colors.muted('·')} ${W('Use /resume to continue a previous conversation')}
268
284
  `);
269
285
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taj-special/dravix-code",
3
- "version": "1.2.3",
3
+ "version": "1.2.4",
4
4
  "description": "AI-powered coding assistant CLI — Dravix Code",
5
5
  "type": "module",
6
6
  "bin": {