minovative-mind-cli 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@ import * as p from '@clack/prompts';
6
6
  import pc from 'picocolors';
7
7
  import { startAgentLoop } from '../services/agent.js';
8
8
  import { getAuthorizedIdToken, login } from '../services/auth.js';
9
- import { printLogo } from '../utils/logo.js';
9
+ import { printLogo, brandBg, brandFg } from '../utils/logo.js';
10
10
  import { updateWorkspaceStatus } from '../services/workspace.js';
11
11
  /**
12
12
  * @class DefaultCommand
@@ -52,7 +52,7 @@ Chat Controls:
52
52
  const pkg = JSON.parse(await fs.promises.readFile(new URL('../../package.json', import.meta.url), 'utf8'));
53
53
  updateNotifier({ pkg }).notify();
54
54
  printLogo();
55
- p.intro(`${pc.bgCyan(pc.black(' Minovative Mind CLI '))} ${pc.dim('v' + this.config.version)}`);
55
+ p.intro(`${brandBg(' Minovative Mind CLI ')} ${pc.dim('v' + this.config.version)}`);
56
56
  // Check authentication
57
57
  let idToken = await getAuthorizedIdToken();
58
58
  if (!idToken) {
@@ -65,7 +65,7 @@ Chat Controls:
65
65
  // Re-fetch token after successful login
66
66
  idToken = await getAuthorizedIdToken();
67
67
  }
68
- p.log.info(`${pc.dim('Workspace:')} ${pc.cyan(workspaceRoot)}`);
68
+ p.log.info(`${pc.dim('Workspace:')} ${brandFg(workspaceRoot)}`);
69
69
  p.log.info(`${pc.dim('Commands:')} Type ${pc.yellow('/')} to open the command menu and "${pc.yellow('stop')}" to stop the ai generation. Type ${pc.yellow('exit')} to leave.`);
70
70
  // Update workspace status in the background
71
71
  if (idToken) {
@@ -7,7 +7,7 @@ import { promisify } from 'node:util';
7
7
  import { toggleDebugMode } from '../../utils/logger.js';
8
8
  import { changeLogger } from '../changeLogger.js';
9
9
  import { chatHistoryService } from '../chatHistoryService.js';
10
- import { printLogo } from '../../utils/logo.js';
10
+ import { printLogo, brandBg, brandFg } from '../../utils/logo.js';
11
11
  import { readPaste } from '../../utils/paste.js';
12
12
  import { setApprovalMode, getApprovalMode } from '../agent-tools.js';
13
13
  import { ProxyChatSession } from '../ai.js';
@@ -43,8 +43,8 @@ export async function handleSlashCommand(command, context) {
43
43
  chat.clearHistory();
44
44
  process.stdout.write('\x1B[2J\x1B[3J\x1B[H'); // Hard clear screen and scrollback
45
45
  printLogo();
46
- p.intro(`${pc.bgCyan(pc.black(' Minovative Mind CLI '))} ${pc.dim('v' + version)}`);
47
- p.log.info(`${pc.dim('Workspace:')} ${pc.cyan(workspaceRoot)}`);
46
+ p.intro(`${brandBg(' Minovative Mind CLI ')} ${pc.dim('v' + version)}`);
47
+ p.log.info(`${pc.dim('Workspace:')} ${brandFg(workspaceRoot)}`);
48
48
  p.log.info(`${pc.dim('Commands:')} Type ${pc.yellow('/')} to open the command menu and "${pc.yellow('stop')}" to stop the ai generation. Type ${pc.yellow('exit')} to leave.`);
49
49
  p.log.success('Chat history cleared.');
50
50
  console.log(pc.dim('\nType your coding request below. Type "exit" or "quit" to leave.\n'));
@@ -212,8 +212,8 @@ export async function handleSlashCommand(command, context) {
212
212
  }
213
213
  process.stdout.write('\x1B[2J\x1B[3J\x1B[H'); // Hard clear screen and scrollback
214
214
  printLogo();
215
- p.intro(`${pc.bgCyan(pc.black(' Minovative Mind CLI '))} ${pc.dim('v' + version)}`);
216
- p.log.info(`${pc.dim('Workspace:')} ${pc.cyan(workspaceRoot)}`);
215
+ p.intro(`${brandBg(' Minovative Mind CLI ')} ${pc.dim('v' + version)}`);
216
+ p.log.info(`${pc.dim('Workspace:')} ${brandFg(workspaceRoot)}`);
217
217
  p.log.info(`${pc.dim('Commands:')} Type ${pc.yellow('/')} to open the command menu and "${pc.yellow('stop')}" to stop the ai generation. Type ${pc.yellow('exit')} to leave.`);
218
218
  p.log.success(`Resumed session: ${session.title}`);
219
219
  // Print the loaded history so the user can see past context
@@ -251,8 +251,8 @@ export async function handleSlashCommand(command, context) {
251
251
  chat.clearHistory();
252
252
  process.stdout.write('\x1B[2J\x1B[3J\x1B[H'); // Hard clear screen and scrollback
253
253
  printLogo();
254
- p.intro(`${pc.bgCyan(pc.black(' Minovative Mind CLI '))} ${pc.dim('v' + version)}`);
255
- p.log.info(`${pc.dim('Workspace:')} ${pc.cyan(workspaceRoot)}`);
254
+ p.intro(`${brandBg(' Minovative Mind CLI ')} ${pc.dim('v' + version)}`);
255
+ p.log.info(`${pc.dim('Workspace:')} ${brandFg(workspaceRoot)}`);
256
256
  p.log.info(`${pc.dim('Commands:')} Type ${pc.yellow('/')} to open the command menu and "${pc.yellow('stop')}" to stop the ai generation. Type ${pc.yellow('exit')} to leave.`);
257
257
  p.log.warn('Active session was deleted. Chat history cleared.');
258
258
  console.log(pc.dim('\nType your coding request below. Type "exit" or "quit" to leave.\n'));
@@ -226,8 +226,19 @@ export async function startAgentLoop(workspaceRoot, version) {
226
226
  }
227
227
  // Apply the dynamic prompt updates and tool registrations to the active chat session
228
228
  chat.setAgentConfig(dynamicSystemInstruction, config.tools);
229
- if (!inputHandler.isCurrentlyPrompting()) {
230
- spinner.message('Thinking...');
229
+ if (gatherRes.contextResult) {
230
+ if (!inputHandler.isCurrentlyPrompting()) {
231
+ spinner.stop(pc.green('🔍 Investigation completed.'));
232
+ spinner.start('Thinking...');
233
+ }
234
+ else {
235
+ p.log.success(pc.green('🔍 Investigation completed.'));
236
+ }
237
+ }
238
+ else {
239
+ if (!inputHandler.isCurrentlyPrompting()) {
240
+ spinner.message('Thinking...');
241
+ }
231
242
  }
232
243
  // Send the formulated prompt payload to the generative model
233
244
  let result;
@@ -1,2 +1,4 @@
1
1
  export declare const LOGO: string;
2
2
  export declare function printLogo(): void;
3
+ export declare const brandBg: (text: string) => string;
4
+ export declare const brandFg: (text: any) => string;
@@ -1,12 +1,33 @@
1
- import pc from 'picocolors';
2
- export const LOGO = `
3
- ${pc.blue('///')} ${pc.cyan('//')} ${pc.cyan('\\\\')} ${pc.blue('\\\\\\')} ${pc.blue(' __ __ __ __ ____ _ ___ ')}
4
- ${pc.blue('///')} ${pc.cyan('//')} ${pc.cyan('\\\\')} ${pc.blue('\\\\\\')} ${pc.blue(' | \\/ || \\/ | / ___| | |_ _|')}
5
- ${pc.blue('///')} ${pc.cyan('//')} ${pc.cyan('●')} ${pc.cyan('\\\\')} ${pc.blue('\\\\\\')} ${pc.blue(' | |\\/| || |\\/| | | | | | | | ')}
6
- ${pc.blue('\\\\\\')} ${pc.cyan('\\\\')} ${pc.cyan('//')} ${pc.blue('///')} ${pc.blue(' | | | || | | | | |___| |___ | | ')}
7
- ${pc.blue('\\\\\\')} ${pc.cyan('\\\\')} ${pc.cyan('//')} ${pc.blue('///')} ${pc.blue(' |_| |_||_| |_| \\____|_____|___|')}
8
- ${pc.blue('\\\\\\')} ${pc.cyan('\\\\')} ${pc.cyan('//')} ${pc.blue('///')}
9
- `;
1
+ import gradient from 'gradient-string';
2
+ // Premium hex profiles sampled directly from mino-logo-dark.png
3
+ const leftG = gradient(['#222', '#0044ff']); // Cyan to deep royal blue (inward flow)
4
+ const rightG = gradient(['#0044ff', '#222']); // Deep royal blue to cyan (outward flow)
5
+ const dotG = gradient(['#222', '#0044ff']); // Centered neon core
6
+ const textG = gradient(['#0052ff', '#222']); // Electric blue-to-cyan shift for typography
7
+ export const LOGO = [
8
+ // Line 1
9
+ ` ${leftG('████')} ${leftG('████')} ${rightG('████')} ${rightG('████')} ${textG('██ ██ ██████ ██ ██ ██████ ████████ ██ ██████')}`,
10
+ // Line 2
11
+ ` ${leftG('████')} ${leftG('████')} ${rightG('████')} ${rightG('████')} ${textG('████ ████ ██ ████ ██ ██ ██ ██ ██ ██ ')}`,
12
+ // Line 3
13
+ ` ${leftG('████')} ${leftG('████')} ${rightG('████')} ${rightG('████')} ${textG('██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ')}`,
14
+ // Line 4
15
+ `${leftG('████')} ${leftG('████')} ${dotG('██')} ${rightG('████')} ${rightG('████')} ${textG('██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ')}`,
16
+ // Line 5
17
+ ` ${leftG('████')} ${leftG('████')} ${rightG('████')} ${rightG('████')} ${textG('██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ')}`,
18
+ // Line 6
19
+ ` ${leftG('████')} ${leftG('████')} ${rightG('████')} ${rightG('████')} ${textG('██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ')}`,
20
+ // Line 7
21
+ ` ${leftG('████')} ${leftG('████')} ${rightG('████')} ${rightG('████')} ${textG('██ ██ ██████ ██ ██ ██████ ████████ ██████████ ██████')}`,
22
+ ].join('\n');
10
23
  export function printLogo() {
11
- console.log(pc.bold(LOGO));
24
+ console.log('\n' + LOGO + '\n');
12
25
  }
26
+ import pc from 'picocolors';
27
+ // Override picocolors cyan globally to use our custom hex brand color for the entire UI
28
+ const customCyan = (text) => `\x1b[38;2;0;82;255m${text}\x1b[0m`;
29
+ const customBgCyan = (text) => `\x1b[48;2;0;82;255m${text}\x1b[0m`;
30
+ pc.cyan = customCyan;
31
+ pc.bgCyan = customBgCyan;
32
+ export const brandBg = (text) => `\x1b[48;2;0;82;255m${pc.black(text)}\x1b[0m`;
33
+ export const brandFg = customCyan;
@@ -65,5 +65,5 @@
65
65
  ]
66
66
  }
67
67
  },
68
- "version": "1.5.0"
68
+ "version": "1.5.1"
69
69
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "minovative-mind-cli",
3
3
  "description": "An automated AI agent powered by Vertex AI that helps you write software",
4
- "version": "1.5.0",
4
+ "version": "1.5.1",
5
5
  "author": "Daniel Ward",
6
6
  "bin": {
7
7
  "minovative-mind-cli": "./bin/run.js"
@@ -14,6 +14,7 @@
14
14
  "@oclif/plugin-help": "^6",
15
15
  "dotenv": "^16",
16
16
  "fastest-levenshtein": "^1.0.16",
17
+ "gradient-string": "^3.0.0",
17
18
  "marked": "^12.0.2",
18
19
  "marked-terminal": "^7.0.0",
19
20
  "picocolors": "^1",