cckit 0.3.0 → 0.3.3

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 (67) hide show
  1. package/README.md +254 -13
  2. package/dist/commands.d.ts +13 -3
  3. package/dist/commands.d.ts.map +1 -1
  4. package/dist/commands.js +1 -564
  5. package/dist/commands.js.map +1 -1
  6. package/dist/config.d.ts +18 -2
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +1 -293
  9. package/dist/config.js.map +1 -1
  10. package/dist/i18n.js +1 -246
  11. package/dist/i18n.js.map +1 -1
  12. package/dist/index.js +1 -152
  13. package/dist/index.js.map +1 -1
  14. package/dist/providers.js +1 -196
  15. package/dist/providers.js.map +1 -1
  16. package/dist/proxy/chat-to-response.d.ts +9 -0
  17. package/dist/proxy/chat-to-response.d.ts.map +1 -0
  18. package/dist/proxy/chat-to-response.js +1 -0
  19. package/dist/proxy/chat-to-response.js.map +1 -0
  20. package/dist/proxy/constants.d.ts +2 -0
  21. package/dist/proxy/constants.d.ts.map +1 -0
  22. package/dist/proxy/constants.js +1 -0
  23. package/dist/proxy/constants.js.map +1 -0
  24. package/dist/proxy/proxy-manager.d.ts +61 -0
  25. package/dist/proxy/proxy-manager.d.ts.map +1 -0
  26. package/dist/proxy/proxy-manager.js +1 -0
  27. package/dist/proxy/proxy-manager.js.map +1 -0
  28. package/dist/tools/base-adapter.d.ts +31 -0
  29. package/dist/tools/base-adapter.d.ts.map +1 -0
  30. package/dist/tools/base-adapter.js +1 -0
  31. package/dist/tools/base-adapter.js.map +1 -0
  32. package/dist/tools/claude-code-adapter.d.ts +15 -0
  33. package/dist/tools/claude-code-adapter.d.ts.map +1 -0
  34. package/dist/tools/claude-code-adapter.js +1 -0
  35. package/dist/tools/claude-code-adapter.js.map +1 -0
  36. package/dist/tools/codex-adapter.d.ts +43 -0
  37. package/dist/tools/codex-adapter.d.ts.map +1 -0
  38. package/dist/tools/codex-adapter.js +1 -0
  39. package/dist/tools/codex-adapter.js.map +1 -0
  40. package/dist/tools/index.d.ts +20 -0
  41. package/dist/tools/index.d.ts.map +1 -0
  42. package/dist/tools/index.js +1 -0
  43. package/dist/tools/index.js.map +1 -0
  44. package/dist/tools/opencode-adapter.d.ts +41 -0
  45. package/dist/tools/opencode-adapter.d.ts.map +1 -0
  46. package/dist/tools/opencode-adapter.js +1 -0
  47. package/dist/tools/opencode-adapter.js.map +1 -0
  48. package/dist/tools/types.d.ts +16 -0
  49. package/dist/tools/types.d.ts.map +1 -0
  50. package/dist/tools/types.js +1 -0
  51. package/dist/tools/types.js.map +1 -0
  52. package/dist/types.d.ts +42 -0
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js +1 -2
  55. package/dist/types.js.map +1 -1
  56. package/dist/utils/constants.d.ts +1 -1
  57. package/dist/utils/constants.js +1 -69
  58. package/dist/utils/constants.js.map +1 -1
  59. package/dist/utils/errors.js +1 -92
  60. package/dist/utils/errors.js.map +1 -1
  61. package/dist/utils/helpers.js +1 -117
  62. package/dist/utils/helpers.js.map +1 -1
  63. package/dist/utils/index.js +1 -8
  64. package/dist/utils/index.js.map +1 -1
  65. package/dist/utils/logger.js +1 -68
  66. package/dist/utils/logger.js.map +1 -1
  67. package/package.json +2 -3
package/README.md CHANGED
@@ -7,6 +7,7 @@ A CLI tool for managing and switching between different Claude model providers a
7
7
  ## Features
8
8
 
9
9
  - **Multiple Provider Support**: Configure and switch between 智谱 Coding Plan, MiniMax Coding Plan, Kimi Coding Plan, 快手 StreamLake Coding Plan, 火山引擎 Coding Plan, 阿里云 Coding Plan, 腾讯云 Coding Plan, 讯飞 Coding Plan, ZenMux.ai, official Claude, and custom providers
10
+ - **Multi-Tool Support**: Manage providers for Claude Code, OpenCode, and Codex CLI
10
11
  - **Easy Configuration**: Simple command-line interface for managing API keys and settings
