@darqlabs/curator-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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -0
  3. package/dist/cjs/client.d.ts +174 -0
  4. package/dist/cjs/client.d.ts.map +1 -0
  5. package/dist/cjs/client.js +417 -0
  6. package/dist/cjs/client.js.map +1 -0
  7. package/dist/cjs/errors.d.ts +91 -0
  8. package/dist/cjs/errors.d.ts.map +1 -0
  9. package/dist/cjs/errors.js +131 -0
  10. package/dist/cjs/errors.js.map +1 -0
  11. package/dist/cjs/files.d.ts +66 -0
  12. package/dist/cjs/files.d.ts.map +1 -0
  13. package/dist/cjs/files.js +86 -0
  14. package/dist/cjs/files.js.map +1 -0
  15. package/dist/cjs/http.d.ts +92 -0
  16. package/dist/cjs/http.d.ts.map +1 -0
  17. package/dist/cjs/http.js +232 -0
  18. package/dist/cjs/http.js.map +1 -0
  19. package/dist/cjs/index.d.ts +10 -0
  20. package/dist/cjs/index.d.ts.map +1 -0
  21. package/dist/cjs/index.js +22 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/sse.d.ts +20 -0
  24. package/dist/cjs/sse.d.ts.map +1 -0
  25. package/dist/cjs/sse.js +89 -0
  26. package/dist/cjs/sse.js.map +1 -0
  27. package/dist/cjs/streamEventParse.d.ts +13 -0
  28. package/dist/cjs/streamEventParse.d.ts.map +1 -0
  29. package/dist/cjs/streamEventParse.js +81 -0
  30. package/dist/cjs/streamEventParse.js.map +1 -0
  31. package/dist/cjs/streamEvents.d.ts +58 -0
  32. package/dist/cjs/streamEvents.d.ts.map +1 -0
  33. package/dist/cjs/streamEvents.js +22 -0
  34. package/dist/cjs/streamEvents.js.map +1 -0
  35. package/dist/cjs/types.d.ts +93 -0
  36. package/dist/cjs/types.d.ts.map +1 -0
  37. package/dist/cjs/types.js +10 -0
  38. package/dist/cjs/types.js.map +1 -0
  39. package/dist/esm/client.d.ts +174 -0
  40. package/dist/esm/client.d.ts.map +1 -0
  41. package/dist/esm/client.js +411 -0
  42. package/dist/esm/client.js.map +1 -0
  43. package/dist/esm/errors.d.ts +91 -0
  44. package/dist/esm/errors.d.ts.map +1 -0
  45. package/dist/esm/errors.js +119 -0
  46. package/dist/esm/errors.js.map +1 -0
  47. package/dist/esm/files.d.ts +66 -0
  48. package/dist/esm/files.d.ts.map +1 -0
  49. package/dist/esm/files.js +82 -0
  50. package/dist/esm/files.js.map +1 -0
  51. package/dist/esm/http.d.ts +92 -0
  52. package/dist/esm/http.d.ts.map +1 -0
  53. package/dist/esm/http.js +228 -0
  54. package/dist/esm/http.js.map +1 -0
  55. package/dist/esm/index.d.ts +10 -0
  56. package/dist/esm/index.d.ts.map +1 -0
  57. package/dist/esm/index.js +5 -0
  58. package/dist/esm/index.js.map +1 -0
  59. package/dist/esm/package.json +3 -0
  60. package/dist/esm/sse.d.ts +20 -0
  61. package/dist/esm/sse.d.ts.map +1 -0
  62. package/dist/esm/sse.js +86 -0
  63. package/dist/esm/sse.js.map +1 -0
  64. package/dist/esm/streamEventParse.d.ts +13 -0
  65. package/dist/esm/streamEventParse.d.ts.map +1 -0
  66. package/dist/esm/streamEventParse.js +78 -0
  67. package/dist/esm/streamEventParse.js.map +1 -0
  68. package/dist/esm/streamEvents.d.ts +58 -0
  69. package/dist/esm/streamEvents.d.ts.map +1 -0
  70. package/dist/esm/streamEvents.js +19 -0
  71. package/dist/esm/streamEvents.js.map +1 -0
  72. package/dist/esm/types.d.ts +93 -0
  73. package/dist/esm/types.d.ts.map +1 -0
  74. package/dist/esm/types.js +9 -0
  75. package/dist/esm/types.js.map +1 -0
  76. package/package.json +48 -0
