@shun-js/aibaiban-server 1.4.4 → 1.4.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shun-js/aibaiban-server",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "aibaiban.com server",
5
5
  "keywords": [
6
6
  "ai aibaiban"
@@ -46,5 +46,5 @@
46
46
  "access": "public",
47
47
  "registry": "https://registry.npmjs.org/"
48
48
  },
49
- "gitHead": "9d4e0bbc0f78fe5d2fcd8eb17549f5beda097c7e"
49
+ "gitHead": "294b7f7d09aec1d24318dabe5366ec0834e1488d"
50
50
  }
@@ -44,7 +44,7 @@ exports.drawCC = async (req, res) => {
44
44
  const result = await sendPromptViaRelay({
45
45
  wsUrl: relayConfig.wsUrl,
46
46
  authSecret: relayConfig.authSecret,
47
- userId: req.user?.id || "guest",
47
+ userId: req.headers.userid || "guest",
48
48
  prompt: lastUserMsg,
49
49
  timeout: relayConfig.timeout || 600000,
50
50
  });
@@ -4,7 +4,6 @@ const prompts = require("../util/prompt-agent.js");
4
4
 
5
5
  // util
6
6
  const { chatFeishuMsg, errorFeishuMsg } = require("../util/feishu.js");
7
- const { sendPromptViaRelay } = require("../util/relay-client.js");
8
7
 
9
8
  // LLM 配置
10
9
  const llmConfig = global.QZ_CONFIG.llm;
@@ -196,86 +195,6 @@ exports.drawAgent = async (req, res) => {
196
195
  try {
197
196
  const startTime = Date.now();
198
197
 
199
- // LLM Mermaid 管线函数
200
- const runLLMMermaidPipeline = async () => {
201
- let elaboration = "";
202
-
203
- await runAgents([
204
- // elaborate
205
- {
206
- agentStartCallback: () => {
207
- res.streaming(
208
- `data: ${JSON.stringify({ type: "status", step: "elaborate" })}\n\n`,
209
- );
210
- req.logger.info(methodName, "step: elaborate");
211
- },
212
- agentRequestOptions: {
213
- llm,
214
- modelName,
215
- thinking,
216
- get messages() {
217
- return [
218
- {
219
- role: "user",
220
- content: prompts.ELABORATE_PROMPT.replace(
221
- "{input}",
222
- decision.description,
223
- ).replace("{diagramType}", decision.diagramType),
224
- },
225
- ];
226
- },
227
- },
228
- agentEndCallback: (result) => {
229
- elaboration = result;
230
- req.logger.info(
231
- methodName,
232
- "elaboration",
233
- String(elaboration).slice(0, 100) + "...",
234
- );
235
- },
236
- },
237
- // generate
238
- {
239
- agentStartCallback: () => {
240
- res.streaming(
241
- `data: ${JSON.stringify({ type: "status", step: "generate" })}\n\n`,
242
- );
243
- req.logger.info(methodName, "step: generate");
244
- },
245
- agentRequestOptions: {
246
- llm,
247
- modelName,
248
- thinking,
249
- get messages() {
250
- return [
251
- {
252
- role: "user",
253
- content: prompts.GENERATE_PROMPT.replace(
254
- "{diagramType}",
255
- decision.diagramType,
256
- ).replace("{elaboration}", elaboration),
257
- },
258
- ];
259
- },
260
- },
261
- agentEndCallback: (result) => {
262
- const mermaidCode = result;
263
- const duration = Date.now() - startTime;
264
- req.logger.info(
265
- methodName,
266
- "mermaidCode",
267
- String(mermaidCode).slice(0, 100) + "...",
268
- `total: ${duration}ms`,
269
- );
270
- chatFeishuMsg(req, `mermaid-${mermaidCode}`);
271
- res.streaming(
272
- `data: ${JSON.stringify({ type: "mermaid", code: mermaidCode, duration })}\n\n`,
273
- );
274
- },
275
- },
276
- ]);
277
- };
278
-
279
198
  // 1. Agent 决策
280
199
  res.streaming(
281
200
  `data: ${JSON.stringify({ type: "status", step: "thinking" })}\n\n`,
@@ -351,85 +270,82 @@ exports.drawAgent = async (req, res) => {
351
270
  } else if (decision.action === "irrelevant") {
352
271
  res.streaming(`data: ${JSON.stringify({ type: "welcome" })}\n\n`);
353
272
  } else if (decision.action === "generate") {
354
- // Docker 模式优先,降级到 LLM Mermaid
355
- const relayConfig = global.QZ_CONFIG.relay;
356
- const useDocker = relayConfig?.wsUrl;
357
-
358
- if (useDocker) {
359
- try {
360
- req.logger.info(methodName, "using Docker mode via relay");
361
- res.streaming(
362
- `data: ${JSON.stringify({ type: "status", step: "docker" })}\n\n`,
363
- );
364
-
365
- // SSE keepalive 防超时
366
- const keepalive = setInterval(() => {
367
- res.streaming(": keepalive\n\n");
368
- }, 15000);
369
-
370
- const result = await sendPromptViaRelay({
371
- wsUrl: relayConfig.wsUrl,
372
- authSecret: relayConfig.authSecret,
373
- userId: req.user?.id || "guest",
374
- prompt: JSON.stringify({ messages }),
375
- timeout: relayConfig.timeout || 600000,
376
- });
377
-
378
- clearInterval(keepalive);
273
+ let elaboration = "";
379
274
 
380
- // 解析结果
381
- if (result.startsWith("[IRRELEVANT]")) {
382
- res.streaming(`data: ${JSON.stringify({ type: "welcome" })}\n\n`);
383
- } else if (result.startsWith("[REPLY]")) {
384
- const replyText = result.slice(7).trim();
275
+ await runAgents([
276
+ // elaborate
277
+ {
278
+ agentStartCallback: () => {
385
279
  res.streaming(
386
- `data: ${JSON.stringify({ type: "message", content: replyText })}\n\n`,
280
+ `data: ${JSON.stringify({ type: "status", step: "elaborate" })}\n\n`,
387
281
  );
388
- } else {
389
- // 尝试解析为 excalidraw JSON
390
- try {
391
- const data = JSON.parse(result);
392
- if (data.type === "excalidraw" && data.elements) {
393
- const duration = Date.now() - startTime;
394
- req.logger.info(
395
- methodName,
396
- "excalidraw elements",
397
- data.elements.length,
398
- `${duration}ms`,
399
- );
400
- chatFeishuMsg(
401
- req,
402
- `docker-excalidraw-${data.elements.length}-elements`,
403
- );
404
- res.streaming(
405
- `data: ${JSON.stringify({ type: "draw", elements: data.elements, duration })}\n\n`,
406
- );
407
- } else {
408
- // 未知格式,当文字回复
409
- res.streaming(
410
- `data: ${JSON.stringify({ type: "message", content: result })}\n\n`,
411
- );
412
- }
413
- } catch {
414
- // JSON 解析失败,当文字回复
415
- res.streaming(
416
- `data: ${JSON.stringify({ type: "message", content: result })}\n\n`,
417
- );
418
- }
419
- }
420
- } catch (dockerErr) {
421
- req.logger.error(
422
- methodName,
423
- "Docker mode failed, fallback to LLM",
424
- dockerErr.message,
425
- );
426
- // 降级到 LLM Mermaid 管线
427
- await runLLMMermaidPipeline();
428
- }
429
- } else {
430
- // 无 relay 配置,直接走 LLM Mermaid
431
- await runLLMMermaidPipeline();
432
- }
282
+ req.logger.info(methodName, "step: elaborate");
283
+ },
284
+ agentRequestOptions: {
285
+ llm,
286
+ modelName,
287
+ thinking,
288
+ get messages() {
289
+ return [
290
+ {
291
+ role: "user",
292
+ content: prompts.ELABORATE_PROMPT.replace(
293
+ "{input}",
294
+ decision.description,
295
+ ).replace("{diagramType}", decision.diagramType),
296
+ },
297
+ ];
298
+ },
299
+ },
300
+ agentEndCallback: (result) => {
301
+ elaboration = result;
302
+ req.logger.info(
303
+ methodName,
304
+ "elaboration",
305
+ String(elaboration).slice(0, 100) + "...",
306
+ );
307
+ },
308
+ },
309
+ // generate
310
+ {
311
+ agentStartCallback: () => {
312
+ res.streaming(
313
+ `data: ${JSON.stringify({ type: "status", step: "generate" })}\n\n`,
314
+ );
315
+ req.logger.info(methodName, "step: generate");
316
+ },
317
+ agentRequestOptions: {
318
+ llm,
319
+ modelName,
320
+ thinking,
321
+ get messages() {
322
+ return [
323
+ {
324
+ role: "user",
325
+ content: prompts.GENERATE_PROMPT.replace(
326
+ "{diagramType}",
327
+ decision.diagramType,
328
+ ).replace("{elaboration}", elaboration),
329
+ },
330
+ ];
331
+ },
332
+ },
333
+ agentEndCallback: (result) => {
334
+ const mermaidCode = result;
335
+ const duration = Date.now() - startTime;
336
+ req.logger.info(
337
+ methodName,
338
+ "mermaidCode",
339
+ String(mermaidCode).slice(0, 100) + "...",
340
+ `total: ${duration}ms`,
341
+ );
342
+ chatFeishuMsg(req, `mermaid-${mermaidCode}`);
343
+ res.streaming(
344
+ `data: ${JSON.stringify({ type: "mermaid", code: mermaidCode, duration })}\n\n`,
345
+ );
346
+ },
347
+ },
348
+ ]);
433
349
  } else if (decision.action === "canvas") {
434
350
  // 3. Canvas - Function Calling 直接画图
435
351
  res.streaming(