@tencent-ai/agent-sdk 0.1.0-next.989 → 0.1.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.md +73 -2
- package/cli/CHANGELOG.md +2418 -0
- package/cli/LICENSE.txt +19 -0
- package/cli/README.md +26 -0
- package/cli/bin/codebuddy +39 -0
- package/cli/dist/codebuddy.js +20 -0
- package/cli/package.json +44 -0
- package/cli/product.cloudhosted.json +242 -0
- package/cli/product.internal.json +244 -0
- package/cli/product.ioa.json +467 -0
- package/cli/product.json +948 -0
- package/cli/product.selfhosted.json +196 -0
- package/cli/vendor/ripgrep/COPYING +3 -0
- package/cli/vendor/ripgrep/arm64-darwin/rg +0 -0
- package/cli/vendor/ripgrep/arm64-darwin/ripgrep.node +0 -0
- package/cli/vendor/ripgrep/arm64-linux/rg +0 -0
- package/cli/vendor/ripgrep/arm64-linux/ripgrep.node +0 -0
- package/cli/vendor/ripgrep/x64-darwin/rg +0 -0
- package/cli/vendor/ripgrep/x64-darwin/ripgrep.node +0 -0
- package/cli/vendor/ripgrep/x64-linux/rg +0 -0
- package/cli/vendor/ripgrep/x64-linux/ripgrep.node +0 -0
- package/cli/vendor/ripgrep/x64-win32/rg.exe +0 -0
- package/cli/vendor/ripgrep/x64-win32/ripgrep.node +0 -0
- package/lib/errors.d.ts +10 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +17 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +36 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +40 -0
- package/lib/index.js.map +1 -0
- package/lib/package.spec.js +3 -2
- package/lib/package.spec.js.map +1 -1
- package/lib/query.d.ts +46 -0
- package/lib/query.d.ts.map +1 -0
- package/lib/query.js +270 -0
- package/lib/query.js.map +1 -0
- package/lib/session.d.ts +53 -0
- package/lib/session.d.ts.map +1 -0
- package/lib/session.js +163 -0
- package/lib/session.js.map +1 -0
- package/lib/transport/index.d.ts +104 -0
- package/lib/transport/index.d.ts.map +1 -0
- package/lib/transport/index.js +20 -0
- package/lib/transport/index.js.map +1 -0
- package/lib/transport/process-transport.d.ts +65 -0
- package/lib/transport/process-transport.d.ts.map +1 -0
- package/lib/transport/process-transport.js +380 -0
- package/lib/transport/process-transport.js.map +1 -0
- package/lib/types.d.ts +603 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +58 -0
- package/lib/types.js.map +1 -0
- package/lib/utils/cli-resolver.d.ts +36 -0
- package/lib/utils/cli-resolver.d.ts.map +1 -0
- package/lib/utils/cli-resolver.js +123 -0
- package/lib/utils/cli-resolver.js.map +1 -0
- package/lib/utils/env-utils.d.ts +9 -0
- package/lib/utils/env-utils.d.ts.map +1 -0
- package/lib/utils/env-utils.js +19 -0
- package/lib/utils/env-utils.js.map +1 -0
- package/lib/utils/index.d.ts +8 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +17 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/process.d.ts +8 -0
- package/lib/utils/process.d.ts.map +1 -0
- package/lib/utils/process.js +16 -0
- package/lib/utils/process.js.map +1 -0
- package/lib/utils/stream.d.ts +24 -0
- package/lib/utils/stream.d.ts.map +1 -0
- package/lib/utils/stream.js +85 -0
- package/lib/utils/stream.js.map +1 -0
- package/package.json +21 -14
- package/dist/agent-sdk.js +0 -1
- package/lib/common/application-utils.d.ts +0 -5
- package/lib/common/application-utils.d.ts.map +0 -1
- package/lib/common/application-utils.js +0 -18
- package/lib/common/application-utils.js.map +0 -1
- package/lib/common/component-registry.d.ts +0 -10
- package/lib/common/component-registry.d.ts.map +0 -1
- package/lib/common/component-registry.js +0 -50
- package/lib/common/component-registry.js.map +0 -1
- package/lib/common/index.d.ts +0 -4
- package/lib/common/index.d.ts.map +0 -1
- package/lib/common/index.js +0 -20
- package/lib/common/index.js.map +0 -1
- package/lib/common/services.d.ts +0 -8
- package/lib/common/services.d.ts.map +0 -1
- package/lib/common/services.js +0 -21
- package/lib/common/services.js.map +0 -1
package/lib/query.js
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Query Implementation
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Query = void 0;
|
|
7
|
+
exports.query = query;
|
|
8
|
+
const transport_1 = require("./transport");
|
|
9
|
+
const types_1 = require("./types");
|
|
10
|
+
/**
|
|
11
|
+
* Create a query for interacting with the agent.
|
|
12
|
+
*/
|
|
13
|
+
function query(params) {
|
|
14
|
+
return new Query(params.prompt, params.options);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Query class - an AsyncGenerator that yields messages.
|
|
18
|
+
*/
|
|
19
|
+
class Query {
|
|
20
|
+
constructor(prompt, options) {
|
|
21
|
+
var _a;
|
|
22
|
+
this.prompt = prompt;
|
|
23
|
+
this.options = options;
|
|
24
|
+
this.initialized = false;
|
|
25
|
+
this.hookCallbacks = new Map();
|
|
26
|
+
this.iterator = null;
|
|
27
|
+
this.transport = (0, transport_1.createTransport)({
|
|
28
|
+
executablePath: options === null || options === void 0 ? void 0 : options.pathToClaudeCodeExecutable,
|
|
29
|
+
cwd: options === null || options === void 0 ? void 0 : options.cwd,
|
|
30
|
+
env: options === null || options === void 0 ? void 0 : options.env,
|
|
31
|
+
permissionMode: options === null || options === void 0 ? void 0 : options.permissionMode,
|
|
32
|
+
// Model options
|
|
33
|
+
model: options === null || options === void 0 ? void 0 : options.model,
|
|
34
|
+
fallbackModel: options === null || options === void 0 ? void 0 : options.fallbackModel,
|
|
35
|
+
maxTurns: options === null || options === void 0 ? void 0 : options.maxTurns,
|
|
36
|
+
// Tool options
|
|
37
|
+
allowedTools: options === null || options === void 0 ? void 0 : options.allowedTools,
|
|
38
|
+
disallowedTools: options === null || options === void 0 ? void 0 : options.disallowedTools,
|
|
39
|
+
// Session options
|
|
40
|
+
continue: options === null || options === void 0 ? void 0 : options.continue,
|
|
41
|
+
resume: options === null || options === void 0 ? void 0 : options.resume,
|
|
42
|
+
forkSession: options === null || options === void 0 ? void 0 : options.forkSession,
|
|
43
|
+
// MCP options
|
|
44
|
+
mcpServers: options === null || options === void 0 ? void 0 : options.mcpServers,
|
|
45
|
+
strictMcpConfig: options === null || options === void 0 ? void 0 : options.strictMcpConfig,
|
|
46
|
+
// Settings
|
|
47
|
+
settingSources: options === null || options === void 0 ? void 0 : options.settingSources,
|
|
48
|
+
additionalDirectories: options === null || options === void 0 ? void 0 : options.additionalDirectories,
|
|
49
|
+
// Output options
|
|
50
|
+
includePartialMessages: options === null || options === void 0 ? void 0 : options.includePartialMessages,
|
|
51
|
+
// Extra args
|
|
52
|
+
extraArgs: options === null || options === void 0 ? void 0 : options.extraArgs,
|
|
53
|
+
stderr: options === null || options === void 0 ? void 0 : options.stderr,
|
|
54
|
+
});
|
|
55
|
+
this.abortController = (_a = options === null || options === void 0 ? void 0 : options.abortController) !== null && _a !== void 0 ? _a : new AbortController();
|
|
56
|
+
this.registerHooks(options === null || options === void 0 ? void 0 : options.hooks);
|
|
57
|
+
}
|
|
58
|
+
// ============= AsyncGenerator Implementation =============
|
|
59
|
+
[Symbol.asyncIterator]() {
|
|
60
|
+
if (!this.iterator) {
|
|
61
|
+
this.iterator = this.createIterator();
|
|
62
|
+
}
|
|
63
|
+
return this.iterator;
|
|
64
|
+
}
|
|
65
|
+
async next() {
|
|
66
|
+
return this[Symbol.asyncIterator]().next();
|
|
67
|
+
}
|
|
68
|
+
async return() {
|
|
69
|
+
await this.interrupt();
|
|
70
|
+
return { done: true, value: undefined };
|
|
71
|
+
}
|
|
72
|
+
async throw(e) {
|
|
73
|
+
await this.interrupt();
|
|
74
|
+
throw e;
|
|
75
|
+
}
|
|
76
|
+
// ============= Control Methods =============
|
|
77
|
+
async interrupt() {
|
|
78
|
+
try {
|
|
79
|
+
await this.transport.sendControlRequest({
|
|
80
|
+
subtype: 'interrupt',
|
|
81
|
+
reason: 'User interrupt',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (_a) {
|
|
85
|
+
// Ignore errors during interrupt
|
|
86
|
+
}
|
|
87
|
+
// Don't close transport - let the iterator continue to receive
|
|
88
|
+
// the result message and close naturally
|
|
89
|
+
}
|
|
90
|
+
async setPermissionMode(mode) {
|
|
91
|
+
await this.transport.sendControlRequest({
|
|
92
|
+
subtype: 'set_permission_mode',
|
|
93
|
+
mode,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async setModel(model) {
|
|
97
|
+
await this.transport.sendControlRequest({
|
|
98
|
+
subtype: 'set_model',
|
|
99
|
+
model,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
async setMaxThinkingTokens(maxThinkingTokens) {
|
|
103
|
+
await this.transport.sendControlRequest({
|
|
104
|
+
subtype: 'set_max_thinking_tokens',
|
|
105
|
+
max_thinking_tokens: maxThinkingTokens,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// ============= Query Methods =============
|
|
109
|
+
async supportedCommands() {
|
|
110
|
+
var _a;
|
|
111
|
+
const response = await this.transport.sendControlRequest({
|
|
112
|
+
subtype: 'initialize',
|
|
113
|
+
});
|
|
114
|
+
return (_a = response.commands) !== null && _a !== void 0 ? _a : [];
|
|
115
|
+
}
|
|
116
|
+
async supportedModels() {
|
|
117
|
+
var _a;
|
|
118
|
+
const response = await this.transport.sendControlRequest({
|
|
119
|
+
subtype: 'initialize',
|
|
120
|
+
});
|
|
121
|
+
return (_a = response.models) !== null && _a !== void 0 ? _a : [];
|
|
122
|
+
}
|
|
123
|
+
async mcpServerStatus() {
|
|
124
|
+
var _a;
|
|
125
|
+
const response = await this.transport.sendControlRequest({
|
|
126
|
+
subtype: 'mcp_status',
|
|
127
|
+
});
|
|
128
|
+
return (_a = response.mcp_servers) !== null && _a !== void 0 ? _a : [];
|
|
129
|
+
}
|
|
130
|
+
async accountInfo() {
|
|
131
|
+
var _a;
|
|
132
|
+
const response = await this.transport.sendControlRequest({
|
|
133
|
+
subtype: 'initialize',
|
|
134
|
+
});
|
|
135
|
+
return (_a = response.account) !== null && _a !== void 0 ? _a : {};
|
|
136
|
+
}
|
|
137
|
+
async streamInput(stream) {
|
|
138
|
+
for await (const message of stream) {
|
|
139
|
+
this.transport.sendUserMessage(message);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// ============= Private Methods =============
|
|
143
|
+
async *createIterator() {
|
|
144
|
+
var _a;
|
|
145
|
+
try {
|
|
146
|
+
await this.initialize();
|
|
147
|
+
await this.sendPrompt();
|
|
148
|
+
for await (const message of this.transport.messages()) {
|
|
149
|
+
if (this.abortController.signal.aborted) {
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
if ((0, types_1.isControlRequest)(message)) {
|
|
153
|
+
await this.handleControlRequest(message);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if ((0, types_1.isMessage)(message)) {
|
|
157
|
+
if (message.type === 'stream_event' &&
|
|
158
|
+
!((_a = this.options) === null || _a === void 0 ? void 0 : _a.includePartialMessages)) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
yield message;
|
|
162
|
+
if (message.type === 'result') {
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
this.transport.close();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async initialize() {
|
|
173
|
+
var _a, _b, _c;
|
|
174
|
+
if (this.initialized) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const systemPrompt = typeof ((_a = this.options) === null || _a === void 0 ? void 0 : _a.systemPrompt) === 'string'
|
|
178
|
+
? this.options.systemPrompt
|
|
179
|
+
: undefined;
|
|
180
|
+
const appendSystemPrompt = typeof ((_b = this.options) === null || _b === void 0 ? void 0 : _b.systemPrompt) === 'object'
|
|
181
|
+
? this.options.systemPrompt.append
|
|
182
|
+
: undefined;
|
|
183
|
+
const initRequest = {
|
|
184
|
+
subtype: 'initialize',
|
|
185
|
+
hooks: this.buildHooksConfig(),
|
|
186
|
+
systemPrompt,
|
|
187
|
+
appendSystemPrompt,
|
|
188
|
+
agents: (_c = this.options) === null || _c === void 0 ? void 0 : _c.agents,
|
|
189
|
+
};
|
|
190
|
+
await this.transport.sendControlRequest(initRequest);
|
|
191
|
+
this.initialized = true;
|
|
192
|
+
}
|
|
193
|
+
async sendPrompt() {
|
|
194
|
+
if (typeof this.prompt === 'string') {
|
|
195
|
+
this.transport.sendUserMessage(this.prompt);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
for await (const message of this.prompt) {
|
|
199
|
+
this.transport.sendUserMessage(message);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async handleControlRequest(request) {
|
|
204
|
+
const { subtype } = request.request;
|
|
205
|
+
if (subtype === 'hook_callback') {
|
|
206
|
+
await this.handleHookCallback(request);
|
|
207
|
+
}
|
|
208
|
+
else if (subtype === 'can_use_tool') {
|
|
209
|
+
this.transport.sendControlResponse(request.request_id, {
|
|
210
|
+
allowed: false,
|
|
211
|
+
reason: 'Permission denied by SDK',
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async handleHookCallback(request) {
|
|
216
|
+
const { callback_id, input, tool_use_id } = request.request;
|
|
217
|
+
const callback = this.hookCallbacks.get(callback_id);
|
|
218
|
+
let response = { continue: true };
|
|
219
|
+
if (callback) {
|
|
220
|
+
try {
|
|
221
|
+
response = await callback(input, tool_use_id, { signal: this.abortController.signal });
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
response = {
|
|
225
|
+
continue: false,
|
|
226
|
+
stopReason: error instanceof Error ? error.message : String(error),
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
this.transport.sendControlResponse(request.request_id, response);
|
|
231
|
+
}
|
|
232
|
+
registerHooks(hooks) {
|
|
233
|
+
if (!hooks) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
this.registeredHooks = hooks;
|
|
237
|
+
// Build callback ID mapping for each hook - must match buildHooksConfig
|
|
238
|
+
for (const [event, matchers] of Object.entries(hooks)) {
|
|
239
|
+
if (!matchers) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
matchers.forEach((matcher, matcherIndex) => {
|
|
243
|
+
matcher.hooks.forEach((hook, hookIndex) => {
|
|
244
|
+
const callbackId = `hook_${event}_${matcherIndex}_${hookIndex}`;
|
|
245
|
+
this.hookCallbacks.set(callbackId, hook);
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
buildHooksConfig() {
|
|
251
|
+
if (!this.registeredHooks) {
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
const config = {};
|
|
255
|
+
for (const [event, matchers] of Object.entries(this.registeredHooks)) {
|
|
256
|
+
if (!matchers) {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
const hookEvent = event;
|
|
260
|
+
config[hookEvent] = matchers.map((matcher, matcherIndex) => ({
|
|
261
|
+
matcher: matcher.matcher,
|
|
262
|
+
hookCallbackIds: matcher.hooks.map((_, hookIndex) => `hook_${event}_${matcherIndex}_${hookIndex}`),
|
|
263
|
+
timeout: matcher.timeout,
|
|
264
|
+
}));
|
|
265
|
+
}
|
|
266
|
+
return Object.keys(config).length > 0 ? config : undefined;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
exports.Query = Query;
|
|
270
|
+
//# sourceMappingURL=query.js.map
|
package/lib/query.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/lib/session.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V2 Session API
|
|
3
|
+
*
|
|
4
|
+
* Multi-turn conversation support.
|
|
5
|
+
*/
|
|
6
|
+
import type { Message, UserMessage, ResultMessage, SessionOptions } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Create a new session for multi-turn conversations.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createSession(options: SessionOptions): SessionImpl;
|
|
11
|
+
/**
|
|
12
|
+
* Resume an existing session by ID.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resumeSession(sessionId: string, options: SessionOptions): SessionImpl;
|
|
15
|
+
/**
|
|
16
|
+
* One-shot convenience function for single prompts.
|
|
17
|
+
*/
|
|
18
|
+
export declare function prompt(message: string, options: SessionOptions): Promise<ResultMessage>;
|
|
19
|
+
/**
|
|
20
|
+
* Session class for multi-turn conversations.
|
|
21
|
+
*/
|
|
22
|
+
export declare class SessionImpl {
|
|
23
|
+
private options;
|
|
24
|
+
private transport;
|
|
25
|
+
private _sessionId;
|
|
26
|
+
private initialized;
|
|
27
|
+
private closed;
|
|
28
|
+
private messageIterator;
|
|
29
|
+
constructor(options: SessionOptions, resumeSessionId?: string);
|
|
30
|
+
/**
|
|
31
|
+
* The session ID. Available after receiving the first message.
|
|
32
|
+
*/
|
|
33
|
+
get sessionId(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Send a message to the agent.
|
|
36
|
+
*/
|
|
37
|
+
send(message: string | UserMessage): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Receive messages from the agent.
|
|
40
|
+
*/
|
|
41
|
+
receive(): AsyncGenerator<Message, void>;
|
|
42
|
+
/**
|
|
43
|
+
* Close the session.
|
|
44
|
+
*/
|
|
45
|
+
close(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Async disposal support.
|
|
48
|
+
*/
|
|
49
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
50
|
+
private initialize;
|
|
51
|
+
private handleControlRequest;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACR,OAAO,EACP,WAAW,EACX,aAAa,EACb,cAAc,EAEjB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW,CAElE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,WAAW,CAErF;AAED;;GAEG;AACH,wBAAsB,MAAM,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,aAAa,CAAC,CAgBxB;AAED;;GAEG;AACH,qBAAa,WAAW;IAQhB,OAAO,CAAC,OAAO;IAPnB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAwE;gBAGnF,OAAO,EAAE,cAAc,EAC/B,eAAe,CAAC,EAAE,MAAM;IAU5B;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAKtB;IAED;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD;;OAEG;IACI,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC;IA4C/C;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;YAM9B,UAAU;YAcV,oBAAoB;CAcrC"}
|
package/lib/session.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* V2 Session API
|
|
4
|
+
*
|
|
5
|
+
* Multi-turn conversation support.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.SessionImpl = void 0;
|
|
9
|
+
exports.createSession = createSession;
|
|
10
|
+
exports.resumeSession = resumeSession;
|
|
11
|
+
exports.prompt = prompt;
|
|
12
|
+
const transport_1 = require("./transport");
|
|
13
|
+
const types_1 = require("./types");
|
|
14
|
+
/**
|
|
15
|
+
* Create a new session for multi-turn conversations.
|
|
16
|
+
*/
|
|
17
|
+
function createSession(options) {
|
|
18
|
+
return new SessionImpl(options);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Resume an existing session by ID.
|
|
22
|
+
*/
|
|
23
|
+
function resumeSession(sessionId, options) {
|
|
24
|
+
return new SessionImpl(options, sessionId);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* One-shot convenience function for single prompts.
|
|
28
|
+
*/
|
|
29
|
+
async function prompt(message, options) {
|
|
30
|
+
const session = createSession(options);
|
|
31
|
+
try {
|
|
32
|
+
await session.send(message);
|
|
33
|
+
for await (const msg of session.receive()) {
|
|
34
|
+
if (msg.type === 'result') {
|
|
35
|
+
return msg;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
throw new Error('No result message received');
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
session.close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Session class for multi-turn conversations.
|
|
46
|
+
*/
|
|
47
|
+
class SessionImpl {
|
|
48
|
+
constructor(options, resumeSessionId) {
|
|
49
|
+
this.options = options;
|
|
50
|
+
this.initialized = false;
|
|
51
|
+
this.closed = false;
|
|
52
|
+
this.messageIterator = null;
|
|
53
|
+
this.transport = (0, transport_1.createTransport)({
|
|
54
|
+
executablePath: options.pathToClaudeCodeExecutable,
|
|
55
|
+
env: options.env,
|
|
56
|
+
});
|
|
57
|
+
this._sessionId = resumeSessionId !== null && resumeSessionId !== void 0 ? resumeSessionId : '';
|
|
58
|
+
void this.options;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The session ID. Available after receiving the first message.
|
|
62
|
+
*/
|
|
63
|
+
get sessionId() {
|
|
64
|
+
if (!this._sessionId) {
|
|
65
|
+
throw new Error('Session not initialized. sessionId is available after receiving the first message.');
|
|
66
|
+
}
|
|
67
|
+
return this._sessionId;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Send a message to the agent.
|
|
71
|
+
*/
|
|
72
|
+
async send(message) {
|
|
73
|
+
if (this.closed) {
|
|
74
|
+
throw new Error('Session is closed');
|
|
75
|
+
}
|
|
76
|
+
if (!this.initialized) {
|
|
77
|
+
await this.initialize();
|
|
78
|
+
}
|
|
79
|
+
this.transport.sendUserMessage(message);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Receive messages from the agent.
|
|
83
|
+
*/
|
|
84
|
+
async *receive() {
|
|
85
|
+
if (this.closed) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (!this.initialized) {
|
|
89
|
+
await this.initialize();
|
|
90
|
+
}
|
|
91
|
+
// Reuse the same iterator across multiple receive() calls
|
|
92
|
+
if (!this.messageIterator) {
|
|
93
|
+
this.messageIterator = this.transport.messages();
|
|
94
|
+
}
|
|
95
|
+
while (true) {
|
|
96
|
+
const { value: message, done } = await this.messageIterator.next();
|
|
97
|
+
if (done || this.closed) {
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
// Handle control requests
|
|
101
|
+
if ((0, types_1.isControlRequest)(message)) {
|
|
102
|
+
await this.handleControlRequest(message);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// Yield messages
|
|
106
|
+
if ((0, types_1.isMessage)(message)) {
|
|
107
|
+
// Extract session ID from first message
|
|
108
|
+
if (!this._sessionId && 'session_id' in message) {
|
|
109
|
+
this._sessionId = message.session_id;
|
|
110
|
+
}
|
|
111
|
+
yield message;
|
|
112
|
+
// Stop on result message (end of turn)
|
|
113
|
+
if (message.type === 'result') {
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Close the session.
|
|
121
|
+
*/
|
|
122
|
+
close() {
|
|
123
|
+
if (this.closed) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
this.closed = true;
|
|
127
|
+
this.transport.close();
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Async disposal support.
|
|
131
|
+
*/
|
|
132
|
+
async [Symbol.asyncDispose]() {
|
|
133
|
+
this.close();
|
|
134
|
+
}
|
|
135
|
+
// ============= Private Methods =============
|
|
136
|
+
async initialize() {
|
|
137
|
+
if (this.initialized) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
await this.transport.sendControlRequest({
|
|
141
|
+
subtype: 'initialize',
|
|
142
|
+
systemPrompt: undefined,
|
|
143
|
+
appendSystemPrompt: undefined,
|
|
144
|
+
});
|
|
145
|
+
this.initialized = true;
|
|
146
|
+
}
|
|
147
|
+
async handleControlRequest(request) {
|
|
148
|
+
const { subtype } = request.request;
|
|
149
|
+
if (subtype === 'hook_callback') {
|
|
150
|
+
// Default: continue
|
|
151
|
+
this.transport.sendControlResponse(request.request_id, { continue: true });
|
|
152
|
+
}
|
|
153
|
+
else if (subtype === 'can_use_tool') {
|
|
154
|
+
// Default: deny
|
|
155
|
+
this.transport.sendControlResponse(request.request_id, {
|
|
156
|
+
allowed: false,
|
|
157
|
+
reason: 'Permission denied by SDK',
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.SessionImpl = SessionImpl;
|
|
163
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport Layer
|
|
3
|
+
*
|
|
4
|
+
* Abstract interface for communication with CLI.
|
|
5
|
+
*/
|
|
6
|
+
import type { Message, UserMessage, ControlRequest, ControlRequestPayload } from '../types';
|
|
7
|
+
/**
|
|
8
|
+
* Transport interface - abstraction for CLI communication.
|
|
9
|
+
*/
|
|
10
|
+
export interface Transport {
|
|
11
|
+
/**
|
|
12
|
+
* Start the transport.
|
|
13
|
+
*/
|
|
14
|
+
start(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Async generator for incoming messages.
|
|
17
|
+
*/
|
|
18
|
+
messages(): AsyncGenerator<Message | ControlRequest, void, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Send a user message to CLI.
|
|
21
|
+
*/
|
|
22
|
+
sendUserMessage(content: string | UserMessage): void;
|
|
23
|
+
/**
|
|
24
|
+
* Send a control request and wait for response.
|
|
25
|
+
*/
|
|
26
|
+
sendControlRequest<T = Record<string, unknown>>(payload: ControlRequestPayload, timeoutMs?: number): Promise<T>;
|
|
27
|
+
/**
|
|
28
|
+
* Send a control response.
|
|
29
|
+
*/
|
|
30
|
+
sendControlResponse(requestId: string, response: Record<string, unknown>): void;
|
|
31
|
+
/**
|
|
32
|
+
* Send a control error response.
|
|
33
|
+
*/
|
|
34
|
+
sendControlErrorResponse(requestId: string, error: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Check if transport is ready.
|
|
37
|
+
*/
|
|
38
|
+
isReady(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Close the transport.
|
|
41
|
+
*/
|
|
42
|
+
close(): void;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Options for creating transports.
|
|
46
|
+
*/
|
|
47
|
+
export interface TransportOptions {
|
|
48
|
+
/** Request timeout in milliseconds */
|
|
49
|
+
requestTimeoutMs?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Options for ProcessTransport.
|
|
53
|
+
* Only includes options that are supported by the CLI.
|
|
54
|
+
*/
|
|
55
|
+
export interface ProcessTransportOptions extends TransportOptions {
|
|
56
|
+
/** Path to CLI executable */
|
|
57
|
+
executablePath?: string;
|
|
58
|
+
/** Working directory */
|
|
59
|
+
cwd?: string;
|
|
60
|
+
/** Environment variables */
|
|
61
|
+
env?: Record<string, string | undefined>;
|
|
62
|
+
/** Additional CLI arguments */
|
|
63
|
+
args?: string[];
|
|
64
|
+
/** Permission mode */
|
|
65
|
+
permissionMode?: string;
|
|
66
|
+
/** Additional directories (--add-dir) */
|
|
67
|
+
additionalDirectories?: string[];
|
|
68
|
+
/** Allowed tools (--allowedTools) */
|
|
69
|
+
allowedTools?: string[];
|
|
70
|
+
/** Disallowed tools (--disallowedTools) */
|
|
71
|
+
disallowedTools?: string[];
|
|
72
|
+
/** Model (--model) */
|
|
73
|
+
model?: string;
|
|
74
|
+
/** Fallback model (--fallback-model) */
|
|
75
|
+
fallbackModel?: string;
|
|
76
|
+
/** Max turns (--max-turns) */
|
|
77
|
+
maxTurns?: number;
|
|
78
|
+
/** MCP servers config (--mcp-config) */
|
|
79
|
+
mcpServers?: Record<string, unknown>;
|
|
80
|
+
/** Strict MCP config (--strict-mcp-config) */
|
|
81
|
+
strictMcpConfig?: boolean;
|
|
82
|
+
/** Setting sources (--setting-sources) */
|
|
83
|
+
settingSources?: string[];
|
|
84
|
+
/** Continue conversation (--continue) */
|
|
85
|
+
continue?: boolean;
|
|
86
|
+
/** Resume session ID (--resume) */
|
|
87
|
+
resume?: string;
|
|
88
|
+
/** Fork session (--fork-session) */
|
|
89
|
+
forkSession?: boolean;
|
|
90
|
+
/** Dangerously skip permissions (-y) */
|
|
91
|
+
dangerouslySkipPermissions?: boolean;
|
|
92
|
+
/** Include partial messages (--include-partial-messages) */
|
|
93
|
+
includePartialMessages?: boolean;
|
|
94
|
+
/** Extra args (custom flags) */
|
|
95
|
+
extraArgs?: Record<string, string | null>;
|
|
96
|
+
/** Stderr callback */
|
|
97
|
+
stderr?: (data: string) => void;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create a transport that communicates with CLI via spawned process.
|
|
101
|
+
*/
|
|
102
|
+
export declare function createTransport(options?: ProcessTransportOptions): Transport;
|
|
103
|
+
export { ProcessTransport } from './process-transport';
|
|
104
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACR,OAAO,EACP,WAAW,EACX,cAAc,EACd,qBAAqB,EACxB,MAAM,UAAU,CAAC;AAGlB;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,QAAQ,IAAI,cAAc,CAAC,OAAO,GAAG,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAEpE;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAErD;;OAEG;IACH,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,EAAE,qBAAqB,EAC9B,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEhF;;OAEG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjE;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC;IAEnB;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,8CAA8C;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,4DAA4D;IAC5D,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1C,sBAAsB;IACtB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,uBAA4B,GAAG,SAAS,CAEhF;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Transport Layer
|
|
4
|
+
*
|
|
5
|
+
* Abstract interface for communication with CLI.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ProcessTransport = void 0;
|
|
9
|
+
exports.createTransport = createTransport;
|
|
10
|
+
const process_transport_1 = require("./process-transport");
|
|
11
|
+
/**
|
|
12
|
+
* Create a transport that communicates with CLI via spawned process.
|
|
13
|
+
*/
|
|
14
|
+
function createTransport(options = {}) {
|
|
15
|
+
return new process_transport_1.ProcessTransport(options);
|
|
16
|
+
}
|
|
17
|
+
// Re-export ProcessTransport
|
|
18
|
+
var process_transport_2 = require("./process-transport");
|
|
19
|
+
Object.defineProperty(exports, "ProcessTransport", { enumerable: true, get: function () { return process_transport_2.ProcessTransport; } });
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAsHH,0CAEC;AAhHD,2DAAuD;AA2GvD;;GAEG;AACH,SAAgB,eAAe,CAAC,UAAmC,EAAE;IACjE,OAAO,IAAI,oCAAgB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,6BAA6B;AAC7B,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA"}
|