@zhin.js/scaffold-wizard 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/lib/adapter.d.ts.map +1 -1
  2. package/lib/adapter.js +2 -1
  3. package/lib/adapter.js.map +1 -1
  4. package/lib/ai.d.ts +6 -0
  5. package/lib/ai.d.ts.map +1 -1
  6. package/lib/ai.js +64 -34
  7. package/lib/ai.js.map +1 -1
  8. package/lib/apply.js +2 -2
  9. package/lib/apply.js.map +1 -1
  10. package/lib/index.d.ts +10 -1
  11. package/lib/index.d.ts.map +1 -1
  12. package/lib/index.js +5 -1
  13. package/lib/index.js.map +1 -1
  14. package/lib/optional-peers.d.ts +21 -0
  15. package/lib/optional-peers.d.ts.map +1 -0
  16. package/lib/optional-peers.js +105 -0
  17. package/lib/optional-peers.js.map +1 -0
  18. package/lib/project-config-plan.d.ts +53 -0
  19. package/lib/project-config-plan.d.ts.map +1 -0
  20. package/lib/project-config-plan.js +337 -0
  21. package/lib/project-config-plan.js.map +1 -0
  22. package/lib/project-deps.d.ts +26 -3
  23. package/lib/project-deps.d.ts.map +1 -1
  24. package/lib/project-deps.js +211 -26
  25. package/lib/project-deps.js.map +1 -1
  26. package/lib/upgrade-l4.d.ts +15 -0
  27. package/lib/upgrade-l4.d.ts.map +1 -0
  28. package/lib/upgrade-l4.js +68 -0
  29. package/lib/upgrade-l4.js.map +1 -0
  30. package/lib/zhin-stack-deps.d.ts +66 -0
  31. package/lib/zhin-stack-deps.d.ts.map +1 -0
  32. package/lib/zhin-stack-deps.js +202 -0
  33. package/lib/zhin-stack-deps.js.map +1 -0
  34. package/package.json +7 -5
  35. package/src/adapter.ts +2 -1
  36. package/src/ai.ts +76 -32
  37. package/src/apply.ts +2 -2
  38. package/src/index.ts +53 -0
  39. package/src/optional-peers.ts +149 -0
  40. package/src/project-config-plan.ts +400 -0
  41. package/src/project-deps.ts +228 -27
  42. package/src/stack-versions.generated.json +48 -0
  43. package/src/upgrade-l4.ts +103 -0
  44. package/src/zhin-stack-deps.ts +252 -0
