@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.
Files changed (84) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/LICENSE +201 -0
  3. package/README.md +160 -0
  4. package/dist/client.d.ts +94 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +296 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/errors.d.ts +40 -0
  9. package/dist/errors.d.ts.map +1 -0
  10. package/dist/errors.js +143 -0
  11. package/dist/errors.js.map +1 -0
  12. package/dist/generated/tools.d.ts +39 -0
  13. package/dist/generated/tools.d.ts.map +1 -0
  14. package/dist/generated/tools.js +44 -0
  15. package/dist/generated/tools.js.map +1 -0
  16. package/dist/generated/types.d.ts +341 -0
  17. package/dist/generated/types.d.ts.map +1 -0
  18. package/dist/generated/types.js +7 -0
  19. package/dist/generated/types.js.map +1 -0
  20. package/dist/index.browser.d.ts +3 -0
  21. package/dist/index.browser.d.ts.map +1 -0
  22. package/dist/index.browser.js +6 -0
  23. package/dist/index.browser.js.map +1 -0
  24. package/dist/index.d.ts +30 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +25 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/orchestrator.d.ts +61 -0
  29. package/dist/orchestrator.d.ts.map +1 -0
  30. package/dist/orchestrator.js +159 -0
  31. package/dist/orchestrator.js.map +1 -0
  32. package/dist/resources/agents.d.ts +67 -0
  33. package/dist/resources/agents.d.ts.map +1 -0
  34. package/dist/resources/agents.js +75 -0
  35. package/dist/resources/agents.js.map +1 -0
  36. package/dist/resources/approvals.d.ts +33 -0
  37. package/dist/resources/approvals.d.ts.map +1 -0
  38. package/dist/resources/approvals.js +33 -0
  39. package/dist/resources/approvals.js.map +1 -0
  40. package/dist/resources/artifacts.d.ts +36 -0
  41. package/dist/resources/artifacts.d.ts.map +1 -0
  42. package/dist/resources/artifacts.js +70 -0
  43. package/dist/resources/artifacts.js.map +1 -0
  44. package/dist/resources/model-routes.d.ts +70 -0
  45. package/dist/resources/model-routes.d.ts.map +1 -0
  46. package/dist/resources/model-routes.js +74 -0
  47. package/dist/resources/model-routes.js.map +1 -0
  48. package/dist/resources/reads.d.ts +49 -0
  49. package/dist/resources/reads.d.ts.map +1 -0
  50. package/dist/resources/reads.js +91 -0
  51. package/dist/resources/reads.js.map +1 -0
  52. package/dist/resources/responses.d.ts +70 -0
  53. package/dist/resources/responses.d.ts.map +1 -0
  54. package/dist/resources/responses.js +147 -0
  55. package/dist/resources/responses.js.map +1 -0
  56. package/dist/resources/secret-refs.d.ts +24 -0
  57. package/dist/resources/secret-refs.d.ts.map +1 -0
  58. package/dist/resources/secret-refs.js +33 -0
  59. package/dist/resources/secret-refs.js.map +1 -0
  60. package/dist/resources/sessions.d.ts +106 -0
  61. package/dist/resources/sessions.d.ts.map +1 -0
  62. package/dist/resources/sessions.js +161 -0
  63. package/dist/resources/sessions.js.map +1 -0
  64. package/dist/resources/shared.d.ts +31 -0
  65. package/dist/resources/shared.d.ts.map +1 -0
  66. package/dist/resources/shared.js +32 -0
  67. package/dist/resources/shared.js.map +1 -0
  68. package/dist/resources/skills.d.ts +40 -0
  69. package/dist/resources/skills.d.ts.map +1 -0
  70. package/dist/resources/skills.js +40 -0
  71. package/dist/resources/skills.js.map +1 -0
  72. package/dist/schema.d.ts +35 -0
  73. package/dist/schema.d.ts.map +1 -0
  74. package/dist/schema.js +30 -0
  75. package/dist/schema.js.map +1 -0
  76. package/dist/server-only.d.ts +2 -0
  77. package/dist/server-only.d.ts.map +1 -0
  78. package/dist/server-only.js +22 -0
  79. package/dist/server-only.js.map +1 -0
  80. package/dist/stream.d.ts +38 -0
  81. package/dist/stream.d.ts.map +1 -0
  82. package/dist/stream.js +314 -0
  83. package/dist/stream.js.map +1 -0
  84. 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
+ }