@jesonliu/lark-claudecode-bridge 0.18.1 → 0.20.0

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 (78) hide show
  1. package/README.md +14 -12
  2. package/assets/web/css/main.css +509 -111
  3. package/assets/web/index.html +12 -2
  4. package/assets/web/js/main.js +19 -11
  5. package/assets/web/js/pages/apps.js +10 -5
  6. package/assets/web/js/pages/claude.js +15 -5
  7. package/assets/web/js/pages/mcp.js +265 -0
  8. package/assets/web/js/pages/overview.js +5 -4
  9. package/assets/web/js/pages/permissions.js +56 -30
  10. package/assets/web/js/pages/plugins.js +29 -6
  11. package/assets/web/js/pages/skills.js +342 -0
  12. package/assets/web/js/pages/slash.js +11 -5
  13. package/assets/web/js/pages/workspaces.js +36 -14
  14. package/assets/web/js/theme.js +23 -0
  15. package/assets/web/js/ui.js +75 -4
  16. package/config.example.yaml +2 -3
  17. package/dist/access/access-control.d.ts +17 -1
  18. package/dist/access/access-control.js +31 -2
  19. package/dist/access/access-control.js.map +1 -1
  20. package/dist/bin/lcb.js +5 -0
  21. package/dist/bin/lcb.js.map +1 -1
  22. package/dist/claude-config.d.ts +14 -2
  23. package/dist/claude-config.js +75 -4
  24. package/dist/claude-config.js.map +1 -1
  25. package/dist/cli/setup-wizard.d.ts +0 -1
  26. package/dist/cli/setup-wizard.js +2 -4
  27. package/dist/cli/setup-wizard.js.map +1 -1
  28. package/dist/config.js +39 -14
  29. package/dist/config.js.map +1 -1
  30. package/dist/executor/claude-executor.d.ts +1 -1
  31. package/dist/executor/claude-executor.js +4 -2
  32. package/dist/executor/claude-executor.js.map +1 -1
  33. package/dist/executor/notify-server.d.ts +20 -0
  34. package/dist/executor/notify-server.js +85 -4
  35. package/dist/executor/notify-server.js.map +1 -1
  36. package/dist/executor/plugin-discovery.d.ts +6 -0
  37. package/dist/executor/plugin-discovery.js +14 -0
  38. package/dist/executor/plugin-discovery.js.map +1 -1
  39. package/dist/gateway/card-builder.d.ts +60 -24
  40. package/dist/gateway/card-builder.js +200 -109
  41. package/dist/gateway/card-builder.js.map +1 -1
  42. package/dist/gateway/diff-card.js +1 -1
  43. package/dist/gateway/diff-card.js.map +1 -1
  44. package/dist/gateway/feishu-gateway.d.ts +27 -0
  45. package/dist/gateway/feishu-gateway.js +106 -4
  46. package/dist/gateway/feishu-gateway.js.map +1 -1
  47. package/dist/gateway/progress-card.d.ts +77 -0
  48. package/dist/gateway/progress-card.js +231 -8
  49. package/dist/gateway/progress-card.js.map +1 -1
  50. package/dist/index.d.ts +16 -1
  51. package/dist/index.js +354 -98
  52. package/dist/index.js.map +1 -1
  53. package/dist/notify-sop.d.ts +1 -0
  54. package/dist/notify-sop.js +33 -0
  55. package/dist/notify-sop.js.map +1 -0
  56. package/dist/session/commands.d.ts +1 -1
  57. package/dist/session/commands.js +25 -2
  58. package/dist/session/commands.js.map +1 -1
  59. package/dist/session/session-store.d.ts +3 -0
  60. package/dist/session/session-store.js.map +1 -1
  61. package/dist/types.d.ts +23 -5
  62. package/dist/util/log-tee.d.ts +4 -0
  63. package/dist/util/log-tee.js +99 -0
  64. package/dist/util/log-tee.js.map +1 -0
  65. package/dist/util/runtime-dirs.d.ts +4 -0
  66. package/dist/util/runtime-dirs.js +27 -0
  67. package/dist/util/runtime-dirs.js.map +1 -0
  68. package/dist/util/workspace-diff.js +2 -2
  69. package/dist/util/workspace-diff.js.map +1 -1
  70. package/dist/web/lifecycle.d.ts +4 -1
  71. package/dist/web/lifecycle.js +11 -25
  72. package/dist/web/lifecycle.js.map +1 -1
  73. package/dist/web/server.js +404 -11
  74. package/dist/web/server.js.map +1 -1
  75. package/dist/web/skills-mcp-api.d.ts +120 -0
  76. package/dist/web/skills-mcp-api.js +348 -0
  77. package/dist/web/skills-mcp-api.js.map +1 -0
  78. package/package.json +3 -1