@@ -0,0 +1,53 @@
1
+ export type ProjectConfigFormat = 'yaml' | 'json' | 'toml' | 'ts';
2
+ export interface LoadedProjectConfig {
3
+ status: 'loaded' | 'missing' | 'unsupported';
4
+ cwd: string;
5
+ configPath?: string;
6
+ relativePath?: string;
7
+ format?: ProjectConfigFormat;
8
+ config: Record<string, unknown>;
9
+ writable: boolean;
10
+ message?: string;
11
+ }
12
+ export interface ProjectConfigPlanOptions {
13
+ cwd?: string;
14
+ loaded?: LoadedProjectConfig;
15
+ configPath?: string;
16
+ config?: Record<string, unknown>;
17
+ format?: ProjectConfigFormat;
18
+ enablePlugins?: string[];
19
+ ensureConsole?: boolean;
20
+ ensureSandbox?: boolean;
21
+ ensureHttp?: boolean;
22
+ migrateAiLegacy?: boolean;
23
+ }
24
+ export interface ProjectConfigPlan {
25
+ cwd: string;
26
+ status: LoadedProjectConfig['status'];
27
+ configPath?: string;
28
+ relativePath?: string;
29
+ format?: ProjectConfigFormat;
30
+ writable: boolean;
31
+ before: Record<string, unknown>;
32
+ after: Record<string, unknown>;
33
+ mutations: string[];
34
+ changed: boolean;
35
+ message?: string;
36
+ }
37
+ export interface ConsoleConfigDiagnosis {
38
+ missingHostPlugins: string[];
39
+ missingSandboxPlugin: boolean;
40
+ missingConsoleOrigin: boolean;
41
+ missingHttpToken: boolean;
42
+ }
43
+ export declare function loadProjectConfig(cwd?: string, configPath?: string): LoadedProjectConfig;
44
+ export declare function migrateAiLegacyConfig(ai: Record<string, unknown>): {
45
+ ai: Record<string, unknown>;
46
+ fixes: string[];
47
+ };
48
+ export declare function createProjectConfigPlan(options: ProjectConfigPlanOptions): ProjectConfigPlan;
49
+ export declare function renderProjectConfigPatch(plan: ProjectConfigPlan): string;
50
+ export declare function applyProjectConfigPlan(plan: ProjectConfigPlan): Promise<boolean>;
51
+ export declare function diagnoseConsoleConfig(config: Record<string, unknown>): ConsoleConfigDiagnosis;
52
+ export declare function applyConsoleConfigFixes(config: Record<string, unknown>): boolean;
53
+ //# sourceMappingURL=project-config-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config-plan.d.ts","sourceRoot":"","sources":["../src/project-config-plan.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAmDD,wBAAgB,iBAAiB,CAAC,GAAG,SAAgB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAiD/F;AA2DD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAClE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CA+DA;AAUD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CAoD5F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CASxE;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAKtF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,sBAAsB,CAe7F;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAYhF"}
@@ -0,0 +1,337 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'node:path';
3
+ import yaml from 'yaml';
4
+ import { parse as parseToml, stringify as stringifyToml } from 'smol-toml';
5
+ import { providerSdkFor } from './ai.js';
6
+ const CONSOLE_URL = 'https://console.zhin.dev';
7
+ const CONFIG_CANDIDATES = [
8
+ 'zhin.config.yml',
9
+ 'zhin.config.yaml',
10
+ 'zhin.config.json',
11
+ 'zhin.config.toml',
12
+ 'zhin.config.ts',
13
+ ];
14
+ const CONSOLE_HOST_PLUGINS = ['@zhin.js/host-router', '@zhin.js/host-api'];
15
+ const SANDBOX_PLUGIN = '@zhin.js/adapter-sandbox';
16
+ const LEGACY_AI_PROVIDER_FIELDS = ['driver', 'api', 'preset', 'spec'];
17
+ function configFormatFromPath(filePath) {
18
+ const ext = path.extname(filePath).toLowerCase();
19
+ if (ext === '.yml' || ext === '.yaml')
20
+ return 'yaml';
21
+ if (ext === '.json')
22
+ return 'json';
23
+ if (ext === '.toml')
24
+ return 'toml';
25
+ if (ext === '.ts')
26
+ return 'ts';
27
+ return null;
28
+ }
29
+ function cloneConfig(config) {
30
+ return JSON.parse(JSON.stringify(config));
31
+ }
32
+ function parseConfig(content, format) {
33
+ if (format === 'yaml') {
34
+ const parsed = yaml.parse(content);
35
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
36
+ ? parsed
37
+ : {};
38
+ }
39
+ if (format === 'json') {
40
+ const parsed = JSON.parse(content);
41
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
42
+ ? parsed
43
+ : {};
44
+ }
45
+ if (format === 'toml') {
46
+ const parsed = parseToml(content);
47
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
48
+ ? parsed
49
+ : {};
50
+ }
51
+ return {};
52
+ }
53
+ function serializeConfig(config, format) {
54
+ if (format === 'json')
55
+ return `${JSON.stringify(config, null, 2)}\n`;
56
+ if (format === 'toml')
57
+ return stringifyToml(config);
58
+ return yaml.stringify(config);
59
+ }
60
+ function findProjectConfigPath(cwd) {
61
+ for (const candidate of CONFIG_CANDIDATES) {
62
+ const configPath = path.join(cwd, candidate);
63
+ if (fs.existsSync(configPath))
64
+ return configPath;
65
+ }
66
+ return null;
67
+ }
68
+ export function loadProjectConfig(cwd = process.cwd(), configPath) {
69
+ const resolvedPath = configPath ? path.resolve(cwd, configPath) : findProjectConfigPath(cwd);
70
+ if (!resolvedPath) {
71
+ return {
72
+ status: 'missing',
73
+ cwd,
74
+ config: {},
75
+ writable: false,
76
+ message: '未找到 zhin.config.yml/json/toml',
77
+ };
78
+ }
79
+ const format = configFormatFromPath(resolvedPath);
80
+ const relativePath = path.relative(cwd, resolvedPath) || path.basename(resolvedPath);
81
+ if (!format) {
82
+ return {
83
+ status: 'unsupported',
84
+ cwd,
85
+ configPath: resolvedPath,
86
+ relativePath,
87
+ config: {},
88
+ writable: false,
89
+ message: `${path.basename(resolvedPath)} 暂不支持自动写入`,
90
+ };
91
+ }
92
+ if (format === 'ts') {
93
+ return {
94
+ status: 'unsupported',
95
+ cwd,
96
+ configPath: resolvedPath,
97
+ relativePath,
98
+ format,
99
+ config: {},
100
+ writable: false,
101
+ message: 'zhin.config.ts 只读;请迁移为 zhin.config.yml/json/toml 后自动修复',
102
+ };
103
+ }
104
+ const content = fs.readFileSync(resolvedPath, 'utf8');
105
+ return {
106
+ status: 'loaded',
107
+ cwd,
108
+ configPath: resolvedPath,
109
+ relativePath,
110
+ format,
111
+ config: parseConfig(content, format),
112
+ writable: true,
113
+ };
114
+ }
115
+ function ensurePlugins(config, pluginsToAdd, mutations) {
116
+ const plugins = Array.isArray(config.plugins)
117
+ ? config.plugins.filter((p) => typeof p === 'string')
118
+ : [];
119
+ let changed = false;
120
+ for (const plugin of pluginsToAdd) {
121
+ if (plugins.includes(plugin))
122
+ continue;
123
+ plugins.push(plugin);
124
+ mutations.push(`added ${plugin} to plugins`);
125
+ changed = true;
126
+ }
127
+ if (changed || !Array.isArray(config.plugins)) {
128
+ config.plugins = plugins;
129
+ }
130
+ }
131
+ function ensureHttp(config, mutations) {
132
+ const http = config.http && typeof config.http === 'object' && !Array.isArray(config.http)
133
+ ? { ...config.http }
134
+ : {};
135
+ const corsOrigins = Array.isArray(http.corsOrigins)
136
+ ? http.corsOrigins.filter((origin) => typeof origin === 'string')
137
+ : [];
138
+ let changed = false;
139
+ if (!corsOrigins.includes(CONSOLE_URL)) {
140
+ corsOrigins.push(CONSOLE_URL);
141
+ http.corsOrigins = corsOrigins;
142
+ mutations.push(`added ${CONSOLE_URL} to http.corsOrigins`);
143
+ changed = true;
144
+ }
145
+ if (typeof http.token !== 'string' || http.token.trim().length === 0) {
146
+ http.token = '${HTTP_TOKEN}';
147
+ mutations.push('added http.token');
148
+ changed = true;
149
+ }
150
+ if (changed || !config.http) {
151
+ config.http = http;
152
+ }
153
+ }
154
+ function sdkFromLegacyProvider(alias, provider) {
155
+ const candidates = LEGACY_AI_PROVIDER_FIELDS
156
+ .map((field) => provider[field])
157
+ .filter((value) => typeof value === 'string' && value.trim().length > 0)
158
+ .map((value) => value.trim().toLowerCase());
159
+ const joined = candidates.join(' ');
160
+ if (joined.includes('ollama'))
161
+ return 'ollama';
162
+ if (joined.includes('anthropic') || joined.includes('claude'))
163
+ return 'anthropic';
164
+ if (joined.includes('google') || joined.includes('gemini'))
165
+ return 'google';
166
+ if (joined.includes('deepseek'))
167
+ return 'deepseek';
168
+ if (joined.includes('moonshot') || joined.includes('zhipu') || joined.includes('compatible')) {
169
+ return 'openai-compatible';
170
+ }
171
+ return providerSdkFor(alias);
172
+ }
173
+ export function migrateAiLegacyConfig(ai) {
174
+ const next = cloneConfig(ai);
175
+ const fixes = [];
176
+ const defaultProvider = typeof next.defaultProvider === 'string' && next.defaultProvider.trim()
177
+ ? next.defaultProvider.trim()
178
+ : undefined;
179
+ const providers = next.providers && typeof next.providers === 'object' && !Array.isArray(next.providers)
180
+ ? { ...next.providers }
181
+ : {};
182
+ let providersChanged = false;
183
+ for (const [alias, rawProvider] of Object.entries(providers)) {
184
+ if (!rawProvider || typeof rawProvider !== 'object' || Array.isArray(rawProvider))
185
+ continue;
186
+ const provider = { ...rawProvider };
187
+ const hasLegacyField = LEGACY_AI_PROVIDER_FIELDS.some((field) => field in provider);
188
+ if (!provider.sdk && hasLegacyField) {
189
+ provider.sdk = sdkFromLegacyProvider(alias, provider);
190
+ fixes.push(`migrated ai.providers.${alias}.driver/api to sdk`);
191
+ providersChanged = true;
192
+ }
193
+ for (const field of LEGACY_AI_PROVIDER_FIELDS) {
194
+ if (field in provider) {
195
+ delete provider[field];
196
+ providersChanged = true;
197
+ }
198
+ }
199
+ providers[alias] = provider;
200
+ }
201
+ if (providersChanged) {
202
+ next.providers = providers;
203
+ }
204
+ if (defaultProvider) {
205
+ const agents = next.agents && typeof next.agents === 'object' && !Array.isArray(next.agents)
206
+ ? { ...next.agents }
207
+ : {};
208
+ const zhin = agents.zhin && typeof agents.zhin === 'object' && !Array.isArray(agents.zhin)
209
+ ? { ...agents.zhin }
210
+ : {};
211
+ if (!zhin.provider) {
212
+ zhin.provider = defaultProvider;
213
+ fixes.push('migrated ai.defaultProvider to ai.agents.zhin.provider');
214
+ }
215
+ const legacyAgent = next.agent && typeof next.agent === 'object' && !Array.isArray(next.agent)
216
+ ? next.agent
217
+ : {};
218
+ const legacyModel = typeof legacyAgent.chatModel === 'string'
219
+ ? legacyAgent.chatModel
220
+ : typeof legacyAgent.visionModel === 'string'
221
+ ? legacyAgent.visionModel
222
+ : undefined;
223
+ if (legacyModel && !zhin.model) {
224
+ zhin.model = legacyModel;
225
+ fixes.push('migrated ai.agent.chatModel to ai.agents.zhin.model');
226
+ }
227
+ agents.zhin = zhin;
228
+ next.agents = agents;
229
+ delete next.defaultProvider;
230
+ }
231
+ return { ai: next, fixes };
232
+ }
233
+ function applyAiLegacyMigration(config, mutations) {
234
+ if (!config.ai || typeof config.ai !== 'object' || Array.isArray(config.ai))
235
+ return;
236
+ const { ai, fixes } = migrateAiLegacyConfig(config.ai);
237
+ if (fixes.length === 0)
238
+ return;
239
+ config.ai = ai;
240
+ mutations.push(...fixes);
241
+ }
242
+ export function createProjectConfigPlan(options) {
243
+ const cwd = options.cwd ?? options.loaded?.cwd ?? process.cwd();
244
+ const loaded = options.loaded ?? (options.config
245
+ ? {
246
+ status: 'loaded',
247
+ cwd,
248
+ configPath: options.configPath,
249
+ relativePath: options.configPath ? path.relative(cwd, options.configPath) : undefined,
250
+ format: options.format ?? (options.configPath ? configFormatFromPath(options.configPath) ?? undefined : undefined),
251
+ config: options.config,
252
+ writable: Boolean(options.configPath && (options.format ?? configFormatFromPath(options.configPath)) !== 'ts'),
253
+ }
254
+ : loadProjectConfig(cwd, options.configPath));
255
+ const sourceConfig = options.config ?? loaded.config;
256
+ const before = cloneConfig(sourceConfig);
257
+ const after = cloneConfig(sourceConfig);
258
+ const mutations = [];
259
+ if (loaded.status === 'loaded' || options.config) {
260
+ if (options.ensureConsole) {
261
+ ensurePlugins(after, CONSOLE_HOST_PLUGINS, mutations);
262
+ }
263
+ if (options.ensureSandbox) {
264
+ ensurePlugins(after, [SANDBOX_PLUGIN], mutations);
265
+ }
266
+ if (options.enablePlugins?.length) {
267
+ ensurePlugins(after, options.enablePlugins, mutations);
268
+ }
269
+ if (options.ensureHttp) {
270
+ ensureHttp(after, mutations);
271
+ }
272
+ if (options.migrateAiLegacy) {
273
+ applyAiLegacyMigration(after, mutations);
274
+ }
275
+ }
276
+ return {
277
+ cwd,
278
+ status: loaded.status,
279
+ configPath: loaded.configPath,
280
+ relativePath: loaded.relativePath,
281
+ format: loaded.format,
282
+ writable: loaded.writable,
283
+ before,
284
+ after,
285
+ mutations,
286
+ changed: mutations.length > 0,
287
+ message: loaded.message,
288
+ };
289
+ }
290
+ export function renderProjectConfigPatch(plan) {
291
+ if (!plan.changed)
292
+ return '配置无需改动。';
293
+ const format = plan.format && plan.format !== 'ts' ? plan.format : 'yaml';
294
+ const name = plan.relativePath ?? 'zhin.config.yml';
295
+ return [
296
+ `# ${name}`,
297
+ serializeConfig(plan.after, format).trimEnd(),
298
+ '',
299
+ ].join('\n');
300
+ }
301
+ export async function applyProjectConfigPlan(plan) {
302
+ if (!plan.changed)
303
+ return false;
304
+ if (!plan.writable || !plan.configPath || !plan.format || plan.format === 'ts')
305
+ return false;
306
+ await fs.writeFile(plan.configPath, serializeConfig(plan.after, plan.format));
307
+ return true;
308
+ }
309
+ export function diagnoseConsoleConfig(config) {
310
+ const plugins = Array.isArray(config.plugins)
311
+ ? config.plugins.filter((p) => typeof p === 'string')
312
+ : [];
313
+ const http = config.http && typeof config.http === 'object' && !Array.isArray(config.http)
314
+ ? config.http
315
+ : {};
316
+ const corsOrigins = Array.isArray(http.corsOrigins) ? http.corsOrigins : [];
317
+ return {
318
+ missingHostPlugins: CONSOLE_HOST_PLUGINS.filter((plugin) => !plugins.includes(plugin)),
319
+ missingSandboxPlugin: !plugins.includes(SANDBOX_PLUGIN),
320
+ missingConsoleOrigin: !corsOrigins.includes(CONSOLE_URL),
321
+ missingHttpToken: typeof http.token !== 'string' || http.token.trim().length === 0,
322
+ };
323
+ }
324
+ export function applyConsoleConfigFixes(config) {
325
+ const plan = createProjectConfigPlan({
326
+ cwd: process.cwd(),
327
+ config,
328
+ ensureConsole: true,
329
+ ensureSandbox: true,
330
+ ensureHttp: true,
331
+ migrateAiLegacy: true,
332
+ });
333
+ Object.keys(config).forEach((key) => delete config[key]);
334
+ Object.assign(config, plan.after);
335
+ return plan.changed;
336
+ }
337
+ //# sourceMappingURL=project-config-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config-plan.js","sourceRoot":"","sources":["../src/project-config-plan.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,27 @@
1
1
  import type { AISetupConfig } from './ai.js';
