@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.
Files changed (244) hide show
  1. package/.codemie/guides/git-workflow.md +493 -0
  2. package/CLAUDE.md +130 -761
  3. package/README.md +283 -695
  4. package/bin/codemie-claude.js +122 -0
  5. package/bin/codemie-code.js +90 -15
  6. package/bin/codemie-codex.js +138 -0
  7. package/bin/codemie.js +1 -1
  8. package/config.example.json +10 -0
  9. package/dist/agents/adapters/claude-code.d.ts +2 -2
  10. package/dist/agents/adapters/claude-code.d.ts.map +1 -1
  11. package/dist/agents/adapters/claude-code.js +20 -42
  12. package/dist/agents/adapters/claude-code.js.map +1 -1
  13. package/dist/agents/adapters/codemie-code.d.ts +11 -2
  14. package/dist/agents/adapters/codemie-code.d.ts.map +1 -1
  15. package/dist/agents/adapters/codemie-code.js +93 -25
  16. package/dist/agents/adapters/codemie-code.js.map +1 -1
  17. package/dist/agents/adapters/codex.d.ts +2 -2
  18. package/dist/agents/adapters/codex.d.ts.map +1 -1
  19. package/dist/agents/adapters/codex.js +31 -24
  20. package/dist/agents/adapters/codex.js.map +1 -1
  21. package/dist/agents/codemie-code/agent.d.ts +89 -0
  22. package/dist/agents/codemie-code/agent.d.ts.map +1 -0
  23. package/dist/agents/codemie-code/agent.js +523 -0
  24. package/dist/agents/codemie-code/agent.js.map +1 -0
  25. package/dist/agents/codemie-code/config.d.ts +40 -0
  26. package/dist/agents/codemie-code/config.d.ts.map +1 -0
  27. package/dist/agents/codemie-code/config.js +276 -0
  28. package/dist/agents/codemie-code/config.js.map +1 -0
  29. package/dist/agents/codemie-code/filters.d.ts +91 -0
  30. package/dist/agents/codemie-code/filters.d.ts.map +1 -0
  31. package/dist/agents/codemie-code/filters.js +328 -0
  32. package/dist/agents/codemie-code/filters.js.map +1 -0
  33. package/dist/agents/codemie-code/index.d.ts +78 -0
  34. package/dist/agents/codemie-code/index.d.ts.map +1 -0
  35. package/dist/agents/codemie-code/index.js +259 -0
  36. package/dist/agents/codemie-code/index.js.map +1 -0
  37. package/dist/agents/codemie-code/prompts.d.ts +11 -0
  38. package/dist/agents/codemie-code/prompts.d.ts.map +1 -0
  39. package/dist/agents/codemie-code/prompts.js +31 -0
  40. package/dist/agents/codemie-code/prompts.js.map +1 -0
  41. package/dist/agents/codemie-code/streaming/events.d.ts +7 -0
  42. package/dist/agents/codemie-code/streaming/events.d.ts.map +1 -0
  43. package/dist/agents/codemie-code/streaming/events.js +7 -0
  44. package/dist/agents/codemie-code/streaming/events.js.map +1 -0
  45. package/dist/agents/codemie-code/streaming/formatter.d.ts +2 -0
  46. package/dist/agents/codemie-code/streaming/formatter.d.ts.map +1 -0
  47. package/dist/agents/codemie-code/streaming/formatter.js +2 -0
  48. package/dist/agents/codemie-code/streaming/formatter.js.map +1 -0
  49. package/dist/agents/codemie-code/streaming/ui.d.ts +2 -0
  50. package/dist/agents/codemie-code/streaming/ui.d.ts.map +1 -0
  51. package/dist/agents/codemie-code/streaming/ui.js +2 -0
  52. package/dist/agents/codemie-code/streaming/ui.js.map +1 -0
  53. package/dist/agents/codemie-code/tokenUtils.d.ts +108 -0
  54. package/dist/agents/codemie-code/tokenUtils.d.ts.map +1 -0
  55. package/dist/agents/codemie-code/tokenUtils.js +220 -0
  56. package/dist/agents/codemie-code/tokenUtils.js.map +1 -0
  57. package/dist/agents/codemie-code/toolMetadata.d.ts +15 -0
  58. package/dist/agents/codemie-code/toolMetadata.d.ts.map +1 -0
  59. package/dist/agents/codemie-code/toolMetadata.js +315 -0
  60. package/dist/agents/codemie-code/toolMetadata.js.map +1 -0
  61. package/dist/agents/codemie-code/tools/command.d.ts +2 -0
  62. package/dist/agents/codemie-code/tools/command.d.ts.map +1 -0
  63. package/dist/agents/codemie-code/tools/command.js +2 -0
  64. package/dist/agents/codemie-code/tools/command.js.map +1 -0
  65. package/dist/agents/codemie-code/tools/filesystem.d.ts +2 -0
  66. package/dist/agents/codemie-code/tools/filesystem.d.ts.map +1 -0
  67. package/dist/agents/codemie-code/tools/filesystem.js +2 -0
  68. package/dist/agents/codemie-code/tools/filesystem.js.map +1 -0
  69. package/dist/agents/codemie-code/tools/git.d.ts +2 -0
  70. package/dist/agents/codemie-code/tools/git.d.ts.map +1 -0
  71. package/dist/agents/codemie-code/tools/git.js +2 -0
  72. package/dist/agents/codemie-code/tools/git.js.map +1 -0
  73. package/dist/agents/codemie-code/tools/index.d.ts +19 -0
  74. package/dist/agents/codemie-code/tools/index.d.ts.map +1 -0
  75. package/dist/agents/codemie-code/tools/index.js +239 -0
  76. package/dist/agents/codemie-code/tools/index.js.map +1 -0
  77. package/dist/agents/codemie-code/tools/security.d.ts +2 -0
  78. package/dist/agents/codemie-code/tools/security.d.ts.map +1 -0
  79. package/dist/agents/codemie-code/tools/security.js +2 -0
  80. package/dist/agents/codemie-code/tools/security.js.map +1 -0
  81. package/dist/agents/codemie-code/types.d.ts +254 -0
  82. package/dist/agents/codemie-code/types.d.ts.map +1 -0
  83. package/dist/agents/codemie-code/types.js +35 -0
  84. package/dist/agents/codemie-code/types.js.map +1 -0
  85. package/dist/agents/codemie-code/ui.d.ts +83 -0
  86. package/dist/agents/codemie-code/ui.d.ts.map +1 -0
  87. package/dist/agents/codemie-code/ui.js +624 -0
  88. package/dist/agents/codemie-code/ui.js.map +1 -0
  89. package/dist/agents/registry.d.ts +1 -1
  90. package/dist/agents/registry.d.ts.map +1 -1
  91. package/dist/agents/registry.js +7 -13
  92. package/dist/agents/registry.js.map +1 -1
  93. package/dist/cli/commands/config.d.ts +3 -0
  94. package/dist/cli/commands/config.d.ts.map +1 -0
  95. package/dist/cli/commands/config.js +323 -0
  96. package/dist/cli/commands/config.js.map +1 -0
  97. package/dist/cli/commands/doctor.d.ts.map +1 -1
  98. package/dist/cli/commands/doctor.js +113 -69
  99. package/dist/cli/commands/doctor.js.map +1 -1
  100. package/dist/cli/commands/env.d.ts +3 -0
  101. package/dist/cli/commands/env.d.ts.map +1 -0
  102. package/dist/cli/commands/env.js +19 -0
  103. package/dist/cli/commands/env.js.map +1 -0
  104. package/dist/cli/commands/install.js +27 -33
  105. package/dist/cli/commands/install.js.map +1 -1
  106. package/dist/cli/commands/list.js +18 -24
  107. package/dist/cli/commands/list.js.map +1 -1
  108. package/dist/cli/commands/run.d.ts.map +1 -1
  109. package/dist/cli/commands/run.js +307 -21
  110. package/dist/cli/commands/run.js.map +1 -1
  111. package/dist/cli/commands/setup.d.ts +3 -0
  112. package/dist/cli/commands/setup.d.ts.map +1 -0
  113. package/dist/cli/commands/setup.js +357 -0
  114. package/dist/cli/commands/setup.js.map +1 -0
  115. package/dist/cli/commands/uninstall.js +24 -30
  116. package/dist/cli/commands/uninstall.js.map +1 -1
  117. package/dist/cli/commands/version.d.ts.map +1 -1
  118. package/dist/cli/commands/version.js +11 -16
  119. package/dist/cli/commands/version.js.map +1 -1
  120. package/dist/cli/index.js +47 -31
  121. package/dist/cli/index.js.map +1 -1
  122. package/dist/env/manager.js +9 -46
  123. package/dist/env/manager.js.map +1 -1
  124. package/dist/index.d.ts +6 -13
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +6 -43
  127. package/dist/index.js.map +1 -1
  128. package/dist/utils/async-tips.d.ts.map +1 -1
  129. package/dist/utils/async-tips.js +16 -55
  130. package/dist/utils/async-tips.js.map +1 -1
  131. package/dist/utils/clipboard.d.ts +16 -0
  132. package/dist/utils/clipboard.d.ts.map +1 -0
  133. package/dist/utils/clipboard.js +179 -0
  134. package/dist/utils/clipboard.js.map +1 -0
  135. package/dist/utils/config-loader.d.ts +96 -0
  136. package/dist/utils/config-loader.d.ts.map +1 -0
  137. package/dist/utils/config-loader.js +351 -0
  138. package/dist/utils/config-loader.js.map +1 -0
  139. package/dist/utils/dirname.d.ts +7 -0
  140. package/dist/utils/dirname.d.ts.map +1 -0
  141. package/dist/utils/dirname.js +11 -0
  142. package/dist/utils/dirname.js.map +1 -0
  143. package/dist/utils/errors.js +7 -17
  144. package/dist/utils/errors.js.map +1 -1
  145. package/dist/utils/exec.js +3 -6
  146. package/dist/utils/exec.js.map +1 -1
  147. package/dist/utils/first-time.d.ts +34 -0
  148. package/dist/utils/first-time.d.ts.map +1 -0
  149. package/dist/utils/first-time.js +245 -0
  150. package/dist/utils/first-time.js.map +1 -0
  151. package/dist/utils/health-checker.d.ts +20 -0
  152. package/dist/utils/health-checker.d.ts.map +1 -0
  153. package/dist/utils/health-checker.js +168 -0
  154. package/dist/utils/health-checker.js.map +1 -0
  155. package/dist/utils/logger.js +12 -18
  156. package/dist/utils/logger.js.map +1 -1
  157. package/dist/utils/model-fetcher.d.ts +21 -0
  158. package/dist/utils/model-fetcher.d.ts.map +1 -0
  159. package/dist/utils/model-fetcher.js +137 -0
  160. package/dist/utils/model-fetcher.js.map +1 -0
  161. package/dist/utils/tips.d.ts.map +1 -1
  162. package/dist/utils/tips.js +13 -52
  163. package/dist/utils/tips.js.map +1 -1
  164. package/package.json +17 -23
  165. package/scripts/README.md +80 -0
  166. package/scripts/release.sh +156 -0
  167. package/dist/agents/adapters/aider.d.ts +0 -12
  168. package/dist/agents/adapters/aider.d.ts.map +0 -1
  169. package/dist/agents/adapters/aider.js +0 -80
  170. package/dist/agents/adapters/aider.js.map +0 -1
  171. package/dist/cli/cli.d.ts +0 -4
  172. package/dist/cli/cli.d.ts.map +0 -1
  173. package/dist/cli/cli.js +0 -107
  174. package/dist/cli/cli.js.map +0 -1
  175. package/dist/cli/commands/mcp.d.ts +0 -3
  176. package/dist/cli/commands/mcp.d.ts.map +0 -1
  177. package/dist/cli/commands/mcp.js +0 -459
  178. package/dist/cli/commands/mcp.js.map +0 -1
  179. package/dist/code/agent-events.d.ts +0 -39
  180. package/dist/code/agent-events.d.ts.map +0 -1
  181. package/dist/code/agent-events.js +0 -4
  182. package/dist/code/agent-events.js.map +0 -1
  183. package/dist/code/agent.d.ts +0 -19
  184. package/dist/code/agent.d.ts.map +0 -1
  185. package/dist/code/agent.js +0 -144
  186. package/dist/code/agent.js.map +0 -1
  187. package/dist/code/config.d.ts +0 -13
  188. package/dist/code/config.d.ts.map +0 -1
  189. package/dist/code/config.js +0 -41
  190. package/dist/code/config.js.map +0 -1
  191. package/dist/code/index.d.ts +0 -19
  192. package/dist/code/index.d.ts.map +0 -1
  193. package/dist/code/index.js +0 -400
  194. package/dist/code/index.js.map +0 -1
  195. package/dist/code/prompts.d.ts +0 -2
  196. package/dist/code/prompts.d.ts.map +0 -1
  197. package/dist/code/prompts.js +0 -45
  198. package/dist/code/prompts.js.map +0 -1
  199. package/dist/code/tools/command.d.ts +0 -8
  200. package/dist/code/tools/command.d.ts.map +0 -1
  201. package/dist/code/tools/command.js +0 -83
  202. package/dist/code/tools/command.js.map +0 -1
  203. package/dist/code/tools/diff-utils.d.ts +0 -2
  204. package/dist/code/tools/diff-utils.d.ts.map +0 -1
  205. package/dist/code/tools/diff-utils.js +0 -45
  206. package/dist/code/tools/diff-utils.js.map +0 -1
  207. package/dist/code/tools/filesystem.d.ts +0 -11
  208. package/dist/code/tools/filesystem.d.ts.map +0 -1
  209. package/dist/code/tools/filesystem.js +0 -442
  210. package/dist/code/tools/filesystem.js.map +0 -1
  211. package/dist/code/tools/git.d.ts +0 -7
  212. package/dist/code/tools/git.d.ts.map +0 -1
  213. package/dist/code/tools/git.js +0 -111
  214. package/dist/code/tools/git.js.map +0 -1
  215. package/dist/code/tools/mcp.d.ts +0 -13
  216. package/dist/code/tools/mcp.d.ts.map +0 -1
  217. package/dist/code/tools/mcp.js +0 -230
  218. package/dist/code/tools/mcp.js.map +0 -1
  219. package/dist/data/tips.json +0 -118
  220. package/dist/ui/terminal-ui.d.ts +0 -73
  221. package/dist/ui/terminal-ui.d.ts.map +0 -1
  222. package/dist/ui/terminal-ui.js +0 -900
  223. package/dist/ui/terminal-ui.js.map +0 -1
  224. package/dist/utils/env-mapper.d.ts +0 -40
  225. package/dist/utils/env-mapper.d.ts.map +0 -1
  226. package/dist/utils/env-mapper.js +0 -122
  227. package/dist/utils/env-mapper.js.map +0 -1
  228. package/docs/USER_GUIDE.md +0 -573
  229. package/tests/agent-direct.test.mjs +0 -45
  230. package/tests/agent-output.test.mjs +0 -64
  231. package/tests/codemie-code.test.mjs +0 -42
  232. package/tests/context7-only.test.mjs +0 -42
  233. package/tests/conversation-flow.test.mjs +0 -63
  234. package/tests/interactive-simulation.test.mjs +0 -60
  235. package/tests/live-output.test.mjs +0 -53
  236. package/tests/mcp-context7.test.mjs +0 -105
  237. package/tests/mcp-e2e.test.mjs +0 -109
  238. package/tests/mcp-time-server.test.mjs +0 -58
  239. package/tests/streaming.test.mjs +0 -57
  240. package/tests/test-helpers.mjs +0 -94
  241. package/tests/text-wrapping.test.mjs +0 -33
  242. package/tests/tool-count.test.mjs +0 -81
  243. package/tests/ui-format.test.mjs +0 -39
  244. 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":"AAKA,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,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACtC;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAKpB;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"}
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"}
@@ -1,16 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AgentRegistry = void 0;
4
- const codemie_code_1 = require("./adapters/codemie-code");
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
- ['codemie-code', new codemie_code_1.CodeMieCodeAdapter()],
11
- ['claude', new claude_code_1.ClaudeCodeAdapter()],
12
- ['codex', new codex_1.CodexAdapter()],
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":";;;AAAA,0DAA6D;AAC7D,wDAA2D;AAC3D,4CAAgD;AAChD,4CAAgD;AAahD,MAAa,aAAa;IAChB,MAAM,CAAC,QAAQ,GAA8B,IAAI,GAAG,CAAC;QAC3D,CAAC,cAAc,EAAE,IAAI,iCAAkB,EAAE,CAAC;QAC1C,CAAC,QAAQ,EAAE,IAAI,+BAAiB,EAAE,CAAC;QACnC,CAAC,OAAO,EAAE,IAAI,oBAAY,EAAE,CAAC;QAC7B,CAAC,OAAO,EAAE,IAAI,oBAAY,EAAE,CAAC;KAC9B,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;;AA5BH,sCA6BC"}
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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createConfigCommand(): Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,YAAY,EAAwB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtC,OAAO,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;IAEzD,mDAAmD;IACnD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,8CAA8C;IAC9C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG;YACb,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,kDAAkD,EAAE;YAC9E,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAC7C,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE;YAClD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,iDAAiD,EAAE;YAC1E,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,4BAA4B,EAAE;YACvD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,mCAAmC,EAAE;YAC5D,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,uCAAuC,EAAE;YACtE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,mCAAmC,EAAE;SACtE,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEL,yCAAyC;IACzC,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,2BAA2B,CAAC;SACxC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;SACtC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;SAC1C,MAAM,CAAC,cAAc,EAAE,gCAAgC,EAAE,IAAI,CAAC;SAC9D,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC;SAChD,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,KAAa,EAAE,OAA6D,EAAE,EAAE;QAC1G,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAElC,cAAc;YACd,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAE5C,sBAAsB;YACtB,MAAM,aAAa,GAAG,QAAQ;gBAC5B,CAAC,CAAC,MAAM,YAAY,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;gBACrE,CAAC,CAAC,MAAM,YAAY,CAAC,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,uBAAuB,CAAC,CAAC;YAEhF,gBAAgB;YAChB,MAAM,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC;YAE/D,cAAc;YACd,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;gBACnD,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,mBAAmB,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBACjE,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,oBAAoB,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,yCAAyC;IACzC,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,2BAA2B,CAAC;SACxC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;SACtC,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAwB,EAAE,EAAE;QACtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,KAAK,GAAI,MAAc,CAAC,GAAG,CAAC,CAAC;YAEnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,GAAG,WAAW,CAAC,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBACnC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACzD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iDAAiD;IACjD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0CAA0C,CAAC;SACvD,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;SACtC,MAAM,CAAC,cAAc,EAAE,8BAA8B,EAAE,IAAI,CAAC;SAC5D,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAA6D,EAAE,EAAE;QAC3F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAElC,qBAAqB;YACrB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,YAAY,GAAI,MAAc,CAAC,GAAG,CAAC,CAAC;YAE1C,uBAAuB;YACvB,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7F,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACzC;oBACE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;oBACxC,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,uBAAuB,GAAG,GAAG;oBACtC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;oBAC/C,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;iBACpC;aACF,CAAC,CAAC;YAEH,cAAc;YACd,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAE/C,sBAAsB;YACtB,MAAM,aAAa,GAAG,QAAQ;gBAC5B,CAAC,CAAC,MAAM,YAAY,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;gBACrE,CAAC,CAAC,MAAM,YAAY,CAAC,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,uBAAuB,CAAC,CAAC;YAEhF,gBAAgB;YAChB,MAAM,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC;YAE/D,cAAc;YACd,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;gBACnD,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,mBAAmB,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBACjE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,oBAAoB,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,qCAAqC;IACrC,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,cAAc,EAAE,qBAAqB,EAAE,IAAI,CAAC;SACnD,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;SAC/C,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,OAA6D,EAAE,EAAE;QAC9E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAElC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,kCAAkC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,iBAAiB;oBAC3F,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtD,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,mCAAmC;IACnC,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;YAExD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/D,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAExC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAEvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,OAAQ,EAAE,MAAM,CAAC,MAAO,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,QAAQ,KAAK,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,0CAA0C;IAC1C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,yCAAyC;YACzC,IAAI,MAAM,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBAC1C;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,2CAA2C;wBACpD,OAAO,EAAE,KAAK;qBACf;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBAC7C,OAAO;gBACT,CAAC;YACH,CAAC;YAED,iCAAiC;YACjC,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;YAEzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;YAEvE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC/D;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,kCAAkC;oBAC3C,OAAO,EAAE,KAAK;iBACf;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,oCAAoC;oBAC7C,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YAEH,MAAM,aAAa,GAAkC,EAAE,CAAC;YAExD,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACtC;wBACE,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,QAAQ;wBACjB,OAAO,EAAE,YAAY,CAAC,KAAK;qBAC5B;iBACF,CAAC,CAAC;gBACH,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9B,CAAC;YAED,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACxC;wBACE,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,oBAAoB;wBAC7B,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,GAAG;qBACrC;iBACF,CAAC,CAAC;gBACH,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;YAClC,CAAC;YAED,MAAM,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YACjE,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;YAE/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mGAAmG,CAAC,CAAC,CAAC;QAC9H,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACrC,yCAAyC;IACzC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAEvD,uCAAuC;IACvC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -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;AAMpC,wBAAgB,mBAAmB,IAAI,OAAO,CA4H7C"}
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
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createDoctorCommand = createDoctorCommand;
7
- const commander_1 = require("commander");
8
- const tips_1 = require("../../utils/tips");
9
- const exec_1 = require("../../utils/exec");
10
- const chalk_1 = __importDefault(require("chalk"));
11
- const registry_1 = require("../../agents/registry");
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(chalk_1.default.bold('\n🔍 CodeMie Code Health Check\n'));
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(chalk_1.default.bold('Node.js:'));
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(` ${chalk_1.default.green('✓')} Version ${nodeVersion}`);
23
+ console.log(` ${chalk.green('✓')} Version ${nodeVersion}`);
26
24
  }
