@zhin.js/scaffold-wizard 0.1.5 → 0.1.6

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/lib/index.d.ts CHANGED
@@ -7,5 +7,9 @@ export type { AISetupConfig } from './ai.js';
7
7
  export { configureAI, generateAIEnvVars, generateAIConfigYaml, generateAIConfigJSON, generateAIConfigToml, RECOMMENDED_AI_DEFAULTS, } from './ai.js';
8
8
  export { configureDatabaseOptions } from './database.js';
9
9
  export { MCP_SDK_VERSION, getAIDependencies, listAIDependencyNames, formatAIDependencyHint, isAiEnabledInConfig, resolveDefaultProviderFromConfig, getRequiredAIDependenciesForConfig, diagnoseAIDependencies, formatAIDependencyFixCommand, ensureDatabaseForAI, ensureDatabaseForAdapters, } from './project-deps.js';
10
+ export { SPEECH_PACKAGE, HTML_RENDERER_PACKAGE, ADAPTERS_PREFER_HTML_IMAGE, diagnoseOptionalPeers, formatOptionalPeerFixCommand, getOptionalPeerDependencies, } from './optional-peers.js';
11
+ export type { OptionalPeerDiagnosis, OptionalPeersDiagnosis } from './optional-peers.js';
12
+ export { diagnoseUpgradeToL4, getUpgradeToL4Dependencies, } from './upgrade-l4.js';
13
+ export type { UpgradeToL4Diagnosis } from './upgrade-l4.js';
10
14
  export { CONSOLE_HOST_PLUGINS, applyDatabaseToConfig, applyAdaptersToConfig, applyAIToConfig, appendWizardEnvVars, collectWizardDependencies, mergeDependenciesIntoPackageJson, finalizeWizardOptions, applyWizardOptionsToConfig, } from './apply.js';