11
12
  - **Claude Integration**: Automatically updates Claude Code configuration files
12
13
  - **Export/Import**: Backup and restore your provider configurations
@@ -33,6 +34,29 @@ yarn global add cckit
33
34
  cckit interactive
34
35
  ```
35
36
 
37
+ ### Interactive Switch Mode
38
+
39
+ `cckit switch` now supports interactive mode when no provider argument is given:
40
+
41
+ ```bash
42
+ # Interactive mode - shows selection list
43
+ cckit switch
44
+
45
+ # Direct mode - with provider argument
46
+ cckit switch zhipu
47
+ ```
48
+
49
+ Interactive switch example:
50
+ ```
51
+ ? 选择要切换的 Provider
52
+ 智谱 Coding Plan - glm-5
53
+ ✓ MiniMax Coding Plan - abab6.5s-chat (当前)
54
+ Kimi Coding Plan - kimi-for-coding
55
+ Claude - claude-3-opus-20250219
56
+ ZenMux.ai - claude-3-5-sonnet-20241022
57
+ ```
58
+
59
+
36
60
  ## Interactive Mode Details
37
61
 
38
62
  The interactive wizard (`cckit interactive`) provides a user-friendly, step-by-step configuration experience with arrow key selection:
@@ -56,20 +80,28 @@ Use ↑/↓ arrow keys to select from:
56
80
  ▸ Step 3: 设置模型
57
81
  ```
58
82
  - Enter the model name (default value provided based on provider)
83
+ - Multiple models can be entered, separated by commas
59
84
 
60
85
  ```
61
- ▸ Step 4: 保存配置
86
+ ▸ Step 4: 配置模型类型 (可选)
87
+ ```
88
+ - Optional: Configure different models for Sonnet/Haiku/Opus model tiers
89
+ - Each tier can be skipped to use the default model
90
+ - This sets `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL`, `ANTHROPIC_DEFAULT_OPUS_MODEL`
91
+
92
+ ```
93
+ ▸ Step 5: 保存配置
62
94
  ```
63
95
  - If existing configurations found, choose to update or create new
64
96
  - Configuration saved to `~/.cckit/config.json`
65
97
 
66
98
  ```
67
- ▸ Step 5: 测试连接
99
+ ▸ Step 6: 测试连接
68
100
  ```
69
101
  - Optional: Test the connection to verify API key and endpoint
70
102
 
71
103
  ```
72
- ▸ Step 6: 切换 Provider
104
+ ▸ Step 7: 切换 Provider
73
105
  ```
74
106
  - Optional: Switch to the newly configured provider immediately
75
107
 
@@ -113,22 +145,50 @@ $ cckit interactive
113
145
 
114
146
  ▸ Step 3: 设置模型
115
147
 
116
- ? 请输入模型名称: (GLM-4.7)
148
+ ? 请输入模型名称 (多个模型用逗号分隔): glm-5, kimi-k2.5, MiniMax-M2.5
149
+
150
+ ▸ Step 4: 配置模型类型 (可选)
151
+ 提示: 可为 Sonnet/Haiku/Opus 模型类型配置不同的模型,不配置则使用默认模型
152
+
153
+ ? 是否为不同模型类型 (Sonnet/Haiku/Opus) 配置不同的默认模型? Yes
154
+
155
+ ? 选择 Sonnet 模型
156
+ ❯ 跳过 (使用默认模型)
157
+ glm-5
158
+ kimi-k2.5
159
+ MiniMax-M2.5
160
+
161
+ ? 选择 Haiku 模型
162
+ ❯ 跳过 (使用默认模型)
163
+ glm-5
164
+ kimi-k2.5
165
+ MiniMax-M2.5
166
+
167
+ ? 选择 Opus 模型
168
+ ❯ 跳过 (使用默认模型)
169
+ glm-5
170
+ kimi-k2.5
171
+ MiniMax-M2.5
172
+
173
+ 模型类型配置:
174
+ Sonnet: glm-5
175
+ Haiku: kimi-k2.5
176
+ Opus: MiniMax-M2.5
117
177
 
118
- ▸ Step 4: 保存配置
178
+ ▸ Step 5: 保存配置
119
179
 
120
180
  ✓ 配置已保存 (id: zhipu_xxx)
121
181
  Provider: 智谱 Coding Plan
122
- Model: GLM-4.7
182
+ Model: glm-5, kimi-k2.5, MiniMax-M2.5
123
183
 
124
- ▸ Step 5: 测试连接
184
+ ▸ Step 6: 测试连接
125
185
 
