@a3s-lab/code 0.6.0 → 0.7.1
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/index.d.ts +87 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.js +128 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-arm64-musl.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.linux-x64-musl.node +0 -0
- package/package.json +27 -34
- package/LICENSE +0 -21
- package/README.md +0 -764
- package/dist/chat.d.ts +0 -97
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -179
- package/dist/chat.js.map +0 -1
- package/dist/client.d.ts +0 -1356
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -1014
- package/dist/client.js.map +0 -1
- package/dist/config.d.ts +0 -106
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -142
- package/dist/config.js.map +0 -1
- package/dist/generate.d.ts +0 -130
- package/dist/generate.d.ts.map +0 -1
- package/dist/generate.js +0 -283
- package/dist/generate.js.map +0 -1
- package/dist/index.d.ts +0 -54
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -60
- package/dist/index.js.map +0 -1
- package/dist/message.d.ts +0 -157
- package/dist/message.d.ts.map +0 -1
- package/dist/message.js +0 -279
- package/dist/message.js.map +0 -1
- package/dist/openai-compat.d.ts +0 -186
- package/dist/openai-compat.d.ts.map +0 -1
- package/dist/openai-compat.js +0 -263
- package/dist/openai-compat.js.map +0 -1
- package/dist/provider.d.ts +0 -64
- package/dist/provider.d.ts.map +0 -1
- package/dist/provider.js +0 -60
- package/dist/provider.js.map +0 -1
- package/dist/session.d.ts +0 -573
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -1153
- package/dist/session.js.map +0 -1
- package/dist/tool.d.ts +0 -106
- package/dist/tool.d.ts.map +0 -1
- package/dist/tool.js +0 -71
- package/dist/tool.js.map +0 -1
- package/proto/code_agent.proto +0 -1851
package/dist/chat.d.ts
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Chat — Multi-turn Conversation (Convenience Wrapper)
|
|
3
|
-
*
|
|
4
|
-
* A thin wrapper around Session for backward compatibility.
|
|
5
|
-
* For new code, prefer using Session directly:
|
|
6
|
-
*
|
|
7
|
-
* ```typescript
|
|
8
|
-
* const session = await client.createSession({ model: openai('gpt-4o') });
|
|
9
|
-
* const { text } = await session.generateText({ prompt: 'Hello' });
|
|
10
|
-
* const { text: reply } = await session.generateText({ prompt: 'Follow up' });
|
|
11
|
-
* ```
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* import { createChat, createProvider, tool } from '@a3s-lab/code';
|
|
16
|
-
*
|
|
17
|
-
* const openai = createProvider({ name: 'openai', apiKey: 'sk-xxx' });
|
|
18
|
-
*
|
|
19
|
-
* const chat = createChat({
|
|
20
|
-
* model: openai('gpt-4o'),
|
|
21
|
-
* workspace: '/project',
|
|
22
|
-
* system: 'You are a helpful code assistant',
|
|
23
|
-
* });
|
|
24
|
-
*
|
|
25
|
-
* const { text } = await chat.send('Hello');
|
|
26
|
-
* const { textStream } = chat.stream('Follow up');
|
|
27
|
-
* for await (const chunk of textStream) {
|
|
28
|
-
* process.stdout.write(chunk);
|
|
29
|
-
* }
|
|
30
|
-
* await chat.close();
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
import type { A3sClientOptions, ContextUsage } from './client.js';
|
|
34
|
-
import type { ModelRef } from './provider.js';
|
|
35
|
-
import type { ToolSet } from './tool.js';
|
|
36
|
-
import type { MessageInput, StepResult, ToolCallEvent } from './session.js';
|
|
37
|
-
/** Options for creating a chat */
|
|
38
|
-
export interface ChatOptions {
|
|
39
|
-
/** Model reference from createProvider() */
|
|
40
|
-
model: ModelRef;
|
|
41
|
-
/** Working directory for tool sandboxing */
|
|
42
|
-
workspace?: string;
|
|
43
|
-
/** System prompt */
|
|
44
|
-
system?: string;
|
|
45
|
-
/** gRPC server connection options */
|
|
46
|
-
server?: A3sClientOptions;
|
|
47
|
-
/** Client-side tool definitions */
|
|
48
|
-
tools?: ToolSet;
|
|
49
|
-
/** Maximum steps per send/stream call. @default 1 */
|
|
50
|
-
maxSteps?: number;
|
|
51
|
-
/** Called when each step completes */
|
|
52
|
-
onStepFinish?: (step: StepResult) => void | Promise<void>;
|
|
53
|
-
/** Called when the model invokes a tool */
|
|
54
|
-
onToolCall?: (event: ToolCallEvent) => void | unknown | Promise<void | unknown>;
|
|
55
|
-
}
|
|
56
|
-
/** Result from chat.send() */
|
|
57
|
-
export interface ChatSendResult {
|
|
58
|
-
text: string;
|
|
59
|
-
usage?: any;
|
|
60
|
-
finishReason: any;
|
|
61
|
-
toolCalls: any[];
|
|
62
|
-
steps: StepResult[];
|
|
63
|
-
}
|
|
64
|
-
/** Result from chat.stream() */
|
|
65
|
-
export interface ChatStreamResult {
|
|
66
|
-
textStream: AsyncIterable<string>;
|
|
67
|
-
fullStream: AsyncIterable<any>;
|
|
68
|
-
toolStream: AsyncIterable<any>;
|
|
69
|
-
text: Promise<string>;
|
|
70
|
-
steps: Promise<StepResult[]>;
|
|
71
|
-
}
|
|
72
|
-
/** Chat instance for multi-turn conversations */
|
|
73
|
-
export interface Chat {
|
|
74
|
-
/** Send a message and get a complete response */
|
|
75
|
-
send(prompt: string): Promise<ChatSendResult>;
|
|
76
|
-
send(messages: MessageInput[]): Promise<ChatSendResult>;
|
|
77
|
-
/** Send a message and stream the response */
|
|
78
|
-
stream(prompt: string): ChatStreamResult;
|
|
79
|
-
stream(messages: MessageInput[]): ChatStreamResult;
|
|
80
|
-
/** Get context usage for this chat session */
|
|
81
|
-
getUsage(): Promise<ContextUsage | undefined>;
|
|
82
|
-
/** Compact the conversation context */
|
|
83
|
-
compact(): Promise<void>;
|
|
84
|
-
/** Clear conversation history */
|
|
85
|
-
clear(): Promise<void>;
|
|
86
|
-
/** Get the underlying session ID */
|
|
87
|
-
readonly sessionId: string;
|
|
88
|
-
/** Close the chat and clean up resources */
|
|
89
|
-
close(): Promise<void>;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Create a multi-turn chat session (convenience wrapper).
|
|
93
|
-
*
|
|
94
|
-
* For new code, prefer `client.createSession()` directly.
|
|
95
|
-
*/
|
|
96
|
-
export declare function createChat(options: ChatOptions): Chat;
|
|
97
|
-
//# sourceMappingURL=chat.d.ts.map
|
package/dist/chat.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../ts/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,aAAa,EACd,MAAM,cAAc,CAAC;AAMtB,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,KAAK,EAAE,QAAQ,CAAC;IAChB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,2CAA2C;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;CACjF;AAED,8BAA8B;AAC9B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CAC9B;AAED,iDAAiD;AACjD,MAAM,WAAW,IAAI;IACnB,iDAAiD;IACjD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAExD,6CAA6C;IAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACzC,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC;IAEnD,8CAA8C;IAC9C,QAAQ,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IAE9C,uCAAuC;IACvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,iCAAiC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,4CAA4C;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAMD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAuJrD"}
|
package/dist/chat.js
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Chat — Multi-turn Conversation (Convenience Wrapper)
|
|
3
|
-
*
|
|
4
|
-
* A thin wrapper around Session for backward compatibility.
|
|
5
|
-
* For new code, prefer using Session directly:
|
|
6
|
-
*
|
|
7
|
-
* ```typescript
|
|
8
|
-
* const session = await client.createSession({ model: openai('gpt-4o') });
|
|
9
|
-
* const { text } = await session.generateText({ prompt: 'Hello' });
|
|
10
|
-
* const { text: reply } = await session.generateText({ prompt: 'Follow up' });
|
|
11
|
-
* ```
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* import { createChat, createProvider, tool } from '@a3s-lab/code';
|
|
16
|
-
*
|
|
17
|
-
* const openai = createProvider({ name: 'openai', apiKey: 'sk-xxx' });
|
|
18
|
-
*
|
|
19
|
-
* const chat = createChat({
|
|
20
|
-
* model: openai('gpt-4o'),
|
|
21
|
-
* workspace: '/project',
|
|
22
|
-
* system: 'You are a helpful code assistant',
|
|
23
|
-
* });
|
|
24
|
-
*
|
|
25
|
-
* const { text } = await chat.send('Hello');
|
|
26
|
-
* const { textStream } = chat.stream('Follow up');
|
|
27
|
-
* for await (const chunk of textStream) {
|
|
28
|
-
* process.stdout.write(chunk);
|
|
29
|
-
* }
|
|
30
|
-
* await chat.close();
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
import { A3sClient } from './client.js';
|
|
34
|
-
// ============================================================================
|
|
35
|
-
// Implementation
|
|
36
|
-
// ============================================================================
|
|
37
|
-
/**
|
|
38
|
-
* Create a multi-turn chat session (convenience wrapper).
|
|
39
|
-
*
|
|
40
|
-
* For new code, prefer `client.createSession()` directly.
|
|
41
|
-
*/
|
|
42
|
-
export function createChat(options) {
|
|
43
|
-
const client = new A3sClient(options.server);
|
|
44
|
-
let session = null;
|
|
45
|
-
let initPromise = null;
|
|
46
|
-
async function ensureSession() {
|
|
47
|
-
if (session)
|
|
48
|
-
return session;
|
|
49
|
-
if (!initPromise) {
|
|
50
|
-
initPromise = (async () => {
|
|
51
|
-
session = await client.createSession({
|
|
52
|
-
model: options.model,
|
|
53
|
-
workspace: options.workspace,
|
|
54
|
-
system: options.system,
|
|
55
|
-
});
|
|
56
|
-
})();
|
|
57
|
-
}
|
|
58
|
-
await initPromise;
|
|
59
|
-
return session;
|
|
60
|
-
}
|
|
61
|
-
function toMessages(input) {
|
|
62
|
-
if (typeof input === 'string') {
|
|
63
|
-
return [{ role: 'user', content: input }];
|
|
64
|
-
}
|
|
65
|
-
return input;
|
|
66
|
-
}
|
|
67
|
-
const chat = {
|
|
68
|
-
get sessionId() {
|
|
69
|
-
return session?.id ?? '';
|
|
70
|
-
},
|
|
71
|
-
async send(input) {
|
|
72
|
-
const s = await ensureSession();
|
|
73
|
-
return s.generateText({
|
|
74
|
-
messages: toMessages(input),
|
|
75
|
-
tools: options.tools,
|
|
76
|
-
maxSteps: options.maxSteps,
|
|
77
|
-
onStepFinish: options.onStepFinish,
|
|
78
|
-
onToolCall: options.onToolCall,
|
|
79
|
-
});
|
|
80
|
-
},
|
|
81
|
-
stream(input) {
|
|
82
|
-
// We need the session to exist before streaming
|
|
83
|
-
// Use a deferred pattern to handle the async init
|
|
84
|
-
let resolveText;
|
|
85
|
-
let rejectAll;
|
|
86
|
-
let resolveSteps;
|
|
87
|
-
const textPromise = new Promise((res, rej) => {
|
|
88
|
-
resolveText = res;
|
|
89
|
-
rejectAll = rej;
|
|
90
|
-
});
|
|
91
|
-
const stepsPromise = new Promise((res) => {
|
|
92
|
-
resolveSteps = res;
|
|
93
|
-
});
|
|
94
|
-
const chunks = [];
|
|
95
|
-
let done = false;
|
|
96
|
-
const waiters = [];
|
|
97
|
-
function notify() {
|
|
98
|
-
for (const w of waiters.splice(0))
|
|
99
|
-
w();
|
|
100
|
-
}
|
|
101
|
-
const produce = (async () => {
|
|
102
|
-
try {
|
|
103
|
-
const s = await ensureSession();
|
|
104
|
-
const result = s.streamText({
|
|
105
|
-
messages: toMessages(input),
|
|
106
|
-
tools: options.tools,
|
|
107
|
-
maxSteps: options.maxSteps,
|
|
108
|
-
onStepFinish: options.onStepFinish,
|
|
109
|
-
onToolCall: options.onToolCall,
|
|
110
|
-
});
|
|
111
|
-
for await (const chunk of result.fullStream) {
|
|
112
|
-
chunks.push(chunk);
|
|
113
|
-
notify();
|
|
114
|
-
}
|
|
115
|
-
resolveText(await result.text);
|
|
116
|
-
resolveSteps(await result.steps);
|
|
117
|
-
}
|
|
118
|
-
catch (err) {
|
|
119
|
-
rejectAll(err);
|
|
120
|
-
}
|
|
121
|
-
finally {
|
|
122
|
-
done = true;
|
|
123
|
-
notify();
|
|
124
|
-
}
|
|
125
|
-
})();
|
|
126
|
-
produce.catch(() => { });
|
|
127
|
-
function iterate(transform) {
|
|
128
|
-
return {
|
|
129
|
-
[Symbol.asyncIterator]() {
|
|
130
|
-
let i = 0;
|
|
131
|
-
return {
|
|
132
|
-
async next() {
|
|
133
|
-
while (true) {
|
|
134
|
-
if (i < chunks.length) {
|
|
135
|
-
const v = transform(chunks[i++]);
|
|
136
|
-
if (v !== null)
|
|
137
|
-
return { value: v, done: false };
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
if (done) {
|
|
141
|
-
return { value: undefined, done: true };
|
|
142
|
-
}
|
|
143
|
-
await new Promise((r) => waiters.push(r));
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
};
|
|
147
|
-
},
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
return {
|
|
151
|
-
textStream: iterate((c) => (c.content ? c.content : null)),
|
|
152
|
-
fullStream: iterate((c) => c),
|
|
153
|
-
toolStream: iterate((c) => (c.toolCall ? c.toolCall : null)),
|
|
154
|
-
text: textPromise,
|
|
155
|
-
steps: stepsPromise,
|
|
156
|
-
};
|
|
157
|
-
},
|
|
158
|
-
async getUsage() {
|
|
159
|
-
const s = await ensureSession();
|
|
160
|
-
return s.getContextUsage();
|
|
161
|
-
},
|
|
162
|
-
async compact() {
|
|
163
|
-
const s = await ensureSession();
|
|
164
|
-
await s.compactContext();
|
|
165
|
-
},
|
|
166
|
-
async clear() {
|
|
167
|
-
const s = await ensureSession();
|
|
168
|
-
await s.clearContext();
|
|
169
|
-
},
|
|
170
|
-
async close() {
|
|
171
|
-
if (session) {
|
|
172
|
-
await session.close();
|
|
173
|
-
}
|
|
174
|
-
client.close();
|
|
175
|
-
},
|
|
176
|
-
};
|
|
177
|
-
return chat;
|
|
178
|
-
}
|
|
179
|
-
//# sourceMappingURL=chat.js.map
|
package/dist/chat.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../ts/chat.ts"],"names":[],"mappings":"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"}
|