@darqlabs/curator-sdk 0.1.6 → 0.2.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.
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Flow-graph authoring + run surface for the Curator SDK.
3
+ *
4
+ * import { Curator, reducers, agentNode, toolNode, transformNode, edge, branch, when } from "@darqlabs/curator-sdk"
5
+ *
6
+ * const draft = curator.defineGraph({
7
+ * name: "copy-loop",
8
+ * state: { messages: reducers.append(), draft: reducers.lastValue(), revisions: reducers.counter() },
9
+ * nodes: {
10
+ * write: agentNode("copywriter"),
11
+ * review: toolNode("api.grammar.check"),
12
+ * score: transformNode({ transformId: "tf_quality", version: 1 }),
13
+ * },
14
+ * entry: "write",
15
+ * edges: [
16
+ * edge("write", "review"),
17
+ * edge("review", "score"),
18
+ * branch("score", when("draft_ok", "==", true).then("END").else("write")),
19
+ * ],
20
+ * recursionLimit: 12,
21
+ * })
22
+ *
23
+ * const graph = await curator.graphs.create(draft) // POST /api/graphs
24
+ * await graph.deploy({ expectedDraftRevision: 1 }) // versioned snapshot
25
+ *
26
+ * // run + stream node/state events
27
+ * for await (const ev of graph.stream({ messages: [] })) {
28
+ * if (ev.type === "node.completed") console.log("done:", ev.node)
29
+ * if (ev.type === "done") console.log("final:", ev.state)
30
+ * }
31
+ *
32
+ * These graph types are SDK-owned (the SDK is published and cannot depend on the
33
+ * private @darq/shared-types); they mirror the backend spec shape exactly so the
34
+ * assembled JSON validates + compiles server-side.
35
+ */
36
+ import { CuratorError } from "./errors.js";
37
+ import { parseSseStream } from "./sse.js";
38
+ /** The `END` sentinel target. */
39
+ export const GRAPH_END = "END";
40
+ // ── Builders (pure) ───────────────────────────────────────────────
41
+ export const reducers = {
42
+ append: () => ({ reducer: "append" }),
43
+ lastValue: () => ({ reducer: "lastValue" }),
44
+ merge: () => ({ reducer: "merge" }),
45
+ counter: () => ({ reducer: "counter" }),
46
+ /** A custom fold `(prev, update) => next`, run as a sandboxed transform. */
47
+ custom: (transform) => ({ reducer: "custom", reducerRef: transform }),
48
+ };
49
+ export function agentNode(agentId, opts = {}) {
50
+ return { type: "agent", agentId, ...opts };
51
+ }
52
+ export function toolNode(action, opts = {}) {
53
+ return { type: "tool", action, ...opts };
54
+ }
55
+ export function transformNode(transform, opts = {}) {
56
+ return { type: "transform", transform, ...opts };
57
+ }
58
+ /**
59
+ * A `forEach` (map) node: run `body` per element of the `over` channel, appending
60
+ * each output into `collect`. Body params can reference the element via
61
+ * `{{item}}` / `{{item.field}}` / `{{index}}`.
62
+ */
63
+ export function forEachNode(over, body, opts = {}) {
64
+ return { type: "forEach", over, body, ...opts };
65
+ }
66
+ export function edge(from, to) {
67
+ return { kind: "static", from, to };
68
+ }
69
+ /** Attach a conditional edge to `from`. Pass a predicate builder or a router. */
70
+ export function branch(from, spec) {
71
+ const b = spec instanceof PredicateBuilder ? spec.build() : spec;
72
+ return { kind: "conditional", from, branch: b };
73
+ }
74
+ /** A sandboxed router transform that returns a next-node key (or END). */
75
+ export function router(transform, targets) {
76
+ return { kind: "router", transform, targets };
77
+ }
78
+ /**
79
+ * Fluent declarative predicate: `when("draft_ok", "==", true).then("END").else("write")`.
80
+ * Unary ops (`exists`/`truthy`/`falsy`) omit the value.
81
+ */
82
+ export function when(channel, op, value) {
83
+ return new PredicateBuilder({ channel, op, value });
84
+ }
85
+ export class PredicateBuilder {
86
+ predicate;
87
+ thenKey;
88
+ elseKey;
89
+ constructor(predicate) {
90
+ this.predicate = predicate;
91
+ }
92
+ then(nodeKey) {
93
+ this.thenKey = nodeKey;
94
+ return this;
95
+ }
96
+ else(nodeKey) {
97
+ this.elseKey = nodeKey;
98
+ return this;
99
+ }
100
+ /** @internal */
101
+ build() {
102
+ if (this.thenKey === undefined || this.elseKey === undefined) {
103
+ throw new CuratorError("A `when(...)` branch requires both `.then(...)` and `.else(...)`.");
104
+ }
105
+ return { kind: "predicate", predicate: this.predicate, then: this.thenKey, else: this.elseKey };
106
+ }
107
+ }
108
+ /** Assemble a serializable graph spec locally. Pure — no network. */
109
+ export function defineGraph(config) {
110
+ const { name, description, tags, state, nodes, entry, edges, recursionLimit, toolFailureMode } = config;
111
+ return {
112
+ name,
113
+ description,
114
+ tags,
115
+ spec: { state, nodes, entry, edges, recursionLimit, toolFailureMode },
116
+ };
117
+ }
118
+ // ── Client handles ────────────────────────────────────────────────
119
+ /** A handle to one graph resource, addressed by its `graph_id`. */
120
+ export class Graph {
121
+ http;
122
+ baseUrl;
123
+ defaultTimeoutMs;
124
+ graphId;
125
+ defaultEnvironment;
126
+ /** @internal */
127
+ constructor(http, baseUrl, defaultTimeoutMs, graphId, defaultEnvironment) {
128
+ this.http = http;
129
+ this.baseUrl = baseUrl;
130
+ this.defaultTimeoutMs = defaultTimeoutMs;
131
+ this.graphId = graphId;
132
+ this.defaultEnvironment = defaultEnvironment;
133
+ }
134
+ get base() {
135
+ return `${this.baseUrl}/api/graphs/${encodeURIComponent(this.graphId)}`;
136
+ }
137
+ /** Deploy the current draft as an immutable versioned snapshot. */
138
+ async deploy(opts) {
139
+ const env = opts.environment ?? this.defaultEnvironment;
140
+ const res = await this.http.request(`${this.base}/deploy`, {
141
+ method: "POST",
142
+ body: {
143
+ environment: env,
144
+ slug: opts.slug,
145
+ change_summary: opts.changeSummary,
146
+ expected_draft_revision: opts.expectedDraftRevision,
147
+ },
148
+ });
149
+ return {
150
+ versionId: res.data.version.version_id,
151
+ versionNumber: res.data.version.version_number,
152
+ slug: res.data.deployment.slug,
153
+ };
154
+ }
155
+ /**
156
+ * Start a run and, unless `{ wait: false }`, block until it settles.
157
+ * Returns the terminal channel state (or `status: "timeout"` if the wait
158
+ * expires — the run keeps going server-side).
159
+ */
160
+ async run(input, opts = {}) {
161
+ const wait = opts.wait !== false;
162
+ const timeoutMs = opts.timeoutMs ?? this.defaultTimeoutMs;
163
+ const res = await this.http.request(`${this.base}/run`, {
164
+ method: "POST",
165
+ body: {
166
+ input,
167
+ environment: opts.environment ?? this.defaultEnvironment,
168
+ use_draft: opts.useDraft,
169
+ wait,
170
+ timeout_ms: wait ? timeoutMs : undefined,
171
+ },
172
+ signalTimeoutMs: wait ? timeoutMs + 10_000 : undefined,
173
+ });
174
+ return {
175
+ runId: res.data.run_id,
176
+ status: res.data.status ?? "running",
177
+ state: res.data.state,
178
+ errorCode: res.data.errorCode,
179
+ errorMessage: res.data.errorMessage,
180
+ };
181
+ }
182
+ /**
183
+ * Start a run and stream node/state lifecycle events until it settles.
184
+ * Events (`run.started` / `node.started` / `node.completed` / `node.failed`
185
+ * / `state.delta` / `done` / `error`) are derived from the server's run-view
186
+ * snapshot stream. Breaking out of the loop closes the connection; the run
187
+ * continues server-side.
188
+ */
189
+ async *stream(input, opts = {}) {
190
+ // Start async (no wait) to get a run id, then attach to the snapshot stream.
191
+ const started = await this.run(input, { ...opts, wait: false });
192
+ const runId = started.runId;
193
+ yield { type: "run.started", runId };
194
+ const controller = new AbortController();
195
+ const response = await this.http.streamPost(`${this.base}/runs/${encodeURIComponent(runId)}/stream`, { query: { stream: "true" }, signal: controller.signal });
196
+ const differ = new SnapshotDiffer();
197
+ try {
198
+ for await (const frame of parseSseStream(response.body)) {
199
+ if (frame.event === "snapshot") {
200
+ const view = safeParse(frame.data);
201
+ if (!view)
202
+ continue;
203
+ for (const ev of differ.diff(view))
204
+ yield ev;
205
+ }
206
+ else if (frame.event === "done") {
207
+ const done = safeParse(frame.data);
208
+ const last = differ.lastView;
209
+ yield {
210
+ type: "done",
211
+ status: done?.status ?? last?.status ?? "succeeded",
212
+ state: last?.state ?? {},
213
+ };
214
+ return;
215
+ }
216
+ }
217
+ }
218
+ finally {
219
+ try {
220
+ controller.abort();
221
+ }
222
+ catch {
223
+ /* ignore */
224
+ }
225
+ }
226
+ }
227
+ /** Fetch the read-only run projection (spec + per-node status + state). */
228
+ async runStatus(runId) {
229
+ const res = await this.http.request(`${this.base}/runs/${encodeURIComponent(runId)}`);
230
+ return res.data;
231
+ }
232
+ /** List this graph's version snapshots (newest first). */
233
+ async versions() {
234
+ const res = await this.http.request(`${this.base}/versions`);
235
+ return res.data.map((v) => ({
236
+ versionId: v.version_id,
237
+ versionNumber: v.version_number,
238
+ createdAt: v.created_at,
239
+ }));
240
+ }
241
+ }
242
+ /** Collection surface for creating + addressing graphs. */
243
+ export class Graphs {
244
+ http;
245
+ baseUrl;
246
+ defaultTimeoutMs;
247
+ defaultEnvironment;
248
+ /** @internal */
249
+ constructor(http, baseUrl, defaultTimeoutMs, defaultEnvironment) {
250
+ this.http = http;
251
+ this.baseUrl = baseUrl;
252
+ this.defaultTimeoutMs = defaultTimeoutMs;
253
+ this.defaultEnvironment = defaultEnvironment;
254
+ }
255
+ /** Create a new graph resource from a draft (or inline config). Returns a
256
+ * handle bound to the new `graph_id`. */
257
+ async create(draft) {
258
+ const normalized = "spec" in draft ? draft : defineGraph(draft);
259
+ const res = await this.http.request(`${this.baseUrl}/api/graphs`, {
260
+ method: "POST",
261
+ body: {
262
+ name: normalized.name,
263
+ description: normalized.description,
264
+ tags: normalized.tags,
265
+ spec: normalized.spec,
266
+ },
267
+ });
268
+ return this.handle(res.data.graph_id);
269
+ }
270
+ /** Reattach to an existing graph by id. */
271
+ get(graphId) {
272
+ return this.handle(graphId);
273
+ }
274
+ handle(graphId) {
275
+ return new Graph(this.http, this.baseUrl, this.defaultTimeoutMs, graphId, this.defaultEnvironment);
276
+ }
277
+ }
278
+ // ── Snapshot → event diffing ──────────────────────────────────────
279
+ class SnapshotDiffer {
280
+ lastView = null;
281
+ prevStatuses = new Map();
282
+ prevState = {};
283
+ diff(view) {
284
+ const events = [];
285
+ for (const node of view.nodes) {
286
+ const prev = this.prevStatuses.get(node.key);
287
+ if (prev !== node.status) {
288
+ if (node.status === "running") {
289
+ events.push({ type: "node.started", node: node.key, visit: node.visits });
290
+ }
291
+ else if (node.status === "succeeded") {
292
+ events.push({ type: "node.completed", node: node.key });
293
+ }
294
+ else if (node.status === "failed") {
295
+ events.push({ type: "node.failed", node: node.key });
296
+ }
297
+ this.prevStatuses.set(node.key, node.status);
298
+ }
299
+ }
300
+ const changed = {};
301
+ for (const [k, v] of Object.entries(view.state)) {
302
+ if (JSON.stringify(this.prevState[k]) !== JSON.stringify(v))
303
+ changed[k] = v;
304
+ }
305
+ if (Object.keys(changed).length > 0) {
306
+ events.push({ type: "state.delta", channels: changed });
307
+ }
308
+ this.prevState = view.state;
309
+ this.lastView = view;
310
+ return events;
311
+ }
312
+ }
313
+ function safeParse(text) {
314
+ try {
315
+ return JSON.parse(text);
316
+ }
317
+ catch {
318
+ return null;
319
+ }
320
+ }
321
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"streamEventParse.d.ts","sourceRoot":"","sources":["../../src/streamEventParse.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI,CA8FtE"}
1
+ {"version":3,"file":"streamEventParse.d.ts","sourceRoot":"","sources":["../../src/streamEventParse.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI,CA0GtE"}
@@ -33,6 +33,18 @@ export function frameToStreamEvent(frame) {
33
33
  capabilityId: String(data.capability_id),
34
34
  durationMs: Number(data.duration_ms ?? 0),
35
35
  };
36
+ case "tool_call.failed":
37
+ return {
38
+ type: "tool_call.failed",
39
+ toolCallId: String(data.tool_call_id),
40
+ toolName: String(data.tool_name),
41
+ capabilityId: String(data.capability_id),
42
+ // Narrow to the known vocabulary rather than trusting the wire. A
43
+ // reason this SDK build has never heard of degrades to `tool_error`
44
+ // (the recoverable, less alarming of the two) instead of widening the
45
+ // union at runtime and breaking an exhaustive switch in user code.
46
+ reason: data.reason === "policy_denied" ? "policy_denied" : "tool_error",
47
+ };
36
48
  case "state":
37
49
  return {
38
50
  type: "state",
@@ -1 +1 @@
1
- {"version":3,"file":"streamEventParse.js","sourceRoot":"","sources":["../../src/streamEventParse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamEventParse.js","sourceRoot":"","sources":["../../src/streamEventParse.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,8 @@
6
6
  * lives on the server.
7
7
  *
8
8
  * Terminal events (`done`, `error`, `paused_for_approval`) end the
9
- * iterator. `delta` and `tool_call.*` events arrive incrementally.
9
+ * iterator. `delta` and `tool_call.*` events arrive incrementally — note that
10
+ * `tool_call.failed` is NOT terminal: a tool failing does not end the run.
10
11
  */
11
12
  import type { AgentFailureClass, ApprovalDetails, AuthorizationDetails, AssistantMessage } from "./types";
12
13
  /** Incremental token delta from the agent. */
@@ -29,6 +30,33 @@ export interface StreamToolCallCompleted {
29
30
  capabilityId: string;
30
31
  durationMs: number;
31
32
  }
33
+ /**
34
+ * A tool call ended without succeeding. Non-terminal — the agent sees the
35
+ * failure and usually keeps working; the run continues.
36
+ *
37
+ * Every `tool_call.started` is followed by exactly one `tool_call.completed`
38
+ * or `tool_call.failed` carrying the same `toolCallId`, so a UI tracking
39
+ * concurrent tool calls can always close the right pending indicator.
40
+ *
41
+ * `reason` is a closed vocabulary, not a message:
42
+ *
43
+ * - `policy_denied` — a policy or budget gate blocked the call. Retrying
44
+ * cannot help. Render something like "This action wasn't allowed."
45
+ * - `tool_error` — the tool ran and failed (bad argument, provider 4xx,
46
+ * timeout). Often correctable. Render something like "The tool couldn't
47
+ * complete."
48
+ *
49
+ * Deliberately no free text: the underlying reason can name internal policies,
50
+ * user ids and exception details, none of which belong on an end-user surface.
51
+ * Treat an unrecognised `reason` as a generic failure — more may be added.
52
+ */
53
+ export interface StreamToolCallFailed {
54
+ type: "tool_call.failed";
55
+ toolCallId: string;
56
+ toolName: string;
57
+ capabilityId: string;
58
+ reason: "policy_denied" | "tool_error";
59
+ }
32
60
  /**
33
61
  * Non-terminal: the agent reported its current structured result state for
34
62
  * this turn. Fires on every turn the agent reports state (including mid-run,
@@ -102,6 +130,6 @@ export interface StreamPausedForAuthorization {
102
130
  runId: string;
103
131
  conversationId: string;
104
132
  }
105
- export type StreamEvent = StreamDelta | StreamToolCallStarted | StreamToolCallCompleted | StreamState | StreamPlanProgress | StreamDone | StreamError | StreamPausedForApproval | StreamPausedForAuthorization;
133
+ export type StreamEvent = StreamDelta | StreamToolCallStarted | StreamToolCallCompleted | StreamToolCallFailed | StreamState | StreamPlanProgress | StreamDone | StreamError | StreamPausedForApproval | StreamPausedForAuthorization;
106
134
  export declare function isTerminalStreamEvent(e: StreamEvent): boolean;
107
135
  //# sourceMappingURL=streamEvents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"streamEvents.d.ts","sourceRoot":"","sources":["../../src/streamEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,SAAS,CAAA;AAEhB,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,iCAAiC;AACjC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,kCAAkC;AAClC,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACxC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAA;IACrB,uCAAuC;IACvC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,YAAY,CAAA;IAC9C,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,qDAAqD;IACrD,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB;;;;OAIG;IACH,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,8BAA8B;AAC9B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,iBAAiB,CAAA;IAC/B,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,sDAAsD;AACtD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,QAAQ,EAAE,eAAe,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,2EAA2E;AAC3E,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,0BAA0B,CAAA;IAChC,aAAa,EAAE,oBAAoB,CAAA;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,qBAAqB,GACrB,uBAAuB,GACvB,WAAW,GACX,kBAAkB,GAClB,UAAU,GACV,WAAW,GACX,uBAAuB,GACvB,4BAA4B,CAAA;AAShC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAE7D"}
1
+ {"version":3,"file":"streamEvents.d.ts","sourceRoot":"","sources":["../../src/streamEvents.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,8 @@
6
6
  * lives on the server.
7
7
  *
8
8
  * Terminal events (`done`, `error`, `paused_for_approval`) end the
9
- * iterator. `delta` and `tool_call.*` events arrive incrementally.
9
+ * iterator. `delta` and `tool_call.*` events arrive incrementally — note that
10
+ * `tool_call.failed` is NOT terminal: a tool failing does not end the run.
10
11
  */
11
12
  const TERMINAL_TYPES = new Set([
12
13
  "done",
@@ -1 +1 @@
1
- {"version":3,"file":"streamEvents.js","sourceRoot":"","sources":["../../src/streamEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA0HH,MAAM,cAAc,GAAqC,IAAI,GAAG,CAAC;IAC/D,MAAM;IACN,OAAO;IACP,qBAAqB;IACrB,0BAA0B;CAC3B,CAAC,CAAA;AAEF,MAAM,UAAU,qBAAqB,CAAC,CAAc;IAClD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"streamEvents.js","sourceRoot":"","sources":["../../src/streamEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuJH,MAAM,cAAc,GAAqC,IAAI,GAAG,CAAC;IAC/D,MAAM;IACN,OAAO;IACP,qBAAqB;IACrB,0BAA0B;CAC3B,CAAC,CAAA;AAEF,MAAM,UAAU,qBAAqB,CAAC,CAAc;IAClD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darqlabs/curator-sdk",
3
- "version": "0.1.6",
3
+ "version": "0.2.0",
4
4
  "description": "Official Curator SDK — talk to your deployed agents from server-side JavaScript or TypeScript.",
5
5
  "license": "MIT",
6
6
  "main": "./dist/cjs/index.js",