11
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,gCAAgC,EAChC,kCAAkC,EAClC,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,gCAAgC,EAChC,kCAAkC,EAClC,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
package/lib/index.js CHANGED
@@ -4,5 +4,7 @@ export { ADAPTERS_DOCS_URL, ADAPTERS_INDEX_URL, ADAPTERS_ESSENTIALS_URL, adapter
4
4
  export { configureAI, generateAIEnvVars, generateAIConfigYaml, generateAIConfigJSON, generateAIConfigToml, RECOMMENDED_AI_DEFAULTS, } from './ai.js';
5
5
  export { configureDatabaseOptions } from './database.js';
6
6
  export { MCP_SDK_VERSION, getAIDependencies, listAIDependencyNames, formatAIDependencyHint, isAiEnabledInConfig, resolveDefaultProviderFromConfig, getRequiredAIDependenciesForConfig, diagnoseAIDependencies, formatAIDependencyFixCommand, ensureDatabaseForAI, ensureDatabaseForAdapters, } from './project-deps.js';
7
+ export { SPEECH_PACKAGE, HTML_RENDERER_PACKAGE, ADAPTERS_PREFER_HTML_IMAGE, diagnoseOptionalPeers, formatOptionalPeerFixCommand, getOptionalPeerDependencies, } from './optional-peers.js';
8
+ export { diagnoseUpgradeToL4, getUpgradeToL4Dependencies, } from './upgrade-l4.js';
7
9
  export { CONSOLE_HOST_PLUGINS, applyDatabaseToConfig, applyAdaptersToConfig, applyAIToConfig, appendWizardEnvVars, collectWizardDependencies, mergeDependenciesIntoPackageJson, finalizeWizardOptions, applyWizardOptionsToConfig, } from './apply.js';
8
10
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,gCAAgC,EAChC,kCAAkC,EAClC,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,gCAAgC,EAChC,kCAAkC,EAClC,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { PackageJsonLike } from './project-deps.js';
2
+ export declare const SPEECH_PACKAGE = "@zhin.js/speech";
3
+ export declare const HTML_RENDERER_PACKAGE = "@zhin.js/html-renderer";
4
+ /** 默认 html/markdown policy 为 image 的 adapter context 名 */
5
+ export declare const ADAPTERS_PREFER_HTML_IMAGE: Set<string>;
6
+ export interface OptionalPeerDiagnosis {
7
+ packageName: string;
8
+ required: boolean;
9
+ reason: string;
10
+ missingFromPackageJson: string[];
11
+ notInstalled: string[];
12
+ }
13
+ export interface OptionalPeersDiagnosis {
14
+ speech?: OptionalPeerDiagnosis;
15
+ htmlRenderer?: OptionalPeerDiagnosis;
16
+ }
17
+ /** 按 zhin.config 推断 optional peer(speech / html-renderer)是否应安装 */
18
+ export declare function diagnoseOptionalPeers(cwd: string, config: Record<string, unknown>, pkg?: PackageJsonLike): OptionalPeersDiagnosis;
19
+ export declare function formatOptionalPeerFixCommand(diagnosis: OptionalPeerDiagnosis): string;
20
+ export declare function getOptionalPeerDependencies(config: Record<string, unknown>): Record<string, string>;
21
+ //# sourceMappingURL=optional-peers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional-peers.d.ts","sourceRoot":"","sources":["../src/optional-peers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMzD,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAChD,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAI9D,0DAA0D;AAC1D,eAAO,MAAM,0BAA0B,aAKrC,CAAC;AAEH,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC;AAsDD,kEAAkE;AAClE,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,CAAC,EAAE,eAAe,GACpB,sBAAsB,CAuCxB;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,qBAAqB,GAAG,MAAM,CAQrF;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMnG"}
@@ -0,0 +1,104 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'node:path';
3
+ import { findMissingPackageDependencies, findUnresolvedPackageInstalls, } from './project-deps.js';
4
+ export const SPEECH_PACKAGE = '@zhin.js/speech';
5
+ export const HTML_RENDERER_PACKAGE = '@zhin.js/html-renderer';
6
+ const PEER_VERSION = 'latest';
7
+ /** 默认 html/markdown policy 为 image 的 adapter context 名 */
8
+ export const ADAPTERS_PREFER_HTML_IMAGE = new Set([
9
+ 'kook',
10
+ 'qq',
11
+ 'weixin-ilink',
12
+ 'email',
13
+ ]);
14
+ function readSpeechStrategy(config) {
15
+ const ai = config.ai;
16
+ if (!ai || typeof ai !== 'object' || Array.isArray(ai))
17
+ return undefined;
18
+ const multimodal = ai.multimodal;
19
+ if (!multimodal || typeof multimodal !== 'object' || Array.isArray(multimodal))
20
+ return undefined;
21
+ const audio = multimodal.audio;
22
+ if (!audio || typeof audio !== 'object' || Array.isArray(audio))
23
+ return undefined;
24
+ const strategy = audio.strategy;
25
+ return strategy != null ? String(strategy) : undefined;
26
+ }
27
+ function configUsesHtmlImageAdapter(config) {
28
+ const plugins = Array.isArray(config.plugins)
29
+ ? config.plugins.filter((p) => typeof p === 'string')
30
+ : [];
31
+ for (const plugin of plugins) {
32
+ for (const ctx of ADAPTERS_PREFER_HTML_IMAGE) {
33
+ if (plugin.includes(`adapter-${ctx}`))
34
+ return true;
35
+ }
36
+ }
37
+ const endpoints = Array.isArray(config.endpoints) ? config.endpoints : [];
38
+ for (const ep of endpoints) {
39
+ if (!ep || typeof ep !== 'object' || Array.isArray(ep))
40
+ continue;
41
+ const context = ep.context;
42
+ if (typeof context === 'string' && ADAPTERS_PREFER_HTML_IMAGE.has(context)) {
43
+ return true;
44
+ }
45
+ }
46
+ return false;
47
+ }
48
+ function diagnosePeer(cwd, pkg, packageName, required, reason) {
49
+ if (!required)
50
+ return undefined;
51
+ const requiredDeps = { [packageName]: PEER_VERSION };
52
+ const missingFromPackageJson = findMissingPackageDependencies(pkg, requiredDeps);
53
+ const declared = [packageName].filter((n) => !missingFromPackageJson.includes(n));
54
+ const notInstalled = findUnresolvedPackageInstalls(cwd, declared);
55
+ return {
56
+ packageName,
57
+ required: true,
58
+ reason,
59
+ missingFromPackageJson,
60
+ notInstalled,
61
+ };
62
+ }
63
+ /** 按 zhin.config 推断 optional peer(speech / html-renderer)是否应安装 */
64
+ export function diagnoseOptionalPeers(cwd, config, pkg) {
65
+ const packageJsonPath = path.join(cwd, 'package.json');
66
+ const packageJson = pkg ?? (fs.existsSync(packageJsonPath)
67
+ ? fs.readJsonSync(packageJsonPath)
68
+ : {});
69
+ const speechRequired = config.speech != null && typeof config.speech === 'object'
70
+ || readSpeechStrategy(config) === 'transcribe';
71
+ const htmlRendererRequired = config.htmlRenderer != null && typeof config.htmlRenderer === 'object'
72
+ || configUsesHtmlImageAdapter(config);
73
+ const speech = diagnosePeer(cwd, packageJson, SPEECH_PACKAGE, speechRequired, speechRequired
74
+ ? (readSpeechStrategy(config) === 'transcribe'
75
+ ? 'ai.multimodal.audio.strategy 为 transcribe'
76
+ : '已配置 speech:')
77
+ : '');
78
+ const htmlRenderer = diagnosePeer(cwd, packageJson, HTML_RENDERER_PACKAGE, htmlRendererRequired, htmlRendererRequired
79
+ ? (config.htmlRenderer != null
80
+ ? '已配置 htmlRenderer:'
81
+ : 'adapter 出站 policy 使用 html/markdown→image')
82
+ : '');
83
+ return { speech, htmlRenderer };
84
+ }
85
+ export function formatOptionalPeerFixCommand(diagnosis) {
86
+ const missing = [
87
+ ...diagnosis.missingFromPackageJson,
88
+ ...diagnosis.notInstalled.filter((n) => !diagnosis.missingFromPackageJson.includes(n)),
89
+ ];
90
+ const unique = [...new Set(missing)];
91
+ if (unique.length === 0)
92
+ return 'pnpm install';
93
+ return `pnpm add ${unique.map((n) => `${n}@${PEER_VERSION}`).join(' ')}`;
94
+ }
95
+ export function getOptionalPeerDependencies(config) {
96
+ const peers = diagnoseOptionalPeers(process.cwd(), config);
97
+ const deps = {};
98
+ if (peers.speech?.required)
99
+ deps[SPEECH_PACKAGE] = PEER_VERSION;
100
+ if (peers.htmlRenderer?.required)
101
+ deps[HTML_RENDERER_PACKAGE] = PEER_VERSION;
102
+ return deps;
103
+ }
104
+ //# sourceMappingURL=optional-peers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optional-peers.js","sourceRoot":"","sources":["../src/optional-peers.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
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
+ /** 新项目依赖默认接受 npm latest 漂移,避免脚手架维护固定版本表。 */
4
+ export declare const MCP_SDK_VERSION = "latest";
5
5
  /** 启用 AI 时将写入 package.json 的依赖名(用于向导提示与 CLI 输出) */
6
6
  export declare function listAIDependencyNames(provider?: string, options?: {
7
7
  includeMcp?: boolean;
@@ -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":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,4CAA4C;AAC5C,eAAO,MAAM,eAAe,WAAW,CAAC;AAsBxC,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,20 +1,20 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import fs from 'fs-extra';
3
3
  import path from 'node:path';
4
- /** 与 monorepo 中 agent / test-bot 对齐的 MCP SDK 版本 */
5
- export const MCP_SDK_VERSION = '^1.29.0';
6
- const AI_STACK_VERSION = '^4.0.0';
7
- const ZOD_VERSION = '^4.0.0';
8
- const VERCEL_AI_VERSION = '^6.0.0';
4
+ /** 新项目依赖默认接受 npm latest 漂移,避免脚手架维护固定版本表。 */
5
+ export const MCP_SDK_VERSION = 'latest';
6
+ const AI_STACK_VERSION = 'latest';
7
+ const ZOD_VERSION = 'latest';
8
+ const VERCEL_AI_VERSION = 'latest';
9
9
  const PROVIDER_SDK_PACKAGES = {
10
- openai: { pkg: '@ai-sdk/openai', version: '^3.0.0' },
11
- anthropic: { pkg: '@ai-sdk/anthropic', version: '^3.0.0' },
12
- google: { pkg: '@ai-sdk/google', version: '^3.0.0' },
13
- gemini: { pkg: '@ai-sdk/google', version: '^3.0.0' },
14
- deepseek: { pkg: '@ai-sdk/deepseek', version: '^1.0.0' },
15
- ollama: { pkg: '@ai-sdk/openai-compatible', version: '^1.0.0' },
16
- moonshot: { pkg: '@ai-sdk/openai-compatible', version: '^1.0.0' },
17
- zhipu: { pkg: '@ai-sdk/openai-compatible', version: '^1.0.0' },
10
+ openai: { pkg: '@ai-sdk/openai', version: 'latest' },
11
+ anthropic: { pkg: '@ai-sdk/anthropic', version: 'latest' },
12
+ google: { pkg: '@ai-sdk/google', version: 'latest' },
13
+ gemini: { pkg: '@ai-sdk/google', version: 'latest' },
14
+ deepseek: { pkg: '@ai-sdk/deepseek', version: 'latest' },
15
+ ollama: { pkg: '@ai-sdk/openai-compatible', version: 'latest' },
16
+ moonshot: { pkg: '@ai-sdk/openai-compatible', version: 'latest' },
17
+ zhipu: { pkg: '@ai-sdk/openai-compatible', version: 'latest' },
18
18
  };
19
19
  function providerSdkPackage(provider) {
20
20
  if (!provider)
@@ -1 +1 @@
1
- {"version":3,"file":"project-deps.js","sourceRoot":"","sources":["../src/project-deps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-deps.js","sourceRoot":"","sources":["../src/project-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,4CAA4C;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAExC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAClC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEnC,MAAM,qBAAqB,GAAqD;IAC9E,MAAM,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE;IACpD,SAAS,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC1D,MAAM,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE;IACpD,MAAM,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE;IACpD,QAAQ,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE;IACxD,MAAM,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC/D,QAAQ,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE,OAAO,EAAE,QAAQ,EAAE;IACjE,KAAK,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE,OAAO,EAAE,QAAQ,EAAE;CAC/D,CAAC;AAEF,SAAS,kBAAkB,CAAC,QAAiB;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,qBAAqB,CAAC,QAAiB,EAAE,OAAkC;IACzF,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,OAAO,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAiB,EAAE,OAAkC;IAC1F,OAAO,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC;AAOD,oEAAoE;AACpE,MAAM,UAAU,mBAAmB,CAAC,MAAwB;IAC1D,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,MAAM,GAAG,GAAG,EAA6B,CAAC;IAC1C,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAChC,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,MAAwB;IACvE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACzE,MAAM,GAAG,GAAG,EAA6B,CAAC;IAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,GAAI,MAAgD,CAAC,IAAI,CAAC;QACpE,IAAI,IAAI,EAAE,QAAQ;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAA+C,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,IAAI,UAAU,EAAE,QAAQ;YAAE,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAChC,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAoC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,CAAC,eAAe,IAAI,IAAI;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACpE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,EAA2B;IACnD,IAAI,EAAE,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,kCAAkC,CAAC,MAAwB;IACzE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,EAA6B,CAAC;IAChD,MAAM,KAAK,GAAkB;QAC3B,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,gCAAgC,CAAC,MAAM,CAAC;QACzD,SAAS,EAAE,gBAAgB,CAAC,EAAE,CAAC;KAChC,CAAC;IACF,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,GAAoB,EACpB,QAAgC;IAEhC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QACtC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;KAC1C,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAW,EAAE,YAAsB;IAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,eAAe,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAUD,MAAM,UAAU,sBAAsB,CACpC,GAAW,EACX,MAAwB,EACxB,GAAqB;IAErB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,QAAQ,GAAG,kCAAkC,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvH,MAAM,sBAAsB,GAAG,8BAA8B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAChG,MAAM,YAAY,GAAG,6BAA6B,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,gCAAgC,CAAC,MAAM,CAAC;QAClD,QAAQ;QACR,sBAAsB;QACtB,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,OAAiB,EAAE,QAAgC;IAC9F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC7E,OAAO,YAAY,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAkB;IAClD,IAAI,CAAC,EAAE,EAAE,OAAO;QAAE,OAAO,EAAE,CAAC;IAE5B,MAAM,IAAI,GAA2B;QACnC,gBAAgB,EAAE,gBAAgB;QAClC,GAAG,EAAE,WAAW;QAChB,EAAE,EAAE,iBAAiB;QACrB,2BAA2B,EAAE,eAAe;KAC7C,CAAC;IAEF,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;IACnD,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAoB;IACtD,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO;IACxB,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO;QAAE,OAAO;IACjC,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO;IAE7B,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,KAAK,CAAC;IAC/D,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,OAAO,CAAC,QAAQ,GAAG;QACjB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,eAAe;QACzB,IAAI,EAAE,KAAK;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAoB;IAC5D,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO;IACxB,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO;IAC7B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB;QAAE,OAAO;IAEhD,OAAO,CAAC,QAAQ,GAAG;QACjB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,eAAe;QACzB,IAAI,EAAE,KAAK;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { PackageJsonLike } from './project-deps.js';
2
+ import { diagnoseAIDependencies } from './project-deps.js';
3
+ import { diagnoseOptionalPeers } from './optional-peers.js';
4
+ export interface UpgradeToL4Diagnosis {
5
+ ai: ReturnType<typeof diagnoseAIDependencies>;
6
+ optionalPeers: ReturnType<typeof diagnoseOptionalPeers>;
7
+ missingAiDeps: string[];
8
+ missingOptionalPeers: string[];
9
+ fixCommand: string;
10
+ configSnippets: string[];
11
+ }
12
+ /** minimal-bot → full-bot / L4 升级诊断 */
13
+ export declare function diagnoseUpgradeToL4(cwd: string, config: Record<string, unknown>, pkg?: PackageJsonLike): UpgradeToL4Diagnosis;
14
+ export declare function getUpgradeToL4Dependencies(config: Record<string, unknown>): Record<string, string>;
15
+ //# sourceMappingURL=upgrade-l4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade-l4.d.ts","sourceRoot":"","sources":["../src/upgrade-l4.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,sBAAsB,EAMvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAA6D,MAAM,qBAAqB,CAAC;AAEvH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IAC9C,aAAa,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;IACxD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAkBD,uCAAuC;AACvC,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,CAAC,EAAE,eAAe,GACpB,oBAAoB,CAqDtB;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGlG"}
@@ -0,0 +1,68 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'node:path';
3
+ import { diagnoseAIDependencies, formatAIDependencyFixCommand, getRequiredAIDependenciesForConfig, isAiEnabledInConfig, findMissingPackageDependencies, findUnresolvedPackageInstalls, } from './project-deps.js';
4
+ import { diagnoseOptionalPeers, formatOptionalPeerFixCommand, getOptionalPeerDependencies } from './optional-peers.js';
5
+ const L4_CONFIG_SNIPPETS = [
6
+ '# --- L4 可选多模态(取消注释并安装 optional peer)---',
7
+ '# ai:',
8
+ '# multimodal:',
9
+ '# audio:',
10
+ '# strategy: transcribe # 需 @zhin.js/speech',
11
+ '# speech:',
12
+ '# stt:',
13
+ '# provider: ollama',
14
+ '# model: whisper',
15
+ '# tts:',
16
+ '# provider: edge',
17
+ '# htmlRenderer:',
18
+ '# width: 540',
19
+ ];
20
+ /** minimal-bot → full-bot / L4 升级诊断 */
21
+ export function diagnoseUpgradeToL4(cwd, config, pkg) {
22
+ const packageJsonPath = path.join(cwd, 'package.json');
23
+ const packageJson = pkg ?? (fs.existsSync(packageJsonPath)
24
+ ? fs.readJsonSync(packageJsonPath)
25
+ : {});
26
+ const aiEnabled = isAiEnabledInConfig(config);
27
+ const ai = aiEnabled ? diagnoseAIDependencies(cwd, config, packageJson) : null;
28
+ const optionalPeers = diagnoseOptionalPeers(cwd, config, packageJson);
29
+ const missingAiDeps = ai
30
+ ? [...new Set([...ai.missingFromPackageJson, ...ai.notInstalled])]
31
+ : [...Object.keys(getRequiredAIDependenciesForConfig({ ai: { enabled: true } }))];
32
+ if (!aiEnabled) {
33
+ const required = getRequiredAIDependenciesForConfig({ ai: { enabled: true } });
34
+ const fromPkg = findMissingPackageDependencies(packageJson, required);
35
+ const declared = Object.keys(required).filter((n) => !fromPkg.includes(n));
36
+ const notInstalled = findUnresolvedPackageInstalls(cwd, declared);
37
+ missingAiDeps.push(...fromPkg, ...notInstalled);
38
+ }
39
+ const missingOptionalPeers = [];
40
+ for (const peer of [optionalPeers.speech, optionalPeers.htmlRenderer]) {
41
+ if (!peer?.required)
42
+ continue;
43
+ missingOptionalPeers.push(...peer.missingFromPackageJson, ...peer.notInstalled.filter((n) => !peer.missingFromPackageJson.includes(n)));
44
+ }
45
+ const fixParts = [];
46
+ if (!aiEnabled || missingAiDeps.length > 0) {
47
+ const required = ai?.required ?? getRequiredAIDependenciesForConfig({ ai: { enabled: true } });
48
+ fixParts.push(formatAIDependencyFixCommand([...new Set(missingAiDeps)], required));
49
+ }
50
+ for (const peer of [optionalPeers.speech, optionalPeers.htmlRenderer]) {
51
+ if (peer && (peer.missingFromPackageJson.length > 0 || peer.notInstalled.length > 0)) {
52
+ fixParts.push(formatOptionalPeerFixCommand(peer));
53
+ }
54
+ }
55
+ return {
56
+ ai,
57
+ optionalPeers,
58
+ missingAiDeps: [...new Set(missingAiDeps)],
59
+ missingOptionalPeers: [...new Set(missingOptionalPeers)],
60
+ fixCommand: fixParts.join(' && '),
61
+ configSnippets: L4_CONFIG_SNIPPETS,
62
+ };
63
+ }
64
+ export function getUpgradeToL4Dependencies(config) {
65
+ const deps = getRequiredAIDependenciesForConfig({ ai: { enabled: true } });
66
+ return { ...deps, ...getOptionalPeerDependencies(config) };
67
+ }
68
+ //# sourceMappingURL=upgrade-l4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade-l4.js","sourceRoot":"","sources":["../src/upgrade-l4.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/scaffold-wizard",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Shared interactive scaffold wizard for create-zhin-app and @zhin.js/cli",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
package/src/index.ts CHANGED
@@ -45,6 +45,22 @@ export {
45
45
  ensureDatabaseForAdapters,
46
46
  } from './project-deps.js';
47
47
 
48
+ export {
49
+ SPEECH_PACKAGE,
50
+ HTML_RENDERER_PACKAGE,
51
+ ADAPTERS_PREFER_HTML_IMAGE,
52
+ diagnoseOptionalPeers,
53
+ formatOptionalPeerFixCommand,
54
+ getOptionalPeerDependencies,
55
+ } from './optional-peers.js';
56
+ export type { OptionalPeerDiagnosis, OptionalPeersDiagnosis } from './optional-peers.js';
57
+
58
+ export {
59
+ diagnoseUpgradeToL4,
60
+ getUpgradeToL4Dependencies,
61
+ } from './upgrade-l4.js';
62
+ export type { UpgradeToL4Diagnosis } from './upgrade-l4.js';
63
+
48
64
  export {
49
65
  CONSOLE_HOST_PLUGINS,
50
66
  applyDatabaseToConfig,
@@ -0,0 +1,149 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'node:path';
3
+ import type { PackageJsonLike } from './project-deps.js';
4
+ import {
5
+ findMissingPackageDependencies,
6
+ findUnresolvedPackageInstalls,
7
+ } from './project-deps.js';
8
+
9
+ export const SPEECH_PACKAGE = '@zhin.js/speech';
10
+ export const HTML_RENDERER_PACKAGE = '@zhin.js/html-renderer';
11
+
12
+ const PEER_VERSION = 'latest';
13
+
14
+ /** 默认 html/markdown policy 为 image 的 adapter context 名 */
15
+ export const ADAPTERS_PREFER_HTML_IMAGE = new Set([
16
+ 'kook',
17
+ 'qq',
18
+ 'weixin-ilink',
19
+ 'email',
20
+ ]);
21
+
22
+ export interface OptionalPeerDiagnosis {
23
+ packageName: string;
24
+ required: boolean;
25
+ reason: string;
26
+ missingFromPackageJson: string[];
27
+ notInstalled: string[];
28
+ }
29
+
30
+ export interface OptionalPeersDiagnosis {
31
+ speech?: OptionalPeerDiagnosis;
32
+ htmlRenderer?: OptionalPeerDiagnosis;
33
+ }
34
+
35
+ function readSpeechStrategy(config: Record<string, unknown>): string | undefined {
36
+ const ai = config.ai;
37
+ if (!ai || typeof ai !== 'object' || Array.isArray(ai)) return undefined;
38
+ const multimodal = (ai as Record<string, unknown>).multimodal;
39
+ if (!multimodal || typeof multimodal !== 'object' || Array.isArray(multimodal)) return undefined;
40
+ const audio = (multimodal as Record<string, unknown>).audio;
41
+ if (!audio || typeof audio !== 'object' || Array.isArray(audio)) return undefined;
42
+ const strategy = (audio as Record<string, unknown>).strategy;
43
+ return strategy != null ? String(strategy) : undefined;
44
+ }
45
+
46
+ function configUsesHtmlImageAdapter(config: Record<string, unknown>): boolean {
47
+ const plugins = Array.isArray(config.plugins)
48
+ ? config.plugins.filter((p): p is string => typeof p === 'string')
49
+ : [];
50
+ for (const plugin of plugins) {
51
+ for (const ctx of ADAPTERS_PREFER_HTML_IMAGE) {
52
+ if (plugin.includes(`adapter-${ctx}`)) return true;
53
+ }
54
+ }
55
+ const endpoints = Array.isArray(config.endpoints) ? config.endpoints : [];
56
+ for (const ep of endpoints) {
57
+ if (!ep || typeof ep !== 'object' || Array.isArray(ep)) continue;
58
+ const context = (ep as Record<string, unknown>).context;
59
+ if (typeof context === 'string' && ADAPTERS_PREFER_HTML_IMAGE.has(context)) {
60
+ return true;
61
+ }
62
+ }
63
+ return false;
64
+ }
65
+
66
+ function diagnosePeer(
67
+ cwd: string,
68
+ pkg: PackageJsonLike,
69
+ packageName: string,
70
+ required: boolean,
71
+ reason: string,
72
+ ): OptionalPeerDiagnosis | undefined {
73
+ if (!required) return undefined;
74
+ const requiredDeps = { [packageName]: PEER_VERSION };
75
+ const missingFromPackageJson = findMissingPackageDependencies(pkg, requiredDeps);
76
+ const declared = [packageName].filter((n) => !missingFromPackageJson.includes(n));
77
+ const notInstalled = findUnresolvedPackageInstalls(cwd, declared);
78
+ return {
79
+ packageName,
80
+ required: true,
81
+ reason,
82
+ missingFromPackageJson,
83
+ notInstalled,
84
+ };
85
+ }
86
+
87
+ /** 按 zhin.config 推断 optional peer(speech / html-renderer)是否应安装 */
88
+ export function diagnoseOptionalPeers(
89
+ cwd: string,
90
+ config: Record<string, unknown>,
91
+ pkg?: PackageJsonLike,
92
+ ): OptionalPeersDiagnosis {
93
+ const packageJsonPath = path.join(cwd, 'package.json');
94
+ const packageJson = pkg ?? (fs.existsSync(packageJsonPath)
95
+ ? fs.readJsonSync(packageJsonPath) as PackageJsonLike
96
+ : {});
97
+
98
+ const speechRequired =
99
+ config.speech != null && typeof config.speech === 'object'
100
+ || readSpeechStrategy(config) === 'transcribe';
101
+
102
+ const htmlRendererRequired =
103
+ config.htmlRenderer != null && typeof config.htmlRenderer === 'object'
104
+ || configUsesHtmlImageAdapter(config);
105
+
106
+ const speech = diagnosePeer(
107
+ cwd,
108
+ packageJson,
109
+ SPEECH_PACKAGE,
110
+ speechRequired,
111
+ speechRequired
112
+ ? (readSpeechStrategy(config) === 'transcribe'
113
+ ? 'ai.multimodal.audio.strategy 为 transcribe'
114
+ : '已配置 speech:')
115
+ : '',
116
+ );
117
+
118
+ const htmlRenderer = diagnosePeer(
119
+ cwd,
120
+ packageJson,
121
+ HTML_RENDERER_PACKAGE,
122
+ htmlRendererRequired,
123
+ htmlRendererRequired
124
+ ? (config.htmlRenderer != null
125
+ ? '已配置 htmlRenderer:'
126
+ : 'adapter 出站 policy 使用 html/markdown→image')
127
+ : '',
128
+ );
129
+
130
+ return { speech, htmlRenderer };
131
+ }
132
+
133
+ export function formatOptionalPeerFixCommand(diagnosis: OptionalPeerDiagnosis): string {
134
+ const missing = [
135
+ ...diagnosis.missingFromPackageJson,
136
+ ...diagnosis.notInstalled.filter((n) => !diagnosis.missingFromPackageJson.includes(n)),
137
+ ];
138
+ const unique = [...new Set(missing)];
139
+ if (unique.length === 0) return 'pnpm install';
140
+ return `pnpm add ${unique.map((n) => `${n}@${PEER_VERSION}`).join(' ')}`;
141
+ }
142
+
143
+ export function getOptionalPeerDependencies(config: Record<string, unknown>): Record<string, string> {
144
+ const peers = diagnoseOptionalPeers(process.cwd(), config);
145
+ const deps: Record<string, string> = {};
146
+ if (peers.speech?.required) deps[SPEECH_PACKAGE] = PEER_VERSION;
147
+ if (peers.htmlRenderer?.required) deps[HTML_RENDERER_PACKAGE] = PEER_VERSION;
148
+ return deps;
149
+ }
@@ -4,22 +4,22 @@ import path from 'node:path';
4
4
  import type { AISetupConfig } from './ai.js';
5
5
  import type { InitOptions } from './types.js';
6
6
 
7
- /** 与 monorepo 中 agent / test-bot 对齐的 MCP SDK 版本 */
8
- export const MCP_SDK_VERSION = '^1.29.0';
7
+ /** 新项目依赖默认接受 npm latest 漂移,避免脚手架维护固定版本表。 */
8
+ export const MCP_SDK_VERSION = 'latest';
9
9
 
10
- const AI_STACK_VERSION = '^4.0.0';
11
- const ZOD_VERSION = '^4.0.0';
12
- const VERCEL_AI_VERSION = '^6.0.0';
10
+ const AI_STACK_VERSION = 'latest';
11
+ const ZOD_VERSION = 'latest';
12
+ const VERCEL_AI_VERSION = 'latest';
13
13
 
14
14
  const PROVIDER_SDK_PACKAGES: Record<string, { pkg: string; version: string }> = {
15
- openai: { pkg: '@ai-sdk/openai', version: '^3.0.0' },
16
- anthropic: { pkg: '@ai-sdk/anthropic', version: '^3.0.0' },
17
- google: { pkg: '@ai-sdk/google', version: '^3.0.0' },
18
- gemini: { pkg: '@ai-sdk/google', version: '^3.0.0' },
19
- deepseek: { pkg: '@ai-sdk/deepseek', version: '^1.0.0' },
20
- ollama: { pkg: '@ai-sdk/openai-compatible', version: '^1.0.0' },
21
- moonshot: { pkg: '@ai-sdk/openai-compatible', version: '^1.0.0' },
22
- zhipu: { pkg: '@ai-sdk/openai-compatible', version: '^1.0.0' },
15
+ openai: { pkg: '@ai-sdk/openai', version: 'latest' },
16
+ anthropic: { pkg: '@ai-sdk/anthropic', version: 'latest' },
17
+ google: { pkg: '@ai-sdk/google', version: 'latest' },
18
+ gemini: { pkg: '@ai-sdk/google', version: 'latest' },
19
+ deepseek: { pkg: '@ai-sdk/deepseek', version: 'latest' },
20
+ ollama: { pkg: '@ai-sdk/openai-compatible', version: 'latest' },
21
+ moonshot: { pkg: '@ai-sdk/openai-compatible', version: 'latest' },
22
+ zhipu: { pkg: '@ai-sdk/openai-compatible', version: 'latest' },
23
23
  };
24
24
 
25
25
  function providerSdkPackage(provider?: string): { pkg: string; version: string } | undefined {
@@ -0,0 +1,102 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'node:path';
3
+ import type { PackageJsonLike } from './project-deps.js';
4
+ import {
5
+ diagnoseAIDependencies,
6
+ formatAIDependencyFixCommand,
7
+ getRequiredAIDependenciesForConfig,
8
+ isAiEnabledInConfig,
9
+ findMissingPackageDependencies,
10
+ findUnresolvedPackageInstalls,
11
+ } from './project-deps.js';
12
+ import { diagnoseOptionalPeers, formatOptionalPeerFixCommand, getOptionalPeerDependencies } from './optional-peers.js';
13
+
14
+ export interface UpgradeToL4Diagnosis {
15
+ ai: ReturnType<typeof diagnoseAIDependencies>;
16
+ optionalPeers: ReturnType<typeof diagnoseOptionalPeers>;
17
+ missingAiDeps: string[];
18
+ missingOptionalPeers: string[];
19
+ fixCommand: string;
20
+ configSnippets: string[];
21
+ }
22
+
23
+ const L4_CONFIG_SNIPPETS = [
24
+ '# --- L4 可选多模态(取消注释并安装 optional peer)---',
25
+ '# ai:',
26
+ '# multimodal:',
27
+ '# audio:',
28
+ '# strategy: transcribe # 需 @zhin.js/speech',
29
+ '# speech:',
30
+ '# stt:',
31
+ '# provider: ollama',
32
+ '# model: whisper',
33
+ '# tts:',
34
+ '# provider: edge',
35
+ '# htmlRenderer:',
36
+ '# width: 540',
37
+ ];
38
+
39
+ /** minimal-bot → full-bot / L4 升级诊断 */
40
+ export function diagnoseUpgradeToL4(
41
+ cwd: string,
42
+ config: Record<string, unknown>,
43
+ pkg?: PackageJsonLike,
44
+ ): UpgradeToL4Diagnosis {
45
+ const packageJsonPath = path.join(cwd, 'package.json');
46
+ const packageJson = pkg ?? (fs.existsSync(packageJsonPath)
47
+ ? fs.readJsonSync(packageJsonPath) as PackageJsonLike
48
+ : {});
49
+
50
+ const aiEnabled = isAiEnabledInConfig(config);
51
+ const ai = aiEnabled ? diagnoseAIDependencies(cwd, config, packageJson) : null;
52
+ const optionalPeers = diagnoseOptionalPeers(cwd, config, packageJson);
53
+
54
+ const missingAiDeps = ai
55
+ ? [...new Set([...ai.missingFromPackageJson, ...ai.notInstalled])]
56
+ : [...Object.keys(getRequiredAIDependenciesForConfig({ ai: { enabled: true } }))];
57
+
58
+ if (!aiEnabled) {
59
+ const required = getRequiredAIDependenciesForConfig({ ai: { enabled: true } });
60
+ const fromPkg = findMissingPackageDependencies(packageJson, required);
61
+ const declared = Object.keys(required).filter((n) => !fromPkg.includes(n));
62
+ const notInstalled = findUnresolvedPackageInstalls(cwd, declared);
63
+ missingAiDeps.push(...fromPkg, ...notInstalled);
64
+ }
65
+
66
+ const missingOptionalPeers: string[] = [];
67
+ for (const peer of [optionalPeers.speech, optionalPeers.htmlRenderer]) {
68
+ if (!peer?.required) continue;
69
+ missingOptionalPeers.push(
70
+ ...peer.missingFromPackageJson,
71
+ ...peer.notInstalled.filter((n) => !peer.missingFromPackageJson.includes(n)),
72
+ );
73
+ }
74
+
75
+ const fixParts: string[] = [];
76
+ if (!aiEnabled || missingAiDeps.length > 0) {
77
+ const required = ai?.required ?? getRequiredAIDependenciesForConfig({ ai: { enabled: true } });
78
+ fixParts.push(formatAIDependencyFixCommand(
79
+ [...new Set(missingAiDeps)],
80
+ required,
81
+ ));
82
+ }
83
+ for (const peer of [optionalPeers.speech, optionalPeers.htmlRenderer]) {
84
+ if (peer && (peer.missingFromPackageJson.length > 0 || peer.notInstalled.length > 0)) {
85
+ fixParts.push(formatOptionalPeerFixCommand(peer));
86
+ }
87
+ }
88
+
89
+ return {
90
+ ai,
91
+ optionalPeers,
92
+ missingAiDeps: [...new Set(missingAiDeps)],
93
+ missingOptionalPeers: [...new Set(missingOptionalPeers)],
94
+ fixCommand: fixParts.join(' && '),
95
+ configSnippets: L4_CONFIG_SNIPPETS,
96
+ };
97
+ }
98
+
99
+ export function getUpgradeToL4Dependencies(config: Record<string, unknown>): Record<string, string> {
100
+ const deps = getRequiredAIDependenciesForConfig({ ai: { enabled: true } });
101
+ return { ...deps, ...getOptionalPeerDependencies(config) };
102
+ }