agent-tower 0.3.7 → 0.3.9

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 (48) hide show
  1. package/dist/executors/cursor-agent.executor.d.ts +1 -1
  2. package/dist/executors/cursor-agent.executor.d.ts.map +1 -1
  3. package/dist/output/__tests__/claude-code-parser-token.test.js +98 -0
  4. package/dist/output/__tests__/claude-code-parser-token.test.js.map +1 -1
  5. package/dist/output/__tests__/cursor-agent-parser-user.test.d.ts +2 -0
  6. package/dist/output/__tests__/cursor-agent-parser-user.test.d.ts.map +1 -0
  7. package/dist/output/__tests__/cursor-agent-parser-user.test.js +109 -0
  8. package/dist/output/__tests__/cursor-agent-parser-user.test.js.map +1 -0
  9. package/dist/output/claude-code-parser.d.ts.map +1 -1
  10. package/dist/output/claude-code-parser.js +12 -9
  11. package/dist/output/claude-code-parser.js.map +1 -1
  12. package/dist/output/cursor-agent-parser.d.ts +33 -1
  13. package/dist/output/cursor-agent-parser.d.ts.map +1 -1
  14. package/dist/output/cursor-agent-parser.js +140 -24
  15. package/dist/output/cursor-agent-parser.js.map +1 -1
  16. package/dist/routes/system.d.ts +5 -0
  17. package/dist/routes/system.d.ts.map +1 -1
  18. package/dist/routes/system.js +51 -0
  19. package/dist/routes/system.js.map +1 -1
  20. package/dist/web/assets/{AgentDemoPage-CCHa9x-c.js → AgentDemoPage-CzND8Y0f.js} +1 -1
  21. package/dist/web/assets/{DemoPage-CdT6VXkX.js → DemoPage-CmUJ0dvS.js} +1 -1
  22. package/dist/web/assets/{NotificationSettingsPage-CqZPABEG.js → NotificationSettingsPage-B1SDsL68.js} +1 -1
  23. package/dist/web/assets/{ProfileSettingsPage-CSgX4NOe.js → ProfileSettingsPage-Z42bsJop.js} +1 -1
  24. package/dist/web/assets/{ProjectKanbanPage-Pk7nnDcc.js → ProjectKanbanPage-BsRLM_To.js} +3 -3
  25. package/dist/web/assets/{ProjectSettingsPage-COrzQUwG.js → ProjectSettingsPage-DizbsdCH.js} +1 -1
  26. package/dist/web/assets/ProviderSettingsPage-BnLCrZgD.js +54 -0
  27. package/dist/web/assets/{api-client-DUkeyNRB.js → api-client-CgvcCTaj.js} +1 -1
  28. package/dist/web/assets/{chevron-down-jKHLtCQs.js → chevron-down-DrP9EgY9.js} +1 -1
  29. package/dist/web/assets/{circle-alert-DggTOwqB.js → circle-alert-wdB5gDUz.js} +1 -1
  30. package/dist/web/assets/{circle-check-38jFi9hD.js → circle-check-DilG10OC.js} +1 -1
  31. package/dist/web/assets/{code-block-OCS4YCEC-BhBg2bzT.js → code-block-OCS4YCEC-BQpzSGnw.js} +1 -1
  32. package/dist/web/assets/{confirm-dialog-CUtMe44J.js → confirm-dialog-zLKSUa6j.js} +1 -1
  33. package/dist/web/assets/{folder-picker-BTgXPrUp.js → folder-picker-CmgJx3lM.js} +1 -1
  34. package/dist/web/assets/{index-2lw92znX.js → index-B-QFtMnj.js} +2 -2
  35. package/dist/web/assets/index-DX47RnmN.css +1 -0
  36. package/dist/web/assets/{loader-circle-eX5KttSb.js → loader-circle-B8Hk0gt3.js} +1 -1
  37. package/dist/web/assets/{mermaid-NOHMQCX5-CQgpbmIW.js → mermaid-NOHMQCX5-BvevrkjG.js} +3 -3
  38. package/dist/web/assets/{modal-DpSqKQgt.js → modal-CCInxYr_.js} +1 -1
  39. package/dist/web/assets/{pencil-BaroHDtz.js → pencil-u5vhUMho.js} +1 -1
  40. package/dist/web/assets/{query-keys-DpgVNQA1.js → query-keys-BGgDKleg.js} +1 -1
  41. package/dist/web/assets/{select-5Ta6iqIf.js → select-CinUO48b.js} +1 -1
  42. package/dist/web/assets/{use-profiles-BHlH-mYH.js → use-profiles-DJwSheDq.js} +1 -1
  43. package/dist/web/assets/{use-projects-DC5whFow.js → use-projects-OFs5uSW6.js} +1 -1
  44. package/dist/web/assets/{x-_SSVUTap.js → x-Bz9Stptu.js} +1 -1
  45. package/dist/web/index.html +2 -2
  46. package/package.json +1 -1
  47. package/dist/web/assets/ProviderSettingsPage-CzRDghu7.js +0 -54
  48. package/dist/web/assets/index-Br9066ZX.css +0 -1
@@ -12,8 +12,8 @@
12
12
  * - tool_call: 工具调用(subtype: "started" | "completed")
13
13
  * - result: 执行结果元数据
14
14
  */
15
- import { createAssistantMessage, createUserMessage, createSystemMessage, createToolUse, createThinking, createErrorMessage, createTokenUsageInfo, } from './types.js';
16
- import { addNormalizedEntry, updateEntryContent, updateToolStatus, setSessionId, } from './utils/patch.js';
15
+ import { createAssistantMessage, createSystemMessage, createToolUse, createThinking, createErrorMessage, createTokenUsageInfo, } from './types.js';
16
+ import { addNormalizedEntry, replaceNormalizedEntry, updateEntryContent, updateToolStatus, setSessionId, } from './utils/patch.js';
17
17
  import { stripAnsiSequences } from './utils/ansi.js';
18
18
  // ============ 工具调用解析辅助函数 ============
19
19
  /** 工具 key -> 标准名称映射 */
