@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.
- package/README.ja.md +262 -2
- package/README.md +280 -2
- package/dist/cjs/agent.d.ts +3 -0
- package/dist/cjs/agent.d.ts.map +1 -0
- package/dist/cjs/agent.js +21 -0
- package/dist/cjs/agent.js.map +1 -0
- package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatService.d.ts +39 -0
- package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatService.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatService.js +103 -0
- package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatService.js.map +1 -0
- package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatServiceProvider.d.ts +14 -0
- package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatServiceProvider.js +31 -0
- package/dist/cjs/services/providers/agent/ClaudeAgentSDKChatServiceProvider.js.map +1 -0
- package/dist/cjs/services/providers/agent/CodexSDKChatService.d.ts +29 -0
- package/dist/cjs/services/providers/agent/CodexSDKChatService.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/CodexSDKChatService.js +65 -0
- package/dist/cjs/services/providers/agent/CodexSDKChatService.js.map +1 -0
- package/dist/cjs/services/providers/agent/CodexSDKChatServiceProvider.d.ts +14 -0
- package/dist/cjs/services/providers/agent/CodexSDKChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/CodexSDKChatServiceProvider.js +31 -0
- package/dist/cjs/services/providers/agent/CodexSDKChatServiceProvider.js.map +1 -0
- package/dist/cjs/services/providers/agent/CopilotSDKChatService.d.ts +48 -0
- package/dist/cjs/services/providers/agent/CopilotSDKChatService.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/CopilotSDKChatService.js +79 -0
- package/dist/cjs/services/providers/agent/CopilotSDKChatService.js.map +1 -0
- package/dist/cjs/services/providers/agent/CopilotSDKChatServiceProvider.d.ts +14 -0
- package/dist/cjs/services/providers/agent/CopilotSDKChatServiceProvider.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/CopilotSDKChatServiceProvider.js +31 -0
- package/dist/cjs/services/providers/agent/CopilotSDKChatServiceProvider.js.map +1 -0
- package/dist/cjs/services/providers/agent/index.d.ts +24 -0
- package/dist/cjs/services/providers/agent/index.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/index.js +33 -0
- package/dist/cjs/services/providers/agent/index.js.map +1 -0
- package/dist/cjs/services/providers/agent/shared.d.ts +36 -0
- package/dist/cjs/services/providers/agent/shared.d.ts.map +1 -0
- package/dist/cjs/services/providers/agent/shared.js +122 -0
- package/dist/cjs/services/providers/agent/shared.js.map +1 -0
- package/dist/esm/agent.d.ts +3 -0
- package/dist/esm/agent.d.ts.map +1 -0
- package/dist/esm/agent.js +5 -0
- package/dist/esm/agent.js.map +1 -0
- package/dist/esm/services/providers/agent/ClaudeAgentSDKChatService.d.ts +39 -0
- package/dist/esm/services/providers/agent/ClaudeAgentSDKChatService.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/ClaudeAgentSDKChatService.js +99 -0
- package/dist/esm/services/providers/agent/ClaudeAgentSDKChatService.js.map +1 -0
- package/dist/esm/services/providers/agent/ClaudeAgentSDKChatServiceProvider.d.ts +14 -0
- package/dist/esm/services/providers/agent/ClaudeAgentSDKChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/ClaudeAgentSDKChatServiceProvider.js +27 -0
- package/dist/esm/services/providers/agent/ClaudeAgentSDKChatServiceProvider.js.map +1 -0
- package/dist/esm/services/providers/agent/CodexSDKChatService.d.ts +29 -0
- package/dist/esm/services/providers/agent/CodexSDKChatService.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/CodexSDKChatService.js +61 -0
- package/dist/esm/services/providers/agent/CodexSDKChatService.js.map +1 -0
- package/dist/esm/services/providers/agent/CodexSDKChatServiceProvider.d.ts +14 -0
- package/dist/esm/services/providers/agent/CodexSDKChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/CodexSDKChatServiceProvider.js +27 -0
- package/dist/esm/services/providers/agent/CodexSDKChatServiceProvider.js.map +1 -0
- package/dist/esm/services/providers/agent/CopilotSDKChatService.d.ts +48 -0
- package/dist/esm/services/providers/agent/CopilotSDKChatService.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/CopilotSDKChatService.js +75 -0
- package/dist/esm/services/providers/agent/CopilotSDKChatService.js.map +1 -0
- package/dist/esm/services/providers/agent/CopilotSDKChatServiceProvider.d.ts +14 -0
- package/dist/esm/services/providers/agent/CopilotSDKChatServiceProvider.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/CopilotSDKChatServiceProvider.js +27 -0
- package/dist/esm/services/providers/agent/CopilotSDKChatServiceProvider.js.map +1 -0
- package/dist/esm/services/providers/agent/index.d.ts +24 -0
- package/dist/esm/services/providers/agent/index.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/index.js +19 -0
- package/dist/esm/services/providers/agent/index.js.map +1 -0
- package/dist/esm/services/providers/agent/shared.d.ts +36 -0
- package/dist/esm/services/providers/agent/shared.d.ts.map +1 -0
- package/dist/esm/services/providers/agent/shared.js +116 -0
- package/dist/esm/services/providers/agent/shared.js.map +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAwB,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEhF,MAAM,MAAM,2BAA2B,GAAG;IACxC,qEAAqE;IACrE,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,2BAA2B,GAAG;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KACtC,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB,CAAC;AAEF,qBAAa,oBAAqB,YAAW,WAAW;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,cAAc,CAAC,CAAqB;IAC5C,OAAO,CAAC,WAAW,CAAsC;gBAE7C,OAAO,EAAE,oBAAoB;IAOzC,QAAQ,IAAI,MAAM;IAIlB,cAAc,IAAI,MAAM;IAIlB,WAAW,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IAQV,iBAAiB,CACrB,SAAS,EAAE,iBAAiB,EAAE,EAC9B,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC1C,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC;IAIV,QAAQ,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,GAAE,OAAc,EACtB,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACpD,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAcxB,cAAc,CAClB,SAAS,EAAE,iBAAiB,EAAE,EAC9B,OAAO,GAAE,OAAe,EACxB,kBAAkB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACrD,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;CAG/B;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACnE,IAAI,CAcN;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,OAAO,GACb,KAAK,CAcP"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AgentTextChatService = void 0;
|
|
4
|
+
exports.rejectUnsupportedAgentOptions = rejectUnsupportedAgentOptions;
|
|
5
|
+
exports.wrapAgentProviderError = wrapAgentProviderError;
|
|
6
|
+
const constants_1 = require("../../../constants");
|
|
7
|
+
class AgentTextChatService {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.provider = options.provider;
|
|
10
|
+
this.model = options.model ?? options.defaultModel;
|
|
11
|
+
this.responseLength = options.responseLength;
|
|
12
|
+
this.getResponse = options.getResponse;
|
|
13
|
+
}
|
|
14
|
+
getModel() {
|
|
15
|
+
return this.model;
|
|
16
|
+
}
|
|
17
|
+
getVisionModel() {
|
|
18
|
+
return this.model;
|
|
19
|
+
}
|
|
20
|
+
async processChat(messages, onPartialResponse, onCompleteResponse) {
|
|
21
|
+
const result = await this.chatOnce(messages, true, onPartialResponse);
|
|
22
|
+
const text = result.blocks
|
|
23
|
+
.map((block) => (block.type === 'text' ? block.text : ''))
|
|
24
|
+
.join('');
|
|
25
|
+
await onCompleteResponse(text);
|
|
26
|
+
}
|
|
27
|
+
async processVisionChat(_messages, _onPartialResponse, _onCompleteResponse) {
|
|
28
|
+
throw new Error(`${this.provider} does not support vision chat yet.`);
|
|
29
|
+
}
|
|
30
|
+
async chatOnce(messages, stream = true, onPartialResponse = () => { }, maxTokens) {
|
|
31
|
+
const prompt = buildTextPrompt(messages, this.responseLength, maxTokens);
|
|
32
|
+
const text = await this.getResponse(prompt, stream, onPartialResponse);
|
|
33
|
+
if (!stream) {
|
|
34
|
+
onPartialResponse(text);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
blocks: [{ type: 'text', text }],
|
|
38
|
+
stop_reason: 'end',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async visionChatOnce(_messages, _stream = false, _onPartialResponse = () => { }, _maxTokens) {
|
|
42
|
+
throw new Error(`${this.provider} does not support vision chat yet.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.AgentTextChatService = AgentTextChatService;
|
|
46
|
+
function rejectUnsupportedAgentOptions(providerName, options) {
|
|
47
|
+
if (options.apiKey !== undefined) {
|
|
48
|
+
throw new Error(`${providerName} provider does not accept apiKey.`);
|
|
49
|
+
}
|
|
50
|
+
if (options.tools !== undefined) {
|
|
51
|
+
throw new Error(`${providerName} provider does not support tools yet.`);
|
|
52
|
+
}
|
|
53
|
+
if (options.mcpServers !== undefined) {
|
|
54
|
+
throw new Error(`${providerName} provider does not support mcpServers yet.`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function wrapAgentProviderError(providerName, error) {
|
|
58
|
+
if (error instanceof Error && error.message.includes(' provider requires ')) {
|
|
59
|
+
return error;
|
|
60
|
+
}
|
|
61
|
+
const detail = stringifyError(error);
|
|
62
|
+
const authHint = isLikelyAuthError(detail)
|
|
63
|
+
? ' This looks like an authentication or subscription permission failure.'
|
|
64
|
+
: '';
|
|
65
|
+
const wrappedError = new Error(`${providerName} provider failed.${authHint}\n\nOriginal error:\n${detail}`);
|
|
66
|
+
wrappedError.cause = error;
|
|
67
|
+
return wrappedError;
|
|
68
|
+
}
|
|
69
|
+
function buildTextPrompt(messages, responseLength, maxTokens) {
|
|
70
|
+
const parts = [];
|
|
71
|
+
const lengthInstruction = buildLengthInstruction(responseLength, maxTokens);
|
|
72
|
+
if (lengthInstruction) {
|
|
73
|
+
parts.push(lengthInstruction);
|
|
74
|
+
}
|
|
75
|
+
parts.push(...messages.map((message) => {
|
|
76
|
+
const label = toRoleLabel(message.role);
|
|
77
|
+
return `${label}: ${message.content}`;
|
|
78
|
+
}));
|
|
79
|
+
return parts.join('\n\n');
|
|
80
|
+
}
|
|
81
|
+
function buildLengthInstruction(responseLength, maxTokens) {
|
|
82
|
+
const tokenLimit = maxTokens ??
|
|
83
|
+
(responseLength !== undefined
|
|
84
|
+
? constants_1.MAX_TOKENS_BY_LENGTH[responseLength]
|
|
85
|
+
: undefined);
|
|
86
|
+
if (!tokenLimit) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
return `Please keep your response within approximately ${tokenLimit} tokens.`;
|
|
90
|
+
}
|
|
91
|
+
function toRoleLabel(role) {
|
|
92
|
+
switch (role) {
|
|
93
|
+
case 'system':
|
|
94
|
+
return 'System';
|
|
95
|
+
case 'assistant':
|
|
96
|
+
return 'Assistant';
|
|
97
|
+
case 'tool':
|
|
98
|
+
return 'Tool';
|
|
99
|
+
case 'user':
|
|
100
|
+
return 'User';
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function stringifyError(error) {
|
|
104
|
+
if (error instanceof Error) {
|
|
105
|
+
return [error.name, error.message, error.stack]
|
|
106
|
+
.filter((value) => Boolean(value))
|
|
107
|
+
.join('\n');
|
|
108
|
+
}
|
|
109
|
+
if (typeof error === 'string') {
|
|
110
|
+
return error;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
return JSON.stringify(error, null, 2);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return String(error);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function isLikelyAuthError(detail) {
|
|
120
|
+
return /auth|login|log in|logged in|unauthori[sz]ed|forbidden|permission|subscription|credential|token|401|403/i.test(detail);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../src/services/providers/agent/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAExE,0BAA0B,EAAE,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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { AgentTextChatService, wrapAgentProviderError } from './shared';
|
|
2
|
+
export const DEFAULT_CLAUDE_AGENT_SDK_MODEL = 'claude-default';
|
|
3
|
+
export class ClaudeAgentSDKChatService extends AgentTextChatService {
|
|
4
|
+
constructor(options = {}, loadSDK = loadClaudeAgentSDK) {
|
|
5
|
+
const model = options.model ?? DEFAULT_CLAUDE_AGENT_SDK_MODEL;
|
|
6
|
+
super({
|
|
7
|
+
provider: 'claude-agent-sdk',
|
|
8
|
+
model,
|
|
9
|
+
defaultModel: DEFAULT_CLAUDE_AGENT_SDK_MODEL,
|
|
10
|
+
responseLength: options.responseLength,
|
|
11
|
+
getResponse: async (prompt, stream, onPartialResponse) => {
|
|
12
|
+
try {
|
|
13
|
+
return await runClaudeAgentPrompt(loadSDK, model, options, prompt, stream, onPartialResponse);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
throw wrapAgentProviderError('claude-agent-sdk', error);
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function runClaudeAgentPrompt(loadSDK, model, options, prompt, stream, onPartialResponse) {
|
|
23
|
+
const { query } = await loadSDK();
|
|
24
|
+
let finalText = '';
|
|
25
|
+
let streamedText = '';
|
|
26
|
+
const queryOptions = {
|
|
27
|
+
tools: [],
|
|
28
|
+
permissionMode: 'dontAsk',
|
|
29
|
+
settingSources: [],
|
|
30
|
+
...(options.model ? { model } : {}),
|
|
31
|
+
...(options.workingDirectory ? { cwd: options.workingDirectory } : {}),
|
|
32
|
+
...(options.maxTurns !== undefined ? { maxTurns: options.maxTurns } : {}),
|
|
33
|
+
...(options.pathToClaudeCodeExecutable
|
|
34
|
+
? { pathToClaudeCodeExecutable: options.pathToClaudeCodeExecutable }
|
|
35
|
+
: {}),
|
|
36
|
+
...(options.env ? { env: options.env } : {}),
|
|
37
|
+
...(stream ? { includePartialMessages: true } : {}),
|
|
38
|
+
};
|
|
39
|
+
for await (const message of query({ prompt, options: queryOptions })) {
|
|
40
|
+
const delta = extractTextDelta(message);
|
|
41
|
+
if (stream && delta) {
|
|
42
|
+
streamedText += delta;
|
|
43
|
+
onPartialResponse(delta);
|
|
44
|
+
}
|
|
45
|
+
if (isResultMessage(message)) {
|
|
46
|
+
if (message.is_error) {
|
|
47
|
+
throw new Error(formatClaudeAgentResultError(message.errors));
|
|
48
|
+
}
|
|
49
|
+
if (typeof message.result === 'string') {
|
|
50
|
+
finalText = message.result;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (!finalText) {
|
|
55
|
+
throw new Error('claude-agent-sdk provider received an empty response.');
|
|
56
|
+
}
|
|
57
|
+
if (stream && streamedText === '') {
|
|
58
|
+
onPartialResponse(finalText);
|
|
59
|
+
}
|
|
60
|
+
return finalText;
|
|
61
|
+
}
|
|
62
|
+
function extractTextDelta(message) {
|
|
63
|
+
if (!isStreamEventMessage(message)) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const delta = message.event?.delta;
|
|
67
|
+
if (delta?.type === 'text_delta' && typeof delta.text === 'string') {
|
|
68
|
+
return delta.text;
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
function isStreamEventMessage(message) {
|
|
73
|
+
return message.type === 'stream_event';
|
|
74
|
+
}
|
|
75
|
+
function isResultMessage(message) {
|
|
76
|
+
return message.type === 'result';
|
|
77
|
+
}
|
|
78
|
+
function formatClaudeAgentResultError(errors) {
|
|
79
|
+
if (Array.isArray(errors) && errors.length > 0) {
|
|
80
|
+
return errors
|
|
81
|
+
.map((error) => (typeof error === 'string' ? error : String(error)))
|
|
82
|
+
.join('\n');
|
|
83
|
+
}
|
|
84
|
+
return 'claude-agent-sdk provider failed during execution.';
|
|
85
|
+
}
|
|
86
|
+
async function loadClaudeAgentSDK() {
|
|
87
|
+
try {
|
|
88
|
+
return (await dynamicImport('@anthropic-ai/claude-agent-sdk'));
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const message = 'claude-agent-sdk provider requires @anthropic-ai/claude-agent-sdk. ' +
|
|
92
|
+
'Install it in your JavaScript runtime project and authenticate with Claude Agent SDK.';
|
|
93
|
+
const wrappedError = new Error(message);
|
|
94
|
+
wrappedError.cause = error;
|
|
95
|
+
throw wrappedError;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
99
|
+
//# sourceMappingURL=ClaudeAgentSDKChatService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeAgentSDKChatService.js","sourceRoot":"","sources":["../../../../../src/services/providers/agent/ClaudeAgentSDKChatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChatService } from '../../ChatService';
|
|
2
|
+
import { ChatServiceProvider, VisionSupportLevel } from '../ChatServiceProvider';
|
|
3
|
+
import { ClaudeAgentSDKChatServiceOptions, ClaudeAgentSDKLoader } from './ClaudeAgentSDKChatService';
|
|
4
|
+
export declare class ClaudeAgentSDKChatServiceProvider implements ChatServiceProvider<ClaudeAgentSDKChatServiceOptions> {
|
|
5
|
+
private loadSDK?;
|
|
6
|
+
constructor(loadSDK?: ClaudeAgentSDKLoader | undefined);
|
|
7
|
+
createChatService(options: ClaudeAgentSDKChatServiceOptions): ChatService;
|
|
8
|
+
getProviderName(): string;
|
|
9
|
+
getSupportedModels(): string[];
|
|
10
|
+
getDefaultModel(): string;
|
|
11
|
+
supportsVision(): boolean;
|
|
12
|
+
getVisionSupportLevel(): VisionSupportLevel;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ClaudeAgentSDKChatServiceProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeAgentSDKChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/ClaudeAgentSDKChatServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,gCAAgC,EAChC,oBAAoB,EAErB,MAAM,6BAA6B,CAAC;AAGrC,qBAAa,iCACX,YAAW,mBAAmB,CAAC,gCAAgC,CAAC;IAEpD,OAAO,CAAC,OAAO,CAAC;gBAAR,OAAO,CAAC,EAAE,oBAAoB,YAAA;IAElD,iBAAiB,CAAC,OAAO,EAAE,gCAAgC,GAAG,WAAW;IAKzE,eAAe,IAAI,MAAM;IAIzB,kBAAkB,IAAI,MAAM,EAAE;IAI9B,eAAe,IAAI,MAAM;IAIzB,cAAc,IAAI,OAAO;IAIzB,qBAAqB,IAAI,kBAAkB;CAG5C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ClaudeAgentSDKChatService, DEFAULT_CLAUDE_AGENT_SDK_MODEL, } from './ClaudeAgentSDKChatService';
|
|
2
|
+
import { rejectUnsupportedAgentOptions } from './shared';
|
|
3
|
+
export class ClaudeAgentSDKChatServiceProvider {
|
|
4
|
+
constructor(loadSDK) {
|
|
5
|
+
this.loadSDK = loadSDK;
|
|
6
|
+
}
|
|
7
|
+
createChatService(options) {
|
|
8
|
+
rejectUnsupportedAgentOptions(this.getProviderName(), options);
|
|
9
|
+
return new ClaudeAgentSDKChatService(options, this.loadSDK);
|
|
10
|
+
}
|
|
11
|
+
getProviderName() {
|
|
12
|
+
return 'claude-agent-sdk';
|
|
13
|
+
}
|
|
14
|
+
getSupportedModels() {
|
|
15
|
+
return [DEFAULT_CLAUDE_AGENT_SDK_MODEL];
|
|
16
|
+
}
|
|
17
|
+
getDefaultModel() {
|
|
18
|
+
return DEFAULT_CLAUDE_AGENT_SDK_MODEL;
|
|
19
|
+
}
|
|
20
|
+
supportsVision() {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
getVisionSupportLevel() {
|
|
24
|
+
return 'unsupported';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ClaudeAgentSDKChatServiceProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeAgentSDKChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/agent/ClaudeAgentSDKChatServiceProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,yBAAyB,EAGzB,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,OAAO,iCAAiC;IAG5C,YAAoB,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;IAAG,CAAC;IAEtD,iBAAiB,CAAC,OAAyC;QACzD,6BAA6B,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,IAAI,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,eAAe;QACb,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe;QACb,OAAO,8BAA8B,CAAC;IACxC,CAAC;IAED,cAAc;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qBAAqB;QACnB,OAAO,aAAa,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ChatResponseLength } from '../../../constants';
|
|
2
|
+
import { AgentTextChatService } from './shared';
|
|
3
|
+
export declare const DEFAULT_CODEX_SDK_MODEL = "codex-default";
|
|
4
|
+
type CodexSDKModule = {
|
|
5
|
+
Codex: new (options?: Record<string, unknown>) => CodexClient;
|
|
6
|
+
};
|
|
7
|
+
type CodexClient = {
|
|
8
|
+
startThread(options?: Record<string, unknown>): Promise<CodexThread>;
|
|
9
|
+
};
|
|
10
|
+
type CodexThread = {
|
|
11
|
+
run(prompt: string): Promise<CodexTurn>;
|
|
12
|
+
};
|
|
13
|
+
type CodexTurn = {
|
|
14
|
+
finalResponse?: unknown;
|
|
15
|
+
};
|
|
16
|
+
export type CodexSDKLoader = () => Promise<CodexSDKModule>;
|
|
17
|
+
export type CodexSDKChatServiceOptions = {
|
|
18
|
+
apiKey?: never;
|
|
19
|
+
model?: string;
|
|
20
|
+
responseLength?: ChatResponseLength;
|
|
21
|
+
workingDirectory?: string;
|
|
22
|
+
skipGitRepoCheck?: boolean;
|
|
23
|
+
config?: Record<string, unknown>;
|
|
24
|
+
};
|
|
25
|
+
export declare class CodexSDKChatService extends AgentTextChatService {
|
|
26
|
+
constructor(options?: CodexSDKChatServiceOptions, loadSDK?: CodexSDKLoader);
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=CodexSDKChatService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexSDKChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/CodexSDKChatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAA0B,MAAM,UAAU,CAAC;AAExE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,KAAK,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,WAAW,CAAC;CAC/D,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACtE,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACzC,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;AAE3D,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,oBAAoB;gBAEzD,OAAO,GAAE,0BAA+B,EACxC,OAAO,GAAE,cAA6B;CAsBzC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { AgentTextChatService, wrapAgentProviderError } from './shared';
|
|
2
|
+
export const DEFAULT_CODEX_SDK_MODEL = 'codex-default';
|
|
3
|
+
export class CodexSDKChatService extends AgentTextChatService {
|
|
4
|
+
constructor(options = {}, loadSDK = loadCodexSDK) {
|
|
5
|
+
const model = options.model ?? DEFAULT_CODEX_SDK_MODEL;
|
|
6
|
+
super({
|
|
7
|
+
provider: 'codex-sdk',
|
|
8
|
+
model,
|
|
9
|
+
defaultModel: DEFAULT_CODEX_SDK_MODEL,
|
|
10
|
+
responseLength: options.responseLength,
|
|
11
|
+
getResponse: async (prompt, stream, onPartialResponse) => {
|
|
12
|
+
try {
|
|
13
|
+
const text = await runCodexPrompt(loadSDK, model, options, prompt);
|
|
14
|
+
if (stream) {
|
|
15
|
+
onPartialResponse(text);
|
|
16
|
+
}
|
|
17
|
+
return text;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
throw wrapAgentProviderError('codex-sdk', error);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function runCodexPrompt(loadSDK, model, options, prompt) {
|
|
27
|
+
const { Codex } = await loadSDK();
|
|
28
|
+
const codex = new Codex({
|
|
29
|
+
config: {
|
|
30
|
+
...options.config,
|
|
31
|
+
...(options.model ? { model } : {}),
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const thread = await codex.startThread({
|
|
35
|
+
...(options.workingDirectory
|
|
36
|
+
? { workingDirectory: options.workingDirectory }
|
|
37
|
+
: {}),
|
|
38
|
+
...(options.skipGitRepoCheck !== undefined
|
|
39
|
+
? { skipGitRepoCheck: options.skipGitRepoCheck }
|
|
40
|
+
: {}),
|
|
41
|
+
});
|
|
42
|
+
const turn = await thread.run(prompt);
|
|
43
|
+
if (typeof turn.finalResponse !== 'string') {
|
|
44
|
+
throw new Error('codex-sdk provider received an empty response.');
|
|
45
|
+
}
|
|
46
|
+
return turn.finalResponse;
|
|
47
|
+
}
|
|
48
|
+
async function loadCodexSDK() {
|
|
49
|
+
try {
|
|
50
|
+
return (await dynamicImport('@openai/codex-sdk'));
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const message = 'codex-sdk provider requires @openai/codex-sdk. ' +
|
|
54
|
+
'Install it in your Node.js project and authenticate with Codex.';
|
|
55
|
+
const wrappedError = new Error(message);
|
|
56
|
+
wrappedError.cause = error;
|
|
57
|
+
throw wrappedError;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
61
|
+
//# sourceMappingURL=CodexSDKChatService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexSDKChatService.js","sourceRoot":"","sources":["../../../../../src/services/providers/agent/CodexSDKChatService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAExE,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AA6BvD,MAAM,OAAO,mBAAoB,SAAQ,oBAAoB;IAC3D,YACE,UAAsC,EAAE,EACxC,UAA0B,YAAY;QAEtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,uBAAuB,CAAC;QAEvD,KAAK,CAAC;YACJ,QAAQ,EAAE,WAAW;YACrB,KAAK;YACL,YAAY,EAAE,uBAAuB;YACrC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE;gBACvD,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;oBACnE,IAAI,MAAM,EAAE,CAAC;wBACX,iBAAiB,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,sBAAsB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAED,KAAK,UAAU,cAAc,CAC3B,OAAuB,EACvB,KAAa,EACb,OAAmC,EACnC,MAAc;IAEd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,MAAM,EAAE;YACN,GAAG,OAAO,CAAC,MAAM;YACjB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;QACrC,GAAG,CAAC,OAAO,CAAC,gBAAgB;YAC1B,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEtC,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,IAAI,CAAC,aAAa,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,aAAa,CAAC,mBAAmB,CAAC,CAAmB,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GACX,iDAAiD;YACjD,iEAAiE,CAAC;QACpE,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,YAAoC,CAAC,KAAK,GAAG,KAAK,CAAC;QACpD,MAAM,YAAY,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAErD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChatService } from '../../ChatService';
|
|
2
|
+
import { ChatServiceProvider, VisionSupportLevel } from '../ChatServiceProvider';
|
|
3
|
+
import { CodexSDKChatServiceOptions, CodexSDKLoader } from './CodexSDKChatService';
|
|
4
|
+
export declare class CodexSDKChatServiceProvider implements ChatServiceProvider<CodexSDKChatServiceOptions> {
|
|
5
|
+
private loadSDK?;
|
|
6
|
+
constructor(loadSDK?: CodexSDKLoader | undefined);
|
|
7
|
+
createChatService(options: CodexSDKChatServiceOptions): ChatService;
|
|
8
|
+
getProviderName(): string;
|
|
9
|
+
getSupportedModels(): string[];
|
|
10
|
+
getDefaultModel(): string;
|
|
11
|
+
supportsVision(): boolean;
|
|
12
|
+
getVisionSupportLevel(): VisionSupportLevel;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=CodexSDKChatServiceProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexSDKChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/CodexSDKChatServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,0BAA0B,EAC1B,cAAc,EAEf,MAAM,uBAAuB,CAAC;AAG/B,qBAAa,2BACX,YAAW,mBAAmB,CAAC,0BAA0B,CAAC;IAE9C,OAAO,CAAC,OAAO,CAAC;gBAAR,OAAO,CAAC,EAAE,cAAc,YAAA;IAE5C,iBAAiB,CAAC,OAAO,EAAE,0BAA0B,GAAG,WAAW;IAKnE,eAAe,IAAI,MAAM;IAIzB,kBAAkB,IAAI,MAAM,EAAE;IAI9B,eAAe,IAAI,MAAM;IAIzB,cAAc,IAAI,OAAO;IAIzB,qBAAqB,IAAI,kBAAkB;CAG5C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CodexSDKChatService, DEFAULT_CODEX_SDK_MODEL, } from './CodexSDKChatService';
|
|
2
|
+
import { rejectUnsupportedAgentOptions } from './shared';
|
|
3
|
+
export class CodexSDKChatServiceProvider {
|
|
4
|
+
constructor(loadSDK) {
|
|
5
|
+
this.loadSDK = loadSDK;
|
|
6
|
+
}
|
|
7
|
+
createChatService(options) {
|
|
8
|
+
rejectUnsupportedAgentOptions(this.getProviderName(), options);
|
|
9
|
+
return new CodexSDKChatService(options, this.loadSDK);
|
|
10
|
+
}
|
|
11
|
+
getProviderName() {
|
|
12
|
+
return 'codex-sdk';
|
|
13
|
+
}
|
|
14
|
+
getSupportedModels() {
|
|
15
|
+
return [DEFAULT_CODEX_SDK_MODEL];
|
|
16
|
+
}
|
|
17
|
+
getDefaultModel() {
|
|
18
|
+
return DEFAULT_CODEX_SDK_MODEL;
|
|
19
|
+
}
|
|
20
|
+
supportsVision() {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
getVisionSupportLevel() {
|
|
24
|
+
return 'unsupported';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=CodexSDKChatServiceProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexSDKChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/agent/CodexSDKChatServiceProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,mBAAmB,EAGnB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,OAAO,2BAA2B;IAGtC,YAAoB,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;IAAG,CAAC;IAEhD,iBAAiB,CAAC,OAAmC;QACnD,6BAA6B,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,eAAe;QACb,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACnC,CAAC;IAED,eAAe;QACb,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,cAAc;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qBAAqB;QACnB,OAAO,aAAa,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ChatResponseLength } from '../../../constants';
|
|
2
|
+
import { AgentTextChatService } from './shared';
|
|
3
|
+
export declare const DEFAULT_COPILOT_SDK_MODEL = "gpt-4.1";
|
|
4
|
+
type CopilotSDKModule = {
|
|
5
|
+
CopilotClient: new () => CopilotClient;
|
|
6
|
+
};
|
|
7
|
+
type CopilotClient = {
|
|
8
|
+
createSession(options?: Record<string, unknown>): Promise<CopilotSession>;
|
|
9
|
+
stop?(): Promise<void> | void;
|
|
10
|
+
};
|
|
11
|
+
type CopilotSession = {
|
|
12
|
+
sendAndWait(message: {
|
|
13
|
+
prompt: string;
|
|
14
|
+
}): Promise<CopilotResponse>;
|
|
15
|
+
on?(eventName: string, handler: (event: CopilotMessageDeltaEvent) => void): (() => void) | undefined;
|
|
16
|
+
};
|
|
17
|
+
type CopilotResponse = {
|
|
18
|
+
data?: {
|
|
19
|
+
content?: unknown;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
type CopilotMessageDeltaEvent = {
|
|
23
|
+
data?: {
|
|
24
|
+
deltaContent?: unknown;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export type CopilotSDKLoader = () => Promise<CopilotSDKModule>;
|
|
28
|
+
export type CopilotSDKPermissionRequest = {
|
|
29
|
+
kind: string;
|
|
30
|
+
toolCallId?: string;
|
|
31
|
+
};
|
|
32
|
+
export type CopilotSDKPermissionRequestResult = {
|
|
33
|
+
kind: string;
|
|
34
|
+
};
|
|
35
|
+
export type CopilotSDKPermissionHandler = (request: CopilotSDKPermissionRequest, invocation: {
|
|
36
|
+
sessionId: string;
|
|
37
|
+
}) => CopilotSDKPermissionRequestResult | Promise<CopilotSDKPermissionRequestResult>;
|
|
38
|
+
export type CopilotSDKChatServiceOptions = {
|
|
39
|
+
apiKey?: never;
|
|
40
|
+
model?: string;
|
|
41
|
+
responseLength?: ChatResponseLength;
|
|
42
|
+
onPermissionRequest?: CopilotSDKPermissionHandler;
|
|
43
|
+
};
|
|
44
|
+
export declare class CopilotSDKChatService extends AgentTextChatService {
|
|
45
|
+
constructor(options?: CopilotSDKChatServiceOptions, loadSDK?: CopilotSDKLoader);
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=CopilotSDKChatService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopilotSDKChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/agent/CopilotSDKChatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAA0B,MAAM,UAAU,CAAC;AAExE,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,KAAK,gBAAgB,GAAG;IACtB,aAAa,EAAE,UAAU,aAAa,CAAC;CACxC,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1E,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,WAAW,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnE,EAAE,CAAC,CACD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,GACjD,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,IAAI,CAAC,EAAE;QACL,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/D,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,CACxC,OAAO,EAAE,2BAA2B,EACpC,UAAU,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,KAE/B,iCAAiC,GACjC,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAE/C,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CACnD,CAAC;AAEF,qBAAa,qBAAsB,SAAQ,oBAAoB;gBAE3D,OAAO,GAAE,4BAAiC,EAC1C,OAAO,GAAE,gBAAiC;CAyB7C"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { AgentTextChatService, wrapAgentProviderError } from './shared';
|
|
2
|
+
export const DEFAULT_COPILOT_SDK_MODEL = 'gpt-4.1';
|
|
3
|
+
export class CopilotSDKChatService extends AgentTextChatService {
|
|
4
|
+
constructor(options = {}, loadSDK = loadCopilotSDK) {
|
|
5
|
+
const model = options.model ?? DEFAULT_COPILOT_SDK_MODEL;
|
|
6
|
+
super({
|
|
7
|
+
provider: 'copilot-sdk',
|
|
8
|
+
model,
|
|
9
|
+
defaultModel: DEFAULT_COPILOT_SDK_MODEL,
|
|
10
|
+
responseLength: options.responseLength,
|
|
11
|
+
getResponse: async (prompt, stream, onPartialResponse) => {
|
|
12
|
+
try {
|
|
13
|
+
return await runCopilotPrompt(loadSDK, model, options, prompt, stream, onPartialResponse);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
throw wrapAgentProviderError('copilot-sdk', error);
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function runCopilotPrompt(loadSDK, model, options, prompt, stream, onPartialResponse) {
|
|
23
|
+
const { CopilotClient } = await loadSDK();
|
|
24
|
+
const client = new CopilotClient();
|
|
25
|
+
let unsubscribe = undefined;
|
|
26
|
+
let streamedText = '';
|
|
27
|
+
try {
|
|
28
|
+
const session = await client.createSession({
|
|
29
|
+
model,
|
|
30
|
+
streaming: stream,
|
|
31
|
+
onPermissionRequest: options.onPermissionRequest ?? denyCopilotPermissionRequest,
|
|
32
|
+
});
|
|
33
|
+
if (stream && session.on) {
|
|
34
|
+
unsubscribe = session.on('assistant.message_delta', (event) => {
|
|
35
|
+
const delta = event.data?.deltaContent;
|
|
36
|
+
if (typeof delta === 'string' && delta) {
|
|
37
|
+
streamedText += delta;
|
|
38
|
+
onPartialResponse(delta);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
const response = await session.sendAndWait({ prompt });
|
|
43
|
+
const content = response.data?.content;
|
|
44
|
+
if (typeof content !== 'string') {
|
|
45
|
+
throw new Error('copilot-sdk provider received an empty response.');
|
|
46
|
+
}
|
|
47
|
+
if (stream && streamedText === '') {
|
|
48
|
+
onPartialResponse(content);
|
|
49
|
+
}
|
|
50
|
+
return content;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
if (unsubscribe) {
|
|
54
|
+
unsubscribe();
|
|
55
|
+
}
|
|
56
|
+
await client.stop?.();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const denyCopilotPermissionRequest = () => ({
|
|
60
|
+
kind: 'denied-no-approval-rule-and-could-not-request-from-user',
|
|
61
|
+
});
|
|
62
|
+
async function loadCopilotSDK() {
|
|
63
|
+
try {
|
|
64
|
+
return (await dynamicImport('@github/copilot-sdk'));
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const message = 'copilot-sdk provider requires @github/copilot-sdk. ' +
|
|
68
|
+
'Install it in your Node.js project and authenticate with GitHub Copilot.';
|
|
69
|
+
const wrappedError = new Error(message);
|
|
70
|
+
wrappedError.cause = error;
|
|
71
|
+
throw wrappedError;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
75
|
+
//# sourceMappingURL=CopilotSDKChatService.js.map
|