@aituber-onair/chat 0.30.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.ja.md +262 -2
  2. package/README.md +280 -2
  3. package/dist/cjs/agent.d.ts +3 -0
  4. package/dist/cjs/agent.d.ts.map +1 -0
  5. package/dist/cjs/agent.js +21 -0
  6. package/dist/cjs/agent.js.map +1 -0
  7. package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatService.d.ts +39 -0
  8. package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatService.d.ts.map +1 -0
  9. package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatService.js +103 -0
  10. package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatService.js.map +1 -0
  11. package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatServiceProvider.d.ts +14 -0
  12. package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatServiceProvider.d.ts.map +1 -0
  13. package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatServiceProvider.js +31 -0
  14. package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatServiceProvider.js.map +1 -0
  15. package/dist/cjs/services/providers/agent/CodexSDKChatService.d.ts +29 -0
  16. package/dist/cjs/services/providers/agent/CodexSDKChatService.d.ts.map +1 -0
  17. package/dist/cjs/services/providers/agent/CodexSDKChatService.js +65 -0
  18. package/dist/cjs/services/providers/agent/CodexSDKChatService.js.map +1 -0
  19. package/dist/cjs/services/providers/agent/CodexSDKChatServiceProvider.d.ts +14 -0
  20. package/dist/cjs/services/providers/agent/CodexSDKChatServiceProvider.d.ts.map +1 -0
  21. package/dist/cjs/services/providers/agent/CodexSDKChatServiceProvider.js +31 -0
  22. package/dist/cjs/services/providers/agent/CodexSDKChatServiceProvider.js.map +1 -0
  23. package/dist/cjs/services/providers/agent/CopilotSDKChatService.d.ts +48 -0
  24. package/dist/cjs/services/providers/agent/CopilotSDKChatService.d.ts.map +1 -0
  25. package/dist/cjs/services/providers/agent/CopilotSDKChatService.js +79 -0
  26. package/dist/cjs/services/providers/agent/CopilotSDKChatService.js.map +1 -0
  27. package/dist/cjs/services/providers/agent/CopilotSDKChatServiceProvider.d.ts +14 -0
  28. package/dist/cjs/services/providers/agent/CopilotSDKChatServiceProvider.d.ts.map +1 -0
  29. package/dist/cjs/services/providers/agent/CopilotSDKChatServiceProvider.js +31 -0
  30. package/dist/cjs/services/providers/agent/CopilotSDKChatServiceProvider.js.map +1 -0
  31. package/dist/cjs/services/providers/agent/index.d.ts +24 -0
  32. package/dist/cjs/services/providers/agent/index.d.ts.map +1 -0
  33. package/dist/cjs/services/providers/agent/index.js +33 -0
  34. package/dist/cjs/services/providers/agent/index.js.map +1 -0
  35. package/dist/cjs/services/providers/agent/shared.d.ts +36 -0
  36. package/dist/cjs/services/providers/agent/shared.d.ts.map +1 -0
  37. package/dist/cjs/services/providers/agent/shared.js +122 -0
  38. package/dist/cjs/services/providers/agent/shared.js.map +1 -0
  39. package/dist/esm/agent.d.ts +3 -0
  40. package/dist/esm/agent.d.ts.map +1 -0
  41. package/dist/esm/agent.js +5 -0
  42. package/dist/esm/agent.js.map +1 -0
  43. package/dist/esm/services/providers/agent/ClaudeAgentSDKChatService.d.ts +39 -0
  44. package/dist/esm/services/providers/agent/ClaudeAgentSDKChatService.d.ts.map +1 -0
  45. package/dist/esm/services/providers/agent/ClaudeAgentSDKChatService.js +99 -0
  46. package/dist/esm/services/providers/agent/ClaudeAgentSDKChatService.js.map +1 -0
  47. package/dist/esm/services/providers/agent/ClaudeAgentSDKChatServiceProvider.d.ts +14 -0
  48. package/dist/esm/services/providers/agent/ClaudeAgentSDKChatServiceProvider.d.ts.map +1 -0
  49. package/dist/esm/services/providers/agent/ClaudeAgentSDKChatServiceProvider.js +27 -0
  50. package/dist/esm/services/providers/agent/ClaudeAgentSDKChatServiceProvider.js.map +1 -0
  51. package/dist/esm/services/providers/agent/CodexSDKChatService.d.ts +29 -0
  52. package/dist/esm/services/providers/agent/CodexSDKChatService.d.ts.map +1 -0
  53. package/dist/esm/services/providers/agent/CodexSDKChatService.js +61 -0
  54. package/dist/esm/services/providers/agent/CodexSDKChatService.js.map +1 -0
  55. package/dist/esm/services/providers/agent/CodexSDKChatServiceProvider.d.ts +14 -0
  56. package/dist/esm/services/providers/agent/CodexSDKChatServiceProvider.d.ts.map +1 -0
  57. package/dist/esm/services/providers/agent/CodexSDKChatServiceProvider.js +27 -0
  58. package/dist/esm/services/providers/agent/CodexSDKChatServiceProvider.js.map +1 -0
  59. package/dist/esm/services/providers/agent/CopilotSDKChatService.d.ts +48 -0
  60. package/dist/esm/services/providers/agent/CopilotSDKChatService.d.ts.map +1 -0
  61. package/dist/esm/services/providers/agent/CopilotSDKChatService.js +75 -0
  62. package/dist/esm/services/providers/agent/CopilotSDKChatService.js.map +1 -0
  63. package/dist/esm/services/providers/agent/CopilotSDKChatServiceProvider.d.ts +14 -0
  64. package/dist/esm/services/providers/agent/CopilotSDKChatServiceProvider.d.ts.map +1 -0
  65. package/dist/esm/services/providers/agent/CopilotSDKChatServiceProvider.js +27 -0
  66. package/dist/esm/services/providers/agent/CopilotSDKChatServiceProvider.js.map +1 -0
  67. package/dist/esm/services/providers/agent/index.d.ts +24 -0
  68. package/dist/esm/services/providers/agent/index.d.ts.map +1 -0
  69. package/dist/esm/services/providers/agent/index.js +19 -0
  70. package/dist/esm/services/providers/agent/index.js.map +1 -0
  71. package/dist/esm/services/providers/agent/shared.d.ts +36 -0
  72. package/dist/esm/services/providers/agent/shared.d.ts.map +1 -0
  73. package/dist/esm/services/providers/agent/shared.js +116 -0
  74. package/dist/esm/services/providers/agent/shared.js.map +1 -0
  75. package/package.json +6 -1
