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,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "ConfigManagerService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ConfigManagerService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _promises = /*#__PURE__*/ _interop_require_wildcard(require("node:fs/promises"));
|
|
13
|
+
const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
|
|
14
|
+
const _jsyaml = /*#__PURE__*/ _interop_require_wildcard(require("js-yaml"));
|
|
15
|
+
const _os = require("os");
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
17
|
+
if (typeof WeakMap !== "function") return null;
|
|
18
|
+
var cacheBabelInterop = new WeakMap();
|
|
19
|
+
var cacheNodeInterop = new WeakMap();
|
|
20
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
21
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
22
|
+
})(nodeInterop);
|
|
23
|
+
}
|
|
24
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
25
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
29
|
+
return {
|
|
30
|
+
default: obj
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
34
|
+
if (cache && cache.has(obj)) {
|
|
35
|
+
return cache.get(obj);
|
|
36
|
+
}
|
|
37
|
+
var newObj = {
|
|
38
|
+
__proto__: null
|
|
39
|
+
};
|
|
40
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
41
|
+
for(var key in obj){
|
|
42
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
43
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
44
|
+
if (desc && (desc.get || desc.set)) {
|
|
45
|
+
Object.defineProperty(newObj, key, desc);
|
|
46
|
+
} else {
|
|
47
|
+
newObj[key] = obj[key];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
newObj.default = obj;
|
|
52
|
+
if (cache) {
|
|
53
|
+
cache.set(obj, newObj);
|
|
54
|
+
}
|
|
55
|
+
return newObj;
|
|
56
|
+
}
|
|
57
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
58
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
59
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
60
|
+
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;
|
|
61
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
62
|
+
}
|
|
63
|
+
const CONFIG_VERSION = 1;
|
|
64
|
+
const GLOBAL_CONFIG_DIR = _path.join((0, _os.homedir)(), '.cast');
|
|
65
|
+
const CONFIG_FILE = _path.join(GLOBAL_CONFIG_DIR, 'config.yaml');
|
|
66
|
+
const DEFAULT_CONFIG = {
|
|
67
|
+
version: CONFIG_VERSION,
|
|
68
|
+
providers: {},
|
|
69
|
+
models: {
|
|
70
|
+
default: {
|
|
71
|
+
provider: 'openai',
|
|
72
|
+
model: 'gpt-4.1-nano'
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
let ConfigManagerService = class ConfigManagerService {
|
|
77
|
+
async loadConfig() {
|
|
78
|
+
try {
|
|
79
|
+
const content = await _promises.readFile(CONFIG_FILE, 'utf-8');
|
|
80
|
+
const parsed = _jsyaml.load(content);
|
|
81
|
+
this.config = this.mergeWithDefaults(parsed);
|
|
82
|
+
this.loaded = true;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
if (error.code !== 'ENOENT') {
|
|
85
|
+
console.warn('Warning: Error reading config file:', error.message);
|
|
86
|
+
}
|
|
87
|
+
this.config = {
|
|
88
|
+
...DEFAULT_CONFIG
|
|
89
|
+
};
|
|
90
|
+
this.loaded = true;
|
|
91
|
+
}
|
|
92
|
+
return this.config;
|
|
93
|
+
}
|
|
94
|
+
async saveConfig(config) {
|
|
95
|
+
const configToSave = config || this.config;
|
|
96
|
+
configToSave.version = CONFIG_VERSION;
|
|
97
|
+
await _promises.mkdir(GLOBAL_CONFIG_DIR, {
|
|
98
|
+
recursive: true
|
|
99
|
+
});
|
|
100
|
+
await _promises.writeFile(CONFIG_FILE, _jsyaml.dump(configToSave, {
|
|
101
|
+
indent: 2,
|
|
102
|
+
lineWidth: 100
|
|
103
|
+
}), 'utf-8');
|
|
104
|
+
if (config) {
|
|
105
|
+
this.config = config;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async configExists() {
|
|
109
|
+
try {
|
|
110
|
+
await _promises.access(CONFIG_FILE);
|
|
111
|
+
return true;
|
|
112
|
+
} catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
getConfig() {
|
|
117
|
+
if (!this.loaded) {
|
|
118
|
+
throw new Error('Config not loaded. Call loadConfig() first.');
|
|
119
|
+
}
|
|
120
|
+
return this.config;
|
|
121
|
+
}
|
|
122
|
+
getModelConfig(purpose = 'default') {
|
|
123
|
+
return this.config.models[purpose] || this.config.models.default;
|
|
124
|
+
}
|
|
125
|
+
getProviderConfig(provider) {
|
|
126
|
+
return this.config.providers[provider];
|
|
127
|
+
}
|
|
128
|
+
getConfiguredProviders() {
|
|
129
|
+
return Object.keys(this.config.providers);
|
|
130
|
+
}
|
|
131
|
+
isProviderConfigured(provider) {
|
|
132
|
+
const config = this.config.providers[provider];
|
|
133
|
+
if (!config) return false;
|
|
134
|
+
if (provider === 'ollama') {
|
|
135
|
+
return !!config.baseUrl;
|
|
136
|
+
}
|
|
137
|
+
return !!config.apiKey;
|
|
138
|
+
}
|
|
139
|
+
async addProvider(provider, config) {
|
|
140
|
+
if (!this.config.providers) {
|
|
141
|
+
this.config.providers = {};
|
|
142
|
+
}
|
|
143
|
+
this.config.providers[provider] = config;
|
|
144
|
+
await this.saveConfig();
|
|
145
|
+
}
|
|
146
|
+
async setModel(purpose, modelConfig) {
|
|
147
|
+
if (!this.config.models) {
|
|
148
|
+
this.config.models = {};
|
|
149
|
+
}
|
|
150
|
+
this.config.models[purpose] = modelConfig;
|
|
151
|
+
await this.saveConfig();
|
|
152
|
+
}
|
|
153
|
+
getConfigPath() {
|
|
154
|
+
return CONFIG_FILE;
|
|
155
|
+
}
|
|
156
|
+
mergeWithDefaults(parsed) {
|
|
157
|
+
return {
|
|
158
|
+
version: parsed.version || CONFIG_VERSION,
|
|
159
|
+
providers: parsed.providers || {},
|
|
160
|
+
models: {
|
|
161
|
+
...DEFAULT_CONFIG.models,
|
|
162
|
+
...parsed.models || {}
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
constructor(){
|
|
167
|
+
this.config = DEFAULT_CONFIG;
|
|
168
|
+
this.loaded = false;
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
ConfigManagerService = _ts_decorate([
|
|
172
|
+
(0, _common.Injectable)()
|
|
173
|
+
], ConfigManagerService);
|
|
174
|
+
|
|
175
|
+
//# sourceMappingURL=config-manager.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/config/services/config-manager.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport * as yaml from 'js-yaml';\nimport { homedir } from 'os';\nimport {\n CastConfig,\n ModelConfig,\n ModelPurpose,\n ProviderType,\n ProvidersConfig,\n} from '../types/config.types';\n\nconst CONFIG_VERSION = 1;\nconst GLOBAL_CONFIG_DIR = path.join(homedir(), '.cast');\nconst CONFIG_FILE = path.join(GLOBAL_CONFIG_DIR, 'config.yaml');\n\nconst DEFAULT_CONFIG: CastConfig = {\n version: CONFIG_VERSION,\n providers: {},\n models: {\n default: {\n provider: 'openai',\n model: 'gpt-4.1-nano',\n },\n },\n};\n\n@Injectable()\nexport class ConfigManagerService {\n private config: CastConfig = DEFAULT_CONFIG;\n private loaded = false;\n\n async loadConfig(): Promise<CastConfig> {\n try {\n const content = await fs.readFile(CONFIG_FILE, 'utf-8');\n const parsed = yaml.load(content) as CastConfig;\n this.config = this.mergeWithDefaults(parsed);\n this.loaded = true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n console.warn('Warning: Error reading config file:', (error as Error).message);\n }\n this.config = { ...DEFAULT_CONFIG };\n this.loaded = true;\n }\n return this.config;\n }\n\n async saveConfig(config?: CastConfig): Promise<void> {\n const configToSave = config || this.config;\n configToSave.version = CONFIG_VERSION;\n\n await fs.mkdir(GLOBAL_CONFIG_DIR, { recursive: true });\n await fs.writeFile(\n CONFIG_FILE,\n yaml.dump(configToSave, { indent: 2, lineWidth: 100 }),\n 'utf-8'\n );\n \n if (config) {\n this.config = config;\n }\n }\n\n async configExists(): Promise<boolean> {\n try {\n await fs.access(CONFIG_FILE);\n return true;\n } catch {\n return false;\n }\n }\n\n getConfig(): CastConfig {\n if (!this.loaded) {\n throw new Error('Config not loaded. Call loadConfig() first.');\n }\n return this.config;\n }\n\n getModelConfig(purpose: ModelPurpose = 'default'): ModelConfig | undefined {\n return this.config.models[purpose] || this.config.models.default;\n }\n\n getProviderConfig<T extends ProviderType>(\n provider: T\n ): ProvidersConfig[T] | undefined {\n return this.config.providers[provider];\n }\n\n getConfiguredProviders(): ProviderType[] {\n return Object.keys(this.config.providers) as ProviderType[];\n }\n\n isProviderConfigured(provider: ProviderType): boolean {\n const config = this.config.providers[provider];\n if (!config) return false;\n\n if (provider === 'ollama') {\n return !!(config as { baseUrl?: string }).baseUrl;\n }\n\n return !!(config as { apiKey?: string }).apiKey;\n }\n\n async addProvider(\n provider: ProviderType,\n config: { apiKey?: string; baseUrl?: string }\n ): Promise<void> {\n if (!this.config.providers) {\n this.config.providers = {};\n }\n this.config.providers[provider] = config;\n await this.saveConfig();\n }\n\n async setModel(purpose: ModelPurpose, modelConfig: ModelConfig): Promise<void> {\n if (!this.config.models) {\n this.config.models = {};\n }\n this.config.models[purpose] = modelConfig;\n await this.saveConfig();\n }\n\n getConfigPath(): string {\n return CONFIG_FILE;\n }\n\n private mergeWithDefaults(parsed: CastConfig): CastConfig {\n return {\n version: parsed.version || CONFIG_VERSION,\n providers: parsed.providers || {},\n models: {\n ...DEFAULT_CONFIG.models,\n ...(parsed.models || {}),\n },\n };\n }\n}\n"],"names":["ConfigManagerService","CONFIG_VERSION","GLOBAL_CONFIG_DIR","path","join","homedir","CONFIG_FILE","DEFAULT_CONFIG","version","providers","models","default","provider","model","loadConfig","content","fs","readFile","parsed","yaml","load","config","mergeWithDefaults","loaded","error","code","console","warn","message","saveConfig","configToSave","mkdir","recursive","writeFile","dump","indent","lineWidth","configExists","access","getConfig","Error","getModelConfig","purpose","getProviderConfig","getConfiguredProviders","Object","keys","isProviderConfigured","baseUrl","apiKey","addProvider","setModel","modelConfig","getConfigPath"],"mappings":"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"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "InitConfigService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return InitConfigService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _prompts = require("@inquirer/prompts");
|
|
13
|
+
const _chalk = /*#__PURE__*/ _interop_require_default(require("chalk"));
|
|
14
|
+
const _configmanagerservice = require("./config-manager.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 InitConfigService = class InitConfigService {
|
|
32
|
+
async runInitialSetup() {
|
|
33
|
+
console.log(_chalk.default.cyan.bold('\n🚀 Bem-vindo ao Cast Code!\n'));
|
|
34
|
+
console.log('Vamos configurar seus provedores de IA e modelos. ' + 'Você pode configurar múltiplos provedores e atribuir modelos diferentes para diferentes tarefas.\n');
|
|
35
|
+
console.log(_chalk.default.gray('(pressione ESC a qualquer momento para cancelar)\n'));
|
|
36
|
+
const config = {
|
|
37
|
+
version: 1,
|
|
38
|
+
providers: {},
|
|
39
|
+
models: {}
|
|
40
|
+
};
|
|
41
|
+
const selectedProviders = await this.selectProviders();
|
|
42
|
+
if (selectedProviders.length === 0) {
|
|
43
|
+
console.log(_chalk.default.yellow('Nenhum provedor selecionado. Configuração cancelada.'));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
for (const provider of selectedProviders){
|
|
47
|
+
console.log(_chalk.default.cyan(`\n📦 Configurando ${_configtypes.PROVIDER_METADATA[provider].name}...`));
|
|
48
|
+
const providerConfig = await this.configureProvider(provider);
|
|
49
|
+
if (providerConfig === null) {
|
|
50
|
+
console.log(_chalk.default.yellow('\n❌ Configuração cancelada.\n'));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (providerConfig) {
|
|
54
|
+
config.providers[provider] = providerConfig;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
console.log(_chalk.default.cyan('\n🤖 Configurando Modelos por Finalidade\n'));
|
|
58
|
+
console.log('Agora você pode configurar diferentes modelos para diferentes tarefas. ' + 'Por exemplo, usar um modelo mais barato para sub-agentes, ou um mais poderoso para arquitetura.\n');
|
|
59
|
+
const availableProviders = selectedProviders.filter((p)=>config.providers[p]);
|
|
60
|
+
const modelsConfigured = await this.configureModels(config, availableProviders);
|
|
61
|
+
if (!modelsConfigured) {
|
|
62
|
+
console.log(_chalk.default.yellow('\n❌ Configuração cancelada.\n'));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
await this.configManager.saveConfig(config);
|
|
66
|
+
console.log(_chalk.default.green.bold('\n✅ Configuração salva com sucesso!\n'));
|
|
67
|
+
console.log(`Arquivo de configuração: ${_chalk.default.gray(this.configManager.getConfigPath())}\n`);
|
|
68
|
+
console.log(_chalk.default.cyan('Próximos passos:'));
|
|
69
|
+
console.log(' • Rode "cast" para iniciar a CLI');
|
|
70
|
+
console.log(' • Use "cast config" para editar as configurações depois');
|
|
71
|
+
console.log();
|
|
72
|
+
}
|
|
73
|
+
async selectProviders() {
|
|
74
|
+
const choices = [
|
|
75
|
+
...Object.values(_configtypes.PROVIDER_METADATA).map((meta)=>({
|
|
76
|
+
name: `${meta.name} - ${meta.description}`,
|
|
77
|
+
value: meta.type,
|
|
78
|
+
checked: meta.type === 'openai'
|
|
79
|
+
})),
|
|
80
|
+
new _prompts.Separator(),
|
|
81
|
+
{
|
|
82
|
+
name: 'Nenhum (cancelar)',
|
|
83
|
+
value: 'none'
|
|
84
|
+
}
|
|
85
|
+
];
|
|
86
|
+
try {
|
|
87
|
+
const selected = await (0, _prompts.checkbox)({
|
|
88
|
+
message: 'Selecione os provedores de IA que deseja configurar:',
|
|
89
|
+
choices,
|
|
90
|
+
pageSize: 12
|
|
91
|
+
});
|
|
92
|
+
return selected.filter((s)=>s !== 'none');
|
|
93
|
+
} catch (error) {
|
|
94
|
+
if (error instanceof _promptswithesc.CancelledPromptError || error.name === 'CancelledPromptError') {
|
|
95
|
+
console.log(_chalk.default.yellow('\n\n❌ Cancelado pelo usuário.\n'));
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async configureProvider(provider) {
|
|
102
|
+
const meta = _configtypes.PROVIDER_METADATA[provider];
|
|
103
|
+
if (provider === 'ollama') {
|
|
104
|
+
const baseUrl = await (0, _promptswithesc.inputWithEsc)({
|
|
105
|
+
message: 'URL do servidor Ollama:',
|
|
106
|
+
default: meta.defaultBaseUrl
|
|
107
|
+
});
|
|
108
|
+
if (baseUrl === null) return null;
|
|
109
|
+
return {
|
|
110
|
+
baseUrl
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
console.log(_chalk.default.gray(` → Obtenha sua API key em: ${meta.websiteUrl}`));
|
|
114
|
+
const apiKey = await (0, _promptswithesc.inputWithEsc)({
|
|
115
|
+
message: `API Key para ${meta.name}:`,
|
|
116
|
+
validate: (value)=>{
|
|
117
|
+
if (!value || value.trim().length < 10) {
|
|
118
|
+
return 'Por favor, insira uma API key válida';
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
if (apiKey === null) return null;
|
|
124
|
+
const useCustomUrl = await (0, _promptswithesc.confirmWithEsc)({
|
|
125
|
+
message: 'Usar URL de API customizada (ex: OpenRouter, proxy)?',
|
|
126
|
+
default: false
|
|
127
|
+
});
|
|
128
|
+
if (useCustomUrl === null) return null;
|
|
129
|
+
let baseUrl;
|
|
130
|
+
if (useCustomUrl) {
|
|
131
|
+
baseUrl = await (0, _promptswithesc.inputWithEsc)({
|
|
132
|
+
message: 'URL da API:',
|
|
133
|
+
default: meta.defaultBaseUrl
|
|
134
|
+
});
|
|
135
|
+
if (baseUrl === null) return null;
|
|
136
|
+
}
|
|
137
|
+
console.log(_chalk.default.gray(` → Modelos populares: ${meta.popularModels.join(', ')}`));
|
|
138
|
+
return {
|
|
139
|
+
apiKey,
|
|
140
|
+
baseUrl
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
async configureModels(config, availableProviders) {
|
|
144
|
+
console.log(_chalk.default.yellow('→ Configurando modelo padrão (obrigatório)\n'));
|
|
145
|
+
const defaultModel = await this.selectModelConfig('default', availableProviders, config.providers);
|
|
146
|
+
if (defaultModel === null) return false;
|
|
147
|
+
config.models.default = defaultModel;
|
|
148
|
+
const configureOthers = await (0, _promptswithesc.confirmWithEsc)({
|
|
149
|
+
message: 'Deseja configurar modelos específicos para outras finalidades?',
|
|
150
|
+
default: true
|
|
151
|
+
});
|
|
152
|
+
if (configureOthers === null) return false;
|
|
153
|
+
if (!configureOthers) {
|
|
154
|
+
_configtypes.MODEL_PURPOSES.forEach((purpose)=>{
|
|
155
|
+
if (purpose.value !== 'default') {
|
|
156
|
+
config.models[purpose.value] = {
|
|
157
|
+
...config.models.default
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
for (const purpose of _configtypes.MODEL_PURPOSES){
|
|
164
|
+
if (purpose.value === 'default') continue;
|
|
165
|
+
const shouldConfigure = await (0, _promptswithesc.confirmWithEsc)({
|
|
166
|
+
message: `Configurar modelo para "${purpose.label}" (${purpose.description})?`,
|
|
167
|
+
default: purpose.value === 'subAgent'
|
|
168
|
+
});
|
|
169
|
+
if (shouldConfigure === null) return false;
|
|
170
|
+
if (shouldConfigure) {
|
|
171
|
+
const modelConfig = await this.selectModelConfig(purpose.value, availableProviders, config.providers, config.models.default);
|
|
172
|
+
if (modelConfig === null) return false;
|
|
173
|
+
config.models[purpose.value] = modelConfig;
|
|
174
|
+
} else {
|
|
175
|
+
config.models[purpose.value] = {
|
|
176
|
+
...config.models.default
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
async selectModelConfig(purpose, availableProviders, providersConfig, defaultModel) {
|
|
183
|
+
const providerChoices = availableProviders.map((p)=>({
|
|
184
|
+
name: _configtypes.PROVIDER_METADATA[p].name,
|
|
185
|
+
value: p
|
|
186
|
+
}));
|
|
187
|
+
const provider = await (0, _promptswithesc.selectWithEsc)({
|
|
188
|
+
message: `Provedor para ${purpose}:`,
|
|
189
|
+
choices: providerChoices,
|
|
190
|
+
default: defaultModel?.provider
|
|
191
|
+
});
|
|
192
|
+
if (provider === null) return null;
|
|
193
|
+
const meta = _configtypes.PROVIDER_METADATA[provider];
|
|
194
|
+
const modelChoices = [
|
|
195
|
+
...meta.popularModels.map((m)=>({
|
|
196
|
+
name: m,
|
|
197
|
+
value: m
|
|
198
|
+
})),
|
|
199
|
+
{
|
|
200
|
+
name: 'Outro (customizado)',
|
|
201
|
+
value: '__custom__'
|
|
202
|
+
}
|
|
203
|
+
];
|
|
204
|
+
let model;
|
|
205
|
+
const selectedModel = await (0, _promptswithesc.selectWithEsc)({
|
|
206
|
+
message: `Modelo para ${purpose}:`,
|
|
207
|
+
choices: modelChoices,
|
|
208
|
+
default: defaultModel?.model
|
|
209
|
+
});
|
|
210
|
+
if (selectedModel === null) return null;
|
|
211
|
+
if (selectedModel === '__custom__') {
|
|
212
|
+
const customModel = await (0, _promptswithesc.inputWithEsc)({
|
|
213
|
+
message: 'Nome do modelo:',
|
|
214
|
+
default: defaultModel?.model || meta.popularModels[0]
|
|
215
|
+
});
|
|
216
|
+
if (customModel === null) return null;
|
|
217
|
+
model = customModel;
|
|
218
|
+
} else {
|
|
219
|
+
model = selectedModel;
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
provider,
|
|
223
|
+
model
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
constructor(configManager){
|
|
227
|
+
this.configManager = configManager;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
InitConfigService = _ts_decorate([
|
|
231
|
+
(0, _common.Injectable)(),
|
|
232
|
+
_ts_metadata("design:type", Function),
|
|
233
|
+
_ts_metadata("design:paramtypes", [
|
|
234
|
+
typeof _configmanagerservice.ConfigManagerService === "undefined" ? Object : _configmanagerservice.ConfigManagerService
|
|
235
|
+
])
|
|
236
|
+
], InitConfigService);
|
|
237
|
+
|
|
238
|
+
//# sourceMappingURL=init-config.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/config/services/init-config.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport {\n checkbox,\n Separator,\n} from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport { ConfigManagerService } from './config-manager.service';\nimport {\n ProviderType,\n PROVIDER_METADATA,\n MODEL_PURPOSES,\n ModelConfig,\n CastConfig,\n} from '../types/config.types';\nimport {\n selectWithEsc,\n inputWithEsc,\n confirmWithEsc,\n CancelledPromptError,\n} from '../../repl/utils/prompts-with-esc';\n\n@Injectable()\nexport class InitConfigService {\n constructor(private readonly configManager: ConfigManagerService) {}\n\n async runInitialSetup(): Promise<void> {\n console.log(chalk.cyan.bold('\\n🚀 Bem-vindo ao Cast Code!\\n'));\n console.log(\n 'Vamos configurar seus provedores de IA e modelos. ' +\n 'Você pode configurar múltiplos provedores e atribuir modelos diferentes para diferentes tarefas.\\n'\n );\n console.log(chalk.gray('(pressione ESC a qualquer momento para cancelar)\\n'));\n\n const config: CastConfig = {\n version: 1,\n providers: {},\n models: {},\n };\n\n const selectedProviders = await this.selectProviders();\n\n if (selectedProviders.length === 0) {\n console.log(chalk.yellow('Nenhum provedor selecionado. Configuração cancelada.'));\n return;\n }\n\n for (const provider of selectedProviders) {\n console.log(chalk.cyan(`\\n📦 Configurando ${PROVIDER_METADATA[provider].name}...`));\n const providerConfig = await this.configureProvider(provider);\n if (providerConfig === null) {\n console.log(chalk.yellow('\\n❌ Configuração cancelada.\\n'));\n return;\n }\n if (providerConfig) {\n config.providers[provider] = providerConfig;\n }\n }\n\n console.log(chalk.cyan('\\n🤖 Configurando Modelos por Finalidade\\n'));\n console.log(\n 'Agora você pode configurar diferentes modelos para diferentes tarefas. ' +\n 'Por exemplo, usar um modelo mais barato para sub-agentes, ou um mais poderoso para arquitetura.\\n'\n );\n\n const availableProviders = selectedProviders.filter(\n (p) => config.providers[p]\n );\n\n const modelsConfigured = await this.configureModels(config, availableProviders);\n if (!modelsConfigured) {\n console.log(chalk.yellow('\\n❌ Configuração cancelada.\\n'));\n return;\n }\n\n await this.configManager.saveConfig(config);\n\n console.log(chalk.green.bold('\\n✅ Configuração salva com sucesso!\\n'));\n console.log(`Arquivo de configuração: ${chalk.gray(this.configManager.getConfigPath())}\\n`);\n console.log(chalk.cyan('Próximos passos:'));\n console.log(' • Rode \"cast\" para iniciar a CLI');\n console.log(' • Use \"cast config\" para editar as configurações depois');\n console.log();\n }\n\n private async selectProviders(): Promise<ProviderType[]> {\n const choices = [\n ...Object.values(PROVIDER_METADATA).map((meta) => ({\n name: `${meta.name} - ${meta.description}`,\n value: meta.type,\n checked: meta.type === 'openai',\n })),\n new Separator(),\n {\n name: 'Nenhum (cancelar)',\n value: 'none' as ProviderType,\n },\n ];\n\n try {\n const selected = await checkbox<ProviderType>({\n message: 'Selecione os provedores de IA que deseja configurar:',\n choices,\n pageSize: 12,\n });\n\n return selected.filter((s): s is ProviderType => s !== 'none');\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error.name === 'CancelledPromptError') {\n console.log(chalk.yellow('\\n\\n❌ Cancelado pelo usuário.\\n'));\n return [];\n }\n throw error;\n }\n }\n\n private async configureProvider(\n provider: ProviderType\n ): Promise<{ apiKey?: string; baseUrl?: string } | null> {\n const meta = PROVIDER_METADATA[provider];\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) return null;\n return { baseUrl };\n }\n\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: (value) => {\n if (!value || value.trim().length < 10) {\n return 'Por favor, insira uma API key válida';\n }\n return true;\n },\n });\n\n if (apiKey === null) return null;\n\n const useCustomUrl = await confirmWithEsc({\n message: 'Usar URL de API customizada (ex: OpenRouter, proxy)?',\n default: false,\n });\n\n if (useCustomUrl === null) return null;\n\n let baseUrl: string | undefined;\n if (useCustomUrl) {\n baseUrl = await inputWithEsc({\n message: 'URL da API:',\n default: meta.defaultBaseUrl,\n });\n if (baseUrl === null) return null;\n }\n\n console.log(chalk.gray(` → Modelos populares: ${meta.popularModels.join(', ')}`));\n\n return { apiKey, baseUrl };\n }\n\n private async configureModels(\n config: CastConfig,\n availableProviders: ProviderType[]\n ): Promise<boolean> {\n console.log(chalk.yellow('→ Configurando modelo padrão (obrigatório)\\n'));\n const defaultModel = await this.selectModelConfig(\n 'default',\n availableProviders,\n config.providers\n );\n if (defaultModel === null) return false;\n config.models.default = defaultModel;\n\n const configureOthers = await confirmWithEsc({\n message: 'Deseja configurar modelos específicos para outras finalidades?',\n default: true,\n });\n\n if (configureOthers === null) return false;\n\n if (!configureOthers) {\n MODEL_PURPOSES.forEach((purpose) => {\n if (purpose.value !== 'default') {\n config.models[purpose.value] = { ...config.models.default };\n }\n });\n return true;\n }\n\n for (const purpose of MODEL_PURPOSES) {\n if (purpose.value === 'default') continue;\n\n const shouldConfigure = await confirmWithEsc({\n message: `Configurar modelo para \"${purpose.label}\" (${purpose.description})?`,\n default: purpose.value === 'subAgent',\n });\n\n if (shouldConfigure === null) return false;\n\n if (shouldConfigure) {\n const modelConfig = await this.selectModelConfig(\n purpose.value,\n availableProviders,\n config.providers,\n config.models.default\n );\n if (modelConfig === null) return false;\n config.models[purpose.value] = modelConfig;\n } else {\n config.models[purpose.value] = { ...config.models.default };\n }\n }\n\n return true;\n }\n\n private async selectModelConfig(\n purpose: string,\n availableProviders: ProviderType[],\n providersConfig: CastConfig['providers'],\n defaultModel?: ModelConfig\n ): Promise<ModelConfig | null> {\n const providerChoices = availableProviders.map((p) => ({\n name: PROVIDER_METADATA[p].name,\n value: p,\n }));\n\n const provider = await selectWithEsc<ProviderType>({\n message: `Provedor para ${purpose}:`,\n choices: providerChoices,\n default: defaultModel?.provider,\n });\n\n if (provider === null) return null;\n\n const meta = PROVIDER_METADATA[provider];\n\n const modelChoices = [\n ...meta.popularModels.map((m) => ({ name: m, value: m })),\n { name: 'Outro (customizado)', value: '__custom__' },\n ];\n\n let model: string;\n const selectedModel = await selectWithEsc<string>({\n message: `Modelo para ${purpose}:`,\n choices: modelChoices,\n default: defaultModel?.model,\n });\n\n if (selectedModel === null) return null;\n\n if (selectedModel === '__custom__') {\n const customModel = await inputWithEsc({\n message: 'Nome do modelo:',\n default: defaultModel?.model || meta.popularModels[0],\n });\n if (customModel === null) return null;\n model = customModel;\n } else {\n model = selectedModel;\n }\n\n return {\n provider,\n model,\n };\n }\n}\n"],"names":["InitConfigService","runInitialSetup","console","log","chalk","cyan","bold","gray","config","version","providers","models","selectedProviders","selectProviders","length","yellow","provider","PROVIDER_METADATA","name","providerConfig","configureProvider","availableProviders","filter","p","modelsConfigured","configureModels","configManager","saveConfig","green","getConfigPath","choices","Object","values","map","meta","description","value","type","checked","Separator","selected","checkbox","message","pageSize","s","error","CancelledPromptError","baseUrl","inputWithEsc","default","defaultBaseUrl","websiteUrl","apiKey","validate","trim","useCustomUrl","confirmWithEsc","popularModels","join","defaultModel","selectModelConfig","configureOthers","MODEL_PURPOSES","forEach","purpose","shouldConfigure","label","modelConfig","providersConfig","providerChoices","selectWithEsc","modelChoices","m","model","selectedModel","customModel"],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get MODEL_PURPOSES () {
|
|
13
|
+
return MODEL_PURPOSES;
|
|
14
|
+
},
|
|
15
|
+
get PROVIDER_METADATA () {
|
|
16
|
+
return PROVIDER_METADATA;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const PROVIDER_METADATA = {
|
|
20
|
+
openai: {
|
|
21
|
+
type: 'openai',
|
|
22
|
+
name: 'OpenAI',
|
|
23
|
+
description: 'GPT-4, GPT-4o, GPT-3.5 Turbo e outros',
|
|
24
|
+
requiresApiKey: true,
|
|
25
|
+
defaultBaseUrl: 'https://api.openai.com/v1',
|
|
26
|
+
websiteUrl: 'https://platform.openai.com',
|
|
27
|
+
popularModels: [
|
|
28
|
+
'gpt-5.2',
|
|
29
|
+
'gpt-5.1',
|
|
30
|
+
'gpt-5',
|
|
31
|
+
'gpt-5-mini',
|
|
32
|
+
'gpt-5-nano',
|
|
33
|
+
'gpt-4.1',
|
|
34
|
+
'gpt-4.1-mini',
|
|
35
|
+
'gpt-4.1-nano'
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
anthropic: {
|
|
39
|
+
type: 'anthropic',
|
|
40
|
+
name: 'Anthropic',
|
|
41
|
+
description: 'Claude 3.5 Sonnet, Claude 3 Opus, etc.',
|
|
42
|
+
requiresApiKey: true,
|
|
43
|
+
defaultBaseUrl: 'https://api.anthropic.com',
|
|
44
|
+
websiteUrl: 'https://console.anthropic.com',
|
|
45
|
+
popularModels: [
|
|
46
|
+
'claude-opus-4-1-20250805',
|
|
47
|
+
'claude-sonnet-4-20250514',
|
|
48
|
+
'claude-3-7-sonnet-20250219',
|
|
49
|
+
'claude-3-5-haiku-20241022'
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
gemini: {
|
|
53
|
+
type: 'gemini',
|
|
54
|
+
name: 'Google Gemini',
|
|
55
|
+
description: 'Gemini Pro, Gemini Ultra via Google AI Studio',
|
|
56
|
+
requiresApiKey: true,
|
|
57
|
+
defaultBaseUrl: 'https://generativelanguage.googleapis.com',
|
|
58
|
+
websiteUrl: 'https://ai.google.dev',
|
|
59
|
+
popularModels: [
|
|
60
|
+
'gemini-2.5-pro',
|
|
61
|
+
'gemini-2.5-flash',
|
|
62
|
+
'gemini-2.5-flash-lite',
|
|
63
|
+
'gemini-3-pro-preview',
|
|
64
|
+
'gemini-3-flash-preview'
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
kimi: {
|
|
68
|
+
type: 'kimi',
|
|
69
|
+
name: 'Moonshot Kimi',
|
|
70
|
+
description: 'Kimi K1, Kimi K2 - modelos chineses avançados',
|
|
71
|
+
requiresApiKey: true,
|
|
72
|
+
defaultBaseUrl: 'https://api.moonshot.cn/v1',
|
|
73
|
+
websiteUrl: 'https://platform.moonshot.cn',
|
|
74
|
+
popularModels: [
|
|
75
|
+
'kimi-k2-0905-preview',
|
|
76
|
+
'kimi-k2-turbo-preview',
|
|
77
|
+
'kimi-k2-thinking',
|
|
78
|
+
'kimi-k2-thinking-turbo'
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
deepseek: {
|
|
82
|
+
type: 'deepseek',
|
|
83
|
+
name: 'DeepSeek',
|
|
84
|
+
description: 'DeepSeek Chat, DeepSeek Coder',
|
|
85
|
+
requiresApiKey: true,
|
|
86
|
+
defaultBaseUrl: 'https://api.deepseek.com/v1',
|
|
87
|
+
websiteUrl: 'https://platform.deepseek.com',
|
|
88
|
+
popularModels: [
|
|
89
|
+
'deepseek-reasoner',
|
|
90
|
+
'deepseek-r1',
|
|
91
|
+
'deepseek-chat'
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
openrouter: {
|
|
95
|
+
type: 'openrouter',
|
|
96
|
+
name: 'OpenRouter',
|
|
97
|
+
description: 'Acesso a múltiplos modelos via uma API',
|
|
98
|
+
requiresApiKey: true,
|
|
99
|
+
defaultBaseUrl: 'https://openrouter.ai/api/v1',
|
|
100
|
+
websiteUrl: 'https://openrouter.ai',
|
|
101
|
+
popularModels: [
|
|
102
|
+
'openai/gpt-5',
|
|
103
|
+
'anthropic/claude-sonnet-4',
|
|
104
|
+
'google/gemini-2.5-pro',
|
|
105
|
+
'meta-llama/llama-3.1-70b-instruct'
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
ollama: {
|
|
109
|
+
type: 'ollama',
|
|
110
|
+
name: 'Ollama (Local)',
|
|
111
|
+
description: 'Modelos locais via Ollama - gratuito e privado',
|
|
112
|
+
requiresApiKey: false,
|
|
113
|
+
defaultBaseUrl: 'http://localhost:11434',
|
|
114
|
+
websiteUrl: 'https://ollama.com',
|
|
115
|
+
popularModels: [
|
|
116
|
+
'llama3.3',
|
|
117
|
+
'llama3.2',
|
|
118
|
+
'llama3.1',
|
|
119
|
+
'qwen3',
|
|
120
|
+
'gemma3',
|
|
121
|
+
'mistral'
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
const MODEL_PURPOSES = [
|
|
126
|
+
{
|
|
127
|
+
value: 'default',
|
|
128
|
+
label: 'Padrão',
|
|
129
|
+
description: 'Modelo principal para conversas gerais'
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
value: 'subAgent',
|
|
133
|
+
label: 'Sub-Agentes',
|
|
134
|
+
description: 'Modelo para tarefas paralelas (pode ser mais barato)'
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
value: 'coder',
|
|
138
|
+
label: 'Coder',
|
|
139
|
+
description: 'Modelo especializado em programação'
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
value: 'architect',
|
|
143
|
+
label: 'Architect',
|
|
144
|
+
description: 'Modelo para design de sistemas e arquitetura'
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
value: 'reviewer',
|
|
148
|
+
label: 'Reviewer',
|
|
149
|
+
description: 'Modelo para revisão de código'
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
value: 'planner',
|
|
153
|
+
label: 'Planner',
|
|
154
|
+
description: 'Modelo para planejamento de tarefas'
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
value: 'cheap',
|
|
158
|
+
label: 'Econômico',
|
|
159
|
+
description: 'Modelo barato para tarefas simples'
|
|
160
|
+
}
|
|
161
|
+
];
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=config.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/config/types/config.types.ts"],"sourcesContent":["export type ProviderType = \n | 'openai' \n | 'anthropic' \n | 'gemini' \n | 'kimi' \n | 'ollama' \n | 'deepseek'\n | 'openrouter';\n\nexport interface BaseProviderConfig {\n apiKey?: string;\n baseUrl?: string;\n}\n\nexport interface OpenAIConfig extends BaseProviderConfig {}\nexport interface AnthropicConfig extends BaseProviderConfig {}\nexport interface GeminiConfig extends BaseProviderConfig {}\nexport interface KimiConfig extends BaseProviderConfig {}\nexport interface DeepSeekConfig extends BaseProviderConfig {}\nexport interface OpenRouterConfig extends BaseProviderConfig {}\n\nexport interface OllamaConfig {\n baseUrl: string;\n}\n\nexport interface ProvidersConfig {\n openai?: OpenAIConfig;\n anthropic?: AnthropicConfig;\n gemini?: GeminiConfig;\n kimi?: KimiConfig;\n deepseek?: DeepSeekConfig;\n openrouter?: OpenRouterConfig;\n ollama?: OllamaConfig;\n}\n\nexport interface ModelConfig {\n provider: ProviderType;\n model: string;\n temperature?: number;\n maxTokens?: number;\n}\n\nexport type ModelPurpose = \n | 'default' \n | 'subAgent' \n | 'coder' \n | 'architect' \n | 'reviewer' \n | 'planner' \n | 'cheap';\n\nexport type ModelsConfig = Partial<Record<ModelPurpose, ModelConfig>>;\n\nexport interface CastConfig {\n version: number;\n providers: ProvidersConfig;\n models: ModelsConfig;\n}\n\nexport interface ProviderMetadata {\n type: ProviderType;\n name: string;\n description: string;\n requiresApiKey: boolean;\n defaultBaseUrl?: string;\n websiteUrl: string;\n popularModels: string[];\n}\n\nexport const PROVIDER_METADATA: Record<ProviderType, ProviderMetadata> = {\n openai: {\n type: 'openai',\n name: 'OpenAI',\n description: 'GPT-4, GPT-4o, GPT-3.5 Turbo e outros',\n requiresApiKey: true,\n defaultBaseUrl: 'https://api.openai.com/v1',\n websiteUrl: 'https://platform.openai.com',\n popularModels: [\n 'gpt-5.2',\n 'gpt-5.1',\n 'gpt-5',\n 'gpt-5-mini',\n 'gpt-5-nano',\n 'gpt-4.1',\n 'gpt-4.1-mini',\n 'gpt-4.1-nano',\n ],\n },\n anthropic: {\n type: 'anthropic',\n name: 'Anthropic',\n description: 'Claude 3.5 Sonnet, Claude 3 Opus, etc.',\n requiresApiKey: true,\n defaultBaseUrl: 'https://api.anthropic.com',\n websiteUrl: 'https://console.anthropic.com',\n popularModels: [\n 'claude-opus-4-1-20250805',\n 'claude-sonnet-4-20250514',\n 'claude-3-7-sonnet-20250219',\n 'claude-3-5-haiku-20241022',\n ],\n },\n gemini: {\n type: 'gemini',\n name: 'Google Gemini',\n description: 'Gemini Pro, Gemini Ultra via Google AI Studio',\n requiresApiKey: true,\n defaultBaseUrl: 'https://generativelanguage.googleapis.com',\n websiteUrl: 'https://ai.google.dev',\n popularModels: [\n 'gemini-2.5-pro',\n 'gemini-2.5-flash',\n 'gemini-2.5-flash-lite',\n 'gemini-3-pro-preview',\n 'gemini-3-flash-preview',\n ],\n },\n kimi: {\n type: 'kimi',\n name: 'Moonshot Kimi',\n description: 'Kimi K1, Kimi K2 - modelos chineses avançados',\n requiresApiKey: true,\n defaultBaseUrl: 'https://api.moonshot.cn/v1',\n websiteUrl: 'https://platform.moonshot.cn',\n popularModels: ['kimi-k2-0905-preview', 'kimi-k2-turbo-preview', 'kimi-k2-thinking', 'kimi-k2-thinking-turbo'],\n },\n deepseek: {\n type: 'deepseek',\n name: 'DeepSeek',\n description: 'DeepSeek Chat, DeepSeek Coder',\n requiresApiKey: true,\n defaultBaseUrl: 'https://api.deepseek.com/v1',\n websiteUrl: 'https://platform.deepseek.com',\n popularModels: ['deepseek-reasoner', 'deepseek-r1', 'deepseek-chat'],\n },\n openrouter: {\n type: 'openrouter',\n name: 'OpenRouter',\n description: 'Acesso a múltiplos modelos via uma API',\n requiresApiKey: true,\n defaultBaseUrl: 'https://openrouter.ai/api/v1',\n websiteUrl: 'https://openrouter.ai',\n popularModels: [\n 'openai/gpt-5',\n 'anthropic/claude-sonnet-4',\n 'google/gemini-2.5-pro',\n 'meta-llama/llama-3.1-70b-instruct',\n ],\n },\n ollama: {\n type: 'ollama',\n name: 'Ollama (Local)',\n description: 'Modelos locais via Ollama - gratuito e privado',\n requiresApiKey: false,\n defaultBaseUrl: 'http://localhost:11434',\n websiteUrl: 'https://ollama.com',\n popularModels: [\n 'llama3.3',\n 'llama3.2',\n 'llama3.1',\n 'qwen3',\n 'gemma3',\n 'mistral',\n ],\n },\n};\n\nexport const MODEL_PURPOSES: { value: ModelPurpose; label: string; description: string }[] = [\n { value: 'default', label: 'Padrão', description: 'Modelo principal para conversas gerais' },\n { value: 'subAgent', label: 'Sub-Agentes', description: 'Modelo para tarefas paralelas (pode ser mais barato)' },\n { value: 'coder', label: 'Coder', description: 'Modelo especializado em programação' },\n { value: 'architect', label: 'Architect', description: 'Modelo para design de sistemas e arquitetura' },\n { value: 'reviewer', label: 'Reviewer', description: 'Modelo para revisão de código' },\n { value: 'planner', label: 'Planner', description: 'Modelo para planejamento de tarefas' },\n { value: 'cheap', label: 'Econômico', description: 'Modelo barato para tarefas simples' },\n];\n"],"names":["MODEL_PURPOSES","PROVIDER_METADATA","openai","type","name","description","requiresApiKey","defaultBaseUrl","websiteUrl","popularModels","anthropic","gemini","kimi","deepseek","openrouter","ollama","value","label"],"mappings":";;;;;;;;;;;QAuKaA;eAAAA;;QAlGAC;eAAAA;;;AAAN,MAAMA,oBAA4D;IACvEC,QAAQ;QACNC,MAAM;QACNC,MAAM;QACNC,aAAa;QACbC,gBAAgB;QAChBC,gBAAgB;QAChBC,YAAY;QACZC,eAAe;YACb;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;IACH;IACAC,WAAW;QACTP,MAAM;QACNC,MAAM;QACNC,aAAa;QACbC,gBAAgB;QAChBC,gBAAgB;QAChBC,YAAY;QACZC,eAAe;YACb;YACA;YACA;YACA;SACD;IACH;IACAE,QAAQ;QACNR,MAAM;QACNC,MAAM;QACNC,aAAa;QACbC,gBAAgB;QAChBC,gBAAgB;QAChBC,YAAY;QACZC,eAAe;YACb;YACA;YACA;YACA;YACA;SACD;IACH;IACAG,MAAM;QACJT,MAAM;QACNC,MAAM;QACNC,aAAa;QACbC,gBAAgB;QAChBC,gBAAgB;QAChBC,YAAY;QACZC,eAAe;YAAC;YAAwB;YAAyB;YAAoB;SAAyB;IAChH;IACAI,UAAU;QACRV,MAAM;QACNC,MAAM;QACNC,aAAa;QACbC,gBAAgB;QAChBC,gBAAgB;QAChBC,YAAY;QACZC,eAAe;YAAC;YAAqB;YAAe;SAAgB;IACtE;IACAK,YAAY;QACVX,MAAM;QACNC,MAAM;QACNC,aAAa;QACbC,gBAAgB;QAChBC,gBAAgB;QAChBC,YAAY;QACZC,eAAe;YACb;YACA;YACA;YACA;SACD;IACH;IACAM,QAAQ;QACNZ,MAAM;QACNC,MAAM;QACNC,aAAa;QACbC,gBAAgB;QAChBC,gBAAgB;QAChBC,YAAY;QACZC,eAAe;YACb;YACA;YACA;YACA;YACA;YACA;SACD;IACH;AACF;AAEO,MAAMT,iBAAgF;IAC3F;QAAEgB,OAAO;QAAWC,OAAO;QAAUZ,aAAa;IAAyC;IAC3F;QAAEW,OAAO;QAAYC,OAAO;QAAeZ,aAAa;IAAuD;IAC/G;QAAEW,OAAO;QAASC,OAAO;QAASZ,aAAa;IAAsC;IACrF;QAAEW,OAAO;QAAaC,OAAO;QAAaZ,aAAa;IAA+C;IACtG;QAAEW,OAAO;QAAYC,OAAO;QAAYZ,aAAa;IAAgC;IACrF;QAAEW,OAAO;QAAWC,OAAO;QAAWZ,aAAa;IAAsC;IACzF;QAAEW,OAAO;QAASC,OAAO;QAAaZ,aAAa;IAAqC;CACzF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
_export_star(require("./config.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/config/types/index.ts"],"sourcesContent":["export * from './config.types';\n"],"names":[],"mappings":";;;;qBAAc"}
|