minovative-mind-cli 1.1.0 → 1.1.2
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/README.md +5 -48
- package/dist/commands/chat.js +5 -0
- package/dist/services/agent.js +26 -5
- package/oclif.manifest.json +2 -67
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -15,8 +15,9 @@ Latest Updates: [https://www.minovativemind.dev/updates](https://www.minovativem
|
|
|
15
15
|
|
|
16
16
|
The CLI supports the following advanced reasoning and coding models via Vertex AI Model Garden. You can hot-swap between these models at any time during a chat session by typing `/models` in the CLI:
|
|
17
17
|
|
|
18
|
-
- **Gemini
|
|
19
|
-
- **Gemini
|
|
18
|
+
- **Gemini 3.5 Flash** (Default): Lightning fast, top-tier performance for everyday coding tasks.
|
|
19
|
+
- **Gemini 3.1 Pro**: Best for highly complex architectural reasoning and large context windows.
|
|
20
|
+
- **Gemini 2.5 Pro / Flash**: Legacy high-performance models still fully supported.
|
|
20
21
|
|
|
21
22
|
## TOC
|
|
22
23
|
|
|
@@ -52,10 +53,10 @@ Getting started with Minovative Mind CLI is easy!
|
|
|
52
53
|
```
|
|
53
54
|
|
|
54
55
|
4. **Change Models (Optional):**
|
|
55
|
-
Once in a chat, type `/models` to switch between advanced reasoning models like Gemini
|
|
56
|
+
Once in a chat, type `/models` to switch between advanced reasoning models like Gemini 3.5 Flash and Gemini 3.1 Pro!
|
|
56
57
|
|
|
57
58
|
5. **Update the CLI:**
|
|
58
|
-
To ensure you have the latest features and bug fixes, you can update the CLI at any time by running
|
|
59
|
+
To ensure you have the latest features and bug fixes, you can update the CLI at any time by running the following command. (The CLI will automatically notify you when a new version is available!)
|
|
59
60
|
|
|
60
61
|
```bash
|
|
61
62
|
npm update -g minovative-mind-cli
|
|
@@ -64,27 +65,7 @@ Getting started with Minovative Mind CLI is easy!
|
|
|
64
65
|
# Commands
|
|
65
66
|
|
|
66
67
|
<!-- commands -->
|
|
67
|
-
* [`minovative-mind-cli chat`](#minovative-mind-cli-chat)
|
|
68
68
|
* [`minovative-mind-cli help [COMMAND]`](#minovative-mind-cli-help-command)
|
|
69
|
-
* [`minovative-mind-cli login`](#minovative-mind-cli-login)
|
|
70
|
-
* [`minovative-mind-cli logout`](#minovative-mind-cli-logout)
|
|
71
|
-
|
|
72
|
-
## `minovative-mind-cli chat`
|
|
73
|
-
|
|
74
|
-
Start an interactive AI coding agent session powered by Vertex AI.
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
USAGE
|
|
78
|
-
$ minovative-mind-cli chat
|
|
79
|
-
|
|
80
|
-
DESCRIPTION
|
|
81
|
-
Start an interactive AI coding agent session powered by Vertex AI.
|
|
82
|
-
|
|
83
|
-
EXAMPLES
|
|
84
|
-
$ minovative-mind-cli
|
|
85
|
-
|
|
86
|
-
$ minovative-mind-cli --help
|
|
87
|
-
```
|
|
88
69
|
|
|
89
70
|
## `minovative-mind-cli help [COMMAND]`
|
|
90
71
|
|
|
@@ -103,30 +84,6 @@ FLAGS
|
|
|
103
84
|
DESCRIPTION
|
|
104
85
|
Display help for minovative-mind-cli.
|
|
105
86
|
```
|
|
106
|
-
|
|
107
|
-
## `minovative-mind-cli login`
|
|
108
|
-
|
|
109
|
-
Sign in to your Minovative Mind account using GitHub
|
|
110
|
-
|
|
111
|
-
```
|
|
112
|
-
USAGE
|
|
113
|
-
$ minovative-mind-cli login
|
|
114
|
-
|
|
115
|
-
DESCRIPTION
|
|
116
|
-
Sign in to your Minovative Mind account using GitHub
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
## `minovative-mind-cli logout`
|
|
120
|
-
|
|
121
|
-
Sign out of your Minovative Mind account
|
|
122
|
-
|
|
123
|
-
```
|
|
124
|
-
USAGE
|
|
125
|
-
$ minovative-mind-cli logout
|
|
126
|
-
|
|
127
|
-
DESCRIPTION
|
|
128
|
-
Sign out of your Minovative Mind account
|
|
129
|
-
```
|
|
130
87
|
<!-- commandsstop -->
|
|
131
88
|
|
|
132
89
|
## Legal
|
package/dist/commands/chat.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import 'dotenv/config';
|
|
2
|
+
import fs from 'node:fs';
|
|
2
3
|
import { Command } from '@oclif/core';
|
|
4
|
+
import updateNotifier from 'update-notifier';
|
|
3
5
|
import * as p from '@clack/prompts';
|
|
4
6
|
import pc from 'picocolors';
|
|
5
7
|
import { startAgentLoop } from '../services/agent.js';
|
|
@@ -10,6 +12,9 @@ export default class DefaultCommand extends Command {
|
|
|
10
12
|
async run() {
|
|
11
13
|
const workspaceRoot = process.cwd();
|
|
12
14
|
console.clear();
|
|
15
|
+
// Setup update notifier
|
|
16
|
+
const pkg = JSON.parse(await fs.promises.readFile(new URL('../../package.json', import.meta.url), 'utf8'));
|
|
17
|
+
updateNotifier({ pkg }).notify();
|
|
13
18
|
p.intro(`${pc.bgCyan(pc.black(' Minovative Mind '))} ${pc.dim('v' + this.config.version)}`);
|
|
14
19
|
// Check authentication
|
|
15
20
|
let idToken = await getAuthorizedIdToken();
|
package/dist/services/agent.js
CHANGED
|
@@ -203,7 +203,7 @@ export class AsyncInputHandler {
|
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
import { consumeSkipOnce, executeTool, getApprovalMode, setApprovalMode } from './agent-tools.js';
|
|
206
|
-
import { createSharedChatSession, getGeneralChatConfig, getPlanExecutionConfig, ProxyChatSession, compressTextUsingFlashLite } from './ai.js';
|
|
206
|
+
import { createSharedChatSession, getGeneralChatConfig, getPlanExecutionConfig, ProxyChatSession, compressTextUsingFlashLite, } from './ai.js';
|
|
207
207
|
import { changeLogger } from './changeLogger.js';
|
|
208
208
|
import { gatherContext, routeIntent } from './contextAgent.js';
|
|
209
209
|
import { verifyChangedFiles } from './verificationService.js';
|
|
@@ -382,7 +382,7 @@ async function processResponse(chat, result, workspaceRoot, inputHandler, agentS
|
|
|
382
382
|
let response = result.response;
|
|
383
383
|
// Upper limit on autonomous sequential tool executions to prevent out-of-control loops
|
|
384
384
|
let turnCount = 0;
|
|
385
|
-
const MAX_TURNS =
|
|
385
|
+
const MAX_TURNS = 50;
|
|
386
386
|
// Recovery thresholds for handling unexpected empty API payloads
|
|
387
387
|
let emptyRetryCount = 0;
|
|
388
388
|
const MAX_EMPTY_RETRIES = 3;
|
|
@@ -391,7 +391,28 @@ async function processResponse(chat, result, workspaceRoot, inputHandler, agentS
|
|
|
391
391
|
turnCount++;
|
|
392
392
|
if (turnCount > MAX_TURNS) {
|
|
393
393
|
p.log.error(`${pc.red('System Error:')} Agent exceeded maximum autonomous turns (${MAX_TURNS}). Force stopping to prevent infinite loop.`);
|
|
394
|
-
|
|
394
|
+
try {
|
|
395
|
+
p.log.info(pc.cyan(`Requesting final summary from AI based on gathered information...`));
|
|
396
|
+
const originalTools = chat.tools || [];
|
|
397
|
+
const originalInstruction = chat.systemInstruction || '';
|
|
398
|
+
// Temporarily clear tools to force a pure text response
|
|
399
|
+
chat.setAgentConfig(originalInstruction, []);
|
|
400
|
+
const finalFollowUp = await chat.sendMessage(`[SYSTEM INTERRUPTION] You have exceeded the maximum number of allowed tool operations (${MAX_TURNS} turns). You must now provide a final answer to the user based ONLY on the information you have gathered so far. Do NOT attempt to call any more tools, just answer the user directly.`, undefined, abortSignal);
|
|
401
|
+
// Restore tools
|
|
402
|
+
chat.setAgentConfig(originalInstruction, originalTools);
|
|
403
|
+
const finalOutput = finalFollowUp.response.text();
|
|
404
|
+
if (finalOutput && finalOutput.trim()) {
|
|
405
|
+
return finalOutput;
|
|
406
|
+
}
|
|
407
|
+
return '';
|
|
408
|
+
}
|
|
409
|
+
catch (e) {
|
|
410
|
+
if (e.name === 'AbortError' || e.message?.includes('abort')) {
|
|
411
|
+
p.log.warn(pc.yellow('Generation stopped by user.'));
|
|
412
|
+
return '[Generation stopped by user]';
|
|
413
|
+
}
|
|
414
|
+
return '';
|
|
415
|
+
}
|
|
395
416
|
}
|
|
396
417
|
const functionCalls = response.functionCalls();
|
|
397
418
|
if (!functionCalls || functionCalls.length === 0) {
|
|
@@ -691,9 +712,9 @@ export async function startAgentLoop(workspaceRoot, version) {
|
|
|
691
712
|
message: 'Select AI Model',
|
|
692
713
|
options: [
|
|
693
714
|
{ value: 'gemini-3.1-pro', label: 'Gemini 3.1 Pro', hint: 'The newest Pro model for complex logic' },
|
|
694
|
-
{ value: 'gemini-3.5-flash', label: 'Gemini 3.5 Flash', hint: '
|
|
715
|
+
{ value: 'gemini-3.5-flash', label: 'Gemini 3.5 Flash', hint: 'Balanced performance' },
|
|
695
716
|
{ value: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro', hint: 'Best for complex coding & large context' },
|
|
696
|
-
{
|
|
717
|
+
// {value: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash', hint: 'Balanced performance'},
|
|
697
718
|
// {value: 'claude-opus-4-6', label: 'Claude Opus 4.6', hint: 'Anthropic: Highly capable, complex reasoning'},
|
|
698
719
|
// {value: 'claude-sonnet-4-6', label: 'Claude Sonnet 4.6', hint: 'Anthropic: Fast and highly intelligent'},
|
|
699
720
|
],
|
package/oclif.manifest.json
CHANGED
|
@@ -1,69 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"commands": {
|
|
3
|
-
|
|
4
|
-
"aliases": [],
|
|
5
|
-
"args": {},
|
|
6
|
-
"description": "Start an interactive AI coding agent session powered by Vertex AI.",
|
|
7
|
-
"examples": [
|
|
8
|
-
"<%= config.bin %>",
|
|
9
|
-
"<%= config.bin %> --help"
|
|
10
|
-
],
|
|
11
|
-
"flags": {},
|
|
12
|
-
"hasDynamicHelp": false,
|
|
13
|
-
"hiddenAliases": [],
|
|
14
|
-
"id": "chat",
|
|
15
|
-
"pluginAlias": "minovative-mind-cli",
|
|
16
|
-
"pluginName": "minovative-mind-cli",
|
|
17
|
-
"pluginType": "core",
|
|
18
|
-
"strict": true,
|
|
19
|
-
"enableJsonFlag": false,
|
|
20
|
-
"isESM": true,
|
|
21
|
-
"relativePath": [
|
|
22
|
-
"dist",
|
|
23
|
-
"commands",
|
|
24
|
-
"chat.js"
|
|
25
|
-
]
|
|
26
|
-
},
|
|
27
|
-
"login": {
|
|
28
|
-
"aliases": [],
|
|
29
|
-
"args": {},
|
|
30
|
-
"description": "Sign in to your Minovative Mind account using GitHub",
|
|
31
|
-
"flags": {},
|
|
32
|
-
"hasDynamicHelp": false,
|
|
33
|
-
"hiddenAliases": [],
|
|
34
|
-
"id": "login",
|
|
35
|
-
"pluginAlias": "minovative-mind-cli",
|
|
36
|
-
"pluginName": "minovative-mind-cli",
|
|
37
|
-
"pluginType": "core",
|
|
38
|
-
"strict": true,
|
|
39
|
-
"enableJsonFlag": false,
|
|
40
|
-
"isESM": true,
|
|
41
|
-
"relativePath": [
|
|
42
|
-
"dist",
|
|
43
|
-
"commands",
|
|
44
|
-
"login.js"
|
|
45
|
-
]
|
|
46
|
-
},
|
|
47
|
-
"logout": {
|
|
48
|
-
"aliases": [],
|
|
49
|
-
"args": {},
|
|
50
|
-
"description": "Sign out of your Minovative Mind account",
|
|
51
|
-
"flags": {},
|
|
52
|
-
"hasDynamicHelp": false,
|
|
53
|
-
"hiddenAliases": [],
|
|
54
|
-
"id": "logout",
|
|
55
|
-
"pluginAlias": "minovative-mind-cli",
|
|
56
|
-
"pluginName": "minovative-mind-cli",
|
|
57
|
-
"pluginType": "core",
|
|
58
|
-
"strict": true,
|
|
59
|
-
"enableJsonFlag": false,
|
|
60
|
-
"isESM": true,
|
|
61
|
-
"relativePath": [
|
|
62
|
-
"dist",
|
|
63
|
-
"commands",
|
|
64
|
-
"logout.js"
|
|
65
|
-
]
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
"version": "1.1.0"
|
|
2
|
+
"commands": {},
|
|
3
|
+
"version": "1.1.2"
|
|
69
4
|
}
|
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.1.
|
|
4
|
+
"version": "1.1.2",
|
|
5
5
|
"author": "Daniel Ward",
|
|
6
6
|
"bin": "./bin/run.js",
|
|
7
7
|
"bugs": "https://github.com/quarantiine/minovative-mind-cli/issues",
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"fastest-levenshtein": "^1.0.16",
|
|
15
15
|
"marked": "^12.0.2",
|
|
16
16
|
"marked-terminal": "^7.0.0",
|
|
17
|
-
"picocolors": "^1"
|
|
17
|
+
"picocolors": "^1",
|
|
18
|
+
"update-notifier": "^7.3.1"
|
|
18
19
|
},
|
|
19
20
|
"devDependencies": {
|
|
20
21
|
"@eslint/compat": "^1",
|
|
@@ -24,6 +25,7 @@
|
|
|
24
25
|
"@types/marked-terminal": "^6.1.1",
|
|
25
26
|
"@types/mocha": "^10",
|
|
26
27
|
"@types/node": "^18",
|
|
28
|
+
"@types/update-notifier": "^6.0.8",
|
|
27
29
|
"chai": "^4",
|
|
28
30
|
"eslint": "^9",
|
|
29
31
|
"eslint-config-oclif": "^6",
|