126
186
  ? 是否测试连接? (Y/n)
127
187
 
128
188
  ✓ 连接成功!
129
189
  响应时间: 234ms
130
190
 
131
- ▸ Step 6: 切换 Provider
191
+ ▸ Step 7: 切换 Provider
132
192
 
133
193
  ? 是否立即切换到该 Provider? (Y/n)
134
194
 
@@ -145,9 +205,10 @@ $ cckit interactive
145
205
  The interactive wizard will guide you through:
146
206
  1. Selecting an AI provider (智谱 Coding Plan, MiniMax Coding Plan, Kimi Coding Plan, Claude, ZenMux, 快手 StreamLake Coding Plan, 火山引擎 Coding Plan, 阿里云 Coding Plan, 腾讯云 Coding Plan, 讯飞 Coding Plan, or Custom)
147
207
  2. Entering your API key
148
- 3. Setting up the model name
149
- 4. Testing the connection
150
- 5. Switching to the configured provider
208
+ 3. Setting up the model name(s)
209
+ 4. (Optional) Configuring different models for Sonnet/Haiku/Opus tiers
210
+ 5. Testing the connection
211
+ 6. Switching to the configured provider
151
212
 
152
213
  ## Usage
153
214
 
@@ -162,6 +223,8 @@ cckit list
162
223
 
163
224
  # Show current active provider
164
225
  cckit current
226
+ cckit current --tool opencode # for specific tool
227
+ cckit current --tool codex
165
228
 
166
229
  # Configure a provider
167
230
  cckit configure <provider> --api-key <key> [--base-url <url>] [--model <model>] ...
@@ -169,8 +232,13 @@ cckit configure <provider> --api-key <key> [--base-url <url>] [--model <model>]
169
232
  # Configure a custom provider (local LLM, OpenAI-compatible API, etc.)
170
233
  cckit configure my-ollama --api-key "ollama-key" --base-url "http://localhost:11434/v1" --model "llama3"
171
234
 
172
- # Switch to a provider
235
+ # Switch to a provider (direct mode with argument)
173
236
  cckit switch <provider>
237
+ cckit switch <provider> --tool opencode # for OpenCode
238
+ cckit switch <provider> --tool codex # for Codex
239
+
240
+ # Switch to a provider (interactive mode without argument)
241
+ cckit switch
174
242
 
175
243
  # Show provider configuration
176
244
  cckit show <provider>
@@ -184,6 +252,11 @@ cckit models <provider>
184
252
  # Set active model for a provider
185
253
  cckit set-model <provider> <model>
186
254
 
255
+ # Set model for a specific model tier (Sonnet/Haiku/Opus)
256
+ cckit set-model <provider> <model> --type sonnet
257
+ cckit set-model <provider> <model> --type haiku
258
+ cckit set-model <provider> <model> --type opus
259
+
187
260
  # Remove a model from a provider
188
261
  cckit remove-model <provider> <model>
189
262
  ```
@@ -204,6 +277,10 @@ cckit models zhipu
204
277
  # Set active model
205
278
  cckit set-model zhipu "GLM-4-Plus"
206
279
 
280
+ # Set model for specific tier
281
+ cckit set-model zhipu "GLM-4-Plus" --type sonnet
282
+ cckit set-model zhipu "GLM-4.7" --type haiku
283
+
207
284
  # Remove a model
208
285
  cckit remove-model zhipu "GLM-4.7"
209
286
 
@@ -222,6 +299,9 @@ cckit models minimax
222
299
  # Set active model
223
300
  cckit set-model minimax "MiniMax-M4"
224
301
 
302
+ # Set model for specific tier
303
+ cckit set-model minimax "MiniMax-M4" --type sonnet
304
+
225
305
  # Remove a model
226
306
  cckit remove-model minimax "MiniMax-M2"
227
307
 
@@ -315,6 +395,11 @@ cckit models aliyun
315
395
  # Set active model
316
396
  cckit set-model aliyun "glm-5"
317
397
 
398
+ # Set model for specific tier
399
+ cckit set-model aliyun "glm-5" --type sonnet
400
+ cckit set-model aliyun "kimi-k2.5" --type haiku
401
+ cckit set-model aliyun "MiniMax-M2.5" --type opus
402
+
318
403
  # Switch to Aliyun
319
404
  cckit switch aliyun
320
405
  ```
@@ -381,7 +466,104 @@ Custom providers support:
381
466
 
382
467
  The custom provider uses `provider_name` as the `CC_PROVIDER` environment variable value, allowing you to distinguish between multiple custom providers.
383
468
 
