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.
- package/LICENSE +21 -0
- package/README.md +217 -0
- package/dist/app.module.js +45 -0
- package/dist/app.module.js.map +1 -0
- package/dist/common/common.module.js +49 -0
- package/dist/common/common.module.js.map +1 -0
- package/dist/common/constants/index.js +105 -0
- package/dist/common/constants/index.js.map +1 -0
- package/dist/common/index.js +24 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/services/config.service.js +119 -0
- package/dist/common/services/config.service.js.map +1 -0
- package/dist/common/services/llm.service.js +56 -0
- package/dist/common/services/llm.service.js.map +1 -0
- package/dist/common/services/markdown-parser.service.js +101 -0
- package/dist/common/services/markdown-parser.service.js.map +1 -0
- package/dist/common/services/markdown-renderer.service.js +220 -0
- package/dist/common/services/markdown-renderer.service.js.map +1 -0
- package/dist/common/services/multi-llm.service.js +115 -0
- package/dist/common/services/multi-llm.service.js.map +1 -0
- package/dist/common/types/index.js +20 -0
- package/dist/common/types/index.js.map +1 -0
- package/dist/common/types/markdown.types.js +6 -0
- package/dist/common/types/markdown.types.js.map +1 -0
- package/dist/main.js +84 -0
- package/dist/main.js.map +1 -0
- package/dist/modules/agents/agents.module.js +43 -0
- package/dist/modules/agents/agents.module.js.map +1 -0
- package/dist/modules/agents/definitions/architect.md +35 -0
- package/dist/modules/agents/definitions/backend.md +43 -0
- package/dist/modules/agents/definitions/coder.md +34 -0
- package/dist/modules/agents/definitions/devops.md +42 -0
- package/dist/modules/agents/definitions/frontend.md +46 -0
- package/dist/modules/agents/definitions/reviewer.md +35 -0
- package/dist/modules/agents/definitions/tester.md +41 -0
- package/dist/modules/agents/index.js +23 -0
- package/dist/modules/agents/index.js.map +1 -0
- package/dist/modules/agents/services/agent-loader.service.js +150 -0
- package/dist/modules/agents/services/agent-loader.service.js.map +1 -0
- package/dist/modules/agents/services/agent-registry.service.js +108 -0
- package/dist/modules/agents/services/agent-registry.service.js.map +1 -0
- package/dist/modules/agents/types/agent.types.js +6 -0
- package/dist/modules/agents/types/agent.types.js.map +1 -0
- package/dist/modules/agents/types/index.js +20 -0
- package/dist/modules/agents/types/index.js.map +1 -0
- package/dist/modules/config/config.module.js +38 -0
- package/dist/modules/config/config.module.js.map +1 -0
- package/dist/modules/config/index.js +24 -0
- package/dist/modules/config/index.js.map +1 -0
- package/dist/modules/config/services/config-commands.service.js +405 -0
- package/dist/modules/config/services/config-commands.service.js.map +1 -0
- package/dist/modules/config/services/config-manager.service.js +175 -0
- package/dist/modules/config/services/config-manager.service.js.map +1 -0
- package/dist/modules/config/services/init-config.service.js +238 -0
- package/dist/modules/config/services/init-config.service.js.map +1 -0
- package/dist/modules/config/types/config.types.js +163 -0
- package/dist/modules/config/types/config.types.js.map +1 -0
- package/dist/modules/config/types/index.js +20 -0
- package/dist/modules/config/types/index.js.map +1 -0
- package/dist/modules/core/core.module.js +60 -0
- package/dist/modules/core/core.module.js.map +1 -0
- package/dist/modules/core/index.js +22 -0
- package/dist/modules/core/index.js.map +1 -0
- package/dist/modules/core/services/deep-agent.service.js +575 -0
- package/dist/modules/core/services/deep-agent.service.js.map +1 -0
- package/dist/modules/core/services/plan-mode.service.js +225 -0
- package/dist/modules/core/services/plan-mode.service.js.map +1 -0
- package/dist/modules/git/git.module.js +48 -0
- package/dist/modules/git/git.module.js.map +1 -0
- package/dist/modules/git/index.js +23 -0
- package/dist/modules/git/index.js.map +1 -0
- package/dist/modules/git/services/code-review.service.js +330 -0
- package/dist/modules/git/services/code-review.service.js.map +1 -0
- package/dist/modules/git/services/commit-generator.service.js +403 -0
- package/dist/modules/git/services/commit-generator.service.js.map +1 -0
- package/dist/modules/git/services/index.js +21 -0
- package/dist/modules/git/services/index.js.map +1 -0
- package/dist/modules/git/services/monorepo-detector.service.js +338 -0
- package/dist/modules/git/services/monorepo-detector.service.js.map +1 -0
- package/dist/modules/git/services/pr-generator.service.js +429 -0
- package/dist/modules/git/services/pr-generator.service.js.map +1 -0
- package/dist/modules/git/services/release-notes.service.js +426 -0
- package/dist/modules/git/services/release-notes.service.js.map +1 -0
- package/dist/modules/git/types/git.types.js +6 -0
- package/dist/modules/git/types/git.types.js.map +1 -0
- package/dist/modules/git/types/index.js +20 -0
- package/dist/modules/git/types/index.js.map +1 -0
- package/dist/modules/mcp/catalog/mcp-templates.js +606 -0
- package/dist/modules/mcp/catalog/mcp-templates.js.map +1 -0
- package/dist/modules/mcp/index.js +23 -0
- package/dist/modules/mcp/index.js.map +1 -0
- package/dist/modules/mcp/mcp.module.js +35 -0
- package/dist/modules/mcp/mcp.module.js.map +1 -0
- package/dist/modules/mcp/services/mcp-client.service.js +289 -0
- package/dist/modules/mcp/services/mcp-client.service.js.map +1 -0
- package/dist/modules/mcp/services/mcp-registry.service.js +197 -0
- package/dist/modules/mcp/services/mcp-registry.service.js.map +1 -0
- package/dist/modules/mcp/types/index.js +20 -0
- package/dist/modules/mcp/types/index.js.map +1 -0
- package/dist/modules/mcp/types/mcp.types.js +6 -0
- package/dist/modules/mcp/types/mcp.types.js.map +1 -0
- package/dist/modules/memory/index.js +23 -0
- package/dist/modules/memory/index.js.map +1 -0
- package/dist/modules/memory/memory.module.js +35 -0
- package/dist/modules/memory/memory.module.js.map +1 -0
- package/dist/modules/memory/services/memory-tools.service.js +78 -0
- package/dist/modules/memory/services/memory-tools.service.js.map +1 -0
- package/dist/modules/memory/services/memory.service.js +169 -0
- package/dist/modules/memory/services/memory.service.js.map +1 -0
- package/dist/modules/memory/types/index.js +20 -0
- package/dist/modules/memory/types/index.js.map +1 -0
- package/dist/modules/memory/types/memory.types.js +6 -0
- package/dist/modules/memory/types/memory.types.js.map +1 -0
- package/dist/modules/mentions/index.js +22 -0
- package/dist/modules/mentions/index.js.map +1 -0
- package/dist/modules/mentions/mentions.module.js +32 -0
- package/dist/modules/mentions/mentions.module.js.map +1 -0
- package/dist/modules/mentions/services/mentions.service.js +336 -0
- package/dist/modules/mentions/services/mentions.service.js.map +1 -0
- package/dist/modules/mentions/types/index.js +20 -0
- package/dist/modules/mentions/types/index.js.map +1 -0
- package/dist/modules/mentions/types/mention.types.js +19 -0
- package/dist/modules/mentions/types/mention.types.js.map +1 -0
- package/dist/modules/permissions/index.js +23 -0
- package/dist/modules/permissions/index.js.map +1 -0
- package/dist/modules/permissions/permissions.module.js +35 -0
- package/dist/modules/permissions/permissions.module.js.map +1 -0
- package/dist/modules/permissions/services/permission.service.js +269 -0
- package/dist/modules/permissions/services/permission.service.js.map +1 -0
- package/dist/modules/permissions/services/prompt.service.js +116 -0
- package/dist/modules/permissions/services/prompt.service.js.map +1 -0
- package/dist/modules/permissions/types/permission.types.js +32 -0
- package/dist/modules/permissions/types/permission.types.js.map +1 -0
- package/dist/modules/project/index.js +24 -0
- package/dist/modules/project/index.js.map +1 -0
- package/dist/modules/project/project.module.js +38 -0
- package/dist/modules/project/project.module.js.map +1 -0
- package/dist/modules/project/services/project-analyzer.service.js +1063 -0
- package/dist/modules/project/services/project-analyzer.service.js.map +1 -0
- package/dist/modules/project/services/project-context.service.js +62 -0
- package/dist/modules/project/services/project-context.service.js.map +1 -0
- package/dist/modules/project/services/project-loader.service.js +147 -0
- package/dist/modules/project/services/project-loader.service.js.map +1 -0
- package/dist/modules/project/types/index.js +20 -0
- package/dist/modules/project/types/index.js.map +1 -0
- package/dist/modules/project/types/project.types.js +6 -0
- package/dist/modules/project/types/project.types.js.map +1 -0
- package/dist/modules/repl/index.js +21 -0
- package/dist/modules/repl/index.js.map +1 -0
- package/dist/modules/repl/repl.module.js +66 -0
- package/dist/modules/repl/repl.module.js.map +1 -0
- package/dist/modules/repl/services/commands/agent-commands.service.js +196 -0
- package/dist/modules/repl/services/commands/agent-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/git-commands.service.js +500 -0
- package/dist/modules/repl/services/commands/git-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/mcp-commands.service.js +579 -0
- package/dist/modules/repl/services/commands/mcp-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/project-commands.service.js +226 -0
- package/dist/modules/repl/services/commands/project-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/repl-commands.service.js +254 -0
- package/dist/modules/repl/services/commands/repl-commands.service.js.map +1 -0
- package/dist/modules/repl/services/repl.service.js +647 -0
- package/dist/modules/repl/services/repl.service.js.map +1 -0
- package/dist/modules/repl/services/smart-input.js +544 -0
- package/dist/modules/repl/services/smart-input.js.map +1 -0
- package/dist/modules/repl/services/welcome-screen.service.js +117 -0
- package/dist/modules/repl/services/welcome-screen.service.js.map +1 -0
- package/dist/modules/repl/utils/prompts-with-esc.js +187 -0
- package/dist/modules/repl/utils/prompts-with-esc.js.map +1 -0
- package/dist/modules/repl/utils/theme.js +185 -0
- package/dist/modules/repl/utils/theme.js.map +1 -0
- package/dist/modules/skills/definitions/general/file-operations.md +60 -0
- package/dist/modules/skills/definitions/general/git-operations.md +59 -0
- package/dist/modules/skills/definitions/general/planning.md +86 -0
- package/dist/modules/skills/definitions/general/search.md +59 -0
- package/dist/modules/skills/definitions/specialized/api-design.md +85 -0
- package/dist/modules/skills/definitions/specialized/database-operations.md +78 -0
- package/dist/modules/skills/definitions/specialized/frontend-bootstrap.md +71 -0
- package/dist/modules/skills/definitions/specialized/react-patterns.md +77 -0
- package/dist/modules/skills/definitions/specialized/testing-strategies.md +79 -0
- package/dist/modules/skills/index.js +23 -0
- package/dist/modules/skills/index.js.map +1 -0
- package/dist/modules/skills/services/skill-loader.service.js +130 -0
- package/dist/modules/skills/services/skill-loader.service.js.map +1 -0
- package/dist/modules/skills/services/skill-registry.service.js +96 -0
- package/dist/modules/skills/services/skill-registry.service.js.map +1 -0
- package/dist/modules/skills/skills.module.js +38 -0
- package/dist/modules/skills/skills.module.js.map +1 -0
- package/dist/modules/skills/types/index.js +20 -0
- package/dist/modules/skills/types/index.js.map +1 -0
- package/dist/modules/skills/types/skill.types.js +6 -0
- package/dist/modules/skills/types/skill.types.js.map +1 -0
- package/dist/modules/tasks/index.js +24 -0
- package/dist/modules/tasks/index.js.map +1 -0
- package/dist/modules/tasks/services/plan-executor.service.js +199 -0
- package/dist/modules/tasks/services/plan-executor.service.js.map +1 -0
- package/dist/modules/tasks/services/plan-mode.service.js +118 -0
- package/dist/modules/tasks/services/plan-mode.service.js.map +1 -0
- package/dist/modules/tasks/services/plan-persistence.service.js +148 -0
- package/dist/modules/tasks/services/plan-persistence.service.js.map +1 -0
- package/dist/modules/tasks/services/task-management.service.js +255 -0
- package/dist/modules/tasks/services/task-management.service.js.map +1 -0
- package/dist/modules/tasks/services/task-tools.service.js +270 -0
- package/dist/modules/tasks/services/task-tools.service.js.map +1 -0
- package/dist/modules/tasks/tasks.module.js +49 -0
- package/dist/modules/tasks/tasks.module.js.map +1 -0
- package/dist/modules/tasks/types/task.types.js +21 -0
- package/dist/modules/tasks/types/task.types.js.map +1 -0
- package/dist/modules/tools/index.js +24 -0
- package/dist/modules/tools/index.js.map +1 -0
- package/dist/modules/tools/services/filesystem-tools.service.js +450 -0
- package/dist/modules/tools/services/filesystem-tools.service.js.map +1 -0
- package/dist/modules/tools/services/search-tools.service.js +63 -0
- package/dist/modules/tools/services/search-tools.service.js.map +1 -0
- package/dist/modules/tools/services/shell-tools.service.js +194 -0
- package/dist/modules/tools/services/shell-tools.service.js.map +1 -0
- package/dist/modules/tools/services/tools-registry.service.js +83 -0
- package/dist/modules/tools/services/tools-registry.service.js.map +1 -0
- package/dist/modules/tools/tools.module.js +46 -0
- package/dist/modules/tools/tools.module.js.map +1 -0
- 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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"}
|