cast-code 1.0.0

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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +217 -0
  3. package/dist/app.module.js +45 -0
  4. package/dist/app.module.js.map +1 -0
  5. package/dist/common/common.module.js +49 -0
  6. package/dist/common/common.module.js.map +1 -0
  7. package/dist/common/constants/index.js +105 -0
  8. package/dist/common/constants/index.js.map +1 -0
  9. package/dist/common/index.js +24 -0
  10. package/dist/common/index.js.map +1 -0
  11. package/dist/common/services/config.service.js +119 -0
  12. package/dist/common/services/config.service.js.map +1 -0
  13. package/dist/common/services/llm.service.js +56 -0
  14. package/dist/common/services/llm.service.js.map +1 -0
  15. package/dist/common/services/markdown-parser.service.js +101 -0
  16. package/dist/common/services/markdown-parser.service.js.map +1 -0
  17. package/dist/common/services/markdown-renderer.service.js +220 -0
  18. package/dist/common/services/markdown-renderer.service.js.map +1 -0
  19. package/dist/common/services/multi-llm.service.js +115 -0
  20. package/dist/common/services/multi-llm.service.js.map +1 -0
  21. package/dist/common/types/index.js +20 -0
  22. package/dist/common/types/index.js.map +1 -0
  23. package/dist/common/types/markdown.types.js +6 -0
  24. package/dist/common/types/markdown.types.js.map +1 -0
  25. package/dist/main.js +84 -0
  26. package/dist/main.js.map +1 -0
  27. package/dist/modules/agents/agents.module.js +43 -0
  28. package/dist/modules/agents/agents.module.js.map +1 -0
  29. package/dist/modules/agents/definitions/architect.md +35 -0
  30. package/dist/modules/agents/definitions/backend.md +43 -0
  31. package/dist/modules/agents/definitions/coder.md +34 -0
  32. package/dist/modules/agents/definitions/devops.md +42 -0
  33. package/dist/modules/agents/definitions/frontend.md +46 -0
  34. package/dist/modules/agents/definitions/reviewer.md +35 -0
  35. package/dist/modules/agents/definitions/tester.md +41 -0
  36. package/dist/modules/agents/index.js +23 -0
  37. package/dist/modules/agents/index.js.map +1 -0
  38. package/dist/modules/agents/services/agent-loader.service.js +150 -0
  39. package/dist/modules/agents/services/agent-loader.service.js.map +1 -0
  40. package/dist/modules/agents/services/agent-registry.service.js +108 -0
  41. package/dist/modules/agents/services/agent-registry.service.js.map +1 -0
  42. package/dist/modules/agents/types/agent.types.js +6 -0
  43. package/dist/modules/agents/types/agent.types.js.map +1 -0
  44. package/dist/modules/agents/types/index.js +20 -0
  45. package/dist/modules/agents/types/index.js.map +1 -0
  46. package/dist/modules/config/config.module.js +38 -0
  47. package/dist/modules/config/config.module.js.map +1 -0
  48. package/dist/modules/config/index.js +24 -0
  49. package/dist/modules/config/index.js.map +1 -0
  50. package/dist/modules/config/services/config-commands.service.js +405 -0
  51. package/dist/modules/config/services/config-commands.service.js.map +1 -0
  52. package/dist/modules/config/services/config-manager.service.js +175 -0
  53. package/dist/modules/config/services/config-manager.service.js.map +1 -0
  54. package/dist/modules/config/services/init-config.service.js +238 -0
  55. package/dist/modules/config/services/init-config.service.js.map +1 -0
  56. package/dist/modules/config/types/config.types.js +163 -0
  57. package/dist/modules/config/types/config.types.js.map +1 -0
  58. package/dist/modules/config/types/index.js +20 -0
  59. package/dist/modules/config/types/index.js.map +1 -0
  60. package/dist/modules/core/core.module.js +60 -0
  61. package/dist/modules/core/core.module.js.map +1 -0
  62. package/dist/modules/core/index.js +22 -0
  63. package/dist/modules/core/index.js.map +1 -0
  64. package/dist/modules/core/services/deep-agent.service.js +575 -0
  65. package/dist/modules/core/services/deep-agent.service.js.map +1 -0
  66. package/dist/modules/core/services/plan-mode.service.js +225 -0
  67. package/dist/modules/core/services/plan-mode.service.js.map +1 -0
  68. package/dist/modules/git/git.module.js +48 -0
  69. package/dist/modules/git/git.module.js.map +1 -0
  70. package/dist/modules/git/index.js +23 -0
  71. package/dist/modules/git/index.js.map +1 -0
  72. package/dist/modules/git/services/code-review.service.js +330 -0
  73. package/dist/modules/git/services/code-review.service.js.map +1 -0
  74. package/dist/modules/git/services/commit-generator.service.js +403 -0
  75. package/dist/modules/git/services/commit-generator.service.js.map +1 -0
  76. package/dist/modules/git/services/index.js +21 -0
  77. package/dist/modules/git/services/index.js.map +1 -0
  78. package/dist/modules/git/services/monorepo-detector.service.js +338 -0
  79. package/dist/modules/git/services/monorepo-detector.service.js.map +1 -0
  80. package/dist/modules/git/services/pr-generator.service.js +429 -0
  81. package/dist/modules/git/services/pr-generator.service.js.map +1 -0
  82. package/dist/modules/git/services/release-notes.service.js +426 -0
  83. package/dist/modules/git/services/release-notes.service.js.map +1 -0
  84. package/dist/modules/git/types/git.types.js +6 -0
  85. package/dist/modules/git/types/git.types.js.map +1 -0
  86. package/dist/modules/git/types/index.js +20 -0
  87. package/dist/modules/git/types/index.js.map +1 -0
  88. package/dist/modules/mcp/catalog/mcp-templates.js +606 -0
  89. package/dist/modules/mcp/catalog/mcp-templates.js.map +1 -0
  90. package/dist/modules/mcp/index.js +23 -0
  91. package/dist/modules/mcp/index.js.map +1 -0
  92. package/dist/modules/mcp/mcp.module.js +35 -0
  93. package/dist/modules/mcp/mcp.module.js.map +1 -0
  94. package/dist/modules/mcp/services/mcp-client.service.js +289 -0
  95. package/dist/modules/mcp/services/mcp-client.service.js.map +1 -0
  96. package/dist/modules/mcp/services/mcp-registry.service.js +197 -0
  97. package/dist/modules/mcp/services/mcp-registry.service.js.map +1 -0
  98. package/dist/modules/mcp/types/index.js +20 -0
  99. package/dist/modules/mcp/types/index.js.map +1 -0
  100. package/dist/modules/mcp/types/mcp.types.js +6 -0
  101. package/dist/modules/mcp/types/mcp.types.js.map +1 -0
  102. package/dist/modules/memory/index.js +23 -0
  103. package/dist/modules/memory/index.js.map +1 -0
  104. package/dist/modules/memory/memory.module.js +35 -0
  105. package/dist/modules/memory/memory.module.js.map +1 -0
  106. package/dist/modules/memory/services/memory-tools.service.js +78 -0
  107. package/dist/modules/memory/services/memory-tools.service.js.map +1 -0
  108. package/dist/modules/memory/services/memory.service.js +169 -0
  109. package/dist/modules/memory/services/memory.service.js.map +1 -0
  110. package/dist/modules/memory/types/index.js +20 -0
  111. package/dist/modules/memory/types/index.js.map +1 -0
  112. package/dist/modules/memory/types/memory.types.js +6 -0
  113. package/dist/modules/memory/types/memory.types.js.map +1 -0
  114. package/dist/modules/mentions/index.js +22 -0
  115. package/dist/modules/mentions/index.js.map +1 -0
  116. package/dist/modules/mentions/mentions.module.js +32 -0
  117. package/dist/modules/mentions/mentions.module.js.map +1 -0
  118. package/dist/modules/mentions/services/mentions.service.js +336 -0
  119. package/dist/modules/mentions/services/mentions.service.js.map +1 -0
  120. package/dist/modules/mentions/types/index.js +20 -0
  121. package/dist/modules/mentions/types/index.js.map +1 -0
  122. package/dist/modules/mentions/types/mention.types.js +19 -0
  123. package/dist/modules/mentions/types/mention.types.js.map +1 -0
  124. package/dist/modules/permissions/index.js +23 -0
  125. package/dist/modules/permissions/index.js.map +1 -0
  126. package/dist/modules/permissions/permissions.module.js +35 -0
  127. package/dist/modules/permissions/permissions.module.js.map +1 -0
  128. package/dist/modules/permissions/services/permission.service.js +269 -0
  129. package/dist/modules/permissions/services/permission.service.js.map +1 -0
  130. package/dist/modules/permissions/services/prompt.service.js +116 -0
  131. package/dist/modules/permissions/services/prompt.service.js.map +1 -0
  132. package/dist/modules/permissions/types/permission.types.js +32 -0
  133. package/dist/modules/permissions/types/permission.types.js.map +1 -0
  134. package/dist/modules/project/index.js +24 -0
  135. package/dist/modules/project/index.js.map +1 -0
  136. package/dist/modules/project/project.module.js +38 -0
  137. package/dist/modules/project/project.module.js.map +1 -0
  138. package/dist/modules/project/services/project-analyzer.service.js +1063 -0
  139. package/dist/modules/project/services/project-analyzer.service.js.map +1 -0
  140. package/dist/modules/project/services/project-context.service.js +62 -0
  141. package/dist/modules/project/services/project-context.service.js.map +1 -0
  142. package/dist/modules/project/services/project-loader.service.js +147 -0
  143. package/dist/modules/project/services/project-loader.service.js.map +1 -0
  144. package/dist/modules/project/types/index.js +20 -0
  145. package/dist/modules/project/types/index.js.map +1 -0
  146. package/dist/modules/project/types/project.types.js +6 -0
  147. package/dist/modules/project/types/project.types.js.map +1 -0
  148. package/dist/modules/repl/index.js +21 -0
  149. package/dist/modules/repl/index.js.map +1 -0
  150. package/dist/modules/repl/repl.module.js +66 -0
  151. package/dist/modules/repl/repl.module.js.map +1 -0
  152. package/dist/modules/repl/services/commands/agent-commands.service.js +196 -0
  153. package/dist/modules/repl/services/commands/agent-commands.service.js.map +1 -0
  154. package/dist/modules/repl/services/commands/git-commands.service.js +500 -0
  155. package/dist/modules/repl/services/commands/git-commands.service.js.map +1 -0
  156. package/dist/modules/repl/services/commands/mcp-commands.service.js +579 -0
  157. package/dist/modules/repl/services/commands/mcp-commands.service.js.map +1 -0
  158. package/dist/modules/repl/services/commands/project-commands.service.js +226 -0
  159. package/dist/modules/repl/services/commands/project-commands.service.js.map +1 -0
  160. package/dist/modules/repl/services/commands/repl-commands.service.js +254 -0
  161. package/dist/modules/repl/services/commands/repl-commands.service.js.map +1 -0
  162. package/dist/modules/repl/services/repl.service.js +647 -0
  163. package/dist/modules/repl/services/repl.service.js.map +1 -0
  164. package/dist/modules/repl/services/smart-input.js +544 -0
  165. package/dist/modules/repl/services/smart-input.js.map +1 -0
  166. package/dist/modules/repl/services/welcome-screen.service.js +117 -0
  167. package/dist/modules/repl/services/welcome-screen.service.js.map +1 -0
  168. package/dist/modules/repl/utils/prompts-with-esc.js +187 -0
  169. package/dist/modules/repl/utils/prompts-with-esc.js.map +1 -0
  170. package/dist/modules/repl/utils/theme.js +185 -0
  171. package/dist/modules/repl/utils/theme.js.map +1 -0
  172. package/dist/modules/skills/definitions/general/file-operations.md +60 -0
  173. package/dist/modules/skills/definitions/general/git-operations.md +59 -0
  174. package/dist/modules/skills/definitions/general/planning.md +86 -0
  175. package/dist/modules/skills/definitions/general/search.md +59 -0
  176. package/dist/modules/skills/definitions/specialized/api-design.md +85 -0
  177. package/dist/modules/skills/definitions/specialized/database-operations.md +78 -0
  178. package/dist/modules/skills/definitions/specialized/frontend-bootstrap.md +71 -0
  179. package/dist/modules/skills/definitions/specialized/react-patterns.md +77 -0
  180. package/dist/modules/skills/definitions/specialized/testing-strategies.md +79 -0
  181. package/dist/modules/skills/index.js +23 -0
  182. package/dist/modules/skills/index.js.map +1 -0
  183. package/dist/modules/skills/services/skill-loader.service.js +130 -0
  184. package/dist/modules/skills/services/skill-loader.service.js.map +1 -0
  185. package/dist/modules/skills/services/skill-registry.service.js +96 -0
  186. package/dist/modules/skills/services/skill-registry.service.js.map +1 -0
  187. package/dist/modules/skills/skills.module.js +38 -0
  188. package/dist/modules/skills/skills.module.js.map +1 -0
  189. package/dist/modules/skills/types/index.js +20 -0
  190. package/dist/modules/skills/types/index.js.map +1 -0
  191. package/dist/modules/skills/types/skill.types.js +6 -0
  192. package/dist/modules/skills/types/skill.types.js.map +1 -0
  193. package/dist/modules/tasks/index.js +24 -0
  194. package/dist/modules/tasks/index.js.map +1 -0
  195. package/dist/modules/tasks/services/plan-executor.service.js +199 -0
  196. package/dist/modules/tasks/services/plan-executor.service.js.map +1 -0
  197. package/dist/modules/tasks/services/plan-mode.service.js +118 -0
  198. package/dist/modules/tasks/services/plan-mode.service.js.map +1 -0
  199. package/dist/modules/tasks/services/plan-persistence.service.js +148 -0
  200. package/dist/modules/tasks/services/plan-persistence.service.js.map +1 -0
  201. package/dist/modules/tasks/services/task-management.service.js +255 -0
  202. package/dist/modules/tasks/services/task-management.service.js.map +1 -0
  203. package/dist/modules/tasks/services/task-tools.service.js +270 -0
  204. package/dist/modules/tasks/services/task-tools.service.js.map +1 -0
  205. package/dist/modules/tasks/tasks.module.js +49 -0
  206. package/dist/modules/tasks/tasks.module.js.map +1 -0
  207. package/dist/modules/tasks/types/task.types.js +21 -0
  208. package/dist/modules/tasks/types/task.types.js.map +1 -0
  209. package/dist/modules/tools/index.js +24 -0
  210. package/dist/modules/tools/index.js.map +1 -0
  211. package/dist/modules/tools/services/filesystem-tools.service.js +450 -0
  212. package/dist/modules/tools/services/filesystem-tools.service.js.map +1 -0
  213. package/dist/modules/tools/services/search-tools.service.js +63 -0
  214. package/dist/modules/tools/services/search-tools.service.js.map +1 -0
  215. package/dist/modules/tools/services/shell-tools.service.js +194 -0
  216. package/dist/modules/tools/services/shell-tools.service.js.map +1 -0
  217. package/dist/modules/tools/services/tools-registry.service.js +83 -0
  218. package/dist/modules/tools/services/tools-registry.service.js.map +1 -0
  219. package/dist/modules/tools/tools.module.js +46 -0
  220. package/dist/modules/tools/tools.module.js.map +1 -0
  221. package/package.json +74 -0
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ _export_star(require("./agent.types"), exports);
6
+ function _export_star(from, to) {
7
+ Object.keys(from).forEach(function(k) {
8
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
9
+ Object.defineProperty(to, k, {
10
+ enumerable: true,
11
+ get: function() {
12
+ return from[k];
13
+ }
14
+ });
15
+ }
16
+ });
17
+ return from;
18
+ }
19
+
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/agents/types/index.ts"],"sourcesContent":["export * from './agent.types';\n"],"names":[],"mappings":";;;;qBAAc"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ConfigModule", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ConfigModule;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _configmanagerservice = require("./services/config-manager.service");
13
+ const _initconfigservice = require("./services/init-config.service");
14
+ const _configcommandsservice = require("./services/config-commands.service");
15
+ function _ts_decorate(decorators, target, key, desc) {
16
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
18
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
19
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
20
+ }
21
+ let ConfigModule = class ConfigModule {
22
+ };
23
+ ConfigModule = _ts_decorate([
24
+ (0, _common.Module)({
25
+ providers: [
26
+ _configmanagerservice.ConfigManagerService,
27
+ _initconfigservice.InitConfigService,
28
+ _configcommandsservice.ConfigCommandsService
29
+ ],
30
+ exports: [
31
+ _configmanagerservice.ConfigManagerService,
32
+ _initconfigservice.InitConfigService,
33
+ _configcommandsservice.ConfigCommandsService
34
+ ]
35
+ })
36
+ ], ConfigModule);
37
+
38
+ //# sourceMappingURL=config.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/config/config.module.ts"],"sourcesContent":["import { Module } from '@nestjs/common';\nimport { ConfigManagerService } from './services/config-manager.service';\nimport { InitConfigService } from './services/init-config.service';\nimport { ConfigCommandsService } from './services/config-commands.service';\n\n@Module({\n providers: [ConfigManagerService, InitConfigService, ConfigCommandsService],\n exports: [ConfigManagerService, InitConfigService, ConfigCommandsService],\n})\nexport class ConfigModule {}\n"],"names":["ConfigModule","providers","ConfigManagerService","InitConfigService","ConfigCommandsService","exports"],"mappings":";;;;+BASaA;;;eAAAA;;;wBATU;sCACc;mCACH;uCACI;;;;;;;AAM/B,IAAA,AAAMA,eAAN,MAAMA;AAAc;;;QAHzBC,WAAW;YAACC,0CAAoB;YAAEC,oCAAiB;YAAEC,4CAAqB;SAAC;QAC3EC,SAAS;YAACH,0CAAoB;YAAEC,oCAAiB;YAAEC,4CAAqB;SAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ _export_star(require("./config.module"), exports);
6
+ _export_star(require("./types"), exports);
7
+ _export_star(require("./services/config-manager.service"), exports);
8
+ _export_star(require("./services/init-config.service"), exports);
9
+ _export_star(require("./services/config-commands.service"), exports);
10
+ function _export_star(from, to) {
11
+ Object.keys(from).forEach(function(k) {
12
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
13
+ Object.defineProperty(to, k, {
14
+ enumerable: true,
15
+ get: function() {
16
+ return from[k];
17
+ }
18
+ });
19
+ }
20
+ });
21
+ return from;
22
+ }
23
+
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/config/index.ts"],"sourcesContent":["export * from './config.module';\nexport * from './types';\nexport * from './services/config-manager.service';\nexport * from './services/init-config.service';\nexport * from './services/config-commands.service';\n"],"names":[],"mappings":";;;;qBAAc;qBACA;qBACA;qBACA;qBACA"}
@@ -0,0 +1,405 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ConfigCommandsService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ConfigCommandsService;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _chalk = /*#__PURE__*/ _interop_require_default(require("chalk"));
13
+ const _configmanagerservice = require("./config-manager.service");
14
+ const _initconfigservice = require("./init-config.service");
15
+ const _configtypes = require("../types/config.types");
16
+ const _promptswithesc = require("../../repl/utils/prompts-with-esc");
17
+ function _interop_require_default(obj) {
18
+ return obj && obj.__esModule ? obj : {
19
+ default: obj
20
+ };
21
+ }
22
+ function _ts_decorate(decorators, target, key, desc) {
23
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
24
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
25
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
26
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
27
+ }
28
+ function _ts_metadata(k, v) {
29
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
30
+ }
31
+ let ConfigCommandsService = class ConfigCommandsService {
32
+ async handleConfigCommand(args, smartInput) {
33
+ const subcommand = args[0];
34
+ const useInquirerFlow = [
35
+ 'init',
36
+ 'setup',
37
+ 'add-provider',
38
+ 'set-model',
39
+ 'remove-provider'
40
+ ].includes(subcommand || '');
41
+ if (useInquirerFlow) {
42
+ smartInput?.pause();
43
+ }
44
+ try {
45
+ switch(subcommand){
46
+ case 'init':
47
+ case 'setup':
48
+ await this.withEscHandler(()=>this.initService.runInitialSetup());
49
+ break;
50
+ case 'show':
51
+ await this.showConfig();
52
+ break;
53
+ case 'add-provider':
54
+ await this.withEscHandler(()=>this.addProviderInteractive());
55
+ break;
56
+ case 'set-model':
57
+ await this.withEscHandler(()=>this.setModelInteractive());
58
+ break;
59
+ case 'remove-provider':
60
+ await this.withEscHandler(()=>this.removeProviderInteractive());
61
+ break;
62
+ case 'path':
63
+ console.log(this.configManager.getConfigPath());
64
+ break;
65
+ default:
66
+ if (smartInput) {
67
+ await this.showConfigMenu(smartInput);
68
+ } else {
69
+ await this.showConfig();
70
+ }
71
+ }
72
+ } finally{
73
+ if (useInquirerFlow) {
74
+ smartInput?.resume();
75
+ }
76
+ }
77
+ }
78
+ async withEscHandler(fn) {
79
+ const result = await (0, _promptswithesc.withEsc)(fn);
80
+ if (result === null) {
81
+ console.log(_chalk.default.yellow('\n\n❌ Cancelado. Voltando ao menu...\n'));
82
+ }
83
+ }
84
+ async showConfigMenu(smartInput) {
85
+ const w = (s)=>process.stdout.write(s);
86
+ const Colors = {
87
+ cyan: '\x1b[38;5;51m',
88
+ green: '\x1b[38;5;82m',
89
+ yellow: '\x1b[38;5;220m',
90
+ gray: '\x1b[38;5;245m',
91
+ bold: '\x1b[1m',
92
+ reset: '\x1b[0m'
93
+ };
94
+ await this.configManager.loadConfig();
95
+ while(true){
96
+ w(`\n${Colors.cyan}${Colors.bold}⚙️ Configuração Cast Code${Colors.reset}\n`);
97
+ w(`${Colors.gray}${'─'.repeat(30)}${Colors.reset}\n\n`);
98
+ const action = await (0, _promptswithesc.withEsc)(()=>smartInput.askChoice('O que deseja fazer?', [
99
+ {
100
+ key: '1',
101
+ label: 'Ver configuração atual',
102
+ description: 'Mostrar provedores e modelos'
103
+ },
104
+ {
105
+ key: '2',
106
+ label: 'Configuração inicial completa',
107
+ description: 'Wizard de setup'
108
+ },
109
+ {
110
+ key: '3',
111
+ label: 'Adicionar provedor',
112
+ description: 'Novo serviço de IA'
113
+ },
114
+ {
115
+ key: '4',
116
+ label: 'Remover provedor',
117
+ description: 'Remover serviço'
118
+ },
119
+ {
120
+ key: '5',
121
+ label: 'Configurar modelo',
122
+ description: 'Definir modelo para finalidade'
123
+ },
124
+ {
125
+ key: '6',
126
+ label: 'Ver caminho do arquivo',
127
+ description: 'Local do config.yaml'
128
+ },
129
+ {
130
+ key: '7',
131
+ label: 'Sair',
132
+ description: 'Voltar ao chat'
133
+ }
134
+ ]));
135
+ if (action === null) {
136
+ console.log(_chalk.default.yellow('\nSaindo do menu de configuração...\n'));
137
+ return;
138
+ }
139
+ switch(action){
140
+ case '1':
141
+ await this.showConfig();
142
+ break;
143
+ case '2':
144
+ await this.withEscHandler(()=>this.initService.runInitialSetup());
145
+ return;
146
+ case '3':
147
+ await this.withEscHandler(()=>this.addProviderInteractive());
148
+ break;
149
+ case '4':
150
+ await this.withEscHandler(()=>this.removeProviderInteractive());
151
+ break;
152
+ case '5':
153
+ await this.withEscHandler(()=>this.setModelInteractive());
154
+ break;
155
+ case '6':
156
+ console.log(`\n📁 ${this.configManager.getConfigPath()}\n`);
157
+ break;
158
+ case '7':
159
+ return;
160
+ }
161
+ }
162
+ }
163
+ async showConfig() {
164
+ await this.configManager.loadConfig();
165
+ const config = this.configManager.getConfig();
166
+ const w = (s)=>process.stdout.write(s);
167
+ const Colors = {
168
+ cyan: '\x1b[38;5;51m',
169
+ green: '\x1b[38;5;82m',
170
+ red: '\x1b[38;5;196m',
171
+ yellow: '\x1b[38;5;220m',
172
+ gray: '\x1b[38;5;245m',
173
+ bold: '\x1b[1m',
174
+ reset: '\x1b[0m'
175
+ };
176
+ w(`\n${Colors.cyan}${Colors.bold}⚙️ Configuração Atual${Colors.reset}\n`);
177
+ w(`${Colors.gray}${'─'.repeat(40)}${Colors.reset}\n\n`);
178
+ w(`${Colors.yellow}📦 Provedores configurados:${Colors.reset}\n`);
179
+ const providers = this.configManager.getConfiguredProviders();
180
+ if (providers.length === 0) {
181
+ w(`${Colors.gray} Nenhum provedor configurado${Colors.reset}\n`);
182
+ w(`${Colors.gray} Use "cast config init" ou /config add-provider${Colors.reset}\n`);
183
+ } else {
184
+ for (const provider of providers){
185
+ const meta = _configtypes.PROVIDER_METADATA[provider];
186
+ const isConfigured = this.configManager.isProviderConfigured(provider);
187
+ const status = isConfigured ? `${Colors.green}✓` : `${Colors.red}✗`;
188
+ w(` ${status} ${meta.name} ${Colors.gray}(${provider})${Colors.reset}\n`);
189
+ }
190
+ }
191
+ w(`\n${Colors.yellow}🤖 Modelos configurados:${Colors.reset}\n`);
192
+ for (const purpose of _configtypes.MODEL_PURPOSES){
193
+ const modelConfig = config.models[purpose.value];
194
+ if (modelConfig) {
195
+ const providerName = _configtypes.PROVIDER_METADATA[modelConfig.provider].name;
196
+ w(` ${Colors.cyan}${purpose.label.padEnd(12)}${Colors.reset} → ${modelConfig.model}\n`);
197
+ w(` ${Colors.gray}${' '.repeat(12)} ${providerName}${Colors.reset}\n`);
198
+ }
199
+ }
200
+ w(`\n${Colors.gray}📁 Arquivo: ${this.configManager.getConfigPath()}${Colors.reset}\n\n`);
201
+ }
202
+ async addProviderInteractive() {
203
+ await this.configManager.loadConfig();
204
+ const availableProviders = Object.keys(_configtypes.PROVIDER_METADATA).filter((p)=>!this.configManager.isProviderConfigured(p));
205
+ if (availableProviders.length === 0) {
206
+ console.log(_chalk.default.yellow('\n⚠️ Todos os provedores já estão configurados!\n'));
207
+ return;
208
+ }
209
+ console.log(_chalk.default.cyan('\n📦 Adicionar Provedor'));
210
+ console.log(_chalk.default.gray('(pressione ESC para cancelar)\n'));
211
+ const provider = await (0, _promptswithesc.selectWithEsc)({
212
+ message: 'Qual provedor deseja adicionar?',
213
+ choices: availableProviders.map((p)=>({
214
+ name: `${_configtypes.PROVIDER_METADATA[p].name} - ${_configtypes.PROVIDER_METADATA[p].description}`,
215
+ value: p
216
+ }))
217
+ });
218
+ if (provider === null) {
219
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
220
+ return;
221
+ }
222
+ const meta = _configtypes.PROVIDER_METADATA[provider];
223
+ let config = {};
224
+ if (provider === 'ollama') {
225
+ const baseUrl = await (0, _promptswithesc.inputWithEsc)({
226
+ message: 'URL do servidor Ollama:',
227
+ default: meta.defaultBaseUrl
228
+ });
229
+ if (baseUrl === null) {
230
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
231
+ return;
232
+ }
233
+ config = {
234
+ baseUrl
235
+ };
236
+ } else {
237
+ console.log(_chalk.default.gray(`→ Obtenha sua API key em: ${meta.websiteUrl}`));
238
+ const apiKey = await (0, _promptswithesc.inputWithEsc)({
239
+ message: `API Key para ${meta.name}:`,
240
+ validate: (v)=>v.length > 5 || 'API key muito curta'
241
+ });
242
+ if (apiKey === null) {
243
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
244
+ return;
245
+ }
246
+ const useCustom = await (0, _promptswithesc.confirmWithEsc)({
247
+ message: 'Usar URL customizada?',
248
+ default: false
249
+ });
250
+ if (useCustom === null) {
251
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
252
+ return;
253
+ }
254
+ let baseUrl;
255
+ if (useCustom) {
256
+ baseUrl = await (0, _promptswithesc.inputWithEsc)({
257
+ message: 'URL da API:',
258
+ default: meta.defaultBaseUrl
259
+ });
260
+ if (baseUrl === null) {
261
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
262
+ return;
263
+ }
264
+ }
265
+ config = {
266
+ apiKey,
267
+ baseUrl
268
+ };
269
+ }
270
+ await this.configManager.addProvider(provider, config);
271
+ console.log(_chalk.default.green(`\n✓ Provedor ${meta.name} adicionado com sucesso!\n`));
272
+ }
273
+ async removeProviderInteractive() {
274
+ await this.configManager.loadConfig();
275
+ const configuredProviders = this.configManager.getConfiguredProviders();
276
+ if (configuredProviders.length === 0) {
277
+ console.log(_chalk.default.yellow('\n⚠️ Nenhum provedor configurado para remover.\n'));
278
+ return;
279
+ }
280
+ console.log(_chalk.default.gray('(pressione ESC para cancelar)\n'));
281
+ const provider = await (0, _promptswithesc.selectWithEsc)({
282
+ message: 'Qual provedor deseja remover?',
283
+ choices: configuredProviders.map((p)=>({
284
+ name: _configtypes.PROVIDER_METADATA[p].name,
285
+ value: p
286
+ }))
287
+ });
288
+ if (provider === null) {
289
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
290
+ return;
291
+ }
292
+ const confirmRemove = await (0, _promptswithesc.confirmWithEsc)({
293
+ message: `Tem certeza que deseja remover ${_configtypes.PROVIDER_METADATA[provider].name}?`,
294
+ default: false
295
+ });
296
+ if (confirmRemove === null || !confirmRemove) {
297
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
298
+ return;
299
+ }
300
+ const config = this.configManager.getConfig();
301
+ delete config.providers[provider];
302
+ await this.configManager.saveConfig(config);
303
+ console.log(_chalk.default.green(`\n✓ Provedor removido.\n`));
304
+ }
305
+ async setModelInteractive() {
306
+ await this.configManager.loadConfig();
307
+ const availableProviders = this.configManager.getConfiguredProviders();
308
+ if (availableProviders.length === 0) {
309
+ console.log(_chalk.default.red('\n❌ Nenhum provedor configurado. Configure um provedor primeiro.\n'));
310
+ return;
311
+ }
312
+ console.log(_chalk.default.cyan('\n🤖 Configurar Modelo'));
313
+ console.log(_chalk.default.gray('(pressione ESC para cancelar)\n'));
314
+ const purpose = await (0, _promptswithesc.selectWithEsc)({
315
+ message: 'Para qual finalidade?',
316
+ choices: _configtypes.MODEL_PURPOSES.map((p)=>({
317
+ name: `${p.label} - ${p.description}`,
318
+ value: p.value
319
+ }))
320
+ });
321
+ if (purpose === null) {
322
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
323
+ return;
324
+ }
325
+ const provider = await (0, _promptswithesc.selectWithEsc)({
326
+ message: 'Qual provedor?',
327
+ choices: availableProviders.map((p)=>({
328
+ name: _configtypes.PROVIDER_METADATA[p].name,
329
+ value: p
330
+ }))
331
+ });
332
+ if (provider === null) {
333
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
334
+ return;
335
+ }
336
+ const meta = _configtypes.PROVIDER_METADATA[provider];
337
+ const usePopular = await (0, _promptswithesc.confirmWithEsc)({
338
+ message: `Usar um dos modelos populares do ${meta.name}?`,
339
+ default: true
340
+ });
341
+ if (usePopular === null) {
342
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
343
+ return;
344
+ }
345
+ let model;
346
+ if (usePopular) {
347
+ model = await (0, _promptswithesc.selectWithEsc)({
348
+ message: 'Escolha o modelo:',
349
+ choices: [
350
+ ...meta.popularModels.map((m)=>({
351
+ name: m,
352
+ value: m
353
+ })),
354
+ {
355
+ name: '➕ Outro modelo...',
356
+ value: '__custom__'
357
+ }
358
+ ]
359
+ });
360
+ if (model === null) {
361
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
362
+ return;
363
+ }
364
+ if (model === '__custom__') {
365
+ model = await (0, _promptswithesc.inputWithEsc)({
366
+ message: 'Nome do modelo:',
367
+ default: meta.popularModels[0]
368
+ });
369
+ if (model === null) {
370
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
371
+ return;
372
+ }
373
+ }
374
+ } else {
375
+ model = await (0, _promptswithesc.inputWithEsc)({
376
+ message: 'Nome do modelo:',
377
+ default: meta.popularModels[0]
378
+ });
379
+ if (model === null) {
380
+ console.log(_chalk.default.yellow('\n❌ Cancelado.\n'));
381
+ return;
382
+ }
383
+ }
384
+ await this.configManager.setModel(purpose, {
385
+ provider,
386
+ model
387
+ });
388
+ const purposeLabel = _configtypes.MODEL_PURPOSES.find((p)=>p.value === purpose)?.label;
389
+ console.log(_chalk.default.green(`\n✓ Modelo para "${purposeLabel}" configurado: ${model}\n`));
390
+ }
391
+ constructor(configManager, initService){
392
+ this.configManager = configManager;
393
+ this.initService = initService;
394
+ }
395
+ };
396
+ ConfigCommandsService = _ts_decorate([
397
+ (0, _common.Injectable)(),
398
+ _ts_metadata("design:type", Function),
399
+ _ts_metadata("design:paramtypes", [
400
+ typeof _configmanagerservice.ConfigManagerService === "undefined" ? Object : _configmanagerservice.ConfigManagerService,
401
+ typeof _initconfigservice.InitConfigService === "undefined" ? Object : _initconfigservice.InitConfigService
402
+ ])
403
+ ], ConfigCommandsService);
404
+
405
+ //# sourceMappingURL=config-commands.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/config/services/config-commands.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport chalk from 'chalk';\nimport { ConfigManagerService } from './config-manager.service';\nimport { InitConfigService } from './init-config.service';\nimport {\n ProviderType,\n PROVIDER_METADATA,\n MODEL_PURPOSES,\n ModelPurpose,\n} from '../types/config.types';\nimport {\n selectWithEsc,\n inputWithEsc,\n confirmWithEsc,\n CancelledPromptError,\n withEsc,\n} from '../../repl/utils/prompts-with-esc';\n\ninterface SmartInput {\n askChoice: (question: string, choices: { key: string; label: string; description: string }[]) => Promise<string>;\n question: (prompt: string) => Promise<string>;\n pause: () => void;\n resume: () => void;\n}\n\n@Injectable()\nexport class ConfigCommandsService {\n constructor(\n private readonly configManager: ConfigManagerService,\n private readonly initService: InitConfigService\n ) {}\n\n async handleConfigCommand(args: string[], smartInput?: SmartInput): Promise<void> {\n const subcommand = args[0];\n const useInquirerFlow = ['init', 'setup', 'add-provider', 'set-model', 'remove-provider'].includes(subcommand || '');\n\n if (useInquirerFlow) {\n smartInput?.pause();\n }\n\n try {\n switch (subcommand) {\n case 'init':\n case 'setup':\n await this.withEscHandler(() => this.initService.runInitialSetup());\n break;\n\n case 'show':\n await this.showConfig();\n break;\n\n case 'add-provider':\n await this.withEscHandler(() => this.addProviderInteractive());\n break;\n\n case 'set-model':\n await this.withEscHandler(() => this.setModelInteractive());\n break;\n\n case 'remove-provider':\n await this.withEscHandler(() => this.removeProviderInteractive());\n break;\n\n case 'path':\n console.log(this.configManager.getConfigPath());\n break;\n\n default:\n if (smartInput) {\n await this.showConfigMenu(smartInput);\n } else {\n await this.showConfig();\n }\n }\n } finally {\n if (useInquirerFlow) {\n smartInput?.resume();\n }\n }\n }\n\n private async withEscHandler<T>(fn: () => Promise<T>): Promise<void> {\n const result = await withEsc(fn);\n if (result === null) {\n console.log(chalk.yellow('\\n\\n❌ Cancelado. Voltando ao menu...\\n'));\n }\n }\n\n private async showConfigMenu(smartInput: SmartInput): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const Colors = {\n cyan: '\\x1b[38;5;51m',\n green: '\\x1b[38;5;82m',\n yellow: '\\x1b[38;5;220m',\n gray: '\\x1b[38;5;245m',\n bold: '\\x1b[1m',\n reset: '\\x1b[0m',\n };\n\n await this.configManager.loadConfig();\n\n while (true) {\n w(`\\n${Colors.cyan}${Colors.bold}⚙️ Configuração Cast Code${Colors.reset}\\n`);\n w(`${Colors.gray}${'─'.repeat(30)}${Colors.reset}\\n\\n`);\n\n const action = await withEsc(() => smartInput.askChoice('O que deseja fazer?', [\n { key: '1', label: 'Ver configuração atual', description: 'Mostrar provedores e modelos' },\n { key: '2', label: 'Configuração inicial completa', description: 'Wizard de setup' },\n { key: '3', label: 'Adicionar provedor', description: 'Novo serviço de IA' },\n { key: '4', label: 'Remover provedor', description: 'Remover serviço' },\n { key: '5', label: 'Configurar modelo', description: 'Definir modelo para finalidade' },\n { key: '6', label: 'Ver caminho do arquivo', description: 'Local do config.yaml' },\n { key: '7', label: 'Sair', description: 'Voltar ao chat' },\n ]));\n\n if (action === null) {\n console.log(chalk.yellow('\\nSaindo do menu de configuração...\\n'));\n return;\n }\n\n switch (action) {\n case '1':\n await this.showConfig();\n break;\n case '2':\n await this.withEscHandler(() => this.initService.runInitialSetup());\n return;\n case '3':\n await this.withEscHandler(() => this.addProviderInteractive());\n break;\n case '4':\n await this.withEscHandler(() => this.removeProviderInteractive());\n break;\n case '5':\n await this.withEscHandler(() => this.setModelInteractive());\n break;\n case '6':\n console.log(`\\n📁 ${this.configManager.getConfigPath()}\\n`);\n break;\n case '7':\n return;\n }\n }\n }\n\n private async showConfig(): Promise<void> {\n await this.configManager.loadConfig();\n const config = this.configManager.getConfig();\n\n const w = (s: string) => process.stdout.write(s);\n const Colors = {\n cyan: '\\x1b[38;5;51m',\n green: '\\x1b[38;5;82m',\n red: '\\x1b[38;5;196m',\n yellow: '\\x1b[38;5;220m',\n gray: '\\x1b[38;5;245m',\n bold: '\\x1b[1m',\n reset: '\\x1b[0m',\n };\n\n w(`\\n${Colors.cyan}${Colors.bold}⚙️ Configuração Atual${Colors.reset}\\n`);\n w(`${Colors.gray}${'─'.repeat(40)}${Colors.reset}\\n\\n`);\n\n w(`${Colors.yellow}📦 Provedores configurados:${Colors.reset}\\n`);\n const providers = this.configManager.getConfiguredProviders();\n if (providers.length === 0) {\n w(`${Colors.gray} Nenhum provedor configurado${Colors.reset}\\n`);\n w(`${Colors.gray} Use \"cast config init\" ou /config add-provider${Colors.reset}\\n`);\n } else {\n for (const provider of providers) {\n const meta = PROVIDER_METADATA[provider];\n const isConfigured = this.configManager.isProviderConfigured(provider);\n const status = isConfigured \n ? `${Colors.green}✓` \n : `${Colors.red}✗`;\n w(` ${status} ${meta.name} ${Colors.gray}(${provider})${Colors.reset}\\n`);\n }\n }\n\n w(`\\n${Colors.yellow}🤖 Modelos configurados:${Colors.reset}\\n`);\n for (const purpose of MODEL_PURPOSES) {\n const modelConfig = config.models[purpose.value];\n if (modelConfig) {\n const providerName = PROVIDER_METADATA[modelConfig.provider].name;\n w(` ${Colors.cyan}${purpose.label.padEnd(12)}${Colors.reset} → ${modelConfig.model}\\n`);\n w(` ${Colors.gray}${' '.repeat(12)} ${providerName}${Colors.reset}\\n`);\n }\n }\n\n w(`\\n${Colors.gray}📁 Arquivo: ${this.configManager.getConfigPath()}${Colors.reset}\\n\\n`);\n }\n\n private async addProviderInteractive(): Promise<void> {\n await this.configManager.loadConfig();\n\n const availableProviders = Object.keys(PROVIDER_METADATA).filter(\n (p) => !this.configManager.isProviderConfigured(p as ProviderType)\n ) as ProviderType[];\n\n if (availableProviders.length === 0) {\n console.log(chalk.yellow('\\n⚠️ Todos os provedores já estão configurados!\\n'));\n return;\n }\n\n console.log(chalk.cyan('\\n📦 Adicionar Provedor'));\n console.log(chalk.gray('(pressione ESC para cancelar)\\n'));\n\n const provider = await selectWithEsc<ProviderType>({\n message: 'Qual provedor deseja adicionar?',\n choices: availableProviders.map((p) => ({\n name: `${PROVIDER_METADATA[p].name} - ${PROVIDER_METADATA[p].description}`,\n value: p,\n })),\n });\n\n if (provider === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n\n const meta = PROVIDER_METADATA[provider];\n\n let config: { apiKey?: string; baseUrl?: string } = {};\n\n if (provider === 'ollama') {\n const baseUrl = await inputWithEsc({\n message: 'URL do servidor Ollama:',\n default: meta.defaultBaseUrl,\n });\n if (baseUrl === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n config = { baseUrl };\n } else {\n console.log(chalk.gray(`→ Obtenha sua API key em: ${meta.websiteUrl}`));\n \n const apiKey = await inputWithEsc({\n message: `API Key para ${meta.name}:`,\n validate: (v) => v.length > 5 || 'API key muito curta',\n });\n\n if (apiKey === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n\n const useCustom = await confirmWithEsc({\n message: 'Usar URL customizada?',\n default: false,\n });\n\n if (useCustom === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n\n let baseUrl: string | undefined;\n if (useCustom) {\n baseUrl = await inputWithEsc({\n message: 'URL da API:',\n default: meta.defaultBaseUrl,\n });\n if (baseUrl === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n }\n\n config = { apiKey, baseUrl };\n }\n\n await this.configManager.addProvider(provider, config);\n console.log(chalk.green(`\\n✓ Provedor ${meta.name} adicionado com sucesso!\\n`));\n }\n\n private async removeProviderInteractive(): Promise<void> {\n await this.configManager.loadConfig();\n\n const configuredProviders = this.configManager.getConfiguredProviders();\n if (configuredProviders.length === 0) {\n console.log(chalk.yellow('\\n⚠️ Nenhum provedor configurado para remover.\\n'));\n return;\n }\n\n console.log(chalk.gray('(pressione ESC para cancelar)\\n'));\n\n const provider = await selectWithEsc<ProviderType>({\n message: 'Qual provedor deseja remover?',\n choices: configuredProviders.map((p) => ({\n name: PROVIDER_METADATA[p].name,\n value: p,\n })),\n });\n\n if (provider === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n\n const confirmRemove = await confirmWithEsc({\n message: `Tem certeza que deseja remover ${PROVIDER_METADATA[provider].name}?`,\n default: false,\n });\n\n if (confirmRemove === null || !confirmRemove) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n\n const config = this.configManager.getConfig();\n delete config.providers[provider];\n await this.configManager.saveConfig(config);\n console.log(chalk.green(`\\n✓ Provedor removido.\\n`));\n }\n\n private async setModelInteractive(): Promise<void> {\n await this.configManager.loadConfig();\n\n const availableProviders = this.configManager.getConfiguredProviders();\n if (availableProviders.length === 0) {\n console.log(\n chalk.red('\\n❌ Nenhum provedor configurado. Configure um provedor primeiro.\\n')\n );\n return;\n }\n\n console.log(chalk.cyan('\\n🤖 Configurar Modelo'));\n console.log(chalk.gray('(pressione ESC para cancelar)\\n'));\n\n const purpose = await selectWithEsc<ModelPurpose>({\n message: 'Para qual finalidade?',\n choices: MODEL_PURPOSES.map((p) => ({\n name: `${p.label} - ${p.description}`,\n value: p.value,\n })),\n });\n\n if (purpose === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n\n const provider = await selectWithEsc<ProviderType>({\n message: 'Qual provedor?',\n choices: availableProviders.map((p) => ({\n name: PROVIDER_METADATA[p].name,\n value: p,\n })),\n });\n\n if (provider === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n\n const meta = PROVIDER_METADATA[provider];\n\n const usePopular = await confirmWithEsc({\n message: `Usar um dos modelos populares do ${meta.name}?`,\n default: true,\n });\n\n if (usePopular === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n\n let model: string | null;\n\n if (usePopular) {\n model = await selectWithEsc<string>({\n message: 'Escolha o modelo:',\n choices: [\n ...meta.popularModels.map((m) => ({ name: m, value: m })),\n { name: '➕ Outro modelo...', value: '__custom__' },\n ],\n });\n\n if (model === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n\n if (model === '__custom__') {\n model = await inputWithEsc({\n message: 'Nome do modelo:',\n default: meta.popularModels[0],\n });\n if (model === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n }\n } else {\n model = await inputWithEsc({\n message: 'Nome do modelo:',\n default: meta.popularModels[0],\n });\n if (model === null) {\n console.log(chalk.yellow('\\n❌ Cancelado.\\n'));\n return;\n }\n }\n\n await this.configManager.setModel(purpose, {\n provider,\n model,\n });\n\n const purposeLabel = MODEL_PURPOSES.find((p) => p.value === purpose)?.label;\n console.log(\n chalk.green(`\\n✓ Modelo para \"${purposeLabel}\" configurado: ${model}\\n`)\n );\n }\n}\n"],"names":["ConfigCommandsService","handleConfigCommand","args","smartInput","subcommand","useInquirerFlow","includes","pause","withEscHandler","initService","runInitialSetup","showConfig","addProviderInteractive","setModelInteractive","removeProviderInteractive","console","log","configManager","getConfigPath","showConfigMenu","resume","fn","result","withEsc","chalk","yellow","w","s","process","stdout","write","Colors","cyan","green","gray","bold","reset","loadConfig","repeat","action","askChoice","key","label","description","config","getConfig","red","providers","getConfiguredProviders","length","provider","meta","PROVIDER_METADATA","isConfigured","isProviderConfigured","status","name","purpose","MODEL_PURPOSES","modelConfig","models","value","providerName","padEnd","model","availableProviders","Object","keys","filter","p","selectWithEsc","message","choices","map","baseUrl","inputWithEsc","default","defaultBaseUrl","websiteUrl","apiKey","validate","v","useCustom","confirmWithEsc","addProvider","configuredProviders","confirmRemove","saveConfig","usePopular","popularModels","m","setModel","purposeLabel","find"],"mappings":"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"}