2
2
  import type { InitOptions } from './types.js';
3
- /** 与 monorepo 中 agent / test-bot 对齐的 MCP SDK 版本 */
4
- export declare const MCP_SDK_VERSION = "^1.29.0";
3
+ /**
4
+ * User project dependency policy: scaffolded dependencies intentionally float to latest.
5
+ */
6
+ export declare const AI_STACK_VERSIONS: {
7
+ readonly '@zhin.js/agent': "latest";
8
+ readonly zod: "latest";
9
+ readonly ai: "latest";
10
+ readonly '@modelcontextprotocol/sdk': "latest";
11
+ readonly '@ai-sdk/openai': "latest";
12
+ readonly '@ai-sdk/anthropic': "latest";
13
+ readonly '@ai-sdk/google': "latest";
14
+ readonly '@ai-sdk/deepseek': "latest";
15
+ readonly '@ai-sdk/openai-compatible': "latest";
16
+ };
17
+ /** @deprecated 使用 AI_STACK_VERSIONS['@modelcontextprotocol/sdk'] */
18
+ export declare const MCP_SDK_VERSION: "latest";
19
+ export interface AiStackIncompatibility {
20
+ package: string;
21
+ reason: string;
22
+ }
23
+ export declare function findOutdatedAiStackInPackageJson(pkg: PackageJsonLike, required: Record<string, string>): string[];
24
+ export declare function findInstalledAiStackIncompatibilities(cwd: string, pkg: PackageJsonLike): AiStackIncompatibility[];
5
25
  /** 启用 AI 时将写入 package.json 的依赖名(用于向导提示与 CLI 输出) */