384
- ### Advanced Commands
469
+ ## Multi-Tool Support
470
+
471
+ cckit 支持为多种 AI 编码工具管理 Provider 配置:
472
+
473
+ #### Supported Tools
474
+
475
+ | Tool | Config Path | Description |
476
+ |------|-------------|-------------|
477
+ | `claude-code` | `~/.claude/settings.json` | Claude Code CLI (默认) |
478
+ | `opencode` | `~/.opencode.json` | OpenCode CLI |
479
+ | `codex` | `~/.codex/config.toml` | OpenAI Codex CLI |
480
+
481
+ #### Switching Providers for Different Tools
482
+
483
+ ```bash
484
+ # 切换 Claude Code 的 provider (默认)
485
+ cckit switch zhipu
486
+ cckit switch zhipu --tool claude-code
487
+
488
+ # 切换 OpenCode 的 provider
489
+ cckit switch zhipu --tool opencode
490
+
491
+ # 切换 Codex 的 provider
492
+ cckit switch zhipu --tool codex
493
+
494
+ # 交互式选择工具
495
+ cckit switch
496
+ ```
497
+
498
+ #### Viewing Current Provider
499
+
500
+ ```bash
501
+ # 查看 Claude Code 当前 provider
502
+ cckit current
503
+ cckit current --tool claude-code
504
+
505
+ # 查看 OpenCode 当前 provider
506
+ cckit current --tool opencode
507
+
508
+ # 查看 Codex 当前 provider
509
+ cckit current --tool codex
510
+ ```
511
+
512
+ #### Tool-Specific Configuration
513
+
514
+ 每个工具维护独立的 provider 状态,可以为不同工具配置不同的 provider:
515
+
516
+ ```bash
517
+ # Claude Code 使用智谱
518
+ cckit switch zhipu --tool claude-code
519
+
520
+ # OpenCode 使用阿里云
521
+ cckit switch aliyun --tool opencode
522
+
523
+ # Codex 使用 MiniMax
524
+ cckit switch minimax --tool codex
525
+ ```
526
+
527
+ #### Codex Notes
528
+
529
+ Codex CLI 使用 OpenAI Responses API 格式,切换时注意事项:
530
+
531
+ 1. **模型支持**: 请确保所选模型支持 OpenAI Responses API
532
+
533
+ 2. **配置文件格式** (`~/.codex/config.toml`):
534
+ ```toml
535
+ model = "glm-5"
536
+ model_provider = "cckit-zhipu"
537
+
538
+ [model_providers.cckit-zhipu]
539
+ name = "智谱 Coding Plan"
540
+ base_url = "https://open.bigmodel.cn/api/paas/v4"
541
+ wire_api = "responses"
542
+ requires_openai_auth = false
543
+ experimental_bearer_token = "your-api-key"
544
+ ```
545
+
546
+ #### OpenCode Notes
547
+
548
+ OpenCode 配置存储在 `~/.opencode.json`:
549
+
550
+ ```json
551
+ {
552
+ "providers": {
553
+ "cckit-zhipu": {
554
+ "apiKey": "your-api-key",
555
+ "disabled": false,
556
+ "baseUrl": "https://open.bigmodel.cn/api/anthropic"
557
+ }
558
+ },
559
+ "agents": {
560
+ "coder": { "model": "glm-5" },
561
+ "task": { "model": "glm-5" }
562
+ }
563
+ }
564
+ ```
565
+
566
+ ## Advanced Commands
385
567
 