@@ -0,0 +1,27 @@
1
+ // 运行时目录初始化:lcb 任意入口(start/ui/setup/pair/ws/app)与 Web 配置页启动前
2
+ // 先把 ~/.lark-claudecode-bridge 及标准子目录建好(幂等),保证「首次安装先配置」的
3
+ // 一切写盘(config.yaml.tmp / access.json / 日志 / 落盘等)不因目录缺失 ENOENT。
4
+ // 注意:config.yaml 不在此创建——首装 bootstrap 向导依赖「文件不存在」判定 firstRun
5
+ import { mkdirSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { CONFIG_DIR } from '../config.js';
8
+ /** 标准子目录:
9
+ * logs 按天日志 / transcripts 对话落盘 / claude 自管目录 / claude/plans 计划文件 /
10
+ * mcp 配置页管理的 MCP servers.json / notify SOP 硬兜底强制转 send_file 的中间产物(changes-YYYYMMDD-HHMMSS.md)*/
11
+ export function ensureRuntimeDirs() {
12
+ for (const dir of [
13
+ CONFIG_DIR,
14
+ join(CONFIG_DIR, 'logs'),
15
+ join(CONFIG_DIR, 'transcripts'),
16
+ join(CONFIG_DIR, 'claude'),
17
+ join(CONFIG_DIR, 'claude', 'plans'),
18
+ join(CONFIG_DIR, 'mcp'),
19
+ join(CONFIG_DIR, 'notify'),
20
+ ]) {
21
+ try {
22
+ mkdirSync(dir, { recursive: true });
23
+ }
24
+ catch { /* 已存在 / 极端权限异常:不阻断启动,具体写盘点各自兜底 */ }
25
+ }
26
+ }
27
+ //# sourceMappingURL=runtime-dirs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-dirs.js","sourceRoot":"","sources":["../../src/util/runtime-dirs.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yDAAyD;AACzD,+DAA+D;AAC/D,4DAA4D;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;kGAEkG;AAClG,MAAM,UAAU,iBAAiB;IAC/B,KAAK,MAAM,GAAG,IAAI;QAChB,UAAU;QACV,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;QAC/B,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;KAC3B,EAAE,CAAC;QACF,IAAI,CAAC;YACH,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
- // 工作区改动收集:code-dev 工作区任务收尾时用 git diff 生成全量 unified diff。
2
- // 不做文件快照——git 是 code-dev 工作区的既有事实(非 git 仓库回退旧上传行为,由调用方处理)
1
+ // 工作区改动收集:git 仓库工作区任务收尾时用 git diff 生成全量 unified diff。
2
+ // 不做文件快照——git 是代码工作区的既有事实(非 git 仓库返回 null,由调用方跳过)
3
3
  import { execFile } from 'node:child_process';
4
4
  import { readFile } from 'node:fs/promises';
5
5
  import { join } from 'node:path';
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-diff.js","sourceRoot":"","sources":["../../src/util/workspace-diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-diff.js","sourceRoot":"","sources":["../../src/util/workspace-diff.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ /** 后台运行日志落 ~/.lark-claudecode-bridge/logs/bridge-YYYY-MM-DD.log(#7:按天拆分,由进程内 console tee 自管)。
2
+ * 历史版本曾重定向 stdio 到 bridge.log(被本文件保留字段 LOG_PATH 引用但不再使用),现统一走 logs/。 */
1
3
  /** 桥接器进程启动成功后自写 PID 文件(页面据此探活/跨进程停止) */
2
4
  export declare function writePidFile(pidPath?: string): void;
3
5
  /** 优雅关闭时自清 PID 文件;文件已被其它进程覆写(重启竞态)时不误删 */
@@ -19,7 +21,8 @@ export declare function resolveLcbEntry(): {
19
21
  ok: false;
20
22
  error: string;
21
23
  };
22
- /** 后台拉起桥接器:detached 守护进程,stdio 落 bridge.log,父进程退出不影响其存活 */
24
+ /** 后台拉起桥接器:detached 守护进程,stdio 走 ignore(#7:日志由进程内 console tee 自管到 logs/,
25
+ * 不再重定向到 bridge.log——既避免文件双写分裂,也避免 detach 后日志继续堆在单文件) */
23
26
  export declare function spawnBridgeDetached(): {
24
27
  ok: true;
25
28
  pid: number;
@@ -1,15 +1,14 @@
1
1
  // 桥接器进程生命周期:PID 文件探活 / 后台拉起 / 跨进程停止 / 旧进程退出后重启。
2
2
  // 消费方:Web 配置页 /api/bridge/* 端点(页面按钮启停);startBridge 写/清 PID(src/index.ts)。
3
3
  // 路径参数可注入(默认 CONFIG_DIR),便于测试用临时目录
4
- import { closeSync, existsSync, openSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
4
+ import { existsSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
5
5
  import { spawn } from 'node:child_process';
6
6
  import { join } from 'node:path';
7
7
  import { fileURLToPath } from 'node:url';
8
8
  import { CONFIG_DIR } from '../config.js';
9
9
  const PID_PATH = join(CONFIG_DIR, 'bridge.pid');
10
- const LOG_PATH = join(CONFIG_DIR, 'bridge.log');
11
- /** 后台运行日志超 5MB 先截断,避免常驻进程日志无限增长 */
12
- const LOG_TRUNCATE_BYTES = 5 * 1024 * 1024;
10
+ /** 后台运行日志落 ~/.lark-claudecode-bridge/logs/bridge-YYYY-MM-DD.log(#7:按天拆分,由进程内 console tee 自管)。
11
+ * 历史版本曾重定向 stdio 到 bridge.log(被本文件保留字段 LOG_PATH 引用但不再使用),现统一走 logs/。 */
13
12
  /** 桥接器进程启动成功后自写 PID 文件(页面据此探活/跨进程停止) */
14
13
  export function writePidFile(pidPath = PID_PATH) {
15
14
  writeFileSync(pidPath, String(process.pid), 'utf8');
@@ -67,28 +66,18 @@ export function resolveLcbEntry() {
67
66
  }
68
67
  return { ok: true, entry };
69
68
  }
70
- /** 打开后台日志 fd(append;超 5MB 先截断) */
71
- function openLogFd() {
72
- try {
73
- if (existsSync(LOG_PATH) && statSync(LOG_PATH).size > LOG_TRUNCATE_BYTES)
74
- rmSync(LOG_PATH, { force: true });
75
- }
76
- catch { /* 截断失败继续 append */ }
77
- return openSync(LOG_PATH, 'a');
78
- }
79
- /** 后台拉起桥接器:detached 守护进程,stdio 落 bridge.log,父进程退出不影响其存活 */
69
+ /** 后台拉起桥接器:detached 守护进程,stdio 走 ignore(#7:日志由进程内 console tee 自管到 logs/,
70
+ * 不再重定向到 bridge.log——既避免文件双写分裂,也避免 detach 后日志继续堆在单文件) */
80
71
  export function spawnBridgeDetached() {
81
72
  const r = resolveLcbEntry();
82
73
  if (!r.ok)
83
74
  return r;
84
- const fd = openLogFd();
85
75
  const child = spawn(process.execPath, [r.entry, 'start'], {
86
76
  detached: true,
87
- stdio: ['ignore', fd, fd],
77
+ stdio: 'ignore',
88
78
  windowsHide: true,
89
79
  });
90
80
  child.unref();
91
- closeSync(fd); // 父进程关闭自有 fd 副本(子进程已继承)
92
81
  return { ok: true, pid: child.pid ?? -1 };
93
82
  }
94
83
  /**
@@ -108,21 +97,18 @@ export function stopBridgeByPid(pid) {
108
97
  /**
109
98
  * 内嵌重启 helper(CJS,node -e 执行):轮询旧进程退出 → 拉起新桥接器 → 自退。
110
99
  * 不能「先拉新再杀旧」:新进程的 Web 配置页会因端口仍被旧进程占用而启动失败,
111
- * 导致重启后页面失联。超时 30s 放弃(保留旧进程运行态,页面可重试)
100
+ * 导致重启后页面失联。超时 30s 放弃(保留旧进程运行态,页面可重试)。
101
+ * #7:stdio 走 ignore,日志由进程内 console tee 自管到 logs/bridge-YYYY-MM-DD.log
112
102
  */
113
103
  const RESTART_HELPER = `
114
104
  const { spawn } = require('node:child_process');
115
- const { openSync, closeSync, existsSync, statSync, rmSync } = require('node:fs');
116
- const [oldPid, entry, logPath] = process.argv.slice(1);
105
+ const [oldPid, entry] = process.argv.slice(1);
117
106
  const t0 = Date.now();
118
107
  (function wait() {
119
108
  try { process.kill(+oldPid, 0); } catch {
120
109
  try {
121
- if (existsSync(logPath) && statSync(logPath).size > 5*1024*1024) rmSync(logPath, { force: true });
122
- const fd = openSync(logPath, 'a');
123
- const child = spawn(process.execPath, [entry, 'start'], { detached: true, stdio: ['ignore', fd, fd], windowsHide: true });
110
+ const child = spawn(process.execPath, [entry, 'start'], { detached: true, stdio: 'ignore', windowsHide: true });
124
111
  child.unref();
125
- closeSync(fd);
126
112
  } catch (e) { try { console.error('restart helper failed:', e); } catch {} }
127
113
  process.exit(0);
128
114
  }
@@ -135,7 +121,7 @@ export function restartBridgeWithHelper(oldPid) {
135
121
  const r = resolveLcbEntry();
136
122
  if (!r.ok)
137
123
  return r;
138
- const helper = spawn(process.execPath, ['-e', RESTART_HELPER, String(oldPid), r.entry, LOG_PATH], {
124
+ const helper = spawn(process.execPath, ['-e', RESTART_HELPER, String(oldPid), r.entry], {
139
125
  detached: true,
140
126
  stdio: 'ignore',
141
127
  windowsHide: true,
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/web/lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/web/lifecycle.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,0EAA0E;AAC1E,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAChD;wEACwE;AAExE,wCAAwC;AACxC,MAAM,UAAU,YAAY,CAAC,OAAO,GAAW,QAAQ;IACrD,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,YAAY,CAAC,OAAO,GAAW,QAAQ;IACrD,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG;YAAE,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,kDAAkD;AAClD,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAQ,CAA2B,CAAC,IAAI,KAAK,OAAO,CAAC;IACvD,CAAC;AACH,CAAC;AAID,+CAA+C;AAC/C,MAAM,UAAU,YAAY,CAAC,OAAO,GAAW,QAAQ;IACrD,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACvD,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACnD,IAAI,CAAC;QAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IACnE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,qFAAqF;IACrF,mDAAmD;IACnD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4DAA4D,EAAE,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED;yDACyD;AACzD,MAAM,UAAU,mBAAmB;IACjC,MAAM,CAAC,GAAG,eAAe,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;QACxD,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,UAAU;IAC1B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;CAetB,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,MAAM,CAAC,GAAG,eAAe,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;QACtF,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAS,GAAG,MAAM,EAClB,OAAO,GAAW,QAAQ;IAE1B,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;IACrD,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACnG,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;IACnB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,eAAe;IAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAChE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAChC,CAAC"}