@deepwhale/coding-agent 1.0.11 → 1.0.12

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 (150) hide show
  1. package/package.json +1 -1
  2. package/dist/agent/agent-compaction.d.ts +0 -74
  3. package/dist/agent/agent-compaction.d.ts.map +0 -1
  4. package/dist/agent/agent-compaction.js +0 -145
  5. package/dist/agent/agent-compaction.js.map +0 -1
  6. package/dist/agent/index.d.ts +0 -16
  7. package/dist/agent/index.d.ts.map +0 -1
  8. package/dist/agent/index.js +0 -17
  9. package/dist/agent/index.js.map +0 -1
  10. package/dist/agent/session-adapter.d.ts +0 -177
  11. package/dist/agent/session-adapter.d.ts.map +0 -1
  12. package/dist/agent/session-adapter.js +0 -365
  13. package/dist/agent/session-adapter.js.map +0 -1
  14. package/dist/agent/tool-loop.d.ts +0 -123
  15. package/dist/agent/tool-loop.d.ts.map +0 -1
  16. package/dist/agent/tool-loop.js +0 -436
  17. package/dist/agent/tool-loop.js.map +0 -1
  18. package/dist/env/load-project-env.d.ts +0 -40
  19. package/dist/env/load-project-env.d.ts.map +0 -1
  20. package/dist/env/load-project-env.js +0 -80
  21. package/dist/env/load-project-env.js.map +0 -1
  22. package/dist/index.d.ts +0 -32
  23. package/dist/index.d.ts.map +0 -1
  24. package/dist/index.js +0 -33
  25. package/dist/index.js.map +0 -1
  26. package/dist/llm-factory.d.ts +0 -50
  27. package/dist/llm-factory.d.ts.map +0 -1
  28. package/dist/llm-factory.js +0 -110
  29. package/dist/llm-factory.js.map +0 -1
  30. package/dist/modes/index.d.ts +0 -14
  31. package/dist/modes/index.d.ts.map +0 -1
  32. package/dist/modes/index.js +0 -14
  33. package/dist/modes/index.js.map +0 -1
  34. package/dist/modes/print.d.ts +0 -50
  35. package/dist/modes/print.d.ts.map +0 -1
  36. package/dist/modes/print.js +0 -236
  37. package/dist/modes/print.js.map +0 -1
  38. package/dist/modes/rpc.d.ts +0 -52
  39. package/dist/modes/rpc.d.ts.map +0 -1
  40. package/dist/modes/rpc.js +0 -316
  41. package/dist/modes/rpc.js.map +0 -1
  42. package/dist/modes/tui.d.ts +0 -112
  43. package/dist/modes/tui.d.ts.map +0 -1
  44. package/dist/modes/tui.js +0 -733
  45. package/dist/modes/tui.js.map +0 -1
  46. package/dist/policy/args-digest.d.ts +0 -13
  47. package/dist/policy/args-digest.d.ts.map +0 -1
  48. package/dist/policy/args-digest.js +0 -29
  49. package/dist/policy/args-digest.js.map +0 -1
  50. package/dist/policy/chain.d.ts +0 -19
  51. package/dist/policy/chain.d.ts.map +0 -1
  52. package/dist/policy/chain.js +0 -24
  53. package/dist/policy/chain.js.map +0 -1
  54. package/dist/policy/index.d.ts +0 -17
  55. package/dist/policy/index.d.ts.map +0 -1
  56. package/dist/policy/index.js +0 -16
  57. package/dist/policy/index.js.map +0 -1
  58. package/dist/policy/sanitize-reason.d.ts +0 -11
  59. package/dist/policy/sanitize-reason.d.ts.map +0 -1
  60. package/dist/policy/sanitize-reason.js +0 -24
  61. package/dist/policy/sanitize-reason.js.map +0 -1
  62. package/dist/policy/static-rules.d.ts +0 -32
  63. package/dist/policy/static-rules.d.ts.map +0 -1
  64. package/dist/policy/static-rules.js +0 -106
  65. package/dist/policy/static-rules.js.map +0 -1
  66. package/dist/policy/types.d.ts +0 -56
  67. package/dist/policy/types.d.ts.map +0 -1
  68. package/dist/policy/types.js +0 -13
  69. package/dist/policy/types.js.map +0 -1
  70. package/dist/repl/repl-confirm.d.ts +0 -49
  71. package/dist/repl/repl-confirm.d.ts.map +0 -1
  72. package/dist/repl/repl-confirm.js +0 -88
  73. package/dist/repl/repl-confirm.js.map +0 -1
  74. package/dist/repl.d.ts +0 -154
  75. package/dist/repl.d.ts.map +0 -1
  76. package/dist/repl.js +0 -780
  77. package/dist/repl.js.map +0 -1
  78. package/dist/sandbox/docker-runner.d.ts +0 -147
  79. package/dist/sandbox/docker-runner.d.ts.map +0 -1
  80. package/dist/sandbox/docker-runner.js +0 -426
  81. package/dist/sandbox/docker-runner.js.map +0 -1
  82. package/dist/sandbox/env-gate.d.ts +0 -28
  83. package/dist/sandbox/env-gate.d.ts.map +0 -1
  84. package/dist/sandbox/env-gate.js +0 -65
  85. package/dist/sandbox/env-gate.js.map +0 -1
  86. package/dist/sandbox/local-runner.d.ts +0 -29
  87. package/dist/sandbox/local-runner.d.ts.map +0 -1
  88. package/dist/sandbox/local-runner.js +0 -79
  89. package/dist/sandbox/local-runner.js.map +0 -1
  90. package/dist/sandbox/types.d.ts +0 -80
  91. package/dist/sandbox/types.d.ts.map +0 -1
  92. package/dist/sandbox/types.js +0 -25
  93. package/dist/sandbox/types.js.map +0 -1
  94. package/dist/tools/bash.d.ts +0 -35
  95. package/dist/tools/bash.d.ts.map +0 -1
  96. package/dist/tools/bash.js +0 -233
  97. package/dist/tools/bash.js.map +0 -1
  98. package/dist/tools/edit-file.d.ts +0 -22
  99. package/dist/tools/edit-file.d.ts.map +0 -1
  100. package/dist/tools/edit-file.js +0 -79
  101. package/dist/tools/edit-file.js.map +0 -1
  102. package/dist/tools/find.d.ts +0 -21
  103. package/dist/tools/find.d.ts.map +0 -1
  104. package/dist/tools/find.js +0 -168
  105. package/dist/tools/find.js.map +0 -1
  106. package/dist/tools/grep.d.ts +0 -19
  107. package/dist/tools/grep.d.ts.map +0 -1
  108. package/dist/tools/grep.js +0 -170
  109. package/dist/tools/grep.js.map +0 -1
  110. package/dist/tools/index.d.ts +0 -10
  111. package/dist/tools/index.d.ts.map +0 -1
  112. package/dist/tools/index.js +0 -10
  113. package/dist/tools/index.js.map +0 -1
  114. package/dist/tools/read-file.d.ts +0 -18
  115. package/dist/tools/read-file.d.ts.map +0 -1
  116. package/dist/tools/read-file.js +0 -52
  117. package/dist/tools/read-file.js.map +0 -1
  118. package/dist/tools/registry.d.ts +0 -39
  119. package/dist/tools/registry.d.ts.map +0 -1
  120. package/dist/tools/registry.js +0 -67
  121. package/dist/tools/registry.js.map +0 -1
  122. package/dist/tools/write-file.d.ts +0 -18
  123. package/dist/tools/write-file.d.ts.map +0 -1
  124. package/dist/tools/write-file.js +0 -47
  125. package/dist/tools/write-file.js.map +0 -1
  126. package/dist/tui-ink-bundle.js +0 -39104
  127. package/dist/types.d.ts +0 -89
  128. package/dist/types.d.ts.map +0 -1
  129. package/dist/types.js +0 -5
  130. package/dist/types.js.map +0 -1
  131. package/dist/util/index.d.ts +0 -16
  132. package/dist/util/index.d.ts.map +0 -1
  133. package/dist/util/index.js +0 -16
  134. package/dist/util/index.js.map +0 -1
  135. package/dist/util/tui-history.d.ts +0 -37
  136. package/dist/util/tui-history.d.ts.map +0 -1
  137. package/dist/util/tui-history.js +0 -93
  138. package/dist/util/tui-history.js.map +0 -1
  139. package/dist/verify/format-report.d.ts +0 -57
  140. package/dist/verify/format-report.d.ts.map +0 -1
  141. package/dist/verify/format-report.js +0 -128
  142. package/dist/verify/format-report.js.map +0 -1
  143. package/dist/verify/index.d.ts +0 -8
  144. package/dist/verify/index.d.ts.map +0 -1
  145. package/dist/verify/index.js +0 -8
  146. package/dist/verify/index.js.map +0 -1
  147. package/dist/verify/verify-runner.d.ts +0 -186
  148. package/dist/verify/verify-runner.d.ts.map +0 -1
  149. package/dist/verify/verify-runner.js +0 -707
  150. package/dist/verify/verify-runner.js.map +0 -1