package/README.ja.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  ![@aituber-onair/chat ロゴ](./images/aituber-onair-chat.png)
4
4
 
5
- AITuber OnAirのチャット・LLM API統合ライブラリです。このパッケージは、OpenAI、ローカルLLM含むOpenAI互換プロバイダー、Claude、Gemini、Gemini Nano(Chromeブラウザ内蔵AI)、OpenRouter、Z.ai、xAI、Kimi等の様々なAIチャットプロバイダーとやり取りするための統一されたインターフェースを提供します。
5
+ AITuber OnAirのチャット・LLM API統合ライブラリです。このパッケージは、OpenAI、ローカルLLM含むOpenAI互換プロバイダー、Claude、Gemini、Gemini Nano(Chromeブラウザ内蔵AI)、OpenRouter、Z.ai、xAI、Kimi、Agent SDKプロバイダー等の様々なAIチャットプロバイダーとやり取りするための統一されたインターフェースを提供します。
6
6
 
7
7
  ## 機能
8
8
 
9
- - 🤖 **複数のAIプロバイダー対応**: OpenAI、ローカルLLM含むOpenAI互換プロバイダー、Claude (Anthropic)、Google Gemini、Gemini Nano(Chromeブラウザ内蔵AI)、OpenRouter、Z.ai、xAI、Kimi
9
+ - 🤖 **複数のAIプロバイダー対応**: OpenAI、ローカルLLM含むOpenAI互換プロバイダー、Claude (Anthropic)、Google Gemini、Gemini Nano(Chromeブラウザ内蔵AI)、OpenRouter、Z.ai、xAI、Kimi、Agent SDKプロバイダー
10
10
  - 🔄 **統一されたインターフェース**: 異なるプロバイダー間での一貫したAPI
11
11
  - 🛠️ **ツール・関数呼び出し**: AI関数呼び出しの自動反復処理をサポート
12
12
  - 💬 **ストリーミングレスポンス**: リアルタイムストリーミングチャット応答
@@ -14,6 +14,7 @@ AITuber OnAirのチャット・LLM API統合ライブラリです。このパッ
14
14
  - 📝 **感情検出**: AI応答からの感情抽出
15
15
  - 🎯 **応答長制御**: プリセットまたはカスタムトークン制限での応答長設定
16
16
  - 🔌 **Model Context Protocol (MCP)**: MCP サーバーサポート
17
+ - 🧩 **Agent SDKプロバイダー**: エージェントSDKパッケージを標準インストールに含めず、任意で `@aituber-onair/chat/agent` から利用可能
17
18
 
18
19
  ## インストール
19
20
 
