@aituber-onair/chat 0.58.0 → 0.59.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 +66 -9
- package/README.md +63 -8
- package/dist/cjs/backend.d.ts.map +1 -1
- package/dist/cjs/backend.js +1 -0
- package/dist/cjs/backend.js.map +1 -1
- package/dist/cjs/services/providers/agent/CursorSDKChatService.d.ts +70 -0
- package/dist/cjs/services/providers/agent/CursorSDKChatService.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/CursorSDKChatService.js +141 -0
- package/dist/cjs/services/providers/agent/CursorSDKChatService.js.map +1 -0
- package/dist/cjs/services/providers/agent/CursorSDKChatServiceProvider.d.ts +15 -0
- package/dist/cjs/services/providers/agent/CursorSDKChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/CursorSDKChatServiceProvider.js +34 -0
- package/dist/cjs/services/providers/agent/CursorSDKChatServiceProvider.js.map +1 -0
- package/dist/cjs/services/providers/agent/index.d.ts +6 -1
- package/dist/cjs/services/providers/agent/index.d.ts.map +1 -1
- package/dist/cjs/services/providers/agent/index.js +8 -1
- package/dist/cjs/services/providers/agent/index.js.map +1 -1
- package/dist/cjs/services/providers/agent/shared.d.ts +3 -1
- package/dist/cjs/services/providers/agent/shared.d.ts.map +1 -1
- package/dist/cjs/services/providers/agent/shared.js +7 -2
- package/dist/cjs/services/providers/agent/shared.js.map +1 -1
- package/dist/esm/backend.d.ts.map +1 -1
- package/dist/esm/backend.js +1 -0
- package/dist/esm/backend.js.map +1 -1
- package/dist/esm/services/providers/agent/CursorSDKChatService.d.ts +70 -0
- package/dist/esm/services/providers/agent/CursorSDKChatService.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/CursorSDKChatService.js +137 -0
- package/dist/esm/services/providers/agent/CursorSDKChatService.js.map +1 -0
- package/dist/esm/services/providers/agent/CursorSDKChatServiceProvider.d.ts +15 -0
- package/dist/esm/services/providers/agent/CursorSDKChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/CursorSDKChatServiceProvider.js +30 -0
- package/dist/esm/services/providers/agent/CursorSDKChatServiceProvider.js.map +1 -0
- package/dist/esm/services/providers/agent/index.d.ts +6 -1
- package/dist/esm/services/providers/agent/index.d.ts.map +1 -1
- package/dist/esm/services/providers/agent/index.js +4 -0
- package/dist/esm/services/providers/agent/index.js.map +1 -1
- package/dist/esm/services/providers/agent/shared.d.ts +3 -1
- package/dist/esm/services/providers/agent/shared.d.ts.map +1 -1
- package/dist/esm/services/providers/agent/shared.js +7 -2
- package/dist/esm/services/providers/agent/shared.js.map +1 -1
- package/dist/umd/aituber-onair-chat.js +1 -0
- package/dist/umd/aituber-onair-chat.min.js +1 -1
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -91,8 +91,9 @@ async function testChat() {
|
|
|
91
91
|
|
|
92
92
|
## Agent SDKプロバイダー
|
|
93
93
|
|
|
94
|
-
Codex SDK、Claude Agent SDK、Copilot SDK
|
|
95
|
-
|
|
94
|
+
Codex SDK、Claude Agent SDK、Copilot SDK、Cursor SDK のような
|
|
95
|
+
エージェントSDKを使う場合は、専用の `@aituber-onair/chat/agent` エントリを
|
|
96
|
+
使用します。
|
|
96
97
|
|
|
97
98
|
```typescript
|
|
98
99
|
import { createAgentChatService } from '@aituber-onair/chat/agent';
|
|
@@ -107,6 +108,8 @@ npm install @aituber-onair/chat @openai/codex-sdk
|
|
|
107
108
|
npm install @aituber-onair/chat @anthropic-ai/claude-agent-sdk
|
|
108
109
|
# または
|
|
109
110
|
npm install @aituber-onair/chat @github/copilot-sdk
|
|
111
|
+
# または(Node.js 22.13以上が必要)
|
|
112
|
+
npm install @aituber-onair/chat @cursor/sdk
|
|
110
113
|
```
|
|
111
114
|
|
|
112
115
|
Codex SDK を使う最短例:
|
|
@@ -212,6 +215,32 @@ const chatService = createAgentChatService('copilot-sdk', {
|
|
|
212
215
|
});
|
|
213
216
|
```
|
|
214
217
|
|
|
218
|
+
Cursor SDK を使う場合は、Node.js 22.13以上が必要です。
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
import { createAgentChatService } from '@aituber-onair/chat/agent';
|
|
222
|
+
|
|
223
|
+
const chatService = createAgentChatService('cursor-sdk', {
|
|
224
|
+
apiKey: process.env.CURSOR_API_KEY,
|
|
225
|
+
workingDirectory: process.cwd(),
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
const response = await chatService.chatOnce(
|
|
229
|
+
[{ role: 'user', content: '一文で挨拶して。' }],
|
|
230
|
+
false,
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
console.log(response);
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
認証には、セットアップ時に `Cursor.auth.login()` を一度実行する方法、
|
|
237
|
+
`CURSOR_API_KEY` を設定する方法、`apiKey` を渡す方法があります。Cursor CLI の
|
|
238
|
+
`agent login` では SDK の認証情報は作成されません。利用分は Cursor プランに
|
|
239
|
+
請求されます。このプロバイダーは `tools: []` と `settingSources: []` を指定し、
|
|
240
|
+
tools、vision、MCP は使用しません。既定のモデルIDは、
|
|
241
|
+
`Cursor.models.list()` で Cursor の Auto として返される `default` です。
|
|
242
|
+
別のモデルを使う場合は、`Cursor.models.list()` が返すIDを `model` に指定します。
|
|
243
|
+
|
|
215
244
|
利用前に、各 SDK のローカル認証を済ませておく必要があります。SDK パッケージが
|
|
216
245
|
未インストール、または認証が未完了の場合は、実行時に元の SDK エラー詳細を含む
|
|
217
246
|
エラーを投げます。
|
|
@@ -305,9 +334,10 @@ const localCompatibleService = ChatServiceFactory.createChatService(
|
|
|
305
334
|
|
|
306
335
|
#### Agent SDKプロバイダー
|
|
307
336
|
|
|
308
|
-
`@aituber-onair/chat/agent` は、Codex SDK、Claude Agent SDK、Copilot SDK
|
|
309
|
-
|
|
310
|
-
|
|
337
|
+
`@aituber-onair/chat/agent` は、Codex SDK、Claude Agent SDK、Copilot SDK、
|
|
338
|
+
Cursor SDK のようなエージェントSDK向けの実験的なプロバイダーを公開します。
|
|
339
|
+
ブラウザ/GAS向けUMDエントリには含まれません。Cursor SDK では任意で APIキーを
|
|
340
|
+
指定でき、ほかの Agent SDK プロバイダーは各 SDK のローカル認証を使用します。
|
|
311
341
|
|
|
312
342
|
利用するエージェントSDKパッケージだけを、利用側の JavaScript ランタイムアプリに追加してください。
|
|
313
343
|
|
|
@@ -317,12 +347,14 @@ npm install @aituber-onair/chat @openai/codex-sdk
|
|
|
317
347
|
npm install @aituber-onair/chat @anthropic-ai/claude-agent-sdk
|
|
318
348
|
# または
|
|
319
349
|
npm install @aituber-onair/chat @github/copilot-sdk
|
|
350
|
+
# または(Node.js 22.13以上が必要)
|
|
351
|
+
npm install @aituber-onair/chat @cursor/sdk
|
|
320
352
|
```
|
|
321
353
|
|
|
322
|
-
`@openai/codex-sdk`、`@anthropic-ai/claude-agent-sdk
|
|
323
|
-
`@aituber-onair/chat`
|
|
324
|
-
|
|
325
|
-
|
|
354
|
+
`@openai/codex-sdk`、`@anthropic-ai/claude-agent-sdk`、
|
|
355
|
+
`@github/copilot-sdk`、`@cursor/sdk` は `@aituber-onair/chat` の依存関係には
|
|
356
|
+
含めていません。SDK は動的に読み込むため、通常の API プロバイダーだけを使う
|
|
357
|
+
ユーザーはこれらのエージェントSDKパッケージをインストールする必要がありません。
|
|
326
358
|
|
|
327
359
|
```typescript
|
|
328
360
|
import { createAgentChatService } from '@aituber-onair/chat/agent';
|
|
@@ -424,10 +456,35 @@ const copilotService = createAgentChatService('copilot-sdk', {
|
|
|
424
456
|
});
|
|
425
457
|
```
|
|
426
458
|
|
|
459
|
+
Cursor SDK を使う場合は `cursor-sdk` を指定します。Node.js 22.13以上が必要です。
|
|
460
|
+
|
|
461
|
+
```typescript
|
|
462
|
+
import { createAgentChatService } from '@aituber-onair/chat/agent';
|
|
463
|
+
|
|
464
|
+
const cursorService = createAgentChatService('cursor-sdk', {
|
|
465
|
+
apiKey: process.env.CURSOR_API_KEY,
|
|
466
|
+
workingDirectory: process.cwd(),
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
const result = await cursorService.chatOnce(messages, false, (text) =>
|
|
470
|
+
process.stdout.write(text),
|
|
471
|
+
);
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
認証には、セットアップ時に `Cursor.auth.login()` を一度実行する方法、
|
|
475
|
+
`CURSOR_API_KEY` を設定する方法、`apiKey` を渡す方法があります。Cursor CLI の
|
|
476
|
+
`agent login` では SDK の認証情報は作成されません。利用分は Cursor プランに
|
|
477
|
+
請求されます。このプロバイダーはローカルエージェントに `tools: []` と
|
|
478
|
+
`settingSources: []` を渡すため、tools、vision、MCP は使用できません。
|
|
479
|
+
`DEFAULT_CURSOR_SDK_MODEL` は `default` です。`Cursor.models.list()` では
|
|
480
|
+
Cursor の Auto として返されます。別のモデルを使う場合は、
|
|
481
|
+
`Cursor.models.list()` が返すIDを `model` に指定します。
|
|
482
|
+
|
|
427
483
|
利用可能なプロバイダー:
|
|
428
484
|
- `codex-sdk`: `@openai/codex-sdk` と Codex 認証が必要です。
|
|
429
485
|
- `claude-agent-sdk`: `@anthropic-ai/claude-agent-sdk` と Claude Agent SDK 認証が必要です。
|
|
430
486
|
- `copilot-sdk`: `@github/copilot-sdk` と GitHub Copilot 認証が必要です。
|
|
487
|
+
- `cursor-sdk`: `@cursor/sdk`、Node.js 22.13以上、Cursor SDK の認証またはAPIキーが必要です。
|
|
431
488
|
|
|
432
489
|
現時点の制限:
|
|
433
490
|
- テキストチャットのみ対応します。
|
package/README.md
CHANGED
|
@@ -91,8 +91,8 @@ Notes:
|
|
|
91
91
|
|
|
92
92
|
## Agent SDK Providers
|
|
93
93
|
|
|
94
|
-
For agent SDKs such as Codex SDK, Claude Agent SDK,
|
|
95
|
-
separate `@aituber-onair/chat/agent` entry point:
|
|
94
|
+
For agent SDKs such as Codex SDK, Claude Agent SDK, Copilot SDK, and Cursor SDK,
|
|
95
|
+
use the separate `@aituber-onair/chat/agent` entry point:
|
|
96
96
|
|
|
97
97
|
```typescript
|
|
98
98
|
import { createAgentChatService } from '@aituber-onair/chat/agent';
|
|
@@ -107,6 +107,8 @@ npm install @aituber-onair/chat @openai/codex-sdk
|
|
|
107
107
|
npm install @aituber-onair/chat @anthropic-ai/claude-agent-sdk
|
|
108
108
|
# or
|
|
109
109
|
npm install @aituber-onair/chat @github/copilot-sdk
|
|
110
|
+
# or (requires Node.js 22.13+)
|
|
111
|
+
npm install @aituber-onair/chat @cursor/sdk
|
|
110
112
|
```
|
|
111
113
|
|
|
112
114
|
Minimal Codex SDK example:
|
|
@@ -220,6 +222,32 @@ const chatService = createAgentChatService('copilot-sdk', {
|
|
|
220
222
|
});
|
|
221
223
|
```
|
|
222
224
|
|
|
225
|
+
For Cursor SDK (Node.js 22.13+):
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
import { createAgentChatService } from '@aituber-onair/chat/agent';
|
|
229
|
+
|
|
230
|
+
const chatService = createAgentChatService('cursor-sdk', {
|
|
231
|
+
apiKey: process.env.CURSOR_API_KEY,
|
|
232
|
+
workingDirectory: process.cwd(),
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
const response = await chatService.chatOnce(
|
|
236
|
+
[{ role: 'user', content: 'Say hello in one sentence.' }],
|
|
237
|
+
false,
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
console.log(response);
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Authenticate once during setup with `Cursor.auth.login()`, set
|
|
244
|
+
`CURSOR_API_KEY`, or pass `apiKey` as shown above. Cursor CLI `agent login` does
|
|
245
|
+
not populate the SDK authentication store. Cursor SDK usage is billed to the
|
|
246
|
+
Cursor plan. This provider passes `tools: []` and `settingSources: []`, and does
|
|
247
|
+
not support tools, vision, or MCP. The default model id is `default`, which
|
|
248
|
+
`Cursor.models.list()` returns as Cursor's Auto option. To use another model,
|
|
249
|
+
set `model` to an id returned by `Cursor.models.list()`.
|
|
250
|
+
|
|
223
251
|
Authenticate the corresponding SDK locally before using these providers. If the
|
|
224
252
|
SDK package is missing or authentication is not ready, the provider throws an
|
|
225
253
|
error at runtime with the original SDK error details.
|
|
@@ -314,8 +342,9 @@ Notes:
|
|
|
314
342
|
#### Agent SDK Providers
|
|
315
343
|
|
|
316
344
|
`@aituber-onair/chat/agent` exposes experimental providers for agent SDKs such
|
|
317
|
-
as Codex SDK, Claude Agent SDK, and
|
|
318
|
-
included in the browser/GAS UMD entry point
|
|
345
|
+
as Codex SDK, Claude Agent SDK, Copilot SDK, and Cursor SDK. These providers are
|
|
346
|
+
not included in the browser/GAS UMD entry point. Cursor SDK accepts an optional
|
|
347
|
+
API key; the other agent providers use their local authentication flows.
|
|
319
348
|
|
|
320
349
|
Install only the agent SDK package you actually use in your JavaScript runtime application:
|
|
321
350
|
|
|
@@ -325,12 +354,14 @@ npm install @aituber-onair/chat @openai/codex-sdk
|
|
|
325
354
|
npm install @aituber-onair/chat @anthropic-ai/claude-agent-sdk
|
|
326
355
|
# or
|
|
327
356
|
npm install @aituber-onair/chat @github/copilot-sdk
|
|
357
|
+
# or (requires Node.js 22.13+)
|
|
358
|
+
npm install @aituber-onair/chat @cursor/sdk
|
|
328
359
|
```
|
|
329
360
|
|
|
330
|
-
`@openai/codex-sdk`, `@anthropic-ai/claude-agent-sdk`,
|
|
331
|
-
`@github/copilot-sdk` are not dependencies of
|
|
332
|
-
loaded dynamically, so users who only use the
|
|
333
|
-
install these agent SDK packages.
|
|
361
|
+
The packages `@openai/codex-sdk`, `@anthropic-ai/claude-agent-sdk`,
|
|
362
|
+
`@github/copilot-sdk`, and `@cursor/sdk` are not dependencies of
|
|
363
|
+
`@aituber-onair/chat`. They are loaded dynamically, so users who only use the
|
|
364
|
+
normal API providers do not install these agent SDK packages.
|
|
334
365
|
|
|
335
366
|
```typescript
|
|
336
367
|
import { createAgentChatService } from '@aituber-onair/chat/agent';
|
|
@@ -442,10 +473,34 @@ const copilotService = createAgentChatService('copilot-sdk', {
|
|
|
442
473
|
});
|
|
443
474
|
```
|
|
444
475
|
|
|
476
|
+
For Cursor SDK, use `cursor-sdk` on Node.js 22.13 or later.
|
|
477
|
+
|
|
478
|
+
```typescript
|
|
479
|
+
import { createAgentChatService } from '@aituber-onair/chat/agent';
|
|
480
|
+
|
|
481
|
+
const cursorService = createAgentChatService('cursor-sdk', {
|
|
482
|
+
apiKey: process.env.CURSOR_API_KEY,
|
|
483
|
+
workingDirectory: process.cwd(),
|
|
484
|
+
});
|
|
485
|
+
|
|
486
|
+
const result = await cursorService.chatOnce(messages, false, (text) =>
|
|
487
|
+
process.stdout.write(text),
|
|
488
|
+
);
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
Authenticate once during setup with `Cursor.auth.login()`, set
|
|
492
|
+
`CURSOR_API_KEY`, or pass `apiKey`. Cursor CLI `agent login` does not populate
|
|
493
|
+
the SDK authentication store. Usage is billed to the Cursor plan. This provider
|
|
494
|
+
uses a local agent with `tools: []` and `settingSources: []`; tools, vision, and
|
|
495
|
+
MCP are unavailable. `DEFAULT_CURSOR_SDK_MODEL` is `default`, which
|
|
496
|
+
`Cursor.models.list()` returns as Cursor's Auto option. To use another model,
|
|
497
|
+
set `model` to an id returned by `Cursor.models.list()`.
|
|
498
|
+
|
|
445
499
|
Available providers:
|
|
446
500
|
- `codex-sdk`: requires `@openai/codex-sdk` and Codex authentication.
|
|
447
501
|
- `claude-agent-sdk`: requires `@anthropic-ai/claude-agent-sdk` and Claude Agent SDK authentication.
|
|
448
502
|
- `copilot-sdk`: requires `@github/copilot-sdk` and GitHub Copilot authentication.
|
|
503
|
+
- `cursor-sdk`: requires `@cursor/sdk`, Node.js 22.13+, and Cursor SDK authentication or an API key.
|
|
449
504
|
|
|
450
505
|
Current limitations:
|
|
451
506
|
- Text chat only.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,kBAAkB,EAClB,eAAe,EAEhB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,kBAAkB,EAClB,eAAe,EAEhB,MAAM,SAAS,CAAC;AAuCjB,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,6EAA6E;AAC7E,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,MAAM,GACf,+BAA+B,GAAG,SAAS,CAO7C;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,GAAG,QAAQ,CAAC,CAAC;IAC9E,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;CAClD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,kCAAkC,GACxC,OAAO,EAAE,CAkBX"}
|
package/dist/cjs/backend.js
CHANGED
package/dist/cjs/backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/backend.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/backend.ts"],"names":[],"mappings":";;AAmDA,gFASC;AAaD,sEAoBC;AAtFD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,QAAQ;IACR,kBAAkB;IAClB,WAAW;IACX,aAAa;IACb,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,aAAa;IACb,MAAM;IACN,SAAS;IACT,QAAQ;IACR,mBAAmB;IACnB,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,KAAK;IACL,KAAK;CACN,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,MAAM;IACN,SAAS;IACT,QAAQ;IACR,mBAAmB;IACnB,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,KAAK;IACL,KAAK;CACN,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAQvD,6EAA6E;AAC7E,SAAgB,kCAAkC,CAChD,QAAgB;IAEhB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO;QACL,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC;QACjD,KAAK,EAAE,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC9C,CAAC;AACJ,CAAC;AASD;;;GAGG;AACH,SAAgB,6BAA6B,CAC3C,KAAyC;IAEzC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CACpC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,6BAA6B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAC/D,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAC7C,CAAC,KAAK,EAAyB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAC5D,CAAC;IACF,MAAM,gBAAgB,GACpB,KAAK,CAAC,UAAU,CAAC,iBAAiB;QAClC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE7C,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,gBAA2B,CAAC,EAAE,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,gBAAgB,EAAa,CAAC,CAAC;IACpD,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,6BAA6B,CACpC,QAAiB,EACjB,OAAgB;IAEhB,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAI,OAAiC,CAAC,OAAO,CAAC;IAC3D,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAAiB,EACjB,QAAiC;IAEjC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAClC,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;aAC3B,CAAC,CAAC;SACkB,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACrC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;aAC/C;SACF,CAAC,CAAC;KACkB,CAAC;AAC1B,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAAiB,EACjB,WAAuC;IAEvC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,GAAG,CACpB,CAAC,MAAM,EAAE,EAAE,CACT,CAAC;YACC,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB;aACF;SACF,CAAuB,CAC3B,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,CACpB,CAAC,MAAM,EAAE,EAAE,CACT,CAAC;QACC,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAY,CAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ChatResponseLength } from '../../../constants';
|
|
2
|
+
import { AgentTextChatService } from './shared';
|
|
3
|
+
/** Default model identifier passed to the Cursor SDK. */
|
|
4
|
+
export declare const DEFAULT_CURSOR_SDK_MODEL = "default";
|
|
5
|
+
type CursorSDKModule = {
|
|
6
|
+
Agent: {
|
|
7
|
+
create(options: CursorAgentCreateOptions): Promise<CursorAgent>;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
type CursorAgentCreateOptions = {
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
model: {
|
|
13
|
+
id: string;
|
|
14
|
+
};
|
|
15
|
+
tools: [];
|
|
16
|
+
local: {
|
|
17
|
+
cwd: string;
|
|
18
|
+
settingSources: [];
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
type CursorAgent = {
|
|
22
|
+
send(prompt: string, options: {
|
|
23
|
+
onDelta(event: CursorDeltaEvent): void;
|
|
24
|
+
}): Promise<CursorRun>;
|
|
25
|
+
close?(): Promise<void> | void;
|
|
26
|
+
[key: symbol]: unknown;
|
|
27
|
+
};
|
|
28
|
+
type CursorDeltaEvent = {
|
|
29
|
+
update: {
|
|
30
|
+
type: 'text-delta';
|
|
31
|
+
text: unknown;
|
|
32
|
+
} | {
|
|
33
|
+
type: string;
|
|
34
|
+
[key: string]: unknown;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
type CursorRun = {
|
|
38
|
+
wait(): Promise<CursorRunResult>;
|
|
39
|
+
};
|
|
40
|
+
type CursorRunResult = {
|
|
41
|
+
status: 'finished';
|
|
42
|
+
result?: unknown;
|
|
43
|
+
} | {
|
|
44
|
+
status: 'error';
|
|
45
|
+
error?: {
|
|
46
|
+
message?: unknown;
|
|
47
|
+
code?: unknown;
|
|
48
|
+
};
|
|
49
|
+
} | {
|
|
50
|
+
status: 'cancelled';
|
|
51
|
+
};
|
|
52
|
+
/** Loads the optional Cursor SDK at runtime. */
|
|
53
|
+
export type CursorSDKLoader = () => Promise<CursorSDKModule>;
|
|
54
|
+
/** Options for the text-only Cursor SDK chat provider. */
|
|
55
|
+
export type CursorSDKChatServiceOptions = {
|
|
56
|
+
/** Optional explicit key. Cursor SDK authentication is used when omitted. */
|
|
57
|
+
apiKey?: string;
|
|
58
|
+
/** Cursor model identifier. Defaults to DEFAULT_CURSOR_SDK_MODEL. */
|
|
59
|
+
model?: string;
|
|
60
|
+
/** Soft response length instruction included in the generated prompt. */
|
|
61
|
+
responseLength?: ChatResponseLength;
|
|
62
|
+
/** Local agent working directory. Defaults to process.cwd(). */
|
|
63
|
+
workingDirectory?: string;
|
|
64
|
+
};
|
|
65
|
+
/** Text-only ChatService backed by a local Cursor SDK agent. */
|
|
66
|
+
export declare class CursorSDKChatService extends AgentTextChatService {
|
|
67
|
+
constructor(options?: CursorSDKChatServiceOptions, loadSDK?: CursorSDKLoader);
|
|
68
|
+
}
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=CursorSDKChatService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorSDKChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/CursorSDKChatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAA0B,MAAM,UAAU,CAAC;AAExE,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAElD,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE;QACL,MAAM,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;KACjE,CAAC;CACH,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACtB,KAAK,EAAE,EAAE,CAAC;IACV,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,cAAc,EAAE,EAAE,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,IAAI,CACF,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QACP,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;KACxC,GACA,OAAO,CAAC,SAAS,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,MAAM,EACF;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,GACrC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CAC9C,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;CAClC,CAAC;AAEF,KAAK,eAAe,GAChB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACxC;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC/C,GACD;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAM5B,gDAAgD;AAChD,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;AAE7D,0DAA0D;AAC1D,MAAM,MAAM,2BAA2B,GAAG;IACxC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,gEAAgE;AAChE,qBAAa,oBAAqB,SAAQ,oBAAoB;gBAE1D,OAAO,GAAE,2BAAgC,EACzC,OAAO,GAAE,eAA+B;CA6B3C"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CursorSDKChatService = exports.DEFAULT_CURSOR_SDK_MODEL = void 0;
|
|
4
|
+
const shared_1 = require("./shared");
|
|
5
|
+
/** Default model identifier passed to the Cursor SDK. */
|
|
6
|
+
exports.DEFAULT_CURSOR_SDK_MODEL = 'default';
|
|
7
|
+
/** Text-only ChatService backed by a local Cursor SDK agent. */
|
|
8
|
+
class CursorSDKChatService extends shared_1.AgentTextChatService {
|
|
9
|
+
constructor(options = {}, loadSDK = loadCursorSDK) {
|
|
10
|
+
const model = options.model ?? exports.DEFAULT_CURSOR_SDK_MODEL;
|
|
11
|
+
super({
|
|
12
|
+
provider: 'cursor-sdk',
|
|
13
|
+
model,
|
|
14
|
+
defaultModel: exports.DEFAULT_CURSOR_SDK_MODEL,
|
|
15
|
+
responseLength: options.responseLength,
|
|
16
|
+
getResponse: async (prompt, stream, onPartialResponse) => {
|
|
17
|
+
try {
|
|
18
|
+
return await runCursorPrompt(loadSDK, model, options.workingDirectory, options.apiKey, prompt, stream, onPartialResponse);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
throw redactSecret((0, shared_1.wrapAgentProviderError)('cursor-sdk', error), options.apiKey);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.CursorSDKChatService = CursorSDKChatService;
|
|
28
|
+
async function runCursorPrompt(loadSDK, model, workingDirectory, apiKey, prompt, stream, onPartialResponse) {
|
|
29
|
+
const { Agent } = await loadCursorSDKModule(loadSDK);
|
|
30
|
+
const agent = await Agent.create({
|
|
31
|
+
...(apiKey !== undefined ? { apiKey } : {}),
|
|
32
|
+
model: { id: model },
|
|
33
|
+
tools: [],
|
|
34
|
+
local: {
|
|
35
|
+
cwd: workingDirectory ?? process.cwd(),
|
|
36
|
+
settingSources: [],
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
let outcome;
|
|
40
|
+
try {
|
|
41
|
+
outcome = {
|
|
42
|
+
ok: true,
|
|
43
|
+
text: await executeCursorRun(agent, prompt, stream, onPartialResponse),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
outcome = { ok: false, error };
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
await disposeCursorAgent(agent);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (outcome.ok) {
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!outcome.ok) {
|
|
58
|
+
throw outcome.error;
|
|
59
|
+
}
|
|
60
|
+
return outcome.text;
|
|
61
|
+
}
|
|
62
|
+
async function executeCursorRun(agent, prompt, stream, onPartialResponse) {
|
|
63
|
+
let deltaText = '';
|
|
64
|
+
const run = await agent.send(prompt, {
|
|
65
|
+
onDelta: ({ update }) => {
|
|
66
|
+
if (update.type === 'text-delta' &&
|
|
67
|
+
typeof update.text === 'string' &&
|
|
68
|
+
update.text) {
|
|
69
|
+
deltaText += update.text;
|
|
70
|
+
if (stream) {
|
|
71
|
+
onPartialResponse(update.text);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
const result = await run.wait();
|
|
77
|
+
if (result.status === 'finished') {
|
|
78
|
+
const finalText = typeof result.result === 'string' && result.result
|
|
79
|
+
? result.result
|
|
80
|
+
: deltaText;
|
|
81
|
+
if (!finalText) {
|
|
82
|
+
throw new Error('cursor-sdk provider received an empty response.');
|
|
83
|
+
}
|
|
84
|
+
if (stream && !deltaText) {
|
|
85
|
+
onPartialResponse(finalText);
|
|
86
|
+
}
|
|
87
|
+
return finalText;
|
|
88
|
+
}
|
|
89
|
+
if (result.status === 'error') {
|
|
90
|
+
throw new Error(formatCursorRunError(result.error));
|
|
91
|
+
}
|
|
92
|
+
throw new Error('cursor-sdk run was cancelled.');
|
|
93
|
+
}
|
|
94
|
+
async function disposeCursorAgent(agent) {
|
|
95
|
+
const asyncDisposeSymbol = Symbol
|
|
96
|
+
.asyncDispose;
|
|
97
|
+
const asyncDispose = asyncDisposeSymbol
|
|
98
|
+
? agent[asyncDisposeSymbol]
|
|
99
|
+
: undefined;
|
|
100
|
+
if (typeof asyncDispose === 'function') {
|
|
101
|
+
await asyncDispose.call(agent);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
await agent.close?.();
|
|
105
|
+
}
|
|
106
|
+
function formatCursorRunError(error) {
|
|
107
|
+
const message = typeof error?.message === 'string'
|
|
108
|
+
? error.message
|
|
109
|
+
: 'Cursor SDK run failed.';
|
|
110
|
+
const code = typeof error?.code === 'string' || typeof error?.code === 'number'
|
|
111
|
+
? String(error.code)
|
|
112
|
+
: undefined;
|
|
113
|
+
return code ? `${message} (${code})` : message;
|
|
114
|
+
}
|
|
115
|
+
async function loadCursorSDKModule(loadSDK) {
|
|
116
|
+
try {
|
|
117
|
+
return await loadSDK();
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
const message = 'cursor-sdk provider requires @cursor/sdk. ' +
|
|
121
|
+
'Install it in your Node.js 22.13+ project and authenticate with Cursor.auth.login() or CURSOR_API_KEY.';
|
|
122
|
+
const wrappedError = new Error(message);
|
|
123
|
+
wrappedError.cause = error;
|
|
124
|
+
throw wrappedError;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function redactSecret(error, secret) {
|
|
128
|
+
if (!secret) {
|
|
129
|
+
return error;
|
|
130
|
+
}
|
|
131
|
+
error.message = error.message.split(secret).join('[REDACTED]');
|
|
132
|
+
if (error.stack) {
|
|
133
|
+
error.stack = error.stack.split(secret).join('[REDACTED]');
|
|
134
|
+
}
|
|
135
|
+
return error;
|
|
136
|
+
}
|
|
137
|
+
async function loadCursorSDK() {
|
|
138
|
+
return (await dynamicImport('@cursor/sdk'));
|
|
139
|
+
}
|
|
140
|
+
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
141
|
+
//# sourceMappingURL=CursorSDKChatService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorSDKChatService.js","sourceRoot":"","sources":["../../../../../src/services/providers/agent/CursorSDKChatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ChatService } from '../../ChatService';
|
|
2
|
+
import { ChatServiceProvider, VisionSupportLevel } from '../ChatServiceProvider';
|
|
3
|
+
import { CursorSDKChatServiceOptions, CursorSDKLoader } from './CursorSDKChatService';
|
|
4
|
+
/** Creates text-only Cursor SDK chat services. */
|
|
5
|
+
export declare class CursorSDKChatServiceProvider implements ChatServiceProvider<CursorSDKChatServiceOptions> {
|
|
6
|
+
private loadSDK?;
|
|
7
|
+
constructor(loadSDK?: CursorSDKLoader | undefined);
|
|
8
|
+
createChatService(options: CursorSDKChatServiceOptions): ChatService;
|
|
9
|
+
getProviderName(): string;
|
|
10
|
+
getSupportedModels(): string[];
|
|
11
|
+
getDefaultModel(): string;
|
|
12
|
+
supportsVision(): boolean;
|
|
13
|
+
getVisionSupportLevel(): VisionSupportLevel;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=CursorSDKChatServiceProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorSDKChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/CursorSDKChatServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,2BAA2B,EAC3B,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAGhC,kDAAkD;AAClD,qBAAa,4BACX,YAAW,mBAAmB,CAAC,2BAA2B,CAAC;IAE/C,OAAO,CAAC,OAAO,CAAC;gBAAR,OAAO,CAAC,EAAE,eAAe,YAAA;IAE7C,iBAAiB,CAAC,OAAO,EAAE,2BAA2B,GAAG,WAAW;IAOpE,eAAe,IAAI,MAAM;IAIzB,kBAAkB,IAAI,MAAM,EAAE;IAI9B,eAAe,IAAI,MAAM;IAIzB,cAAc,IAAI,OAAO;IAIzB,qBAAqB,IAAI,kBAAkB;CAG5C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CursorSDKChatServiceProvider = void 0;
|
|
4
|
+
const CursorSDKChatService_1 = require("./CursorSDKChatService");
|
|
5
|
+
const shared_1 = require("./shared");
|
|
6
|
+
/** Creates text-only Cursor SDK chat services. */
|
|
7
|
+
class CursorSDKChatServiceProvider {
|
|
8
|
+
constructor(loadSDK) {
|
|
9
|
+
this.loadSDK = loadSDK;
|
|
10
|
+
}
|
|
11
|
+
createChatService(options) {
|
|
12
|
+
(0, shared_1.rejectUnsupportedAgentOptions)(this.getProviderName(), options, {
|
|
13
|
+
allowApiKey: true,
|
|
14
|
+
});
|
|
15
|
+
return new CursorSDKChatService_1.CursorSDKChatService(options, this.loadSDK);
|
|
16
|
+
}
|
|
17
|
+
getProviderName() {
|
|
18
|
+
return 'cursor-sdk';
|
|
19
|
+
}
|
|
20
|
+
getSupportedModels() {
|
|
21
|
+
return [CursorSDKChatService_1.DEFAULT_CURSOR_SDK_MODEL];
|
|
22
|
+
}
|
|
23
|
+
getDefaultModel() {
|
|
24
|
+
return CursorSDKChatService_1.DEFAULT_CURSOR_SDK_MODEL;
|
|
25
|
+
}
|
|
26
|
+
supportsVision() {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
getVisionSupportLevel() {
|
|
30
|
+
return 'unsupported';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.CursorSDKChatServiceProvider = CursorSDKChatServiceProvider;
|
|
34
|
+
//# sourceMappingURL=CursorSDKChatServiceProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorSDKChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/agent/CursorSDKChatServiceProvider.ts"],"names":[],"mappings":";;;AAKA,iEAKgC;AAChC,qCAAyD;AAEzD,kDAAkD;AAClD,MAAa,4BAA4B;IAGvC,YAAoB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;IAEjD,iBAAiB,CAAC,OAAoC;QACpD,IAAA,sCAA6B,EAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE;YAC7D,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,OAAO,IAAI,2CAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,eAAe;QACb,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,+CAAwB,CAAC,CAAC;IACpC,CAAC;IAED,eAAe;QACb,OAAO,+CAAwB,CAAC;IAClC,CAAC;IAED,cAAc;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qBAAqB;QACnB,OAAO,aAAa,CAAC;IACvB,CAAC;CACF;AA/BD,oEA+BC"}
|
|
@@ -2,22 +2,27 @@ import { ChatService } from '../../ChatService';
|
|
|
2
2
|
import { ClaudeAgentSDKChatServiceOptions, ClaudeAgentSDKLoader } from './ClaudeAgentSDKChatService';
|
|
3
3
|
import { CodexSDKChatServiceOptions, CodexSDKLoader } from './CodexSDKChatService';
|
|
4
4
|
import { CopilotSDKChatServiceOptions, CopilotSDKLoader } from './CopilotSDKChatService';
|
|
5
|
+
import { CursorSDKChatServiceOptions, CursorSDKLoader } from './CursorSDKChatService';
|
|
5
6
|
export { ClaudeAgentSDKChatService, DEFAULT_CLAUDE_AGENT_SDK_MODEL, type ClaudeAgentSDKChatServiceOptions, type ClaudeAgentSDKLoader, } from './ClaudeAgentSDKChatService';
|
|
6
7
|
export { ClaudeAgentSDKChatServiceProvider } from './ClaudeAgentSDKChatServiceProvider';
|
|
7
8
|
export { CodexSDKChatService, DEFAULT_CODEX_SDK_MODEL, type CodexSDKChatServiceOptions, type CodexSDKLoader, } from './CodexSDKChatService';
|
|
8
9
|
export { CodexSDKChatServiceProvider } from './CodexSDKChatServiceProvider';
|
|
9
10
|
export { CopilotSDKChatService, DEFAULT_COPILOT_SDK_MODEL, type CopilotSDKChatServiceOptions, type CopilotSDKLoader, } from './CopilotSDKChatService';
|
|
10
11
|
export { CopilotSDKChatServiceProvider } from './CopilotSDKChatServiceProvider';
|
|
11
|
-
export type
|
|
12
|
+
export { CursorSDKChatService, DEFAULT_CURSOR_SDK_MODEL, type CursorSDKChatServiceOptions, type CursorSDKLoader, } from './CursorSDKChatService';
|
|
13
|
+
export { CursorSDKChatServiceProvider } from './CursorSDKChatServiceProvider';
|
|
14
|
+
export type AgentChatProviderName = 'codex-sdk' | 'claude-agent-sdk' | 'copilot-sdk' | 'cursor-sdk';
|
|
12
15
|
export type AgentChatServiceOptionsByProvider = {
|
|
13
16
|
'codex-sdk': CodexSDKChatServiceOptions;
|
|
14
17
|
'claude-agent-sdk': ClaudeAgentSDKChatServiceOptions;
|
|
15
18
|
'copilot-sdk': CopilotSDKChatServiceOptions;
|
|
19
|
+
'cursor-sdk': CursorSDKChatServiceOptions;
|
|
16
20
|
};
|
|
17
21
|
export type RegisterAgentChatProvidersOptions = {
|
|
18
22
|
codexSDKLoader?: CodexSDKLoader;
|
|
19
23
|
claudeAgentSDKLoader?: ClaudeAgentSDKLoader;
|
|
20
24
|
copilotSDKLoader?: CopilotSDKLoader;
|
|
25
|
+
cursorSDKLoader?: CursorSDKLoader;
|
|
21
26
|
};
|
|
22
27
|
export declare function registerAgentChatProviders(options?: RegisterAgentChatProvidersOptions): void;
|
|
23
28
|
export declare function createAgentChatService<TProvider extends AgentChatProviderName>(providerName: TProvider, options: AgentChatServiceOptionsByProvider[TProvider]): ChatService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,OAAO,EACL,gCAAgC,EAChC,oBAAoB,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,cAAc,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,2BAA2B,EAC3B,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,KAAK,gCAAgC,EACrC,KAAK,oBAAoB,GAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AACxF,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,cAAc,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,2BAA2B,EAChC,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,kBAAkB,GAClB,aAAa,GACb,YAAY,CAAC;AAEjB,MAAM,MAAM,iCAAiC,GAAG;IAC9C,WAAW,EAAE,0BAA0B,CAAC;IACxC,kBAAkB,EAAE,gCAAgC,CAAC;IACrD,aAAa,EAAE,4BAA4B,CAAC;IAC5C,YAAY,EAAE,2BAA2B,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,iCAAsC,GAC9C,IAAI,CAaN;AAED,wBAAgB,sBAAsB,CAAC,SAAS,SAAS,qBAAqB,EAC5E,YAAY,EAAE,SAAS,EACvB,OAAO,EAAE,iCAAiC,CAAC,SAAS,CAAC,GACpD,WAAW,CAKb"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CopilotSDKChatServiceProvider = exports.DEFAULT_COPILOT_SDK_MODEL = exports.CopilotSDKChatService = exports.CodexSDKChatServiceProvider = exports.DEFAULT_CODEX_SDK_MODEL = exports.CodexSDKChatService = exports.ClaudeAgentSDKChatServiceProvider = exports.DEFAULT_CLAUDE_AGENT_SDK_MODEL = exports.ClaudeAgentSDKChatService = void 0;
|
|
3
|
+
exports.CursorSDKChatServiceProvider = exports.DEFAULT_CURSOR_SDK_MODEL = exports.CursorSDKChatService = exports.CopilotSDKChatServiceProvider = exports.DEFAULT_COPILOT_SDK_MODEL = exports.CopilotSDKChatService = exports.CodexSDKChatServiceProvider = exports.DEFAULT_CODEX_SDK_MODEL = exports.CodexSDKChatService = exports.ClaudeAgentSDKChatServiceProvider = exports.DEFAULT_CLAUDE_AGENT_SDK_MODEL = exports.ClaudeAgentSDKChatService = void 0;
|
|
4
4
|
exports.registerAgentChatProviders = registerAgentChatProviders;
|
|
5
5
|
exports.createAgentChatService = createAgentChatService;
|
|
6
6
|
const ChatServiceFactory_1 = require("../../ChatServiceFactory");
|
|
7
7
|
const ClaudeAgentSDKChatServiceProvider_1 = require("./ClaudeAgentSDKChatServiceProvider");
|
|
8
8
|
const CodexSDKChatServiceProvider_1 = require("./CodexSDKChatServiceProvider");
|
|
9
9
|
const CopilotSDKChatServiceProvider_1 = require("./CopilotSDKChatServiceProvider");
|
|
10
|
+
const CursorSDKChatServiceProvider_1 = require("./CursorSDKChatServiceProvider");
|
|
10
11
|
var ClaudeAgentSDKChatService_1 = require("./ClaudeAgentSDKChatService");
|
|
11
12
|
Object.defineProperty(exports, "ClaudeAgentSDKChatService", { enumerable: true, get: function () { return ClaudeAgentSDKChatService_1.ClaudeAgentSDKChatService; } });
|
|
12
13
|
Object.defineProperty(exports, "DEFAULT_CLAUDE_AGENT_SDK_MODEL", { enumerable: true, get: function () { return ClaudeAgentSDKChatService_1.DEFAULT_CLAUDE_AGENT_SDK_MODEL; } });
|
|
@@ -22,10 +23,16 @@ Object.defineProperty(exports, "CopilotSDKChatService", { enumerable: true, get:
|
|
|
22
23
|
Object.defineProperty(exports, "DEFAULT_COPILOT_SDK_MODEL", { enumerable: true, get: function () { return CopilotSDKChatService_1.DEFAULT_COPILOT_SDK_MODEL; } });
|
|
23
24
|
var CopilotSDKChatServiceProvider_2 = require("./CopilotSDKChatServiceProvider");
|
|
24
25
|
Object.defineProperty(exports, "CopilotSDKChatServiceProvider", { enumerable: true, get: function () { return CopilotSDKChatServiceProvider_2.CopilotSDKChatServiceProvider; } });
|
|
26
|
+
var CursorSDKChatService_1 = require("./CursorSDKChatService");
|
|
27
|
+
Object.defineProperty(exports, "CursorSDKChatService", { enumerable: true, get: function () { return CursorSDKChatService_1.CursorSDKChatService; } });
|
|
28
|
+
Object.defineProperty(exports, "DEFAULT_CURSOR_SDK_MODEL", { enumerable: true, get: function () { return CursorSDKChatService_1.DEFAULT_CURSOR_SDK_MODEL; } });
|
|
29
|
+
var CursorSDKChatServiceProvider_2 = require("./CursorSDKChatServiceProvider");
|
|
30
|
+
Object.defineProperty(exports, "CursorSDKChatServiceProvider", { enumerable: true, get: function () { return CursorSDKChatServiceProvider_2.CursorSDKChatServiceProvider; } });
|
|
25
31
|
function registerAgentChatProviders(options = {}) {
|
|
26
32
|
ChatServiceFactory_1.ChatServiceFactory.registerProvider(new CodexSDKChatServiceProvider_1.CodexSDKChatServiceProvider(options.codexSDKLoader));
|
|
27
33
|
ChatServiceFactory_1.ChatServiceFactory.registerProvider(new ClaudeAgentSDKChatServiceProvider_1.ClaudeAgentSDKChatServiceProvider(options.claudeAgentSDKLoader));
|
|
28
34
|
ChatServiceFactory_1.ChatServiceFactory.registerProvider(new CopilotSDKChatServiceProvider_1.CopilotSDKChatServiceProvider(options.copilotSDKLoader));
|
|
35
|
+
ChatServiceFactory_1.ChatServiceFactory.registerProvider(new CursorSDKChatServiceProvider_1.CursorSDKChatServiceProvider(options.cursorSDKLoader));
|
|
29
36
|
}
|
|
30
37
|
function createAgentChatService(providerName, options) {
|
|
31
38
|
return ChatServiceFactory_1.ChatServiceFactory.createChatService(providerName, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/providers/agent/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/providers/agent/index.ts"],"names":[],"mappings":";;;AAwEA,gEAeC;AAED,wDAQC;AAhGD,iEAA8D;AAC9D,2FAAwF;AACxF,+EAA4E;AAC5E,mFAAgF;AAChF,iFAA8E;AAkB9E,yEAKqC;AAJnC,sIAAA,yBAAyB,OAAA;AACzB,2IAAA,8BAA8B,OAAA;AAIhC,yFAAwF;AAA/E,sJAAA,iCAAiC,OAAA;AAC1C,6DAK+B;AAJ7B,0HAAA,mBAAmB,OAAA;AACnB,8HAAA,uBAAuB,OAAA;AAIzB,6EAA4E;AAAnE,0IAAA,2BAA2B,OAAA;AACpC,iEAKiC;AAJ/B,8HAAA,qBAAqB,OAAA;AACrB,kIAAA,yBAAyB,OAAA;AAI3B,iFAAgF;AAAvE,8IAAA,6BAA6B,OAAA;AACtC,+DAKgC;AAJ9B,4HAAA,oBAAoB,OAAA;AACpB,gIAAA,wBAAwB,OAAA;AAI1B,+EAA8E;AAArE,4IAAA,4BAA4B,OAAA;AAsBrC,SAAgB,0BAA0B,CACxC,UAA6C,EAAE;IAE/C,uCAAkB,CAAC,gBAAgB,CACjC,IAAI,yDAA2B,CAAC,OAAO,CAAC,cAAc,CAAC,CACxD,CAAC;IACF,uCAAkB,CAAC,gBAAgB,CACjC,IAAI,qEAAiC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CACpE,CAAC;IACF,uCAAkB,CAAC,gBAAgB,CACjC,IAAI,6DAA6B,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAC5D,CAAC;IACF,uCAAkB,CAAC,gBAAgB,CACjC,IAAI,2DAA4B,CAAC,OAAO,CAAC,eAAe,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,SAAgB,sBAAsB,CACpC,YAAuB,EACvB,OAAqD;IAErD,OAAO,uCAAkB,CAAC,iBAAiB,CACzC,YAAmB,EACnB,OAAyC,CAC1C,CAAC;AACJ,CAAC"}
|