@codemieai/code 0.0.1 → 0.0.3
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/.codemie/guides/git-workflow.md +493 -0
- package/CLAUDE.md +130 -761
- package/README.md +283 -695
- package/bin/codemie-claude.js +122 -0
- package/bin/codemie-code.js +90 -15
- package/bin/codemie-codex.js +138 -0
- package/bin/codemie.js +1 -1
- package/config.example.json +10 -0
- package/dist/agents/adapters/claude-code.d.ts +2 -2
- package/dist/agents/adapters/claude-code.d.ts.map +1 -1
- package/dist/agents/adapters/claude-code.js +20 -42
- package/dist/agents/adapters/claude-code.js.map +1 -1
- package/dist/agents/adapters/codemie-code.d.ts +11 -2
- package/dist/agents/adapters/codemie-code.d.ts.map +1 -1
- package/dist/agents/adapters/codemie-code.js +93 -25
- package/dist/agents/adapters/codemie-code.js.map +1 -1
- package/dist/agents/adapters/codex.d.ts +2 -2
- package/dist/agents/adapters/codex.d.ts.map +1 -1
- package/dist/agents/adapters/codex.js +31 -24
- package/dist/agents/adapters/codex.js.map +1 -1
- package/dist/agents/codemie-code/agent.d.ts +89 -0
- package/dist/agents/codemie-code/agent.d.ts.map +1 -0
- package/dist/agents/codemie-code/agent.js +523 -0
- package/dist/agents/codemie-code/agent.js.map +1 -0
- package/dist/agents/codemie-code/config.d.ts +40 -0
- package/dist/agents/codemie-code/config.d.ts.map +1 -0
- package/dist/agents/codemie-code/config.js +276 -0
- package/dist/agents/codemie-code/config.js.map +1 -0
- package/dist/agents/codemie-code/filters.d.ts +91 -0
- package/dist/agents/codemie-code/filters.d.ts.map +1 -0
- package/dist/agents/codemie-code/filters.js +328 -0
- package/dist/agents/codemie-code/filters.js.map +1 -0
- package/dist/agents/codemie-code/index.d.ts +78 -0
- package/dist/agents/codemie-code/index.d.ts.map +1 -0
- package/dist/agents/codemie-code/index.js +259 -0
- package/dist/agents/codemie-code/index.js.map +1 -0
- package/dist/agents/codemie-code/prompts.d.ts +11 -0
- package/dist/agents/codemie-code/prompts.d.ts.map +1 -0
- package/dist/agents/codemie-code/prompts.js +31 -0
- package/dist/agents/codemie-code/prompts.js.map +1 -0
- package/dist/agents/codemie-code/streaming/events.d.ts +7 -0
- package/dist/agents/codemie-code/streaming/events.d.ts.map +1 -0
- package/dist/agents/codemie-code/streaming/events.js +7 -0
- package/dist/agents/codemie-code/streaming/events.js.map +1 -0
- package/dist/agents/codemie-code/streaming/formatter.d.ts +2 -0
- package/dist/agents/codemie-code/streaming/formatter.d.ts.map +1 -0
- package/dist/agents/codemie-code/streaming/formatter.js +2 -0
- package/dist/agents/codemie-code/streaming/formatter.js.map +1 -0
- package/dist/agents/codemie-code/streaming/ui.d.ts +2 -0
- package/dist/agents/codemie-code/streaming/ui.d.ts.map +1 -0
- package/dist/agents/codemie-code/streaming/ui.js +2 -0
- package/dist/agents/codemie-code/streaming/ui.js.map +1 -0
- package/dist/agents/codemie-code/tokenUtils.d.ts +108 -0
- package/dist/agents/codemie-code/tokenUtils.d.ts.map +1 -0
- package/dist/agents/codemie-code/tokenUtils.js +220 -0
- package/dist/agents/codemie-code/tokenUtils.js.map +1 -0
- package/dist/agents/codemie-code/toolMetadata.d.ts +15 -0
- package/dist/agents/codemie-code/toolMetadata.d.ts.map +1 -0
- package/dist/agents/codemie-code/toolMetadata.js +315 -0
- package/dist/agents/codemie-code/toolMetadata.js.map +1 -0
- package/dist/agents/codemie-code/tools/command.d.ts +2 -0
- package/dist/agents/codemie-code/tools/command.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/command.js +2 -0
- package/dist/agents/codemie-code/tools/command.js.map +1 -0
- package/dist/agents/codemie-code/tools/filesystem.d.ts +2 -0
- package/dist/agents/codemie-code/tools/filesystem.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/filesystem.js +2 -0
- package/dist/agents/codemie-code/tools/filesystem.js.map +1 -0
- package/dist/agents/codemie-code/tools/git.d.ts +2 -0
- package/dist/agents/codemie-code/tools/git.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/git.js +2 -0
- package/dist/agents/codemie-code/tools/git.js.map +1 -0
- package/dist/agents/codemie-code/tools/index.d.ts +19 -0
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/index.js +239 -0
- package/dist/agents/codemie-code/tools/index.js.map +1 -0
- package/dist/agents/codemie-code/tools/security.d.ts +2 -0
- package/dist/agents/codemie-code/tools/security.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/security.js +2 -0
- package/dist/agents/codemie-code/tools/security.js.map +1 -0
- package/dist/agents/codemie-code/types.d.ts +254 -0
- package/dist/agents/codemie-code/types.d.ts.map +1 -0
- package/dist/agents/codemie-code/types.js +35 -0
- package/dist/agents/codemie-code/types.js.map +1 -0
- package/dist/agents/codemie-code/ui.d.ts +83 -0
- package/dist/agents/codemie-code/ui.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui.js +624 -0
- package/dist/agents/codemie-code/ui.js.map +1 -0
- package/dist/agents/registry.d.ts +1 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +7 -13
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +323 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +113 -69
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/env.d.ts +3 -0
- package/dist/cli/commands/env.d.ts.map +1 -0
- package/dist/cli/commands/env.js +19 -0
- package/dist/cli/commands/env.js.map +1 -0
- package/dist/cli/commands/install.js +27 -33
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/list.js +18 -24
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +307 -21
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +3 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +357 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/uninstall.js +24 -30
- package/dist/cli/commands/uninstall.js.map +1 -1
- package/dist/cli/commands/version.d.ts.map +1 -1
- package/dist/cli/commands/version.js +11 -16
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/index.js +47 -31
- package/dist/cli/index.js.map +1 -1
- package/dist/env/manager.js +9 -46
- package/dist/env/manager.js.map +1 -1
- package/dist/index.d.ts +6 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -43
- package/dist/index.js.map +1 -1
- package/dist/utils/async-tips.d.ts.map +1 -1
- package/dist/utils/async-tips.js +16 -55
- package/dist/utils/async-tips.js.map +1 -1
- package/dist/utils/clipboard.d.ts +16 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +179 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/config-loader.d.ts +96 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +351 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/dirname.d.ts +7 -0
- package/dist/utils/dirname.d.ts.map +1 -0
- package/dist/utils/dirname.js +11 -0
- package/dist/utils/dirname.js.map +1 -0
- package/dist/utils/errors.js +7 -17
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/exec.js +3 -6
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/first-time.d.ts +34 -0
- package/dist/utils/first-time.d.ts.map +1 -0
- package/dist/utils/first-time.js +245 -0
- package/dist/utils/first-time.js.map +1 -0
- package/dist/utils/health-checker.d.ts +20 -0
- package/dist/utils/health-checker.d.ts.map +1 -0
- package/dist/utils/health-checker.js +168 -0
- package/dist/utils/health-checker.js.map +1 -0
- package/dist/utils/logger.js +12 -18
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/model-fetcher.d.ts +21 -0
- package/dist/utils/model-fetcher.d.ts.map +1 -0
- package/dist/utils/model-fetcher.js +137 -0
- package/dist/utils/model-fetcher.js.map +1 -0
- package/dist/utils/tips.d.ts.map +1 -1
- package/dist/utils/tips.js +13 -52
- package/dist/utils/tips.js.map +1 -1
- package/package.json +17 -23
- package/scripts/README.md +80 -0
- package/scripts/release.sh +156 -0
- package/dist/agents/adapters/aider.d.ts +0 -12
- package/dist/agents/adapters/aider.d.ts.map +0 -1
- package/dist/agents/adapters/aider.js +0 -80
- package/dist/agents/adapters/aider.js.map +0 -1
- package/dist/cli/cli.d.ts +0 -4
- package/dist/cli/cli.d.ts.map +0 -1
- package/dist/cli/cli.js +0 -107
- package/dist/cli/cli.js.map +0 -1
- package/dist/cli/commands/mcp.d.ts +0 -3
- package/dist/cli/commands/mcp.d.ts.map +0 -1
- package/dist/cli/commands/mcp.js +0 -459
- package/dist/cli/commands/mcp.js.map +0 -1
- package/dist/code/agent-events.d.ts +0 -39
- package/dist/code/agent-events.d.ts.map +0 -1
- package/dist/code/agent-events.js +0 -4
- package/dist/code/agent-events.js.map +0 -1
- package/dist/code/agent.d.ts +0 -19
- package/dist/code/agent.d.ts.map +0 -1
- package/dist/code/agent.js +0 -144
- package/dist/code/agent.js.map +0 -1
- package/dist/code/config.d.ts +0 -13
- package/dist/code/config.d.ts.map +0 -1
- package/dist/code/config.js +0 -41
- package/dist/code/config.js.map +0 -1
- package/dist/code/index.d.ts +0 -19
- package/dist/code/index.d.ts.map +0 -1
- package/dist/code/index.js +0 -400
- package/dist/code/index.js.map +0 -1
- package/dist/code/prompts.d.ts +0 -2
- package/dist/code/prompts.d.ts.map +0 -1
- package/dist/code/prompts.js +0 -45
- package/dist/code/prompts.js.map +0 -1
- package/dist/code/tools/command.d.ts +0 -8
- package/dist/code/tools/command.d.ts.map +0 -1
- package/dist/code/tools/command.js +0 -83
- package/dist/code/tools/command.js.map +0 -1
- package/dist/code/tools/diff-utils.d.ts +0 -2
- package/dist/code/tools/diff-utils.d.ts.map +0 -1
- package/dist/code/tools/diff-utils.js +0 -45
- package/dist/code/tools/diff-utils.js.map +0 -1
- package/dist/code/tools/filesystem.d.ts +0 -11
- package/dist/code/tools/filesystem.d.ts.map +0 -1
- package/dist/code/tools/filesystem.js +0 -442
- package/dist/code/tools/filesystem.js.map +0 -1
- package/dist/code/tools/git.d.ts +0 -7
- package/dist/code/tools/git.d.ts.map +0 -1
- package/dist/code/tools/git.js +0 -111
- package/dist/code/tools/git.js.map +0 -1
- package/dist/code/tools/mcp.d.ts +0 -13
- package/dist/code/tools/mcp.d.ts.map +0 -1
- package/dist/code/tools/mcp.js +0 -230
- package/dist/code/tools/mcp.js.map +0 -1
- package/dist/data/tips.json +0 -118
- package/dist/ui/terminal-ui.d.ts +0 -73
- package/dist/ui/terminal-ui.d.ts.map +0 -1
- package/dist/ui/terminal-ui.js +0 -900
- package/dist/ui/terminal-ui.js.map +0 -1
- package/dist/utils/env-mapper.d.ts +0 -40
- package/dist/utils/env-mapper.d.ts.map +0 -1
- package/dist/utils/env-mapper.js +0 -122
- package/dist/utils/env-mapper.js.map +0 -1
- package/docs/USER_GUIDE.md +0 -573
- package/tests/agent-direct.test.mjs +0 -45
- package/tests/agent-output.test.mjs +0 -64
- package/tests/codemie-code.test.mjs +0 -42
- package/tests/context7-only.test.mjs +0 -42
- package/tests/conversation-flow.test.mjs +0 -63
- package/tests/interactive-simulation.test.mjs +0 -60
- package/tests/live-output.test.mjs +0 -53
- package/tests/mcp-context7.test.mjs +0 -105
- package/tests/mcp-e2e.test.mjs +0 -109
- package/tests/mcp-time-server.test.mjs +0 -58
- package/tests/streaming.test.mjs +0 -57
- package/tests/test-helpers.mjs +0 -94
- package/tests/text-wrapping.test.mjs +0 -33
- package/tests/tool-count.test.mjs +0 -81
- package/tests/ui-format.test.mjs +0 -39
- package/tests/ui-state.test.mjs +0 -72
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACtC;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAIpB;IAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIvD,MAAM,CAAC,YAAY,IAAI,YAAY,EAAE;IAIrC,MAAM,CAAC,aAAa,IAAI,MAAM,EAAE;WAInB,kBAAkB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;CAS3D"}
|
package/dist/agents/registry.js
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const claude_code_1 = require("./adapters/claude-code");
|
|
6
|
-
const codex_1 = require("./adapters/codex");
|
|
7
|
-
const aider_1 = require("./adapters/aider");
|
|
8
|
-
class AgentRegistry {
|
|
1
|
+
import { ClaudeCodeAdapter } from './adapters/claude-code.js';
|
|
2
|
+
import { CodexAdapter } from './adapters/codex.js';
|
|
3
|
+
import { CodeMieCodeAdapter } from './adapters/codemie-code.js';
|
|
4
|
+
export class AgentRegistry {
|
|
9
5
|
static adapters = new Map([
|
|
10
|
-
['
|
|
11
|
-
['
|
|
12
|
-
['
|
|
13
|
-
['aider', new aider_1.AiderAdapter()]
|
|
6
|
+
['claude', new ClaudeCodeAdapter()],
|
|
7
|
+
['codex', new CodexAdapter()],
|
|
8
|
+
['codemie-code', new CodeMieCodeAdapter()]
|
|
14
9
|
]);
|
|
15
10
|
static getAgent(name) {
|
|
16
11
|
return AgentRegistry.adapters.get(name);
|
|
@@ -31,5 +26,4 @@ class AgentRegistry {
|
|
|
31
26
|
return agents;
|
|
32
27
|
}
|
|
33
28
|
}
|
|
34
|
-
exports.AgentRegistry = AgentRegistry;
|
|
35
29
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAahE,MAAM,OAAO,aAAa;IAChB,MAAM,CAAC,QAAQ,GAA8B,IAAI,GAAG,CAAC;QAC3D,CAAC,QAAQ,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACnC,CAAC,OAAO,EAAE,IAAI,YAAY,EAAE,CAAC;QAC7B,CAAC,cAAc,EAAE,IAAI,kBAAkB,EAAE,CAAC;KAC3C,CAAC,CAAC;IAEH,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,OAAO,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,YAAY;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,kBAAkB;QAC7B,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACtD,IAAI,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,mBAAmB,IAAI,OAAO,CAkU7C"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { ConfigLoader } from '../../utils/config-loader.js';
|
|
6
|
+
import { logger } from '../../utils/logger.js';
|
|
7
|
+
import { checkProviderHealth } from '../../utils/health-checker.js';
|
|
8
|
+
export function createConfigCommand() {
|
|
9
|
+
const command = new Command('config');
|
|
10
|
+
command.description('Manage CodeMie Code configuration');
|
|
11
|
+
// config show - Display configuration with sources
|
|
12
|
+
command
|
|
13
|
+
.command('show')
|
|
14
|
+
.description('Show current configuration with sources')
|
|
15
|
+
.option('-d, --dir <path>', 'Working directory', process.cwd())
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
try {
|
|
18
|
+
await ConfigLoader.showWithSources(options.dir);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
logger.error('Failed to show configuration:', error);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
// config list - List all available parameters
|
|
26
|
+
command
|
|
27
|
+
.command('list')
|
|
28
|
+
.description('List all available configuration parameters')
|
|
29
|
+
.action(() => {
|
|
30
|
+
console.log(chalk.bold('\nAvailable Configuration Parameters:\n'));
|
|
31
|
+
const params = [
|
|
32
|
+
{ name: 'provider', desc: 'LLM provider (anthropic, openai, azure, litellm)' },
|
|
33
|
+
{ name: 'baseUrl', desc: 'API endpoint URL' },
|
|
34
|
+
{ name: 'apiKey', desc: 'Authentication API key' },
|
|
35
|
+
{ name: 'model', desc: 'Model identifier (e.g., claude-sonnet-4, gpt-4)' },
|
|
36
|
+
{ name: 'timeout', desc: 'Request timeout in seconds' },
|
|
37
|
+
{ name: 'debug', desc: 'Enable debug logging (true/false)' },
|
|
38
|
+
{ name: 'allowedDirs', desc: 'Allowed directories (comma-separated)' },
|
|
39
|
+
{ name: 'ignorePatterns', desc: 'Ignore patterns (comma-separated)' }
|
|
40
|
+
];
|
|
41
|
+
for (const param of params) {
|
|
42
|
+
console.log(` ${chalk.cyan(param.name.padEnd(20))} ${chalk.dim(param.desc)}`);
|
|
43
|
+
}
|
|
44
|
+
console.log(chalk.dim('\nSet via:'));
|
|
45
|
+
console.log(chalk.dim(' - Global config: ~/.codemie/config.json'));
|
|
46
|
+
console.log(chalk.dim(' - Project config: .codemie/config.json'));
|
|
47
|
+
console.log(chalk.dim(' - Environment: CODEMIE_<PARAM>'));
|
|
48
|
+
console.log(chalk.dim(' - CLI flags: --<param>\n'));
|
|
49
|
+
});
|
|
50
|
+
// config set - Set a configuration value
|
|
51
|
+
command
|
|
52
|
+
.command('set')
|
|
53
|
+
.description('Set a configuration value')
|
|
54
|
+
.argument('<key>', 'Configuration key')
|
|
55
|
+
.argument('<value>', 'Configuration value')
|
|
56
|
+
.option('-g, --global', 'Set in global config (default)', true)
|
|
57
|
+
.option('-p, --project', 'Set in project config')
|
|
58
|
+
.option('-d, --dir <path>', 'Working directory for project config', process.cwd())
|
|
59
|
+
.action(async (key, value, options) => {
|
|
60
|
+
try {
|
|
61
|
+
const isGlobal = !options.project;
|
|
62
|
+
// Parse value
|
|
63
|
+
const parsedValue = parseConfigValue(value);
|
|
64
|
+
// Load current config
|
|
65
|
+
const currentConfig = isGlobal
|
|
66
|
+
? await ConfigLoader['loadJsonConfig'](ConfigLoader['GLOBAL_CONFIG'])
|
|
67
|
+
: await ConfigLoader['loadJsonConfig'](`${options.dir}/.codemie/config.json`);
|
|
68
|
+
// Update config
|
|
69
|
+
const updatedConfig = { ...currentConfig, [key]: parsedValue };
|
|
70
|
+
// Save config
|
|
71
|
+
if (isGlobal) {
|
|
72
|
+
await ConfigLoader.saveGlobalConfig(updatedConfig);
|
|
73
|
+
logger.success(`Set ${key} in global config`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
await ConfigLoader.saveProjectConfig(options.dir, updatedConfig);
|
|
77
|
+
logger.success(`Set ${key} in project config`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
logger.error('Failed to set configuration:', error);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
// config get - Get a configuration value
|
|
86
|
+
command
|
|
87
|
+
.command('get')
|
|
88
|
+
.description('Get a configuration value')
|
|
89
|
+
.argument('<key>', 'Configuration key')
|
|
90
|
+
.option('-d, --dir <path>', 'Working directory', process.cwd())
|
|
91
|
+
.action(async (key, options) => {
|
|
92
|
+
try {
|
|
93
|
+
const config = await ConfigLoader.load(options.dir);
|
|
94
|
+
const value = config[key];
|
|
95
|
+
if (value === undefined) {
|
|
96
|
+
console.log(chalk.yellow(`Configuration key '${key}' not set`));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Check if sensitive
|
|
100
|
+
const keyLower = key.toLowerCase();
|
|
101
|
+
if (keyLower.includes('key') || keyLower.includes('token')) {
|
|
102
|
+
const masked = ConfigLoader['maskSensitive'](key, value);
|
|
103
|
+
console.log(masked);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
console.log(value);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
logger.error('Failed to get configuration:', error);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
// config edit - Edit configuration interactively
|
|
116
|
+
command
|
|
117
|
+
.command('edit')
|
|
118
|
+
.description('Edit a configuration value interactively')
|
|
119
|
+
.argument('<key>', 'Configuration key')
|
|
120
|
+
.option('-g, --global', 'Edit global config (default)', true)
|
|
121
|
+
.option('-p, --project', 'Edit project config')
|
|
122
|
+
.option('-d, --dir <path>', 'Working directory for project config', process.cwd())
|
|
123
|
+
.action(async (key, options) => {
|
|
124
|
+
try {
|
|
125
|
+
const isGlobal = !options.project;
|
|
126
|
+
// Load current value
|
|
127
|
+
const config = await ConfigLoader.load(options.dir);
|
|
128
|
+
const currentValue = config[key];
|
|
129
|
+
// Prompt for new value
|
|
130
|
+
const isSensitive = key.toLowerCase().includes('key') || key.toLowerCase().includes('token');
|
|
131
|
+
const { newValue } = await inquirer.prompt([
|
|
132
|
+
{
|
|
133
|
+
type: isSensitive ? 'password' : 'input',
|
|
134
|
+
name: 'newValue',
|
|
135
|
+
message: `Enter new value for ${key}:`,
|
|
136
|
+
default: isSensitive ? undefined : currentValue,
|
|
137
|
+
mask: isSensitive ? '*' : undefined
|
|
138
|
+
}
|
|
139
|
+
]);
|
|
140
|
+
// Parse value
|
|
141
|
+
const parsedValue = parseConfigValue(newValue);
|
|
142
|
+
// Load current config
|
|
143
|
+
const currentConfig = isGlobal
|
|
144
|
+
? await ConfigLoader['loadJsonConfig'](ConfigLoader['GLOBAL_CONFIG'])
|
|
145
|
+
: await ConfigLoader['loadJsonConfig'](`${options.dir}/.codemie/config.json`);
|
|
146
|
+
// Update config
|
|
147
|
+
const updatedConfig = { ...currentConfig, [key]: parsedValue };
|
|
148
|
+
// Save config
|
|
149
|
+
if (isGlobal) {
|
|
150
|
+
await ConfigLoader.saveGlobalConfig(updatedConfig);
|
|
151
|
+
logger.success(`Updated ${key} in global config`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
await ConfigLoader.saveProjectConfig(options.dir, updatedConfig);
|
|
155
|
+
logger.success(`Updated ${key} in project config`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
logger.error('Failed to edit configuration:', error);
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
// config reset - Reset configuration
|
|
164
|
+
command
|
|
165
|
+
.command('reset')
|
|
166
|
+
.description('Reset configuration (delete config file)')
|
|
167
|
+
.option('-g, --global', 'Reset global config', true)
|
|
168
|
+
.option('-p, --project', 'Reset project config')
|
|
169
|
+
.option('-d, --dir <path>', 'Working directory for project config', process.cwd())
|
|
170
|
+
.action(async (options) => {
|
|
171
|
+
try {
|
|
172
|
+
const isGlobal = !options.project;
|
|
173
|
+
const { confirm } = await inquirer.prompt([
|
|
174
|
+
{
|
|
175
|
+
type: 'confirm',
|
|
176
|
+
name: 'confirm',
|
|
177
|
+
message: `Are you sure you want to reset ${isGlobal ? 'global' : 'project'} configuration?`,
|
|
178
|
+
default: false
|
|
179
|
+
}
|
|
180
|
+
]);
|
|
181
|
+
if (!confirm) {
|
|
182
|
+
console.log(chalk.yellow('Reset cancelled.'));
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (isGlobal) {
|
|
186
|
+
await ConfigLoader.saveGlobalConfig({});
|
|
187
|
+
logger.success('Global configuration reset');
|
|
188
|
+
console.log(chalk.dim('\nRun: codemie setup'));
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
await ConfigLoader.saveProjectConfig(options.dir, {});
|
|
192
|
+
logger.success('Project configuration reset');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
logger.error('Failed to reset configuration:', error);
|
|
197
|
+
process.exit(1);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
// config test - Test configuration
|
|
201
|
+
command
|
|
202
|
+
.command('test')
|
|
203
|
+
.description('Test connection with current configuration')
|
|
204
|
+
.option('-d, --dir <path>', 'Working directory', process.cwd())
|
|
205
|
+
.action(async (options) => {
|
|
206
|
+
try {
|
|
207
|
+
const spinner = ora('Loading configuration...').start();
|
|
208
|
+
const config = await ConfigLoader.loadAndValidate(options.dir);
|
|
209
|
+
spinner.succeed('Configuration loaded');
|
|
210
|
+
spinner.start('Testing connection...');
|
|
211
|
+
const startTime = Date.now();
|
|
212
|
+
const result = await checkProviderHealth(config.baseUrl, config.apiKey);
|
|
213
|
+
const duration = Date.now() - startTime;
|
|
214
|
+
if (!result.success) {
|
|
215
|
+
throw new Error(result.message);
|
|
216
|
+
}
|
|
217
|
+
spinner.succeed(chalk.green(`Connection successful (${duration}ms)`));
|
|
218
|
+
console.log(chalk.dim(` Provider: ${config.provider}`));
|
|
219
|
+
console.log(chalk.dim(` Model: ${config.model}`));
|
|
220
|
+
console.log(chalk.dim(` Status: ${result.message}\n`));
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
224
|
+
logger.error('Connection test failed:', errorMessage);
|
|
225
|
+
process.exit(1);
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
// config init - Initialize project config
|
|
229
|
+
command
|
|
230
|
+
.command('init')
|
|
231
|
+
.description('Initialize project-specific configuration')
|
|
232
|
+
.option('-d, --dir <path>', 'Working directory', process.cwd())
|
|
233
|
+
.action(async (options) => {
|
|
234
|
+
try {
|
|
235
|
+
// Check if project config already exists
|
|
236
|
+
if (await ConfigLoader.hasProjectConfig(options.dir)) {
|
|
237
|
+
const { overwrite } = await inquirer.prompt([
|
|
238
|
+
{
|
|
239
|
+
type: 'confirm',
|
|
240
|
+
name: 'overwrite',
|
|
241
|
+
message: 'Project config already exists. Overwrite?',
|
|
242
|
+
default: false
|
|
243
|
+
}
|
|
244
|
+
]);
|
|
245
|
+
if (!overwrite) {
|
|
246
|
+
console.log(chalk.yellow('Init cancelled.'));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Load global config as template
|
|
251
|
+
const globalConfig = await ConfigLoader['loadJsonConfig'](ConfigLoader['GLOBAL_CONFIG']);
|
|
252
|
+
console.log(chalk.bold('\n📁 Initialize Project Configuration\n'));
|
|
253
|
+
console.log(chalk.dim('Override global settings for this project.\n'));
|
|
254
|
+
const { overrideModel, overrideTimeout } = await inquirer.prompt([
|
|
255
|
+
{
|
|
256
|
+
type: 'confirm',
|
|
257
|
+
name: 'overrideModel',
|
|
258
|
+
message: 'Override model for this project?',
|
|
259
|
+
default: false
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
type: 'confirm',
|
|
263
|
+
name: 'overrideTimeout',
|
|
264
|
+
message: 'Override timeout for this project?',
|
|
265
|
+
default: false
|
|
266
|
+
}
|
|
267
|
+
]);
|
|
268
|
+
const projectConfig = {};
|
|
269
|
+
if (overrideModel) {
|
|
270
|
+
const { model } = await inquirer.prompt([
|
|
271
|
+
{
|
|
272
|
+
type: 'input',
|
|
273
|
+
name: 'model',
|
|
274
|
+
message: 'Model:',
|
|
275
|
+
default: globalConfig.model
|
|
276
|
+
}
|
|
277
|
+
]);
|
|
278
|
+
projectConfig.model = model;
|
|
279
|
+
}
|
|
280
|
+
if (overrideTimeout) {
|
|
281
|
+
const { timeout } = await inquirer.prompt([
|
|
282
|
+
{
|
|
283
|
+
type: 'number',
|
|
284
|
+
name: 'timeout',
|
|
285
|
+
message: 'Timeout (seconds):',
|
|
286
|
+
default: globalConfig.timeout || 300
|
|
287
|
+
}
|
|
288
|
+
]);
|
|
289
|
+
projectConfig.timeout = timeout;
|
|
290
|
+
}
|
|
291
|
+
await ConfigLoader.saveProjectConfig(options.dir, projectConfig);
|
|
292
|
+
logger.success(`Created .codemie/config.json`);
|
|
293
|
+
console.log(chalk.dim('\nProject config created. Environment variables and CLI flags will still override these settings.'));
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
logger.error('Failed to initialize project config:', error);
|
|
297
|
+
process.exit(1);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
return command;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Parse configuration value from string
|
|
304
|
+
*/
|
|
305
|
+
function parseConfigValue(value) {
|
|
306
|
+
// Try to parse as JSON for complex types
|
|
307
|
+
if (value === 'true')
|
|
308
|
+
return true;
|
|
309
|
+
if (value === 'false')
|
|
310
|
+
return false;
|
|
311
|
+
if (value === 'null')
|
|
312
|
+
return null;
|
|
313
|
+
if (/^\d+$/.test(value))
|
|
314
|
+
return parseInt(value, 10);
|
|
315
|
+
if (/^\d+\.\d+$/.test(value))
|
|
316
|
+
return parseFloat(value);
|
|
317
|
+
// Check if it's a comma-separated list
|
|
318
|
+
if (value.includes(',')) {
|
|
319
|
+
return value.split(',').map(s => s.trim());
|
|
320
|
+
}
|
|
321
|
+
return value;
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,mBAAmB,IAAI,OAAO,CA+K7C"}
|
|
@@ -1,125 +1,169 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
function createDoctorCommand() {
|
|
13
|
-
const command = new commander_1.Command('doctor');
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { tipDisplay } from '../../utils/tips.js';
|
|
3
|
+
import { exec } from '../../utils/exec.js';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { AgentRegistry } from '../../agents/registry.js';
|
|
7
|
+
import { ConfigLoader } from '../../utils/config-loader.js';
|
|
8
|
+
import { checkProviderHealth } from '../../utils/health-checker.js';
|
|
9
|
+
import { fetchAvailableModels } from '../../utils/model-fetcher.js';
|
|
10
|
+
export function createDoctorCommand() {
|
|
11
|
+
const command = new Command('doctor');
|
|
14
12
|
command
|
|
15
13
|
.description('Check system health and configuration')
|
|
16
14
|
.action(async () => {
|
|
17
|
-
console.log(
|
|
15
|
+
console.log(chalk.bold('\n🔍 CodeMie Code Health Check\n'));
|
|
18
16
|
let hasIssues = false;
|
|
19
17
|
// Check Node.js version
|
|
20
|
-
console.log(
|
|
18
|
+
console.log(chalk.bold('Node.js:'));
|
|
21
19
|
try {
|
|
22
20
|
const nodeVersion = process.version;
|
|
23
21
|
const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
|
|
24
22
|
if (majorVersion >= 18) {
|
|
25
|
-
console.log(` ${
|
|
23
|
+
console.log(` ${chalk.green('✓')} Version ${nodeVersion}`);
|
|
26
24
|
}
|
|
27
25
|
else {
|
|
28
|
-
console.log(` ${
|
|
26
|
+
console.log(` ${chalk.yellow('⚠')} Version ${nodeVersion} (recommended: >= 18.0.0)`);
|
|
29
27
|
hasIssues = true;
|
|
30
28
|
}
|
|
31
29
|
}
|
|
32
30
|
catch {
|
|
33
|
-
console.log(` ${
|
|
31
|
+
console.log(` ${chalk.red('✗')} Failed to check version`);
|
|
34
32
|
hasIssues = true;
|
|
35
33
|
}
|
|
36
34
|
console.log();
|
|
37
35
|
// Check npm
|
|
38
|
-
console.log(
|
|
36
|
+
console.log(chalk.bold('npm:'));
|
|
39
37
|
try {
|
|
40
|
-
const result = await
|
|
41
|
-
console.log(` ${
|
|
38
|
+
const result = await exec('npm', ['--version']);
|
|
39
|
+
console.log(` ${chalk.green('✓')} Version ${result.stdout}`);
|
|
42
40
|
}
|
|
43
41
|
catch {
|
|
44
|
-
console.log(` ${
|
|
42
|
+
console.log(` ${chalk.red('✗')} npm not found`);
|
|
45
43
|
hasIssues = true;
|
|
46
44
|
}
|
|
47
45
|
console.log();
|
|
48
46
|
// Check git
|
|
49
|
-
console.log(
|
|
47
|
+
console.log(chalk.bold('git:'));
|
|
50
48
|
try {
|
|
51
|
-
const result = await
|
|
52
|
-
console.log(` ${
|
|
49
|
+
const result = await exec('git', ['--version']);
|
|
50
|
+
console.log(` ${chalk.green('✓')} ${result.stdout}`);
|
|
53
51
|
}
|
|
54
52
|
catch {
|
|
55
|
-
console.log(` ${
|
|
53
|
+
console.log(` ${chalk.yellow('⚠')} git not found (optional)`);
|
|
56
54
|
}
|
|
57
55
|
console.log();
|
|
58
56
|
// Check AI Configuration
|
|
59
|
-
console.log(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
console.log(` Set: CODEMIE_BASE_URL (or provider-specific: ANTHROPIC_BASE_URL, OPENAI_BASE_URL)`);
|
|
77
|
-
hasIssues = true;
|
|
78
|
-
}
|
|
79
|
-
if (authToken) {
|
|
80
|
-
const masked = authToken.substring(0, 4) + '***';
|
|
81
|
-
console.log(` ${chalk_1.default.green('✓')} Auth Token: ${masked}`);
|
|
57
|
+
console.log(chalk.bold('AI Configuration:'));
|
|
58
|
+
let config;
|
|
59
|
+
try {
|
|
60
|
+
config = await ConfigLoader.load();
|
|
61
|
+
if (config.provider) {
|
|
62
|
+
console.log(` ${chalk.green('✓')} Provider: ${config.provider}`);
|
|
63
|
+
}
|
|
64
|
+
if (config.baseUrl) {
|
|
65
|
+
console.log(` ${chalk.green('✓')} Base URL: ${config.baseUrl}`);
|
|
66
|
+
}
|
|
67
|
+
if (config.apiKey) {
|
|
68
|
+
const masked = config.apiKey.substring(0, 8) + '***' + config.apiKey.substring(config.apiKey.length - 4);
|
|
69
|
+
console.log(` ${chalk.green('✓')} API Key: ${masked}`);
|
|
70
|
+
}
|
|
71
|
+
if (config.model) {
|
|
72
|
+
console.log(` ${chalk.green('✓')} Model: ${config.model}`);
|
|
73
|
+
}
|
|
82
74
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
console.log(`
|
|
75
|
+
catch (error) {
|
|
76
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
77
|
+
console.log(` ${chalk.red('✗')} Configuration error: ${errorMessage}`);
|
|
78
|
+
console.log(` ${chalk.dim('Run: codemie setup')}`);
|
|
86
79
|
hasIssues = true;
|
|
87
80
|
}
|
|
88
|
-
// Check model configuration
|
|
89
|
-
const model = process.env.CODEMIE_MODEL ||
|
|
90
|
-
process.env.ANTHROPIC_MODEL ||
|
|
91
|
-
process.env.OPENAI_MODEL;
|
|
92
|
-
if (model) {
|
|
93
|
-
console.log(` ${chalk_1.default.green('✓')} Model: ${model}`);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
console.log(` ${chalk_1.default.yellow('⚠')} Model not set (will use default: claude-4-5-sonnet)`);
|
|
97
|
-
}
|
|
98
81
|
console.log();
|
|
82
|
+
// Test connectivity if config is valid
|
|
83
|
+
if (config && config.baseUrl && config.apiKey && config.model) {
|
|
84
|
+
console.log(chalk.bold('Connectivity Test:'));
|
|
85
|
+
const healthSpinner = ora('Validating credentials and endpoint...').start();
|
|
86
|
+
try {
|
|
87
|
+
const startTime = Date.now();
|
|
88
|
+
const result = await checkProviderHealth(config.baseUrl, config.apiKey);
|
|
89
|
+
const duration = Date.now() - startTime;
|
|
90
|
+
if (!result.success) {
|
|
91
|
+
throw new Error(result.message);
|
|
92
|
+
}
|
|
93
|
+
healthSpinner.succeed(chalk.green(`Credentials validated`));
|
|
94
|
+
console.log(` ${chalk.dim('Response time:')} ${duration}ms`);
|
|
95
|
+
console.log(` ${chalk.dim('Status:')} ${result.message}`);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
99
|
+
healthSpinner.fail(chalk.red('Connection test failed'));
|
|
100
|
+
console.log(` ${chalk.dim('Error:')} ${errorMessage}`);
|
|
101
|
+
hasIssues = true;
|
|
102
|
+
}
|
|
103
|
+
console.log();
|
|
104
|
+
// Fetch and verify models
|
|
105
|
+
if (config.provider !== 'bedrock') {
|
|
106
|
+
console.log(chalk.bold('Model Verification:'));
|
|
107
|
+
const modelsSpinner = ora('Fetching available models...').start();
|
|
108
|
+
try {
|
|
109
|
+
const availableModels = await fetchAvailableModels({
|
|
110
|
+
provider: config.provider,
|
|
111
|
+
baseUrl: config.baseUrl,
|
|
112
|
+
apiKey: config.apiKey,
|
|
113
|
+
model: config.model,
|
|
114
|
+
timeout: config.timeout || 300
|
|
115
|
+
});
|
|
116
|
+
if (availableModels.length > 0) {
|
|
117
|
+
modelsSpinner.succeed(chalk.green(`Found ${availableModels.length} available models`));
|
|
118
|
+
// Check if configured model exists
|
|
119
|
+
const configuredModel = config.model;
|
|
120
|
+
const modelExists = availableModels.includes(configuredModel);
|
|
121
|
+
if (modelExists) {
|
|
122
|
+
console.log(` ${chalk.green('✓')} Configured model '${configuredModel}' is available`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
console.log(` ${chalk.yellow('⚠')} Configured model '${configuredModel}' not found in available models`);
|
|
126
|
+
console.log(` ${chalk.dim('Available models:')} ${availableModels.slice(0, 5).join(', ')}${availableModels.length > 5 ? '...' : ''}`);
|
|
127
|
+
hasIssues = true;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
modelsSpinner.warn(chalk.yellow('Could not fetch models from provider'));
|
|
132
|
+
console.log(` ${chalk.dim('Using configured model:')} ${config.model}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
137
|
+
modelsSpinner.warn(chalk.yellow('Model verification skipped'));
|
|
138
|
+
console.log(` ${chalk.dim('Error:')} ${errorMessage}`);
|
|
139
|
+
}
|
|
140
|
+
console.log();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
99
143
|
// Check installed agents
|
|
100
|
-
console.log(
|
|
101
|
-
const installedAgents = await
|
|
144
|
+
console.log(chalk.bold('Installed Agents:'));
|
|
145
|
+
const installedAgents = await AgentRegistry.getInstalledAgents();
|
|
102
146
|
if (installedAgents.length > 0) {
|
|
103
147
|
for (const agent of installedAgents) {
|
|
104
148
|
const version = await agent.getVersion();
|
|
105
149
|
const versionStr = version ? ` (${version})` : '';
|
|
106
|
-
console.log(` ${
|
|
150
|
+
console.log(` ${chalk.green('✓')} ${agent.displayName}${versionStr}`);
|
|
107
151
|
}
|
|
108
152
|
}
|
|
109
153
|
else {
|
|
110
|
-
console.log(` ${
|
|
154
|
+
console.log(` ${chalk.yellow('⚠')} No agents installed (CodeMie Code is built-in)`);
|
|
111
155
|
}
|
|
112
156
|
console.log();
|
|
113
157
|
// Summary
|
|
114
158
|
if (hasIssues) {
|
|
115
|
-
console.log(
|
|
159
|
+
console.log(chalk.yellow('⚠ Some issues detected. Please resolve them for optimal performance.\n'));
|
|
116
160
|
process.exit(1);
|
|
117
161
|
}
|
|
118
162
|
else {
|
|
119
|
-
console.log(
|
|
163
|
+
console.log(chalk.green('✓ All checks passed!\n'));
|
|
120
164
|
// Show a helpful tip after successful health check (unless in assistant context)
|
|
121
165
|
if (!process.env.CODEMIE_IN_ASSISTANT) {
|
|
122
|
-
|
|
166
|
+
tipDisplay.showRandomTip();
|
|
123
167
|
}
|
|
124
168
|
}
|
|
125
169
|
});
|