@palai/sdk 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/CHANGELOG.md +65 -0
- package/LICENSE +201 -0
- package/README.md +160 -0
- package/dist/client.d.ts +94 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +296 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +40 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +143 -0
- package/dist/errors.js.map +1 -0
- package/dist/generated/tools.d.ts +39 -0
- package/dist/generated/tools.d.ts.map +1 -0
- package/dist/generated/tools.js +44 -0
- package/dist/generated/tools.js.map +1 -0
- package/dist/generated/types.d.ts +341 -0
- package/dist/generated/types.d.ts.map +1 -0
- package/dist/generated/types.js +7 -0
- package/dist/generated/types.js.map +1 -0
- package/dist/index.browser.d.ts +3 -0
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.browser.js +6 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator.d.ts +61 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +159 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/resources/agents.d.ts +67 -0
- package/dist/resources/agents.d.ts.map +1 -0
- package/dist/resources/agents.js +75 -0
- package/dist/resources/agents.js.map +1 -0
- package/dist/resources/approvals.d.ts +33 -0
- package/dist/resources/approvals.d.ts.map +1 -0
- package/dist/resources/approvals.js +33 -0
- package/dist/resources/approvals.js.map +1 -0
- package/dist/resources/artifacts.d.ts +36 -0
- package/dist/resources/artifacts.d.ts.map +1 -0
- package/dist/resources/artifacts.js +70 -0
- package/dist/resources/artifacts.js.map +1 -0
- package/dist/resources/model-routes.d.ts +70 -0
- package/dist/resources/model-routes.d.ts.map +1 -0
- package/dist/resources/model-routes.js +74 -0
- package/dist/resources/model-routes.js.map +1 -0
- package/dist/resources/reads.d.ts +49 -0
- package/dist/resources/reads.d.ts.map +1 -0
- package/dist/resources/reads.js +91 -0
- package/dist/resources/reads.js.map +1 -0
- package/dist/resources/responses.d.ts +70 -0
- package/dist/resources/responses.d.ts.map +1 -0
- package/dist/resources/responses.js +147 -0
- package/dist/resources/responses.js.map +1 -0
- package/dist/resources/secret-refs.d.ts +24 -0
- package/dist/resources/secret-refs.d.ts.map +1 -0
- package/dist/resources/secret-refs.js +33 -0
- package/dist/resources/secret-refs.js.map +1 -0
- package/dist/resources/sessions.d.ts +106 -0
- package/dist/resources/sessions.d.ts.map +1 -0
- package/dist/resources/sessions.js +161 -0
- package/dist/resources/sessions.js.map +1 -0
- package/dist/resources/shared.d.ts +31 -0
- package/dist/resources/shared.d.ts.map +1 -0
- package/dist/resources/shared.js +32 -0
- package/dist/resources/shared.js.map +1 -0
- package/dist/resources/skills.d.ts +40 -0
- package/dist/resources/skills.d.ts.map +1 -0
- package/dist/resources/skills.js +40 -0
- package/dist/resources/skills.js.map +1 -0
- package/dist/schema.d.ts +35 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +30 -0
- package/dist/schema.js.map +1 -0
- package/dist/server-only.d.ts +2 -0
- package/dist/server-only.d.ts.map +1 -0
- package/dist/server-only.js +22 -0
- package/dist/server-only.js.map +1 -0
- package/dist/stream.d.ts +38 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +314 -0
- package/dist/stream.js.map +1 -0
- package/package.json +44 -0
package/dist/stream.js
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { errorForResponse, PalaiConnectionError } from "./errors.js";
|
|
2
|
+
// parseEventStream frames a byte stream into SSE frames. It decodes incrementally
|
|
3
|
+
// (TextDecoder stream mode preserves a multi-byte character split across chunks), buffers
|
|
4
|
+
// a partial trailing line across reads, joins multi-line `data:` fields with newlines, and
|
|
5
|
+
// ignores comment lines (a leading colon), which the server uses for keep-alive. It never
|
|
6
|
+
// buffers the whole response — one frame is produced per blank-line dispatch.
|
|
7
|
+
export async function* parseEventStream(body) {
|
|
8
|
+
const reader = body.getReader();
|
|
9
|
+
const decoder = new TextDecoder();
|
|
10
|
+
let buffer = "";
|
|
11
|
+
let frame = newFrame();
|
|
12
|
+
try {
|
|
13
|
+
for (;;) {
|
|
14
|
+
const { done, value } = await reader.read();
|
|
15
|
+
if (done) {
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
buffer += decoder.decode(value, { stream: true });
|
|
19
|
+
let newline;
|
|
20
|
+
while ((newline = buffer.indexOf("\n")) !== -1) {
|
|
21
|
+
// Tolerate CRLF as well as LF line endings.
|
|
22
|
+
let line = buffer.slice(0, newline);
|
|
23
|
+
if (line.endsWith("\r")) {
|
|
24
|
+
line = line.slice(0, -1);
|
|
25
|
+
}
|
|
26
|
+
buffer = buffer.slice(newline + 1);
|
|
27
|
+
if (line === "") {
|
|
28
|
+
if (frame.data !== "" || frame.event !== undefined || frame.id !== undefined) {
|
|
29
|
+
yield frame;
|
|
30
|
+
}
|
|
31
|
+
frame = newFrame();
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
applyField(frame, line);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
// Releasing the reader lets the caller cancel the body to close the socket.
|
|
40
|
+
reader.releaseLock();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function newFrame() {
|
|
44
|
+
return { id: undefined, event: undefined, data: "" };
|
|
45
|
+
}
|
|
46
|
+
// applyField parses one SSE line into the current frame. A leading colon is a comment; a
|
|
47
|
+
// field is `name` or `name:value` with one optional space stripped after the colon.
|
|
48
|
+
function applyField(frame, line) {
|
|
49
|
+
if (line.startsWith(":")) {
|
|
50
|
+
return; // comment / heartbeat
|
|
51
|
+
}
|
|
52
|
+
const colon = line.indexOf(":");
|
|
53
|
+
const field = colon === -1 ? line : line.slice(0, colon);
|
|
54
|
+
let value = colon === -1 ? "" : line.slice(colon + 1);
|
|
55
|
+
if (value.startsWith(" ")) {
|
|
56
|
+
value = value.slice(1);
|
|
57
|
+
}
|
|
58
|
+
switch (field) {
|
|
59
|
+
case "id":
|
|
60
|
+
frame.id = value;
|
|
61
|
+
break;
|
|
62
|
+
case "event":
|
|
63
|
+
frame.event = value;
|
|
64
|
+
break;
|
|
65
|
+
case "data":
|
|
66
|
+
frame.data = frame.data === "" ? value : `${frame.data}\n${value}`;
|
|
67
|
+
break;
|
|
68
|
+
default:
|
|
69
|
+
// retry: and unknown fields are not used by this consumer.
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const TERMINAL_EVENT = /^(run|response)\.(completed|failed|canceled|timed_out|budget_exceeded)\.v[0-9]+$/;
|
|
74
|
+
// isTerminalEvent reports whether an event closes the run, so the stream stops rather than
|
|
75
|
+
// reconnecting when the server closes a completed stream (spec §22.3, §24.4).
|
|
76
|
+
export function isTerminalEvent(event) {
|
|
77
|
+
return TERMINAL_EVENT.test(event.type);
|
|
78
|
+
}
|
|
79
|
+
// ResponseStream is a resumable, typed consumer of a run's event stream. Iterating it
|
|
80
|
+
// yields each canonical Event (unknown event types are delivered, not dropped: API-009).
|
|
81
|
+
// A transport drop before a terminal event reconnects from the last seen id via
|
|
82
|
+
// Last-Event-ID with full-jitter backoff; a terminal event or an explicit cancel stops
|
|
83
|
+
// without reconnecting. Breaking out of the iteration closes the transport.
|
|
84
|
+
export class ResponseStream {
|
|
85
|
+
#transport;
|
|
86
|
+
#start;
|
|
87
|
+
#started;
|
|
88
|
+
#startPromise;
|
|
89
|
+
#signal;
|
|
90
|
+
#lastEventId;
|
|
91
|
+
#maxReconnects;
|
|
92
|
+
#backoffBaseMs;
|
|
93
|
+
#backoffMaxMs;
|
|
94
|
+
#iterator;
|
|
95
|
+
constructor(init) {
|
|
96
|
+
this.#transport = init.transport;
|
|
97
|
+
this.#start = init.start;
|
|
98
|
+
this.#signal = init.signal;
|
|
99
|
+
this.#lastEventId = init.lastEventId ?? null;
|
|
100
|
+
this.#maxReconnects = init.maxReconnects ?? 5;
|
|
101
|
+
this.#backoffBaseMs = init.backoffBaseMs ?? 100;
|
|
102
|
+
this.#backoffMaxMs = init.backoffMaxMs ?? 5_000;
|
|
103
|
+
}
|
|
104
|
+
// responseID / sessionID resolve once the stream has started (its create has returned);
|
|
105
|
+
// they are undefined before first consumption.
|
|
106
|
+
get responseID() {
|
|
107
|
+
return this.#started?.responseID;
|
|
108
|
+
}
|
|
109
|
+
get sessionID() {
|
|
110
|
+
return this.#started?.sessionID;
|
|
111
|
+
}
|
|
112
|
+
// lastEventId exposes the reconnection cursor reached so far (the id of the last event
|
|
113
|
+
// delivered), so a caller can persist it and resume a new stream later.
|
|
114
|
+
get lastEventId() {
|
|
115
|
+
return this.#lastEventId;
|
|
116
|
+
}
|
|
117
|
+
#ensureStarted() {
|
|
118
|
+
if (this.#startPromise === undefined) {
|
|
119
|
+
this.#startPromise = this.#start().then((started) => (this.#started = started));
|
|
120
|
+
}
|
|
121
|
+
return this.#startPromise;
|
|
122
|
+
}
|
|
123
|
+
[Symbol.asyncIterator]() {
|
|
124
|
+
if (this.#iterator !== undefined) {
|
|
125
|
+
throw new PalaiConnectionError("this response stream has already been consumed");
|
|
126
|
+
}
|
|
127
|
+
this.#iterator = this.#run();
|
|
128
|
+
return this.#iterator;
|
|
129
|
+
}
|
|
130
|
+
// finalResponse drains the stream to its terminal event, then returns the canonical
|
|
131
|
+
// terminal Response (status, model, output, usage, and — on failure — the problem-shaped
|
|
132
|
+
// error). It shares the single underlying iteration, so it must not be combined with a
|
|
133
|
+
// separate manual iteration of the same stream.
|
|
134
|
+
async finalResponse() {
|
|
135
|
+
const iterator = this[Symbol.asyncIterator]();
|
|
136
|
+
for (;;) {
|
|
137
|
+
const next = await iterator.next();
|
|
138
|
+
if (next.done) {
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
if (isTerminalEvent(next.value)) {
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
await iterator.return?.(undefined);
|
|
146
|
+
const { responseID } = await this.#ensureStarted();
|
|
147
|
+
return this.#transport.retrieveResponse(responseID);
|
|
148
|
+
}
|
|
149
|
+
async *#run() {
|
|
150
|
+
let start;
|
|
151
|
+
try {
|
|
152
|
+
start = await this.#ensureStarted();
|
|
153
|
+
}
|
|
154
|
+
catch (cause) {
|
|
155
|
+
if (isAbort(cause, this.#signal)) {
|
|
156
|
+
return; // the create was canceled before the stream opened
|
|
157
|
+
}
|
|
158
|
+
throw cause; // a create failure surfaces to the consumer
|
|
159
|
+
}
|
|
160
|
+
let reconnects = 0;
|
|
161
|
+
for (;;) {
|
|
162
|
+
// Capture the cursor this connection resumes from, so a server that redelivers the
|
|
163
|
+
// boundary event inclusively does not double-deliver it to the consumer.
|
|
164
|
+
const resumedFrom = this.#lastEventId;
|
|
165
|
+
let response;
|
|
166
|
+
try {
|
|
167
|
+
response = await this.#transport.openEventStream(start.sessionID, resumedFrom, this.#signal);
|
|
168
|
+
}
|
|
169
|
+
catch (cause) {
|
|
170
|
+
if (isAbort(cause, this.#signal)) {
|
|
171
|
+
return; // explicit cancel: stop, do not reconnect
|
|
172
|
+
}
|
|
173
|
+
if (reconnects >= this.#maxReconnects) {
|
|
174
|
+
throw new PalaiConnectionError("event stream could not be (re)opened", { cause });
|
|
175
|
+
}
|
|
176
|
+
if (!(await this.#backoffSleep(reconnects))) {
|
|
177
|
+
return; // canceled mid-backoff: end quietly, like every other cancel path
|
|
178
|
+
}
|
|
179
|
+
reconnects += 1;
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (!response.ok) {
|
|
183
|
+
// A status error (404 unknown session, 410 gone) is terminal, not a drop.
|
|
184
|
+
const body = await safeText(response);
|
|
185
|
+
throw errorForResponse(response.status, body, response.headers.get("Request-Id") ?? undefined);
|
|
186
|
+
}
|
|
187
|
+
if (response.body === null) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const frames = parseEventStream(response.body);
|
|
191
|
+
// On a resume, drop a single redelivered boundary event whose id equals the cursor.
|
|
192
|
+
let dedupePending = resumedFrom !== null;
|
|
193
|
+
try {
|
|
194
|
+
for await (const frame of frames) {
|
|
195
|
+
if (frame.id !== undefined) {
|
|
196
|
+
this.#lastEventId = frame.id;
|
|
197
|
+
}
|
|
198
|
+
if (frame.data === "") {
|
|
199
|
+
continue; // keep-alive with no payload
|
|
200
|
+
}
|
|
201
|
+
const event = decodeEvent(frame.data);
|
|
202
|
+
if (event === null) {
|
|
203
|
+
continue; // a non-JSON data line is not a canonical event
|
|
204
|
+
}
|
|
205
|
+
if (dedupePending) {
|
|
206
|
+
dedupePending = false;
|
|
207
|
+
if (frame.id !== undefined && frame.id === resumedFrom) {
|
|
208
|
+
continue; // duplicate of the resume boundary
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
yield event;
|
|
212
|
+
if (isTerminalEvent(event)) {
|
|
213
|
+
return; // terminal reached: stop, do not reconnect
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (cause) {
|
|
218
|
+
if (isAbort(cause, this.#signal)) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
// fall through to reconnect below
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
// Close the body — and thus the socket — whenever this connection is left: on a
|
|
225
|
+
// terminal, an abort, or the consumer breaking out of the iteration (iterator
|
|
226
|
+
// close closes the transport). It is a no-op when the server already ended it.
|
|
227
|
+
await frames.return(undefined);
|
|
228
|
+
await response.body?.cancel().catch(() => { });
|
|
229
|
+
}
|
|
230
|
+
if (this.#signal?.aborted) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
// The stream ended without a terminal event: an unexpected drop. Reconnect from the
|
|
234
|
+
// last seen id, bounded, with backoff.
|
|
235
|
+
if (reconnects >= this.#maxReconnects) {
|
|
236
|
+
throw new PalaiConnectionError("event stream dropped before a terminal event and exhausted reconnects");
|
|
237
|
+
}
|
|
238
|
+
if (!(await this.#backoffSleep(reconnects))) {
|
|
239
|
+
return; // canceled mid-backoff: end quietly, like every other cancel path
|
|
240
|
+
}
|
|
241
|
+
reconnects += 1;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// #backoffSleep waits out one reconnect backoff, cancelably. It returns true when the
|
|
245
|
+
// sleep completes, or false if the caller aborts mid-sleep — so #run ends the stream
|
|
246
|
+
// quietly instead of leaking the abort's DOMException, matching every other cancel path.
|
|
247
|
+
async #backoffSleep(reconnects) {
|
|
248
|
+
try {
|
|
249
|
+
await delay(fullJitterBackoff(reconnects, this.#backoffBaseMs, this.#backoffMaxMs), this.#signal);
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
catch (cause) {
|
|
253
|
+
if (isAbort(cause, this.#signal)) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
throw cause;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function decodeEvent(data) {
|
|
261
|
+
try {
|
|
262
|
+
const parsed = JSON.parse(data);
|
|
263
|
+
if (typeof parsed === "object" && parsed !== null && typeof parsed.type === "string") {
|
|
264
|
+
return parsed;
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
async function safeText(response) {
|
|
273
|
+
try {
|
|
274
|
+
return await response.text();
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return "";
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// isAbort reports whether an error is the caller's explicit cancellation, so the stream
|
|
281
|
+
// stops silently rather than surfacing an error or reconnecting.
|
|
282
|
+
function isAbort(cause, signal) {
|
|
283
|
+
if (signal?.aborted) {
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
return cause instanceof Error && cause.name === "AbortError";
|
|
287
|
+
}
|
|
288
|
+
// --- Shared backoff, used by both stream reconnect and the client's request retry. ---
|
|
289
|
+
// fullJitterBackoff returns a delay in [0, min(maxMs, baseMs * 2^attempt)] — the AWS
|
|
290
|
+
// "full jitter" schedule, which spreads retries so many clients do not synchronize their
|
|
291
|
+
// reconnect storms (§23.7). attempt is 0-based.
|
|
292
|
+
export function fullJitterBackoff(attempt, baseMs, maxMs) {
|
|
293
|
+
if (baseMs <= 0 || attempt < 0) {
|
|
294
|
+
return 0;
|
|
295
|
+
}
|
|
296
|
+
const ceiling = Math.min(maxMs, baseMs * 2 ** attempt);
|
|
297
|
+
return Math.random() * ceiling;
|
|
298
|
+
}
|
|
299
|
+
// delay resolves after ms, or rejects with the signal's reason if it aborts first, so a
|
|
300
|
+
// backoff sleep is itself cancelable.
|
|
301
|
+
export function delay(ms, signal) {
|
|
302
|
+
return new Promise((resolve, reject) => {
|
|
303
|
+
if (signal?.aborted) {
|
|
304
|
+
reject(signal.reason);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const timer = setTimeout(resolve, ms);
|
|
308
|
+
signal?.addEventListener("abort", () => {
|
|
309
|
+
clearTimeout(timer);
|
|
310
|
+
reject(signal.reason);
|
|
311
|
+
}, { once: true });
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@palai/sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "TypeScript client for the Palai API: responses, sessions, agents, approvals, artifacts and streaming.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=22"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"CHANGELOG.md"
|
|
15
|
+
],
|
|
16
|
+
"main": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"browser": {
|
|
21
|
+
"types": "./dist/index.browser.d.ts",
|
|
22
|
+
"default": "./dist/index.browser.js"
|
|
23
|
+
},
|
|
24
|
+
"default": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"default": "./dist/index.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"./browser": {
|
|
30
|
+
"types": "./dist/index.browser.d.ts",
|
|
31
|
+
"default": "./dist/index.browser.js"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/node": "26.1.1",
|
|
36
|
+
"typescript": "7.0.2"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "rm -rf dist && tsc --project tsconfig.build.json",
|
|
40
|
+
"test": "node --test --experimental-strip-types test/*.test.ts",
|
|
41
|
+
"typecheck": "tsc --project tsconfig.json",
|
|
42
|
+
"generate:tools": "node scripts/generate-tools.mjs"
|
|
43
|
+
}
|
|
44
|
+
}
|