@@ -193,6 +193,10 @@ export class CursorAgentParser {
193
193
  currentAssistantIndex = null;
194
194
  currentThinkingBuffer = '';
195
195
  currentThinkingIndex = null;
196
+ lastAssistantIndex = null;
197
+ lastThinkingIndex = null;
198
+ retryEntryIndex = null;
199
+ retryEntryId = null;
196
200
  // 工具调用 call_id -> entry index 映射
197
201
  callIndexMap = new Map();
198
202
  constructor(msgStore, worktreePath = '') {
@@ -240,21 +244,59 @@ export class CursorAgentParser {
240
244
  * 解析单行 JSON
241
245
  */
242
246
  parseLine(line) {
243
- let msg;
247
+ if (this.parseJsonSegments(line)) {
248
+ return;
249
+ }
250
+ // 非 JSON 行(PTY echo、ANSI 控制序列等)— 丢弃,不产出 entry
251
+ // Agent CLI 的所有有效输出都是 JSONL 格式
252
+ if (DEBUG_PARSER) {
253
+ const stripped = stripAnsiSequences(line).trim();
254
+ if (stripped) {
255
+ console.log(`[CursorAgentParser] Skipping non-JSON line: "${stripped.slice(0, 80)}"`);
256
+ }
257
+ }
258
+ }
259
+ /**
260
+ * 一行中可能包含多个 JSON 对象(Cursor 在 retry/resume 时偶尔会拼到同一行)
261
+ */
262
+ parseJsonSegments(line) {
263
+ const trimmed = line.trim();
264
+ if (!trimmed)
265
+ return true;
244
266
  try {
245
- msg = JSON.parse(line);
267
+ const msg = JSON.parse(trimmed);
268
+ this.handleMessage(msg, trimmed);
269
+ return true;
246
270
  }
247
271
  catch {
248
- // JSON 行(PTY echo、ANSI 控制序列等)— 丢弃,不产出 entry
249
- // Agent CLI 的所有有效输出都是 JSONL 格式
250
- if (DEBUG_PARSER) {
251
- const stripped = stripAnsiSequences(line).trim();
252
- if (stripped) {
253
- console.log(`[CursorAgentParser] Skipping non-JSON line: "${stripped.slice(0, 80)}"`);
254
- }
272
+ // 可能是多个 JSON 拼接,继续拆分尝试
273
+ }
274
+ const segments = trimmed.split(/\}\s*\{/).map((seg, i, arr) => {
275
+ if (arr.length === 1)
276
+ return seg;
277
+ if (i === 0)
278
+ return seg + '}';
279
+ if (i === arr.length - 1)
280
+ return '{' + seg;
281
+ return '{' + seg + '}';
282
+ });
283
+ let parsedCount = 0;
284
+ for (const segment of segments) {
285
+ try {
286
+ const msg = JSON.parse(segment);
287
+ this.handleMessage(msg, segment);
288
+ parsedCount += 1;
289
+ }
290
+ catch {
291
+ // ignore invalid segment; caller will log if none parsed
255
292
  }
256
- return;
257
293
  }
294
+ return parsedCount > 0;
295
+ }
296
+ /**
297
+ * 处理已解析的 JSON 消息
298
+ */
299
+ handleMessage(msg, rawLine) {
258
300
  // 推送 session_id
259
301
  if (!this.sessionIdReported) {
260
302
  const sessionId = extractSessionId(msg);
@@ -268,10 +310,11 @@ export class CursorAgentParser {
268
310
  // 判断是否需要刷新 assistant / thinking 缓冲区
269
311
  const isAssistant = msg.type === 'assistant';
270
312
  const isThinking = msg.type === 'thinking';
271
- if (!isAssistant && this.currentAssistantIndex !== null) {
313
+ const isControlEvent = msg.type === 'connection' || msg.type === 'retry';
314
+ if (!isAssistant && !isControlEvent && this.currentAssistantIndex !== null) {
272
315
  this.flushAssistant();
273
316
  }
274
- if (!isThinking && this.currentThinkingIndex !== null) {
317
+ if (!isThinking && !isControlEvent && this.currentThinkingIndex !== null) {
275
318
  this.flushThinking();
276
319
  }
277
320
  // 分类处理
@@ -286,12 +329,21 @@ export class CursorAgentParser {
286
329
  this.handleAssistant(msg);
287
330
  break;
288
331
  case 'thinking':
332
+ this.clearRetryState();
289
333
  this.handleThinking(msg);
290
334
  break;
335
+ case 'connection':
336
+ this.handleConnection(msg);
337
+ break;
338
+ case 'retry':
339
+ this.handleRetry(msg);
340
+ break;
291
341
  case 'tool_call':
342
+ this.clearRetryState();
292
343
  this.handleToolCall(msg);
293
344
  break;
294
345
  case 'result': {
346
+ this.clearRetryState();
295
347
  // 从 result 消息中提取 token 用量(如果有)
296
348
  const resultMsg = msg;
297
349
  if (resultMsg.result && typeof resultMsg.result === 'object') {
@@ -320,7 +372,7 @@ export class CursorAgentParser {
320
372
  default:
321
373
  // 未知类型 - 作为系统消息输出
322
374
  {
323
- const entry = createSystemMessage(line);
375
+ const entry = createSystemMessage(rawLine);
324
376
  const index = this.indexProvider.next();
325
377
  const patch = addNormalizedEntry(index, entry);
326
378
  this.msgStore.pushPatch(patch);
@@ -341,16 +393,38 @@ export class CursorAgentParser {
341
393
  }
342
394
  }
343
395
  /**
344
- * 处理 user 消息 — 由 Agent CLI 输出 { type: "user" } 时产出 user_message entry
396
+ * 处理 user 消息
397
+ * 跳过 — 用户消息已由 SessionManager.sendMessage() 主动写入 MsgStore,
398
+ * 这里如果再处理 Cursor Agent 的 user 回显会导致前端显示重复。
345
399
  */
346
- handleUser(msg) {
347
- const text = concatMessageText(msg.message);
348
- if (!text)
349
- return;
350
- const entry = createUserMessage(text);
351
- const index = this.indexProvider.next();
352
- const patch = addNormalizedEntry(index, entry);
353
- this.msgStore.pushPatch(patch);
400
+ handleUser(_msg) {
401
+ // noop: avoid duplicating the user message already injected by SessionManager
402
+ }
403
+ /**
404
+ * 处理连接状态消息
405
+ * 这类事件仅用于底层重连控制,不应直接暴露到聊天流。
406
+ */
407
+ handleConnection(_msg) {
408
+ // noop
409
+ }
410
+ /**
411
+ * 处理重试状态消息
412
+ * 使用单条可更新的 entry,避免把原始 JSON 暴露给前端。
413
+ */
414
+ handleRetry(msg) {
415
+ this.beginReplayFromRetry();
416
+ const entry = createErrorMessage(this.formatRetryContent(msg), this.formatRetryDetail(msg), this.retryEntryId ?? undefined);
417
+ if (this.retryEntryIndex != null && this.retryEntryId != null) {
418
+ const patch = replaceNormalizedEntry(this.retryEntryIndex, entry);
419
+ this.msgStore.pushPatch(patch);
420
+ }
421
+ else {
422
+ const index = this.indexProvider.next();
423
+ const patch = addNormalizedEntry(index, entry);
424
+ this.msgStore.pushPatch(patch);
425
+ this.retryEntryIndex = index;
426
+ this.retryEntryId = entry.id;
427
+ }
354
428
  }
355
429
  /**
356
430
  * 处理 assistant 消息(流式文本块合并)
@@ -364,6 +438,7 @@ export class CursorAgentParser {
364
438
  // 更新现有条目
365
439
  const patch = updateEntryContent(this.currentAssistantIndex, this.currentAssistantBuffer);
366
440
  this.msgStore.pushPatch(patch);
441
+ this.lastAssistantIndex = this.currentAssistantIndex;
367
442
  }
368
443
  else {
369
444
  // 创建新条目
@@ -372,6 +447,7 @@ export class CursorAgentParser {
372
447
  this.currentAssistantIndex = index;
373
448
  const patch = addNormalizedEntry(index, entry);
374
449
  this.msgStore.pushPatch(patch);
450
+ this.lastAssistantIndex = index;
375
451
  }
376
452
  }
377
453
  /**
@@ -385,6 +461,7 @@ export class CursorAgentParser {
385
461
  // 更新现有条目
386
462
  const patch = updateEntryContent(this.currentThinkingIndex, this.currentThinkingBuffer);
387
463
  this.msgStore.pushPatch(patch);
464
+ this.lastThinkingIndex = this.currentThinkingIndex;
388
465
  }
389
466
  else {
390
467
  // 创建新条目
@@ -393,6 +470,7 @@ export class CursorAgentParser {
393
470
  this.currentThinkingIndex = index;
394
471
  const patch = addNormalizedEntry(index, entry);
395
472
  this.msgStore.pushPatch(patch);
473
+ this.lastThinkingIndex = index;
396
474
  }
397
475
  }
398
476
  /**
@@ -441,6 +519,44 @@ export class CursorAgentParser {
441
519
  todoOperation: 'write',
442
520
  };
443
521
  }
522
+ /**
523
+ * 收到 retry 时,后续 assistant/thinking 往往是从头重放。
524
+ * 复用上一条 entry index,并从空 buffer 重新覆盖内容,避免出现重复消息。
525
+ */
526
+ beginReplayFromRetry() {
527
+ this.currentAssistantIndex = this.lastAssistantIndex;
528
+ this.currentAssistantBuffer = '';
529
+ this.currentThinkingIndex = this.lastThinkingIndex;
530
+ this.currentThinkingBuffer = '';
531
+ }
532
+ clearRetryState() {
533
+ this.retryEntryIndex = null;
534
+ this.retryEntryId = null;
535
+ }
536
+ formatRetryContent(msg) {
537
+ const attemptSuffix = msg.attempt != null ? ` (attempt ${msg.attempt})` : '';
538
+ const checkpointSuffix = msg.checkpoint_turn_count != null ? ` from checkpoint turn ${msg.checkpoint_turn_count}` : '';
539
+ switch (msg.subtype?.toLowerCase()) {
540
+ case 'starting':
541
+ return `Connection lost, retrying request${attemptSuffix}...`;
542
+ case 'resuming':
543
+ return `Resuming request${attemptSuffix}${checkpointSuffix}...`;
544
+ default:
545
+ return `Retrying request${attemptSuffix}...`;
546
+ }
547
+ }
548
+ formatRetryDetail(msg) {
549
+ const detail = [];
550
+ if (msg.subtype)
551
+ detail.push(`subtype=${msg.subtype}`);
552
+ if (msg.attempt != null)
553
+ detail.push(`attempt=${msg.attempt}`);
554
+ if (msg.is_resume != null)
555
+ detail.push(`is_resume=${String(msg.is_resume)}`);
556
+ if (msg.checkpoint_turn_count != null)
557
+ detail.push(`checkpoint_turn_count=${msg.checkpoint_turn_count}`);
558
+ return detail.join(', ');
559
+ }
444
560
  /**
445
561
  * 刷新 assistant 缓冲区
446
562
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-agent-parser.js","sourceRoot":"","sources":["../../src/output/cursor-agent-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor-agent-parser.js","sourceRoot":"","sources":["../../src/output/cursor-agent-parser.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
1
  import type { FastifyInstance } from 'fastify';
2
+ /** 解析 `cursor-agent --list-models` stdout(strip ANSI 后按行解析) */
3
+ export declare function parseCursorAgentListModelsOutput(stdout: string): Array<{
4
+ id: string;
5
+ label: string;
6
+ }>;
2
7
  export declare function systemRoutes(app: FastifyInstance): Promise<void>;
3
8
  //# sourceMappingURL=system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/routes/system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/C,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,iBA2CtD"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/routes/system.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,gEAAgE;AAChE,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBrG;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,iBA4DtD"}
@@ -1,5 +1,39 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
1
3
  import { AgentType } from '../types/index.js';
4
+ import { stripAnsiSequences } from '../output/utils/ansi.js';
2
5
  import { prisma } from '../utils/index.js';
6
+ const execFileAsync = promisify(execFile);
7
+ /** 解析 `cursor-agent --list-models` stdout(strip ANSI 后按行解析) */
8
+ export function parseCursorAgentListModelsOutput(stdout) {
9
+ const text = stripAnsiSequences(stdout);
10
+ const lines = text.split(/\r?\n/);
11
+ const models = [];
12
+ let inList = false;
13
+ for (const line of lines) {
14
+ const t = line.trim();
15
+ if (!t)
16
+ continue;
17
+ if (t === 'Available models') {
18
+ inList = true;
19
+ continue;
20
+ }
21
+ if (t.startsWith('Tip:'))
22
+ break;
23
+ if (!inList)
24
+ continue;
25
+ const m = /^([a-zA-Z0-9][a-zA-Z0-9._-]*)\s*-\s*(.+)$/.exec(t);
26
+ if (m) {
27
+ const label = m[2]
28
+ .trim()
29
+ .replace(/\s*\(current\)\s*$/i, '')
30
+ .replace(/\s*\(default\)\s*$/i, '')
31
+ .trim();
32
+ models.push({ id: m[1], label });
33
+ }
34
+ }
35
+ return models;
36
+ }
3
37
  export async function systemRoutes(app) {
4
38
  // 健康检查
5
39
  app.get('/health', async () => {
@@ -14,6 +48,23 @@ export async function systemRoutes(app) {
14
48
  ],
15
49
  };
16
50
  });
51
+ /** Cursor Agent CLI 可用模型(与 `cursor-agent --list-models` 一致,供 Provider 配置 UI 使用) */
52
+ app.get('/system/cursor-agent-models', async () => {
53
+ try {
54
+ const { stdout } = await execFileAsync('cursor-agent', ['--list-models'], {
55
+ timeout: 25_000,
56
+ maxBuffer: 8 * 1024 * 1024,
57
+ });
58
+ const models = parseCursorAgentListModelsOutput(stdout);
59
+ return { models };
60
+ }
61
+ catch (e) {
62
+ return {
63
+ models: [],
64
+ error: e instanceof Error ? e.message : String(e),
65
+ };
66
+ }
67
+ });
17
68
  // MCP 上下文检测:根据 cwd 路径查找匹配的活跃工作空间
18
69
  app.get('/system/workspace-context', async (request, reply) => {
19
70
  const { path: cwdPath } = request.query;
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/routes/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAoB;IACrD,OAAO;IACP,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,gBAAgB;IAChB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC5B,OAAO;YACL,MAAM,EAAE;gBACN,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE;gBACtE,EAAE,IAAI,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE;aACrE;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,iCAAiC;IACjC,GAAG,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC5D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAA0B,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;QACvD,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;YACjD,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;YAClD,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;SAClD,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;QAC9D,CAAC;QAED,OAAO;YACL,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACpC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;YACxC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE;YACzB,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK;YAC/B,WAAW,EAAE,SAAS,CAAC,EAAE;YACzB,eAAe,EAAE,SAAS,CAAC,UAAU;SACtC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/routes/system.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{c as b,r as s,j as e,L as W}from"./index-2lw92znX.js";import{a as f,B as y}from"./api-client-DUkeyNRB.js";import{u as Q,a as X,b as L,c as Y,d as Z,S as ee,e as te,T as se,P as ne,G as re,f as ae}from"./mermaid-NOHMQCX5-CQgpbmIW.js";import{d as le}from"./use-profiles-BHlH-mYH.js";import{C as ie}from"./chevron-down-jKHLtCQs.js";import"./log-adapter-50wgehrc.js";import"./query-keys-DpgVNQA1.js";const oe=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8",key:"7n84p3"}]],ce=b("at-sign",oe);const de=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],xe=b("chevron-up",de);const me=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],ue=b("hash",me);const pe=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],he=b("send",pe),ge=!0;function Se(){const[w,_]=s.useState([]),[l,S]=s.useState(""),[d,k]=s.useState("DEFAULT"),[i,A]=s.useState(""),[r,D]=s.useState(null),[a,o]=s.useState("idle"),[h,E]=s.useState(!1),[x,j]=s.useState(""),$=s.useRef(null),C=s.useRef(null),m=s.useRef(null),{data:u}=le(l),H=u?Object.keys(u):["DEFAULT"],U=t=>{S(t),k("DEFAULT")},F=s.useCallback(t=>{o(t===0?"stopped":"error")},[]),M=s.useCallback(t=>{console.error("Agent error:",t),o("error")},[]),{isConnected:p,isAttached:g,logs:v,entries:V,agentSessionId:I,attach:z,clearLogs:P}=Q({sessionId:r||"",onExit:F,onError:M}),{todos:R}=X(V);s.useEffect(()=>{f.get("/demo/agents").then(t=>{_(t.agents);const n=t.agents.find(N=>N.available);n&&S(n.type)})},[]),s.useEffect(()=>{$.current?.scrollToBottom("smooth")},[v]),s.useEffect(()=>{console.log(`[AgentDemoPage:useEffect] t=${Date.now()} sessionId=${r} isConnected=${p} isAttached=${g}`),r&&p&&!g&&(console.log(`[AgentDemoPage:useEffect] t=${Date.now()} calling attach()`),z())},[r,p,g,z]);const B=t=>{if(j(t.target.value),m.current){m.current.style.height="auto";const N=Math.min(m.current.scrollHeight,210);m.current.style.height=`${N}px`}},G=async()=>{if(!l||!i.trim())return;const t=Date.now();console.log(`[AgentDemoPage:handleStart] t=${t} starting...`),o("starting"),P();try{const n=await f.post("/demo/start",{agentType:l,prompt:i.trim(),variant:d});ge&&console.log(`[AgentDemoPage:handleStart] t=${Date.now()} apiTime=${Date.now()-t}ms sessionId=${n.sessionId}`),D(n.sessionId),o("running")}catch(n){console.error("Start failed:",n),o("error")}},T=async()=>{if(!r||!x.trim())return;const t=x.trim();j("");try{await f.post(`/demo/${r}/message`,{message:t})}catch(n){console.error("Send failed:",n)}},O=async()=>{if(r)try{await f.post(`/demo/${r}/stop`),o("stopped")}catch(t){console.error("Stop failed:",t)}},K=()=>{D(null),o("idle"),A(""),j(""),P()},q=a==="running",c=r!==null,J=w.find(t=>t.type===l);return e.jsxs("div",{className:"flex flex-col h-full bg-white",children:[e.jsxs("div",{className:"px-8 py-5 border-b border-neutral-100 bg-white transition-all duration-300",children:[e.jsxs("div",{className:"flex items-center flex-wrap gap-3",children:[e.jsxs("div",{className:"flex items-baseline gap-2",children:[e.jsx("span",{className:"text-base font-medium text-blue-600",children:"Agent Demo"}),e.jsx("span",{className:"text-neutral-300 text-sm",children:"/"}),e.jsx("span",{className:"text-xl font-bold text-neutral-900 tracking-tight",children:c?i.slice(0,50)+(i.length>50?"...":""):"新会话"})]}),e.jsxs("div",{className:"flex items-center",children:[a==="running"&&e.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-blue-50 text-blue-700 rounded-full text-xs font-medium border border-blue-100",children:[e.jsx(L,{className:"w-3.5 h-3.5 animate-pulse"}),e.jsx("span",{children:"Running"})]}),a==="stopped"&&e.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-emerald-50 text-emerald-700 rounded-full text-xs font-medium border border-emerald-100",children:[e.jsx(Y,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"Done"})]}),a==="idle"&&e.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-neutral-100 text-neutral-600 rounded-full text-xs font-medium border border-neutral-200",children:[e.jsx(Z,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"Idle"})]}),a==="starting"&&e.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-amber-50 text-amber-700 rounded-full text-xs font-medium border border-amber-100",children:[e.jsx(L,{className:"w-3.5 h-3.5 animate-spin"}),e.jsx("span",{children:"Starting..."})]}),a==="error"&&e.jsx("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-red-50 text-red-700 rounded-full text-xs font-medium border border-red-100",children:e.jsx("span",{children:"Error"})})]})]}),c&&e.jsxs("div",{className:"mt-1.5 flex items-start gap-2 group max-w-4xl",children:[e.jsx("div",{className:`text-sm text-neutral-600 leading-relaxed cursor-pointer transition-all ${h?"":"truncate"}`,onClick:()=>E(!h),children:i}),e.jsx("button",{onClick:()=>E(!h),className:"mt-0.5 text-neutral-400 opacity-0 group-hover:opacity-100 hover:text-neutral-600 transition-opacity",children:h?e.jsx(xe,{size:14}):e.jsx(ie,{size:14})})]}),e.jsxs("div",{className:"flex items-center gap-6 mt-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-neutral-400 font-medium",children:"Agent"}),e.jsx("div",{className:"flex items-center gap-1.5 text-neutral-900 font-medium bg-neutral-50 px-2 py-1 rounded border border-neutral-100",children:J?.name||l||"未选择"})]}),d!=="DEFAULT"&&e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-neutral-400 font-medium",children:"Variant"}),e.jsx("div",{className:"flex items-center gap-1.5 text-neutral-700 font-medium bg-blue-50 px-2 py-1 rounded border border-blue-100",children:d})]}),I&&e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-neutral-400 font-medium",children:"Session"}),e.jsxs("div",{className:"flex items-center gap-1.5 text-neutral-700 font-mono bg-neutral-50 px-2 py-1 rounded border border-neutral-100",children:[I.slice(0,8),"..."]})]}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-neutral-400 font-medium",children:"连接"}),e.jsx("div",{className:`flex items-center gap-1.5 font-medium px-2 py-1 rounded border ${p?"text-emerald-700 bg-emerald-50 border-emerald-100":"text-neutral-500 bg-neutral-50 border-neutral-100"}`,children:p?g?"已连接":"连接中...":"未连接"})]}),c&&e.jsx(y,{variant:"outline",size:"sm",onClick:K,className:"ml-auto",children:"新会话"}),e.jsxs(W,{to:"/settings/profiles",className:`flex items-center gap-1.5 text-xs text-neutral-500 hover:text-neutral-900 transition-colors ${c?"":"ml-auto"}`,children:[e.jsx(ee,{size:14}),e.jsx("span",{children:"Profiles 设置"})]})]})]}),e.jsx("div",{ref:C,className:"flex-1 overflow-y-auto px-8 py-6",children:c?e.jsx("div",{className:"min-h-[200px]",children:v.length===0?e.jsx("div",{className:"text-neutral-400 text-center py-8",children:"等待 Agent 响应..."}):e.jsx(te,{ref:$,logs:v,scrollElementRef:C})}):e.jsxs("div",{className:"max-w-2xl mx-auto space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold mb-3 text-neutral-900",children:"选择 Agent"}),e.jsx("div",{className:"flex gap-2 flex-wrap",children:w.map(t=>e.jsxs(y,{variant:l===t.type?"default":"outline",disabled:!t.available,onClick:()=>U(t.type),children:[t.name,t.available&&t.version&&` (${t.version})`,!t.available&&" (不可用)"]},t.type))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold mb-3 text-neutral-900",children:"配置变体 (Profile Variant)"}),e.jsx("div",{className:"flex gap-2 flex-wrap",children:H.map(t=>e.jsx("button",{onClick:()=>k(t),className:`px-3 py-1.5 rounded-full text-sm font-medium border transition-colors ${d===t?"bg-neutral-900 text-white border-neutral-900":"bg-white text-neutral-600 border-neutral-200 hover:border-neutral-400"}`,children:t},t))}),u&&u[d]&&e.jsx("p",{className:"mt-2 text-xs text-neutral-500 font-mono",children:Object.entries(u[d]).map(([t,n])=>`${t}: ${JSON.stringify(n)}`).join(", ")})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold mb-3 text-neutral-900",children:"输入任务"}),e.jsxs("div",{className:"relative border border-neutral-200 rounded-xl shadow-sm bg-white focus-within:ring-1 focus-within:ring-neutral-300 focus-within:border-neutral-300 transition-all duration-200",children:[e.jsx("textarea",{value:i,onChange:t=>A(t.target.value),rows:4,placeholder:"描述你想让 Agent 完成的任务...",className:"w-full px-4 py-3 bg-transparent border-none focus:outline-none focus:ring-0 resize-none text-neutral-900 placeholder-neutral-400 leading-relaxed text-sm"}),e.jsx("div",{className:"flex items-center justify-end px-3 pb-3 pt-1",children:e.jsx(y,{onClick:G,disabled:a==="starting"||!l||!i.trim(),children:a==="starting"?"启动中...":"开始"})})]})]})]})}),c&&R.length>0&&e.jsx("div",{className:"px-8 py-2 bg-white border-t border-neutral-100",children:e.jsx(se,{todos:R})}),c&&e.jsx("div",{className:"px-8 py-6 border-t border-neutral-100 bg-white",children:e.jsxs("div",{className:"relative border border-neutral-200 rounded-xl shadow-sm bg-white focus-within:ring-1 focus-within:ring-neutral-300 focus-within:border-neutral-300 transition-all duration-200",children:[e.jsx("textarea",{ref:m,value:x,onChange:B,rows:3,placeholder:"发送消息给 Agent...",className:"w-full px-4 py-3 bg-transparent border-none focus:outline-none focus:ring-0 resize-none text-neutral-900 placeholder-neutral-400 leading-relaxed text-sm scrollbar-thin scrollbar-thumb-neutral-200 scrollbar-track-transparent",style:{minHeight:"80px",maxHeight:"210px"},onKeyDown:t=>{t.key==="Enter"&&!t.shiftKey&&!t.repeat&&!t.nativeEvent.isComposing&&t.nativeEvent.keyCode!==229&&(t.preventDefault(),T())}}),e.jsxs("div",{className:"flex items-center justify-between px-3 pb-3 pt-1 border-t border-transparent",children:[e.jsxs("div",{className:"flex items-center gap-1 text-neutral-400",children:[e.jsx("button",{className:"p-2 hover:bg-neutral-100 hover:text-neutral-600 rounded-lg transition-colors",title:"Attach File",children:e.jsx(ne,{size:18})}),e.jsx("button",{className:"p-2 hover:bg-neutral-100 hover:text-neutral-600 rounded-lg transition-colors",title:"Mention",children:e.jsx(ce,{size:18})}),e.jsx("button",{className:"p-2 hover:bg-neutral-100 hover:text-neutral-600 rounded-lg transition-colors",title:"Reference Issue",children:e.jsx(ue,{size:18})}),e.jsx("div",{className:"w-px h-4 bg-neutral-200 mx-1"}),e.jsx("button",{className:"p-2 hover:bg-neutral-100 hover:text-neutral-600 rounded-lg transition-colors",title:"Search Web",children:e.jsx(re,{size:18})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[q&&e.jsxs("button",{onClick:O,className:"flex items-center gap-2 px-3 py-2 text-xs font-semibold text-red-600 bg-red-50 hover:bg-red-100 rounded-lg transition-colors",children:[e.jsx(ae,{size:12,fill:"currentColor"}),e.jsx("span",{children:"Stop"})]}),e.jsxs("button",{onClick:T,disabled:!x.trim(),className:`flex items-center gap-2 px-3 py-2 text-xs font-semibold rounded-lg transition-all ${x.trim()?"bg-neutral-900 text-white hover:bg-black shadow-sm":"bg-neutral-100 text-neutral-400 cursor-not-allowed"}`,children:[e.jsx("span",{children:"Send"}),e.jsx(he,{size:14})]})]})]})]})})]})}export{Se as AgentDemoPage};
1
+ import{c as b,r as s,j as e,L as W}from"./index-B-QFtMnj.js";import{a as f,B as y}from"./api-client-CgvcCTaj.js";import{u as Q,a as X,b as L,c as Y,d as Z,S as ee,e as te,T as se,P as ne,G as re,f as ae}from"./mermaid-NOHMQCX5-BvevrkjG.js";import{d as le}from"./use-profiles-DJwSheDq.js";import{C as ie}from"./chevron-down-DrP9EgY9.js";import"./log-adapter-50wgehrc.js";import"./query-keys-BGgDKleg.js";const oe=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8",key:"7n84p3"}]],ce=b("at-sign",oe);const de=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],xe=b("chevron-up",de);const me=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],ue=b("hash",me);const pe=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],he=b("send",pe),ge=!0;function Se(){const[w,_]=s.useState([]),[l,S]=s.useState(""),[d,k]=s.useState("DEFAULT"),[i,A]=s.useState(""),[r,D]=s.useState(null),[a,o]=s.useState("idle"),[h,E]=s.useState(!1),[x,j]=s.useState(""),$=s.useRef(null),C=s.useRef(null),m=s.useRef(null),{data:u}=le(l),H=u?Object.keys(u):["DEFAULT"],U=t=>{S(t),k("DEFAULT")},F=s.useCallback(t=>{o(t===0?"stopped":"error")},[]),M=s.useCallback(t=>{console.error("Agent error:",t),o("error")},[]),{isConnected:p,isAttached:g,logs:v,entries:V,agentSessionId:I,attach:z,clearLogs:P}=Q({sessionId:r||"",onExit:F,onError:M}),{todos:R}=X(V);s.useEffect(()=>{f.get("/demo/agents").then(t=>{_(t.agents);const n=t.agents.find(N=>N.available);n&&S(n.type)})},[]),s.useEffect(()=>{$.current?.scrollToBottom("smooth")},[v]),s.useEffect(()=>{console.log(`[AgentDemoPage:useEffect] t=${Date.now()} sessionId=${r} isConnected=${p} isAttached=${g}`),r&&p&&!g&&(console.log(`[AgentDemoPage:useEffect] t=${Date.now()} calling attach()`),z())},[r,p,g,z]);const B=t=>{if(j(t.target.value),m.current){m.current.style.height="auto";const N=Math.min(m.current.scrollHeight,210);m.current.style.height=`${N}px`}},G=async()=>{if(!l||!i.trim())return;const t=Date.now();console.log(`[AgentDemoPage:handleStart] t=${t} starting...`),o("starting"),P();try{const n=await f.post("/demo/start",{agentType:l,prompt:i.trim(),variant:d});ge&&console.log(`[AgentDemoPage:handleStart] t=${Date.now()} apiTime=${Date.now()-t}ms sessionId=${n.sessionId}`),D(n.sessionId),o("running")}catch(n){console.error("Start failed:",n),o("error")}},T=async()=>{if(!r||!x.trim())return;const t=x.trim();j("");try{await f.post(`/demo/${r}/message`,{message:t})}catch(n){console.error("Send failed:",n)}},O=async()=>{if(r)try{await f.post(`/demo/${r}/stop`),o("stopped")}catch(t){console.error("Stop failed:",t)}},K=()=>{D(null),o("idle"),A(""),j(""),P()},q=a==="running",c=r!==null,J=w.find(t=>t.type===l);return e.jsxs("div",{className:"flex flex-col h-full bg-white",children:[e.jsxs("div",{className:"px-8 py-5 border-b border-neutral-100 bg-white transition-all duration-300",children:[e.jsxs("div",{className:"flex items-center flex-wrap gap-3",children:[e.jsxs("div",{className:"flex items-baseline gap-2",children:[e.jsx("span",{className:"text-base font-medium text-blue-600",children:"Agent Demo"}),e.jsx("span",{className:"text-neutral-300 text-sm",children:"/"}),e.jsx("span",{className:"text-xl font-bold text-neutral-900 tracking-tight",children:c?i.slice(0,50)+(i.length>50?"...":""):"新会话"})]}),e.jsxs("div",{className:"flex items-center",children:[a==="running"&&e.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-blue-50 text-blue-700 rounded-full text-xs font-medium border border-blue-100",children:[e.jsx(L,{className:"w-3.5 h-3.5 animate-pulse"}),e.jsx("span",{children:"Running"})]}),a==="stopped"&&e.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-emerald-50 text-emerald-700 rounded-full text-xs font-medium border border-emerald-100",children:[e.jsx(Y,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"Done"})]}),a==="idle"&&e.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-neutral-100 text-neutral-600 rounded-full text-xs font-medium border border-neutral-200",children:[e.jsx(Z,{className:"w-3.5 h-3.5"}),e.jsx("span",{children:"Idle"})]}),a==="starting"&&e.jsxs("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-amber-50 text-amber-700 rounded-full text-xs font-medium border border-amber-100",children:[e.jsx(L,{className:"w-3.5 h-3.5 animate-spin"}),e.jsx("span",{children:"Starting..."})]}),a==="error"&&e.jsx("div",{className:"flex items-center gap-1.5 px-2.5 py-0.5 bg-red-50 text-red-700 rounded-full text-xs font-medium border border-red-100",children:e.jsx("span",{children:"Error"})})]})]}),c&&e.jsxs("div",{className:"mt-1.5 flex items-start gap-2 group max-w-4xl",children:[e.jsx("div",{className:`text-sm text-neutral-600 leading-relaxed cursor-pointer transition-all ${h?"":"truncate"}`,onClick:()=>E(!h),children:i}),e.jsx("button",{onClick:()=>E(!h),className:"mt-0.5 text-neutral-400 opacity-0 group-hover:opacity-100 hover:text-neutral-600 transition-opacity",children:h?e.jsx(xe,{size:14}):e.jsx(ie,{size:14})})]}),e.jsxs("div",{className:"flex items-center gap-6 mt-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-neutral-400 font-medium",children:"Agent"}),e.jsx("div",{className:"flex items-center gap-1.5 text-neutral-900 font-medium bg-neutral-50 px-2 py-1 rounded border border-neutral-100",children:J?.name||l||"未选择"})]}),d!=="DEFAULT"&&e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-neutral-400 font-medium",children:"Variant"}),e.jsx("div",{className:"flex items-center gap-1.5 text-neutral-700 font-medium bg-blue-50 px-2 py-1 rounded border border-blue-100",children:d})]}),I&&e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-neutral-400 font-medium",children:"Session"}),e.jsxs("div",{className:"flex items-center gap-1.5 text-neutral-700 font-mono bg-neutral-50 px-2 py-1 rounded border border-neutral-100",children:[I.slice(0,8),"..."]})]}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"text-neutral-400 font-medium",children:"连接"}),e.jsx("div",{className:`flex items-center gap-1.5 font-medium px-2 py-1 rounded border ${p?"text-emerald-700 bg-emerald-50 border-emerald-100":"text-neutral-500 bg-neutral-50 border-neutral-100"}`,children:p?g?"已连接":"连接中...":"未连接"})]}),c&&e.jsx(y,{variant:"outline",size:"sm",onClick:K,className:"ml-auto",children:"新会话"}),e.jsxs(W,{to:"/settings/profiles",className:`flex items-center gap-1.5 text-xs text-neutral-500 hover:text-neutral-900 transition-colors ${c?"":"ml-auto"}`,children:[e.jsx(ee,{size:14}),e.jsx("span",{children:"Profiles 设置"})]})]})]}),e.jsx("div",{ref:C,className:"flex-1 overflow-y-auto px-8 py-6",children:c?e.jsx("div",{className:"min-h-[200px]",children:v.length===0?e.jsx("div",{className:"text-neutral-400 text-center py-8",children:"等待 Agent 响应..."}):e.jsx(te,{ref:$,logs:v,scrollElementRef:C})}):e.jsxs("div",{className:"max-w-2xl mx-auto space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold mb-3 text-neutral-900",children:"选择 Agent"}),e.jsx("div",{className:"flex gap-2 flex-wrap",children:w.map(t=>e.jsxs(y,{variant:l===t.type?"default":"outline",disabled:!t.available,onClick:()=>U(t.type),children:[t.name,t.available&&t.version&&` (${t.version})`,!t.available&&" (不可用)"]},t.type))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold mb-3 text-neutral-900",children:"配置变体 (Profile Variant)"}),e.jsx("div",{className:"flex gap-2 flex-wrap",children:H.map(t=>e.jsx("button",{onClick:()=>k(t),className:`px-3 py-1.5 rounded-full text-sm font-medium border transition-colors ${d===t?"bg-neutral-900 text-white border-neutral-900":"bg-white text-neutral-600 border-neutral-200 hover:border-neutral-400"}`,children:t},t))}),u&&u[d]&&e.jsx("p",{className:"mt-2 text-xs text-neutral-500 font-mono",children:Object.entries(u[d]).map(([t,n])=>`${t}: ${JSON.stringify(n)}`).join(", ")})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold mb-3 text-neutral-900",children:"输入任务"}),e.jsxs("div",{className:"relative border border-neutral-200 rounded-xl shadow-sm bg-white focus-within:ring-1 focus-within:ring-neutral-300 focus-within:border-neutral-300 transition-all duration-200",children:[e.jsx("textarea",{value:i,onChange:t=>A(t.target.value),rows:4,placeholder:"描述你想让 Agent 完成的任务...",className:"w-full px-4 py-3 bg-transparent border-none focus:outline-none focus:ring-0 resize-none text-neutral-900 placeholder-neutral-400 leading-relaxed text-sm"}),e.jsx("div",{className:"flex items-center justify-end px-3 pb-3 pt-1",children:e.jsx(y,{onClick:G,disabled:a==="starting"||!l||!i.trim(),children:a==="starting"?"启动中...":"开始"})})]})]})]})}),c&&R.length>0&&e.jsx("div",{className:"px-8 py-2 bg-white border-t border-neutral-100",children:e.jsx(se,{todos:R})}),c&&e.jsx("div",{className:"px-8 py-6 border-t border-neutral-100 bg-white",children:e.jsxs("div",{className:"relative border border-neutral-200 rounded-xl shadow-sm bg-white focus-within:ring-1 focus-within:ring-neutral-300 focus-within:border-neutral-300 transition-all duration-200",children:[e.jsx("textarea",{ref:m,value:x,onChange:B,rows:3,placeholder:"发送消息给 Agent...",className:"w-full px-4 py-3 bg-transparent border-none focus:outline-none focus:ring-0 resize-none text-neutral-900 placeholder-neutral-400 leading-relaxed text-sm scrollbar-thin scrollbar-thumb-neutral-200 scrollbar-track-transparent",style:{minHeight:"80px",maxHeight:"210px"},onKeyDown:t=>{t.key==="Enter"&&!t.shiftKey&&!t.repeat&&!t.nativeEvent.isComposing&&t.nativeEvent.keyCode!==229&&(t.preventDefault(),T())}}),e.jsxs("div",{className:"flex items-center justify-between px-3 pb-3 pt-1 border-t border-transparent",children:[e.jsxs("div",{className:"flex items-center gap-1 text-neutral-400",children:[e.jsx("button",{className:"p-2 hover:bg-neutral-100 hover:text-neutral-600 rounded-lg transition-colors",title:"Attach File",children:e.jsx(ne,{size:18})}),e.jsx("button",{className:"p-2 hover:bg-neutral-100 hover:text-neutral-600 rounded-lg transition-colors",title:"Mention",children:e.jsx(ce,{size:18})}),e.jsx("button",{className:"p-2 hover:bg-neutral-100 hover:text-neutral-600 rounded-lg transition-colors",title:"Reference Issue",children:e.jsx(ue,{size:18})}),e.jsx("div",{className:"w-px h-4 bg-neutral-200 mx-1"}),e.jsx("button",{className:"p-2 hover:bg-neutral-100 hover:text-neutral-600 rounded-lg transition-colors",title:"Search Web",children:e.jsx(re,{size:18})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[q&&e.jsxs("button",{onClick:O,className:"flex items-center gap-2 px-3 py-2 text-xs font-semibold text-red-600 bg-red-50 hover:bg-red-100 rounded-lg transition-colors",children:[e.jsx(ae,{size:12,fill:"currentColor"}),e.jsx("span",{children:"Stop"})]}),e.jsxs("button",{onClick:T,disabled:!x.trim(),className:`flex items-center gap-2 px-3 py-2 text-xs font-semibold rounded-lg transition-all ${x.trim()?"bg-neutral-900 text-white hover:bg-black shadow-sm":"bg-neutral-100 text-neutral-400 cursor-not-allowed"}`,children:[e.jsx("span",{children:"Send"}),e.jsx(he,{size:14})]})]})]})]})})]})}export{Se as AgentDemoPage};
@@ -1,4 +1,4 @@
1
- import{r as n,s as E,S as d,C as k,j as s}from"./index-2lw92znX.js";import{c as _,a as R,B}from"./api-client-DUkeyNRB.js";function T(I){const{sessionId:a,onOutput:x,onExit:b,onError:u}=I,[j,c]=n.useState(()=>E.isConnected()),[v,m]=n.useState(!1),r=n.useRef({onOutput:x,onExit:b,onError:u});r.current={onOutput:x,onExit:b,onError:u},n.useEffect(()=>{const t=E.getSocket();c(t.connected);const i=()=>c(!0),p=()=>{c(!1),m(!1)},O=l=>{l.sessionId===a&&r.current.onOutput?.(l.data)},h=l=>{l.sessionId===a&&(m(!1),r.current.onExit?.(l.exitCode))},g=l=>{l.sessionId===a&&r.current.onError?.(l.message)},N=l=>{l.sessionId===a&&m(!0)},C=l=>{l.sessionId===a&&m(!1)};return t.on("connect",i),t.on("disconnect",p),t.on(d.SESSION_STDOUT,O),t.on(d.SESSION_EXIT,h),t.on(d.SESSION_ERROR,g),t.on(d.SESSION_SUBSCRIBED,N),t.on(d.SESSION_UNSUBSCRIBED,C),c(t.connected),()=>{t.off("connect",i),t.off("disconnect",p),t.off(d.SESSION_STDOUT,O),t.off(d.SESSION_EXIT,h),t.off(d.SESSION_ERROR,g),t.off(d.SESSION_SUBSCRIBED,N),t.off(d.SESSION_UNSUBSCRIBED,C),t.emit(k.UNSUBSCRIBE,{topic:"session",id:a})}},[a]);const y=n.useCallback(()=>new Promise(t=>{const i=E.getSocket();if(!i.connected){t(!1);return}i.emit(k.SUBSCRIBE,{topic:"session",id:a},p=>{t(p.success)})}),[a]),w=n.useCallback(()=>{E.getSocket().emit(k.UNSUBSCRIBE,{topic:"session",id:a})},[a]),S=n.useCallback(t=>{E.getSocket().emit(k.INPUT,{sessionId:a,data:t})},[a]),D=n.useCallback((t,i)=>{E.getSocket().emit(k.RESIZE,{sessionId:a,cols:t,rows:i})},[a]);return{isConnected:j,isAttached:v,attach:y,detach:w,sendInput:S,resize:D}}function U({className:I,...a}){return s.jsx("div",{"data-slot":"card",className:_("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",I),...a})}function P(){const[I,a]=n.useState([]),[x,b]=n.useState(""),[u,j]=n.useState(""),[c,v]=n.useState(null),[m,r]=n.useState([]),[y,w]=n.useState(!1),[S,D]=n.useState(""),t=n.useRef(null),i=n.useCallback(e=>{r(o=>{const f=o[o.length-1];return f&&f.role==="agent"?[...o.slice(0,-1),{...f,content:f.content+e}]:[...o,{role:"agent",content:e,timestamp:new Date}]})},[]),p=n.useCallback(e=>{r(o=>[...o,{role:"agent",content:`
1
+ import{r as n,s as E,S as d,C as k,j as s}from"./index-B-QFtMnj.js";import{c as _,a as R,B}from"./api-client-CgvcCTaj.js";function T(I){const{sessionId:a,onOutput:x,onExit:b,onError:u}=I,[j,c]=n.useState(()=>E.isConnected()),[v,m]=n.useState(!1),r=n.useRef({onOutput:x,onExit:b,onError:u});r.current={onOutput:x,onExit:b,onError:u},n.useEffect(()=>{const t=E.getSocket();c(t.connected);const i=()=>c(!0),p=()=>{c(!1),m(!1)},O=l=>{l.sessionId===a&&r.current.onOutput?.(l.data)},h=l=>{l.sessionId===a&&(m(!1),r.current.onExit?.(l.exitCode))},g=l=>{l.sessionId===a&&r.current.onError?.(l.message)},N=l=>{l.sessionId===a&&m(!0)},C=l=>{l.sessionId===a&&m(!1)};return t.on("connect",i),t.on("disconnect",p),t.on(d.SESSION_STDOUT,O),t.on(d.SESSION_EXIT,h),t.on(d.SESSION_ERROR,g),t.on(d.SESSION_SUBSCRIBED,N),t.on(d.SESSION_UNSUBSCRIBED,C),c(t.connected),()=>{t.off("connect",i),t.off("disconnect",p),t.off(d.SESSION_STDOUT,O),t.off(d.SESSION_EXIT,h),t.off(d.SESSION_ERROR,g),t.off(d.SESSION_SUBSCRIBED,N),t.off(d.SESSION_UNSUBSCRIBED,C),t.emit(k.UNSUBSCRIBE,{topic:"session",id:a})}},[a]);const y=n.useCallback(()=>new Promise(t=>{const i=E.getSocket();if(!i.connected){t(!1);return}i.emit(k.SUBSCRIBE,{topic:"session",id:a},p=>{t(p.success)})}),[a]),w=n.useCallback(()=>{E.getSocket().emit(k.UNSUBSCRIBE,{topic:"session",id:a})},[a]),S=n.useCallback(t=>{E.getSocket().emit(k.INPUT,{sessionId:a,data:t})},[a]),D=n.useCallback((t,i)=>{E.getSocket().emit(k.RESIZE,{sessionId:a,cols:t,rows:i})},[a]);return{isConnected:j,isAttached:v,attach:y,detach:w,sendInput:S,resize:D}}function U({className:I,...a}){return s.jsx("div",{"data-slot":"card",className:_("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",I),...a})}function P(){const[I,a]=n.useState([]),[x,b]=n.useState(""),[u,j]=n.useState(""),[c,v]=n.useState(null),[m,r]=n.useState([]),[y,w]=n.useState(!1),[S,D]=n.useState(""),t=n.useRef(null),i=n.useCallback(e=>{r(o=>{const f=o[o.length-1];return f&&f.role==="agent"?[...o.slice(0,-1),{...f,content:f.content+e}]:[...o,{role:"agent",content:e,timestamp:new Date}]})},[]),p=n.useCallback(e=>{r(o=>[...o,{role:"agent",content:`
2
2
  [进程退出,退出码: ${e}]`,timestamp:new Date}]),v(null)},[]),O=n.useCallback(e=>{r(o=>[...o,{role:"agent",content:`
3
3
  [错误: ${e}]`,timestamp:new Date}])},[]),{isConnected:h,isAttached:g,attach:N}=T({sessionId:c||"",onOutput:i,onExit:p,onError:O});n.useEffect(()=>{R.get("/demo/agents").then(e=>{a(e.agents);const o=e.agents.find(f=>f.available);o&&b(o.type)})},[]),n.useEffect(()=>{t.current?.scrollIntoView({behavior:"smooth"})},[m]),n.useEffect(()=>{c&&h&&!g&&N()},[c,h,g,N]);const C=async()=>{if(!(!x||!u.trim())){w(!0),r([{role:"user",content:u,timestamp:new Date}]);try{const e=await R.post("/demo/start",{agentType:x,prompt:u.trim()});v(e.sessionId),j("")}catch(e){r(o=>[...o,{role:"agent",content:`启动失败: ${e instanceof Error?e.message:"未知错误"}`,timestamp:new Date}])}finally{w(!1)}}},l=async()=>{if(!c||!S.trim())return;const e=S.trim();r(o=>[...o,{role:"user",content:e,timestamp:new Date}]),D("");try{await R.post(`/demo/${c}/message`,{message:e})}catch(o){r(f=>[...f,{role:"agent",content:`发送失败: ${o instanceof Error?o.message:"未知错误"}`,timestamp:new Date}])}},A=async()=>{if(c)try{await R.post(`/demo/${c}/stop`),r(e=>[...e,{role:"agent",content:`
4
4
  [会话已停止]`,timestamp:new Date}]),v(null)}catch(e){console.error("Stop failed:",e)}};return s.jsxs("div",{className:"flex flex-col h-full max-w-4xl mx-auto p-4 gap-4",children:[s.jsx("h1",{className:"text-2xl font-bold",children:"Agent 交互演示"}),!c&&s.jsxs(U,{className:"p-4",children:[s.jsx("h2",{className:"text-lg font-semibold mb-3",children:"选择 Agent"}),s.jsx("div",{className:"flex gap-2 flex-wrap mb-4",children:I.map(e=>s.jsxs(B,{variant:x===e.type?"default":"outline",disabled:!e.available,onClick:()=>b(e.type),children:[e.name,e.available&&e.version&&` (${e.version})`,!e.available&&" (不可用)"]},e.type))}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx("input",{type:"text",value:u,onChange:e=>j(e.target.value),onKeyDown:e=>e.key==="Enter"&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&C(),placeholder:"输入你的问题或任务...",className:"flex-1 px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"}),s.jsx(B,{onClick:C,disabled:y||!x||!u.trim(),children:y?"启动中...":"开始"})]})]}),s.jsxs(U,{className:"flex-1 p-4 overflow-hidden flex flex-col",children:[s.jsxs("div",{className:"flex justify-between items-center mb-3",children:[s.jsx("h2",{className:"text-lg font-semibold",children:"对话"}),c&&s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-sm text-gray-500",children:h?g?"已连接":"连接中...":"未连接"}),s.jsx(B,{variant:"outline",size:"sm",onClick:A,children:"停止"})]})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto space-y-3",children:[m.length===0?s.jsx("div",{className:"text-gray-400 text-center py-8",children:"选择 Agent 并输入问题开始对话"}):m.map((e,o)=>s.jsxs("div",{className:`p-3 rounded-lg ${e.role==="user"?"bg-blue-100 ml-8":"bg-gray-100 mr-8"}`,children:[s.jsx("div",{className:"text-xs text-gray-500 mb-1",children:e.role==="user"?"你":"Agent"}),s.jsx("pre",{className:"whitespace-pre-wrap font-mono text-sm",children:e.content})]},o)),s.jsx("div",{ref:t})]}),c&&s.jsxs("div",{className:"flex gap-2 mt-3 pt-3 border-t",children:[s.jsx("input",{type:"text",value:S,onChange:e=>D(e.target.value),onKeyDown:e=>e.key==="Enter"&&!e.repeat&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&l(),placeholder:"发送后续消息...",className:"flex-1 px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"}),s.jsx(B,{onClick:l,disabled:!S.trim(),children:"发送"})]})]})]})}export{P as DemoPage};
@@ -1 +1 @@
1
- import{c as U,u as S,r as l,j as e}from"./index-2lw92znX.js";import{u as E,a as j,q as y}from"./query-keys-DpgVNQA1.js";import{a as x,B as g}from"./api-client-DUkeyNRB.js";import{S as I}from"./select-5Ta6iqIf.js";import{L as P}from"./loader-circle-eX5KttSb.js";import{C as q}from"./circle-check-38jFi9hD.js";import{C as R}from"./circle-alert-DggTOwqB.js";import"./chevron-down-jKHLtCQs.js";const z=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],L=U("link",z);function B(){return E({queryKey:y.notifications.settings,queryFn:()=>x.get("/notifications/settings")})}function A(){const s=S();return j({mutationFn:c=>x.put("/notifications/settings",c),onSuccess:()=>{s.invalidateQueries({queryKey:y.notifications.settings})}})}function F(){return j({mutationFn:s=>x.post("/notifications/test",s)})}const K=[{value:"none",label:"无"},{value:"feishu",label:"飞书"}];function G(){const{data:s,isLoading:c}=B(),r=A(),a=F(),[n,p]=l.useState({webhookUrl:"",baseUrl:"",titleTemplate:"",bodyTemplate:""}),[u,h]=l.useState(!1),[f,i]=l.useState("idle"),d=l.useRef(void 0);if(l.useEffect(()=>{s&&!u&&p({webhookUrl:s.feishuWebhookUrl??"",baseUrl:s.thirdPartyBaseUrl??"",titleTemplate:s.taskInReviewTitleTemplate??"",bodyTemplate:s.taskInReviewBodyTemplate??""})},[s,u]),l.useEffect(()=>(a.isSuccess?(i("success"),d.current=setTimeout(()=>i("idle"),3e3)):a.isError&&(i("error"),d.current=setTimeout(()=>i("idle"),5e3)),()=>clearTimeout(d.current)),[a.isSuccess,a.isError]),c)return e.jsx("div",{className:"p-6 text-sm text-neutral-400",children:"加载中..."});const m=s?.osNotificationEnabled??!0,b=s?.thirdPartyChannel??"none",o=(t,w)=>{p(C=>({...C,[t]:w})),h(!0)},N=()=>{r.mutate({osNotificationEnabled:!m})},k=t=>{r.mutate({thirdPartyChannel:t})},v=()=>{r.mutate({feishuWebhookUrl:n.webhookUrl.trim()||null,thirdPartyBaseUrl:n.baseUrl.trim()||null,taskInReviewTitleTemplate:n.titleTemplate.trim()||"Agent Tower",taskInReviewBodyTemplate:n.bodyTemplate.trim()||'✅ "{taskTitle}" 已完成,等待审查'},{onSuccess:()=>h(!1)})},T=()=>{n.webhookUrl.trim()&&a.mutate({channel:"feishu",webhookUrl:n.webhookUrl.trim(),baseUrl:n.baseUrl.trim()||void 0})};return e.jsxs("div",{className:"px-10 py-6 mx-auto w-full max-w-3xl space-y-8",children:[e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"系统通知"}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:"任务完成时弹出桌面通知"}),e.jsx("button",{onClick:N,className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors ${m?"bg-neutral-900":"bg-neutral-200"}`,children:e.jsx("span",{className:`inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform ${m?"translate-x-[18px]":"translate-x-[3px]"}`})})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"第三方通知"}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:"选择一个第三方渠道接收通知"}),e.jsx(I,{value:b,onChange:t=>k(t),options:K}),b==="feishu"&&e.jsxs("div",{className:"mt-4 space-y-4",children:[e.jsxs("div",{className:"p-4 border border-neutral-100 rounded-lg space-y-3",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"flex items-center gap-1 text-[13px] font-medium text-neutral-700 mb-1",children:[e.jsx(L,{size:12}),"Webhook URL"]}),e.jsx("input",{type:"text",value:n.webhookUrl,onChange:t=>o("webhookUrl",t.target.value),placeholder:"https://open.feishu.cn/open-apis/bot/v2/hook/...",className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(g,{size:"sm",variant:"outline",onClick:T,disabled:!n.webhookUrl.trim()||a.isPending,children:[a.isPending&&e.jsx(P,{size:12,className:"animate-spin mr-1"}),"测试发送"]}),f==="success"&&e.jsxs("span",{className:"flex items-center gap-1 text-xs text-green-600",children:[e.jsx(q,{size:12}),"发送成功"]}),f==="error"&&e.jsxs("span",{className:"flex items-center gap-1 text-xs text-red-500",children:[e.jsx(R,{size:12}),"发送失败"]})]})]}),e.jsx("div",{className:"p-4 border border-neutral-100 rounded-lg space-y-3",children:e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:"跳转地址(用于生成任务链接)"}),e.jsx("input",{type:"text",value:n.baseUrl,onChange:t=>o("baseUrl",t.target.value),placeholder:"http://localhost:5173",className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300"}),e.jsxs("p",{className:"text-[11px] text-neutral-400 mt-1",children:['通知卡片中的"查看任务"按钮将跳转到 ',"{baseUrl}/projects/{projectId}/tasks/{taskId}"]})]})})]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"通知模板"}),e.jsxs("p",{className:"text-[12px] text-neutral-400 mb-3",children:["支持变量: ","{taskTitle}",", ","{taskId}",", ","{projectId}",", ","{projectName}",", ","{status}"]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:"标题模板"}),e.jsx("input",{type:"text",value:n.titleTemplate,onChange:t=>o("titleTemplate",t.target.value),placeholder:"Agent Tower",className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:ring-1 focus:ring-neutral-300"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:"内容模板"}),e.jsx("textarea",{value:n.bodyTemplate,onChange:t=>o("bodyTemplate",t.target.value),placeholder:'✅ "{taskTitle}" 已完成,等待审查',rows:2,className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:ring-1 focus:ring-neutral-300 resize-none"})]})]})]}),u&&e.jsx("div",{className:"sticky bottom-6 flex justify-end",children:e.jsx(g,{size:"sm",onClick:v,disabled:r.isPending,children:r.isPending?"保存中...":"保存所有更改"})})]})}export{G as NotificationSettingsPage};
1
+ import{c as U,u as S,r as l,j as e}from"./index-B-QFtMnj.js";import{u as E,a as j,q as y}from"./query-keys-BGgDKleg.js";import{a as x,B as g}from"./api-client-CgvcCTaj.js";import{S as I}from"./select-CinUO48b.js";import{L as P}from"./loader-circle-B8Hk0gt3.js";import{C as q}from"./circle-check-DilG10OC.js";import{C as R}from"./circle-alert-wdB5gDUz.js";import"./chevron-down-DrP9EgY9.js";const z=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],L=U("link",z);function B(){return E({queryKey:y.notifications.settings,queryFn:()=>x.get("/notifications/settings")})}function A(){const s=S();return j({mutationFn:c=>x.put("/notifications/settings",c),onSuccess:()=>{s.invalidateQueries({queryKey:y.notifications.settings})}})}function F(){return j({mutationFn:s=>x.post("/notifications/test",s)})}const K=[{value:"none",label:"无"},{value:"feishu",label:"飞书"}];function G(){const{data:s,isLoading:c}=B(),r=A(),a=F(),[n,p]=l.useState({webhookUrl:"",baseUrl:"",titleTemplate:"",bodyTemplate:""}),[u,h]=l.useState(!1),[f,i]=l.useState("idle"),d=l.useRef(void 0);if(l.useEffect(()=>{s&&!u&&p({webhookUrl:s.feishuWebhookUrl??"",baseUrl:s.thirdPartyBaseUrl??"",titleTemplate:s.taskInReviewTitleTemplate??"",bodyTemplate:s.taskInReviewBodyTemplate??""})},[s,u]),l.useEffect(()=>(a.isSuccess?(i("success"),d.current=setTimeout(()=>i("idle"),3e3)):a.isError&&(i("error"),d.current=setTimeout(()=>i("idle"),5e3)),()=>clearTimeout(d.current)),[a.isSuccess,a.isError]),c)return e.jsx("div",{className:"p-6 text-sm text-neutral-400",children:"加载中..."});const m=s?.osNotificationEnabled??!0,b=s?.thirdPartyChannel??"none",o=(t,w)=>{p(C=>({...C,[t]:w})),h(!0)},N=()=>{r.mutate({osNotificationEnabled:!m})},k=t=>{r.mutate({thirdPartyChannel:t})},v=()=>{r.mutate({feishuWebhookUrl:n.webhookUrl.trim()||null,thirdPartyBaseUrl:n.baseUrl.trim()||null,taskInReviewTitleTemplate:n.titleTemplate.trim()||"Agent Tower",taskInReviewBodyTemplate:n.bodyTemplate.trim()||'✅ "{taskTitle}" 已完成,等待审查'},{onSuccess:()=>h(!1)})},T=()=>{n.webhookUrl.trim()&&a.mutate({channel:"feishu",webhookUrl:n.webhookUrl.trim(),baseUrl:n.baseUrl.trim()||void 0})};return e.jsxs("div",{className:"px-10 py-6 mx-auto w-full max-w-3xl space-y-8",children:[e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"系统通知"}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:"任务完成时弹出桌面通知"}),e.jsx("button",{onClick:N,className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors ${m?"bg-neutral-900":"bg-neutral-200"}`,children:e.jsx("span",{className:`inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform ${m?"translate-x-[18px]":"translate-x-[3px]"}`})})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"第三方通知"}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:"选择一个第三方渠道接收通知"}),e.jsx(I,{value:b,onChange:t=>k(t),options:K}),b==="feishu"&&e.jsxs("div",{className:"mt-4 space-y-4",children:[e.jsxs("div",{className:"p-4 border border-neutral-100 rounded-lg space-y-3",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"flex items-center gap-1 text-[13px] font-medium text-neutral-700 mb-1",children:[e.jsx(L,{size:12}),"Webhook URL"]}),e.jsx("input",{type:"text",value:n.webhookUrl,onChange:t=>o("webhookUrl",t.target.value),placeholder:"https://open.feishu.cn/open-apis/bot/v2/hook/...",className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(g,{size:"sm",variant:"outline",onClick:T,disabled:!n.webhookUrl.trim()||a.isPending,children:[a.isPending&&e.jsx(P,{size:12,className:"animate-spin mr-1"}),"测试发送"]}),f==="success"&&e.jsxs("span",{className:"flex items-center gap-1 text-xs text-green-600",children:[e.jsx(q,{size:12}),"发送成功"]}),f==="error"&&e.jsxs("span",{className:"flex items-center gap-1 text-xs text-red-500",children:[e.jsx(R,{size:12}),"发送失败"]})]})]}),e.jsx("div",{className:"p-4 border border-neutral-100 rounded-lg space-y-3",children:e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:"跳转地址(用于生成任务链接)"}),e.jsx("input",{type:"text",value:n.baseUrl,onChange:t=>o("baseUrl",t.target.value),placeholder:"http://localhost:5173",className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300"}),e.jsxs("p",{className:"text-[11px] text-neutral-400 mt-1",children:['通知卡片中的"查看任务"按钮将跳转到 ',"{baseUrl}/projects/{projectId}/tasks/{taskId}"]})]})})]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"通知模板"}),e.jsxs("p",{className:"text-[12px] text-neutral-400 mb-3",children:["支持变量: ","{taskTitle}",", ","{taskId}",", ","{projectId}",", ","{projectName}",", ","{status}"]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:"标题模板"}),e.jsx("input",{type:"text",value:n.titleTemplate,onChange:t=>o("titleTemplate",t.target.value),placeholder:"Agent Tower",className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:ring-1 focus:ring-neutral-300"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:"内容模板"}),e.jsx("textarea",{value:n.bodyTemplate,onChange:t=>o("bodyTemplate",t.target.value),placeholder:'✅ "{taskTitle}" 已完成,等待审查',rows:2,className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:ring-1 focus:ring-neutral-300 resize-none"})]})]})]}),u&&e.jsx("div",{className:"sticky bottom-6 flex justify-end",children:e.jsx(g,{size:"sm",onClick:v,disabled:r.isPending,children:r.isPending?"保存中...":"保存所有更改"})})]})}export{G as NotificationSettingsPage};
@@ -1,3 +1,3 @@
1
- import{r as o,j as e}from"./index-2lw92znX.js";import{u as J,a as V,b as $,c as L}from"./use-profiles-BHlH-mYH.js";import{B as N}from"./api-client-DUkeyNRB.js";import{T as A,M as D}from"./modal-DpSqKQgt.js";import{P as I}from"./x-_SSVUTap.js";import{P as M}from"./pencil-BaroHDtz.js";import"./query-keys-DpgVNQA1.js";function U(i){return Object.entries(i).map(([c,u])=>`${c}: ${JSON.stringify(u)}`).join(", ")}const g={CLAUDE_CODE:"Claude Code",GEMINI_CLI:"Gemini CLI",CURSOR_AGENT:"Cursor Agent"};function q(){const{data:i,isLoading:c}=J(),{data:u}=V(),d=$(),v=L(),[r,a]=o.useState(null),[f,x]=o.useState(""),[m,p]=o.useState(""),[h,l]=o.useState(""),C=(t,s,n)=>{a({agentType:t,variant:s,config:n,isNew:!1}),p(s),x(JSON.stringify(n,null,2)),l("")},S=t=>{a({agentType:t,variant:"",config:{},isNew:!0}),p(""),x(`{
1
+ import{r as o,j as e}from"./index-B-QFtMnj.js";import{u as J,a as V,b as $,c as L}from"./use-profiles-DJwSheDq.js";import{B as N}from"./api-client-CgvcCTaj.js";import{T as A,M as D}from"./modal-CCInxYr_.js";import{P as I}from"./x-Bz9Stptu.js";import{P as M}from"./pencil-u5vhUMho.js";import"./query-keys-BGgDKleg.js";function U(i){return Object.entries(i).map(([c,u])=>`${c}: ${JSON.stringify(u)}`).join(", ")}const g={CLAUDE_CODE:"Claude Code",GEMINI_CLI:"Gemini CLI",CURSOR_AGENT:"Cursor Agent"};function q(){const{data:i,isLoading:c}=J(),{data:u}=V(),d=$(),v=L(),[r,a]=o.useState(null),[f,x]=o.useState(""),[m,p]=o.useState(""),[h,l]=o.useState(""),C=(t,s,n)=>{a({agentType:t,variant:s,config:n,isNew:!1}),p(s),x(JSON.stringify(n,null,2)),l("")},S=t=>{a({agentType:t,variant:"",config:{},isNew:!0}),p(""),x(`{
2
2
 
3
3
  }`),l("")},E=()=>{if(!(!r||!m.trim()))try{const t=JSON.parse(f);l(""),d.mutate({agentType:r.agentType,variant:m.trim().toUpperCase(),config:t},{onSuccess:()=>a(null)})}catch{l("JSON 格式错误")}},w=(t,s)=>{confirm(`确定删除 ${t} / ${s}?`)&&v.mutate({agentType:t,variant:s})},y=(t,s)=>!!u?.executors[t]?.[s];if(c)return e.jsx("div",{className:"p-6 text-sm text-neutral-400",children:"加载中..."});const O=i?.executors??{};return e.jsxs("div",{className:"px-10 py-6 mx-auto w-full max-w-3xl",children:[Object.entries(O).map(([t,s])=>e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900",children:g[t]??t}),e.jsxs("button",{onClick:()=>S(t),className:"flex items-center gap-1 text-xs text-neutral-400 hover:text-neutral-900 transition-colors",children:[e.jsx(I,{size:12}),e.jsx("span",{children:"新增"})]})]}),e.jsx("div",{className:"border border-neutral-100 rounded-lg overflow-hidden",children:Object.entries(s).map(([n,b],P,k)=>{const j=y(t,n);return e.jsxs("div",{className:`flex items-center gap-3 px-4 py-2.5 hover:bg-neutral-50 transition-colors group ${P<k.length-1?"border-b border-neutral-100":""}`,children:[e.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded text-[11px] font-semibold tracking-wide ${n==="DEFAULT"?"bg-blue-50 text-blue-600":"bg-neutral-50 text-neutral-600"}`,children:n}),e.jsx("span",{className:"flex-1 text-[12px] text-neutral-400 font-mono truncate",children:U(b)}),j&&e.jsx("span",{className:"text-[11px] text-neutral-300 font-medium",children:"内置"}),e.jsxs("div",{className:"flex items-center gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx("button",{onClick:()=>C(t,n,b),className:"p-1 text-neutral-300 hover:text-neutral-700 rounded transition-colors",children:e.jsx(M,{size:13})}),!j&&e.jsx("button",{onClick:()=>w(t,n),className:"p-1 text-neutral-300 hover:text-red-500 rounded transition-colors",children:e.jsx(A,{size:13})})]})]},n)})})]},t)),e.jsx(D,{isOpen:!!r,onClose:()=>a(null),title:r?.isNew?`新增 Variant — ${g[r.agentType]??r.agentType}`:`编辑 ${r?.variant}`,action:e.jsxs(e.Fragment,{children:[e.jsx(N,{variant:"outline",onClick:()=>a(null),children:"取消"}),e.jsx(N,{onClick:E,disabled:d.isPending,children:d.isPending?"保存中...":"保存"})]}),children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:"Variant 名称"}),e.jsx("input",{type:"text",value:m,onChange:t=>p(t.target.value),disabled:!r?.isNew,placeholder:"例如: CUSTOM",className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:ring-1 focus:ring-neutral-300 disabled:bg-neutral-50 disabled:text-neutral-500 font-mono"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:"配置 (JSON)"}),e.jsx("textarea",{value:f,onChange:t=>{x(t.target.value),l("")},rows:6,className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300 resize-none"}),h&&e.jsx("p",{className:"mt-1 text-xs text-red-500",children:h})]})]})})]})}export{q as ProfileSettingsPage};