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 CHANGED
@@ -364,7 +364,7 @@ pnpm stop
364
364
 
365
365
  3. **Node.js 版本问题**
366
366
  ```bash
367
- # 检查 Node.js 版本(需要 >= 18.0.0)
367
+ # 检查 Node.js 版本(需要 ^20.19.0 或 >=22.12.0)
368
368
  node --version
369
369
 
370
370
  # 升级 Node.js
@@ -373,7 +373,7 @@ pnpm stop
373
373
 
374
374
  ## 环境要求
375
375
 
376
- - **Node.js**: >= 18.0.0
376
+ - **Node.js**: ^20.19.0 或 >=22.12.0
377
377
  - **npm**: >= 8.0.0 (或对应版本的 yarn/pnpm)
378
378
  - **操作系统**: Windows 10+, macOS 10.15+, Linux (现代发行版)
379
379
 
@@ -0,0 +1,31 @@
1
+ export interface AdapterSetupResult {
2
+ packages: string[];
3
+ plugins: string[];
4
+ bots: Array<Record<string, any>>;
5
+ envVars: Record<string, string>;
6
+ }
7
+ /**
8
+ * 适配器选择与 Bot 配置引导向导
9
+ */
10
+ export declare function configureAdapters(): Promise<AdapterSetupResult>;
11
+ /**
12
+ * 获取适配器配置需要写入 .env 的环境变量文本
13
+ */
14
+ export declare function generateAdapterEnvVars(result: AdapterSetupResult): string;
15
+ /**
16
+ * 生成 YAML 格式的 bots 配置段
17
+ */
18
+ export declare function generateBotsConfigYaml(result: AdapterSetupResult): string;
19
+ /**
20
+ * 生成 TS/JS 格式的 bots 配置段
21
+ */
22
+ export declare function generateBotsConfigTS(result: AdapterSetupResult): string;
23
+ /**
24
+ * 生成 JSON 格式的 bots 配置段
25
+ */
26
+ export declare function generateBotsConfigJSON(result: AdapterSetupResult): string;
27
+ /**
28
+ * 获取适配器所需的额外依赖包
29
+ */
30
+ export declare function getAdapterDependencies(result: AdapterSetupResult): Record<string, string>;
31
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAkMD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAgGrE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CASzE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAiBzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAsBvE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAGzE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBzF"}
package/lib/adapter.js ADDED
@@ -0,0 +1,361 @@
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ const ADAPTERS = [
4
+ {
5
+ name: 'Sandbox (调试沙盒,默认)',
6
+ value: 'sandbox',
7
+ package: '@zhin.js/adapter-sandbox',
8
+ plugin: '@zhin.js/adapter-sandbox',
9
+ needsHttp: true,
10
+ fields: [], // Sandbox 不需要额外配置
11
+ },
12
+ {
13
+ name: 'ICQQ (QQ)',
14
+ value: 'icqq',
15
+ package: '@zhin.js/adapter-icqq',
16
+ plugin: '@zhin.js/adapter-icqq',
17
+ extraDeps: { '@icqqjs/icqq': 'latest' },
18
+ needsHttp: false,
19
+ fields: [
20
+ { key: 'name', message: 'QQ 号:', required: true, envKey: 'ICQQ_ACCOUNT' },
21
+ { key: 'password', message: 'QQ 密码(留空扫码登录):', type: 'password', envKey: 'ICQQ_PASSWORD' },
22
+ {
23
+ key: 'platform', message: '登录平台:', type: 'list', default: '5',
24
+ choices: [
25
+ { name: 'iPad (推荐)', value: '5' },
26
+ { name: 'Android 手机', value: '1' },
27
+ { name: 'Android 手表', value: '3' },
28
+ { name: 'macOS', value: '4' },
29
+ ]
30
+ },
31
+ { key: 'sign_api_addr', message: '签名 API 地址:', required: true, envKey: 'ICQQ_SIGN_API_ADDR' },
32
+ ],
33
+ },
34
+ {
35
+ name: 'QQ 官方',
36
+ value: 'qq',
37
+ package: '@zhin.js/adapter-qq',
38
+ plugin: '@zhin.js/adapter-qq',
39
+ needsHttp: false,
40
+ fields: [
41
+ { key: 'appId', message: 'App ID:', required: true, envKey: 'QQ_APP_ID' },
42
+ { key: 'appSecret', message: 'App Secret:', required: true, type: 'password', envKey: 'QQ_APP_SECRET' },
43
+ { key: 'mode', message: '接受消息模式:', type: 'list', default: 'public',
44
+ choices: [
45
+ { name: 'websocket 模式(推荐)', value: 'websocket' },
46
+ { name: 'webhook 模式', value: 'webhook' },
47
+ { name: 'middleware 模式', value: 'middleware' },
48
+ ]
49
+ },
50
+ {
51
+ key: 'sandbox', message: '是否为沙箱环境:', type: 'list', default: 'false',
52
+ choices: [
53
+ { name: '正式环境', value: 'false' },
54
+ { name: '沙箱环境', value: 'true' },
55
+ ]
56
+ }
57
+ ],
58
+ },
59
+ {
60
+ name: 'KOOK',
61
+ value: 'kook',
62
+ package: '@zhin.js/adapter-kook',
63
+ plugin: '@zhin.js/adapter-kook',
64
+ needsHttp: true,
65
+ fields: [
66
+ { key: 'token', message: 'KOOK Bot Token:', required: true, type: 'password', envKey: 'KOOK_TOKEN' },
67
+ ],
68
+ },
69
+ {
70
+ name: 'Discord',
71
+ value: 'discord',
72
+ package: '@zhin.js/adapter-discord',
73
+ plugin: '@zhin.js/adapter-discord',
74
+ extraDeps: { 'discord.js': 'latest' },
75
+ needsHttp: true,
76
+ fields: [
77
+ { key: 'token', message: 'Discord Bot Token:', required: true, type: 'password', envKey: 'DISCORD_TOKEN' },
78
+ ],
79
+ },
80
+ {
81
+ name: 'Telegram',
82
+ value: 'telegram',
83
+ package: '@zhin.js/adapter-telegram',
84
+ plugin: '@zhin.js/adapter-telegram',
85
+ needsHttp: false,
86
+ fields: [
87
+ { key: 'token', message: 'Telegram Bot Token:', required: true, type: 'password', envKey: 'TELEGRAM_TOKEN' },
88
+ ],
89
+ },
90
+ {
91
+ name: 'Slack',
92
+ value: 'slack',
93
+ package: '@zhin.js/adapter-slack',
94
+ plugin: '@zhin.js/adapter-slack',
95
+ needsHttp: false,
96
+ fields: [
97
+ { key: 'botToken', message: 'Slack Bot Token:', required: true, type: 'password', envKey: 'SLACK_BOT_TOKEN' },
98
+ { key: 'signingSecret', message: 'Signing Secret:', required: true, type: 'password', envKey: 'SLACK_SIGNING_SECRET' },
99
+ { key: 'appToken', message: 'App Token:', required: true, type: 'password', envKey: 'SLACK_APP_TOKEN' },
100
+ ],
101
+ },
102
+ {
103
+ name: '钉钉',
104
+ value: 'dingtalk',
105
+ package: '@zhin.js/adapter-dingtalk',
106
+ plugin: '@zhin.js/adapter-dingtalk',
107
+ needsHttp: true,
108
+ fields: [
109
+ { key: 'appKey', message: 'App Key:', required: true, envKey: 'DINGTALK_APP_KEY' },
110
+ { key: 'appSecret', message: 'App Secret:', required: true, type: 'password', envKey: 'DINGTALK_APP_SECRET' },
111
+ { key: 'webhookPath', message: 'Webhook 路径:', default: '/dingtalk/webhook' },
112
+ ],
113
+ },
114
+ {
115
+ name: '飞书',
116
+ value: 'lark',
117
+ package: '@zhin.js/adapter-lark',
118
+ plugin: '@zhin.js/adapter-lark',
119
+ needsHttp: true,
120
+ fields: [
121
+ { key: 'appId', message: 'App ID:', required: true, envKey: 'LARK_APP_ID' },
122
+ { key: 'appSecret', message: 'App Secret:', required: true, type: 'password', envKey: 'LARK_APP_SECRET' },
123
+ { key: 'webhookPath', message: 'Webhook 路径:', default: '/lark/webhook' },
124
+ ],
125
+ },
126
+ {
127
+ name: 'OneBot v11',
128
+ value: 'onebot11',
129
+ package: '@zhin.js/adapter-onebot11',
130
+ plugin: '@zhin.js/adapter-onebot11',
131
+ needsHttp: false,
132
+ fields: [
133
+ {
134
+ key: 'type', message: '连接方式:', type: 'list', default: 'ws_reverse',
135
+ choices: [
136
+ { name: '反向 WebSocket(推荐)', value: 'ws_reverse' },
137
+ { name: '正向 WebSocket', value: 'ws' },
138
+ { name: 'HTTP SSE', value: 'http_sse' },
139
+ ]
140
+ },
141
+ { key: 'url', message: '连接地址:', default: 'ws://127.0.0.1:6700' },
142
+ ],
143
+ },
144
+ {
145
+ name: '微信公众号',
146
+ value: 'wechat-mp',
147
+ package: '@zhin.js/adapter-wechat-mp',
148
+ plugin: '@zhin.js/adapter-wechat-mp',
149
+ needsHttp: true,
150
+ fields: [
151
+ { key: 'appId', message: 'App ID:', required: true, envKey: 'WECHAT_APP_ID' },
152
+ { key: 'appSecret', message: 'App Secret:', required: true, type: 'password', envKey: 'WECHAT_APP_SECRET' },
153
+ { key: 'token', message: '验证 Token:', required: true, envKey: 'WECHAT_TOKEN' },
154
+ { key: 'webhookPath', message: 'Webhook 路径:', default: '/wechat/webhook' },
155
+ ],
156
+ },
157
+ {
158
+ name: 'Email',
159
+ value: 'email',
160
+ package: '@zhin.js/adapter-email',
161
+ plugin: '@zhin.js/adapter-email',
162
+ needsHttp: false,
163
+ fields: [
164
+ { key: 'smtpHost', message: 'SMTP 服务器:', required: true, default: 'smtp.qq.com' },
165
+ { key: 'smtpPort', message: 'SMTP 端口:', default: '465' },
166
+ { key: 'imapHost', message: 'IMAP 服务器:', required: true, default: 'imap.qq.com' },
167
+ { key: 'imapPort', message: 'IMAP 端口:', default: '993' },
168
+ { key: 'user', message: '邮箱地址:', required: true, envKey: 'EMAIL_USER' },
169
+ { key: 'password', message: '邮箱密码/授权码:', required: true, type: 'password', envKey: 'EMAIL_PASSWORD' },
170
+ ],
171
+ },
172
+ ];
173
+ /**
174
+ * 适配器选择与 Bot 配置引导向导
175
+ */
176
+ export async function configureAdapters() {
177
+ console.log('');
178
+ console.log(chalk.blue('🔌 配置聊天适配器'));
179
+ // 列出适配器供用户多选,sandbox 默认勾选
180
+ const { selectedAdapters } = await inquirer.prompt([
181
+ {
182
+ type: 'checkbox',
183
+ name: 'selectedAdapters',
184
+ message: '选择聊天平台适配器(空格选择,回车确认):',
185
+ choices: ADAPTERS.map(a => ({
186
+ name: a.name,
187
+ value: a.value,
188
+ checked: a.value === 'sandbox',
189
+ disabled: a.value === 'sandbox' ? '默认必选' : false,
190
+ })),
191
+ validate: (input) => {
192
+ if (input.length === 0)
193
+ return '至少选择一个适配器';
194
+ return true;
195
+ }
196
+ }
197
+ ]);
198
+ // 确保 sandbox 始终在列表中
199
+ const adapterValues = selectedAdapters.includes('sandbox')
200
+ ? selectedAdapters
201
+ : ['sandbox', ...selectedAdapters];
202
+ const result = {
203
+ packages: [],
204
+ plugins: [],
205
+ bots: [],
206
+ envVars: {},
207
+ };
208
+ // 收集每个适配器的配置
209
+ for (const adapterValue of adapterValues) {
210
+ const adapterDef = ADAPTERS.find(a => a.value === adapterValue);
211
+ if (!adapterDef)
212
+ continue;
213
+ // 添加包和插件名
214
+ result.packages.push(adapterDef.package);
215
+ if (adapterDef.extraDeps) {
216
+ for (const [pkg, ver] of Object.entries(adapterDef.extraDeps)) {
217
+ result.packages.push(`${pkg}@${ver}`);
218
+ }
219
+ }
220
+ result.plugins.push(adapterDef.plugin);
221
+ // Sandbox 不需要 bot 配置
222
+ if (adapterValue === 'sandbox')
223
+ continue;
224
+ // 如果该适配器没有配置字段,跳过
225
+ if (adapterDef.fields.length === 0)
226
+ continue;
227
+ console.log('');
228
+ console.log(chalk.yellow(` 📝 配置 ${adapterDef.name.split(' (')[0]} Bot`));
229
+ const botConfig = {
230
+ context: adapterDef.value,
231
+ };
232
+ for (const field of adapterDef.fields) {
233
+ const promptConfig = {
234
+ type: field.type || 'input',
235
+ name: 'value',
236
+ message: ` ${field.message}`,
237
+ default: field.default,
238
+ };
239
+ if (field.type === 'list' && field.choices) {
240
+ promptConfig.choices = field.choices;
241
+ }
242
+ if (field.required) {
243
+ promptConfig.validate = (input) => {
244
+ if (!input || !input.trim())
245
+ return `${field.message.replace(':', '')} 不能为空`;
246
+ return true;
247
+ };
248
+ }
249
+ const { value } = await inquirer.prompt([promptConfig]);
250
+ if (field.envKey) {
251
+ // 敏感信息存 .env,配置引用环境变量
252
+ result.envVars[field.envKey] = value || '';
253
+ botConfig[field.key] = `\${${field.envKey}}`;
254
+ }
255
+ else {
256
+ botConfig[field.key] = value;
257
+ }
258
+ }
259
+ result.bots.push(botConfig);
260
+ }
261
+ return result;
262
+ }
263
+ /**
264
+ * 获取适配器配置需要写入 .env 的环境变量文本
265
+ */
266
+ export function generateAdapterEnvVars(result) {
267
+ const entries = Object.entries(result.envVars);
268
+ if (entries.length === 0)
269
+ return '';
270
+ const lines = ['', '# 适配器配置'];
271
+ for (const [key, value] of entries) {
272
+ lines.push(`${key}=${value}`);
273
+ }
274
+ return lines.join('\n');
275
+ }
276
+ /**
277
+ * 生成 YAML 格式的 bots 配置段
278
+ */
279
+ export function generateBotsConfigYaml(result) {
280
+ if (result.bots.length === 0)
281
+ return '';
282
+ const lines = ['', 'bots:'];
283
+ for (const bot of result.bots) {
284
+ const { context, ...config } = bot;
285
+ lines.push(` - context: ${context}`);
286
+ for (const [key, value] of Object.entries(config)) {
287
+ if (typeof value === 'object') {
288
+ lines.push(` ${key}: ${JSON.stringify(value)}`);
289
+ }
290
+ else {
291
+ lines.push(` ${key}: ${value}`);
292
+ }
293
+ }
294
+ }
295
+ return lines.join('\n');
296
+ }
297
+ /**
298
+ * 生成 TS/JS 格式的 bots 配置段
299
+ */
300
+ export function generateBotsConfigTS(result) {
301
+ if (result.bots.length === 0)
302
+ return '';
303
+ const lines = [' bots: ['];
304
+ for (const bot of result.bots) {
305
+ lines.push(' {');
306
+ for (const [key, value] of Object.entries(bot)) {
307
+ if (typeof value === 'string' && value.startsWith('${')) {
308
+ // 环境变量引用 — 保持 '${VAR}' 格式
309
+ lines.push(` ${key}: '${value}',`);
310
+ }
311
+ else if (typeof value === 'string') {
312
+ lines.push(` ${key}: '${value}',`);
313
+ }
314
+ else {
315
+ lines.push(` ${key}: ${JSON.stringify(value)},`);
316
+ }
317
+ }
318
+ lines.push(' },');
319
+ }
320
+ lines.push(' ],');
321
+ return lines.join('\n');
322
+ }
323
+ /**
324
+ * 生成 JSON 格式的 bots 配置段
325
+ */
326
+ export function generateBotsConfigJSON(result) {
327
+ if (result.bots.length === 0)
328
+ return '';
329
+ return ` "bots": ${JSON.stringify(result.bots, null, 4).replace(/^/gm, ' ').trimStart()},`;
330
+ }
331
+ /**
332
+ * 获取适配器所需的额外依赖包
333
+ */
334
+ export function getAdapterDependencies(result) {
335
+ const deps = {};
336
+ for (const pkg of result.packages) {
337
+ if (pkg.includes('@')) {
338
+ // 处理 package@version 格式
339
+ const atIdx = pkg.lastIndexOf('@');
340
+ if (atIdx > 0) {
341
+ const name = pkg.substring(0, atIdx);
342
+ const version = pkg.substring(atIdx + 1);
343
+ if (name.startsWith('@')) {
344
+ // 如 @icqqjs/icqq@latest
345
+ deps[name] = version;
346
+ }
347
+ else {
348
+ deps[name] = version;
349
+ }
350
+ }
351
+ else {
352
+ deps[pkg] = 'latest';
353
+ }
354
+ }
355
+ else {
356
+ deps[pkg] = 'latest';
357
+ }
358
+ }
359
+ return deps;
360
+ }
361
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
package/lib/ai.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ export interface AISetupConfig {
2
+ enabled: boolean;
3
+ defaultProvider?: string;
4
+ providers?: Record<string, {
5
+ apiKey?: string;
6
+ host?: string;
7
+ models?: string[];
8
+ baseUrl?: string;
9
+ }>;
10
+ trigger?: {
11
+ respondToAt: boolean;
12
+ respondToPrivate: boolean;
13
+ prefixes: string[];
14
+ };
15
+ }
16
+ /**
17
+ * AI 配置引导向导
18
+ */
19
+ export declare function configureAI(): Promise<AISetupConfig>;
20
+ /**
21
+ * 获取 AI 配置需要写入 .env 的环境变量
22
+ */
23
+ export declare function generateAIEnvVars(config: AISetupConfig): string;
24
+ /**
25
+ * 生成 YAML 格式的 AI 配置段
26
+ */
27
+ export declare function generateAIConfigYaml(config: AISetupConfig): string;
28
+ /**
29
+ * 生成 TS/JS 格式的 AI 配置段
30
+ */
31
+ export declare function generateAIConfigTS(config: AISetupConfig): string;
32
+ /**
33
+ * 生成 JSON 格式的 AI 配置段
34
+ */
35
+ export declare function generateAIConfigJSON(config: AISetupConfig): string;
36
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpG,OAAO,CAAC,EAAE;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACnF;AAYD;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,CAiI1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAa/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA+ClE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA2ChE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA0BlE"}