@aituber-onair/chat 0.27.0 → 0.28.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.
package/README.ja.md CHANGED
@@ -189,6 +189,7 @@ const compatibleService = ChatServiceFactory.createChatService(
189
189
 
190
190
  `reasoning_effort` の選択肢はモデルによって異なります。
191
191
  - `gpt-5.4-pro`: `'medium' | 'high' | 'xhigh'`(Responses API 専用)
192
+ - `gpt-5.5`: `'none' | 'low' | 'medium' | 'high' | 'xhigh'`(このパッケージでは高速なチャット応答を優先してデフォルトは `'none'`)
192
193
  - `gpt-5.4`: `'none' | 'low' | 'medium' | 'high' | 'xhigh'`
193
194
  - `gpt-5.4-mini` / `gpt-5.4-nano`: `'none' | 'low' | 'medium' | 'high' | 'xhigh'`
194
195
  - `gpt-5.1`: `'none' | 'low' | 'medium' | 'high'`
@@ -196,8 +197,9 @@ const compatibleService = ChatServiceFactory.createChatService(
196
197
 
197
198
  **GPT-5ファミリーの概要**
198
199
 
200
+ - `gpt-5.5` – 複雑なプロフェッショナル用途向けの OpenAI 最新フロンティアモデル。テキスト/画像入力に対応し、Chat Completions API と Responses API の両方で利用できます。
199
201
  - `gpt-5.4-pro` – GPT-5.4 の上位モデル。Responses API でのみ利用可能。
200
- - `gpt-5.4` – コーディング、指示追従、長い文脈を伴うエージェント用途を強化した最新世代モデル。
202
+ - `gpt-5.4` – コーディング、指示追従、長い文脈を伴うエージェント用途を強化した一世代前の GPT-5 系モデル。
201
203
  - `gpt-5.4-mini` – コーディング、ツール利用、マルチモーダル用途向けの高速な GPT-5.4 系小型モデル。
202
204
  - `gpt-5.4-nano` – 単純な高頻度タスクや軽量サブエージェント向けの最廉価な GPT-5.4 系モデル。
203
205
  - `gpt-5.1` – 複雑な推論、広範な世界知識、コードやマルチステップのエージェントタスク向け。
@@ -205,6 +207,10 @@ const compatibleService = ChatServiceFactory.createChatService(
205
207
  - `gpt-5-mini` – コスト最適化された推論/チャットモデル。速度と能力のバランスが良い。
206
208
  - `gpt-5-nano` – 指示追従や分類などの高スループット処理に向いた軽量モデル。
207
209
 
210
+ `gpt-5.5-pro` は OpenAI のドキュメント上でストリーミング非対応のため、
211
+ ストリーミング前提の通常チャットフローを持つこのパッケージの supported
212
+ models には含めていません。
213
+
208
214
  ### OpenAI互換対応範囲
209
215
 
210
216
  必須:
@@ -474,7 +480,7 @@ const tools: ToolDefinition[] = [{
474
480
 
475
481
  ただし OpenAI の GPT-5 family
476
482
  (`gpt-5`, `gpt-5-mini`, `gpt-5-nano`, `gpt-5.1`, `gpt-5.4`,
477
- `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.4-pro`)では、これらは基準値として
483
+ `gpt-5.5`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.4-pro`)では、これらは基準値として
478
484
  扱われます。途中終了を減らすため、実際に送信される
479
485
  `max_completion_tokens` / `max_output_tokens` は、model と
480
486
  `reasoning_effort` に応じて自動的に引き上げられることがあります。
@@ -675,7 +681,7 @@ console.log(modelLevel); // 'unknown'
675
681
 
676
682
  現在、以下のAIプロバイダーが組み込まれています:
677
683
 
678
- - **OpenAI**: GPT-5.4 Pro、GPT-5.4、GPT-5.4 Mini、GPT-5.4 Nano、GPT-5.1、GPT-5(Nano/Mini/Standard)、GPT-4.1(miniとnanoを含む), GPT-4, GPT-4o-mini, O3-mini, o1, o1-miniのモデルをサポート
684
+ - **OpenAI**: GPT-5.5、GPT-5.4 Pro、GPT-5.4、GPT-5.4 Mini、GPT-5.4 Nano、GPT-5.1、GPT-5(Nano/Mini/Standard)、GPT-4.1(miniとnanoを含む), GPT-4, GPT-4o-mini, O3-mini, o1, o1-miniのモデルをサポート
679
685
  - **OpenAI-Compatible**: OpenAI互換 endpoint 経由で任意のローカル/セルフホスト model ID を利用できます。vision 対応可否は endpoint ごとに差があるため、原則 `unknown` 扱いです
680
686
  - **Gemini**: Gemini 3.1 Pro Preview, Gemini 3.1 Flash-Lite Preview, Gemini 3 Pro Preview, Gemini 3 Flash Preview, Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash Lite Preview, Gemini 2.0 Flash, Gemini 2.0 Flash-Lite、Gemma 4 31B IT、Gemma 4 26B A4B ITのモデルをサポート
681
687
  - **Claude**: Claude Opus 4.7, Claude Opus 4.6, Claude Opus 4.5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Haiku 4.5 に加え、まだ利用可能だが非推奨の Claude 4 Opus, Claude 4 Sonnet, Claude 3 Haiku をサポート
package/README.md CHANGED
@@ -189,6 +189,7 @@ Notes:
189
189
 
190
190
  `reasoning_effort` options differ per model:
191
191
  - `gpt-5.4-pro`: `'medium' | 'high' | 'xhigh'` (Responses API only)
192
+ - `gpt-5.5`: `'none' | 'low' | 'medium' | 'high' | 'xhigh'` (defaults to `'none'` in this package for fast chat responses)
192
193
  - `gpt-5.4`: `'none' | 'low' | 'medium' | 'high' | 'xhigh'`
193
194
  - `gpt-5.4-mini` / `gpt-5.4-nano`: `'none' | 'low' | 'medium' | 'high' | 'xhigh'`
194
195
  - `gpt-5.1`: `'none' | 'low' | 'medium' | 'high'`
@@ -196,8 +197,9 @@ Notes:
196
197
 
197
198
  **Meet the GPT-5 family**
198
199
 
200
+ - `gpt-5.5` – OpenAI's newest frontier model for complex professional work, with text and image input support and both Chat Completions and Responses API support.
199
201
  - `gpt-5.4-pro` – Highest-tier GPT-5.4 model. Use with Responses API only.
200
- - `gpt-5.4` – Latest GPT-5 generation model optimized for stronger coding, instruction following, and long-context agentic work.
202
+ - `gpt-5.4` – Previous GPT-5 generation model optimized for stronger coding, instruction following, and long-context agentic work.
201
203
  - `gpt-5.4-mini` – Faster GPT-5.4-class small model for coding, tool use, and multimodal workloads.
202
204
  - `gpt-5.4-nano` – Lowest-cost GPT-5.4-class model for simpler high-volume tasks and lightweight subagents.
203
205
  - `gpt-5.1` – Complex reasoning, broad world knowledge, and code-heavy or multi-step agentic workflows.
@@ -205,6 +207,10 @@ Notes:
205
207
  - `gpt-5-mini` – Cost-optimized reasoning/chat model that balances speed, cost, and capability.
206
208
  - `gpt-5-nano` – High-throughput option best suited for simple instruction-following or classification runs.
207
209
 
210
+ `gpt-5.5-pro` is not included in the supported model list because OpenAI
211
+ documents it as non-streaming, while this package's standard chat flow expects
212
+ streaming support.
213
+
208
214
  ### OpenAI-Compatible Support Scope
209
215
 
210
216
  Required:
@@ -470,7 +476,8 @@ Base preset token targets are:
470
476
  - `deep`: 5000
471
477
 
472
478
  For the OpenAI GPT-5 family (`gpt-5`, `gpt-5-mini`, `gpt-5-nano`,
473
- `gpt-5.1`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.4-pro`),
479
+ `gpt-5.1`, `gpt-5.4`, `gpt-5.5`, `gpt-5.4-mini`, `gpt-5.4-nano`,
480
+ `gpt-5.4-pro`),
474
481
  these values are treated as base presets. The library may raise the actual
475
482
  `max_completion_tokens` or `max_output_tokens` to reduce premature truncation,
476
483
  depending on the selected model and `reasoning_effort`.
@@ -671,7 +678,7 @@ Semantics:
671
678
 
672
679
  Currently, the following AI providers are built-in:
673
680
 
674
- - **OpenAI**: Supports models like GPT-5.4 Pro, GPT-5.4, GPT-5.4 Mini, GPT-5.4 Nano, GPT-5.1, GPT-5 (Nano/Mini/Standard), GPT-4.1 (including mini and nano), GPT-4, GPT-4o-mini, O3-mini, o1, o1-mini
681
+ - **OpenAI**: Supports models like GPT-5.5, GPT-5.4 Pro, GPT-5.4, GPT-5.4 Mini, GPT-5.4 Nano, GPT-5.1, GPT-5 (Nano/Mini/Standard), GPT-4.1 (including mini and nano), GPT-4, GPT-4o-mini, O3-mini, o1, o1-mini
675
682
  - **OpenAI-Compatible**: Supports arbitrary local/self-hosted model IDs via OpenAI-compatible endpoints. Vision capability is treated as `unknown` unless your app knows the endpoint-specific model catalog.
676
683
  - **Gemini**: Supports models like Gemini 3.1 Pro Preview, Gemini 3.1 Flash-Lite Preview, Gemini 3 Pro Preview, Gemini 3 Flash Preview, Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash Lite Preview, Gemini 2.0 Flash, Gemini 2.0 Flash-Lite, Gemma 4 31B IT, Gemma 4 26B A4B IT
677
684
  - **Claude**: Supports current Claude API model IDs including Claude Opus 4.7, Claude Opus 4.6, Claude Opus 4.5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Haiku 4.5, plus deprecated-but-still-available Claude 4 Opus, Claude 4 Sonnet, and Claude 3 Haiku
@@ -5,6 +5,7 @@ export declare const MODEL_GPT_5_MINI = "gpt-5-mini";
5
5
  export declare const MODEL_GPT_5 = "gpt-5";
6
6
  export declare const MODEL_GPT_5_1 = "gpt-5.1";
7
7
  export declare const MODEL_GPT_5_4 = "gpt-5.4";
8
+ export declare const MODEL_GPT_5_5 = "gpt-5.5";
8
9
  export declare const MODEL_GPT_5_4_MINI = "gpt-5.4-mini";
9
10
  export declare const MODEL_GPT_5_4_NANO = "gpt-5.4-nano";
10
11
  export declare const MODEL_GPT_5_4_PRO = "gpt-5.4-pro";
@@ -35,12 +36,12 @@ export declare function isResponsesOnlyGPT5Model(model: string): boolean;
35
36
  export declare function allowsReasoningXHigh(model: string): boolean;
36
37
  /**
37
38
  * Check if the provided model allows the reasoning_effort 'none' shortcut
38
- * Supported by GPT-5.1 and GPT-5.4 family models, except Pro
39
+ * Supported by GPT-5.1, GPT-5.4, and GPT-5.5 family models, except Pro
39
40
  */
40
41
  export declare function allowsReasoningNone(model: string): boolean;
41
42
  /**
42
43
  * Check if the provided model allows the 'minimal' reasoning effort level
43
- * GPT-5.1 and GPT-5.4 variants remove 'minimal'
44
+ * GPT-5.1, GPT-5.4, and GPT-5.5 variants remove 'minimal'
44
45
  */
45
46
  export declare function allowsReasoningMinimal(model: string): boolean;
46
47
  /**
@@ -50,7 +51,7 @@ export declare function allowsReasoningMinimal(model: string): boolean;
50
51
  export declare function allowsReasoningLow(model: string): boolean;
51
52
  /**
52
53
  * Get default reasoning effort by GPT-5 model family
53
- * - GPT-5.1 / GPT-5.4: none
54
+ * - GPT-5.1 / GPT-5.4 / GPT-5.5: none
54
55
  * - GPT-5.4 Pro and earlier GPT-5 variants: medium
55
56
  */
56
57
  export declare function getDefaultReasoningEffortForGPT5Model(model: string): 'none' | 'medium';
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,+CACH,CAAC;AAC/C,eAAO,MAAM,6BAA6B,wCACH,CAAC;AAGxC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAG7B,eAAO,MAAM,uBAAuB,UAgBnC,CAAC;AAGF,eAAO,MAAM,YAAY,UASxB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,SAAS,GACT,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,CAAC;AAEZ;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,QAAQ,CAKnB"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,+CACH,CAAC;AAC/C,eAAO,MAAM,6BAA6B,wCACH,CAAC;AAGxC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAI/C,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAG7B,eAAO,MAAM,uBAAuB,UAiBnC,CAAC;AAGF,eAAO,MAAM,YAAY,UAUxB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,SAAS,GACT,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,CAAC;AAEZ;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQ3D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,QAAQ,CASnB"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GPT_5_MODELS = exports.VISION_SUPPORTED_MODELS = exports.MODEL_O1 = exports.MODEL_O1_MINI = exports.MODEL_O3_MINI = exports.MODEL_GPT_4O = exports.MODEL_GPT_4O_MINI = exports.MODEL_GPT_4_1_NANO = exports.MODEL_GPT_4_1_MINI = exports.MODEL_GPT_4_1 = exports.MODEL_GPT_5_4_PRO = exports.MODEL_GPT_5_4_NANO = exports.MODEL_GPT_5_4_MINI = exports.MODEL_GPT_5_4 = exports.MODEL_GPT_5_1 = exports.MODEL_GPT_5 = exports.MODEL_GPT_5_MINI = exports.MODEL_GPT_5_NANO = exports.ENDPOINT_OPENAI_RESPONSES_API = exports.ENDPOINT_OPENAI_CHAT_COMPLETIONS_API = void 0;
3
+ exports.GPT_5_MODELS = exports.VISION_SUPPORTED_MODELS = exports.MODEL_O1 = exports.MODEL_O1_MINI = exports.MODEL_O3_MINI = exports.MODEL_GPT_4O = exports.MODEL_GPT_4O_MINI = exports.MODEL_GPT_4_1_NANO = exports.MODEL_GPT_4_1_MINI = exports.MODEL_GPT_4_1 = exports.MODEL_GPT_5_4_PRO = exports.MODEL_GPT_5_4_NANO = exports.MODEL_GPT_5_4_MINI = exports.MODEL_GPT_5_5 = exports.MODEL_GPT_5_4 = exports.MODEL_GPT_5_1 = exports.MODEL_GPT_5 = exports.MODEL_GPT_5_MINI = exports.MODEL_GPT_5_NANO = exports.ENDPOINT_OPENAI_RESPONSES_API = exports.ENDPOINT_OPENAI_CHAT_COMPLETIONS_API = void 0;
4
4
  exports.isGPT5Model = isGPT5Model;
5
5
  exports.isResponsesOnlyGPT5Model = isResponsesOnlyGPT5Model;
6
6
  exports.allowsReasoningXHigh = allowsReasoningXHigh;
@@ -16,9 +16,12 @@ exports.MODEL_GPT_5_MINI = 'gpt-5-mini';
16
16
  exports.MODEL_GPT_5 = 'gpt-5';
17
17
  exports.MODEL_GPT_5_1 = 'gpt-5.1';
18
18
  exports.MODEL_GPT_5_4 = 'gpt-5.4';
19
+ exports.MODEL_GPT_5_5 = 'gpt-5.5';
19
20
  exports.MODEL_GPT_5_4_MINI = 'gpt-5.4-mini';
20
21
  exports.MODEL_GPT_5_4_NANO = 'gpt-5.4-nano';
21
22
  exports.MODEL_GPT_5_4_PRO = 'gpt-5.4-pro';
23
+ // GPT-5.5 Pro is intentionally not listed because OpenAI documents it as
24
+ // non-streaming, while this package's chat flow expects streaming support.
22
25
  exports.MODEL_GPT_4_1 = 'gpt-4.1';
23
26
  exports.MODEL_GPT_4_1_MINI = 'gpt-4.1-mini';
24
27
  exports.MODEL_GPT_4_1_NANO = 'gpt-4.1-nano';
@@ -34,6 +37,7 @@ exports.VISION_SUPPORTED_MODELS = [
34
37
  exports.MODEL_GPT_5,
35
38
  exports.MODEL_GPT_5_1,
36
39
  exports.MODEL_GPT_5_4,
40
+ exports.MODEL_GPT_5_5,
37
41
  exports.MODEL_GPT_5_4_MINI,
38
42
  exports.MODEL_GPT_5_4_NANO,
39
43
  exports.MODEL_GPT_5_4_PRO,
@@ -52,6 +56,7 @@ exports.GPT_5_MODELS = [
52
56
  exports.MODEL_GPT_5,
53
57
  exports.MODEL_GPT_5_1,
54
58
  exports.MODEL_GPT_5_4,
59
+ exports.MODEL_GPT_5_5,
55
60
  exports.MODEL_GPT_5_4_MINI,
56
61
  exports.MODEL_GPT_5_4_NANO,
57
62
  exports.MODEL_GPT_5_4_PRO,
@@ -74,24 +79,26 @@ function isResponsesOnlyGPT5Model(model) {
74
79
  * Check if the provided model allows the reasoning_effort 'xhigh' level
75
80
  */
76
81
  function allowsReasoningXHigh(model) {
77
- return (model === exports.MODEL_GPT_5_4 ||
82
+ return (model === exports.MODEL_GPT_5_5 ||
83
+ model === exports.MODEL_GPT_5_4 ||
78
84
  model === exports.MODEL_GPT_5_4_MINI ||
79
85
  model === exports.MODEL_GPT_5_4_NANO ||
80
86
  model === exports.MODEL_GPT_5_4_PRO);
81
87
  }
82
88
  /**
83
89
  * Check if the provided model allows the reasoning_effort 'none' shortcut
84
- * Supported by GPT-5.1 and GPT-5.4 family models, except Pro
90
+ * Supported by GPT-5.1, GPT-5.4, and GPT-5.5 family models, except Pro
85
91
  */
86
92
  function allowsReasoningNone(model) {
87
93
  return (model === exports.MODEL_GPT_5_1 ||
88
94
  model === exports.MODEL_GPT_5_4 ||
95
+ model === exports.MODEL_GPT_5_5 ||
89
96
  model === exports.MODEL_GPT_5_4_MINI ||
90
97
  model === exports.MODEL_GPT_5_4_NANO);
91
98
  }
92
99
  /**
93
100
  * Check if the provided model allows the 'minimal' reasoning effort level
94
- * GPT-5.1 and GPT-5.4 variants remove 'minimal'
101
+ * GPT-5.1, GPT-5.4, and GPT-5.5 variants remove 'minimal'
95
102
  */
96
103
  function allowsReasoningMinimal(model) {
97
104
  return (model === exports.MODEL_GPT_5_NANO ||
@@ -107,11 +114,13 @@ function allowsReasoningLow(model) {
107
114
  }
108
115
  /**
109
116
  * Get default reasoning effort by GPT-5 model family
110
- * - GPT-5.1 / GPT-5.4: none
117
+ * - GPT-5.1 / GPT-5.4 / GPT-5.5: none
111
118
  * - GPT-5.4 Pro and earlier GPT-5 variants: medium
112
119
  */
113
120
  function getDefaultReasoningEffortForGPT5Model(model) {
114
- if (model === exports.MODEL_GPT_5_1 || model === exports.MODEL_GPT_5_4) {
121
+ if (model === exports.MODEL_GPT_5_1 ||
122
+ model === exports.MODEL_GPT_5_4 ||
123
+ model === exports.MODEL_GPT_5_5) {
115
124
  return 'none';
116
125
  }
117
126
  return 'medium';
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":";;;AAsEA,kCAEC;AAKD,4DAEC;AAKD,oDAOC;AAMD,kDAOC;AAMD,wDAMC;AAMD,gDAEC;AAOD,sFAOC;AA1IY,QAAA,oCAAoC,GAC/C,4CAA4C,CAAC;AAClC,QAAA,6BAA6B,GACxC,qCAAqC,CAAC;AAExC,YAAY;AACC,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAChC,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAChC,QAAA,WAAW,GAAG,OAAO,CAAC;AACtB,QAAA,aAAa,GAAG,SAAS,CAAC;AAC1B,QAAA,aAAa,GAAG,SAAS,CAAC;AAC1B,QAAA,kBAAkB,GAAG,cAAc,CAAC;AACpC,QAAA,kBAAkB,GAAG,cAAc,CAAC;AACpC,QAAA,iBAAiB,GAAG,aAAa,CAAC;AAElC,QAAA,aAAa,GAAG,SAAS,CAAC;AAC1B,QAAA,kBAAkB,GAAG,cAAc,CAAC;AACpC,QAAA,kBAAkB,GAAG,cAAc,CAAC;AAEpC,QAAA,iBAAiB,GAAG,aAAa,CAAC;AAClC,QAAA,YAAY,GAAG,QAAQ,CAAC;AACxB,QAAA,aAAa,GAAG,SAAS,CAAC;AAE1B,QAAA,aAAa,GAAG,SAAS,CAAC;AAC1B,QAAA,QAAQ,GAAG,IAAI,CAAC;AAE7B,4BAA4B;AACf,QAAA,uBAAuB,GAAG;IACrC,wBAAgB;IAChB,wBAAgB;IAChB,mBAAW;IACX,qBAAa;IACb,qBAAa;IACb,0BAAkB;IAClB,0BAAkB;IAClB,yBAAiB;IACjB,qBAAa;IACb,0BAAkB;IAClB,0BAAkB;IAClB,yBAAiB;IACjB,oBAAY;IACZ,gBAAQ;IACR,gFAAgF;CACjF,CAAC;AAEF,oBAAoB;AACP,QAAA,YAAY,GAAG;IAC1B,wBAAgB;IAChB,wBAAgB;IAChB,mBAAW;IACX,qBAAa;IACb,qBAAa;IACb,0BAAkB;IAClB,0BAAkB;IAClB,yBAAiB;CAClB,CAAC;AAUF;;;;GAIG;AACH,SAAgB,WAAW,CAAC,KAAa;IACvC,OAAO,oBAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,KAAa;IACpD,OAAO,KAAK,KAAK,yBAAiB,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,KAAa;IAChD,OAAO,CACL,KAAK,KAAK,qBAAa;QACvB,KAAK,KAAK,0BAAkB;QAC5B,KAAK,KAAK,0BAAkB;QAC5B,KAAK,KAAK,yBAAiB,CAC5B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,KAAa;IAC/C,OAAO,CACL,KAAK,KAAK,qBAAa;QACvB,KAAK,KAAK,qBAAa;QACvB,KAAK,KAAK,0BAAkB;QAC5B,KAAK,KAAK,0BAAkB,CAC7B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,KAAa;IAClD,OAAO,CACL,KAAK,KAAK,wBAAgB;QAC1B,KAAK,KAAK,wBAAgB;QAC1B,KAAK,KAAK,mBAAW,CACtB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,OAAO,KAAK,KAAK,yBAAiB,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,SAAgB,qCAAqC,CACnD,KAAa;IAEb,IAAI,KAAK,KAAK,qBAAa,IAAI,KAAK,KAAK,qBAAa,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,yBACX,YAAW,mBAAmB,CAAC,wBAAwB,CAAC;IAExD;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,WAAW;IAwDjE;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAqB9B;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,cAAc,IAAI,OAAO;IAIzB,qBAAqB,IAAI,kBAAkB;IAI3C;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9C,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB;IAIhE;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA0BjC"}
1
+ {"version":3,"file":"OpenAIChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,yBACX,YAAW,mBAAmB,CAAC,wBAAwB,CAAC;IAExD;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,WAAW;IAwDjE;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAsB9B;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,cAAc,IAAI,OAAO;IAIzB,qBAAqB,IAAI,kBAAkB;IAI3C;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9C,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB;IAIhE;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA0BjC"}
@@ -70,6 +70,7 @@ class OpenAIChatServiceProvider {
70
70
  constants_1.MODEL_GPT_5,
71
71
  constants_1.MODEL_GPT_5_1,
72
72
  constants_1.MODEL_GPT_5_4,
73
+ constants_1.MODEL_GPT_5_5,
73
74
  constants_1.MODEL_GPT_5_4_MINI,
74
75
  constants_1.MODEL_GPT_5_4_NANO,
75
76
  constants_1.MODEL_GPT_5_4_PRO,
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAIChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare const MODEL_GPT_5_MINI = "gpt-5-mini";
5
5
  export declare const MODEL_GPT_5 = "gpt-5";
6
6
  export declare const MODEL_GPT_5_1 = "gpt-5.1";
7
7
  export declare const MODEL_GPT_5_4 = "gpt-5.4";
8
+ export declare const MODEL_GPT_5_5 = "gpt-5.5";
8
9
  export declare const MODEL_GPT_5_4_MINI = "gpt-5.4-mini";
9
10
  export declare const MODEL_GPT_5_4_NANO = "gpt-5.4-nano";
10
11
  export declare const MODEL_GPT_5_4_PRO = "gpt-5.4-pro";
@@ -35,12 +36,12 @@ export declare function isResponsesOnlyGPT5Model(model: string): boolean;
35
36
  export declare function allowsReasoningXHigh(model: string): boolean;
36
37
  /**
37
38
  * Check if the provided model allows the reasoning_effort 'none' shortcut
38
- * Supported by GPT-5.1 and GPT-5.4 family models, except Pro
39
+ * Supported by GPT-5.1, GPT-5.4, and GPT-5.5 family models, except Pro
39
40
  */
40
41
  export declare function allowsReasoningNone(model: string): boolean;
41
42
  /**
42
43
  * Check if the provided model allows the 'minimal' reasoning effort level
43
- * GPT-5.1 and GPT-5.4 variants remove 'minimal'
44
+ * GPT-5.1, GPT-5.4, and GPT-5.5 variants remove 'minimal'
44
45
  */
45
46
  export declare function allowsReasoningMinimal(model: string): boolean;
46
47
  /**
@@ -50,7 +51,7 @@ export declare function allowsReasoningMinimal(model: string): boolean;
50
51
  export declare function allowsReasoningLow(model: string): boolean;
51
52
  /**
52
53
  * Get default reasoning effort by GPT-5 model family
53
- * - GPT-5.1 / GPT-5.4: none
54
+ * - GPT-5.1 / GPT-5.4 / GPT-5.5: none
54
55
  * - GPT-5.4 Pro and earlier GPT-5 variants: medium
55
56
  */
56
57
  export declare function getDefaultReasoningEffortForGPT5Model(model: string): 'none' | 'medium';
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,+CACH,CAAC;AAC/C,eAAO,MAAM,6BAA6B,wCACH,CAAC;AAGxC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAG7B,eAAO,MAAM,uBAAuB,UAgBnC,CAAC;AAGF,eAAO,MAAM,YAAY,UASxB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,SAAS,GACT,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,CAAC;AAEZ;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,QAAQ,CAKnB"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,+CACH,CAAC;AAC/C,eAAO,MAAM,6BAA6B,wCACH,CAAC;AAGxC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAI/C,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAG7B,eAAO,MAAM,uBAAuB,UAiBnC,CAAC;AAGF,eAAO,MAAM,YAAY,UAUxB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,SAAS,GACT,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,CAAC;AAEZ;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQ3D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,QAAQ,CASnB"}
@@ -6,9 +6,12 @@ export const MODEL_GPT_5_MINI = 'gpt-5-mini';
6
6
  export const MODEL_GPT_5 = 'gpt-5';
7
7
  export const MODEL_GPT_5_1 = 'gpt-5.1';
8
8
  export const MODEL_GPT_5_4 = 'gpt-5.4';
9
+ export const MODEL_GPT_5_5 = 'gpt-5.5';
9
10
  export const MODEL_GPT_5_4_MINI = 'gpt-5.4-mini';
10
11
  export const MODEL_GPT_5_4_NANO = 'gpt-5.4-nano';
11
12
  export const MODEL_GPT_5_4_PRO = 'gpt-5.4-pro';
13
+ // GPT-5.5 Pro is intentionally not listed because OpenAI documents it as
14
+ // non-streaming, while this package's chat flow expects streaming support.
12
15
  export const MODEL_GPT_4_1 = 'gpt-4.1';
13
16
  export const MODEL_GPT_4_1_MINI = 'gpt-4.1-mini';
14
17
  export const MODEL_GPT_4_1_NANO = 'gpt-4.1-nano';
@@ -24,6 +27,7 @@ export const VISION_SUPPORTED_MODELS = [
24
27
  MODEL_GPT_5,
25
28
  MODEL_GPT_5_1,
26
29
  MODEL_GPT_5_4,
30
+ MODEL_GPT_5_5,
27
31
  MODEL_GPT_5_4_MINI,
28
32
  MODEL_GPT_5_4_NANO,
29
33
  MODEL_GPT_5_4_PRO,
@@ -42,6 +46,7 @@ export const GPT_5_MODELS = [
42
46
  MODEL_GPT_5,
43
47
  MODEL_GPT_5_1,
44
48
  MODEL_GPT_5_4,
49
+ MODEL_GPT_5_5,
45
50
  MODEL_GPT_5_4_MINI,
46
51
  MODEL_GPT_5_4_NANO,
47
52
  MODEL_GPT_5_4_PRO,
@@ -64,24 +69,26 @@ export function isResponsesOnlyGPT5Model(model) {
64
69
  * Check if the provided model allows the reasoning_effort 'xhigh' level
65
70
  */
66
71
  export function allowsReasoningXHigh(model) {
67
- return (model === MODEL_GPT_5_4 ||
72
+ return (model === MODEL_GPT_5_5 ||
73
+ model === MODEL_GPT_5_4 ||
68
74
  model === MODEL_GPT_5_4_MINI ||
69
75
  model === MODEL_GPT_5_4_NANO ||
70
76
  model === MODEL_GPT_5_4_PRO);
71
77
  }
72
78
  /**
73
79
  * Check if the provided model allows the reasoning_effort 'none' shortcut
74
- * Supported by GPT-5.1 and GPT-5.4 family models, except Pro
80
+ * Supported by GPT-5.1, GPT-5.4, and GPT-5.5 family models, except Pro
75
81
  */
76
82
  export function allowsReasoningNone(model) {
77
83
  return (model === MODEL_GPT_5_1 ||
78
84
  model === MODEL_GPT_5_4 ||
85
+ model === MODEL_GPT_5_5 ||
79
86
  model === MODEL_GPT_5_4_MINI ||
80
87
  model === MODEL_GPT_5_4_NANO);
81
88
  }
82
89
  /**
83
90
  * Check if the provided model allows the 'minimal' reasoning effort level
84
- * GPT-5.1 and GPT-5.4 variants remove 'minimal'
91
+ * GPT-5.1, GPT-5.4, and GPT-5.5 variants remove 'minimal'
85
92
  */
86
93
  export function allowsReasoningMinimal(model) {
87
94
  return (model === MODEL_GPT_5_NANO ||
@@ -97,11 +104,13 @@ export function allowsReasoningLow(model) {
97
104
  }
98
105
  /**
99
106
  * Get default reasoning effort by GPT-5 model family
100
- * - GPT-5.1 / GPT-5.4: none
107
+ * - GPT-5.1 / GPT-5.4 / GPT-5.5: none
101
108
  * - GPT-5.4 Pro and earlier GPT-5 variants: medium
102
109
  */
103
110
  export function getDefaultReasoningEffortForGPT5Model(model) {
104
- if (model === MODEL_GPT_5_1 || model === MODEL_GPT_5_4) {
111
+ if (model === MODEL_GPT_5_1 ||
112
+ model === MODEL_GPT_5_4 ||
113
+ model === MODEL_GPT_5_5) {
105
114
  return 'none';
106
115
  }
107
116
  return 'medium';
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/constants/openai.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,yBACX,YAAW,mBAAmB,CAAC,wBAAwB,CAAC;IAExD;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,WAAW;IAwDjE;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAqB9B;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,cAAc,IAAI,OAAO;IAIzB,qBAAqB,IAAI,kBAAkB;IAI3C;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9C,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB;IAIhE;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA0BjC"}
1
+ {"version":3,"file":"OpenAIChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,yBACX,YAAW,mBAAmB,CAAC,wBAAwB,CAAC;IAExD;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,WAAW;IAwDjE;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAsB9B;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,cAAc,IAAI,OAAO;IAIzB,qBAAqB,IAAI,kBAAkB;IAI3C;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9C,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB;IAIhE;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA0BjC"}
@@ -1,4 +1,4 @@
1
- import { ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, ENDPOINT_OPENAI_RESPONSES_API, MODEL_GPT_5_NANO, MODEL_GPT_5_MINI, MODEL_GPT_5, MODEL_GPT_5_1, MODEL_GPT_5_4, MODEL_GPT_5_4_MINI, MODEL_GPT_5_4_NANO, MODEL_GPT_5_4_PRO, MODEL_GPT_4_1, MODEL_GPT_4_1_MINI, MODEL_GPT_4_1_NANO, MODEL_GPT_4O_MINI, MODEL_GPT_4O, MODEL_O3_MINI, MODEL_O1_MINI, MODEL_O1, VISION_SUPPORTED_MODELS, isGPT5Model, isResponsesOnlyGPT5Model, allowsReasoningXHigh, allowsReasoningNone, allowsReasoningMinimal, allowsReasoningLow, getDefaultReasoningEffortForGPT5Model, } from '../../../constants';
1
+ import { ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, ENDPOINT_OPENAI_RESPONSES_API, MODEL_GPT_5_NANO, MODEL_GPT_5_MINI, MODEL_GPT_5, MODEL_GPT_5_1, MODEL_GPT_5_4, MODEL_GPT_5_5, MODEL_GPT_5_4_MINI, MODEL_GPT_5_4_NANO, MODEL_GPT_5_4_PRO, MODEL_GPT_4_1, MODEL_GPT_4_1_MINI, MODEL_GPT_4_1_NANO, MODEL_GPT_4O_MINI, MODEL_GPT_4O, MODEL_O3_MINI, MODEL_O1_MINI, MODEL_O1, VISION_SUPPORTED_MODELS, isGPT5Model, isResponsesOnlyGPT5Model, allowsReasoningXHigh, allowsReasoningNone, allowsReasoningMinimal, allowsReasoningLow, getDefaultReasoningEffortForGPT5Model, } from '../../../constants';
2
2
  import { GPT5_PRESETS } from '../../../constants/chat';
3
3
  import { OpenAIChatService } from './OpenAIChatService';
4
4
  import { resolveVisionModel } from '../../../utils';
@@ -67,6 +67,7 @@ export class OpenAIChatServiceProvider {
67
67
  MODEL_GPT_5,
68
68
  MODEL_GPT_5_1,
69
69
  MODEL_GPT_5_4,
70
+ MODEL_GPT_5_5,
70
71
  MODEL_GPT_5_4_MINI,
71
72
  MODEL_GPT_5_4_NANO,
72
73
  MODEL_GPT_5_4_PRO,
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAIChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/openai/OpenAIChatServiceProvider.ts"],"names":[],"mappings":"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"}
@@ -107,6 +107,7 @@ var AITuberOnAirChat = (() => {
107
107
  MODEL_GPT_5_4_MINI: () => MODEL_GPT_5_4_MINI,
108
108
  MODEL_GPT_5_4_NANO: () => MODEL_GPT_5_4_NANO,
109
109
  MODEL_GPT_5_4_PRO: () => MODEL_GPT_5_4_PRO,
110
+ MODEL_GPT_5_5: () => MODEL_GPT_5_5,
110
111
  MODEL_GPT_5_MINI: () => MODEL_GPT_5_MINI,
111
112
  MODEL_GPT_5_NANO: () => MODEL_GPT_5_NANO,
112
113
  MODEL_GPT_OSS_20B_FREE: () => MODEL_GPT_OSS_20B_FREE,
@@ -185,6 +186,7 @@ var AITuberOnAirChat = (() => {
185
186
  var MODEL_GPT_5 = "gpt-5";
186
187
  var MODEL_GPT_5_1 = "gpt-5.1";
187
188
  var MODEL_GPT_5_4 = "gpt-5.4";
189
+ var MODEL_GPT_5_5 = "gpt-5.5";
188
190
  var MODEL_GPT_5_4_MINI = "gpt-5.4-mini";
189
191
  var MODEL_GPT_5_4_NANO = "gpt-5.4-nano";
190
192
  var MODEL_GPT_5_4_PRO = "gpt-5.4-pro";
@@ -202,6 +204,7 @@ var AITuberOnAirChat = (() => {
202
204
  MODEL_GPT_5,
203
205
  MODEL_GPT_5_1,
204
206
  MODEL_GPT_5_4,
207
+ MODEL_GPT_5_5,
205
208
  MODEL_GPT_5_4_MINI,
206
209
  MODEL_GPT_5_4_NANO,
207
210
  MODEL_GPT_5_4_PRO,
@@ -219,6 +222,7 @@ var AITuberOnAirChat = (() => {
219
222
  MODEL_GPT_5,
220
223
  MODEL_GPT_5_1,
221
224
  MODEL_GPT_5_4,
225
+ MODEL_GPT_5_5,
222
226
  MODEL_GPT_5_4_MINI,
223
227
  MODEL_GPT_5_4_NANO,
224
228
  MODEL_GPT_5_4_PRO
@@ -230,10 +234,10 @@ var AITuberOnAirChat = (() => {
230
234
  return model === MODEL_GPT_5_4_PRO;
231
235
  }
232
236
  function allowsReasoningXHigh(model) {
233
- return model === MODEL_GPT_5_4 || model === MODEL_GPT_5_4_MINI || model === MODEL_GPT_5_4_NANO || model === MODEL_GPT_5_4_PRO;
237
+ return model === MODEL_GPT_5_5 || model === MODEL_GPT_5_4 || model === MODEL_GPT_5_4_MINI || model === MODEL_GPT_5_4_NANO || model === MODEL_GPT_5_4_PRO;
234
238
  }
235
239
  function allowsReasoningNone(model) {
236
- return model === MODEL_GPT_5_1 || model === MODEL_GPT_5_4 || model === MODEL_GPT_5_4_MINI || model === MODEL_GPT_5_4_NANO;
240
+ return model === MODEL_GPT_5_1 || model === MODEL_GPT_5_4 || model === MODEL_GPT_5_5 || model === MODEL_GPT_5_4_MINI || model === MODEL_GPT_5_4_NANO;
237
241
  }
238
242
  function allowsReasoningMinimal(model) {
239
243
  return model === MODEL_GPT_5_NANO || model === MODEL_GPT_5_MINI || model === MODEL_GPT_5;
@@ -242,7 +246,7 @@ var AITuberOnAirChat = (() => {
242
246
  return model !== MODEL_GPT_5_4_PRO;
243
247
  }
244
248
  function getDefaultReasoningEffortForGPT5Model(model) {
245
- if (model === MODEL_GPT_5_1 || model === MODEL_GPT_5_4) {
249
+ if (model === MODEL_GPT_5_1 || model === MODEL_GPT_5_4 || model === MODEL_GPT_5_5) {
246
250
  return "none";
247
251
  }
248
252
  return "medium";
@@ -3496,6 +3500,7 @@ If it's in another language, summarize in that language.
3496
3500
  MODEL_GPT_5,
3497
3501
  MODEL_GPT_5_1,
3498
3502
  MODEL_GPT_5_4,
3503
+ MODEL_GPT_5_5,
3499
3504
  MODEL_GPT_5_4_MINI,
3500
3505
  MODEL_GPT_5_4_NANO,
3501
3506
  MODEL_GPT_5_4_PRO,
@@ -1,4 +1,4 @@
1
- "use strict";var AITuberOnAirChat=(()=>{var Pt=Object.defineProperty;var mo=Object.getOwnPropertyDescriptor;var go=Object.getOwnPropertyNames;var _o=Object.prototype.hasOwnProperty;var fo=(r,e)=>{for(var t in e)Pt(r,t,{get:e[t],enumerable:!0})},vo=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of go(e))!_o.call(r,s)&&s!==t&&Pt(r,s,{get:()=>e[s],enumerable:!(o=mo(e,s))||o.enumerable});return r};var Mo=r=>vo(Pt({},"__esModule",{value:!0}),r);var $o={};fo($o,{CHAT_RESPONSE_LENGTH:()=>C,CLAUDE_VISION_SUPPORTED_MODELS:()=>Pe,ChatServiceFactory:()=>Se,ChatServiceHttpClient:()=>_,ClaudeChatService:()=>ae,ClaudeChatServiceProvider:()=>le,DEFAULT_MAX_TOKENS:()=>Xt,DEFAULT_SUMMARY_PROMPT_TEMPLATE:()=>Po,DEFAULT_VISION_PROMPT:()=>Lo,EMOTION_TAG_CLEANUP_REGEX:()=>Yt,EMOTION_TAG_REGEX:()=>ro,ENDPOINT_CLAUDE_API:()=>kt,ENDPOINT_GEMINI_API:()=>Vt,ENDPOINT_KIMI_CHAT_COMPLETIONS_API:()=>ie,ENDPOINT_OPENAI_CHAT_COMPLETIONS_API:()=>Z,ENDPOINT_OPENAI_RESPONSES_API:()=>I,ENDPOINT_OPENROUTER_API:()=>xe,ENDPOINT_XAI_CHAT_COMPLETIONS_API:()=>be,ENDPOINT_ZAI_CHAT_COMPLETIONS_API:()=>Ie,EmotionParser:()=>ne,GEMINI_NANO_MAX_CONTEXT_MESSAGES:()=>Zt,GEMINI_VISION_SUPPORTED_MODELS:()=>Le,GPT5_PRESETS:()=>Jt,GPT_5_MODELS:()=>eo,GeminiChatService:()=>pe,GeminiChatServiceProvider:()=>ce,GeminiNanoChatService:()=>ue,GeminiNanoChatServiceProvider:()=>he,HttpError:()=>G,KIMI_VISION_SUPPORTED_MODELS:()=>io,KimiChatService:()=>de,KimiChatServiceProvider:()=>me,MAX_TOKENS_BY_LENGTH:()=>St,MODEL_ANTHROPIC_CLAUDE_3_5_SONNET:()=>Gt,MODEL_ANTHROPIC_CLAUDE_3_7_SONNET:()=>ut,MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU:()=>ht,MODEL_ANTHROPIC_CLAUDE_OPUS_4:()=>pt,MODEL_ANTHROPIC_CLAUDE_SONNET_4:()=>ct,MODEL_CLAUDE_3_5_HAIKU:()=>Oo,MODEL_CLAUDE_3_5_SONNET:()=>Eo,MODEL_CLAUDE_3_7_SONNET:()=>Co,MODEL_CLAUDE_3_HAIKU:()=>qe,MODEL_CLAUDE_4_5_HAIKU:()=>b,MODEL_CLAUDE_4_5_OPUS:()=>Ze,MODEL_CLAUDE_4_5_SONNET:()=>Je,MODEL_CLAUDE_4_6_OPUS:()=>Qe,MODEL_CLAUDE_4_6_SONNET:()=>Ye,MODEL_CLAUDE_4_7_OPUS:()=>et,MODEL_CLAUDE_4_OPUS:()=>Xe,MODEL_CLAUDE_4_SONNET:()=>ze,MODEL_GEMINI_2_0_FLASH:()=>je,MODEL_GEMINI_2_0_FLASH_LITE:()=>V,MODEL_GEMINI_2_5_FLASH:()=>Be,MODEL_GEMINI_2_5_FLASH_LITE:()=>Ke,MODEL_GEMINI_2_5_FLASH_LITE_PREVIEW_06_17:()=>$e,MODEL_GEMINI_2_5_PRO:()=>We,MODEL_GEMINI_3_1_FLASH_LITE_PREVIEW:()=>Fe,MODEL_GEMINI_3_1_PRO_PREVIEW:()=>Ge,MODEL_GEMINI_3_FLASH_PREVIEW:()=>He,MODEL_GEMINI_3_PRO_PREVIEW:()=>Ue,MODEL_GEMINI_NANO:()=>X,MODEL_GEMMA_4_26B_A4B_IT:()=>ke,MODEL_GEMMA_4_31B_IT:()=>Ve,MODEL_GLM_4_6:()=>qt,MODEL_GLM_4_6V:()=>ft,MODEL_GLM_4_6V_FLASH:()=>z,MODEL_GLM_4_6V_FLASHX:()=>vt,MODEL_GLM_4_7:()=>te,MODEL_GLM_4_7_FLASH:()=>jt,MODEL_GLM_4_7_FLASHX:()=>$t,MODEL_GLM_5:()=>Bt,MODEL_GLM_5_TURBO:()=>Kt,MODEL_GOOGLE_GEMINI_2_5_FLASH:()=>mt,MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025:()=>gt,MODEL_GOOGLE_GEMINI_2_5_PRO:()=>dt,MODEL_GPT_4O:()=>we,MODEL_GPT_4O_MINI:()=>$,MODEL_GPT_4_1:()=>Ae,MODEL_GPT_4_1_MINI:()=>De,MODEL_GPT_4_1_NANO:()=>Ne,MODEL_GPT_5:()=>Q,MODEL_GPT_5_1:()=>W,MODEL_GPT_5_4:()=>N,MODEL_GPT_5_4_MINI:()=>B,MODEL_GPT_5_4_NANO:()=>K,MODEL_GPT_5_4_PRO:()=>w,MODEL_GPT_5_MINI:()=>Y,MODEL_GPT_5_NANO:()=>H,MODEL_GPT_OSS_20B_FREE:()=>k,MODEL_GROK_4_1_FAST_NON_REASONING:()=>A,MODEL_GROK_4_1_FAST_REASONING:()=>Et,MODEL_GROK_4_20_NON_REASONING:()=>Ot,MODEL_GROK_4_20_REASONING:()=>Mt,MODEL_KIMI_K2_5:()=>Ct,MODEL_KIMI_K2_6:()=>D,MODEL_MOONSHOTAI_KIMI_K2_5:()=>tt,MODEL_O1:()=>bt,MODEL_O1_MINI:()=>It,MODEL_O3_MINI:()=>xt,MODEL_OPENAI_GPT_4O:()=>nt,MODEL_OPENAI_GPT_4_1_MINI:()=>at,MODEL_OPENAI_GPT_4_1_NANO:()=>lt,MODEL_OPENAI_GPT_5_1_CHAT:()=>ot,MODEL_OPENAI_GPT_5_1_CODEX:()=>st,MODEL_OPENAI_GPT_5_MINI:()=>it,MODEL_OPENAI_GPT_5_NANO:()=>rt,MODEL_ZAI_GLM_4_5_AIR:()=>Ut,MODEL_ZAI_GLM_4_5_AIR_FREE:()=>_t,MODEL_ZAI_GLM_4_7_FLASH:()=>Ft,OPENROUTER_CREDITS_THRESHOLD:()=>To,OPENROUTER_FREE_DAILY_LIMIT_HIGH_CREDITS:()=>yo,OPENROUTER_FREE_DAILY_LIMIT_LOW_CREDITS:()=>So,OPENROUTER_FREE_MODELS:()=>Ht,OPENROUTER_FREE_RATE_LIMIT_PER_MINUTE:()=>Wt,OPENROUTER_VISION_SUPPORTED_MODELS:()=>to,OpenAIChatService:()=>F,OpenAIChatServiceProvider:()=>_e,OpenAICompatibleChatServiceProvider:()=>ge,OpenRouterChatService:()=>fe,OpenRouterChatServiceProvider:()=>ve,StreamTextAccumulator:()=>v,VISION_SUPPORTED_MODELS:()=>Te,XAIChatService:()=>Me,XAIChatServiceProvider:()=>Oe,XAI_VISION_SUPPORTED_MODELS:()=>so,ZAIChatService:()=>Ee,ZAIChatServiceProvider:()=>Ce,ZAI_VISION_SUPPORTED_MODELS:()=>oo,allowsReasoningLow:()=>wt,allowsReasoningMinimal:()=>Nt,allowsReasoningNone:()=>Dt,allowsReasoningXHigh:()=>At,buildOpenAICompatibleTools:()=>P,getDefaultReasoningEffortForGPT5Model:()=>R,getMaxTokensForResponseLength:()=>O,installGASFetch:()=>ho,isGPT5Model:()=>j,isKimiVisionModel:()=>re,isOpenRouterFreeModel:()=>q,isOpenRouterVisionModel:()=>ee,isResponsesOnlyGPT5Model:()=>Rt,isXaiVisionModel:()=>se,isZaiToolStreamModel:()=>zt,isZaiVisionModel:()=>oe,parseOpenAICompatibleOneShot:()=>L,parseOpenAICompatibleTextStream:()=>y,parseOpenAICompatibleToolStream:()=>T,processChatWithOptionalTools:()=>f,refreshOpenRouterFreeModels:()=>Ho,resolveVisionModel:()=>E,runOnceText:()=>Ro,screenplayToText:()=>bo,textToScreenplay:()=>no,textsToScreenplay:()=>Io});var Z="https://api.openai.com/v1/chat/completions",I="https://api.openai.com/v1/responses",H="gpt-5-nano",Y="gpt-5-mini",Q="gpt-5",W="gpt-5.1",N="gpt-5.4",B="gpt-5.4-mini",K="gpt-5.4-nano",w="gpt-5.4-pro",Ae="gpt-4.1",De="gpt-4.1-mini",Ne="gpt-4.1-nano",$="gpt-4o-mini",we="gpt-4o",xt="o3-mini",It="o1-mini",bt="o1",Te=[H,Y,Q,W,N,B,K,w,Ae,De,Ne,$,we,"o1"],eo=[H,Y,Q,W,N,B,K,w];function j(r){return eo.includes(r)}function Rt(r){return r===w}function At(r){return r===N||r===B||r===K||r===w}function Dt(r){return r===W||r===N||r===B||r===K}function Nt(r){return r===H||r===Y||r===Q}function wt(r){return r!==w}function R(r){return r===W||r===N?"none":"medium"}var Vt="https://generativelanguage.googleapis.com",Ve="gemma-4-31b-it",ke="gemma-4-26b-a4b-it",Ge="gemini-3.1-pro-preview",Fe="gemini-3.1-flash-lite-preview",Ue="gemini-3-pro-preview",He="gemini-3-flash-preview",We="gemini-2.5-pro",Be="gemini-2.5-flash",Ke="gemini-2.5-flash-lite",$e="gemini-2.5-flash-lite-preview-06-17",je="gemini-2.0-flash",V="gemini-2.0-flash-lite",Le=[Ve,ke,Ge,Fe,Ue,He,We,Be,Ke,$e,je,V];var kt="https://api.anthropic.com/v1/messages",qe="claude-3-haiku-20240307",Oo="claude-3-5-haiku-20241022",Eo="claude-3-5-sonnet-20241022",Co="claude-3-7-sonnet-20250219",ze="claude-sonnet-4-20250514",Xe="claude-opus-4-20250514",Je="claude-sonnet-4-5-20250929",b="claude-haiku-4-5-20251001",Ze="claude-opus-4-5-20251101",Ye="claude-sonnet-4-6",Qe="claude-opus-4-6",et="claude-opus-4-7",Pe=[qe,ze,Xe,Je,b,Ze,Ye,Qe,et];var xe="https://openrouter.ai/api/v1/chat/completions",k="openai/gpt-oss-20b:free",tt="moonshotai/kimi-k2.5",ot="openai/gpt-5.1-chat",st="openai/gpt-5.1-codex",it="openai/gpt-5-mini",rt="openai/gpt-5-nano",nt="openai/gpt-4o",at="openai/gpt-4.1-mini",lt="openai/gpt-4.1-nano",pt="anthropic/claude-opus-4",ct="anthropic/claude-sonnet-4",ut="anthropic/claude-3.7-sonnet",Gt="anthropic/claude-3.5-sonnet",ht="anthropic/claude-haiku-4.5",dt="google/gemini-2.5-pro",mt="google/gemini-2.5-flash",gt="google/gemini-2.5-flash-lite-preview-09-2025",Ft="z-ai/glm-4.7-flash",Ut="z-ai/glm-4.5-air",_t="z-ai/glm-4.5-air:free",Ht=[k,_t],to=[ot,st,it,rt,nt,at,lt,pt,ct,ut,ht,dt,mt,gt,tt],Wt=20,So=50,yo=1e3,To=10;function q(r){return r.trim().endsWith(":free")}function ee(r){return to.some(e=>r.includes(e))}var Ie="https://api.z.ai/api/paas/v4/chat/completions",Bt="glm-5",Kt="glm-5-turbo",te="glm-4.7",$t="glm-4.7-FlashX",jt="glm-4.7-Flash",qt="glm-4.6",ft="glm-4.6V",vt="glm-4.6V-FlashX",z="glm-4.6V-Flash",oo=[ft,vt,z];function oe(r){return oo.includes(r)}function zt(r){return r.toLowerCase().startsWith("glm-4.6")}var be="https://api.x.ai/v1/chat/completions",Mt="grok-4.20-0309-reasoning",Ot="grok-4.20-0309-non-reasoning",Et="grok-4-1-fast-reasoning",A="grok-4-1-fast-non-reasoning",so=[Mt,Ot,Et,A];function se(r){return so.includes(r)}var ie="https://api.moonshot.ai/v1/chat/completions",D="kimi-k2.6",Ct="kimi-k2.5",io=[D,Ct];function re(r){return io.includes(r)}var C={VERY_SHORT:"veryShort",SHORT:"short",MEDIUM:"medium",LONG:"long",VERY_LONG:"veryLong",DEEP:"deep"},St={[C.VERY_SHORT]:40,[C.SHORT]:100,[C.MEDIUM]:200,[C.LONG]:300,[C.VERY_LONG]:1e3,[C.DEEP]:5e3},Xt=5e3,Jt={casual:{reasoning_effort:"minimal",verbosity:"low",description:"Fast responses for casual chat, quick questions (GPT-4 like experience)"},balanced:{reasoning_effort:"medium",verbosity:"medium",description:"Balanced reasoning for business tasks, learning, general problem solving"},expert:{reasoning_effort:"high",verbosity:"high",description:"Deep reasoning for research, complex analysis, expert-level tasks"}};function O(r){return r?St[r]??Xt:Xt}var Lo="You are a friendly AI avatar. Comment on the situation based on the broadcast screen.",Po=`You are a skilled summarizing assistant.
1
+ "use strict";var AITuberOnAirChat=(()=>{var xt=Object.defineProperty;var go=Object.getOwnPropertyDescriptor;var _o=Object.getOwnPropertyNames;var fo=Object.prototype.hasOwnProperty;var vo=(r,e)=>{for(var t in e)xt(r,t,{get:e[t],enumerable:!0})},Mo=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of _o(e))!fo.call(r,s)&&s!==t&&xt(r,s,{get:()=>e[s],enumerable:!(o=go(e,s))||o.enumerable});return r};var Oo=r=>Mo(xt({},"__esModule",{value:!0}),r);var jo={};vo(jo,{CHAT_RESPONSE_LENGTH:()=>C,CLAUDE_VISION_SUPPORTED_MODELS:()=>xe,ChatServiceFactory:()=>ye,ChatServiceHttpClient:()=>_,ClaudeChatService:()=>le,ClaudeChatServiceProvider:()=>pe,DEFAULT_MAX_TOKENS:()=>Jt,DEFAULT_SUMMARY_PROMPT_TEMPLATE:()=>xo,DEFAULT_VISION_PROMPT:()=>Po,EMOTION_TAG_CLEANUP_REGEX:()=>Qt,EMOTION_TAG_REGEX:()=>no,ENDPOINT_CLAUDE_API:()=>Gt,ENDPOINT_GEMINI_API:()=>kt,ENDPOINT_KIMI_CHAT_COMPLETIONS_API:()=>re,ENDPOINT_OPENAI_CHAT_COMPLETIONS_API:()=>Y,ENDPOINT_OPENAI_RESPONSES_API:()=>I,ENDPOINT_OPENROUTER_API:()=>Ie,ENDPOINT_XAI_CHAT_COMPLETIONS_API:()=>Re,ENDPOINT_ZAI_CHAT_COMPLETIONS_API:()=>be,EmotionParser:()=>ae,GEMINI_NANO_MAX_CONTEXT_MESSAGES:()=>Yt,GEMINI_VISION_SUPPORTED_MODELS:()=>Pe,GPT5_PRESETS:()=>Zt,GPT_5_MODELS:()=>to,GeminiChatService:()=>ce,GeminiChatServiceProvider:()=>ue,GeminiNanoChatService:()=>he,GeminiNanoChatServiceProvider:()=>de,HttpError:()=>F,KIMI_VISION_SUPPORTED_MODELS:()=>ro,KimiChatService:()=>me,KimiChatServiceProvider:()=>ge,MAX_TOKENS_BY_LENGTH:()=>yt,MODEL_ANTHROPIC_CLAUDE_3_5_SONNET:()=>Ft,MODEL_ANTHROPIC_CLAUDE_3_7_SONNET:()=>ht,MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU:()=>dt,MODEL_ANTHROPIC_CLAUDE_OPUS_4:()=>ct,MODEL_ANTHROPIC_CLAUDE_SONNET_4:()=>ut,MODEL_CLAUDE_3_5_HAIKU:()=>Eo,MODEL_CLAUDE_3_5_SONNET:()=>Co,MODEL_CLAUDE_3_7_SONNET:()=>So,MODEL_CLAUDE_3_HAIKU:()=>ze,MODEL_CLAUDE_4_5_HAIKU:()=>b,MODEL_CLAUDE_4_5_OPUS:()=>Ye,MODEL_CLAUDE_4_5_SONNET:()=>Ze,MODEL_CLAUDE_4_6_OPUS:()=>et,MODEL_CLAUDE_4_6_SONNET:()=>Qe,MODEL_CLAUDE_4_7_OPUS:()=>tt,MODEL_CLAUDE_4_OPUS:()=>Je,MODEL_CLAUDE_4_SONNET:()=>Xe,MODEL_GEMINI_2_0_FLASH:()=>qe,MODEL_GEMINI_2_0_FLASH_LITE:()=>k,MODEL_GEMINI_2_5_FLASH:()=>Ke,MODEL_GEMINI_2_5_FLASH_LITE:()=>$e,MODEL_GEMINI_2_5_FLASH_LITE_PREVIEW_06_17:()=>je,MODEL_GEMINI_2_5_PRO:()=>Be,MODEL_GEMINI_3_1_FLASH_LITE_PREVIEW:()=>Ue,MODEL_GEMINI_3_1_PRO_PREVIEW:()=>Fe,MODEL_GEMINI_3_FLASH_PREVIEW:()=>We,MODEL_GEMINI_3_PRO_PREVIEW:()=>He,MODEL_GEMINI_NANO:()=>J,MODEL_GEMMA_4_26B_A4B_IT:()=>Ge,MODEL_GEMMA_4_31B_IT:()=>ke,MODEL_GLM_4_6:()=>zt,MODEL_GLM_4_6V:()=>vt,MODEL_GLM_4_6V_FLASH:()=>X,MODEL_GLM_4_6V_FLASHX:()=>Mt,MODEL_GLM_4_7:()=>oe,MODEL_GLM_4_7_FLASH:()=>qt,MODEL_GLM_4_7_FLASHX:()=>jt,MODEL_GLM_5:()=>Kt,MODEL_GLM_5_TURBO:()=>$t,MODEL_GOOGLE_GEMINI_2_5_FLASH:()=>gt,MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025:()=>_t,MODEL_GOOGLE_GEMINI_2_5_PRO:()=>mt,MODEL_GPT_4O:()=>Ve,MODEL_GPT_4O_MINI:()=>j,MODEL_GPT_4_1:()=>De,MODEL_GPT_4_1_MINI:()=>Ne,MODEL_GPT_4_1_NANO:()=>we,MODEL_GPT_5:()=>ee,MODEL_GPT_5_1:()=>B,MODEL_GPT_5_4:()=>N,MODEL_GPT_5_4_MINI:()=>K,MODEL_GPT_5_4_NANO:()=>$,MODEL_GPT_5_4_PRO:()=>V,MODEL_GPT_5_5:()=>w,MODEL_GPT_5_MINI:()=>Q,MODEL_GPT_5_NANO:()=>W,MODEL_GPT_OSS_20B_FREE:()=>G,MODEL_GROK_4_1_FAST_NON_REASONING:()=>A,MODEL_GROK_4_1_FAST_REASONING:()=>Ct,MODEL_GROK_4_20_NON_REASONING:()=>Et,MODEL_GROK_4_20_REASONING:()=>Ot,MODEL_KIMI_K2_5:()=>St,MODEL_KIMI_K2_6:()=>D,MODEL_MOONSHOTAI_KIMI_K2_5:()=>ot,MODEL_O1:()=>Rt,MODEL_O1_MINI:()=>bt,MODEL_O3_MINI:()=>It,MODEL_OPENAI_GPT_4O:()=>at,MODEL_OPENAI_GPT_4_1_MINI:()=>lt,MODEL_OPENAI_GPT_4_1_NANO:()=>pt,MODEL_OPENAI_GPT_5_1_CHAT:()=>st,MODEL_OPENAI_GPT_5_1_CODEX:()=>it,MODEL_OPENAI_GPT_5_MINI:()=>rt,MODEL_OPENAI_GPT_5_NANO:()=>nt,MODEL_ZAI_GLM_4_5_AIR:()=>Ht,MODEL_ZAI_GLM_4_5_AIR_FREE:()=>ft,MODEL_ZAI_GLM_4_7_FLASH:()=>Ut,OPENROUTER_CREDITS_THRESHOLD:()=>Lo,OPENROUTER_FREE_DAILY_LIMIT_HIGH_CREDITS:()=>To,OPENROUTER_FREE_DAILY_LIMIT_LOW_CREDITS:()=>yo,OPENROUTER_FREE_MODELS:()=>Wt,OPENROUTER_FREE_RATE_LIMIT_PER_MINUTE:()=>Bt,OPENROUTER_VISION_SUPPORTED_MODELS:()=>oo,OpenAIChatService:()=>U,OpenAIChatServiceProvider:()=>fe,OpenAICompatibleChatServiceProvider:()=>_e,OpenRouterChatService:()=>ve,OpenRouterChatServiceProvider:()=>Me,StreamTextAccumulator:()=>v,VISION_SUPPORTED_MODELS:()=>Le,XAIChatService:()=>Oe,XAIChatServiceProvider:()=>Ee,XAI_VISION_SUPPORTED_MODELS:()=>io,ZAIChatService:()=>Ce,ZAIChatServiceProvider:()=>Se,ZAI_VISION_SUPPORTED_MODELS:()=>so,allowsReasoningLow:()=>Vt,allowsReasoningMinimal:()=>wt,allowsReasoningNone:()=>Nt,allowsReasoningXHigh:()=>Dt,buildOpenAICompatibleTools:()=>P,getDefaultReasoningEffortForGPT5Model:()=>R,getMaxTokensForResponseLength:()=>O,installGASFetch:()=>mo,isGPT5Model:()=>q,isKimiVisionModel:()=>ne,isOpenRouterFreeModel:()=>z,isOpenRouterVisionModel:()=>te,isResponsesOnlyGPT5Model:()=>At,isXaiVisionModel:()=>ie,isZaiToolStreamModel:()=>Xt,isZaiVisionModel:()=>se,parseOpenAICompatibleOneShot:()=>L,parseOpenAICompatibleTextStream:()=>y,parseOpenAICompatibleToolStream:()=>T,processChatWithOptionalTools:()=>f,refreshOpenRouterFreeModels:()=>Wo,resolveVisionModel:()=>E,runOnceText:()=>Ao,screenplayToText:()=>Ro,textToScreenplay:()=>ao,textsToScreenplay:()=>bo});var Y="https://api.openai.com/v1/chat/completions",I="https://api.openai.com/v1/responses",W="gpt-5-nano",Q="gpt-5-mini",ee="gpt-5",B="gpt-5.1",N="gpt-5.4",w="gpt-5.5",K="gpt-5.4-mini",$="gpt-5.4-nano",V="gpt-5.4-pro",De="gpt-4.1",Ne="gpt-4.1-mini",we="gpt-4.1-nano",j="gpt-4o-mini",Ve="gpt-4o",It="o3-mini",bt="o1-mini",Rt="o1",Le=[W,Q,ee,B,N,w,K,$,V,De,Ne,we,j,Ve,"o1"],to=[W,Q,ee,B,N,w,K,$,V];function q(r){return to.includes(r)}function At(r){return r===V}function Dt(r){return r===w||r===N||r===K||r===$||r===V}function Nt(r){return r===B||r===N||r===w||r===K||r===$}function wt(r){return r===W||r===Q||r===ee}function Vt(r){return r!==V}function R(r){return r===B||r===N||r===w?"none":"medium"}var kt="https://generativelanguage.googleapis.com",ke="gemma-4-31b-it",Ge="gemma-4-26b-a4b-it",Fe="gemini-3.1-pro-preview",Ue="gemini-3.1-flash-lite-preview",He="gemini-3-pro-preview",We="gemini-3-flash-preview",Be="gemini-2.5-pro",Ke="gemini-2.5-flash",$e="gemini-2.5-flash-lite",je="gemini-2.5-flash-lite-preview-06-17",qe="gemini-2.0-flash",k="gemini-2.0-flash-lite",Pe=[ke,Ge,Fe,Ue,He,We,Be,Ke,$e,je,qe,k];var Gt="https://api.anthropic.com/v1/messages",ze="claude-3-haiku-20240307",Eo="claude-3-5-haiku-20241022",Co="claude-3-5-sonnet-20241022",So="claude-3-7-sonnet-20250219",Xe="claude-sonnet-4-20250514",Je="claude-opus-4-20250514",Ze="claude-sonnet-4-5-20250929",b="claude-haiku-4-5-20251001",Ye="claude-opus-4-5-20251101",Qe="claude-sonnet-4-6",et="claude-opus-4-6",tt="claude-opus-4-7",xe=[ze,Xe,Je,Ze,b,Ye,Qe,et,tt];var Ie="https://openrouter.ai/api/v1/chat/completions",G="openai/gpt-oss-20b:free",ot="moonshotai/kimi-k2.5",st="openai/gpt-5.1-chat",it="openai/gpt-5.1-codex",rt="openai/gpt-5-mini",nt="openai/gpt-5-nano",at="openai/gpt-4o",lt="openai/gpt-4.1-mini",pt="openai/gpt-4.1-nano",ct="anthropic/claude-opus-4",ut="anthropic/claude-sonnet-4",ht="anthropic/claude-3.7-sonnet",Ft="anthropic/claude-3.5-sonnet",dt="anthropic/claude-haiku-4.5",mt="google/gemini-2.5-pro",gt="google/gemini-2.5-flash",_t="google/gemini-2.5-flash-lite-preview-09-2025",Ut="z-ai/glm-4.7-flash",Ht="z-ai/glm-4.5-air",ft="z-ai/glm-4.5-air:free",Wt=[G,ft],oo=[st,it,rt,nt,at,lt,pt,ct,ut,ht,dt,mt,gt,_t,ot],Bt=20,yo=50,To=1e3,Lo=10;function z(r){return r.trim().endsWith(":free")}function te(r){return oo.some(e=>r.includes(e))}var be="https://api.z.ai/api/paas/v4/chat/completions",Kt="glm-5",$t="glm-5-turbo",oe="glm-4.7",jt="glm-4.7-FlashX",qt="glm-4.7-Flash",zt="glm-4.6",vt="glm-4.6V",Mt="glm-4.6V-FlashX",X="glm-4.6V-Flash",so=[vt,Mt,X];function se(r){return so.includes(r)}function Xt(r){return r.toLowerCase().startsWith("glm-4.6")}var Re="https://api.x.ai/v1/chat/completions",Ot="grok-4.20-0309-reasoning",Et="grok-4.20-0309-non-reasoning",Ct="grok-4-1-fast-reasoning",A="grok-4-1-fast-non-reasoning",io=[Ot,Et,Ct,A];function ie(r){return io.includes(r)}var re="https://api.moonshot.ai/v1/chat/completions",D="kimi-k2.6",St="kimi-k2.5",ro=[D,St];function ne(r){return ro.includes(r)}var C={VERY_SHORT:"veryShort",SHORT:"short",MEDIUM:"medium",LONG:"long",VERY_LONG:"veryLong",DEEP:"deep"},yt={[C.VERY_SHORT]:40,[C.SHORT]:100,[C.MEDIUM]:200,[C.LONG]:300,[C.VERY_LONG]:1e3,[C.DEEP]:5e3},Jt=5e3,Zt={casual:{reasoning_effort:"minimal",verbosity:"low",description:"Fast responses for casual chat, quick questions (GPT-4 like experience)"},balanced:{reasoning_effort:"medium",verbosity:"medium",description:"Balanced reasoning for business tasks, learning, general problem solving"},expert:{reasoning_effort:"high",verbosity:"high",description:"Deep reasoning for research, complex analysis, expert-level tasks"}};function O(r){return r?yt[r]??Jt:Jt}var Po="You are a friendly AI avatar. Comment on the situation based on the broadcast screen.",xo=`You are a skilled summarizing assistant.
2
2
  Analyze the following conversation and produce a summary in the **same language** as the majority of the conversation:
3
3
  - Summaries should highlight key points
4
4
  - Stay concise (around {maxLength} characters if possible)
@@ -7,15 +7,15 @@ Analyze the following conversation and produce a summary in the **same language*
7
7
  If the conversation is in Japanese, summarize in Japanese.
8
8
  If it's in English, summarize in English.
9
9
  If it's in another language, summarize in that language.
10
- `;var X="gemini-nano",Zt=20;var G=class extends Error{constructor(t,o,s){super(`HTTP ${t}: ${o}`);this.status=t;this.statusText=o;this.body=s;this.name="HttpError"}},Re=class Re{static setFetch(e){this.fetchImpl=e}static async post(e,t,o={},s={}){let{timeout:i=3e4,retries:n=0,retryDelay:a=1e3}=s,u={...{"Content-Type":"application/json"},...o},m=null;for(let c=0;c<=n;c++)try{let d=typeof AbortController<"u",p=d?new AbortController:void 0,h=d?setTimeout(()=>p.abort(),i):void 0,M=await Re.fetchImpl(e,{method:"POST",headers:u,body:typeof t=="string"?t:JSON.stringify(t),...p?{signal:p.signal}:{}});if(h&&clearTimeout(h),!M.ok){let S=await M.text();throw new G(M.status,M.statusText,S)}return M}catch(d){if(m=d,d instanceof G&&d.status>=400&&d.status<500)throw d;if(d instanceof Error&&d.name==="AbortError")throw new Error(`Request timeout after ${i}ms`);c<n&&await new Promise(p=>setTimeout(p,a*(c+1)))}throw m||new Error("Request failed")}static async handleErrorResponse(e){let t=await e.text();throw new G(e.status,e.statusText,t)}static async get(e,t={},o={}){let{timeout:s=3e4,retries:i=0,retryDelay:n=1e3}=o,a=null;for(let l=0;l<=i;l++)try{let u=typeof AbortController<"u",m=u?new AbortController:void 0,c=u?setTimeout(()=>m.abort(),s):void 0,d=await Re.fetchImpl(e,{method:"GET",headers:t,...m?{signal:m.signal}:{}});if(c&&clearTimeout(c),!d.ok){let p=await d.text();throw new G(d.status,d.statusText,p)}return d}catch(u){if(a=u,u instanceof G&&u.status>=400&&u.status<500)throw u;if(u instanceof Error&&u.name==="AbortError")throw new Error(`Request timeout after ${s}ms`);l<i&&await new Promise(m=>setTimeout(m,n*(l+1)))}throw a||new Error("Request failed")}};Re.fetchImpl=(e,t)=>fetch(e,t);var _=Re;var v=class{static append(e,t){if(!t)return;let o=e[e.length-1];o&&o.type==="text"?o.text+=t:e.push({type:"text",text:t})}static getFullText(e){return e.filter(t=>t.type==="text").map(t=>t.text).join("")}static addTextBlock(e,t){t&&e.push({type:"text",text:t})}};var xo=["happy","sad","angry","surprised","neutral"],ro=/\[([a-z]+)\]/i,Yt=/\[[a-z]+\]\s*/gi,ne=class{static extractEmotion(e){let t=e.match(ro);if(t){let o=t[1].toLowerCase(),s=e.replace(Yt,"").trim();return{emotion:o,cleanText:s}}return{cleanText:e}}static isValidEmotion(e){return xo.includes(e)}static cleanEmotionTags(e){return e.replace(Yt,"").trim()}static addEmotionTag(e,t){return`[${e}] ${t}`}};function no(r){let{emotion:e,cleanText:t}=ne.extractEmotion(r);return e?{emotion:e,text:t}:{text:t}}function Io(r){return r.map(e=>no(e))}function bo(r){return r.emotion?ne.addEmotionTag(r.emotion,r.text):r.text}async function Ro(r,e){let{blocks:t}=await r.chatOnce(e,!1,()=>{});return v.getFullText(t)}var ao=(r,e)=>{try{return JSON.parse(r)}catch(t){if(e){e(r,t);return}throw t}},lo=async(r,e)=>{let t=r.body?.getReader();if(!t)throw new Error("Response body is null.");let o=new TextDecoder,s="",i=!1;for(;!i;){let{done:n,value:a}=await t.read();if(n)break;s+=o.decode(a,{stream:!0});let l=s.split(`
11
- `);s=l.pop()||"";for(let u of l){let m=u.trim();if(!m||m.startsWith(":")||!m.startsWith("data:"))continue;let c=m.slice(5).trim();if(c==="[DONE]"){i=!0;break}e(c)}}};async function y(r,e,t={}){let o="";return await lo(r,s=>{let i=ao(s,t.onJsonError);if(!i)return;let n=i.choices?.[0]?.delta?.content||"";n&&(e(n),o+=n)}),o}async function T(r,e,t={}){let o=[],s=new Map,i,n,a=t.appendTextBlock??v.append;await lo(r,m=>{let c=ao(m,t.onJsonError);if(!c)return;let d=c.choices?.[0];typeof d?.finish_reason=="string"&&(i=d.finish_reason),c.usage&&(n=c.usage);let p=d?.delta;p?.content&&(e(p.content),a(o,p.content)),p?.tool_calls&&p.tool_calls.forEach(h=>{let M=s.get(h.index)??{id:h.id,name:h.function?.name,args:""};M.args+=h.function?.arguments||"",s.set(h.index,M)})});let l=Array.from(s.entries()).sort((m,c)=>m[0]-c[0]).map(([m,c])=>({type:"tool_use",id:c.id,name:c.name,input:JSON.parse(c.args||"{}")}));return{blocks:[...o,...l],stop_reason:l.length?"tool_use":"end",truncated:i==="length",finish_reason:i,usage:n}}function L(r){let e=r?.choices?.[0],t=[];return e?.message?.tool_calls?.length?e.message.tool_calls.forEach(o=>t.push({type:"tool_use",id:o.id,name:o.function?.name,input:JSON.parse(o.function?.arguments||"{}")})):e?.message?.content&&t.push({type:"text",text:e.message.content}),{blocks:t,stop_reason:e?.finish_reason==="tool_calls"||t.some(o=>o.type==="tool_use")?"tool_use":"end",truncated:e?.finish_reason==="length",finish_reason:e?.finish_reason,usage:r?.usage}}var P=(r,e="chat-completions")=>r.length===0?[]:e==="responses"?r.map(t=>({type:"function",name:t.name,description:t.description,parameters:t.parameters})):r.map(t=>({type:"function",function:{name:t.name,description:t.description,parameters:t.parameters}}));async function f(r){if(!r.hasTools){let t=await r.runWithoutTools();await r.onCompleteResponse(t);return}let e=await r.runWithTools();if(r.onToolBlocks&&r.onToolBlocks(e.blocks),e.stop_reason==="end"){let t=v.getFullText(e.blocks);await r.onCompleteResponse(t);return}throw new Error(r.toolErrorMessage)}var E=r=>{let e=r.model??r.defaultModel,t=r.visionModel??(r.supportsVisionForModel(e)?e:r.defaultVisionModel);if(r.validate==="explicit"&&r.visionModel&&!r.supportsVisionForModel(r.visionModel))throw new Error(`Model ${r.visionModel} does not support vision capabilities.`);if(r.validate==="resolved"&&!r.supportsVisionForModel(t))throw new Error(`Model ${t} does not support vision capabilities.`);return t};var Ao="https://openrouter.ai/api/v1/models",Do=2,No=12e3,wo=1,Vo=10;function Qt(r){return r instanceof Error?r.message:String(r)}function yt(r,e){return typeof r!="number"||!Number.isFinite(r)?e:Math.max(1,Math.floor(r))}function ko(r){let e=new Set,t=[];for(let o of r){let s=o.trim();!s||e.has(s)||(e.add(s),t.push(s))}return t}async function po(r,e,t){if(!(typeof AbortController<"u"))return fetch(r,e);let s=new AbortController,i=setTimeout(()=>s.abort(),t);try{return await fetch(r,{...e,signal:s.signal})}catch(n){throw n instanceof Error&&n.name==="AbortError"?new Error(`Timeout after ${t}ms`):n}finally{clearTimeout(i)}}async function co(r){let e=`HTTP ${r.status} ${r.statusText}`.trim(),t="";try{t=await r.text()}catch{return e}let o=t.replace(/\s+/g," ").trim().slice(0,200);return o?`${e}: ${o}`:e}function Go(r){if(!r||typeof r!="object")throw new Error("Invalid models response shape");let e=r,t=Array.isArray(e.data)?e.data:Array.isArray(e.models)?e.models:[];if(t.length===0)return[];let o=t.map(s=>s.id).filter(s=>typeof s=="string");return ko(o)}async function Fo({modelId:r,apiKey:e,endpoint:t,timeoutMs:o,appName:s,appUrl:i}){let n={Authorization:`Bearer ${e}`,"Content-Type":"application/json"};s&&(n["X-Title"]=s),i&&(n["HTTP-Referer"]=i);try{let a=await po(t,{method:"POST",headers:n,body:JSON.stringify({model:r,messages:[{role:"user",content:"Reply only with OK."}],stream:!1})},o);if(!a.ok)return{id:r,ok:!1,reason:await co(a)};try{await a.json()}catch(l){return{id:r,ok:!1,reason:`JSON parse failed: ${Qt(l)}`}}return{id:r,ok:!0}}catch(a){return{id:r,ok:!1,reason:Qt(a)}}}async function Uo(r,e,t){if(r.length===0)return[];let o=new Array(r.length),s=0,i=Math.min(e,r.length);return await Promise.all(Array.from({length:i},async()=>{for(;s<r.length;){let n=s;s+=1,o[n]=await t(r[n])}})),o}async function Ho(r){let e=r.apiKey.trim();if(!e)throw new Error("OpenRouter API key is required.");let t=r.modelsEndpoint||Ao,o=r.endpoint||xe,s=yt(r.timeoutMs,No),i=yt(r.concurrency,Do),n=yt(r.maxCandidates,wo),a=yt(r.maxWorking,Vo),l=await po(t,{method:"GET"},s);if(!l.ok)throw new Error(await co(l));let u;try{u=await l.json()}catch(h){throw new Error(`JSON parse failed: ${Qt(h)}`)}let m=Go(u).filter(h=>q(h)).slice(0,n),c=await Uo(m,i,h=>Fo({modelId:h,apiKey:e,endpoint:o,timeoutMs:s,appName:r.appName,appUrl:r.appUrl})),d=c.filter(h=>h.ok).map(h=>h.id).slice(0,a),p=c.filter(h=>!h.ok).map(h=>({id:h.id,reason:h.reason||"Unknown error"}));return{working:d,failed:p,fetchedAt:Date.now()}}var ae=class{constructor(e,t=b,o=b,s=[],i=[],n){this.provider="claude";if(this.apiKey=e,this.model=t||b,this.visionModel=o||b,this.tools=s,this.mcpServers=i,this.responseLength=n,!Pe.includes(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`)}getModel(){return this.model}getVisionModel(){return this.visionModel}getMCPServers(){return this.mcpServers}addMCPServer(e){this.mcpServers.push(e)}removeMCPServer(e){this.mcpServers=this.mcpServers.filter(t=>t.name!==e)}hasMCPServers(){return this.mcpServers.length>0}async processChat(e,t,o){await f({hasTools:this.tools.length>0||this.mcpServers.length>0,runWithoutTools:async()=>{let s=await this.callClaude(e,this.model,!0);return this.parsePureStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){await f({hasTools:this.tools.length>0||this.mcpServers.length>0,runWithoutTools:async()=>{let s=await this.callClaude(e,this.visionModel,!0);return this.parsePureStream(s,t)},runWithTools:()=>this.visionChatOnce(e),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}convertMessagesToClaudeFormat(e){return e.map(t=>({role:this.mapRoleToClaude(t.role),content:t.content}))}convertVisionMessagesToClaudeFormat(e){return e.map(t=>{if(typeof t.content=="string")return{role:this.mapRoleToClaude(t.role),content:[{type:"text",text:t.content}]};if(Array.isArray(t.content)){let o=t.content.map(s=>{if(s.type==="image_url"){if(s.image_url.url.startsWith("data:")){let i=s.image_url.url.match(/^data:([^;]+);base64,(.+)$/);return i?{type:"image",source:{type:"base64",media_type:i[1],data:i[2]}}:null}return{type:"image",source:{type:"url",url:s.image_url.url,media_type:this.getMimeTypeFromUrl(s.image_url.url)}}}return s}).filter(s=>s);return{role:this.mapRoleToClaude(t.role),content:o}}return{role:this.mapRoleToClaude(t.role),content:[]}})}mapRoleToClaude(e){switch(e){case"system":return"system";case"user":return"user";case"assistant":return"assistant";default:return"user"}}getMimeTypeFromUrl(e){switch(e.split(".").pop()?.toLowerCase()){case"jpg":case"jpeg":return"image/jpeg";case"png":return"image/png";case"gif":return"image/gif";case"webp":return"image/webp";default:return"image/jpeg"}}async callClaude(e,t,o,s){let i=e.find(c=>c.role==="system")?.content??"",n=e.filter(c=>c.role!=="system"),a=n.some(c=>Array.isArray(c.content)&&c.content.some(d=>d.type==="image_url"||d.type==="image")),l={model:t,system:i,messages:a?this.convertVisionMessagesToClaudeFormat(n):this.convertMessagesToClaudeFormat(n),stream:o,max_tokens:s!==void 0?s:O(this.responseLength)};this.tools.length&&(l.tools=this.tools.map(c=>({name:c.name,description:c.description,input_schema:c.parameters})),l.tool_choice={type:"auto"}),this.mcpServers.length>0&&(l.mcp_servers=this.mcpServers);let u={"Content-Type":"application/json","x-api-key":this.apiKey,"anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true"};return this.mcpServers.length>0&&(u["anthropic-beta"]="mcp-client-2025-04-04"),await _.post(kt,l,u)}async parseStream(e,t){let o=e.body.getReader(),s=new TextDecoder,i=[],n=new Map,a="";for(;;){let{done:l,value:u}=await o.read();if(l)break;a+=s.decode(u,{stream:!0});let m;for(;(m=a.indexOf(`
12
- `))!==-1;){let c=a.slice(0,m).trim();if(a=a.slice(m+1),!c.startsWith("data:"))continue;let d=c.slice(5).trim();if(d==="[DONE]")break;let p=JSON.parse(d);if(p.type==="content_block_delta"&&p.delta?.text&&(t(p.delta.text),i.push({type:"text",text:p.delta.text})),p.type==="content_block_start"&&p.content_block?.type==="tool_use"?n.set(p.index,{id:p.content_block.id,name:p.content_block.name,args:""}):p.type==="content_block_start"&&p.content_block?.type==="mcp_tool_use"?n.set(p.index,{id:p.content_block.id,name:p.content_block.name,args:"",server_name:p.content_block.server_name}):p.type==="content_block_start"&&p.content_block?.type==="tool_result"?i.push({type:"tool_result",tool_use_id:p.content_block.tool_use_id,content:p.content_block.content??""}):p.type==="content_block_start"&&p.content_block?.type==="mcp_tool_result"&&i.push({type:"mcp_tool_result",tool_use_id:p.content_block.tool_use_id,is_error:p.content_block.is_error??!1,content:p.content_block.content??[]}),p.type==="content_block_delta"&&p.delta?.type==="input_json_delta"){let h=n.get(p.index);h&&(h.args+=p.delta.partial_json||"")}if(p.type==="content_block_stop"&&n.has(p.index)){let{id:h,name:M,args:S,server_name:g}=n.get(p.index);g?i.push({type:"mcp_tool_use",id:h,name:M,server_name:g,input:JSON.parse(S||"{}")}):i.push({type:"tool_use",id:h,name:M,input:JSON.parse(S||"{}")}),n.delete(p.index)}}}return{blocks:i,stop_reason:i.some(l=>l.type==="tool_use"||l.type==="mcp_tool_use")?"tool_use":"end"}}async parsePureStream(e,t){let{blocks:o}=await this.parseStream(e,t);return o.filter(s=>s.type==="text").map(s=>s.text).join("")}parseOneShot(e){let t=[];return(e.content??[]).forEach(o=>{o.type==="text"?t.push({type:"text",text:o.text}):o.type==="tool_use"?t.push({type:"tool_use",id:o.id,name:o.name,input:o.input??{}}):o.type==="mcp_tool_use"?t.push({type:"mcp_tool_use",id:o.id,name:o.name,server_name:o.server_name,input:o.input??{}}):o.type==="tool_result"?t.push({type:"tool_result",tool_use_id:o.tool_use_id,content:o.content??""}):o.type==="mcp_tool_result"&&t.push({type:"mcp_tool_result",tool_use_id:o.tool_use_id,is_error:o.is_error??!1,content:o.content??[]})}),{blocks:t,stop_reason:t.some(o=>o.type==="tool_use"||o.type==="mcp_tool_use")?"tool_use":"end"}}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callClaude(e,this.model,t,s),n=t?await this.parseStream(i,o):this.parseOneShot(await i.json());return this.convertToStandardCompletion(n)}async visionChatOnce(e,t=!1,o=()=>{},s){let i=await this.callClaude(e,this.visionModel,t,s),n=t?await this.parseStream(i,o):this.parseOneShot(await i.json());return this.convertToStandardCompletion(n)}convertToStandardCompletion(e){return{blocks:e.blocks.filter(o=>o.type==="text"||o.type==="tool_use"||o.type==="tool_result"),stop_reason:e.stop_reason}}};var le=class{createChatService(e){let t=E({model:e.model,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultModel(),supportsVisionForModel:o=>this.supportsVisionForModel(o),validate:"resolved"});return new ae(e.apiKey,e.model||this.getDefaultModel(),t,e.tools??[],e.mcpServers??[],e.responseLength)}getProviderName(){return"claude"}getSupportedModels(){return[ze,Xe,Je,b,Ze,Ye,Qe,et,qe]}getDefaultModel(){return b}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return Pe.includes(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}};var Tt=class{static async fetchToolSchemas(e){try{let t={"Content-Type":"application/json"};e.authorization_token&&(t.Authorization=`Bearer ${e.authorization_token}`);let s=await(await _.post(`${e.url}/tools`,{},t)).json();return Array.isArray(s.tools)?s.tools.map(i=>({name:`mcp_${e.name}_${i.name}`,description:i.description||`Tool from ${e.name} MCP server`,parameters:i.inputSchema||{type:"object",properties:{},required:[]}})):[{name:`mcp_${e.name}_search`,description:`Search using ${e.name} MCP server`,parameters:{type:"object",properties:{query:{type:"string",description:"Search query"}},required:["query"]}}]}catch(t){return console.warn(`Failed to fetch MCP schemas from ${e.name}:`,t),[{name:`mcp_${e.name}_search`,description:`Search using ${e.name} MCP server (schema fetch failed)`,parameters:{type:"object",properties:{query:{type:"string",description:"Search query"}},required:["query"]}}]}}static async fetchAllToolSchemas(e){let t=[];for(let o of e)try{let s=await this.fetchToolSchemas(o);t.push(...s)}catch(s){console.error(`Failed to fetch schemas from ${o.name}:`,s)}return t}};var pe=class{constructor(e,t=V,o=V,s=[],i=[],n){this.provider="gemini";this.mcpToolSchemas=[];this.mcpSchemasInitialized=!1;this.callIdMap=new Map;if(this.apiKey=e,this.model=t,this.responseLength=n,!Le.includes(o))throw new Error(`Model ${o} does not support vision capabilities.`);this.visionModel=o,this.tools=s,this.mcpServers=i}safeJsonParse(e){try{return JSON.parse(e)}catch{return e}}normalizeToolResult(e){return e===null?{content:null}:typeof e=="object"?e:{content:e}}isGemma4Model(e){return/^gemma-4-/.test(e)}shouldExposeTextPart(e,t){return!(!e.text||this.isGemma4Model(t)&&e.thought===!0)}adaptKeysForApi(e){let t={toolConfig:"tool_config",functionCallingConfig:"function_calling_config",functionDeclarations:"function_declarations",functionCall:"function_call",functionResponse:"function_response"};return Array.isArray(e)?e.map(o=>this.adaptKeysForApi(o)):e&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([o,s])=>[t[o]??o,this.adaptKeysForApi(s)])):e}getModel(){return this.model}getVisionModel(){return this.visionModel}getMCPServers(){return this.mcpServers}addMCPServer(e){this.mcpServers.push(e),this.mcpSchemasInitialized=!1}removeMCPServer(e){this.mcpServers=this.mcpServers.filter(t=>t.name!==e),this.mcpSchemasInitialized=!1}hasMCPServers(){return this.mcpServers.length>0}async initializeMCPSchemas(){if(!(this.mcpSchemasInitialized||this.mcpServers.length===0))try{let e=new Promise((o,s)=>setTimeout(()=>s(new Error("MCP schema fetch timeout")),5e3)),t=Tt.fetchAllToolSchemas(this.mcpServers);this.mcpToolSchemas=await Promise.race([t,e]),this.mcpSchemasInitialized=!0}catch(e){console.warn("Failed to initialize MCP schemas, using fallback:",e),this.mcpToolSchemas=this.mcpServers.map(t=>({name:`mcp_${t.name}_search`,description:`Search using ${t.name} MCP server (fallback)`,parameters:{type:"object",properties:{query:{type:"string",description:"Search query"}},required:["query"]}})),this.mcpSchemasInitialized=!0}}async processChat(e,t,o){try{await f({hasTools:this.tools.length>0||this.mcpServers.length>0,runWithoutTools:async()=>{let s=await this.callGemini(e,this.model,!0),{blocks:i}=await this.parseStream(s,t,this.model);return v.getFullText(i)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"Received functionCall. Use chatOnce() loop when tools are enabled."})}catch(s){throw console.error("Error in processChat:",s),s}}async processVisionChat(e,t,o){try{await f({hasTools:this.tools.length>0||this.mcpServers.length>0,runWithoutTools:async()=>{let s=await this.callGemini(e,this.visionModel,!0),{blocks:i}=await this.parseStream(s,t,this.visionModel);return v.getFullText(i)},runWithTools:()=>this.visionChatOnce(e),onToolBlocks:s=>{s.filter(i=>i.type==="text").forEach(i=>t(i.text))},onCompleteResponse:o,toolErrorMessage:"Received functionCall. Use visionChatOnce() loop when tools are enabled."})}catch(s){throw console.error("Error in processVisionChat:",s),s}}convertMessagesToGeminiFormat(e){let t=[],o=null,s=[],i=()=>{o&&s.length&&(t.push({role:o,parts:[...s]}),s=[])};for(let n of e){let a=this.mapRoleToGemini(n.role);if(n.tool_calls){i();for(let l of n.tool_calls)this.callIdMap.set(l.id,l.function.name),t.push({role:"model",parts:[{functionCall:{name:l.function.name,args:JSON.parse(l.function.arguments||"{}")}}]});continue}if(n.role==="tool"){i();let l=n.name??this.callIdMap.get(n.tool_call_id)??"result";t.push({role:"user",parts:[{functionResponse:{name:l,response:this.normalizeToolResult(this.safeJsonParse(n.content))}}]});continue}a!==o&&i(),o=a,s.push({text:n.content})}return i(),t}async callGemini(e,t,o=!1,s){let a={contents:e.some(g=>Array.isArray(g.content)&&g.content.some(x=>x?.type==="image_url"||x?.inlineData))?await this.convertVisionMessagesToGeminiFormat(e):this.convertMessagesToGeminiFormat(e),generationConfig:{maxOutputTokens:s!==void 0?s:O(this.responseLength)}};this.isGemma4Model(t)&&(a.generationConfig.thinkingConfig={includeThoughts:!1,thinkingLevel:"minimal"});let l=[];if(this.tools.length>0&&l.push(...this.tools.map(g=>({name:g.name,description:g.description,parameters:g.parameters}))),this.mcpServers.length>0)try{await this.initializeMCPSchemas(),l.push(...this.mcpToolSchemas.map(g=>({name:g.name,description:g.description,parameters:g.parameters})))}catch(g){console.warn("MCP initialization failed, skipping MCP tools:",g)}l.length>0&&(a.tools=[{functionDeclarations:l}],a.toolConfig={functionCallingConfig:{mode:"AUTO"}});let u=async(g,x)=>{let U=o?"streamGenerateContent":"generateContent",ye=o?"?alt=sse":"",Lt=`${Vt}/${g}/models/${t}:${U}${ye}${ye?"&":"?"}key=${this.apiKey}`;return _.post(Lt,x)},m=/flash[-_]lite/.test(t),c=this.isGemma4Model(t),d=/gemini-2\.5/.test(t),p=/^gemini-3(?:\.[0-9]+)?-.*preview/.test(t),h=m||c||d||p,M=h?"v1beta":"v1",S=async()=>{try{let g=M==="v1"?a:this.adaptKeysForApi(a);return await u(M,g)}catch(g){let x=/Unknown name|Cannot find field|404/.test(g?.message||"")||g?.status===404;if(!h&&x)return await u("v1beta",this.adaptKeysForApi(a));throw g}};try{return await S()}catch(g){throw g.body&&(console.error("Gemini API Error Details:",g.body),console.error("Request Body:",JSON.stringify(a,null,2))),g}}async convertVisionMessagesToGeminiFormat(e){let t=[],o=null,s=[];for(let i of e){let n=this.mapRoleToGemini(i.role);if(i.tool_calls){for(let a of i.tool_calls)t.push({role:"model",parts:[{functionCall:{name:a.function.name,args:JSON.parse(a.function.arguments||"{}")}}]});continue}if(i.role==="tool"){let a=i.name??this.callIdMap.get(i.tool_call_id)??"result";t.push({role:"user",parts:[{functionResponse:{name:a,response:this.normalizeToolResult(this.safeJsonParse(i.content))}}]});continue}if(n!==o&&s.length>0&&(t.push({role:o,parts:[...s]}),s=[]),o=n,typeof i.content=="string")s.push({text:i.content});else if(Array.isArray(i.content)){for(let a of i.content)if(a.type==="text")s.push({text:a.text});else if(a.type==="image_url")try{let u=await(await _.get(a.image_url.url)).blob(),m=await this.blobToBase64(u);s.push({inlineData:{mimeType:u.type||"image/jpeg",data:m.split(",")[1]}})}catch(l){throw console.error("Error processing image:",l),new Error(`Failed to process image: ${l.message}`)}}}return o&&s.length>0&&t.push({role:o,parts:[...s]}),t}blobToBase64(e){return new Promise((t,o)=>{let s=new FileReader;s.onloadend=()=>t(s.result),s.onerror=o,s.readAsDataURL(e)})}mapRoleToGemini(e){switch(e){case"system":return"model";case"user":return"user";case"assistant":return"model";default:return"user"}}async parseStream(e,t,o){let s=e.body.getReader(),i=new TextDecoder,n=[],a=[],l="",u=c=>{if(!c||c==="[DONE]")return;let d;try{d=JSON.parse(c)}catch{return}for(let p of d.candidates??[])for(let h of p.content?.parts??[])this.shouldExposeTextPart(h,o)&&(t(h.text),v.addTextBlock(n,h.text)),h.functionCall&&a.push({type:"tool_use",id:this.genUUID(),name:h.functionCall.name,input:h.functionCall.args??{}}),h.functionResponse&&a.push({type:"tool_result",tool_use_id:h.functionResponse.name,content:JSON.stringify(h.functionResponse.response)})};for(;;){let{done:c,value:d}=await s.read();if(c)break;l+=i.decode(d,{stream:!0});let p;for(;(p=l.indexOf(`
13
- `))!==-1;){let h=l.slice(0,p);if(l=l.slice(p+1),h.endsWith("\r")&&(h=h.slice(0,-1)),!h.trim()){u("");continue}h.startsWith("data:")&&(h=h.slice(5).trim()),h&&u(h)}}return l&&u(l),{blocks:[...n,...a],stop_reason:a.some(c=>c.type==="tool_use")?"tool_use":"end"}}parseOneShot(e,t){let o=[],s=[];for(let n of e.candidates??[])for(let a of n.content?.parts??[])this.shouldExposeTextPart(a,t)&&o.push({type:"text",text:a.text}),a.functionCall&&s.push({type:"tool_use",id:this.genUUID(),name:a.functionCall.name,input:a.functionCall.args??{}}),a.functionResponse&&s.push({type:"tool_result",tool_use_id:a.functionResponse.name,content:JSON.stringify(a.functionResponse.response)});return{blocks:[...o,...s],stop_reason:s.some(n=>n.type==="tool_use")?"tool_use":"end"}}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callGemini(e,this.model,t,s);return t?this.parseStream(i,o,this.model):this.parseOneShot(await i.json(),this.model)}async visionChatOnce(e,t=!1,o=()=>{},s){let i=await this.callGemini(e,this.visionModel,t,s);return t?this.parseStream(i,o,this.visionModel):this.parseOneShot(await i.json(),this.visionModel)}genUUID(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}};var ce=class{createChatService(e){let t=E({model:e.model,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultModel(),supportsVisionForModel:o=>this.supportsVisionForModel(o),validate:"resolved"});return new pe(e.apiKey,e.model||this.getDefaultModel(),t,e.tools||[],e.mcpServers||[],e.responseLength)}getProviderName(){return"gemini"}getSupportedModels(){return[Ve,ke,Ge,Fe,Ue,He,We,Be,Ke,$e,je,V]}getDefaultModel(){return V}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return Le.includes(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}};function Wo(){if(typeof globalThis<"u"&&"LanguageModel"in globalThis)return globalThis.LanguageModel}var ue=class{constructor(e={}){this.provider="gemini-nano";this.expectedInputLanguages=e.expectedInputLanguages??["ja"],this.expectedOutputLanguages=e.expectedOutputLanguages??["ja"],this._responseLength=e.responseLength}getModel(){return X}getVisionModel(){return X}async processChat(e,t,o){let s=await this.generateResponse(e);t(s),await o(s)}async processVisionChat(e,t,o){throw new Error("Gemini Nano does not support vision capabilities.")}async chatOnce(e,t=!1,o=()=>{},s){let i=await this.generateResponse(e);return o(i),{blocks:[{type:"text",text:i}],stop_reason:"end"}}async visionChatOnce(e,t=!1,o=()=>{},s){throw new Error("Gemini Nano does not support vision capabilities.")}async generateResponse(e){let t=Wo();if(!t)throw new Error("Gemini Nano is not available in this environment. Chrome 138+ with Prompt API enabled is required.");let o=await t.availability();if(o!=="available"&&o!=="downloadable")throw new Error(`Gemini Nano Prompt API is not ready in this environment. LanguageModel.availability() returned "${o}". Expected "available" or "downloadable".`);let i=e.filter(u=>u.role==="system").map(u=>u.content).join(`
10
+ `;var J="gemini-nano",Yt=20;var F=class extends Error{constructor(t,o,s){super(`HTTP ${t}: ${o}`);this.status=t;this.statusText=o;this.body=s;this.name="HttpError"}},Ae=class Ae{static setFetch(e){this.fetchImpl=e}static async post(e,t,o={},s={}){let{timeout:i=3e4,retries:n=0,retryDelay:a=1e3}=s,u={...{"Content-Type":"application/json"},...o},m=null;for(let c=0;c<=n;c++)try{let d=typeof AbortController<"u",p=d?new AbortController:void 0,h=d?setTimeout(()=>p.abort(),i):void 0,M=await Ae.fetchImpl(e,{method:"POST",headers:u,body:typeof t=="string"?t:JSON.stringify(t),...p?{signal:p.signal}:{}});if(h&&clearTimeout(h),!M.ok){let S=await M.text();throw new F(M.status,M.statusText,S)}return M}catch(d){if(m=d,d instanceof F&&d.status>=400&&d.status<500)throw d;if(d instanceof Error&&d.name==="AbortError")throw new Error(`Request timeout after ${i}ms`);c<n&&await new Promise(p=>setTimeout(p,a*(c+1)))}throw m||new Error("Request failed")}static async handleErrorResponse(e){let t=await e.text();throw new F(e.status,e.statusText,t)}static async get(e,t={},o={}){let{timeout:s=3e4,retries:i=0,retryDelay:n=1e3}=o,a=null;for(let l=0;l<=i;l++)try{let u=typeof AbortController<"u",m=u?new AbortController:void 0,c=u?setTimeout(()=>m.abort(),s):void 0,d=await Ae.fetchImpl(e,{method:"GET",headers:t,...m?{signal:m.signal}:{}});if(c&&clearTimeout(c),!d.ok){let p=await d.text();throw new F(d.status,d.statusText,p)}return d}catch(u){if(a=u,u instanceof F&&u.status>=400&&u.status<500)throw u;if(u instanceof Error&&u.name==="AbortError")throw new Error(`Request timeout after ${s}ms`);l<i&&await new Promise(m=>setTimeout(m,n*(l+1)))}throw a||new Error("Request failed")}};Ae.fetchImpl=(e,t)=>fetch(e,t);var _=Ae;var v=class{static append(e,t){if(!t)return;let o=e[e.length-1];o&&o.type==="text"?o.text+=t:e.push({type:"text",text:t})}static getFullText(e){return e.filter(t=>t.type==="text").map(t=>t.text).join("")}static addTextBlock(e,t){t&&e.push({type:"text",text:t})}};var Io=["happy","sad","angry","surprised","neutral"],no=/\[([a-z]+)\]/i,Qt=/\[[a-z]+\]\s*/gi,ae=class{static extractEmotion(e){let t=e.match(no);if(t){let o=t[1].toLowerCase(),s=e.replace(Qt,"").trim();return{emotion:o,cleanText:s}}return{cleanText:e}}static isValidEmotion(e){return Io.includes(e)}static cleanEmotionTags(e){return e.replace(Qt,"").trim()}static addEmotionTag(e,t){return`[${e}] ${t}`}};function ao(r){let{emotion:e,cleanText:t}=ae.extractEmotion(r);return e?{emotion:e,text:t}:{text:t}}function bo(r){return r.map(e=>ao(e))}function Ro(r){return r.emotion?ae.addEmotionTag(r.emotion,r.text):r.text}async function Ao(r,e){let{blocks:t}=await r.chatOnce(e,!1,()=>{});return v.getFullText(t)}var lo=(r,e)=>{try{return JSON.parse(r)}catch(t){if(e){e(r,t);return}throw t}},po=async(r,e)=>{let t=r.body?.getReader();if(!t)throw new Error("Response body is null.");let o=new TextDecoder,s="",i=!1;for(;!i;){let{done:n,value:a}=await t.read();if(n)break;s+=o.decode(a,{stream:!0});let l=s.split(`
11
+ `);s=l.pop()||"";for(let u of l){let m=u.trim();if(!m||m.startsWith(":")||!m.startsWith("data:"))continue;let c=m.slice(5).trim();if(c==="[DONE]"){i=!0;break}e(c)}}};async function y(r,e,t={}){let o="";return await po(r,s=>{let i=lo(s,t.onJsonError);if(!i)return;let n=i.choices?.[0]?.delta?.content||"";n&&(e(n),o+=n)}),o}async function T(r,e,t={}){let o=[],s=new Map,i,n,a=t.appendTextBlock??v.append;await po(r,m=>{let c=lo(m,t.onJsonError);if(!c)return;let d=c.choices?.[0];typeof d?.finish_reason=="string"&&(i=d.finish_reason),c.usage&&(n=c.usage);let p=d?.delta;p?.content&&(e(p.content),a(o,p.content)),p?.tool_calls&&p.tool_calls.forEach(h=>{let M=s.get(h.index)??{id:h.id,name:h.function?.name,args:""};M.args+=h.function?.arguments||"",s.set(h.index,M)})});let l=Array.from(s.entries()).sort((m,c)=>m[0]-c[0]).map(([m,c])=>({type:"tool_use",id:c.id,name:c.name,input:JSON.parse(c.args||"{}")}));return{blocks:[...o,...l],stop_reason:l.length?"tool_use":"end",truncated:i==="length",finish_reason:i,usage:n}}function L(r){let e=r?.choices?.[0],t=[];return e?.message?.tool_calls?.length?e.message.tool_calls.forEach(o=>t.push({type:"tool_use",id:o.id,name:o.function?.name,input:JSON.parse(o.function?.arguments||"{}")})):e?.message?.content&&t.push({type:"text",text:e.message.content}),{blocks:t,stop_reason:e?.finish_reason==="tool_calls"||t.some(o=>o.type==="tool_use")?"tool_use":"end",truncated:e?.finish_reason==="length",finish_reason:e?.finish_reason,usage:r?.usage}}var P=(r,e="chat-completions")=>r.length===0?[]:e==="responses"?r.map(t=>({type:"function",name:t.name,description:t.description,parameters:t.parameters})):r.map(t=>({type:"function",function:{name:t.name,description:t.description,parameters:t.parameters}}));async function f(r){if(!r.hasTools){let t=await r.runWithoutTools();await r.onCompleteResponse(t);return}let e=await r.runWithTools();if(r.onToolBlocks&&r.onToolBlocks(e.blocks),e.stop_reason==="end"){let t=v.getFullText(e.blocks);await r.onCompleteResponse(t);return}throw new Error(r.toolErrorMessage)}var E=r=>{let e=r.model??r.defaultModel,t=r.visionModel??(r.supportsVisionForModel(e)?e:r.defaultVisionModel);if(r.validate==="explicit"&&r.visionModel&&!r.supportsVisionForModel(r.visionModel))throw new Error(`Model ${r.visionModel} does not support vision capabilities.`);if(r.validate==="resolved"&&!r.supportsVisionForModel(t))throw new Error(`Model ${t} does not support vision capabilities.`);return t};var Do="https://openrouter.ai/api/v1/models",No=2,wo=12e3,Vo=1,ko=10;function eo(r){return r instanceof Error?r.message:String(r)}function Tt(r,e){return typeof r!="number"||!Number.isFinite(r)?e:Math.max(1,Math.floor(r))}function Go(r){let e=new Set,t=[];for(let o of r){let s=o.trim();!s||e.has(s)||(e.add(s),t.push(s))}return t}async function co(r,e,t){if(!(typeof AbortController<"u"))return fetch(r,e);let s=new AbortController,i=setTimeout(()=>s.abort(),t);try{return await fetch(r,{...e,signal:s.signal})}catch(n){throw n instanceof Error&&n.name==="AbortError"?new Error(`Timeout after ${t}ms`):n}finally{clearTimeout(i)}}async function uo(r){let e=`HTTP ${r.status} ${r.statusText}`.trim(),t="";try{t=await r.text()}catch{return e}let o=t.replace(/\s+/g," ").trim().slice(0,200);return o?`${e}: ${o}`:e}function Fo(r){if(!r||typeof r!="object")throw new Error("Invalid models response shape");let e=r,t=Array.isArray(e.data)?e.data:Array.isArray(e.models)?e.models:[];if(t.length===0)return[];let o=t.map(s=>s.id).filter(s=>typeof s=="string");return Go(o)}async function Uo({modelId:r,apiKey:e,endpoint:t,timeoutMs:o,appName:s,appUrl:i}){let n={Authorization:`Bearer ${e}`,"Content-Type":"application/json"};s&&(n["X-Title"]=s),i&&(n["HTTP-Referer"]=i);try{let a=await co(t,{method:"POST",headers:n,body:JSON.stringify({model:r,messages:[{role:"user",content:"Reply only with OK."}],stream:!1})},o);if(!a.ok)return{id:r,ok:!1,reason:await uo(a)};try{await a.json()}catch(l){return{id:r,ok:!1,reason:`JSON parse failed: ${eo(l)}`}}return{id:r,ok:!0}}catch(a){return{id:r,ok:!1,reason:eo(a)}}}async function Ho(r,e,t){if(r.length===0)return[];let o=new Array(r.length),s=0,i=Math.min(e,r.length);return await Promise.all(Array.from({length:i},async()=>{for(;s<r.length;){let n=s;s+=1,o[n]=await t(r[n])}})),o}async function Wo(r){let e=r.apiKey.trim();if(!e)throw new Error("OpenRouter API key is required.");let t=r.modelsEndpoint||Do,o=r.endpoint||Ie,s=Tt(r.timeoutMs,wo),i=Tt(r.concurrency,No),n=Tt(r.maxCandidates,Vo),a=Tt(r.maxWorking,ko),l=await co(t,{method:"GET"},s);if(!l.ok)throw new Error(await uo(l));let u;try{u=await l.json()}catch(h){throw new Error(`JSON parse failed: ${eo(h)}`)}let m=Fo(u).filter(h=>z(h)).slice(0,n),c=await Ho(m,i,h=>Uo({modelId:h,apiKey:e,endpoint:o,timeoutMs:s,appName:r.appName,appUrl:r.appUrl})),d=c.filter(h=>h.ok).map(h=>h.id).slice(0,a),p=c.filter(h=>!h.ok).map(h=>({id:h.id,reason:h.reason||"Unknown error"}));return{working:d,failed:p,fetchedAt:Date.now()}}var le=class{constructor(e,t=b,o=b,s=[],i=[],n){this.provider="claude";if(this.apiKey=e,this.model=t||b,this.visionModel=o||b,this.tools=s,this.mcpServers=i,this.responseLength=n,!xe.includes(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`)}getModel(){return this.model}getVisionModel(){return this.visionModel}getMCPServers(){return this.mcpServers}addMCPServer(e){this.mcpServers.push(e)}removeMCPServer(e){this.mcpServers=this.mcpServers.filter(t=>t.name!==e)}hasMCPServers(){return this.mcpServers.length>0}async processChat(e,t,o){await f({hasTools:this.tools.length>0||this.mcpServers.length>0,runWithoutTools:async()=>{let s=await this.callClaude(e,this.model,!0);return this.parsePureStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){await f({hasTools:this.tools.length>0||this.mcpServers.length>0,runWithoutTools:async()=>{let s=await this.callClaude(e,this.visionModel,!0);return this.parsePureStream(s,t)},runWithTools:()=>this.visionChatOnce(e),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}convertMessagesToClaudeFormat(e){return e.map(t=>({role:this.mapRoleToClaude(t.role),content:t.content}))}convertVisionMessagesToClaudeFormat(e){return e.map(t=>{if(typeof t.content=="string")return{role:this.mapRoleToClaude(t.role),content:[{type:"text",text:t.content}]};if(Array.isArray(t.content)){let o=t.content.map(s=>{if(s.type==="image_url"){if(s.image_url.url.startsWith("data:")){let i=s.image_url.url.match(/^data:([^;]+);base64,(.+)$/);return i?{type:"image",source:{type:"base64",media_type:i[1],data:i[2]}}:null}return{type:"image",source:{type:"url",url:s.image_url.url,media_type:this.getMimeTypeFromUrl(s.image_url.url)}}}return s}).filter(s=>s);return{role:this.mapRoleToClaude(t.role),content:o}}return{role:this.mapRoleToClaude(t.role),content:[]}})}mapRoleToClaude(e){switch(e){case"system":return"system";case"user":return"user";case"assistant":return"assistant";default:return"user"}}getMimeTypeFromUrl(e){switch(e.split(".").pop()?.toLowerCase()){case"jpg":case"jpeg":return"image/jpeg";case"png":return"image/png";case"gif":return"image/gif";case"webp":return"image/webp";default:return"image/jpeg"}}async callClaude(e,t,o,s){let i=e.find(c=>c.role==="system")?.content??"",n=e.filter(c=>c.role!=="system"),a=n.some(c=>Array.isArray(c.content)&&c.content.some(d=>d.type==="image_url"||d.type==="image")),l={model:t,system:i,messages:a?this.convertVisionMessagesToClaudeFormat(n):this.convertMessagesToClaudeFormat(n),stream:o,max_tokens:s!==void 0?s:O(this.responseLength)};this.tools.length&&(l.tools=this.tools.map(c=>({name:c.name,description:c.description,input_schema:c.parameters})),l.tool_choice={type:"auto"}),this.mcpServers.length>0&&(l.mcp_servers=this.mcpServers);let u={"Content-Type":"application/json","x-api-key":this.apiKey,"anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true"};return this.mcpServers.length>0&&(u["anthropic-beta"]="mcp-client-2025-04-04"),await _.post(Gt,l,u)}async parseStream(e,t){let o=e.body.getReader(),s=new TextDecoder,i=[],n=new Map,a="";for(;;){let{done:l,value:u}=await o.read();if(l)break;a+=s.decode(u,{stream:!0});let m;for(;(m=a.indexOf(`
12
+ `))!==-1;){let c=a.slice(0,m).trim();if(a=a.slice(m+1),!c.startsWith("data:"))continue;let d=c.slice(5).trim();if(d==="[DONE]")break;let p=JSON.parse(d);if(p.type==="content_block_delta"&&p.delta?.text&&(t(p.delta.text),i.push({type:"text",text:p.delta.text})),p.type==="content_block_start"&&p.content_block?.type==="tool_use"?n.set(p.index,{id:p.content_block.id,name:p.content_block.name,args:""}):p.type==="content_block_start"&&p.content_block?.type==="mcp_tool_use"?n.set(p.index,{id:p.content_block.id,name:p.content_block.name,args:"",server_name:p.content_block.server_name}):p.type==="content_block_start"&&p.content_block?.type==="tool_result"?i.push({type:"tool_result",tool_use_id:p.content_block.tool_use_id,content:p.content_block.content??""}):p.type==="content_block_start"&&p.content_block?.type==="mcp_tool_result"&&i.push({type:"mcp_tool_result",tool_use_id:p.content_block.tool_use_id,is_error:p.content_block.is_error??!1,content:p.content_block.content??[]}),p.type==="content_block_delta"&&p.delta?.type==="input_json_delta"){let h=n.get(p.index);h&&(h.args+=p.delta.partial_json||"")}if(p.type==="content_block_stop"&&n.has(p.index)){let{id:h,name:M,args:S,server_name:g}=n.get(p.index);g?i.push({type:"mcp_tool_use",id:h,name:M,server_name:g,input:JSON.parse(S||"{}")}):i.push({type:"tool_use",id:h,name:M,input:JSON.parse(S||"{}")}),n.delete(p.index)}}}return{blocks:i,stop_reason:i.some(l=>l.type==="tool_use"||l.type==="mcp_tool_use")?"tool_use":"end"}}async parsePureStream(e,t){let{blocks:o}=await this.parseStream(e,t);return o.filter(s=>s.type==="text").map(s=>s.text).join("")}parseOneShot(e){let t=[];return(e.content??[]).forEach(o=>{o.type==="text"?t.push({type:"text",text:o.text}):o.type==="tool_use"?t.push({type:"tool_use",id:o.id,name:o.name,input:o.input??{}}):o.type==="mcp_tool_use"?t.push({type:"mcp_tool_use",id:o.id,name:o.name,server_name:o.server_name,input:o.input??{}}):o.type==="tool_result"?t.push({type:"tool_result",tool_use_id:o.tool_use_id,content:o.content??""}):o.type==="mcp_tool_result"&&t.push({type:"mcp_tool_result",tool_use_id:o.tool_use_id,is_error:o.is_error??!1,content:o.content??[]})}),{blocks:t,stop_reason:t.some(o=>o.type==="tool_use"||o.type==="mcp_tool_use")?"tool_use":"end"}}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callClaude(e,this.model,t,s),n=t?await this.parseStream(i,o):this.parseOneShot(await i.json());return this.convertToStandardCompletion(n)}async visionChatOnce(e,t=!1,o=()=>{},s){let i=await this.callClaude(e,this.visionModel,t,s),n=t?await this.parseStream(i,o):this.parseOneShot(await i.json());return this.convertToStandardCompletion(n)}convertToStandardCompletion(e){return{blocks:e.blocks.filter(o=>o.type==="text"||o.type==="tool_use"||o.type==="tool_result"),stop_reason:e.stop_reason}}};var pe=class{createChatService(e){let t=E({model:e.model,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultModel(),supportsVisionForModel:o=>this.supportsVisionForModel(o),validate:"resolved"});return new le(e.apiKey,e.model||this.getDefaultModel(),t,e.tools??[],e.mcpServers??[],e.responseLength)}getProviderName(){return"claude"}getSupportedModels(){return[Xe,Je,Ze,b,Ye,Qe,et,tt,ze]}getDefaultModel(){return b}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return xe.includes(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}};var Lt=class{static async fetchToolSchemas(e){try{let t={"Content-Type":"application/json"};e.authorization_token&&(t.Authorization=`Bearer ${e.authorization_token}`);let s=await(await _.post(`${e.url}/tools`,{},t)).json();return Array.isArray(s.tools)?s.tools.map(i=>({name:`mcp_${e.name}_${i.name}`,description:i.description||`Tool from ${e.name} MCP server`,parameters:i.inputSchema||{type:"object",properties:{},required:[]}})):[{name:`mcp_${e.name}_search`,description:`Search using ${e.name} MCP server`,parameters:{type:"object",properties:{query:{type:"string",description:"Search query"}},required:["query"]}}]}catch(t){return console.warn(`Failed to fetch MCP schemas from ${e.name}:`,t),[{name:`mcp_${e.name}_search`,description:`Search using ${e.name} MCP server (schema fetch failed)`,parameters:{type:"object",properties:{query:{type:"string",description:"Search query"}},required:["query"]}}]}}static async fetchAllToolSchemas(e){let t=[];for(let o of e)try{let s=await this.fetchToolSchemas(o);t.push(...s)}catch(s){console.error(`Failed to fetch schemas from ${o.name}:`,s)}return t}};var ce=class{constructor(e,t=k,o=k,s=[],i=[],n){this.provider="gemini";this.mcpToolSchemas=[];this.mcpSchemasInitialized=!1;this.callIdMap=new Map;if(this.apiKey=e,this.model=t,this.responseLength=n,!Pe.includes(o))throw new Error(`Model ${o} does not support vision capabilities.`);this.visionModel=o,this.tools=s,this.mcpServers=i}safeJsonParse(e){try{return JSON.parse(e)}catch{return e}}normalizeToolResult(e){return e===null?{content:null}:typeof e=="object"?e:{content:e}}isGemma4Model(e){return/^gemma-4-/.test(e)}shouldExposeTextPart(e,t){return!(!e.text||this.isGemma4Model(t)&&e.thought===!0)}adaptKeysForApi(e){let t={toolConfig:"tool_config",functionCallingConfig:"function_calling_config",functionDeclarations:"function_declarations",functionCall:"function_call",functionResponse:"function_response"};return Array.isArray(e)?e.map(o=>this.adaptKeysForApi(o)):e&&typeof e=="object"?Object.fromEntries(Object.entries(e).map(([o,s])=>[t[o]??o,this.adaptKeysForApi(s)])):e}getModel(){return this.model}getVisionModel(){return this.visionModel}getMCPServers(){return this.mcpServers}addMCPServer(e){this.mcpServers.push(e),this.mcpSchemasInitialized=!1}removeMCPServer(e){this.mcpServers=this.mcpServers.filter(t=>t.name!==e),this.mcpSchemasInitialized=!1}hasMCPServers(){return this.mcpServers.length>0}async initializeMCPSchemas(){if(!(this.mcpSchemasInitialized||this.mcpServers.length===0))try{let e=new Promise((o,s)=>setTimeout(()=>s(new Error("MCP schema fetch timeout")),5e3)),t=Lt.fetchAllToolSchemas(this.mcpServers);this.mcpToolSchemas=await Promise.race([t,e]),this.mcpSchemasInitialized=!0}catch(e){console.warn("Failed to initialize MCP schemas, using fallback:",e),this.mcpToolSchemas=this.mcpServers.map(t=>({name:`mcp_${t.name}_search`,description:`Search using ${t.name} MCP server (fallback)`,parameters:{type:"object",properties:{query:{type:"string",description:"Search query"}},required:["query"]}})),this.mcpSchemasInitialized=!0}}async processChat(e,t,o){try{await f({hasTools:this.tools.length>0||this.mcpServers.length>0,runWithoutTools:async()=>{let s=await this.callGemini(e,this.model,!0),{blocks:i}=await this.parseStream(s,t,this.model);return v.getFullText(i)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"Received functionCall. Use chatOnce() loop when tools are enabled."})}catch(s){throw console.error("Error in processChat:",s),s}}async processVisionChat(e,t,o){try{await f({hasTools:this.tools.length>0||this.mcpServers.length>0,runWithoutTools:async()=>{let s=await this.callGemini(e,this.visionModel,!0),{blocks:i}=await this.parseStream(s,t,this.visionModel);return v.getFullText(i)},runWithTools:()=>this.visionChatOnce(e),onToolBlocks:s=>{s.filter(i=>i.type==="text").forEach(i=>t(i.text))},onCompleteResponse:o,toolErrorMessage:"Received functionCall. Use visionChatOnce() loop when tools are enabled."})}catch(s){throw console.error("Error in processVisionChat:",s),s}}convertMessagesToGeminiFormat(e){let t=[],o=null,s=[],i=()=>{o&&s.length&&(t.push({role:o,parts:[...s]}),s=[])};for(let n of e){let a=this.mapRoleToGemini(n.role);if(n.tool_calls){i();for(let l of n.tool_calls)this.callIdMap.set(l.id,l.function.name),t.push({role:"model",parts:[{functionCall:{name:l.function.name,args:JSON.parse(l.function.arguments||"{}")}}]});continue}if(n.role==="tool"){i();let l=n.name??this.callIdMap.get(n.tool_call_id)??"result";t.push({role:"user",parts:[{functionResponse:{name:l,response:this.normalizeToolResult(this.safeJsonParse(n.content))}}]});continue}a!==o&&i(),o=a,s.push({text:n.content})}return i(),t}async callGemini(e,t,o=!1,s){let a={contents:e.some(g=>Array.isArray(g.content)&&g.content.some(x=>x?.type==="image_url"||x?.inlineData))?await this.convertVisionMessagesToGeminiFormat(e):this.convertMessagesToGeminiFormat(e),generationConfig:{maxOutputTokens:s!==void 0?s:O(this.responseLength)}};this.isGemma4Model(t)&&(a.generationConfig.thinkingConfig={includeThoughts:!1,thinkingLevel:"minimal"});let l=[];if(this.tools.length>0&&l.push(...this.tools.map(g=>({name:g.name,description:g.description,parameters:g.parameters}))),this.mcpServers.length>0)try{await this.initializeMCPSchemas(),l.push(...this.mcpToolSchemas.map(g=>({name:g.name,description:g.description,parameters:g.parameters})))}catch(g){console.warn("MCP initialization failed, skipping MCP tools:",g)}l.length>0&&(a.tools=[{functionDeclarations:l}],a.toolConfig={functionCallingConfig:{mode:"AUTO"}});let u=async(g,x)=>{let H=o?"streamGenerateContent":"generateContent",Te=o?"?alt=sse":"",Pt=`${kt}/${g}/models/${t}:${H}${Te}${Te?"&":"?"}key=${this.apiKey}`;return _.post(Pt,x)},m=/flash[-_]lite/.test(t),c=this.isGemma4Model(t),d=/gemini-2\.5/.test(t),p=/^gemini-3(?:\.[0-9]+)?-.*preview/.test(t),h=m||c||d||p,M=h?"v1beta":"v1",S=async()=>{try{let g=M==="v1"?a:this.adaptKeysForApi(a);return await u(M,g)}catch(g){let x=/Unknown name|Cannot find field|404/.test(g?.message||"")||g?.status===404;if(!h&&x)return await u("v1beta",this.adaptKeysForApi(a));throw g}};try{return await S()}catch(g){throw g.body&&(console.error("Gemini API Error Details:",g.body),console.error("Request Body:",JSON.stringify(a,null,2))),g}}async convertVisionMessagesToGeminiFormat(e){let t=[],o=null,s=[];for(let i of e){let n=this.mapRoleToGemini(i.role);if(i.tool_calls){for(let a of i.tool_calls)t.push({role:"model",parts:[{functionCall:{name:a.function.name,args:JSON.parse(a.function.arguments||"{}")}}]});continue}if(i.role==="tool"){let a=i.name??this.callIdMap.get(i.tool_call_id)??"result";t.push({role:"user",parts:[{functionResponse:{name:a,response:this.normalizeToolResult(this.safeJsonParse(i.content))}}]});continue}if(n!==o&&s.length>0&&(t.push({role:o,parts:[...s]}),s=[]),o=n,typeof i.content=="string")s.push({text:i.content});else if(Array.isArray(i.content)){for(let a of i.content)if(a.type==="text")s.push({text:a.text});else if(a.type==="image_url")try{let u=await(await _.get(a.image_url.url)).blob(),m=await this.blobToBase64(u);s.push({inlineData:{mimeType:u.type||"image/jpeg",data:m.split(",")[1]}})}catch(l){throw console.error("Error processing image:",l),new Error(`Failed to process image: ${l.message}`)}}}return o&&s.length>0&&t.push({role:o,parts:[...s]}),t}blobToBase64(e){return new Promise((t,o)=>{let s=new FileReader;s.onloadend=()=>t(s.result),s.onerror=o,s.readAsDataURL(e)})}mapRoleToGemini(e){switch(e){case"system":return"model";case"user":return"user";case"assistant":return"model";default:return"user"}}async parseStream(e,t,o){let s=e.body.getReader(),i=new TextDecoder,n=[],a=[],l="",u=c=>{if(!c||c==="[DONE]")return;let d;try{d=JSON.parse(c)}catch{return}for(let p of d.candidates??[])for(let h of p.content?.parts??[])this.shouldExposeTextPart(h,o)&&(t(h.text),v.addTextBlock(n,h.text)),h.functionCall&&a.push({type:"tool_use",id:this.genUUID(),name:h.functionCall.name,input:h.functionCall.args??{}}),h.functionResponse&&a.push({type:"tool_result",tool_use_id:h.functionResponse.name,content:JSON.stringify(h.functionResponse.response)})};for(;;){let{done:c,value:d}=await s.read();if(c)break;l+=i.decode(d,{stream:!0});let p;for(;(p=l.indexOf(`
13
+ `))!==-1;){let h=l.slice(0,p);if(l=l.slice(p+1),h.endsWith("\r")&&(h=h.slice(0,-1)),!h.trim()){u("");continue}h.startsWith("data:")&&(h=h.slice(5).trim()),h&&u(h)}}return l&&u(l),{blocks:[...n,...a],stop_reason:a.some(c=>c.type==="tool_use")?"tool_use":"end"}}parseOneShot(e,t){let o=[],s=[];for(let n of e.candidates??[])for(let a of n.content?.parts??[])this.shouldExposeTextPart(a,t)&&o.push({type:"text",text:a.text}),a.functionCall&&s.push({type:"tool_use",id:this.genUUID(),name:a.functionCall.name,input:a.functionCall.args??{}}),a.functionResponse&&s.push({type:"tool_result",tool_use_id:a.functionResponse.name,content:JSON.stringify(a.functionResponse.response)});return{blocks:[...o,...s],stop_reason:s.some(n=>n.type==="tool_use")?"tool_use":"end"}}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callGemini(e,this.model,t,s);return t?this.parseStream(i,o,this.model):this.parseOneShot(await i.json(),this.model)}async visionChatOnce(e,t=!1,o=()=>{},s){let i=await this.callGemini(e,this.visionModel,t,s);return t?this.parseStream(i,o,this.visionModel):this.parseOneShot(await i.json(),this.visionModel)}genUUID(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}};var ue=class{createChatService(e){let t=E({model:e.model,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultModel(),supportsVisionForModel:o=>this.supportsVisionForModel(o),validate:"resolved"});return new ce(e.apiKey,e.model||this.getDefaultModel(),t,e.tools||[],e.mcpServers||[],e.responseLength)}getProviderName(){return"gemini"}getSupportedModels(){return[ke,Ge,Fe,Ue,He,We,Be,Ke,$e,je,qe,k]}getDefaultModel(){return k}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return Pe.includes(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}};function Bo(){if(typeof globalThis<"u"&&"LanguageModel"in globalThis)return globalThis.LanguageModel}var he=class{constructor(e={}){this.provider="gemini-nano";this.expectedInputLanguages=e.expectedInputLanguages??["ja"],this.expectedOutputLanguages=e.expectedOutputLanguages??["ja"],this._responseLength=e.responseLength}getModel(){return J}getVisionModel(){return J}async processChat(e,t,o){let s=await this.generateResponse(e);t(s),await o(s)}async processVisionChat(e,t,o){throw new Error("Gemini Nano does not support vision capabilities.")}async chatOnce(e,t=!1,o=()=>{},s){let i=await this.generateResponse(e);return o(i),{blocks:[{type:"text",text:i}],stop_reason:"end"}}async visionChatOnce(e,t=!1,o=()=>{},s){throw new Error("Gemini Nano does not support vision capabilities.")}async generateResponse(e){let t=Bo();if(!t)throw new Error("Gemini Nano is not available in this environment. Chrome 138+ with Prompt API enabled is required.");let o=await t.availability();if(o!=="available"&&o!=="downloadable")throw new Error(`Gemini Nano Prompt API is not ready in this environment. LanguageModel.availability() returned "${o}". Expected "available" or "downloadable".`);let i=e.filter(u=>u.role==="system").map(u=>u.content).join(`
14
14
  `),n=e.filter(u=>u.role!=="system").slice(-20),a=[...n].reverse().find(u=>u.role==="user");if(!a)throw new Error("No user message found in the provided messages.");let l=await this.createSession(t,i,n);try{return await l.prompt(a.content)}finally{try{l.destroy()}catch{}}}async createSession(e,t,o){let s=this.buildSystemPrompt(t),i=o.slice(0,-1);if(i.length>0){let n=i.map(a=>`${a.role==="user"?"User":"Assistant"}: ${a.content}`).join(`
15
15
  `);s+=`
16
16
 
17
17
  The following is the prior conversation history. Use it as context for your response:
18
18
  `+n}return e.create({systemPrompt:s,expectedInputs:[{type:"text",languages:this.expectedInputLanguages}],expectedOutputs:[{type:"text",languages:this.expectedOutputLanguages}]})}buildSystemPrompt(e){let t=[];e&&t.push(e);let o=this.getResponseLengthInstruction();return o&&t.push(o),t.join(`
19
19
 
20
- `)}getResponseLengthInstruction(){if(!this._responseLength)return;let e=St[this._responseLength];if(e)return`Please keep your response concise, within approximately ${e} tokens.`}};var he=class{createChatService(e){return new ue({expectedInputLanguages:e.expectedInputLanguages,expectedOutputLanguages:e.expectedOutputLanguages,responseLength:e.responseLength})}getProviderName(){return"gemini-nano"}getSupportedModels(){return[X]}getDefaultModel(){return X}supportsVision(){return!1}getVisionSupportLevel(){return"unsupported"}};var de=class{constructor(e,t=D,o=D,s,i=ie,n,a,l){this.provider="kimi";this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.responseLength=n,this.responseFormat=a,this.thinking=l??{type:"enabled"},this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async processChat(e,t,o){await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callKimi(e,this.model,!0);return this.handleStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){if(!re(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callKimi(e,this.visionModel,!0);return this.handleStream(s,t)},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callKimi(e,this.model,t,s);return this.parseResponse(i,t,o)}async visionChatOnce(e,t=!1,o=()=>{},s){if(!re(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);let i=await this.callKimi(e,this.visionModel,t,s);return this.parseResponse(i,t,o)}async parseResponse(e,t,o){return t?this.parseStream(e,o):this.parseOneShot(await e.json())}async callKimi(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s);return await _.post(this.endpoint,i,{Authorization:`Bearer ${this.apiKey}`})}buildRequestBody(e,t,o,s){let i={model:t,stream:o,messages:e},n=s!==void 0?s:O(this.responseLength);n!==void 0&&(i.max_tokens=n),this.responseFormat&&(i.response_format=this.responseFormat);let a=this.tools.length>0?{type:"disabled"}:this.thinking;a&&(this.isSelfHostedEndpoint()?a.type==="disabled"&&(i.chat_template_kwargs={thinking:!1}):i.thinking=a);let l=this.buildToolsDefinition();return l.length>0&&(i.tools=l,i.tool_choice="auto"),i}isSelfHostedEndpoint(){return this.normalizeEndpoint(this.endpoint)!==this.normalizeEndpoint(ie)}normalizeEndpoint(e){return e.replace(/\/+$/,"")}buildToolsDefinition(){return P(this.tools,"chat-completions")}async handleStream(e,t){return y(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}async parseStream(e,t){return T(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}parseOneShot(e){return L(e)}};var me=class{createChatService(e){let t=this.resolveEndpoint(e),o=e.model||this.getDefaultModel(),s=E({model:o,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultVisionModel(),supportsVisionForModel:l=>this.supportsVisionForModel(l),validate:"explicit"}),i=e.tools,n=e.thinking??{type:"enabled"},a=i&&i.length>0?{type:"disabled"}:n;return new de(e.apiKey,o,s,i,t,e.responseLength,e.responseFormat,a)}getProviderName(){return"kimi"}getSupportedModels(){return[D,Ct]}getDefaultModel(){return D}getDefaultVisionModel(){return D}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return re(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}resolveEndpoint(e){if(e.endpoint)return this.normalizeEndpoint(e.endpoint);if(e.baseUrl){let t=this.normalizeEndpoint(e.baseUrl);return t.endsWith("/chat/completions")?t:`${t}/chat/completions`}return ie}normalizeEndpoint(e){return e.replace(/\/+$/,"")}};var Bo={[C.VERY_SHORT]:800,[C.SHORT]:1200,[C.MEDIUM]:2e3,[C.LONG]:3e3,[C.VERY_LONG]:8e3,[C.DEEP]:25e3},Ko={none:1200,minimal:1600,low:2500,medium:4e3,high:8e3,xhigh:12e3},F=class{constructor(e,t=$,o=$,s,i=Z,n=[],a,l,u,m=!1,c="openai",d=!0){if(this.provider=c,this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.mcpServers=n,this.responseLength=a,this.verbosity=l,this.reasoning_effort=u,this.enableReasoningSummary=m,d&&!Te.includes(o))throw new Error(`Model ${o} does not support vision capabilities.`);this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async processChat(e,t,o){await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callOpenAI(e,this.model,!0),i=this.endpoint===I;try{if(i){let n=await this.parseResponsesStream(s,t);return v.getFullText(n.blocks)}return this.handleStream(s,t)}catch(n){throw console.error("[processChat] Error in streaming/completion:",n),n}},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){try{await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callOpenAI(e,this.visionModel,!0),i=this.endpoint===I;try{if(i){let n=await this.parseResponsesStream(s,t);return v.getFullText(n.blocks)}return this.handleStream(s,t)}catch(n){throw console.error("[processVisionChat] Error in streaming/completion:",n),n}},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}catch(s){throw console.error("Error in processVisionChat:",s),s}}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callOpenAI(e,this.model,t,s);return this.parseResponse(i,t,o)}async visionChatOnce(e,t=!1,o=()=>{},s){let i=await this.callOpenAI(e,this.visionModel,t,s);return this.parseResponse(i,t,o)}async parseResponse(e,t,o){return this.endpoint===I?t?this.parseResponsesStream(e,o):this.parseResponsesOneShot(await e.json()):t?this.parseStream(e,o):this.parseOneShot(await e.json())}async callOpenAI(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s),n={};return(this.provider!=="openai-compatible"||this.apiKey.trim()!=="")&&(n.Authorization=`Bearer ${this.apiKey}`),await _.post(this.endpoint,i,n)}buildRequestBody(e,t,o,s){let i=this.endpoint===I;this.validateMCPCompatibility();let n={model:t,stream:o},a=this.resolveTokenLimit(t,s);i?a!==void 0&&(n.max_output_tokens=a):a!==void 0&&(this.provider==="openai-compatible"?n.max_tokens=a:n.max_completion_tokens=a),i?n.input=this.cleanMessagesForResponsesAPI(e):n.messages=e,j(t)&&(i?(this.reasoning_effort&&(n.reasoning={...n.reasoning,effort:this.reasoning_effort},this.enableReasoningSummary&&(n.reasoning.summary="auto")),this.verbosity&&(n.text={...n.text,format:{type:"text"},verbosity:this.verbosity})):(this.reasoning_effort&&(n.reasoning_effort=this.reasoning_effort),this.verbosity&&(n.verbosity=this.verbosity)));let l=this.buildToolsDefinition();return l.length>0&&(n.tools=l,i||(n.tool_choice="auto")),n}resolveTokenLimit(e,t){if(t!==void 0)return t;let o=this.provider==="openai-compatible"?this.responseLength!==void 0?O(this.responseLength):void 0:O(this.responseLength);if(this.provider!=="openai"||!j(e)||this.responseLength===void 0)return o;let s=this.reasoning_effort??R(e);return Math.max(o??0,Bo[this.responseLength],Ko[s])}validateMCPCompatibility(){if(this.mcpServers.length>0&&this.endpoint===Z)throw new Error(`MCP servers are not supported with Chat Completions API. Current endpoint: ${this.endpoint}. Please use OpenAI Responses API endpoint: ${I}. MCP tools are only available in the Responses API endpoint.`)}cleanMessagesForResponsesAPI(e){return e.map(t=>{let s={role:t.role==="tool"?"user":t.role};return typeof t.content=="string"?s.content=t.content:Array.isArray(t.content)?s.content=t.content.map(i=>i.type==="text"?{type:"input_text",text:i.text}:i.type==="image_url"?{type:"input_image",image_url:i.image_url.url}:i):s.content=t.content,s})}buildToolsDefinition(){let e=this.endpoint===I,t=[];return this.tools.length>0&&t.push(...P(this.tools,e?"responses":"chat-completions")),this.mcpServers.length>0&&e&&t.push(...this.buildMCPToolsDefinition()),t}buildMCPToolsDefinition(){return this.mcpServers.map(e=>{let t={type:"mcp",server_label:e.name,server_url:e.url};return e.require_approval&&(t.require_approval=e.require_approval),e.tool_configuration?.allowed_tools&&(t.allowed_tools=e.tool_configuration.allowed_tools),e.authorization_token&&(t.headers={Authorization:`Bearer ${e.authorization_token}`}),t})}async handleStream(e,t){return y(e,t)}async parseStream(e,t){return T(e,t,{appendTextBlock:v.addTextBlock})}parseOneShot(e){return L(e)}async parseResponsesStream(e,t){let o=e.body.getReader(),s=new TextDecoder,i=[],n=new Map,a,l,u,m="";for(;;){let{done:p,value:h}=await o.read();if(p)break;m+=s.decode(h,{stream:!0});let M="",S="",g=m.split(`
21
- `);m=g.pop()||"";for(let x=0;x<g.length;x++){let U=g[x].trim();if(U.startsWith("event:"))M=U.slice(6).trim();else if(U.startsWith("data:"))S=U.slice(5).trim();else if(U===""&&M&&S){try{let ye=JSON.parse(S),Lt=this.handleResponsesSSEEvent(M,ye,t,i,n,J=>{J.responseStatus!==void 0&&(a=J.responseStatus),J.incompleteDetails!==void 0&&(l=J.incompleteDetails),J.usage!==void 0&&(u=J.usage)})}catch{console.warn("Failed to parse SSE data:",S)}M="",S=""}}}let c=Array.from(n.values()).map(p=>({type:"tool_use",id:p.id,name:p.name,input:p.input||{}}));return{blocks:[...i,...c],stop_reason:c.length?"tool_use":"end",truncated:a==="incomplete",response_status:a,incomplete_details:l,usage:u}}handleResponsesSSEEvent(e,t,o,s,i,n){switch(e){case"response.output_item.added":t.item?.type==="message"&&Array.isArray(t.item.content)?t.item.content.forEach(a=>{a.type==="output_text"&&a.text&&(o(a.text),v.append(s,a.text))}):t.item?.type==="function_call"&&i.set(t.item.id,{id:t.item.id,name:t.item.name,input:t.item.arguments?JSON.parse(t.item.arguments):{}});break;case"response.content_part.added":t.part?.type==="output_text"&&typeof t.part.text=="string"&&(o(t.part.text),v.append(s,t.part.text));break;case"response.output_text.delta":case"response.content_part.delta":{let a=typeof t.delta=="string"?t.delta:t.delta?.text??"";a&&(o(a),v.append(s,a))}break;case"response.output_text.done":case"response.content_part.done":break;case"response.completed":return n(this.extractResponsesMetadata(t,"completed")),"completed";case"response.incomplete":return n(this.extractResponsesMetadata(t,"incomplete")),"completed";case"response.reasoning.started":case"response.reasoning.delta":case"response.reasoning.done":break;default:break}}extractResponsesMetadata(e,t){let o=e?.response??e;return{responseStatus:o?.status??t,incompleteDetails:o?.incomplete_details??null,usage:o?.usage}}parseResponsesOneShot(e){let t=[];return e.output&&Array.isArray(e.output)&&e.output.forEach(o=>{o.type==="message"&&o.content&&o.content.forEach(s=>{s.type==="output_text"&&s.text&&t.push({type:"text",text:s.text})}),o.type==="function_call"&&t.push({type:"tool_use",id:o.id,name:o.name,input:o.arguments?JSON.parse(o.arguments):{}})}),{blocks:t,stop_reason:t.some(o=>o.type==="tool_use")?"tool_use":"end",truncated:e?.status==="incomplete",response_status:e?.status,incomplete_details:e?.incomplete_details??null,usage:e?.usage}}};var ge=class{createChatService(e){return this.validateRequiredOptions(e),new F(e.apiKey?.trim()??"",e.model,e.visionModel??e.model,e.tools,e.endpoint,[],e.responseLength,e.verbosity,e.reasoning_effort,e.enableReasoningSummary,this.getProviderName(),!1)}getProviderName(){return"openai-compatible"}getSupportedModels(){return[]}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"unknown"}supportsVisionForModel(e){return!0}getVisionSupportLevelForModel(e){return"unknown"}getDefaultModel(){return"local-model"}validateRequiredOptions(e){if(e.mcpServers!==void 0)throw new Error("openai-compatible provider does not support mcpServers.");let t=e.endpoint?.trim();if(!t)throw new Error("openai-compatible provider requires endpoint (full URL).");let o;try{o=new URL(t)}catch{throw new Error("openai-compatible provider requires endpoint to be a full URL.")}if(o.protocol!=="http:"&&o.protocol!=="https:")throw new Error("openai-compatible provider requires endpoint to be a full URL.");if(!e.model?.trim())throw new Error("openai-compatible provider requires model.")}};var _e=class{createChatService(e){let t=this.optimizeGPT5Options(e),o=E({model:t.model,visionModel:t.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultModel(),supportsVisionForModel:u=>this.supportsVisionForModel(u),validate:"resolved"}),s=t.tools,i=t.mcpServers??[],n=t.model||this.getDefaultModel(),a=!1;i.length>0||Rt(n)?a=!0:j(n)&&(a=(t.gpt5EndpointPreference||"chat")==="responses");let l=t.endpoint||(a?I:Z);return new F(t.apiKey,n,o,s,l,i,t.responseLength,t.verbosity,t.reasoning_effort,t.enableReasoningSummary,this.getProviderName())}getProviderName(){return"openai"}getSupportedModels(){return[H,Y,Q,W,N,B,K,w,Ae,De,Ne,$,we,xt,It,"o1"]}getDefaultModel(){return H}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return Te.includes(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}optimizeGPT5Options(e){let t=e.model||this.getDefaultModel();if(!j(t))return e;let o={...e};if(e.gpt5Preset){let s=Jt[e.gpt5Preset];o.reasoning_effort=s.reasoning_effort,o.verbosity=s.verbosity}else e.reasoning_effort||(o.reasoning_effort=R(t));return o.reasoning_effort=this.normalizeReasoningEffort(t,o.reasoning_effort),o}normalizeReasoningEffort(e,t){if(t)return t==="none"&&!Dt(e)?R(e):t==="minimal"&&!Nt(e)?R(e):t==="low"&&!wt(e)?R(e):t==="xhigh"&&!At(e)?R(e):t}};var fe=class{constructor(e,t=k,o=k,s,i=xe,n,a,l,u,m,c){this.provider="openrouter";this.lastRequestTime=0;this.requestCount=0;this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.responseLength=n,this.appName=a,this.appUrl=l,this.reasoning_effort=u,this.includeReasoning=m,this.reasoningMaxTokens=c,this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async applyRateLimiting(){if(!q(this.model))return;let e=Date.now(),t=e-this.lastRequestTime;if(t>6e4&&(this.requestCount=0),this.requestCount>=Wt){let o=6e4-t;o>0&&(console.log(`Rate limit reached for free tier. Waiting ${o}ms...`),await new Promise(s=>setTimeout(s,o)),this.requestCount=0)}this.lastRequestTime=e,this.requestCount++}async processChat(e,t,o){await this.applyRateLimiting(),await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callOpenRouter(e,this.model,!0);return this.handleStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){if(!ee(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await this.applyRateLimiting();try{await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callOpenRouter(e,this.visionModel,!0);return this.handleStream(s,t)},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}catch(s){throw console.error("Error in processVisionChat:",s),s}}async chatOnce(e,t=!0,o=()=>{},s){await this.applyRateLimiting();let i=await this.callOpenRouter(e,this.model,t,s);return t?this.parseStream(i,o):this.parseOneShot(await i.json())}async visionChatOnce(e,t=!1,o=()=>{},s){if(!ee(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await this.applyRateLimiting();let i=await this.callOpenRouter(e,this.visionModel,t,s);return t?this.parseStream(i,o):this.parseOneShot(await i.json())}async callOpenRouter(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s),n={Authorization:`Bearer ${this.apiKey}`};return this.appUrl&&(n["HTTP-Referer"]=this.appUrl),this.appName&&(n["X-Title"]=this.appName),await _.post(this.endpoint,i,n)}buildRequestBody(e,t,o,s){let i={model:t,messages:e,stream:o};if((s!==void 0?s:O(this.responseLength))&&console.warn("OpenRouter: Token limits are not supported for gpt-oss-20b model due to known issues. Using unlimited tokens instead."),this.reasoning_effort!==void 0||this.includeReasoning!==void 0||this.reasoningMaxTokens){if(i.reasoning={},this.reasoning_effort&&this.reasoning_effort!=="none"){let a=this.reasoning_effort==="minimal"?"low":this.reasoning_effort;i.reasoning.effort=a}(this.reasoning_effort==="none"||this.includeReasoning!==!0)&&(i.reasoning.exclude=!0),this.reasoningMaxTokens&&(i.reasoning.max_tokens=this.reasoningMaxTokens)}else i.reasoning={exclude:!0};return this.tools.length>0&&(i.tools=P(this.tools,"chat-completions"),i.tool_choice="auto"),i}async handleStream(e,t){return y(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}async parseStream(e,t){return T(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}parseOneShot(e){return L(e)}};var ve=class{createChatService(e){let t=E({model:e.model,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:e.model||this.getDefaultModel(),supportsVisionForModel:n=>this.supportsVisionForModel(n),validate:"explicit"}),o=e.tools,s=e.appName,i=e.appUrl;return new fe(e.apiKey,e.model||this.getDefaultModel(),t,o,e.endpoint,e.responseLength,s,i,e.reasoning_effort,e.includeReasoning,e.reasoningMaxTokens)}getProviderName(){return"openrouter"}getSupportedModels(){return[k,_t,ot,st,it,rt,nt,at,lt,pt,ct,ut,Gt,ht,dt,mt,gt,Ft,Ut,tt]}getDefaultModel(){return k}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return this.getSupportedModels().some(e=>this.supportsVisionForModel(e))?"supported":"unsupported"}supportsVisionForModel(e){return ee(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}getFreeModels(){return Ht}isModelFree(e){return q(e)}};var Me=class{constructor(e,t=A,o=A,s,i=be,n){this.provider="xai";this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.responseLength=n,this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async processChat(e,t,o){await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callXAI(e,this.model,!0);return this.handleStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){if(!se(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callXAI(e,this.visionModel,!0);return this.handleStream(s,t)},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callXAI(e,this.model,t,s);return this.parseResponse(i,t,o)}async visionChatOnce(e,t=!1,o=()=>{},s){if(!se(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);let i=await this.callXAI(e,this.visionModel,t,s);return this.parseResponse(i,t,o)}async parseResponse(e,t,o){return t?this.parseStream(e,o):this.parseOneShot(await e.json())}async callXAI(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s);return await _.post(this.endpoint,i,{Authorization:`Bearer ${this.apiKey}`})}buildRequestBody(e,t,o,s){let i={model:t,stream:o,messages:e},n=s!==void 0?s:O(this.responseLength);n!==void 0&&(i.max_tokens=n);let a=this.buildToolsDefinition();return a.length>0&&(i.tools=a,i.tool_choice="auto"),i}buildToolsDefinition(){return P(this.tools,"chat-completions")}async handleStream(e,t){return y(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}async parseStream(e,t){return T(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}parseOneShot(e){return L(e)}};var Oe=class{createChatService(e){let t=e.model||this.getDefaultModel(),o=E({model:t,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultVisionModel(),supportsVisionForModel:i=>this.supportsVisionForModel(i),validate:"explicit"}),s=e.tools;return new Me(e.apiKey,t,o,s,e.endpoint||be,e.responseLength)}getProviderName(){return"xai"}getSupportedModels(){return[Mt,Ot,Et,A]}getDefaultModel(){return A}getDefaultVisionModel(){return A}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return se(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}};var Ee=class{constructor(e,t=te,o=z,s,i=Ie,n,a,l){this.provider="zai";this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.responseLength=n,this.responseFormat=a,this.thinking=l??{type:"disabled"},this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async processChat(e,t,o){await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callZAI(e,this.model,!0);return this.handleStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){if(!oe(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callZAI(e,this.visionModel,!0);return this.handleStream(s,t)},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callZAI(e,this.model,t,s);return this.parseResponse(i,t,o)}async visionChatOnce(e,t=!1,o=()=>{},s){if(!oe(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);let i=await this.callZAI(e,this.visionModel,t,s);return this.parseResponse(i,t,o)}async parseResponse(e,t,o){return t?this.parseStream(e,o):this.parseOneShot(await e.json())}async callZAI(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s);return await _.post(this.endpoint,i,{Authorization:`Bearer ${this.apiKey}`})}buildRequestBody(e,t,o,s){let i={model:t,stream:o,messages:e},n=s!==void 0?s:O(this.responseLength);n!==void 0&&(i.max_tokens=n),this.responseFormat&&(i.response_format=this.responseFormat),this.thinking&&(i.thinking=this.thinking);let a=this.buildToolsDefinition();return a.length>0&&(i.tools=a,i.tool_choice="auto",o&&zt(t)&&(i.tool_stream=!0)),i}buildToolsDefinition(){return P(this.tools,"chat-completions")}async handleStream(e,t){return y(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}async parseStream(e,t){return T(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}parseOneShot(e){return L(e)}};var Ce=class{createChatService(e){let t=e.model||this.getDefaultModel(),o=E({model:t,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultVisionModel(),supportsVisionForModel:n=>this.supportsVisionForModel(n),validate:"explicit"}),s=e.tools,i=e.thinking??{type:"disabled"};return new Ee(e.apiKey,t,o,s,e.endpoint||Ie,e.responseLength,e.responseFormat,i)}getProviderName(){return"zai"}getSupportedModels(){return[Bt,Kt,te,$t,jt,qt,ft,vt,z]}getDefaultModel(){return te}getDefaultVisionModel(){return z}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return oe(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}};var uo=[new _e,new ge,new ce,new he,new le,new ve,new Ce,new Oe,new me];var Se=class{static registerProvider(e){this.providers.set(e.getProviderName(),e)}static createChatService(e,t){let o=this.providers.get(e);if(!o)throw new Error(`Unknown chat provider: ${e}`);return o.createChatService(t)}static getProviders(){return this.providers}static getAvailableProviders(){return Array.from(this.providers.keys())}static getSupportedModels(e){let t=this.providers.get(e);return t?t.getSupportedModels():[]}static getVisionSupportLevel(e){let t=this.providers.get(e);return t?t.getVisionSupportLevel():"unsupported"}static getVisionSupportLevelForModel(e,t){let o=this.providers.get(e);return o?o.getVisionSupportLevelForModel?o.getVisionSupportLevelForModel(t):o.supportsVisionForModel?o.supportsVisionForModel(t)?"supported":"unsupported":o.getVisionSupportLevel():"unsupported"}};Se.providers=new Map;uo.forEach(r=>Se.registerProvider(r));function ho(){_.setFetch(async(r,e={})=>{let t=(e.method||"GET").toString().toUpperCase(),o=e.headers,s={};if(Array.isArray(o))for(let[c,d]of o)s[c]=String(d);else if(o&&typeof o=="object")for(let[c,d]of Object.entries(o))s[c]=String(d);let i={method:t,headers:s,muteHttpExceptions:!0},n=e.body;typeof n=="string"?i.payload=n:n!=null&&(s["Content-Type"]||(s["Content-Type"]="application/json"),i.payload=JSON.stringify(n));let a=UrlFetchApp.fetch(r,i),l=a.getResponseCode(),u=a.getContentText();return{ok:l>=200&&l<300,status:l,statusText:String(l),text:async()=>u,json:async()=>u?JSON.parse(u):null}})}return Mo($o);})();
20
+ `)}getResponseLengthInstruction(){if(!this._responseLength)return;let e=yt[this._responseLength];if(e)return`Please keep your response concise, within approximately ${e} tokens.`}};var de=class{createChatService(e){return new he({expectedInputLanguages:e.expectedInputLanguages,expectedOutputLanguages:e.expectedOutputLanguages,responseLength:e.responseLength})}getProviderName(){return"gemini-nano"}getSupportedModels(){return[J]}getDefaultModel(){return J}supportsVision(){return!1}getVisionSupportLevel(){return"unsupported"}};var me=class{constructor(e,t=D,o=D,s,i=re,n,a,l){this.provider="kimi";this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.responseLength=n,this.responseFormat=a,this.thinking=l??{type:"enabled"},this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async processChat(e,t,o){await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callKimi(e,this.model,!0);return this.handleStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){if(!ne(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callKimi(e,this.visionModel,!0);return this.handleStream(s,t)},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callKimi(e,this.model,t,s);return this.parseResponse(i,t,o)}async visionChatOnce(e,t=!1,o=()=>{},s){if(!ne(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);let i=await this.callKimi(e,this.visionModel,t,s);return this.parseResponse(i,t,o)}async parseResponse(e,t,o){return t?this.parseStream(e,o):this.parseOneShot(await e.json())}async callKimi(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s);return await _.post(this.endpoint,i,{Authorization:`Bearer ${this.apiKey}`})}buildRequestBody(e,t,o,s){let i={model:t,stream:o,messages:e},n=s!==void 0?s:O(this.responseLength);n!==void 0&&(i.max_tokens=n),this.responseFormat&&(i.response_format=this.responseFormat);let a=this.tools.length>0?{type:"disabled"}:this.thinking;a&&(this.isSelfHostedEndpoint()?a.type==="disabled"&&(i.chat_template_kwargs={thinking:!1}):i.thinking=a);let l=this.buildToolsDefinition();return l.length>0&&(i.tools=l,i.tool_choice="auto"),i}isSelfHostedEndpoint(){return this.normalizeEndpoint(this.endpoint)!==this.normalizeEndpoint(re)}normalizeEndpoint(e){return e.replace(/\/+$/,"")}buildToolsDefinition(){return P(this.tools,"chat-completions")}async handleStream(e,t){return y(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}async parseStream(e,t){return T(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}parseOneShot(e){return L(e)}};var ge=class{createChatService(e){let t=this.resolveEndpoint(e),o=e.model||this.getDefaultModel(),s=E({model:o,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultVisionModel(),supportsVisionForModel:l=>this.supportsVisionForModel(l),validate:"explicit"}),i=e.tools,n=e.thinking??{type:"enabled"},a=i&&i.length>0?{type:"disabled"}:n;return new me(e.apiKey,o,s,i,t,e.responseLength,e.responseFormat,a)}getProviderName(){return"kimi"}getSupportedModels(){return[D,St]}getDefaultModel(){return D}getDefaultVisionModel(){return D}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return ne(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}resolveEndpoint(e){if(e.endpoint)return this.normalizeEndpoint(e.endpoint);if(e.baseUrl){let t=this.normalizeEndpoint(e.baseUrl);return t.endsWith("/chat/completions")?t:`${t}/chat/completions`}return re}normalizeEndpoint(e){return e.replace(/\/+$/,"")}};var Ko={[C.VERY_SHORT]:800,[C.SHORT]:1200,[C.MEDIUM]:2e3,[C.LONG]:3e3,[C.VERY_LONG]:8e3,[C.DEEP]:25e3},$o={none:1200,minimal:1600,low:2500,medium:4e3,high:8e3,xhigh:12e3},U=class{constructor(e,t=j,o=j,s,i=Y,n=[],a,l,u,m=!1,c="openai",d=!0){if(this.provider=c,this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.mcpServers=n,this.responseLength=a,this.verbosity=l,this.reasoning_effort=u,this.enableReasoningSummary=m,d&&!Le.includes(o))throw new Error(`Model ${o} does not support vision capabilities.`);this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async processChat(e,t,o){await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callOpenAI(e,this.model,!0),i=this.endpoint===I;try{if(i){let n=await this.parseResponsesStream(s,t);return v.getFullText(n.blocks)}return this.handleStream(s,t)}catch(n){throw console.error("[processChat] Error in streaming/completion:",n),n}},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){try{await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callOpenAI(e,this.visionModel,!0),i=this.endpoint===I;try{if(i){let n=await this.parseResponsesStream(s,t);return v.getFullText(n.blocks)}return this.handleStream(s,t)}catch(n){throw console.error("[processVisionChat] Error in streaming/completion:",n),n}},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}catch(s){throw console.error("Error in processVisionChat:",s),s}}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callOpenAI(e,this.model,t,s);return this.parseResponse(i,t,o)}async visionChatOnce(e,t=!1,o=()=>{},s){let i=await this.callOpenAI(e,this.visionModel,t,s);return this.parseResponse(i,t,o)}async parseResponse(e,t,o){return this.endpoint===I?t?this.parseResponsesStream(e,o):this.parseResponsesOneShot(await e.json()):t?this.parseStream(e,o):this.parseOneShot(await e.json())}async callOpenAI(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s),n={};return(this.provider!=="openai-compatible"||this.apiKey.trim()!=="")&&(n.Authorization=`Bearer ${this.apiKey}`),await _.post(this.endpoint,i,n)}buildRequestBody(e,t,o,s){let i=this.endpoint===I;this.validateMCPCompatibility();let n={model:t,stream:o},a=this.resolveTokenLimit(t,s);i?a!==void 0&&(n.max_output_tokens=a):a!==void 0&&(this.provider==="openai-compatible"?n.max_tokens=a:n.max_completion_tokens=a),i?n.input=this.cleanMessagesForResponsesAPI(e):n.messages=e,q(t)&&(i?(this.reasoning_effort&&(n.reasoning={...n.reasoning,effort:this.reasoning_effort},this.enableReasoningSummary&&(n.reasoning.summary="auto")),this.verbosity&&(n.text={...n.text,format:{type:"text"},verbosity:this.verbosity})):(this.reasoning_effort&&(n.reasoning_effort=this.reasoning_effort),this.verbosity&&(n.verbosity=this.verbosity)));let l=this.buildToolsDefinition();return l.length>0&&(n.tools=l,i||(n.tool_choice="auto")),n}resolveTokenLimit(e,t){if(t!==void 0)return t;let o=this.provider==="openai-compatible"?this.responseLength!==void 0?O(this.responseLength):void 0:O(this.responseLength);if(this.provider!=="openai"||!q(e)||this.responseLength===void 0)return o;let s=this.reasoning_effort??R(e);return Math.max(o??0,Ko[this.responseLength],$o[s])}validateMCPCompatibility(){if(this.mcpServers.length>0&&this.endpoint===Y)throw new Error(`MCP servers are not supported with Chat Completions API. Current endpoint: ${this.endpoint}. Please use OpenAI Responses API endpoint: ${I}. MCP tools are only available in the Responses API endpoint.`)}cleanMessagesForResponsesAPI(e){return e.map(t=>{let s={role:t.role==="tool"?"user":t.role};return typeof t.content=="string"?s.content=t.content:Array.isArray(t.content)?s.content=t.content.map(i=>i.type==="text"?{type:"input_text",text:i.text}:i.type==="image_url"?{type:"input_image",image_url:i.image_url.url}:i):s.content=t.content,s})}buildToolsDefinition(){let e=this.endpoint===I,t=[];return this.tools.length>0&&t.push(...P(this.tools,e?"responses":"chat-completions")),this.mcpServers.length>0&&e&&t.push(...this.buildMCPToolsDefinition()),t}buildMCPToolsDefinition(){return this.mcpServers.map(e=>{let t={type:"mcp",server_label:e.name,server_url:e.url};return e.require_approval&&(t.require_approval=e.require_approval),e.tool_configuration?.allowed_tools&&(t.allowed_tools=e.tool_configuration.allowed_tools),e.authorization_token&&(t.headers={Authorization:`Bearer ${e.authorization_token}`}),t})}async handleStream(e,t){return y(e,t)}async parseStream(e,t){return T(e,t,{appendTextBlock:v.addTextBlock})}parseOneShot(e){return L(e)}async parseResponsesStream(e,t){let o=e.body.getReader(),s=new TextDecoder,i=[],n=new Map,a,l,u,m="";for(;;){let{done:p,value:h}=await o.read();if(p)break;m+=s.decode(h,{stream:!0});let M="",S="",g=m.split(`
21
+ `);m=g.pop()||"";for(let x=0;x<g.length;x++){let H=g[x].trim();if(H.startsWith("event:"))M=H.slice(6).trim();else if(H.startsWith("data:"))S=H.slice(5).trim();else if(H===""&&M&&S){try{let Te=JSON.parse(S),Pt=this.handleResponsesSSEEvent(M,Te,t,i,n,Z=>{Z.responseStatus!==void 0&&(a=Z.responseStatus),Z.incompleteDetails!==void 0&&(l=Z.incompleteDetails),Z.usage!==void 0&&(u=Z.usage)})}catch{console.warn("Failed to parse SSE data:",S)}M="",S=""}}}let c=Array.from(n.values()).map(p=>({type:"tool_use",id:p.id,name:p.name,input:p.input||{}}));return{blocks:[...i,...c],stop_reason:c.length?"tool_use":"end",truncated:a==="incomplete",response_status:a,incomplete_details:l,usage:u}}handleResponsesSSEEvent(e,t,o,s,i,n){switch(e){case"response.output_item.added":t.item?.type==="message"&&Array.isArray(t.item.content)?t.item.content.forEach(a=>{a.type==="output_text"&&a.text&&(o(a.text),v.append(s,a.text))}):t.item?.type==="function_call"&&i.set(t.item.id,{id:t.item.id,name:t.item.name,input:t.item.arguments?JSON.parse(t.item.arguments):{}});break;case"response.content_part.added":t.part?.type==="output_text"&&typeof t.part.text=="string"&&(o(t.part.text),v.append(s,t.part.text));break;case"response.output_text.delta":case"response.content_part.delta":{let a=typeof t.delta=="string"?t.delta:t.delta?.text??"";a&&(o(a),v.append(s,a))}break;case"response.output_text.done":case"response.content_part.done":break;case"response.completed":return n(this.extractResponsesMetadata(t,"completed")),"completed";case"response.incomplete":return n(this.extractResponsesMetadata(t,"incomplete")),"completed";case"response.reasoning.started":case"response.reasoning.delta":case"response.reasoning.done":break;default:break}}extractResponsesMetadata(e,t){let o=e?.response??e;return{responseStatus:o?.status??t,incompleteDetails:o?.incomplete_details??null,usage:o?.usage}}parseResponsesOneShot(e){let t=[];return e.output&&Array.isArray(e.output)&&e.output.forEach(o=>{o.type==="message"&&o.content&&o.content.forEach(s=>{s.type==="output_text"&&s.text&&t.push({type:"text",text:s.text})}),o.type==="function_call"&&t.push({type:"tool_use",id:o.id,name:o.name,input:o.arguments?JSON.parse(o.arguments):{}})}),{blocks:t,stop_reason:t.some(o=>o.type==="tool_use")?"tool_use":"end",truncated:e?.status==="incomplete",response_status:e?.status,incomplete_details:e?.incomplete_details??null,usage:e?.usage}}};var _e=class{createChatService(e){return this.validateRequiredOptions(e),new U(e.apiKey?.trim()??"",e.model,e.visionModel??e.model,e.tools,e.endpoint,[],e.responseLength,e.verbosity,e.reasoning_effort,e.enableReasoningSummary,this.getProviderName(),!1)}getProviderName(){return"openai-compatible"}getSupportedModels(){return[]}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"unknown"}supportsVisionForModel(e){return!0}getVisionSupportLevelForModel(e){return"unknown"}getDefaultModel(){return"local-model"}validateRequiredOptions(e){if(e.mcpServers!==void 0)throw new Error("openai-compatible provider does not support mcpServers.");let t=e.endpoint?.trim();if(!t)throw new Error("openai-compatible provider requires endpoint (full URL).");let o;try{o=new URL(t)}catch{throw new Error("openai-compatible provider requires endpoint to be a full URL.")}if(o.protocol!=="http:"&&o.protocol!=="https:")throw new Error("openai-compatible provider requires endpoint to be a full URL.");if(!e.model?.trim())throw new Error("openai-compatible provider requires model.")}};var fe=class{createChatService(e){let t=this.optimizeGPT5Options(e),o=E({model:t.model,visionModel:t.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultModel(),supportsVisionForModel:u=>this.supportsVisionForModel(u),validate:"resolved"}),s=t.tools,i=t.mcpServers??[],n=t.model||this.getDefaultModel(),a=!1;i.length>0||At(n)?a=!0:q(n)&&(a=(t.gpt5EndpointPreference||"chat")==="responses");let l=t.endpoint||(a?I:Y);return new U(t.apiKey,n,o,s,l,i,t.responseLength,t.verbosity,t.reasoning_effort,t.enableReasoningSummary,this.getProviderName())}getProviderName(){return"openai"}getSupportedModels(){return[W,Q,ee,B,N,w,K,$,V,De,Ne,we,j,Ve,It,bt,"o1"]}getDefaultModel(){return W}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return Le.includes(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}optimizeGPT5Options(e){let t=e.model||this.getDefaultModel();if(!q(t))return e;let o={...e};if(e.gpt5Preset){let s=Zt[e.gpt5Preset];o.reasoning_effort=s.reasoning_effort,o.verbosity=s.verbosity}else e.reasoning_effort||(o.reasoning_effort=R(t));return o.reasoning_effort=this.normalizeReasoningEffort(t,o.reasoning_effort),o}normalizeReasoningEffort(e,t){if(t)return t==="none"&&!Nt(e)?R(e):t==="minimal"&&!wt(e)?R(e):t==="low"&&!Vt(e)?R(e):t==="xhigh"&&!Dt(e)?R(e):t}};var ve=class{constructor(e,t=G,o=G,s,i=Ie,n,a,l,u,m,c){this.provider="openrouter";this.lastRequestTime=0;this.requestCount=0;this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.responseLength=n,this.appName=a,this.appUrl=l,this.reasoning_effort=u,this.includeReasoning=m,this.reasoningMaxTokens=c,this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async applyRateLimiting(){if(!z(this.model))return;let e=Date.now(),t=e-this.lastRequestTime;if(t>6e4&&(this.requestCount=0),this.requestCount>=Bt){let o=6e4-t;o>0&&(console.log(`Rate limit reached for free tier. Waiting ${o}ms...`),await new Promise(s=>setTimeout(s,o)),this.requestCount=0)}this.lastRequestTime=e,this.requestCount++}async processChat(e,t,o){await this.applyRateLimiting(),await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callOpenRouter(e,this.model,!0);return this.handleStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){if(!te(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await this.applyRateLimiting();try{await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callOpenRouter(e,this.visionModel,!0);return this.handleStream(s,t)},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}catch(s){throw console.error("Error in processVisionChat:",s),s}}async chatOnce(e,t=!0,o=()=>{},s){await this.applyRateLimiting();let i=await this.callOpenRouter(e,this.model,t,s);return t?this.parseStream(i,o):this.parseOneShot(await i.json())}async visionChatOnce(e,t=!1,o=()=>{},s){if(!te(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await this.applyRateLimiting();let i=await this.callOpenRouter(e,this.visionModel,t,s);return t?this.parseStream(i,o):this.parseOneShot(await i.json())}async callOpenRouter(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s),n={Authorization:`Bearer ${this.apiKey}`};return this.appUrl&&(n["HTTP-Referer"]=this.appUrl),this.appName&&(n["X-Title"]=this.appName),await _.post(this.endpoint,i,n)}buildRequestBody(e,t,o,s){let i={model:t,messages:e,stream:o};if((s!==void 0?s:O(this.responseLength))&&console.warn("OpenRouter: Token limits are not supported for gpt-oss-20b model due to known issues. Using unlimited tokens instead."),this.reasoning_effort!==void 0||this.includeReasoning!==void 0||this.reasoningMaxTokens){if(i.reasoning={},this.reasoning_effort&&this.reasoning_effort!=="none"){let a=this.reasoning_effort==="minimal"?"low":this.reasoning_effort;i.reasoning.effort=a}(this.reasoning_effort==="none"||this.includeReasoning!==!0)&&(i.reasoning.exclude=!0),this.reasoningMaxTokens&&(i.reasoning.max_tokens=this.reasoningMaxTokens)}else i.reasoning={exclude:!0};return this.tools.length>0&&(i.tools=P(this.tools,"chat-completions"),i.tool_choice="auto"),i}async handleStream(e,t){return y(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}async parseStream(e,t){return T(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}parseOneShot(e){return L(e)}};var Me=class{createChatService(e){let t=E({model:e.model,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:e.model||this.getDefaultModel(),supportsVisionForModel:n=>this.supportsVisionForModel(n),validate:"explicit"}),o=e.tools,s=e.appName,i=e.appUrl;return new ve(e.apiKey,e.model||this.getDefaultModel(),t,o,e.endpoint,e.responseLength,s,i,e.reasoning_effort,e.includeReasoning,e.reasoningMaxTokens)}getProviderName(){return"openrouter"}getSupportedModels(){return[G,ft,st,it,rt,nt,at,lt,pt,ct,ut,ht,Ft,dt,mt,gt,_t,Ut,Ht,ot]}getDefaultModel(){return G}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return this.getSupportedModels().some(e=>this.supportsVisionForModel(e))?"supported":"unsupported"}supportsVisionForModel(e){return te(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}getFreeModels(){return Wt}isModelFree(e){return z(e)}};var Oe=class{constructor(e,t=A,o=A,s,i=Re,n){this.provider="xai";this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.responseLength=n,this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async processChat(e,t,o){await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callXAI(e,this.model,!0);return this.handleStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){if(!ie(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callXAI(e,this.visionModel,!0);return this.handleStream(s,t)},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callXAI(e,this.model,t,s);return this.parseResponse(i,t,o)}async visionChatOnce(e,t=!1,o=()=>{},s){if(!ie(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);let i=await this.callXAI(e,this.visionModel,t,s);return this.parseResponse(i,t,o)}async parseResponse(e,t,o){return t?this.parseStream(e,o):this.parseOneShot(await e.json())}async callXAI(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s);return await _.post(this.endpoint,i,{Authorization:`Bearer ${this.apiKey}`})}buildRequestBody(e,t,o,s){let i={model:t,stream:o,messages:e},n=s!==void 0?s:O(this.responseLength);n!==void 0&&(i.max_tokens=n);let a=this.buildToolsDefinition();return a.length>0&&(i.tools=a,i.tool_choice="auto"),i}buildToolsDefinition(){return P(this.tools,"chat-completions")}async handleStream(e,t){return y(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}async parseStream(e,t){return T(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}parseOneShot(e){return L(e)}};var Ee=class{createChatService(e){let t=e.model||this.getDefaultModel(),o=E({model:t,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultVisionModel(),supportsVisionForModel:i=>this.supportsVisionForModel(i),validate:"explicit"}),s=e.tools;return new Oe(e.apiKey,t,o,s,e.endpoint||Re,e.responseLength)}getProviderName(){return"xai"}getSupportedModels(){return[Ot,Et,Ct,A]}getDefaultModel(){return A}getDefaultVisionModel(){return A}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return ie(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}};var Ce=class{constructor(e,t=oe,o=X,s,i=be,n,a,l){this.provider="zai";this.apiKey=e,this.model=t,this.tools=s||[],this.endpoint=i,this.responseLength=n,this.responseFormat=a,this.thinking=l??{type:"disabled"},this.visionModel=o}getModel(){return this.model}getVisionModel(){return this.visionModel}async processChat(e,t,o){await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callZAI(e,this.model,!0);return this.handleStream(s,t)},runWithTools:()=>this.chatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processChat received tool_calls. ChatProcessor must use chatOnce() loop when tools are enabled."})}async processVisionChat(e,t,o){if(!se(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);await f({hasTools:this.tools.length>0,runWithoutTools:async()=>{let s=await this.callZAI(e,this.visionModel,!0);return this.handleStream(s,t)},runWithTools:()=>this.visionChatOnce(e,!0,t),onCompleteResponse:o,toolErrorMessage:"processVisionChat received tool_calls. ChatProcessor must use visionChatOnce() loop when tools are enabled."})}async chatOnce(e,t=!0,o=()=>{},s){let i=await this.callZAI(e,this.model,t,s);return this.parseResponse(i,t,o)}async visionChatOnce(e,t=!1,o=()=>{},s){if(!se(this.visionModel))throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);let i=await this.callZAI(e,this.visionModel,t,s);return this.parseResponse(i,t,o)}async parseResponse(e,t,o){return t?this.parseStream(e,o):this.parseOneShot(await e.json())}async callZAI(e,t,o=!1,s){let i=this.buildRequestBody(e,t,o,s);return await _.post(this.endpoint,i,{Authorization:`Bearer ${this.apiKey}`})}buildRequestBody(e,t,o,s){let i={model:t,stream:o,messages:e},n=s!==void 0?s:O(this.responseLength);n!==void 0&&(i.max_tokens=n),this.responseFormat&&(i.response_format=this.responseFormat),this.thinking&&(i.thinking=this.thinking);let a=this.buildToolsDefinition();return a.length>0&&(i.tools=a,i.tool_choice="auto",o&&Xt(t)&&(i.tool_stream=!0)),i}buildToolsDefinition(){return P(this.tools,"chat-completions")}async handleStream(e,t){return y(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}async parseStream(e,t){return T(e,t,{onJsonError:o=>console.debug("Failed to parse SSE data:",o)})}parseOneShot(e){return L(e)}};var Se=class{createChatService(e){let t=e.model||this.getDefaultModel(),o=E({model:t,visionModel:e.visionModel,defaultModel:this.getDefaultModel(),defaultVisionModel:this.getDefaultVisionModel(),supportsVisionForModel:n=>this.supportsVisionForModel(n),validate:"explicit"}),s=e.tools,i=e.thinking??{type:"disabled"};return new Ce(e.apiKey,t,o,s,e.endpoint||be,e.responseLength,e.responseFormat,i)}getProviderName(){return"zai"}getSupportedModels(){return[Kt,$t,oe,jt,qt,zt,vt,Mt,X]}getDefaultModel(){return oe}getDefaultVisionModel(){return X}supportsVision(){return this.getVisionSupportLevel()!=="unsupported"}getVisionSupportLevel(){return"supported"}supportsVisionForModel(e){return se(e)}getVisionSupportLevelForModel(e){return this.supportsVisionForModel(e)?"supported":"unsupported"}};var ho=[new fe,new _e,new ue,new de,new pe,new Me,new Se,new Ee,new ge];var ye=class{static registerProvider(e){this.providers.set(e.getProviderName(),e)}static createChatService(e,t){let o=this.providers.get(e);if(!o)throw new Error(`Unknown chat provider: ${e}`);return o.createChatService(t)}static getProviders(){return this.providers}static getAvailableProviders(){return Array.from(this.providers.keys())}static getSupportedModels(e){let t=this.providers.get(e);return t?t.getSupportedModels():[]}static getVisionSupportLevel(e){let t=this.providers.get(e);return t?t.getVisionSupportLevel():"unsupported"}static getVisionSupportLevelForModel(e,t){let o=this.providers.get(e);return o?o.getVisionSupportLevelForModel?o.getVisionSupportLevelForModel(t):o.supportsVisionForModel?o.supportsVisionForModel(t)?"supported":"unsupported":o.getVisionSupportLevel():"unsupported"}};ye.providers=new Map;ho.forEach(r=>ye.registerProvider(r));function mo(){_.setFetch(async(r,e={})=>{let t=(e.method||"GET").toString().toUpperCase(),o=e.headers,s={};if(Array.isArray(o))for(let[c,d]of o)s[c]=String(d);else if(o&&typeof o=="object")for(let[c,d]of Object.entries(o))s[c]=String(d);let i={method:t,headers:s,muteHttpExceptions:!0},n=e.body;typeof n=="string"?i.payload=n:n!=null&&(s["Content-Type"]||(s["Content-Type"]="application/json"),i.payload=JSON.stringify(n));let a=UrlFetchApp.fetch(r,i),l=a.getResponseCode(),u=a.getContentText();return{ok:l>=200&&l<300,status:l,statusText:String(l),text:async()=>u,json:async()=>u?JSON.parse(u):null}})}return Oo(jo);})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aituber-onair/chat",
3
- "version": "0.27.0",
3
+ "version": "0.28.0",
4
4
  "description": "Chat and LLM API integration library for AITuber OnAir",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",