@@ -88,6 +89,133 @@ async function testChat() {
88
89
  - スクリプトプロパティに `OPENAI_API_KEY` を設定。
89
90
  - 実例は `packages/chat/examples/gas-basic` を参照。`appsscript.json` は任意(近年のGASは既定でV8ランタイム)。タイムゾーン等をカスタムしたい場合のみ追加してください。
90
91
 
92
+ ## Agent SDKプロバイダー
93
+
94
+ Codex SDK、Claude Agent SDK、Copilot SDK のようなエージェントSDKを使う場合は、
95
+ 専用の `@aituber-onair/chat/agent` エントリを使用します。
96
+
97
+ ```typescript
98
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
99
+ ```
100
+
101
+ このエントリはブラウザ/GAS向けUMDビルドには含まれません。エージェントSDKパッケージは
102
+ 動的に読み込むため、利用する SDK だけを JavaScript ランタイムアプリ側に追加してください。
103
+
104
+ ```bash
105
+ npm install @aituber-onair/chat @openai/codex-sdk
106
+ # または
107
+ npm install @aituber-onair/chat @anthropic-ai/claude-agent-sdk
108
+ # または
109
+ npm install @aituber-onair/chat @github/copilot-sdk
110
+ ```
111
+
112
+ Codex SDK を使う最短例:
113
+
114
+ ```typescript
115
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
116
+
117
+ const chatService = createAgentChatService('codex-sdk', {
118
+ workingDirectory: process.cwd(),
119
+ skipGitRepoCheck: true,
120
+ });
121
+
122
+ const messages = [
123
+ {
124
+ role: 'system',
125
+ content:
126
+ 'あなたはライブ配信中のAIアバターです。親しみやすく短めに返答してください。',
127
+ },
128
+ { role: 'user', content: '今日はTypeScriptのライブラリを作っています。' },
129
+ {
130
+ role: 'assistant',
131
+ content: 'いいですね。作業の合間に、会話で少し気分転換しましょう。',
132
+ },
133
+ { role: 'user', content: '夜の作業に合う飲み物をおすすめして。' },
134
+ ];
135
+
136
+ const response = await chatService.chatOnce(messages, false);
137
+
138
+ console.log(response);
139
+ ```
140
+
141
+ Claude Agent SDK を使う場合:
142
+
143
+ ```typescript
144
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
145
+
146
+ const chatService = createAgentChatService('claude-agent-sdk', {
147
+ workingDirectory: process.cwd(),
148
+ maxTurns: 1,
149
+ });
150
+
151
+ const messages = [
152
+ {
153
+ role: 'system',
154
+ content:
155
+ 'あなたはライブ配信中のAIアバターです。親しみやすく短めに返答してください。',
156
+ },
157
+ { role: 'user', content: '今日はTypeScriptのライブラリを作っています。' },
158
+ {
159
+ role: 'assistant',
160
+ content: 'いいですね。作業の合間に、会話で少し気分転換しましょう。',
161
+ },
162
+ { role: 'user', content: '夜の作業に合う飲み物をおすすめして。' },
163
+ ];
164
+
165
+ const response = await chatService.chatOnce(messages, false);
166
+
167
+ console.log(response);
168
+ ```
169
+
170
+ このプロバイダーでは、Claude Agent SDK を通常のチャット応答生成にだけ使います。
171
+ 既定では Claude Code のファイル操作やコマンド実行などのツール機能は使いません。
172
+ 2026年6月15日以降、対象の有料 Claude プランでは Agent SDK 用の月間クレジットを
173
+ 利用できます。APIキーを使う Developer Platform の利用は従来通り従量課金です。
174
+
175
+ Copilot SDK を使う場合:
176
+
177
+ ```typescript
178
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
179
+
180
+ const chatService = createAgentChatService('copilot-sdk', {
181
+ model: 'gpt-4.1',
182
+ });
183
+
184
+ const messages = [
185
+ {
186
+ role: 'system',
187
+ content:
188
+ 'あなたはライブ配信中のAIアバターです。親しみやすく短めに返答してください。',
189
+ },
190
+ { role: 'user', content: '今日はTypeScriptのライブラリを作っています。' },
191
+ {
192
+ role: 'assistant',
193
+ content: 'いいですね。作業の合間に、会話で少し気分転換しましょう。',
194
+ },
195
+ { role: 'user', content: '夜の作業に合う飲み物をおすすめして。' },
196
+ ];
197
+
198
+ const response = await chatService.chatOnce(messages, false);
199
+
200
+ console.log(response);
201
+ ```
202
+
203
+ Copilot SDK はセッション作成時に権限リクエスト用ハンドラが必須です。
204
+ このパッケージでは安全側に倒すため、未指定時は SDK が管理するツール実行を
205
+ 拒否します。ツール実行を許可したい場合は、利用側で `onPermissionRequest` を
206
+ 明示してください。
207
+
208
+ ```typescript
209
+ const chatService = createAgentChatService('copilot-sdk', {
210
+ model: 'gpt-4.1',
211
+ onPermissionRequest: () => ({ kind: 'approve-once' }),
212
+ });
213
+ ```
214
+
215
+ 利用前に、各 SDK のローカル認証を済ませておく必要があります。SDK パッケージが
216
+ 未インストール、または認証が未完了の場合は、実行時に元の SDK エラー詳細を含む
217
+ エラーを投げます。
218
+
91
219
  ## 使用方法
92
220
 
93
221
  ### 基本的なチャット
@@ -162,6 +290,138 @@ const localCompatibleService = ChatServiceFactory.createChatService(
162
290
  - 接続先サーバーは OpenAI互換API 契約を満たす必要があります。
163
291
  - 本パッケージは特定のローカルLLM製品に依存しません。
164
292
 
293
+ #### Agent SDKプロバイダー
294
+
295
+ `@aituber-onair/chat/agent` は、Codex SDK、Claude Agent SDK、Copilot SDK のような
296
+ エージェントSDK向けの実験的なプロバイダーを公開します。ブラウザ/GAS向けUMDエントリには
297
+ 含まれず、APIキーも使用しません。
298
+
299
+ 利用するエージェントSDKパッケージだけを、利用側の JavaScript ランタイムアプリに追加してください。
300
+
301
+ ```bash
302
+ npm install @aituber-onair/chat @openai/codex-sdk
303
+ # または
304
+ npm install @aituber-onair/chat @anthropic-ai/claude-agent-sdk
305
+ # または
306
+ npm install @aituber-onair/chat @github/copilot-sdk
307
+ ```
308
+
309
+ `@openai/codex-sdk`、`@anthropic-ai/claude-agent-sdk`、`@github/copilot-sdk` は
310
+ `@aituber-onair/chat` の依存関係には含めていません。SDK は動的に読み込むため、通常の API
311
+ プロバイダーだけを使うユーザーはこれらのエージェントSDKパッケージをインストールする
312
+ 必要がありません。
313
+
314
+ ```typescript
315
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
316
+
317
+ const codexService = createAgentChatService('codex-sdk', {
318
+ workingDirectory: process.cwd(),
319
+ skipGitRepoCheck: true,
320
+ });
321
+
322
+ const messages = [
323
+ {
324
+ role: 'system',
325
+ content:
326
+ 'あなたはライブ配信中のAIアバターです。視聴者との自然な会話を続けてください。',
327
+ },
328
+ { role: 'user', content: '最近、個人開発の進め方で悩んでいます。' },
329
+ {
330
+ role: 'assistant',
331
+ content: '無理なく続けられる形を一緒に考えましょう。',
332
+ },
333
+ { role: 'user', content: '今日は何から手をつけるのが良さそう?' },
334
+ ];
335
+
336
+ const result = await codexService.chatOnce(messages, false, (text) =>
337
+ process.stdout.write(text),
338
+ );
339
+ ```
340
+
341
+ Claude Agent SDK を使う場合は `claude-agent-sdk` を指定します。
342
+
343
+ ```typescript
344
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
345
+
346
+ const claudeService = createAgentChatService('claude-agent-sdk', {
347
+ workingDirectory: process.cwd(),
348
+ maxTurns: 1,
349
+ });
350
+
351
+ const messages = [
352
+ {
353
+ role: 'system',
354
+ content:
355
+ 'あなたはライブ配信中のAIアバターです。視聴者との自然な会話を続けてください。',
356
+ },
357
+ { role: 'user', content: '最近、個人開発の進め方で悩んでいます。' },
358
+ {
359
+ role: 'assistant',
360
+ content: '無理なく続けられる形を一緒に考えましょう。',
361
+ },
362
+ { role: 'user', content: '今日は何から手をつけるのが良さそう?' },
363
+ ];
364
+
365
+ const result = await claudeService.chatOnce(messages, false, (text) =>
366
+ process.stdout.write(text),
367
+ );
368
+ ```
369
+
370
+ Claude Agent SDK は既定で `tools: []`、`permissionMode: 'dontAsk'`、
371
+ `settingSources: []` を指定し、Claude Code のファイル操作・コマンド実行や
372
+ プロジェクト/ユーザー設定を使わずにチャット応答を生成します。
373
+
374
+ Copilot SDK を使う場合は `copilot-sdk` を指定します。
375
+
376
+ ```typescript
377
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
378
+
379
+ const copilotService = createAgentChatService('copilot-sdk', {
380
+ model: 'gpt-4.1',
381
+ });
382
+
383
+ const messages = [
384
+ {
385
+ role: 'system',
386
+ content:
387
+ 'あなたはライブ配信中のAIアバターです。視聴者との自然な会話を続けてください。',
388
+ },
389
+ { role: 'user', content: '最近、個人開発の進め方で悩んでいます。' },
390
+ {
391
+ role: 'assistant',
392
+ content: '無理なく続けられる形を一緒に考えましょう。',
393
+ },
394
+ { role: 'user', content: '今日は何から手をつけるのが良さそう?' },
395
+ ];
396
+
397
+ const result = await copilotService.chatOnce(messages, false, (text) =>
398
+ process.stdout.write(text),
399
+ );
400
+ ```
401
+
402
+ Copilot SDK はセッション作成時に権限リクエスト用ハンドラが必須です。
403
+ このパッケージでは安全側に倒すため、未指定時は SDK が管理するツール実行を
404
+ 拒否します。ツール実行を許可する場合は、利用側で `onPermissionRequest` を
405
+ 渡してください。たとえば、すべて許可する場合は次のように指定できます。
406
+
407
+ ```typescript
408
+ const copilotService = createAgentChatService('copilot-sdk', {
409
+ model: 'gpt-4.1',
410
+ onPermissionRequest: () => ({ kind: 'approve-once' }),
411
+ });
412
+ ```
413
+
414
+ 利用可能なプロバイダー:
415
+ - `codex-sdk`: `@openai/codex-sdk` と Codex 認証が必要です。
416
+ - `claude-agent-sdk`: `@anthropic-ai/claude-agent-sdk` と Claude Agent SDK 認証が必要です。
417
+ - `copilot-sdk`: `@github/copilot-sdk` と GitHub Copilot 認証が必要です。
418
+
419
+ 現時点の制限:
420
+ - テキストチャットのみ対応します。
421
+ - Vision chat、tools、MCP servers は意図的に未対応です。
422
+ - エージェントSDKパッケージが未インストール、またはローカル認証が未完了の場合は、
423
+ 実行時に元のSDKエラー詳細を含むエラーを投げます。
424
+
165
425
  #### OpenAI互換(ローカル/セルフホスト)
166
426
 
167
427
  公式OpenAI利用と互換エンドポイント利用を明確に分離したい場合は、
package/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  ![@aituber-onair/chat logo](https://github.com/shinshin86/aituber-onair/raw/main/packages/chat/images/aituber-onair-chat.png)
4
4
 
5
- Chat and LLM API integration library for AITuber OnAir. This package provides a unified interface for interacting with various AI chat providers including OpenAI, OpenAI-compatible, Claude, Gemini, Gemini Nano (Chrome built-in AI), OpenRouter, Z.ai, xAI, and Kimi.
5
+ Chat and LLM API integration library for AITuber OnAir. This package provides a unified interface for interacting with various AI chat providers including OpenAI, OpenAI-compatible, Claude, Gemini, Gemini Nano (Chrome built-in AI), OpenRouter, Z.ai, xAI, Kimi, and Agent SDK providers.
6
6
 
7
7
  ## Features
8
8
 
9
- - 🤖 **Multiple AI Provider Support**: OpenAI, OpenAI-compatible, Claude (Anthropic), Google Gemini, Gemini Nano (Chrome built-in AI), OpenRouter, Z.ai, xAI, and Kimi
9
+ - 🤖 **Multiple AI Provider Support**: OpenAI, OpenAI-compatible, Claude (Anthropic), Google Gemini, Gemini Nano (Chrome built-in AI), OpenRouter, Z.ai, xAI, Kimi, and Agent SDK providers
10
10
  - 🔄 **Unified Interface**: Consistent API across different providers
11
11
  - 🛠️ **Tool/Function Calling**: Support for AI function calling with automatic iteration
12
12
  - 💬 **Streaming Responses**: Real-time streaming chat responses
@@ -14,6 +14,7 @@ Chat and LLM API integration library for AITuber OnAir. This package provides a
14
14
  - 📝 **Emotion Detection**: Extract emotions from AI responses
15
15
  - 🎯 **Response Length Control**: Configure response lengths with presets or custom token limits
16
16
  - 🔌 **Model Context Protocol (MCP)**: Support for MCP servers
17
+ - 🧩 **Agent SDK Providers**: Optional `@aituber-onair/chat/agent` entry for agent SDK providers without adding agent SDK packages to the default install
17
18
 
18
19
  ## Installation
19
20
 
@@ -88,6 +89,141 @@ Notes:
88
89
  - Set your API key in Script Properties: `OPENAI_API_KEY`.
89
90
  - See `packages/chat/examples/gas-basic` for a working example. The Apps Script manifest (`appsscript.json`) is optional; modern projects default to V8. Add one only if you need custom settings (e.g., time zone).
90
91
 
92
+ ## Agent SDK Providers
93
+
94
+ For agent SDKs such as Codex SDK, Claude Agent SDK, and Copilot SDK, use the
95
+ separate `@aituber-onair/chat/agent` entry point:
96
+
97
+ ```typescript
98
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
99
+ ```
100
+
101
+ This entry is not part of the browser/GAS UMD build. It loads agent SDK packages
102
+ dynamically, so install only the agent SDK package used by your JavaScript runtime application:
103
+
104
+ ```bash
105
+ npm install @aituber-onair/chat @openai/codex-sdk
106
+ # or
107
+ npm install @aituber-onair/chat @anthropic-ai/claude-agent-sdk
108
+ # or
109
+ npm install @aituber-onair/chat @github/copilot-sdk
110
+ ```
111
+
112
+ Minimal Codex SDK example:
113
+
114
+ ```typescript
115
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
116
+
117
+ const chatService = createAgentChatService('codex-sdk', {
118
+ workingDirectory: process.cwd(),
119
+ skipGitRepoCheck: true,
120
+ });
121
+
122
+ const messages = [
123
+ {
124
+ role: 'system',
125
+ content:
126
+ 'You are a friendly AI avatar for a live chat. Reply warmly and concisely.',
127
+ },
128
+ { role: 'user', content: 'I am working on a TypeScript library tonight.' },
129
+ {
130
+ role: 'assistant',
131
+ content: 'Nice. I can keep the conversation light while you work.',
132
+ },
133
+ {
134
+ role: 'user',
135
+ content: 'What drink would you recommend for a late-night coding session?',
136
+ },
137
+ ];
138
+
139
+ const response = await chatService.chatOnce(messages, false);
140
+
141
+ console.log(response);
142
+ ```
143
+
144
+ For Claude Agent SDK:
145
+
146
+ ```typescript
147
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
148
+
149
+ const chatService = createAgentChatService('claude-agent-sdk', {
150
+ workingDirectory: process.cwd(),
151
+ maxTurns: 1,
152
+ });
153
+
154
+ const messages = [
155
+ {
156
+ role: 'system',
157
+ content:
158
+ 'You are a friendly AI avatar for a live chat. Reply warmly and concisely.',
159
+ },
160
+ { role: 'user', content: 'I am working on a TypeScript library tonight.' },
161
+ {
162
+ role: 'assistant',
163
+ content: 'Nice. I can keep the conversation light while you work.',
164
+ },
165
+ {
166
+ role: 'user',
167
+ content: 'What drink would you recommend for a late-night coding session?',
168
+ },
169
+ ];
170
+
171
+ const response = await chatService.chatOnce(messages, false);
172
+
173
+ console.log(response);
174
+ ```
175
+
176
+ Claude Agent SDK is run as a text-chat provider with built-in tools disabled by
177
+ default. Eligible Claude subscription plans can use Agent SDK monthly credits
178
+ starting June 15, 2026; API-key based Developer Platform usage remains
179
+ pay-as-you-go.
180
+
181
+ For Copilot SDK:
182
+
183
+ ```typescript
184
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
185
+
186
+ const chatService = createAgentChatService('copilot-sdk', {
187
+ model: 'gpt-4.1',
188
+ });
189
+
190
+ const messages = [
191
+ {
192
+ role: 'system',
193
+ content:
194
+ 'You are a friendly AI avatar for a live chat. Reply warmly and concisely.',
195
+ },
196
+ { role: 'user', content: 'I am working on a TypeScript library tonight.' },
197
+ {
198
+ role: 'assistant',
199
+ content: 'Nice. I can keep the conversation light while you work.',
200
+ },
201
+ {
202
+ role: 'user',
203
+ content: 'What drink would you recommend for a late-night coding session?',
204
+ },
205
+ ];
206
+
207
+ const response = await chatService.chatOnce(messages, false);
208
+
209
+ console.log(response);
210
+ ```
211
+
212
+ Copilot SDK requires a permission request handler when creating a session. This
213
+ package defaults to denying SDK-managed tool execution for safety. If your
214
+ application wants to allow it, pass `onPermissionRequest` explicitly.
215
+
216
+ ```typescript
217
+ const chatService = createAgentChatService('copilot-sdk', {
218
+ model: 'gpt-4.1',
219
+ onPermissionRequest: () => ({ kind: 'approve-once' }),
220
+ });
221
+ ```
222
+
223
+ Authenticate the corresponding SDK locally before using these providers. If the
224
+ SDK package is missing or authentication is not ready, the provider throws an
225
+ error at runtime with the original SDK error details.
226
+
91
227
  ## Usage
92
228
 
93
229
  ### Basic Chat
@@ -162,6 +298,148 @@ Notes:
162
298
  - The target server must satisfy the OpenAI-compatible API contract.
163
299
  - This package does not depend on any specific local LLM product.
164
300
 
301
+ #### Agent SDK Providers
302
+
303
+ `@aituber-onair/chat/agent` exposes experimental providers for agent SDKs such
304
+ as Codex SDK, Claude Agent SDK, and Copilot SDK. These providers are not
305
+ included in the browser/GAS UMD entry point and do not use API keys.
306
+
307
+ Install only the agent SDK package you actually use in your JavaScript runtime application:
308
+
309
+ ```bash
310
+ npm install @aituber-onair/chat @openai/codex-sdk
311
+ # or
312
+ npm install @aituber-onair/chat @anthropic-ai/claude-agent-sdk
313
+ # or
314
+ npm install @aituber-onair/chat @github/copilot-sdk
315
+ ```
316
+
317
+ `@openai/codex-sdk`, `@anthropic-ai/claude-agent-sdk`, and
318
+ `@github/copilot-sdk` are not dependencies of `@aituber-onair/chat`. They are
319
+ loaded dynamically, so users who only use the normal API providers do not
320
+ install these agent SDK packages.
321
+
322
+ ```typescript
323
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
324
+
325
+ const codexService = createAgentChatService('codex-sdk', {
326
+ workingDirectory: process.cwd(),
327
+ skipGitRepoCheck: true,
328
+ });
329
+
330
+ const messages = [
331
+ {
332
+ role: 'system',
333
+ content:
334
+ 'You are a friendly AI avatar for a live chat. Keep a natural conversation going.',
335
+ },
336
+ {
337
+ role: 'user',
338
+ content: 'I am thinking about how to keep a side project moving.',
339
+ },
340
+ {
341
+ role: 'assistant',
342
+ content: 'Let us make it feel manageable and easy to restart.',
343
+ },
344
+ { role: 'user', content: 'What should I work on first today?' },
345
+ ];
346
+
347
+ const result = await codexService.chatOnce(messages, false, (text) =>
348
+ process.stdout.write(text),
349
+ );
350
+ ```
351
+
352
+ For Claude Agent SDK, use `claude-agent-sdk`.
353
+
354
+ ```typescript
355
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
356
+
357
+ const claudeService = createAgentChatService('claude-agent-sdk', {
358
+ workingDirectory: process.cwd(),
359
+ maxTurns: 1,
360
+ });
361
+
362
+ const messages = [
363
+ {
364
+ role: 'system',
365
+ content:
366
+ 'You are a friendly AI avatar for a live chat. Keep a natural conversation going.',
367
+ },
368
+ {
369
+ role: 'user',
370
+ content: 'I am thinking about how to keep a side project moving.',
371
+ },
372
+ {
373
+ role: 'assistant',
374
+ content: 'Let us make it feel manageable and easy to restart.',
375
+ },
376
+ { role: 'user', content: 'What should I work on first today?' },
377
+ ];
378
+
379
+ const result = await claudeService.chatOnce(messages, false, (text) =>
380
+ process.stdout.write(text),
381
+ );
382
+ ```
383
+
384
+ Claude Agent SDK is configured with `tools: []`, `permissionMode: 'dontAsk'`,
385
+ and `settingSources: []` by default so this provider behaves as text chat and
386
+ does not load Claude Code project/user settings unless the implementation is
387
+ expanded later.
388
+
389
+ For Copilot SDK, use `copilot-sdk`.
390
+
391
+ ```typescript
392
+ import { createAgentChatService } from '@aituber-onair/chat/agent';
393
+
394
+ const copilotService = createAgentChatService('copilot-sdk', {
395
+ model: 'gpt-4.1',
396
+ });
397
+
398
+ const messages = [
399
+ {
400
+ role: 'system',
401
+ content:
402
+ 'You are a friendly AI avatar for a live chat. Keep a natural conversation going.',
403
+ },
404
+ {
405
+ role: 'user',
406
+ content: 'I am thinking about how to keep a side project moving.',
407
+ },
408
+ {
409
+ role: 'assistant',
410
+ content: 'Let us make it feel manageable and easy to restart.',
411
+ },
412
+ { role: 'user', content: 'What should I work on first today?' },
413
+ ];
414
+
415
+ const result = await copilotService.chatOnce(messages, false, (text) =>
416
+ process.stdout.write(text),
417
+ );
418
+ ```
419
+
420
+ Copilot SDK requires a permission request handler when creating a session. This
421
+ package defaults to denying SDK-managed tool execution for safety. If you want
422
+ to allow it, pass `onPermissionRequest` from your application. For example, to
423
+ allow all requests:
424
+
425
+ ```typescript
426
+ const copilotService = createAgentChatService('copilot-sdk', {
427
+ model: 'gpt-4.1',
428
+ onPermissionRequest: () => ({ kind: 'approve-once' }),
429
+ });
430
+ ```
431
+
432
+ Available providers:
433
+ - `codex-sdk`: requires `@openai/codex-sdk` and Codex authentication.
434
+ - `claude-agent-sdk`: requires `@anthropic-ai/claude-agent-sdk` and Claude Agent SDK authentication.
435
+ - `copilot-sdk`: requires `@github/copilot-sdk` and GitHub Copilot authentication.
436
+
437
+ Current limitations:
438
+ - Text chat only.
439
+ - Vision chat, tools, and MCP servers are intentionally unsupported for now.
440
+ - If an agent SDK package is missing or local authentication is not ready, the
441
+ provider throws an error at runtime with the original SDK error details.
442
+
165
443
  #### OpenAI-Compatible (Local/Self-Hosted)
166
444
 
167
445
  Use `openai-compatible` when you want to clearly separate official OpenAI
@@ -0,0 +1,3 @@
1
+ export * from './index';
2
+ export * from './services/providers/agent';
3
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./index"), exports);
18
+ __exportStar(require("./services/providers/agent"), exports);
19
+ const agent_1 = require("./services/providers/agent");
20
+ (0, agent_1.registerAgentChatProviders)();
21
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,6DAA2C;AAE3C,sDAAwE;AAExE,IAAA,kCAA0B,GAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { ChatResponseLength } from '../../../constants';
2
+ import { AgentTextChatService } from './shared';
3
+ export declare const DEFAULT_CLAUDE_AGENT_SDK_MODEL = "claude-default";
4
+ type ClaudeAgentSDKModule = {
5
+ query: (params: {
6
+ prompt: string;
7
+ options?: Record<string, unknown>;
8
+ }) => AsyncIterable<ClaudeAgentSDKMessage>;
9
+ };
10
+ type ClaudeAgentSDKMessage = {
11
+ type: 'result';
12
+ is_error?: boolean;
13
+ result?: unknown;
14
+ errors?: unknown;
15
+ } | {
16
+ type: 'stream_event';
17
+ event?: {
18
+ type?: string;
19
+ delta?: {
20
+ type?: string;
21
+ text?: unknown;
22
+ };
23
+ };
24
+ } | Record<string, unknown>;
25
+ export type ClaudeAgentSDKLoader = () => Promise<ClaudeAgentSDKModule>;
26
+ export type ClaudeAgentSDKChatServiceOptions = {
27
+ apiKey?: never;
28
+ model?: string;
29
+ responseLength?: ChatResponseLength;
30
+ workingDirectory?: string;
31
+ maxTurns?: number;
32
+ pathToClaudeCodeExecutable?: string;
33
+ env?: Record<string, string | undefined>;
34
+ };
35
+ export declare class ClaudeAgentSDKChatService extends AgentTextChatService {
36
+ constructor(options?: ClaudeAgentSDKChatServiceOptions, loadSDK?: ClaudeAgentSDKLoader);
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=ClaudeAgentSDKChatService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeAgentSDKChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/ClaudeAgentSDKChatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAA0B,MAAM,UAAU,CAAC;AAExE,eAAO,MAAM,8BAA8B,mBAAmB,CAAC;AAE/D,KAAK,oBAAoB,GAAG;IAC1B,KAAK,EAAE,CAAC,MAAM,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,KAAK,aAAa,CAAC,qBAAqB,CAAC,CAAC;CAC5C,CAAC;AAEF,KAAK,qBAAqB,GACtB;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,OAAO,CAAC;SAChB,CAAC;KACH,CAAC;CACH,GACD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEvE,MAAM,MAAM,gCAAgC,GAAG;IAC7C,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,CAAC;AAEF,qBAAa,yBAA0B,SAAQ,oBAAoB;gBAE/D,OAAO,GAAE,gCAAqC,EAC9C,OAAO,GAAE,oBAAyC;CAyBrD"}