@sylphx/flow 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/package.json +10 -9
- package/src/commands/codebase-command.ts +168 -0
- package/src/commands/flow-command.ts +1137 -0
- package/src/commands/flow-orchestrator.ts +296 -0
- package/src/commands/hook-command.ts +444 -0
- package/src/commands/init-command.ts +92 -0
- package/src/commands/init-core.ts +322 -0
- package/src/commands/knowledge-command.ts +161 -0
- package/src/commands/run-command.ts +120 -0
- package/src/components/benchmark-monitor.tsx +331 -0
- package/src/components/reindex-progress.tsx +261 -0
- package/src/composables/functional/index.ts +14 -0
- package/src/composables/functional/useEnvironment.ts +171 -0
- package/src/composables/functional/useFileSystem.ts +139 -0
- package/src/composables/index.ts +5 -0
- package/src/composables/useEnv.ts +13 -0
- package/src/composables/useRuntimeConfig.ts +27 -0
- package/src/composables/useTargetConfig.ts +45 -0
- package/src/config/ai-config.ts +376 -0
- package/src/config/constants.ts +35 -0
- package/src/config/index.ts +27 -0
- package/src/config/rules.ts +43 -0
- package/src/config/servers.ts +371 -0
- package/src/config/targets.ts +126 -0
- package/src/core/agent-loader.ts +141 -0
- package/src/core/agent-manager.ts +174 -0
- package/src/core/ai-sdk.ts +603 -0
- package/src/core/app-factory.ts +381 -0
- package/src/core/builtin-agents.ts +9 -0
- package/src/core/command-system.ts +550 -0
- package/src/core/config-system.ts +550 -0
- package/src/core/connection-pool.ts +390 -0
- package/src/core/di-container.ts +155 -0
- package/src/core/error-handling.ts +519 -0
- package/src/core/formatting/bytes.test.ts +115 -0
- package/src/core/formatting/bytes.ts +64 -0
- package/src/core/functional/async.ts +313 -0
- package/src/core/functional/either.ts +109 -0
- package/src/core/functional/error-handler.ts +135 -0
- package/src/core/functional/error-types.ts +311 -0
- package/src/core/functional/index.ts +19 -0
- package/src/core/functional/option.ts +142 -0
- package/src/core/functional/pipe.ts +189 -0
- package/src/core/functional/result.ts +204 -0
- package/src/core/functional/validation.ts +138 -0
- package/src/core/headless-display.ts +96 -0
- package/src/core/index.ts +6 -0
- package/src/core/installers/file-installer.ts +303 -0
- package/src/core/installers/mcp-installer.ts +213 -0
- package/src/core/interfaces/index.ts +22 -0
- package/src/core/interfaces/repository.interface.ts +91 -0
- package/src/core/interfaces/service.interface.ts +133 -0
- package/src/core/interfaces.ts +129 -0
- package/src/core/loop-controller.ts +200 -0
- package/src/core/result.ts +351 -0
- package/src/core/rule-loader.ts +147 -0
- package/src/core/rule-manager.ts +240 -0
- package/src/core/service-config.ts +252 -0
- package/src/core/session-service.ts +121 -0
- package/src/core/state-detector.ts +389 -0
- package/src/core/storage-factory.ts +115 -0
- package/src/core/stream-handler.ts +288 -0
- package/src/core/target-manager.ts +161 -0
- package/src/core/type-utils.ts +427 -0
- package/src/core/unified-storage.ts +456 -0
- package/src/core/upgrade-manager.ts +300 -0
- package/src/core/validation/limit.test.ts +155 -0
- package/src/core/validation/limit.ts +46 -0
- package/src/core/validation/query.test.ts +44 -0
- package/src/core/validation/query.ts +20 -0
- package/src/db/auto-migrate.ts +322 -0
- package/src/db/base-database-client.ts +144 -0
- package/src/db/cache-db.ts +218 -0
- package/src/db/cache-schema.ts +75 -0
- package/src/db/database.ts +70 -0
- package/src/db/index.ts +252 -0
- package/src/db/memory-db.ts +153 -0
- package/src/db/memory-schema.ts +29 -0
- package/src/db/schema.ts +289 -0
- package/src/db/session-repository.ts +733 -0
- package/src/domains/codebase/index.ts +5 -0
- package/src/domains/codebase/tools.ts +139 -0
- package/src/domains/index.ts +8 -0
- package/src/domains/knowledge/index.ts +10 -0
- package/src/domains/knowledge/resources.ts +537 -0
- package/src/domains/knowledge/tools.ts +174 -0
- package/src/domains/utilities/index.ts +6 -0
- package/src/domains/utilities/time/index.ts +5 -0
- package/src/domains/utilities/time/tools.ts +291 -0
- package/src/index.ts +211 -0
- package/src/services/agent-service.ts +273 -0
- package/src/services/claude-config-service.ts +252 -0
- package/src/services/config-service.ts +258 -0
- package/src/services/evaluation-service.ts +271 -0
- package/src/services/functional/evaluation-logic.ts +296 -0
- package/src/services/functional/file-processor.ts +273 -0
- package/src/services/functional/index.ts +12 -0
- package/src/services/index.ts +13 -0
- package/src/services/mcp-service.ts +432 -0
- package/src/services/memory.service.ts +476 -0
- package/src/services/search/base-indexer.ts +156 -0
- package/src/services/search/codebase-indexer-types.ts +38 -0
- package/src/services/search/codebase-indexer.ts +647 -0
- package/src/services/search/embeddings-provider.ts +455 -0
- package/src/services/search/embeddings.ts +316 -0
- package/src/services/search/functional-indexer.ts +323 -0
- package/src/services/search/index.ts +27 -0
- package/src/services/search/indexer.ts +380 -0
- package/src/services/search/knowledge-indexer.ts +422 -0
- package/src/services/search/semantic-search.ts +244 -0
- package/src/services/search/tfidf.ts +559 -0
- package/src/services/search/unified-search-service.ts +888 -0
- package/src/services/smart-config-service.ts +385 -0
- package/src/services/storage/cache-storage.ts +487 -0
- package/src/services/storage/drizzle-storage.ts +581 -0
- package/src/services/storage/index.ts +15 -0
- package/src/services/storage/lancedb-vector-storage.ts +494 -0
- package/src/services/storage/memory-storage.ts +268 -0
- package/src/services/storage/separated-storage.ts +467 -0
- package/src/services/storage/vector-storage.ts +13 -0
- package/src/shared/agents/index.ts +63 -0
- package/src/shared/files/index.ts +99 -0
- package/src/shared/index.ts +32 -0
- package/src/shared/logging/index.ts +24 -0
- package/src/shared/processing/index.ts +153 -0
- package/src/shared/types/index.ts +25 -0
- package/src/targets/claude-code.ts +574 -0
- package/src/targets/functional/claude-code-logic.ts +185 -0
- package/src/targets/functional/index.ts +6 -0
- package/src/targets/opencode.ts +529 -0
- package/src/types/agent.types.ts +32 -0
- package/src/types/api/batch.ts +108 -0
- package/src/types/api/errors.ts +118 -0
- package/src/types/api/index.ts +55 -0
- package/src/types/api/requests.ts +76 -0
- package/src/types/api/responses.ts +180 -0
- package/src/types/api/websockets.ts +85 -0
- package/src/types/api.types.ts +9 -0
- package/src/types/benchmark.ts +49 -0
- package/src/types/cli.types.ts +87 -0
- package/src/types/common.types.ts +35 -0
- package/src/types/database.types.ts +510 -0
- package/src/types/mcp-config.types.ts +448 -0
- package/src/types/mcp.types.ts +69 -0
- package/src/types/memory-types.ts +63 -0
- package/src/types/provider.types.ts +28 -0
- package/src/types/rule.types.ts +24 -0
- package/src/types/session.types.ts +214 -0
- package/src/types/target-config.types.ts +295 -0
- package/src/types/target.types.ts +140 -0
- package/src/types/todo.types.ts +25 -0
- package/src/types.ts +40 -0
- package/src/utils/advanced-tokenizer.ts +191 -0
- package/src/utils/agent-enhancer.ts +114 -0
- package/src/utils/ai-model-fetcher.ts +19 -0
- package/src/utils/async-file-operations.ts +516 -0
- package/src/utils/audio-player.ts +345 -0
- package/src/utils/cli-output.ts +266 -0
- package/src/utils/codebase-helpers.ts +211 -0
- package/src/utils/console-ui.ts +79 -0
- package/src/utils/database-errors.ts +140 -0
- package/src/utils/debug-logger.ts +49 -0
- package/src/utils/error-handler.ts +53 -0
- package/src/utils/file-operations.ts +310 -0
- package/src/utils/file-scanner.ts +259 -0
- package/src/utils/functional/array.ts +355 -0
- package/src/utils/functional/index.ts +15 -0
- package/src/utils/functional/object.ts +279 -0
- package/src/utils/functional/string.ts +281 -0
- package/src/utils/functional.ts +543 -0
- package/src/utils/help.ts +20 -0
- package/src/utils/immutable-cache.ts +106 -0
- package/src/utils/index.ts +78 -0
- package/src/utils/jsonc.ts +158 -0
- package/src/utils/logger.ts +396 -0
- package/src/utils/mcp-config.ts +249 -0
- package/src/utils/memory-tui.ts +414 -0
- package/src/utils/models-dev.ts +91 -0
- package/src/utils/notifications.ts +169 -0
- package/src/utils/object-utils.ts +51 -0
- package/src/utils/parallel-operations.ts +487 -0
- package/src/utils/paths.ts +143 -0
- package/src/utils/process-manager.ts +155 -0
- package/src/utils/prompts.ts +120 -0
- package/src/utils/search-tool-builder.ts +214 -0
- package/src/utils/secret-utils.ts +179 -0
- package/src/utils/security.ts +537 -0
- package/src/utils/session-manager.ts +168 -0
- package/src/utils/session-title.ts +87 -0
- package/src/utils/settings.ts +182 -0
- package/src/utils/simplified-errors.ts +410 -0
- package/src/utils/sync-utils.ts +159 -0
- package/src/utils/target-config.ts +570 -0
- package/src/utils/target-utils.ts +394 -0
- package/src/utils/template-engine.ts +94 -0
- package/src/utils/test-audio.ts +71 -0
- package/src/utils/todo-context.ts +46 -0
- package/src/utils/token-counter.ts +288 -0
- package/dist/index.d.ts +0 -10
- package/dist/index.js +0 -59554
- package/dist/lancedb.linux-x64-gnu-b7f0jgsz.node +0 -0
- package/dist/lancedb.linux-x64-musl-tgcv22rx.node +0 -0
- package/dist/shared/chunk-25dwp0dp.js +0 -89
- package/dist/shared/chunk-3pjb6063.js +0 -208
- package/dist/shared/chunk-4d6ydpw7.js +0 -2854
- package/dist/shared/chunk-4wjcadjk.js +0 -225
- package/dist/shared/chunk-5j4w74t6.js +0 -30
- package/dist/shared/chunk-5j8m3dh3.js +0 -58
- package/dist/shared/chunk-5thh3qem.js +0 -91
- package/dist/shared/chunk-6g9xy73m.js +0 -252
- package/dist/shared/chunk-7eq34c42.js +0 -23
- package/dist/shared/chunk-c2gwgx3r.js +0 -115
- package/dist/shared/chunk-cjd3mk4c.js +0 -1320
- package/dist/shared/chunk-g5cv6703.js +0 -368
- package/dist/shared/chunk-hpkhykhq.js +0 -574
- package/dist/shared/chunk-m2322pdk.js +0 -122
- package/dist/shared/chunk-nd5fdvaq.js +0 -26
- package/dist/shared/chunk-pgd3m6zf.js +0 -108
- package/dist/shared/chunk-qk8n91hw.js +0 -494
- package/dist/shared/chunk-rkkn8szp.js +0 -16855
- package/dist/shared/chunk-t16rfxh0.js +0 -61
- package/dist/shared/chunk-t4fbfa5v.js +0 -19
- package/dist/shared/chunk-t77h86w6.js +0 -276
- package/dist/shared/chunk-v0ez4aef.js +0 -71
- package/dist/shared/chunk-v29j2r3s.js +0 -32051
- package/dist/shared/chunk-vfbc6ew5.js +0 -765
- package/dist/shared/chunk-vmeqwm1c.js +0 -204
- package/dist/shared/chunk-x66eh37x.js +0 -137
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ConfigService
|
|
3
|
-
} from "./chunk-x66eh37x.js";
|
|
4
|
-
import"./chunk-7eq34c42.js";
|
|
5
|
-
import"./chunk-5j4w74t6.js";
|
|
6
|
-
|
|
7
|
-
// src/services/smart-config-service.ts
|
|
8
|
-
import inquirer from "inquirer";
|
|
9
|
-
import chalk from "chalk";
|
|
10
|
-
|
|
11
|
-
// src/core/agent-loader.ts
|
|
12
|
-
import { readFile, readdir, access } from "node:fs/promises";
|
|
13
|
-
import { join, parse, relative, dirname } from "node:path";
|
|
14
|
-
import { homedir } from "node:os";
|
|
15
|
-
import { fileURLToPath } from "node:url";
|
|
16
|
-
import matter from "gray-matter";
|
|
17
|
-
async function loadAgentFromFile(filePath, isBuiltin = false, agentId) {
|
|
18
|
-
try {
|
|
19
|
-
const content = await readFile(filePath, "utf-8");
|
|
20
|
-
const { data, content: systemPrompt } = matter(content);
|
|
21
|
-
if (!data.name || typeof data.name !== "string") {
|
|
22
|
-
console.error(`Agent file ${filePath} missing required 'name' field`);
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
const metadata = {
|
|
26
|
-
name: data.name,
|
|
27
|
-
description: data.description || ""
|
|
28
|
-
};
|
|
29
|
-
const id = agentId || parse(filePath).name;
|
|
30
|
-
return {
|
|
31
|
-
id,
|
|
32
|
-
metadata,
|
|
33
|
-
systemPrompt: systemPrompt.trim(),
|
|
34
|
-
isBuiltin,
|
|
35
|
-
filePath
|
|
36
|
-
};
|
|
37
|
-
} catch (error) {
|
|
38
|
-
console.error(`Failed to load agent from ${filePath}:`, error);
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
async function loadAgentsFromDirectory(dirPath, isBuiltin = false) {
|
|
43
|
-
try {
|
|
44
|
-
const files = await readdir(dirPath, { recursive: true, withFileTypes: true });
|
|
45
|
-
const agentFiles = files.filter((f) => f.isFile() && f.name.endsWith(".md")).map((f) => {
|
|
46
|
-
const fullPath = join(f.parentPath || f.path, f.name);
|
|
47
|
-
const relativePath = relative(dirPath, fullPath).replace(/\.md$/, "");
|
|
48
|
-
return { fullPath, agentId: relativePath };
|
|
49
|
-
});
|
|
50
|
-
const agents = await Promise.all(agentFiles.map(({ fullPath, agentId }) => loadAgentFromFile(fullPath, isBuiltin, agentId)));
|
|
51
|
-
return agents.filter((agent) => agent !== null);
|
|
52
|
-
} catch (error) {
|
|
53
|
-
return [];
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
async function getSystemAgentsPath() {
|
|
57
|
-
const currentFile = fileURLToPath(import.meta.url);
|
|
58
|
-
const currentDir = dirname(currentFile);
|
|
59
|
-
const distPath = join(currentDir, "..", "assets", "agents");
|
|
60
|
-
const devPath = join(currentDir, "..", "..", "assets", "agents");
|
|
61
|
-
try {
|
|
62
|
-
await access(distPath);
|
|
63
|
-
return distPath;
|
|
64
|
-
} catch {
|
|
65
|
-
return devPath;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function getAgentSearchPaths(cwd) {
|
|
69
|
-
const globalPath = join(homedir(), ".sylphx-flow", "agents");
|
|
70
|
-
const projectPath = join(cwd, ".sylphx-flow", "agents");
|
|
71
|
-
return [globalPath, projectPath];
|
|
72
|
-
}
|
|
73
|
-
async function loadAllAgents(cwd, targetAgentDir) {
|
|
74
|
-
const systemPath = await getSystemAgentsPath();
|
|
75
|
-
const [globalPath, projectPath] = getAgentSearchPaths(cwd);
|
|
76
|
-
let allAgentPaths = [systemPath, globalPath, projectPath];
|
|
77
|
-
if (targetAgentDir) {
|
|
78
|
-
const targetPath = join(cwd, targetAgentDir);
|
|
79
|
-
allAgentPaths.push(targetPath);
|
|
80
|
-
}
|
|
81
|
-
const loadedAgentsPromises = allAgentPaths.map((path) => loadAgentsFromDirectory(path, path === systemPath));
|
|
82
|
-
const loadedAgentsArrays = await Promise.all(loadedAgentsPromises);
|
|
83
|
-
const agentMap = new Map;
|
|
84
|
-
for (const agentArray of loadedAgentsArrays) {
|
|
85
|
-
for (const agent of agentArray) {
|
|
86
|
-
agentMap.set(agent.id, agent);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return Array.from(agentMap.values());
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// src/services/smart-config-service.ts
|
|
93
|
-
class SmartConfigService {
|
|
94
|
-
static async initialSetup() {
|
|
95
|
-
console.log(chalk.cyan.bold(`\uD83D\uDD11 Initial Setup - Configure API Keys
|
|
96
|
-
`));
|
|
97
|
-
const userSettings = await ConfigService.loadHomeSettings();
|
|
98
|
-
const apiKeys = userSettings.apiKeys || {};
|
|
99
|
-
const providers = [
|
|
100
|
-
{ id: "kimi", name: "Kimi", hasKey: !!apiKeys.kimi },
|
|
101
|
-
{ id: "z.ai", name: "Z.ai (Recommended)", hasKey: !!apiKeys["z.ai"] }
|
|
102
|
-
];
|
|
103
|
-
const missingProviders = providers.filter((p) => !p.hasKey);
|
|
104
|
-
const existingProviders = providers.filter((p) => p.hasKey);
|
|
105
|
-
console.log(chalk.cyan(`Available providers:
|
|
106
|
-
`));
|
|
107
|
-
console.log(chalk.dim(" • Default (uses Claude Code configuration)"));
|
|
108
|
-
providers.forEach((p) => {
|
|
109
|
-
const status = p.hasKey ? chalk.green("✓") : chalk.yellow("○");
|
|
110
|
-
console.log(` ${status} ${p.name}`);
|
|
111
|
-
});
|
|
112
|
-
console.log("");
|
|
113
|
-
const { selectedProvider } = await inquirer.prompt([
|
|
114
|
-
{
|
|
115
|
-
type: "list",
|
|
116
|
-
name: "selectedProvider",
|
|
117
|
-
message: "Select provider:",
|
|
118
|
-
choices: [
|
|
119
|
-
{
|
|
120
|
-
name: "Default (Use Claude Code configuration)",
|
|
121
|
-
value: "default"
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
name: "Kimi",
|
|
125
|
-
value: "kimi"
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
name: "Z.ai (Recommended)",
|
|
129
|
-
value: "z.ai"
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
}
|
|
133
|
-
]);
|
|
134
|
-
if (selectedProvider !== "default") {
|
|
135
|
-
await this.configureSelectedProviders([selectedProvider], apiKeys);
|
|
136
|
-
} else {
|
|
137
|
-
console.log(chalk.dim("Using Claude Code default configuration."));
|
|
138
|
-
}
|
|
139
|
-
if (existingProviders.length > 0) {
|
|
140
|
-
console.log(chalk.green(`
|
|
141
|
-
✅ Already configured:`));
|
|
142
|
-
existingProviders.forEach((p) => {
|
|
143
|
-
console.log(chalk.dim(` • ${p.name}`));
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
await ConfigService.saveHomeSettings({ hasCompletedSetup: true });
|
|
147
|
-
console.log(chalk.green(`
|
|
148
|
-
✓ Setup complete!
|
|
149
|
-
`));
|
|
150
|
-
}
|
|
151
|
-
static async configureSelectedProviders(selectedProviders, existingApiKeys) {
|
|
152
|
-
for (const providerId of selectedProviders) {
|
|
153
|
-
const providerName = providerId === "kimi" ? "Kimi" : "Z.ai";
|
|
154
|
-
console.log(chalk.cyan(`
|
|
155
|
-
\uD83D\uDCCB Configure ${providerName}
|
|
156
|
-
`));
|
|
157
|
-
const { apiKey } = await inquirer.prompt([
|
|
158
|
-
{
|
|
159
|
-
type: "password",
|
|
160
|
-
name: "apiKey",
|
|
161
|
-
message: `Enter API Key for ${providerName}:`,
|
|
162
|
-
mask: "*",
|
|
163
|
-
validate: (input) => input.length > 10 || "API Key appears too short"
|
|
164
|
-
}
|
|
165
|
-
]);
|
|
166
|
-
existingApiKeys[providerId] = apiKey;
|
|
167
|
-
console.log(chalk.green(`✓ API Key configured for ${providerName}`));
|
|
168
|
-
}
|
|
169
|
-
await ConfigService.saveHomeSettings({ apiKeys: existingApiKeys });
|
|
170
|
-
}
|
|
171
|
-
static async setupDefaultPreferences() {
|
|
172
|
-
console.log(chalk.cyan(`⚙️ Setup Default Preferences
|
|
173
|
-
`));
|
|
174
|
-
const userSettings = await ConfigService.loadHomeSettings();
|
|
175
|
-
const availableProviders = ConfigService.getAvailableProviders(userSettings);
|
|
176
|
-
if (availableProviders.length === 0) {
|
|
177
|
-
console.log(chalk.yellow("⚠ No API keys configured yet. Skipping preferences setup."));
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
const { setupDefaults } = await inquirer.prompt([
|
|
181
|
-
{
|
|
182
|
-
type: "confirm",
|
|
183
|
-
name: "setupDefaults",
|
|
184
|
-
message: "Set up default preferences?",
|
|
185
|
-
default: true
|
|
186
|
-
}
|
|
187
|
-
]);
|
|
188
|
-
if (!setupDefaults) {
|
|
189
|
-
console.log(chalk.dim("Skipping preferences setup."));
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
if (availableProviders.length > 1) {
|
|
193
|
-
const { defaultProvider } = await inquirer.prompt([
|
|
194
|
-
{
|
|
195
|
-
type: "list",
|
|
196
|
-
name: "defaultProvider",
|
|
197
|
-
message: "Select default provider:",
|
|
198
|
-
choices: availableProviders.map((p) => ({
|
|
199
|
-
name: p.charAt(0).toUpperCase() + p.slice(1),
|
|
200
|
-
value: p
|
|
201
|
-
})),
|
|
202
|
-
default: userSettings.defaultProvider || availableProviders[0]
|
|
203
|
-
}
|
|
204
|
-
]);
|
|
205
|
-
userSettings.defaultProvider = defaultProvider;
|
|
206
|
-
}
|
|
207
|
-
const { useDefaultAgent } = await inquirer.prompt([
|
|
208
|
-
{
|
|
209
|
-
type: "confirm",
|
|
210
|
-
name: "useDefaultAgent",
|
|
211
|
-
message: "Set default agent?",
|
|
212
|
-
default: true
|
|
213
|
-
}
|
|
214
|
-
]);
|
|
215
|
-
if (useDefaultAgent) {
|
|
216
|
-
try {
|
|
217
|
-
const agents = await loadAllAgents(process.cwd());
|
|
218
|
-
if (agents.length > 0) {
|
|
219
|
-
const { defaultAgent } = await inquirer.prompt([
|
|
220
|
-
{
|
|
221
|
-
type: "list",
|
|
222
|
-
name: "defaultAgent",
|
|
223
|
-
message: "Select default agent:",
|
|
224
|
-
choices: agents.map((a) => ({
|
|
225
|
-
name: a.metadata.name || a.id,
|
|
226
|
-
value: a.id
|
|
227
|
-
})),
|
|
228
|
-
default: userSettings.defaultAgent || (agents.find((a) => a.id === "coder")?.id || agents[0].id)
|
|
229
|
-
}
|
|
230
|
-
]);
|
|
231
|
-
userSettings.defaultAgent = defaultAgent;
|
|
232
|
-
}
|
|
233
|
-
} catch (error) {
|
|
234
|
-
console.log(chalk.yellow('⚠ Could not load agents, using "coder" as default'));
|
|
235
|
-
userSettings.defaultAgent = "coder";
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
await ConfigService.saveHomeSettings(userSettings);
|
|
239
|
-
console.log(chalk.green("✓ Default preferences saved"));
|
|
240
|
-
}
|
|
241
|
-
static async selectRuntimeChoices(options) {
|
|
242
|
-
const config = await ConfigService.loadConfiguration();
|
|
243
|
-
const choices = {};
|
|
244
|
-
if (options.provider) {
|
|
245
|
-
choices.provider = options.provider;
|
|
246
|
-
} else if (options.selectProvider) {
|
|
247
|
-
choices.provider = await this.selectProvider(config.user);
|
|
248
|
-
} else if (config.user.defaultProvider) {
|
|
249
|
-
choices.provider = config.user.defaultProvider;
|
|
250
|
-
console.log(chalk.dim(` ✓ Provider: ${choices.provider}`));
|
|
251
|
-
} else {
|
|
252
|
-
choices.provider = await this.selectProvider(config.user);
|
|
253
|
-
}
|
|
254
|
-
if (options.agent) {
|
|
255
|
-
choices.agent = options.agent;
|
|
256
|
-
} else if (options.selectAgent) {
|
|
257
|
-
choices.agent = await this.selectAgent(config.user.defaultAgent);
|
|
258
|
-
} else if (config.user.defaultAgent) {
|
|
259
|
-
choices.agent = config.user.defaultAgent;
|
|
260
|
-
console.log(chalk.dim(` ✓ Agent: ${choices.agent}`));
|
|
261
|
-
} else {
|
|
262
|
-
choices.agent = await this.selectAgent(config.user.defaultAgent);
|
|
263
|
-
}
|
|
264
|
-
await ConfigService.saveHomeSettings({
|
|
265
|
-
defaultProvider: choices.provider,
|
|
266
|
-
defaultAgent: choices.agent
|
|
267
|
-
});
|
|
268
|
-
return choices;
|
|
269
|
-
}
|
|
270
|
-
static async selectProvider(userSettings) {
|
|
271
|
-
const apiKeys = userSettings.apiKeys || {};
|
|
272
|
-
const allProviders = [
|
|
273
|
-
{ id: "default", name: "Default (Claude Code configuration)", hasKey: true },
|
|
274
|
-
{ id: "kimi", name: "Kimi", hasKey: !!apiKeys.kimi },
|
|
275
|
-
{ id: "z.ai", name: "Z.ai (Recommended)", hasKey: !!apiKeys["z.ai"] }
|
|
276
|
-
];
|
|
277
|
-
const lastUsed = userSettings.defaultProvider;
|
|
278
|
-
const message = lastUsed ? `Select provider (last used: ${lastUsed}):` : "Select provider:";
|
|
279
|
-
const { provider } = await inquirer.prompt([
|
|
280
|
-
{
|
|
281
|
-
type: "list",
|
|
282
|
-
name: "provider",
|
|
283
|
-
message,
|
|
284
|
-
choices: allProviders.map((p) => ({
|
|
285
|
-
name: p.hasKey ? p.name : `${p.name} (Need API key)`,
|
|
286
|
-
value: p.id
|
|
287
|
-
})),
|
|
288
|
-
default: lastUsed || "default"
|
|
289
|
-
}
|
|
290
|
-
]);
|
|
291
|
-
if (provider !== "default" && !apiKeys[provider]) {
|
|
292
|
-
console.log(chalk.cyan(`
|
|
293
|
-
\uD83D\uDD11 Configure ${provider} API key:
|
|
294
|
-
`));
|
|
295
|
-
const { apiKey } = await inquirer.prompt([
|
|
296
|
-
{
|
|
297
|
-
type: "password",
|
|
298
|
-
name: "apiKey",
|
|
299
|
-
message: `Enter API Key for ${provider}:`,
|
|
300
|
-
mask: "*",
|
|
301
|
-
validate: (input) => input.length > 10 || "API Key appears too short"
|
|
302
|
-
}
|
|
303
|
-
]);
|
|
304
|
-
apiKeys[provider] = apiKey;
|
|
305
|
-
await ConfigService.saveHomeSettings({ apiKeys });
|
|
306
|
-
console.log(chalk.green(`✓ API Key saved for ${provider}
|
|
307
|
-
`));
|
|
308
|
-
}
|
|
309
|
-
return provider;
|
|
310
|
-
}
|
|
311
|
-
static async selectAgent(lastUsed) {
|
|
312
|
-
try {
|
|
313
|
-
const agents = await loadAllAgents(process.cwd());
|
|
314
|
-
if (agents.length === 0) {
|
|
315
|
-
console.log(chalk.yellow('⚠ No agents found, using "coder"'));
|
|
316
|
-
return "coder";
|
|
317
|
-
}
|
|
318
|
-
const message = lastUsed ? `Select agent (last used: ${lastUsed}):` : "Select agent:";
|
|
319
|
-
const { agent } = await inquirer.prompt([
|
|
320
|
-
{
|
|
321
|
-
type: "list",
|
|
322
|
-
name: "agent",
|
|
323
|
-
message,
|
|
324
|
-
choices: agents.map((a) => ({
|
|
325
|
-
name: a.metadata.name || a.id,
|
|
326
|
-
value: a.id
|
|
327
|
-
})),
|
|
328
|
-
default: lastUsed || agents.find((a) => a.id === "coder")?.id || agents[0].id
|
|
329
|
-
}
|
|
330
|
-
]);
|
|
331
|
-
return agent;
|
|
332
|
-
} catch (error) {
|
|
333
|
-
console.log(chalk.yellow('⚠ Could not load agents, using "coder"'));
|
|
334
|
-
return "coder";
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
static async setupEnvironment(provider) {
|
|
338
|
-
const userSettings = await ConfigService.loadHomeSettings();
|
|
339
|
-
const apiKeys = userSettings.apiKeys || {};
|
|
340
|
-
if (provider !== "default" && !apiKeys[provider]) {
|
|
341
|
-
throw new Error(`No API key configured for provider: ${provider}`);
|
|
342
|
-
}
|
|
343
|
-
const providerConfigs = {
|
|
344
|
-
default: {
|
|
345
|
-
description: "Default (No Override)"
|
|
346
|
-
},
|
|
347
|
-
kimi: {
|
|
348
|
-
ANTHROPIC_BASE_URL: "https://api.kimi.com/coding/",
|
|
349
|
-
description: "Kimi"
|
|
350
|
-
},
|
|
351
|
-
"z.ai": {
|
|
352
|
-
ANTHROPIC_BASE_URL: "https://api.z.ai/api/anthropic",
|
|
353
|
-
description: "Z.ai Proxy"
|
|
354
|
-
}
|
|
355
|
-
};
|
|
356
|
-
if (provider === "default") {
|
|
357
|
-
console.log(chalk.dim(" ✓ Using Claude Code default configuration"));
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
const config = providerConfigs[provider];
|
|
361
|
-
process.env.ANTHROPIC_BASE_URL = config.ANTHROPIC_BASE_URL;
|
|
362
|
-
process.env.ANTHROPIC_AUTH_TOKEN = apiKeys[provider];
|
|
363
|
-
console.log(chalk.green(` ✓ Environment configured for ${provider}`));
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
export {
|
|
367
|
-
SmartConfigService
|
|
368
|
-
};
|