create-zhin-app 1.0.19 → 1.0.21
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/README.md +2 -2
- package/lib/adapter.d.ts +31 -0
- package/lib/adapter.d.ts.map +1 -0
- package/lib/adapter.js +361 -0
- package/lib/adapter.js.map +1 -0
- package/lib/ai.d.ts +36 -0
- package/lib/ai.d.ts.map +1 -0
- package/lib/ai.js +274 -0
- package/lib/ai.js.map +1 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +80 -35
- package/lib/config.js.map +1 -1
- package/lib/index.js +56 -0
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +5 -1
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/workspace.d.ts.map +1 -1
- package/lib/workspace.js +20 -22
- package/lib/workspace.js.map +1 -1
- package/package.json +1 -1
package/lib/ai.js
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
// 提供商信息
|
|
4
|
+
const PROVIDERS = [
|
|
5
|
+
{ name: 'OpenAI (GPT-4o, 推荐)', value: 'openai', defaultModel: 'gpt-4o' },
|
|
6
|
+
{ name: 'Anthropic (Claude)', value: 'anthropic', defaultModel: 'claude-sonnet-4-20250514' },
|
|
7
|
+
{ name: 'DeepSeek', value: 'deepseek', defaultModel: 'deepseek-chat' },
|
|
8
|
+
{ name: 'Moonshot (月之暗面)', value: 'moonshot', defaultModel: 'moonshot-v1-8k' },
|
|
9
|
+
{ name: '智谱 AI (GLM)', value: 'zhipu', defaultModel: 'glm-4' },
|
|
10
|
+
{ name: 'Ollama (本地部署)', value: 'ollama', defaultModel: 'qwen3:8b' },
|
|
11
|
+
];
|
|
12
|
+
/**
|
|
13
|
+
* AI 配置引导向导
|
|
14
|
+
*/
|
|
15
|
+
export async function configureAI() {
|
|
16
|
+
console.log('');
|
|
17
|
+
console.log(chalk.blue('🤖 配置 AI 智能体'));
|
|
18
|
+
const { enableAI } = await inquirer.prompt([
|
|
19
|
+
{
|
|
20
|
+
type: 'confirm',
|
|
21
|
+
name: 'enableAI',
|
|
22
|
+
message: '是否启用 AI 智能体?(大模型对话 + 工具调用)',
|
|
23
|
+
default: true,
|
|
24
|
+
}
|
|
25
|
+
]);
|
|
26
|
+
if (!enableAI) {
|
|
27
|
+
return { enabled: false };
|
|
28
|
+
}
|
|
29
|
+
// 选择提供商
|
|
30
|
+
const { provider } = await inquirer.prompt([
|
|
31
|
+
{
|
|
32
|
+
type: 'list',
|
|
33
|
+
name: 'provider',
|
|
34
|
+
message: '选择 AI 提供商:',
|
|
35
|
+
choices: PROVIDERS.map(p => ({ name: p.name, value: p.value })),
|
|
36
|
+
}
|
|
37
|
+
]);
|
|
38
|
+
const providerInfo = PROVIDERS.find(p => p.value === provider);
|
|
39
|
+
let providerConfig = {};
|
|
40
|
+
const envVarName = `AI_API_KEY`;
|
|
41
|
+
if (provider === 'ollama') {
|
|
42
|
+
// Ollama 本地部署
|
|
43
|
+
const ollamaConfig = await inquirer.prompt([
|
|
44
|
+
{
|
|
45
|
+
type: 'input',
|
|
46
|
+
name: 'host',
|
|
47
|
+
message: 'Ollama 地址:',
|
|
48
|
+
default: 'http://localhost:11434',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: 'input',
|
|
52
|
+
name: 'model',
|
|
53
|
+
message: '模型名称:',
|
|
54
|
+
default: providerInfo.defaultModel,
|
|
55
|
+
}
|
|
56
|
+
]);
|
|
57
|
+
providerConfig = {
|
|
58
|
+
host: ollamaConfig.host,
|
|
59
|
+
models: [ollamaConfig.model],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// 云端提供商
|
|
64
|
+
const cloudConfig = await inquirer.prompt([
|
|
65
|
+
{
|
|
66
|
+
type: 'input',
|
|
67
|
+
name: 'apiKey',
|
|
68
|
+
message: `${providerInfo.name.split(' (')[0]} API Key:`,
|
|
69
|
+
validate: (input) => {
|
|
70
|
+
if (!input.trim())
|
|
71
|
+
return 'API Key 不能为空(稍后可在 .env 文件中修改)';
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'input',
|
|
77
|
+
name: 'model',
|
|
78
|
+
message: '模型名称:',
|
|
79
|
+
default: providerInfo.defaultModel,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'input',
|
|
83
|
+
name: 'baseUrl',
|
|
84
|
+
message: '自定义 API 地址(留空使用默认):',
|
|
85
|
+
default: '',
|
|
86
|
+
}
|
|
87
|
+
]);
|
|
88
|
+
providerConfig = {
|
|
89
|
+
apiKey: `\${${envVarName}}`,
|
|
90
|
+
models: [cloudConfig.model || providerInfo.defaultModel],
|
|
91
|
+
...(cloudConfig.baseUrl ? { baseUrl: cloudConfig.baseUrl } : {}),
|
|
92
|
+
};
|
|
93
|
+
// 保存实际 API Key 到环境变量映射
|
|
94
|
+
providerConfig.__envApiKey = cloudConfig.apiKey;
|
|
95
|
+
}
|
|
96
|
+
// 触发方式配置
|
|
97
|
+
console.log('');
|
|
98
|
+
console.log(chalk.blue('⚡ 配置 AI 触发方式'));
|
|
99
|
+
const triggerConfig = await inquirer.prompt([
|
|
100
|
+
{
|
|
101
|
+
type: 'confirm',
|
|
102
|
+
name: 'respondToAt',
|
|
103
|
+
message: '响应 @机器人 的消息?',
|
|
104
|
+
default: true,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'confirm',
|
|
108
|
+
name: 'respondToPrivate',
|
|
109
|
+
message: '响应私聊消息?',
|
|
110
|
+
default: true,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'input',
|
|
114
|
+
name: 'prefixes',
|
|
115
|
+
message: '触发前缀(逗号分隔,如 #,AI:):',
|
|
116
|
+
default: '#',
|
|
117
|
+
}
|
|
118
|
+
]);
|
|
119
|
+
const prefixes = triggerConfig.prefixes
|
|
120
|
+
.split(',')
|
|
121
|
+
.map((p) => p.trim())
|
|
122
|
+
.filter(Boolean);
|
|
123
|
+
return {
|
|
124
|
+
enabled: true,
|
|
125
|
+
defaultProvider: provider,
|
|
126
|
+
providers: {
|
|
127
|
+
[provider]: providerConfig,
|
|
128
|
+
},
|
|
129
|
+
trigger: {
|
|
130
|
+
respondToAt: triggerConfig.respondToAt,
|
|
131
|
+
respondToPrivate: triggerConfig.respondToPrivate,
|
|
132
|
+
prefixes: prefixes.length > 0 ? prefixes : ['#'],
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 获取 AI 配置需要写入 .env 的环境变量
|
|
138
|
+
*/
|
|
139
|
+
export function generateAIEnvVars(config) {
|
|
140
|
+
if (!config.enabled || !config.providers)
|
|
141
|
+
return '';
|
|
142
|
+
const envVars = ['', '# AI 配置'];
|
|
143
|
+
for (const [, providerConfig] of Object.entries(config.providers)) {
|
|
144
|
+
const realKey = providerConfig.__envApiKey;
|
|
145
|
+
if (realKey) {
|
|
146
|
+
envVars.push(`AI_API_KEY=${realKey}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return envVars.length > 1 ? envVars.join('\n') : '';
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* 生成 YAML 格式的 AI 配置段
|
|
153
|
+
*/
|
|
154
|
+
export function generateAIConfigYaml(config) {
|
|
155
|
+
if (!config.enabled)
|
|
156
|
+
return '';
|
|
157
|
+
const lines = [
|
|
158
|
+
'',
|
|
159
|
+
'ai:',
|
|
160
|
+
' enabled: true',
|
|
161
|
+
` defaultProvider: ${config.defaultProvider}`,
|
|
162
|
+
' providers:',
|
|
163
|
+
];
|
|
164
|
+
if (config.providers) {
|
|
165
|
+
for (const [name, providerConfig] of Object.entries(config.providers)) {
|
|
166
|
+
lines.push(` ${name}:`);
|
|
167
|
+
if (providerConfig.apiKey) {
|
|
168
|
+
lines.push(` apiKey: ${providerConfig.apiKey}`);
|
|
169
|
+
}
|
|
170
|
+
if (providerConfig.host) {
|
|
171
|
+
lines.push(` host: ${providerConfig.host}`);
|
|
172
|
+
}
|
|
173
|
+
if (providerConfig.models) {
|
|
174
|
+
lines.push(' models:');
|
|
175
|
+
for (const model of providerConfig.models) {
|
|
176
|
+
lines.push(` - ${model}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (providerConfig.baseUrl) {
|
|
180
|
+
lines.push(` baseUrl: ${providerConfig.baseUrl}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (config.trigger) {
|
|
185
|
+
lines.push(' trigger:');
|
|
186
|
+
lines.push(' enabled: true');
|
|
187
|
+
lines.push(` respondToAt: ${config.trigger.respondToAt}`);
|
|
188
|
+
lines.push(` respondToPrivate: ${config.trigger.respondToPrivate}`);
|
|
189
|
+
lines.push(' prefixes:');
|
|
190
|
+
for (const prefix of config.trigger.prefixes) {
|
|
191
|
+
lines.push(` - "${prefix}"`);
|
|
192
|
+
}
|
|
193
|
+
lines.push(' ignorePrefixes:');
|
|
194
|
+
lines.push(' - /');
|
|
195
|
+
lines.push(' - "!"');
|
|
196
|
+
}
|
|
197
|
+
return lines.join('\n');
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 生成 TS/JS 格式的 AI 配置段
|
|
201
|
+
*/
|
|
202
|
+
export function generateAIConfigTS(config) {
|
|
203
|
+
if (!config.enabled)
|
|
204
|
+
return '';
|
|
205
|
+
const lines = [
|
|
206
|
+
' ai: {',
|
|
207
|
+
' enabled: true,',
|
|
208
|
+
` defaultProvider: '${config.defaultProvider}',`,
|
|
209
|
+
' providers: {',
|
|
210
|
+
];
|
|
211
|
+
if (config.providers) {
|
|
212
|
+
for (const [name, providerConfig] of Object.entries(config.providers)) {
|
|
213
|
+
lines.push(` ${name}: {`);
|
|
214
|
+
if (providerConfig.apiKey) {
|
|
215
|
+
lines.push(` apiKey: '${providerConfig.apiKey}',`);
|
|
216
|
+
}
|
|
217
|
+
if (providerConfig.host) {
|
|
218
|
+
lines.push(` host: '${providerConfig.host}',`);
|
|
219
|
+
}
|
|
220
|
+
if (providerConfig.models) {
|
|
221
|
+
lines.push(` models: [${providerConfig.models.map(m => `'${m}'`).join(', ')}],`);
|
|
222
|
+
}
|
|
223
|
+
if (providerConfig.baseUrl) {
|
|
224
|
+
lines.push(` baseUrl: '${providerConfig.baseUrl}',`);
|
|
225
|
+
}
|
|
226
|
+
lines.push(' },');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
lines.push(' },');
|
|
230
|
+
if (config.trigger) {
|
|
231
|
+
lines.push(' trigger: {');
|
|
232
|
+
lines.push(' enabled: true,');
|
|
233
|
+
lines.push(` respondToAt: ${config.trigger.respondToAt},`);
|
|
234
|
+
lines.push(` respondToPrivate: ${config.trigger.respondToPrivate},`);
|
|
235
|
+
lines.push(` prefixes: [${config.trigger.prefixes.map(p => `'${p}'`).join(', ')}],`);
|
|
236
|
+
lines.push(" ignorePrefixes: ['/', '!'],");
|
|
237
|
+
lines.push(' },');
|
|
238
|
+
}
|
|
239
|
+
lines.push(' },');
|
|
240
|
+
return lines.join('\n');
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* 生成 JSON 格式的 AI 配置段
|
|
244
|
+
*/
|
|
245
|
+
export function generateAIConfigJSON(config) {
|
|
246
|
+
if (!config.enabled)
|
|
247
|
+
return '';
|
|
248
|
+
const obj = {
|
|
249
|
+
enabled: true,
|
|
250
|
+
defaultProvider: config.defaultProvider,
|
|
251
|
+
providers: {},
|
|
252
|
+
trigger: config.trigger ? {
|
|
253
|
+
enabled: true,
|
|
254
|
+
...config.trigger,
|
|
255
|
+
ignorePrefixes: ['/', '!'],
|
|
256
|
+
} : undefined,
|
|
257
|
+
};
|
|
258
|
+
if (config.providers) {
|
|
259
|
+
for (const [name, providerConfig] of Object.entries(config.providers)) {
|
|
260
|
+
const clean = {};
|
|
261
|
+
if (providerConfig.apiKey)
|
|
262
|
+
clean.apiKey = providerConfig.apiKey;
|
|
263
|
+
if (providerConfig.host)
|
|
264
|
+
clean.host = providerConfig.host;
|
|
265
|
+
if (providerConfig.models)
|
|
266
|
+
clean.models = providerConfig.models;
|
|
267
|
+
if (providerConfig.baseUrl)
|
|
268
|
+
clean.baseUrl = providerConfig.baseUrl;
|
|
269
|
+
obj.providers[name] = clean;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return ` "ai": ${JSON.stringify(obj, null, 4).replace(/^/gm, ' ').trimStart()},`;
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=ai.js.map
|
package/lib/ai.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
|
package/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKzD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA+CtE;AASD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAsG5G;AAuBD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwK3G"}
|
package/lib/config.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import path from 'path';
|
|
3
|
+
import { generateAIConfigYaml, generateAIConfigTS, generateAIConfigJSON } from './ai.js';
|
|
4
|
+
import { generateBotsConfigYaml, generateBotsConfigTS, generateBotsConfigJSON } from './adapter.js';
|
|
3
5
|
// 生成数据库环境变量
|
|
4
6
|
export function generateDatabaseEnvVars(config) {
|
|
5
7
|
const envVars = [];
|
|
@@ -87,10 +89,7 @@ export function generateDatabaseConfig(config, format) {
|
|
|
87
89
|
if (typeof value === 'object' && value !== null) {
|
|
88
90
|
configLines.push(` ${key}: {`);
|
|
89
91
|
Object.entries(value).forEach(([subKey, subValue]) => {
|
|
90
|
-
if (typeof subValue === 'string' && subValue.
|
|
91
|
-
configLines.push(` ${subKey}: ${subValue},`);
|
|
92
|
-
}
|
|
93
|
-
else if (typeof subValue === 'string' && subValue.includes('parseInt(')) {
|
|
92
|
+
if (typeof subValue === 'string' && (subValue.includes('env.') || subValue.includes('parseInt('))) {
|
|
94
93
|
configLines.push(` ${subKey}: ${subValue},`);
|
|
95
94
|
}
|
|
96
95
|
else {
|
|
@@ -99,10 +98,7 @@ export function generateDatabaseConfig(config, format) {
|
|
|
99
98
|
});
|
|
100
99
|
configLines.push(' },');
|
|
101
100
|
}
|
|
102
|
-
else if (typeof value === 'string' && value.
|
|
103
|
-
configLines.push(` ${key}: ${value},`);
|
|
104
|
-
}
|
|
105
|
-
else if (typeof value === 'string' && value.includes('parseInt(')) {
|
|
101
|
+
else if (typeof value === 'string' && (value.includes('env.') || value.includes('parseInt('))) {
|
|
106
102
|
configLines.push(` ${key}: ${value},`);
|
|
107
103
|
}
|
|
108
104
|
else {
|
|
@@ -112,10 +108,21 @@ export function generateDatabaseConfig(config, format) {
|
|
|
112
108
|
configLines.push(' }');
|
|
113
109
|
return `database: ${configLines.join('\n ')},`;
|
|
114
110
|
}
|
|
115
|
-
case 'yaml':
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
111
|
+
case 'yaml': {
|
|
112
|
+
const yamlLines = [];
|
|
113
|
+
Object.entries(configObj).forEach(([key, value]) => {
|
|
114
|
+
if (typeof value === 'object' && value !== null) {
|
|
115
|
+
yamlLines.push(` ${key}:`);
|
|
116
|
+
Object.entries(value).forEach(([subKey, subValue]) => {
|
|
117
|
+
yamlLines.push(` ${subKey}: ${subValue}`);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
yamlLines.push(` ${key}: ${value}`);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return yamlLines.join('\n');
|
|
125
|
+
}
|
|
119
126
|
case 'json':
|
|
120
127
|
const jsonStr = JSON.stringify(configObj, null, 2).replace(/^/gm, ' ');
|
|
121
128
|
return ` "database": ${jsonStr},`;
|
|
@@ -123,10 +130,60 @@ export function generateDatabaseConfig(config, format) {
|
|
|
123
130
|
return '';
|
|
124
131
|
}
|
|
125
132
|
}
|
|
133
|
+
// 构建 plugins 列表(根据用户选择的适配器)
|
|
134
|
+
function buildPluginsList(options) {
|
|
135
|
+
const plugins = ['example', '@zhin.js/http', '@zhin.js/console'];
|
|
136
|
+
if (options.adapters?.plugins) {
|
|
137
|
+
for (const plugin of options.adapters.plugins) {
|
|
138
|
+
if (!plugins.includes(plugin)) {
|
|
139
|
+
plugins.push(plugin);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// 默认只添加 sandbox
|
|
145
|
+
if (!plugins.includes('@zhin.js/adapter-sandbox')) {
|
|
146
|
+
plugins.push('@zhin.js/adapter-sandbox');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return plugins;
|
|
150
|
+
}
|
|
126
151
|
// 创建配置文件
|
|
127
152
|
export async function createConfigFile(appPath, format, options) {
|
|
128
153
|
const configFormat = format;
|
|
129
154
|
const databaseConfig = options.database ? generateDatabaseConfig(options.database, configFormat) : '';
|
|
155
|
+
const plugins = buildPluginsList(options);
|
|
156
|
+
// 生成 bots 和 AI 配置
|
|
157
|
+
const botsYaml = options.adapters ? generateBotsConfigYaml(options.adapters) : '';
|
|
158
|
+
const botsTS = options.adapters ? generateBotsConfigTS(options.adapters) : '';
|
|
159
|
+
const botsJSON = options.adapters ? generateBotsConfigJSON(options.adapters) : '';
|
|
160
|
+
const aiYaml = options.ai ? generateAIConfigYaml(options.ai) : '';
|
|
161
|
+
const aiTS = options.ai ? generateAIConfigTS(options.ai) : '';
|
|
162
|
+
const aiJSON = options.ai ? generateAIConfigJSON(options.ai) : '';
|
|
163
|
+
// TS/JS 格式的 plugins 列表
|
|
164
|
+
const pluginsTSLines = plugins.map(p => ` '${p}'`).join(',\n');
|
|
165
|
+
// YAML 格式的 plugins 列表
|
|
166
|
+
const pluginsYamlLines = plugins.map(p => ` - "${p}"`).join('\n');
|
|
167
|
+
// JSON 格式的 plugins 列表
|
|
168
|
+
const pluginsJsonLines = plugins.map(p => ` "${p}"`).join(',\n');
|
|
169
|
+
// 构建 TS/JS 的额外段(bots + ai)
|
|
170
|
+
let tsExtraConfig = '';
|
|
171
|
+
if (botsTS)
|
|
172
|
+
tsExtraConfig += `\n${botsTS}`;
|
|
173
|
+
if (aiTS)
|
|
174
|
+
tsExtraConfig += `\n${aiTS}`;
|
|
175
|
+
// 构建 YAML 的额外段(bots + ai)
|
|
176
|
+
let yamlExtraConfig = '';
|
|
177
|
+
if (botsYaml)
|
|
178
|
+
yamlExtraConfig += botsYaml;
|
|
179
|
+
if (aiYaml)
|
|
180
|
+
yamlExtraConfig += aiYaml;
|
|
181
|
+
// 构建 JSON 的额外段(bots + ai)
|
|
182
|
+
let jsonExtraConfig = '';
|
|
183
|
+
if (botsJSON)
|
|
184
|
+
jsonExtraConfig += `\n ${botsJSON}`;
|
|
185
|
+
if (aiJSON)
|
|
186
|
+
jsonExtraConfig += `\n ${aiJSON}`;
|
|
130
187
|
const configMap = {
|
|
131
188
|
ts: ['zhin.config.ts',
|
|
132
189
|
`import { defineConfig, LogLevel } from 'zhin.js';
|
|
@@ -134,7 +191,7 @@ export async function createConfigFile(appPath, format, options) {
|
|
|
134
191
|
export default defineConfig(async (env) => {
|
|
135
192
|
return {
|
|
136
193
|
log_level: LogLevel.INFO,
|
|
137
|
-
${databaseConfig ? ` ${databaseConfig}` : ''} plugin_dirs: [
|
|
194
|
+
${databaseConfig ? ` ${databaseConfig}\n` : ''} plugin_dirs: [
|
|
138
195
|
'node_modules',
|
|
139
196
|
'./src/plugins'
|
|
140
197
|
],
|
|
@@ -147,10 +204,7 @@ ${databaseConfig ? ` ${databaseConfig}` : ''} plugin_dirs: [
|
|
|
147
204
|
'cron'
|
|
148
205
|
],
|
|
149
206
|
plugins: [
|
|
150
|
-
|
|
151
|
-
'@zhin.js/http',
|
|
152
|
-
'@zhin.js/console',
|
|
153
|
-
'@zhin.js/adapter-sandbox'
|
|
207
|
+
${pluginsTSLines}
|
|
154
208
|
],
|
|
155
209
|
http: {
|
|
156
210
|
port: 8086,
|
|
@@ -161,7 +215,7 @@ ${databaseConfig ? ` ${databaseConfig}` : ''} plugin_dirs: [
|
|
|
161
215
|
console: {
|
|
162
216
|
enabled: true,
|
|
163
217
|
lazyLoad: true
|
|
164
|
-
}
|
|
218
|
+
},${tsExtraConfig}
|
|
165
219
|
};
|
|
166
220
|
});
|
|
167
221
|
`],
|
|
@@ -171,7 +225,7 @@ ${databaseConfig ? ` ${databaseConfig}` : ''} plugin_dirs: [
|
|
|
171
225
|
export default defineConfig(async (env) => {
|
|
172
226
|
return {
|
|
173
227
|
log_level: LogLevel.INFO,
|
|
174
|
-
${databaseConfig ? ` ${databaseConfig}` : ''} plugin_dirs: [
|
|
228
|
+
${databaseConfig ? ` ${databaseConfig}\n` : ''} plugin_dirs: [
|
|
175
229
|
'node_modules',
|
|
176
230
|
'./src/plugins'
|
|
177
231
|
],
|
|
@@ -184,10 +238,7 @@ ${databaseConfig ? ` ${databaseConfig}` : ''} plugin_dirs: [
|
|
|
184
238
|
'cron'
|
|
185
239
|
],
|
|
186
240
|
plugins: [
|
|
187
|
-
|
|
188
|
-
'@zhin.js/http',
|
|
189
|
-
'@zhin.js/console',
|
|
190
|
-
'@zhin.js/adapter-sandbox'
|
|
241
|
+
${pluginsTSLines}
|
|
191
242
|
],
|
|
192
243
|
http: {
|
|
193
244
|
port: 8086,
|
|
@@ -198,7 +249,7 @@ ${databaseConfig ? ` ${databaseConfig}` : ''} plugin_dirs: [
|
|
|
198
249
|
console: {
|
|
199
250
|
enabled: true,
|
|
200
251
|
lazyLoad: true
|
|
201
|
-
}
|
|
252
|
+
},${tsExtraConfig}
|
|
202
253
|
};
|
|
203
254
|
});
|
|
204
255
|
`],
|
|
@@ -217,10 +268,7 @@ services:
|
|
|
217
268
|
- cron
|
|
218
269
|
|
|
219
270
|
plugins:
|
|
220
|
-
|
|
221
|
-
- "@zhin.js/http"
|
|
222
|
-
- "@zhin.js/console"
|
|
223
|
-
- "@zhin.js/adapter-sandbox"
|
|
271
|
+
${pluginsYamlLines}
|
|
224
272
|
|
|
225
273
|
http:
|
|
226
274
|
port: 8086
|
|
@@ -231,12 +279,12 @@ http:
|
|
|
231
279
|
console:
|
|
232
280
|
enabled: true
|
|
233
281
|
lazyLoad: true
|
|
282
|
+
${yamlExtraConfig}
|
|
234
283
|
`],
|
|
235
284
|
json: ['zhin.config.json',
|
|
236
285
|
`{
|
|
237
286
|
"log_level": 1,
|
|
238
|
-
${databaseConfig ? ` ${databaseConfig}
|
|
239
|
-
"plugin_dirs": [
|
|
287
|
+
${databaseConfig ? ` ${databaseConfig}\n` : ''} "plugin_dirs": [
|
|
240
288
|
"node_modules",
|
|
241
289
|
"./src/plugins"
|
|
242
290
|
],
|
|
@@ -249,10 +297,7 @@ ${databaseConfig ? ` ${databaseConfig},` : ''}
|
|
|
249
297
|
"cron"
|
|
250
298
|
],
|
|
251
299
|
"plugins": [
|
|
252
|
-
|
|
253
|
-
"@zhin.js/http",
|
|
254
|
-
"@zhin.js/console",
|
|
255
|
-
"@zhin.js/adapter-sandbox"
|
|
300
|
+
${pluginsJsonLines}
|
|
256
301
|
],
|
|
257
302
|
"http": {
|
|
258
303
|
"port": 8086,
|
|
@@ -263,7 +308,7 @@ ${databaseConfig ? ` ${databaseConfig},` : ''}
|
|
|
263
308
|
"console": {
|
|
264
309
|
"enabled": true,
|
|
265
310
|
"lazyLoad": true
|
|
266
|
-
}
|
|
311
|
+
}${jsonExtraConfig ? `,${jsonExtraConfig}` : ''}
|
|
267
312
|
}
|
|
268
313
|
`]
|
|
269
314
|
};
|
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -7,6 +7,8 @@ import { generateRandomPassword, getCurrentUsername, getDatabaseDisplayName } fr
|
|
|
7
7
|
import { configureDatabaseOptions } from './database.js';
|
|
8
8
|
import { createWorkspace } from './workspace.js';
|
|
9
9
|
import { ensurePnpmInstalled, installDependencies } from './install.js';
|
|
10
|
+
import { configureAdapters } from './adapter.js';
|
|
11
|
+
import { configureAI } from './ai.js';
|
|
10
12
|
async function main() {
|
|
11
13
|
const args = process.argv.slice(2);
|
|
12
14
|
const options = {
|
|
@@ -121,6 +123,31 @@ async function main() {
|
|
|
121
123
|
const databaseConfig = await configureDatabaseOptions();
|
|
122
124
|
options.database = databaseConfig;
|
|
123
125
|
}
|
|
126
|
+
// 适配器选择
|
|
127
|
+
if (!options.adapters) {
|
|
128
|
+
if (options.yes) {
|
|
129
|
+
// -y 模式:只使用 Sandbox
|
|
130
|
+
options.adapters = {
|
|
131
|
+
packages: ['@zhin.js/adapter-sandbox'],
|
|
132
|
+
plugins: ['@zhin.js/adapter-sandbox'],
|
|
133
|
+
bots: [],
|
|
134
|
+
envVars: {},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
options.adapters = await configureAdapters();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// AI 配置引导
|
|
142
|
+
if (!options.ai) {
|
|
143
|
+
if (options.yes) {
|
|
144
|
+
// -y 模式:不启用 AI
|
|
145
|
+
options.ai = { enabled: false };
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
options.ai = await configureAI();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
124
151
|
if (!name?.trim()) {
|
|
125
152
|
console.error(chalk.red('项目名称不能为空'));
|
|
126
153
|
process.exit(1);
|
|
@@ -161,6 +188,35 @@ async function main() {
|
|
|
161
188
|
console.log(` ${chalk.gray('请根据实际情况修改数据库连接参数')}`);
|
|
162
189
|
}
|
|
163
190
|
}
|
|
191
|
+
// 显示适配器信息
|
|
192
|
+
if (options.adapters && options.adapters.plugins.length > 0) {
|
|
193
|
+
console.log('');
|
|
194
|
+
console.log(chalk.blue('🔌 已配置适配器:'));
|
|
195
|
+
for (const plugin of options.adapters.plugins) {
|
|
196
|
+
const adapterName = plugin.replace('@zhin.js/adapter-', '');
|
|
197
|
+
console.log(` ${chalk.gray('•')} ${chalk.cyan(adapterName)}`);
|
|
198
|
+
}
|
|
199
|
+
if (Object.keys(options.adapters.envVars).length > 0) {
|
|
200
|
+
console.log(` ${chalk.yellow('⚠ 适配器凭据已保存到')} ${chalk.cyan('.env')} ${chalk.yellow('文件')}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// 显示 AI 配置信息
|
|
204
|
+
if (options.ai?.enabled) {
|
|
205
|
+
console.log('');
|
|
206
|
+
console.log(chalk.blue('🤖 AI 智能体配置:'));
|
|
207
|
+
console.log(` ${chalk.gray('提供商:')} ${chalk.cyan(options.ai.defaultProvider || 'N/A')}`);
|
|
208
|
+
if (options.ai.trigger) {
|
|
209
|
+
const triggers = [];
|
|
210
|
+
if (options.ai.trigger.respondToAt)
|
|
211
|
+
triggers.push('@机器人');
|
|
212
|
+
if (options.ai.trigger.respondToPrivate)
|
|
213
|
+
triggers.push('私聊');
|
|
214
|
+
if (options.ai.trigger.prefixes.length > 0)
|
|
215
|
+
triggers.push(`前缀 ${options.ai.trigger.prefixes.join('/')}`);
|
|
216
|
+
console.log(` ${chalk.gray('触发方式:')} ${chalk.cyan(triggers.join('、'))}`);
|
|
217
|
+
}
|
|
218
|
+
console.log(` ${chalk.yellow('⚠ API Key 已保存到')} ${chalk.cyan('.env')} ${chalk.yellow('文件')}`);
|
|
219
|
+
}
|
|
164
220
|
console.log('');
|
|
165
221
|
console.log('📝 下一步操作:');
|
|
166
222
|
console.log(` ${chalk.cyan(`cd ${realName}`)}`);
|