@@ -1,39 +0,0 @@
1
- /**
2
- * Tool Registry — 6 工具的注册中心
3
- *
4
- * Sprint 0.2 范围:
5
- * - register / get / list 基础 API
6
- * - 默认注册全部 6 工具
7
- * - name 重名启动时检测(pi #5316 教训)
8
- *
9
- * Sprint 1+ 扩展:
10
- * - MCP / Plugin / Skill 注册入口(v1.5/v2.0)
11
- * - 风险评级聚合(StormBreaker 用)
12
- */
13
- import type { Tool, ToolName } from '../types.js';
14
- import type { SandboxRunner } from '../sandbox/types.js';
15
- export declare class ToolRegistry {
16
- private tools;
17
- /** 注册工具,重名抛错(pi #5316 教训) */
18
- register(tool: Tool): void;
19
- get(name: ToolName | string): Tool | undefined;
20
- /** 严格获取 — 不存在抛错(v1.0 tool 路由用) */
21
- require(name: ToolName | string): Tool;
22
- list(): ReadonlyArray<Tool>;
23
- size(): number;
24
- }
25
- /** Sprint 1c-revive-3-D-12 review P1 修复: 显式注入 sandboxRunner. */
26
- export interface CreateDefaultRegistryOptions {
27
- /** 注入 BashTool 的 SandboxRunner. 不传 = LocalSandboxRunner (v1.0 行为). */
28
- readonly sandboxRunner?: SandboxRunner;
29
- }
30
- /**
31
- * 默认 6 工具的 registry 工厂
32
- *
33
- * Sprint 1c-revive-3-D-12 review P1 修复 (2026-06-05): 加 `sandboxRunner` 显式参数.
34
- * 之前 `new BashTool()` 走默认 LocalSandboxRunner, `DEEPWHALE_SANDBOX=docker` 解析
35
- * 出的 DockerSandboxRunner 不会进 tool loop. 修法: mode 调用点从 env 解析 runner 后
36
- * 显式传入, 工具注册表跟 env 状态对齐.
37
- */
38
- export declare function createDefaultRegistry(options?: CreateDefaultRegistryOptions): ToolRegistry;
39
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASzD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA6B;IAE1C,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAU1B,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAI9C,kCAAkC;IAClC,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAQtC,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC;IAI3B,IAAI,IAAI,MAAM;CAGf;AAED,gEAAgE;AAChE,MAAM,WAAW,4BAA4B;IAC3C,sEAAsE;IACtE,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,4BAAiC,GAAG,YAAY,CAU9F"}
@@ -1,67 +0,0 @@
1
- /**
2
- * Tool Registry — 6 工具的注册中心
3
- *
4
- * Sprint 0.2 范围:
5
- * - register / get / list 基础 API
6
- * - 默认注册全部 6 工具
7
- * - name 重名启动时检测(pi #5316 教训)
8
- *
9
- * Sprint 1+ 扩展:
10
- * - MCP / Plugin / Skill 注册入口(v1.5/v2.0)
11
- * - 风险评级聚合(StormBreaker 用)
12
- */
13
- import { ReadFileTool } from './read-file.js';
14
- import { WriteFileTool } from './write-file.js';
15
- import { EditFileTool } from './edit-file.js';
16
- import { BashTool } from './bash.js';
17
- import { FindTool } from './find.js';
18
- import { GrepTool } from './grep.js';
19
- import { LocalSandboxRunner } from '../sandbox/local-runner.js';
20
- export class ToolRegistry {
21
- tools = new Map();
22
- /** 注册工具,重名抛错(pi #5316 教训) */
23
- register(tool) {
24
- if (this.tools.has(tool.name)) {
25
- throw new Error(`Tool name collision: '${tool.name}' already registered. ` +
26
- `Extension tool 重名启动时检测(pi #5316 教训)`);
27
- }
28
- this.tools.set(tool.name, tool);
29
- }
30
- get(name) {
31
- return this.tools.get(name);
32
- }
33
- /** 严格获取 — 不存在抛错(v1.0 tool 路由用) */
34
- require(name) {
35
- const tool = this.get(name);
36
- if (!tool) {
37
- throw new Error(`Tool not found: '${name}'`);
38
- }
39
- return tool;
40
- }
41
- list() {
42
- return Array.from(this.tools.values());
43
- }
44
- size() {
45
- return this.tools.size;
46
- }
47
- }
48
- /**
49
- * 默认 6 工具的 registry 工厂
50
- *
51
- * Sprint 1c-revive-3-D-12 review P1 修复 (2026-06-05): 加 `sandboxRunner` 显式参数.
52
- * 之前 `new BashTool()` 走默认 LocalSandboxRunner, `DEEPWHALE_SANDBOX=docker` 解析
53
- * 出的 DockerSandboxRunner 不会进 tool loop. 修法: mode 调用点从 env 解析 runner 后
54
- * 显式传入, 工具注册表跟 env 状态对齐.
55
- */
56
- export function createDefaultRegistry(options = {}) {
57
- const reg = new ToolRegistry();
58
- const runner = options.sandboxRunner ?? new LocalSandboxRunner();
59
- reg.register(new ReadFileTool());
60
- reg.register(new WriteFileTool());
61
- reg.register(new EditFileTool());
62
- reg.register(new BashTool(runner));
63
- reg.register(new FindTool());
64
- reg.register(new GrepTool());
65
- return reg;
66
- }
67
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,6BAA6B;IAC7B,QAAQ,CAAC,IAAU;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,CAAC,IAAI,wBAAwB;gBACxD,qCAAqC,CACxC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,IAAuB;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAgB,CAAC,CAAC;IAC1C,CAAC;IAED,kCAAkC;IAClC,OAAO,CAAC,IAAuB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AAQD;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAwC,EAAE;IAC9E,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,kBAAkB,EAAE,CAAC;IACjE,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IACjC,GAAG,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;IAClC,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IACjC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,18 +0,0 @@
1
- /**
2
- * write_file 工具 — 写入本地文件
3
- *
4
- * Sprint 0.2 范围:直接覆盖(不追加)
5
- * Sprint 1 扩展:append 模式 + 原子写(write to tmp + rename)
6
- *
7
- * 风险:medium(覆盖原文件不可恢复)— v1.0 必须经用户确认(arch §2.2 决策)
8
- */
9
- import type { ToolName } from '@deepwhale/core';
10
- import type { Tool, ToolInputSchema, ToolResult } from '../types.js';
11
- export declare class WriteFileTool implements Tool {
12
- readonly name: ToolName;
13
- readonly description = "Write content to a local file. Overwrites existing file. Requires user confirmation (medium risk).";
14
- readonly risk: 'low' | 'medium' | 'high';
15
- readonly schema: ToolInputSchema;
16
- execute(input: Record<string, unknown>): Promise<ToolResult>;
17
- }
18
- //# sourceMappingURL=write-file.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"write-file.d.ts","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErE,qBAAa,aAAc,YAAW,IAAI;IACxC,QAAQ,CAAC,IAAI,EAAmB,QAAQ,CAAC;IACzC,QAAQ,CAAC,WAAW,wGACmF;IACvG,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAY;IAEpD,QAAQ,CAAC,MAAM,EAAE,eAAe,CAO9B;IAEI,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAuBnE"}
@@ -1,47 +0,0 @@
1
- /**
2
- * write_file 工具 — 写入本地文件
3
- *
4
- * Sprint 0.2 范围:直接覆盖(不追加)
5
- * Sprint 1 扩展:append 模式 + 原子写(write to tmp + rename)
6
- *
7
- * 风险:medium(覆盖原文件不可恢复)— v1.0 必须经用户确认(arch §2.2 决策)
8
- */
9
- import { promises as fs } from 'node:fs';
10
- import { dirname } from 'node:path';
11
- export class WriteFileTool {
12
- name = 'write_file';
13
- description = 'Write content to a local file. Overwrites existing file. Requires user confirmation (medium risk).';
14
- risk = 'medium';
15
- schema = {
16
- type: 'object',
17
- properties: {
18
- path: { type: 'string', description: 'Absolute path to the file' },
19
- content: { type: 'string', description: 'Full file content to write' },
20
- },
21
- required: ['path', 'content'],
22
- };
23
- async execute(input) {
24
- const path = input['path'];
25
- const content = input['content'];
26
- if (typeof path !== 'string' || path.length === 0) {
27
- return { success: false, content: '', error: 'invalid-input: path is required' };
28
- }
29
- if (typeof content !== 'string') {
30
- return { success: false, content: '', error: 'invalid-input: content must be string' };
31
- }
32
- try {
33
- await fs.mkdir(dirname(path), { recursive: true });
34
- await fs.writeFile(path, content, 'utf8');
35
- return {
36
- success: true,
37
- content: `Written ${content.length} bytes to ${path}`,
38
- meta: { path, bytes: content.length },
39
- };
40
- }
41
- catch (err) {
42
- const e = err;
43
- return { success: false, content: '', error: `io-error: ${e.message}`, meta: { path } };
44
- }
45
- }
46
- }
47
- //# sourceMappingURL=write-file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,OAAO,aAAa;IACf,IAAI,GAAG,YAAwB,CAAC;IAChC,WAAW,GAClB,oGAAoG,CAAC;IAC9F,IAAI,GAA8B,QAAQ,CAAC;IAE3C,MAAM,GAAoB;QACjC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;YAClE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;SACvE;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;KAC9B,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,KAA8B;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;QACnF,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;QACzF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,WAAW,OAAO,CAAC,MAAM,aAAa,IAAI,EAAE;gBACrD,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE;aACtC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,GAAkE,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1F,CAAC;IACH,CAAC;CACF"}