386
568
  ```bash
387
569
  # Export configuration to file
@@ -411,6 +593,65 @@ Each provider can now be configured with multiple models. You can:
411
593
 
412
594
  The active model is used when Claude Code switches to that provider. If no explicit active model is set, the first configured model is used.
413
595
 
596
+ ### Model Tier Configuration
597
+
598
+ Claude Code supports different model tiers (Sonnet, Haiku, Opus) for different use cases. You can configure different models for each tier:
599
+
600
+ #### Command Line
601
+
602
+ ```bash
603
+ # Set default model (ANTHROPIC_MODEL)
604
+ cckit set-model aliyun "glm-5"
605
+
606
+ # Set Sonnet model (ANTHROPIC_DEFAULT_SONNET_MODEL)
607
+ cckit set-model aliyun "glm-5" --type sonnet
608
+
609
+ # Set Haiku model (ANTHROPIC_DEFAULT_HAIKU_MODEL)
610
+ cckit set-model aliyun "kimi-k2.5" --type haiku
611
+
612
+ # Set Opus model (ANTHROPIC_DEFAULT_OPUS_MODEL)
613
+ cckit set-model aliyun "MiniMax-M2.5" --type opus
614
+ ```
615
+
616
+ #### Interactive Mode
617
+
618
+ In interactive mode (`cckit interactive`), after entering model names, you'll be asked:
619
+ ```
620
+ ? 是否为不同模型类型 (Sonnet/Haiku/Opus) 配置不同的默认模型?
621
+ ```
622
+
623
+ Select "Yes" to configure each model tier. You can choose "跳过 (使用默认模型)" for any tier you don't want to customize.
624
+
625
+ #### View Configuration
626
+
627
+ ```bash
628
+ # Show provider configuration including model tier settings
629
+ cckit show aliyun
630
+ ```
631
+
632
+ Output:
633
+ ```
634
+ Configuration: 阿里云 Coding Plan
635
+
636
+ ID: bf76bc20-87f1-4bd4-b091-20b9d1eabdb9
637
+ Name: Aliyun Coding Plan
638
+ Type: aliyun
639
+ ...
640
+ Models: qwen3.5-plus, kimi-k2.5, glm-5, MiniMax-M2.5
641
+ Active: glm-5
642
+ Sonnet: glm-5
643
+ Haiku: kimi-k2.5
644
+ Opus: MiniMax-M2.5
645
+ ```
646
+
647
+ #### Validation
648
+
649
+ The model must be in the provider's model list. If you try to set a model that doesn't exist:
650
+ ```bash
651
+ $ cckit set-model aliyun "non-existent-model" --type sonnet
652
+ Error: Model 'non-existent-model' not found in provider. Available models: qwen3.5-plus, kimi-k2.5, glm-5, MiniMax-M2.5
653
+ ```
654
+
414
655
  ### Provider Details
415
656
 
416
657
  | Provider | Default Model | Auth Method | Capabilities | Default Base URL |
@@ -1,4 +1,5 @@
1
1
  import { ConfigManager } from './config.js';
2
+ import { ToolType } from './types.js';
2
3
  export declare class Commands {
3
4
  private configManager;
4
5
  constructor(configManager: ConfigManager);
@@ -7,18 +8,27 @@ export declare class Commands {
7
8
  */
8
9
  interactive(): Promise<void>;
9
10
  list(): void;
10
- switch(providerId: string): void;
11
- current(): void;
11
+ switch(providerId?: string, tool?: ToolType): Promise<void>;
12
+ /**
13
+ * Interactive tool selection
14
+ */
15
+ private selectToolInteractive;
16
+ /**
17
+ * List supported CLI tools
18
+ */
19
+ tools(): void;
20
+ current(tool?: ToolType): void;
12
21
  configure(providerId: string, apiKey?: string, baseUrl?: string, models?: string[]): void;
13
22
  show(providerId: string): void;
14
23
  test(providerId: string): Promise<void>;
15
24
  models(providerId: string): void;
16
- setModel(providerId: string, modelName: string): Promise<void>;
25
+ setModel(providerId: string, modelName: string, modelType?: 'default' | 'sonnet' | 'haiku' | 'opus'): Promise<void>;
17
26
  removeModel(providerId: string, modelName: string): void;
18
27
  export(output?: string): void;
19
28
  import(file: string): void;
20
29
  reset(): void;
21
30
  private getProviderDisplayName;
22
31
  private askForSwitch;
32
+ private getModelTypeLabel;
23
33
  }
24
34
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAsD,MAAM,aAAa,CAAC;AAahG,qBAAa,QAAQ;IACP,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEhD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAmOlC,IAAI,IAAI,IAAI;IAsCZ,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAmBhC,OAAO,IAAI,IAAI;IAkCf,SAAS,CACP,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,IAAI;IAuEP,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA6CxB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B7C,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA6B1B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuFpE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IA2CxD,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAkB7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa1B,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,sBAAsB;YAoChB,YAAY;CAM3B"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAsD,MAAM,aAAa,CAAC;AAGhG,OAAO,EAAiB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAWrD,qBAAa,QAAQ;IACP,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEhD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAiSlC,IAAI,IAAI,IAAI;IAsCN,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA2EjE;;OAEG;YACW,qBAAqB;IAwBnC;;OAEG;IACH,KAAK,IAAI,IAAI;IA2Bb,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI;IAyC9B,SAAS,CACP,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,IAAI;IAuEP,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAuDxB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B7C,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA6B1B,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAClD,OAAO,CAAC,IAAI,CAAC;IAsGhB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IA2CxD,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAkB7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa1B,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,sBAAsB;YAoChB,YAAY;IAO1B,OAAO,CAAC,iBAAiB;CAY1B"}