@a3s-lab/code 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/index.d.ts +87 -0
  2. package/index.darwin-arm64.node +0 -0
  3. package/index.darwin-x64.node +0 -0
  4. package/index.js +128 -0
  5. package/index.linux-arm64-gnu.node +0 -0
  6. package/index.linux-arm64-musl.node +0 -0
  7. package/index.linux-x64-gnu.node +0 -0
  8. package/index.linux-x64-musl.node +0 -0
  9. package/package.json +27 -34
  10. package/LICENSE +0 -21
  11. package/README.md +0 -764
  12. package/dist/chat.d.ts +0 -97
  13. package/dist/chat.d.ts.map +0 -1
  14. package/dist/chat.js +0 -179
  15. package/dist/chat.js.map +0 -1
  16. package/dist/client.d.ts +0 -1356
  17. package/dist/client.d.ts.map +0 -1
  18. package/dist/client.js +0 -1014
  19. package/dist/client.js.map +0 -1
  20. package/dist/config.d.ts +0 -106
  21. package/dist/config.d.ts.map +0 -1
  22. package/dist/config.js +0 -142
  23. package/dist/config.js.map +0 -1
  24. package/dist/generate.d.ts +0 -130
  25. package/dist/generate.d.ts.map +0 -1
  26. package/dist/generate.js +0 -283
  27. package/dist/generate.js.map +0 -1
  28. package/dist/index.d.ts +0 -54
  29. package/dist/index.d.ts.map +0 -1
  30. package/dist/index.js +0 -60
  31. package/dist/index.js.map +0 -1
  32. package/dist/message.d.ts +0 -157
  33. package/dist/message.d.ts.map +0 -1
  34. package/dist/message.js +0 -279
  35. package/dist/message.js.map +0 -1
  36. package/dist/openai-compat.d.ts +0 -186
  37. package/dist/openai-compat.d.ts.map +0 -1
  38. package/dist/openai-compat.js +0 -263
  39. package/dist/openai-compat.js.map +0 -1
  40. package/dist/provider.d.ts +0 -64
  41. package/dist/provider.d.ts.map +0 -1
  42. package/dist/provider.js +0 -60
  43. package/dist/provider.js.map +0 -1
  44. package/dist/session.d.ts +0 -573
  45. package/dist/session.d.ts.map +0 -1
  46. package/dist/session.js +0 -1153
  47. package/dist/session.js.map +0 -1
  48. package/dist/tool.d.ts +0 -106
  49. package/dist/tool.d.ts.map +0 -1
  50. package/dist/tool.js +0 -71
  51. package/dist/tool.js.map +0 -1
  52. package/proto/code_agent.proto +0 -1754
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
@@ -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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"}