@@ -0,0 +1,417 @@
1
+ "use strict";
2
+ /**
3
+ * Public surface of the Curator SDK.
4
+ *
5
+ * const curator = new Curator({ apiKey, project, environment })
6
+ * const reply = await curator.agent("support-bot").run("hello")
7
+ *
8
+ * const chat = curator.agent("support-bot").chat()
9
+ * const r1 = await chat.send("first")
10
+ * const r2 = await chat.send("follow up")
11
+ *
12
+ * const chat = curator.agent("support-bot").conversation("conv_xxx")
13
+ * const r = await chat.send("continuing later")
14
+ *
15
+ * Both helpers route through `?wait=true` under the hood — the caller
16
+ * never sees `run_id` or has to poll. Non-completion states (HITL
17
+ * pause, terminal agent error, timeout) surface as typed errors from
18
+ * `./errors`. HITL approvals are NOT resolved through the SDK — the
19
+ * pause is surfaced as an error so the calling app can tell its user
20
+ * to contact an administrator, who handles it in the dashboard.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.Chat = exports.Agent = exports.Curator = void 0;
24
+ const errors_js_1 = require("./errors.js");
25
+ const files_js_1 = require("./files.js");
26
+ const http_js_1 = require("./http.js");
27
+ const sse_js_1 = require("./sse.js");
28
+ const streamEventParse_js_1 = require("./streamEventParse.js");
29
+ const streamEvents_js_1 = require("./streamEvents.js");
30
+ const DEFAULT_BASE_URL = "https://app.darqlabs.ai";
31
+ const DEFAULT_TIMEOUT_MS = 120_000;
32
+ class Curator {
33
+ http;
34
+ defaultProject;
35
+ defaultEnvironment;
36
+ defaultTimeoutMs;
37
+ /** File-upload surface — see {@link Files}. */
38
+ files;
39
+ constructor(opts) {
40
+ const baseUrl = opts.baseUrl ?? DEFAULT_BASE_URL;
41
+ // Same bind-to-host dance as HttpClient — needed because the bare
42
+ // `globalThis.fetch` reference loses its `this` when invoked through
43
+ // a stashed variable, and browsers reject that with "Illegal invocation".
44
+ const globalFetch = globalThis.fetch;
45
+ const fetchImpl = opts.fetch ?? (globalFetch ? globalFetch.bind(globalThis) : undefined);
46
+ this.http = new http_js_1.HttpClient({
47
+ apiKey: opts.apiKey,
48
+ baseUrl,
49
+ fetch: opts.fetch,
50
+ defaultHeaders: opts.defaultHeaders,
51
+ endUserJwt: opts.endUserJwt,
52
+ });
53
+ this.defaultProject = opts.project;
54
+ this.defaultEnvironment = opts.environment ?? "production";
55
+ this.defaultTimeoutMs = opts.defaultTimeoutMs ?? DEFAULT_TIMEOUT_MS;
56
+ this.files = new files_js_1.Files(this.http, stripTrailingSlash(baseUrl), fetchImpl);
57
+ }
58
+ /**
59
+ * Address an agent deployment by its slug. Project / environment fall
60
+ * back to the constructor defaults; pass overrides via the second arg.
61
+ */
62
+ agent(slug, locator = {}) {
63
+ return new Agent(this.http, this.defaultTimeoutMs, this.resolveRoute(slug, locator));
64
+ }
65
+ resolveRoute(deployment, locator) {
66
+ if (locator.system) {
67
+ if (locator.project) {
68
+ throw new errors_js_1.CuratorError("Cannot combine `system: true` with `project`.");
69
+ }
70
+ return { kind: "system", deployment };
71
+ }
72
+ const project = locator.project ?? this.defaultProject;
73
+ const environment = locator.environment ?? this.defaultEnvironment;
74
+ if (!project) {
75
+ throw new errors_js_1.CuratorError("No project specified. Set `project` on `new Curator({ ... })` or pass it as the second arg to `agent(slug, { project })`. " +
76
+ "If the deployment is system-scoped, pass `{ system: true }`.");
77
+ }
78
+ return { kind: "project", project, environment, deployment };
79
+ }
80
+ }
81
+ exports.Curator = Curator;
82
+ class Agent {
83
+ http;
84
+ defaultTimeoutMs;
85
+ route;
86
+ /** @internal */
87
+ constructor(http, defaultTimeoutMs, route) {
88
+ this.http = http;
89
+ this.defaultTimeoutMs = defaultTimeoutMs;
90
+ this.route = route;
91
+ }
92
+ /**
93
+ * Open a fresh conversation, send `content`, await the reply, and
94
+ * return it. Equivalent to `agent.chat().send(content)` but one line.
95
+ */
96
+ async run(content, opts = {}) {
97
+ return this.chat().send(content, opts);
98
+ }
99
+ /**
100
+ * Open a fresh conversation and stream the reply as it's generated.
101
+ * Equivalent to `agent.chat().stream(content)`.
102
+ */
103
+ stream(content, opts = {}) {
104
+ return this.chat().stream(content, opts);
105
+ }
106
+ /**
107
+ * Return a Chat handle whose conversation is created lazily on the
108
+ * first `send(...)`. Subsequent sends reuse the same conversation.
109
+ */
110
+ chat() {
111
+ return new Chat(this.http, this.defaultTimeoutMs, this.route, null);
112
+ }
113
+ /**
114
+ * Reattach to an existing conversation by id (e.g. resuming a chat
115
+ * across processes or restoring from durable state).
116
+ */
117
+ conversation(conversationId) {
118
+ return new Chat(this.http, this.defaultTimeoutMs, this.route, conversationId);
119
+ }
120
+ /**
121
+ * Fetch this deployment's read-only client config (branding entitlements,
122
+ * etc.). Resolved server-side from the org's subscription tier. No side
123
+ * effects — safe to call on widget mount. `<CuratorChat />` uses this to
124
+ * decide whether to render the "Powered by Curator" footer.
125
+ */
126
+ async config() {
127
+ const envelope = await this.http.request(`${this.http.deploymentBase(this.route)}/config`, { method: "GET" });
128
+ return {
129
+ branding: {
130
+ hidePoweredBy: envelope.data.branding?.hide_powered_by === true,
131
+ },
132
+ };
133
+ }
134
+ }
135
+ exports.Agent = Agent;
136
+ class Chat {
137
+ http;
138
+ defaultTimeoutMs;
139
+ route;
140
+ conversationId;
141
+ /** Cached promise for an in-flight `POST /conversations`. */
142
+ pendingCreate = null;
143
+ /** @internal */
144
+ constructor(http, defaultTimeoutMs, route, initialConversationId) {
145
+ this.http = http;
146
+ this.defaultTimeoutMs = defaultTimeoutMs;
147
+ this.route = route;
148
+ this.conversationId = initialConversationId;
149
+ }
150
+ /**
151
+ * Conversation id, or `null` until the first send creates one.
152
+ * Use `.ensureId()` if you need to materialize the conversation
153
+ * eagerly without sending a message.
154
+ */
155
+ get id() {
156
+ return this.conversationId;
157
+ }
158
+ /** Force conversation creation now and return its id. */
159
+ async ensureId() {
160
+ if (this.conversationId)
161
+ return this.conversationId;
162
+ if (this.pendingCreate)
163
+ return this.pendingCreate;
164
+ this.pendingCreate = this.createConversation().finally(() => {
165
+ this.pendingCreate = null;
166
+ });
167
+ return this.pendingCreate;
168
+ }
169
+ /**
170
+ * Send a user message and await the assistant's reply. Lazily creates
171
+ * the conversation if needed. Returns the final assistant message.
172
+ *
173
+ * Throws:
174
+ * - CuratorApprovalRequiredError if the run pauses for HITL (an
175
+ * administrator must resolve it in the dashboard)
176
+ * - CuratorAgentError on terminal agent failure
177
+ * - CuratorTimeoutError if the wait expires (the run keeps running)
178
+ */
179
+ async send(content, opts = {}) {
180
+ if (!content && !opts.files?.length) {
181
+ throw new errors_js_1.CuratorError("Either `content` or `files` must be provided.");
182
+ }
183
+ const conversationId = await this.ensureId();
184
+ const timeoutMs = opts.timeoutMs ?? this.defaultTimeoutMs;
185
+ const body = { content };
186
+ if (opts.files?.length) {
187
+ body.files = opts.files.map(toServerFile);
188
+ }
189
+ const envelope = await this.http.request(`${this.http.deploymentBase(this.route)}/conversations/${encodeURIComponent(conversationId)}/messages`, {
190
+ method: "POST",
191
+ query: { wait: "true", timeout_ms: timeoutMs },
192
+ body,
193
+ // Give the underlying fetch a small slack window over the server
194
+ // timeout — the server returns a structured `status: 'timeout'`
195
+ // payload that we want to surface as CuratorTimeoutError rather
196
+ // than an aborted fetch.
197
+ signalTimeoutMs: timeoutMs + 10_000,
198
+ });
199
+ return this.unwrapWaitOutcome(envelope.data);
200
+ }
201
+ /**
202
+ * Send a user message and stream the agent's response back as it's
203
+ * generated. Each yielded event is one of `delta` / `tool_call.*` /
204
+ * `done` / `error` / `paused_for_approval`. The iterator ends on the
205
+ * first terminal event.
206
+ *
207
+ * for await (const e of chat.stream("hello")) {
208
+ * if (e.type === "delta") process.stdout.write(e.text)
209
+ * if (e.type === "done") console.log("\nfinal:", e.message?.content)
210
+ * }
211
+ *
212
+ * Aborting the iteration (breaking out of the loop, or calling
213
+ * `.return()`) closes the underlying HTTP connection — the server-
214
+ * side run keeps going independently. Use `chat.history()` later to
215
+ * fetch what landed.
216
+ */
217
+ async *stream(content, opts = {}) {
218
+ if (!content && !opts.files?.length) {
219
+ throw new errors_js_1.CuratorError("Either `content` or `files` must be provided.");
220
+ }
221
+ const conversationId = await this.ensureId();
222
+ const body = { content };
223
+ if (opts.files?.length) {
224
+ body.files = opts.files.map(toServerFile);
225
+ }
226
+ const controller = new AbortController();
227
+ const response = await this.http.streamPost(`${this.http.deploymentBase(this.route)}/conversations/${encodeURIComponent(conversationId)}/messages`, {
228
+ body,
229
+ query: { stream: "true" },
230
+ signal: controller.signal,
231
+ });
232
+ try {
233
+ for await (const frame of (0, sse_js_1.parseSseStream)(response.body)) {
234
+ const event = (0, streamEventParse_js_1.frameToStreamEvent)(frame);
235
+ if (!event)
236
+ continue;
237
+ yield event;
238
+ if ((0, streamEvents_js_1.isTerminalStreamEvent)(event))
239
+ return;
240
+ }
241
+ }
242
+ finally {
243
+ try {
244
+ controller.abort();
245
+ }
246
+ catch {
247
+ /* ignore */
248
+ }
249
+ }
250
+ }
251
+ /** Fetch (paginated) conversation history. */
252
+ async history(opts = {}) {
253
+ const conversationId = await this.ensureId();
254
+ const envelope = await this.http.request(`${this.http.deploymentBase(this.route)}/conversations/${encodeURIComponent(conversationId)}`, {
255
+ query: {
256
+ limit: opts.limit,
257
+ before_sequence: opts.beforeSequence,
258
+ },
259
+ });
260
+ const messages = envelope.data.messages.map((m) => adaptHistoryMessage(m));
261
+ return {
262
+ messages,
263
+ hasMore: envelope.data.has_more_messages,
264
+ oldestSequence: envelope.data.oldest_loaded_sequence,
265
+ totalMessageCount: envelope.data.message_count,
266
+ };
267
+ }
268
+ // ── internals ────────────────────────────────────────────────────
269
+ async createConversation() {
270
+ const envelope = await this.http.request(`${this.http.deploymentBase(this.route)}/conversations`, {
271
+ method: "POST",
272
+ });
273
+ this.conversationId = envelope.data.conversation_id;
274
+ return this.conversationId;
275
+ }
276
+ /**
277
+ * Continue waiting for the next terminal state on an already-running
278
+ * conversation. Used to back `CuratorTimeoutError.continueWaiting()`.
279
+ *
280
+ * The server-side wait endpoint hangs off `POST /messages`, so to
281
+ * re-wait without sending a new user message we poll history for an
282
+ * assistant message whose `sequence` exceeds the baseline established
283
+ * before the wait began. For a still-in-flight run, the assistant
284
+ * reply typically lands within seconds.
285
+ */
286
+ async waitForNextReply(timeoutMs) {
287
+ const conversationId = await this.ensureId();
288
+ const deadline = Date.now() + timeoutMs;
289
+ let baseline = await this.latestSequence(conversationId);
290
+ while (Date.now() < deadline) {
291
+ await sleep(1_500);
292
+ const latest = await this.latestSequence(conversationId);
293
+ if (latest <= baseline)
294
+ continue;
295
+ const page = await this.history({ limit: 50 });
296
+ for (let i = page.messages.length - 1; i >= 0; i--) {
297
+ const m = page.messages[i];
298
+ if (m.role === "assistant" && m.sequence > baseline) {
299
+ return {
300
+ ...m,
301
+ runId: "<resumed>",
302
+ conversationId,
303
+ };
304
+ }
305
+ }
306
+ baseline = latest;
307
+ }
308
+ throw new errors_js_1.CuratorTimeoutError({
309
+ conversationId,
310
+ runId: "<resumed>",
311
+ continueWaiting: (next) => this.waitForNextReply(next ?? this.defaultTimeoutMs),
312
+ });
313
+ }
314
+ async latestSequence(conversationId) {
315
+ const envelope = await this.http.request(`${this.http.deploymentBase(this.route)}/conversations/${encodeURIComponent(conversationId)}`, { query: { limit: 1 } });
316
+ const list = envelope.data.messages;
317
+ return list.length > 0 ? list[list.length - 1].sequence : 0;
318
+ }
319
+ unwrapWaitOutcome(data) {
320
+ const { run_id, conversation_id, status } = data;
321
+ switch (status) {
322
+ case "completed": {
323
+ const msg = data.message;
324
+ if (!msg) {
325
+ throw new errors_js_1.CuratorError("Server returned `completed` without a message payload.");
326
+ }
327
+ return {
328
+ role: "assistant",
329
+ content: msg.content,
330
+ sequence: msg.sequence,
331
+ stepId: msg.step_id,
332
+ createdAt: msg.created_at,
333
+ runId: run_id,
334
+ conversationId: conversation_id,
335
+ };
336
+ }
337
+ case "paused_for_approval": {
338
+ const approval = data.approval;
339
+ if (!approval) {
340
+ throw new errors_js_1.CuratorError("Server returned `paused_for_approval` without approval payload.");
341
+ }
342
+ throw new errors_js_1.CuratorApprovalRequiredError({
343
+ approval,
344
+ conversationId: conversation_id,
345
+ runId: run_id,
346
+ });
347
+ }
348
+ case "errored": {
349
+ const err = data.error;
350
+ if (!err) {
351
+ throw new errors_js_1.CuratorError("Server returned `errored` without error payload.");
352
+ }
353
+ throw new errors_js_1.CuratorAgentError({
354
+ message: err.message,
355
+ failureClass: err.failure_class,
356
+ isPermanent: err.is_permanent,
357
+ stepId: err.step_id ?? null,
358
+ conversationId: conversation_id,
359
+ runId: run_id,
360
+ });
361
+ }
362
+ case "timeout":
363
+ throw new errors_js_1.CuratorTimeoutError({
364
+ conversationId: conversation_id,
365
+ runId: run_id,
366
+ continueWaiting: (next) => this.waitForNextReply(next ?? this.defaultTimeoutMs),
367
+ });
368
+ }
369
+ }
370
+ }
371
+ exports.Chat = Chat;
372
+ function adaptHistoryMessage(m) {
373
+ if (m.role === "assistant") {
374
+ return {
375
+ role: "assistant",
376
+ content: m.content,
377
+ sequence: m.sequence,
378
+ stepId: m.step_id,
379
+ createdAt: m.created_at,
380
+ // History endpoint doesn't return run_id / conversation_id per
381
+ // row — callers that need them should track separately.
382
+ runId: "<historical>",
383
+ conversationId: "<historical>",
384
+ };
385
+ }
386
+ if (m.role === "tool") {
387
+ return {
388
+ role: "tool",
389
+ content: m.content,
390
+ sequence: m.sequence,
391
+ toolCallId: m.tool_call_id,
392
+ createdAt: m.created_at,
393
+ };
394
+ }
395
+ return {
396
+ role: "user",
397
+ content: m.content,
398
+ sequence: m.sequence,
399
+ createdAt: m.created_at,
400
+ };
401
+ }
402
+ function toServerFile(f) {
403
+ return {
404
+ storageKey: f.storageKey,
405
+ mimeType: f.mimeType,
406
+ filename: f.filename,
407
+ size: f.size,
408
+ artifactId: f.artifactId,
409
+ };
410
+ }
411
+ function sleep(ms) {
412
+ return new Promise((resolve) => setTimeout(resolve, ms));
413
+ }
414
+ function stripTrailingSlash(s) {
415
+ return s.replace(/\/+$/, "");
416
+ }
417
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH,2CAKoB;AACpB,yCAAkC;AAClC,uCAAqF;AACrF,qCAAyC;AACzC,+DAA0D;AAE1D,uDAAyD;AA8EzD,MAAM,gBAAgB,GAAG,yBAAyB,CAAA;AAClD,MAAM,kBAAkB,GAAG,OAAO,CAAA;AAElC,MAAa,OAAO;IACD,IAAI,CAAY;IAChB,cAAc,CAAS;IACvB,kBAAkB,CAAa;IAC/B,gBAAgB,CAAQ;IACzC,+CAA+C;IACtC,KAAK,CAAO;IAErB,YAAY,IAAoB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAA;QAChD,kEAAkE;QAClE,qEAAqE;QACrE,0EAA0E;QAC1E,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAA;QACpC,MAAM,SAAS,GACb,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,SAAqC,CAAC,CAAA;QACrG,IAAI,CAAC,IAAI,GAAG,IAAI,oBAAU,CAAC;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAA;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAA;QAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,IAAI,YAAY,CAAA;QAC1D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,CAAA;QACnE,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAK,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAA;IAC3E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAY,EAAE,UAAwB,EAAE;QAC5C,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACtF,CAAC;IAEO,YAAY,CAAC,UAAkB,EAAE,OAAqB;QAC5D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,wBAAY,CAAC,+CAA+C,CAAC,CAAA;YACzE,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;QACvC,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAA;QACtD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAA;QAClE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,wBAAY,CACpB,4HAA4H;gBAC1H,8DAA8D,CACjE,CAAA;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAA;IAC9D,CAAC;CACF;AAtDD,0BAsDC;AAED,MAAa,KAAK;IAGG;IACA;IACA;IAJnB,gBAAgB;IAChB,YACmB,IAAgB,EAChB,gBAAwB,EACxB,KAAsB;QAFtB,SAAI,GAAJ,IAAI,CAAY;QAChB,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,UAAK,GAAL,KAAK,CAAiB;IACtC,CAAC;IAEJ;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,OAAoB,EAAE;QAC/C,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,OAAe,EAAE,OAAoB,EAAE;QAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACrE,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,cAAsB;QACjC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IAC/E,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAEtC,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QACtE,OAAO;YACL,QAAQ,EAAE;gBACR,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI;aAChE;SACF,CAAA;IACH,CAAC;CACF;AAxDD,sBAwDC;AAED,MAAa,IAAI;IACE,IAAI,CAAY;IAChB,gBAAgB,CAAQ;IACxB,KAAK,CAAiB;IAC/B,cAAc,CAAe;IACrC,6DAA6D;IACrD,aAAa,GAA2B,IAAI,CAAA;IAEpD,gBAAgB;IAChB,YACE,IAAgB,EAChB,gBAAwB,EACxB,KAAsB,EACtB,qBAAoC;QAEpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAA;IAC7C,CAAC;IAED;;;;OAIG;IACH,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC,cAAc,CAAA;QACnD,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,aAAa,CAAA;QACjD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC3B,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,OAAoB,EAAE;QAChD,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACpC,MAAM,IAAI,wBAAY,CAAC,+CAA+C,CAAC,CAAA;QACzE,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAA;QACzD,MAAM,IAAI,GAA4B,EAAE,OAAO,EAAE,CAAA;QACjD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CACtC,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,kBAAkB,CAAC,cAAc,CAAC,WAAW,EACtG;YACE,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE;YAC9C,IAAI;YACJ,iEAAiE;YACjE,gEAAgE;YAChE,gEAAgE;YAChE,yBAAyB;YACzB,eAAe,EAAE,SAAS,GAAG,MAAM;SACpC,CACF,CAAA;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAe,EAAE,OAAoB,EAAE;QACnD,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACpC,MAAM,IAAI,wBAAY,CAAC,+CAA+C,CAAC,CAAA;QACzE,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC5C,MAAM,IAAI,GAA4B,EAAE,OAAO,EAAE,CAAA;QACjD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC3C,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CACzC,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,kBAAkB,CAAC,cAAc,CAAC,WAAW,EACtG;YACE,IAAI;YACJ,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YACzB,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CACF,CAAA;QAED,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAA,uBAAc,EAAC,QAAQ,CAAC,IAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,KAAK,GAAG,IAAA,wCAAkB,EAAC,KAAK,CAAC,CAAA;gBACvC,IAAI,CAAC,KAAK;oBAAE,SAAQ;gBACpB,MAAM,KAAK,CAAA;gBACX,IAAI,IAAA,uCAAqB,EAAC,KAAK,CAAC;oBAAE,OAAM;YAC1C,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,UAAU,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE;QACrC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAgBtC,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,kBAAkB,CAAC,cAAc,CAAC,EAAE,EAC7F;YACE,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,eAAe,EAAE,IAAI,CAAC,cAAc;aACrC;SACF,CACF,CAAA;QAED,MAAM,QAAQ,GAA0B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACvE,mBAAmB,CAAC,CAAC,CAAC,CACvB,CAAA;QACD,OAAO;YACL,QAAQ;YACR,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB;YACxC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,sBAAsB;YACpD,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa;SAC/C,CAAA;IACH,CAAC;IAED,oEAAoE;IAE5D,KAAK,CAAC,kBAAkB;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAMtC,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;YACzD,MAAM,EAAE,MAAM;SACf,CAAC,CAAA;QACF,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAA;QACnD,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED;;;;;;;;;OASG;IACK,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QAC9C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;QACvC,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;QAExD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC,KAAK,CAAC,CAAA;YAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;YACxD,IAAI,MAAM,IAAI,QAAQ;gBAAE,SAAQ;YAEhC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;YAC9C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAC1B,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;oBACpD,OAAO;wBACL,GAAG,CAAC;wBACJ,KAAK,EAAE,WAAW;wBAClB,cAAc;qBACf,CAAA;gBACH,CAAC;YACH,CAAC;YACD,QAAQ,GAAG,MAAM,CAAA;QACnB,CAAC;QACD,MAAM,IAAI,+BAAmB,CAAC;YAC5B,cAAc;YACd,KAAK,EAAE,WAAW;YAClB,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC;SAChF,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,cAAsB;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAMtC,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,kBAAkB,CAAC,cAAc,CAAC,EAAE,EAC7F,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CACxB,CAAA;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAA;QACnC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7D,CAAC;IAEO,iBAAiB,CAAC,IAAoB;QAC5C,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAChD,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAA;gBACxB,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,IAAI,wBAAY,CAAC,wDAAwD,CAAC,CAAA;gBAClF,CAAC;gBACD,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,MAAM,EAAE,GAAG,CAAC,OAAO;oBACnB,SAAS,EAAE,GAAG,CAAC,UAAU;oBACzB,KAAK,EAAE,MAAM;oBACb,cAAc,EAAE,eAAe;iBAChC,CAAA;YACH,CAAC;YACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;gBAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,wBAAY,CACpB,iEAAiE,CAClE,CAAA;gBACH,CAAC;gBACD,MAAM,IAAI,wCAA4B,CAAC;oBACrC,QAAQ;oBACR,cAAc,EAAE,eAAe;oBAC/B,KAAK,EAAE,MAAM;iBACd,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAA;gBACtB,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,IAAI,wBAAY,CAAC,kDAAkD,CAAC,CAAA;gBAC5E,CAAC;gBACD,MAAM,IAAI,6BAAiB,CAAC;oBAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,YAAY,EAAE,GAAG,CAAC,aAAa;oBAC/B,WAAW,EAAE,GAAG,CAAC,YAAY;oBAC7B,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;oBAC3B,cAAc,EAAE,eAAe;oBAC/B,KAAK,EAAE,MAAM;iBACd,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,SAAS;gBACZ,MAAM,IAAI,+BAAmB,CAAC;oBAC5B,cAAc,EAAE,eAAe;oBAC/B,KAAK,EAAE,MAAM;oBACb,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC;iBAChF,CAAC,CAAA;QACN,CAAC;IACH,CAAC;CACF;AApSD,oBAoSC;AAED,SAAS,mBAAmB,CAAC,CAQ5B;IACC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,OAAO;YACjB,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,+DAA+D;YAC/D,wDAAwD;YACxD,KAAK,EAAE,cAAc;YACrB,cAAc,EAAE,cAAc;SAC/B,CAAA;IACH,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,UAAU,EAAE,CAAC,CAAC,YAAY;YAC1B,SAAS,EAAE,CAAC,CAAC,UAAU;SACxB,CAAA;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,SAAS,EAAE,CAAC,CAAC,UAAU;KACxB,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,CAAiB;IACrC,OAAO;QACL,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB,CAAA;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Typed errors the SDK throws.
3
+ *
4
+ * Happy-path code reads the return value of `agent.run(...)` or
5
+ * `chat.send(...)`. Anything else — HITL pauses, agent-side errors,
6
+ * timeouts, HTTP failures — surfaces as one of these. Catch the
7
+ * specific class you care about; everything inherits from
8
+ * `CuratorError` so a single `catch (err: CuratorError)` works as a
9
+ * backstop.
10
+ */
11
+ import type { AssistantMessage, ApprovalDetails, AgentFailureClass } from "./types.js";
12
+ export declare class CuratorError extends Error {
13
+ constructor(message: string, options?: {
14
+ cause?: unknown;
15
+ });
16
+ }
17
+ /** HTTP 401 from the API — your API key is missing, invalid, or revoked. */
18
+ export declare class CuratorAuthError extends CuratorError {
19
+ constructor(message?: string);
20
+ }
21
+ /** HTTP 403 from the API — your API key doesn't have permission for this action. */
22
+ export declare class CuratorForbiddenError extends CuratorError {
23
+ constructor(message?: string);
24
+ }
25
+ /** HTTP 404 from the API — the deployment slug or conversation id wasn't found. */
26
+ export declare class CuratorNotFoundError extends CuratorError {
27
+ constructor(message?: string);
28
+ }
29
+ /** HTTP 410 from the API — the deployment was retired. */
30
+ export declare class CuratorDeploymentRetiredError extends CuratorError {
31
+ readonly retiredAt: string | null;
32
+ constructor(message: string, retiredAt: string | null);
33
+ }
34
+ /** HTTP 429 from the API — back off. */
35
+ export declare class CuratorRateLimitError extends CuratorError {
36
+ readonly retryAfterSeconds: number | null;
37
+ constructor(message?: string, retryAfterSeconds?: number | null);
38
+ }
39
+ /**
40
+ * Run paused waiting for human approval. Approval resolution is not
41
+ * exposed to API consumers — pauses are routed through the dashboard
42
+ * by an org administrator. The error carries the approval payload so
43
+ * the caller can surface a friendly "contact your administrator"
44
+ * message that mentions the specific tool.
45
+ */
46
+ export declare class CuratorApprovalRequiredError extends CuratorError {
47
+ readonly approval: ApprovalDetails;
48
+ readonly conversationId: string;
49
+ readonly runId: string;
50
+ constructor(args: {
51
+ approval: ApprovalDetails;
52
+ conversationId: string;
53
+ runId: string;
54
+ });
55
+ }
56
+ /**
57
+ * The agent run reached a terminal error state (LLM quota, auth, 5xx
58
+ * exhausted retries, etc.). `failureClass` and `isPermanent` mirror the
59
+ * server's classification so callers can decide whether to retry.
60
+ */
61
+ export declare class CuratorAgentError extends CuratorError {
62
+ readonly failureClass: AgentFailureClass;
63
+ readonly isPermanent: boolean;
64
+ readonly conversationId: string;
65
+ readonly runId: string;
66
+ readonly stepId: string | null;
67
+ constructor(args: {
68
+ message: string;
69
+ failureClass: AgentFailureClass;
70
+ isPermanent: boolean;
71
+ conversationId: string;
72
+ runId: string;
73
+ stepId?: string | null;
74
+ });
75
+ }
76
+ /**
77
+ * The synchronous wait expired. The agent run keeps running on the
78
+ * server; call `.continueWaiting()` to resume listening, or fetch
79
+ * history later via `chat.history()`.
80
+ */
81
+ export declare class CuratorTimeoutError extends CuratorError {
82
+ readonly conversationId: string;
83
+ readonly runId: string;
84
+ readonly continueWaiting: (timeoutMs?: number) => Promise<AssistantMessage>;
85
+ constructor(args: {
86
+ conversationId: string;
87
+ runId: string;
88
+ continueWaiting: (timeoutMs?: number) => Promise<AssistantMessage>;
89
+ });
90
+ }
91
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEtF,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAQ3D;AAED,4EAA4E;AAC5E,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,OAAO,SAA+B;CAInD;AAED,oFAAoF;AACpF,qBAAa,qBAAsB,SAAQ,YAAY;gBACzC,OAAO,SAAsB;CAI1C;AAED,mFAAmF;AACnF,qBAAa,oBAAqB,SAAQ,YAAY;gBACxC,OAAO,SAAuB;CAI3C;AAED,0DAA0D;AAC1D,qBAAa,6BAA8B,SAAQ,YAAY;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;gBACrB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAKtD;AAED,wCAAwC;AACxC,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;gBAC7B,OAAO,SAAwB,EAAE,iBAAiB,GAAE,MAAM,GAAG,IAAW;CAKrF;AAED;;;;;;GAMG;AACH,qBAAa,4BAA6B,SAAQ,YAAY;IAC5D,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;gBAEV,IAAI,EAAE;QAChB,QAAQ,EAAE,eAAe,CAAA;QACzB,cAAc,EAAE,MAAM,CAAA;QACtB,KAAK,EAAE,MAAM,CAAA;KACd;CAUF;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAA;IACxC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;gBAElB,IAAI,EAAE;QAChB,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,iBAAiB,CAAA;QAC/B,WAAW,EAAE,OAAO,CAAA;QACpB,cAAc,EAAE,MAAM,CAAA;QACtB,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KACvB;CASF;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;gBAE/D,IAAI,EAAE;QAChB,cAAc,EAAE,MAAM,CAAA;QACtB,KAAK,EAAE,MAAM,CAAA;QACb,eAAe,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;KACnE;CAOF"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * Typed errors the SDK throws.
4
+ *
5
+ * Happy-path code reads the return value of `agent.run(...)` or
6
+ * `chat.send(...)`. Anything else — HITL pauses, agent-side errors,
7
+ * timeouts, HTTP failures — surfaces as one of these. Catch the
8
+ * specific class you care about; everything inherits from
9
+ * `CuratorError` so a single `catch (err: CuratorError)` works as a
10
+ * backstop.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.CuratorTimeoutError = exports.CuratorAgentError = exports.CuratorApprovalRequiredError = exports.CuratorRateLimitError = exports.CuratorDeploymentRetiredError = exports.CuratorNotFoundError = exports.CuratorForbiddenError = exports.CuratorAuthError = exports.CuratorError = void 0;
14
+ class CuratorError extends Error {
15
+ constructor(message, options) {
16
+ super(message);
17
+ this.name = "CuratorError";
18
+ // Preserve the underlying error if the runtime supports it.
19
+ if (options?.cause !== undefined) {
20
+ ;
21
+ this.cause = options.cause;
22
+ }
23
+ }
24
+ }
25
+ exports.CuratorError = CuratorError;
26
+ /** HTTP 401 from the API — your API key is missing, invalid, or revoked. */
27
+ class CuratorAuthError extends CuratorError {
28
+ constructor(message = "Invalid or revoked API key") {
29
+ super(message);
30
+ this.name = "CuratorAuthError";
31
+ }
32
+ }
33
+ exports.CuratorAuthError = CuratorAuthError;
34
+ /** HTTP 403 from the API — your API key doesn't have permission for this action. */
35
+ class CuratorForbiddenError extends CuratorError {
36
+ constructor(message = "Permission denied") {
37
+ super(message);
38
+ this.name = "CuratorForbiddenError";
39
+ }
40
+ }
41
+ exports.CuratorForbiddenError = CuratorForbiddenError;
42
+ /** HTTP 404 from the API — the deployment slug or conversation id wasn't found. */
43
+ class CuratorNotFoundError extends CuratorError {
44
+ constructor(message = "Resource not found") {
45
+ super(message);
46
+ this.name = "CuratorNotFoundError";
47
+ }
48
+ }
49
+ exports.CuratorNotFoundError = CuratorNotFoundError;
50
+ /** HTTP 410 from the API — the deployment was retired. */
51
+ class CuratorDeploymentRetiredError extends CuratorError {
52
+ retiredAt;
53
+ constructor(message, retiredAt) {
54
+ super(message);
55
+ this.name = "CuratorDeploymentRetiredError";
56
+ this.retiredAt = retiredAt;
57
+ }
58
+ }
59
+ exports.CuratorDeploymentRetiredError = CuratorDeploymentRetiredError;
60
+ /** HTTP 429 from the API — back off. */
61
+ class CuratorRateLimitError extends CuratorError {
62
+ retryAfterSeconds;
63
+ constructor(message = "Rate limit exceeded", retryAfterSeconds = null) {
64
+ super(message);
65
+ this.name = "CuratorRateLimitError";
66
+ this.retryAfterSeconds = retryAfterSeconds;
67
+ }
68
+ }
69
+ exports.CuratorRateLimitError = CuratorRateLimitError;
70
+ /**
71
+ * Run paused waiting for human approval. Approval resolution is not
72
+ * exposed to API consumers — pauses are routed through the dashboard
73
+ * by an org administrator. The error carries the approval payload so
74
+ * the caller can surface a friendly "contact your administrator"
75
+ * message that mentions the specific tool.
76
+ */
77
+ class CuratorApprovalRequiredError extends CuratorError {
78
+ approval;
79
+ conversationId;
80
+ runId;
81
+ constructor(args) {
82
+ super(`Run paused for approval — the '${args.approval.tool_name}' tool needs an administrator to review it. ` +
83
+ "Contact your administrator to resolve this in the Curator dashboard.");
84
+ this.name = "CuratorApprovalRequiredError";
85
+ this.approval = args.approval;
86
+ this.conversationId = args.conversationId;
87
+ this.runId = args.runId;
88
+ }
89
+ }
90
+ exports.CuratorApprovalRequiredError = CuratorApprovalRequiredError;
91
+ /**
92
+ * The agent run reached a terminal error state (LLM quota, auth, 5xx
93
+ * exhausted retries, etc.). `failureClass` and `isPermanent` mirror the
94
+ * server's classification so callers can decide whether to retry.
95
+ */
96
+ class CuratorAgentError extends CuratorError {
97
+ failureClass;
98
+ isPermanent;
99
+ conversationId;
100
+ runId;
101
+ stepId;
102
+ constructor(args) {
103
+ super(args.message);
104
+ this.name = "CuratorAgentError";
105
+ this.failureClass = args.failureClass;
106
+ this.isPermanent = args.isPermanent;
107
+ this.conversationId = args.conversationId;
108
+ this.runId = args.runId;
109
+ this.stepId = args.stepId ?? null;
110
+ }
111
+ }
112
+ exports.CuratorAgentError = CuratorAgentError;
113
+ /**
114
+ * The synchronous wait expired. The agent run keeps running on the
115
+ * server; call `.continueWaiting()` to resume listening, or fetch
116
+ * history later via `chat.history()`.
117
+ */
118
+ class CuratorTimeoutError extends CuratorError {
119
+ conversationId;
120
+ runId;
121
+ continueWaiting;
122
+ constructor(args) {
123
+ super("Timed out waiting for the agent to reply — the run is still in progress.");
124
+ this.name = "CuratorTimeoutError";
125
+ this.conversationId = args.conversationId;
126
+ this.runId = args.runId;
127
+ this.continueWaiting = args.continueWaiting;
128
+ }
129
+ }
130
+ exports.CuratorTimeoutError = CuratorTimeoutError;
131
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}