27
25
  else {
28
- console.log(` ${chalk_1.default.yellow('⚠')} Version ${nodeVersion} (recommended: >= 18.0.0)`);
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(` ${chalk_1.default.red('✗')} Failed to check version`);
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(chalk_1.default.bold('npm:'));
36
+ console.log(chalk.bold('npm:'));
39
37
  try {
40
- const result = await (0, exec_1.exec)('npm', ['--version']);
41
- console.log(` ${chalk_1.default.green('✓')} Version ${result.stdout}`);
38
+ const result = await exec('npm', ['--version']);
39
+ console.log(` ${chalk.green('✓')} Version ${result.stdout}`);
42
40
  }
43
41
  catch {
44
- console.log(` ${chalk_1.default.red('✗')} npm not found`);
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(chalk_1.default.bold('git:'));
47
+ console.log(chalk.bold('git:'));
50
48
  try {
51
- const result = await (0, exec_1.exec)('git', ['--version']);
52
- console.log(` ${chalk_1.default.green('✓')} ${result.stdout}`);
49
+ const result = await exec('git', ['--version']);
50
+ console.log(` ${chalk.green('✓')} ${result.stdout}`);
53
51
  }
54
52
  catch {
55
- console.log(` ${chalk_1.default.yellow('⚠')} git not found (optional)`);
53
+ console.log(` ${chalk.yellow('⚠')} git not found (optional)`);
56
54
  }
57
55
  console.log();
58
56
  // Check AI Configuration
59
- console.log(chalk_1.default.bold('AI Configuration:'));
60
- // Check for any valid base URL
61
- const baseUrl = process.env.CODEMIE_BASE_URL ||
62
- process.env.ANTHROPIC_BASE_URL ||
63
- process.env.OPENAI_BASE_URL;
64
- // Check for any valid auth token
65
- const authToken = process.env.CODEMIE_AUTH_TOKEN ||
66
- process.env.CODEMIE_API_KEY ||
67
- process.env.ANTHROPIC_AUTH_TOKEN ||
68
- process.env.ANTHROPIC_API_KEY ||
69
- process.env.OPENAI_AUTH_TOKEN ||
70
- process.env.OPENAI_API_KEY;
71
- if (baseUrl) {
72
- console.log(` ${chalk_1.default.green('✓')} Base URL: ${baseUrl}`);
73
- }
74
- else {
75
- console.log(` ${chalk_1.default.red('✗')} Base URL not set`);
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
- else {
84
- console.log(` ${chalk_1.default.red('✗')} Auth Token not set`);
85
- console.log(` Set: CODEMIE_AUTH_TOKEN (or provider-specific: ANTHROPIC_AUTH_TOKEN, OPENAI_API_KEY)`);
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(chalk_1.default.bold('Installed Agents:'));
101
- const installedAgents = await registry_1.AgentRegistry.getInstalledAgents();
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(` ${chalk_1.default.green('✓')} ${agent.displayName}${versionStr}`);
150
+ console.log(` ${chalk.green('✓')} ${agent.displayName}${versionStr}`);
107
151
  }
108
152
  }
109
153
  else {
110
- console.log(` ${chalk_1.default.yellow('⚠')} No agents installed (CodeMie Code is built-in)`);
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(chalk_1.default.yellow('⚠ Some issues detected. Please resolve them for optimal performance.\n'));
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(chalk_1.default.green('✓ All checks passed!\n'));
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
- tips_1.tipDisplay.showRandomTip();
166
+ tipDisplay.showRandomTip();
123
167
  }
124
168
  }
125
169
  });