6
26
  export declare function listAIDependencyNames(provider?: string, options?: {
7
27
  includeMcp?: boolean;
@@ -31,12 +51,15 @@ export interface AIDependencyDiagnosis {
31
51
  provider?: string;
32
52
  required: Record<string, string>;
33
53
  missingFromPackageJson: string[];
54
+ outdatedInPackageJson: string[];
55
+ incompatibleInstalled: AiStackIncompatibility[];
34
56
  notInstalled: string[];
35
57
  }
58
+ export declare function packagesNeedingAiStackFix(diagnosis: AIDependencyDiagnosis): string[];
36
59
  export declare function diagnoseAIDependencies(cwd: string, config: {
37
60
  ai?: unknown;
38
61
  }, pkg?: PackageJsonLike): AIDependencyDiagnosis | null;
39
- export declare function formatAIDependencyFixCommand(missing: string[], required: Record<string, string>): string;
62
+ export declare function formatAIDependencyFixCommand(packages: string[], required: Record<string, string>): string;
40
63
  /**
41
64
  * AI 启用时安装 agent 栈 + 所选 provider 的 @ai-sdk/* + 可选 MCP SDK。
42
65
  */
@@ -1 +1 @@
1
- {"version":3,"file":"project-deps.d.ts","sourceRoot":"","sources":["../src/project-deps.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,mDAAmD;AACnD,eAAO,MAAM,eAAe,YAAY,CAAC;AAsBzC,mDAAmD;AACnD,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,EAAE,CAUrG;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAEpG;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAerE;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAkB7F;AAQD,gDAAgD;AAChD,wBAAgB,kCAAkC,CAAC,MAAM,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAanG;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,EAAE,CAMV;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAa3F;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,EACxB,GAAG,CAAC,EAAE,eAAe,GACpB,qBAAqB,GAAG,IAAI,CAe9B;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIxG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB5E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAa9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAUpE"}
1
+ {"version":3,"file":"project-deps.d.ts","sourceRoot":"","sources":["../src/project-deps.ts"],"names":[],"mappings":"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"}