@meistrari/tela-sdk-js 2.12.0 → 2.13.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/dist/index.cjs CHANGED
@@ -4,6 +4,7 @@ const changeCase = require('change-case');
4
4
  const minimatch = require('minimatch');
5
5
  const z = require('zod');
6
6
  const Emittery = require('emittery');
7
+ const agentSdk = require('@meistrari/agent-sdk');
7
8
 
8
9
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
9
10
 
@@ -23,12 +24,12 @@ const changeCase__namespace = /*#__PURE__*/_interopNamespaceCompat(changeCase);
23
24
  const z__default = /*#__PURE__*/_interopDefaultCompat(z);
24
25
  const Emittery__default = /*#__PURE__*/_interopDefaultCompat(Emittery);
25
26
 
26
- const version = "2.12.0";
27
+ const version = "2.13.0";
27
28
 
28
- var __defProp$a = Object.defineProperty;
29
- var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
30
- var __publicField$a = (obj, key, value) => {
31
- __defNormalProp$a(obj, typeof key !== "symbol" ? key + "" : key, value);
29
+ var __defProp$c = Object.defineProperty;
30
+ var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
31
+ var __publicField$c = (obj, key, value) => {
32
+ __defNormalProp$c(obj, typeof key !== "symbol" ? key + "" : key, value);
32
33
  return value;
33
34
  };
34
35
  class TelaError extends Error {
@@ -58,7 +59,7 @@ class InvalidFileURL extends TelaError {
58
59
  class FileUploadError extends TelaError {
59
60
  constructor(message, statusCode) {
60
61
  super(`Failed to upload file: ${message} (Status code: ${statusCode})`);
61
- __publicField$a(this, "statusCode");
62
+ __publicField$c(this, "statusCode");
62
63
  this.statusCode = statusCode;
63
64
  }
64
65
  }
@@ -75,30 +76,44 @@ class InvalidExecutionModeError extends TelaError {
75
76
  class ExecutionFailedError extends TelaError {
76
77
  constructor(rawOutput) {
77
78
  super(`Execution failed: ${JSON.stringify(rawOutput)}`);
78
- __publicField$a(this, "rawOutput");
79
+ __publicField$c(this, "rawOutput");
79
80
  this.rawOutput = rawOutput;
80
81
  }
81
82
  }
82
83
  class TaskFailedError extends TelaError {
83
84
  constructor(rawTask, message, cause) {
84
85
  super(`Task failed: ${JSON.stringify(rawTask)}`, { cause });
85
- __publicField$a(this, "rawTask");
86
+ __publicField$c(this, "rawTask");
86
87
  this.rawTask = rawTask;
87
88
  }
88
89
  }
89
90
  class BatchExecutionFailedError extends TelaError {
90
91
  constructor(rawResponse) {
91
92
  super(`Batch execution failed: ${JSON.stringify(rawResponse)}`);
92
- __publicField$a(this, "rawResponse");
93
+ __publicField$c(this, "rawResponse");
93
94
  this.rawResponse = rawResponse;
94
95
  }
95
96
  }
97
+ class AgentExecutionFailedError extends TelaError {
98
+ constructor(payload) {
99
+ super(`Agent execution failed${payload.sessionId ? ` (session ${payload.sessionId})` : ""}: ${payload.error ?? "unknown error"}`);
100
+ /** The session id, when known. */
101
+ __publicField$c(this, "sessionId");
102
+ /** The server-provided error message, when available. */
103
+ __publicField$c(this, "error");
104
+ /** The full raw payload that triggered the failure. */
105
+ __publicField$c(this, "raw");
106
+ this.sessionId = payload.sessionId;
107
+ this.error = payload.error;
108
+ this.raw = payload;
109
+ }
110
+ }
96
111
  class APIError extends TelaError {
97
112
  constructor(statusCode, error, _message) {
98
113
  const message = error?.message ? typeof error.message === "string" ? error.message : JSON.stringify(error.message) : error ? JSON.stringify(error) : _message;
99
114
  super(message);
100
- __publicField$a(this, "statusCode");
101
- __publicField$a(this, "error");
115
+ __publicField$c(this, "statusCode");
116
+ __publicField$c(this, "error");
102
117
  this.statusCode = statusCode;
103
118
  this.error = error;
104
119
  }
@@ -140,7 +155,7 @@ class APIError extends TelaError {
140
155
  class UserAbortError extends APIError {
141
156
  constructor({ message } = {}) {
142
157
  super(void 0, void 0, message || "User aborted.");
143
- __publicField$a(this, "statusCode");
158
+ __publicField$c(this, "statusCode");
144
159
  }
145
160
  }
146
161
  class ConnectionError extends APIError {
@@ -149,7 +164,7 @@ class ConnectionError extends APIError {
149
164
  cause
150
165
  }) {
151
166
  super(void 0, void 0, message || "Connection error.");
152
- __publicField$a(this, "statusCode");
167
+ __publicField$c(this, "statusCode");
153
168
  if (cause)
154
169
  this.cause = cause;
155
170
  }
@@ -159,57 +174,57 @@ class ConnectionTimeout extends APIError {
159
174
  message
160
175
  } = {}) {
161
176
  super(void 0, void 0, message || "Request timed out.");
162
- __publicField$a(this, "statusCode");
177
+ __publicField$c(this, "statusCode");
163
178
  }
164
179
  }
165
180
  class BadRequestError extends APIError {
166
181
  constructor() {
167
182
  super(...arguments);
168
- __publicField$a(this, "statusCode", 400);
183
+ __publicField$c(this, "statusCode", 400);
169
184
  }
170
185
  // todo: handle validation errors from zod/typebox
171
186
  }
172
187
  class AuthenticationError extends APIError {
173
188
  constructor() {
174
189
  super(...arguments);
175
- __publicField$a(this, "statusCode", 401);
190
+ __publicField$c(this, "statusCode", 401);
176
191
  }
177
192
  }
178
193
  class AuthorizationError extends APIError {
179
194
  constructor() {
180
195
  super(...arguments);
181
- __publicField$a(this, "statusCode", 403);
196
+ __publicField$c(this, "statusCode", 403);
182
197
  }
183
198
  }
184
199
  class NotFoundError extends APIError {
185
200
  constructor() {
186
201
  super(...arguments);
187
- __publicField$a(this, "statusCode", 404);
202
+ __publicField$c(this, "statusCode", 404);
188
203
  }
189
204
  }
190
205
  class ConflictError extends APIError {
191
206
  constructor() {
192
207
  super(...arguments);
193
- __publicField$a(this, "statusCode", 409);
208
+ __publicField$c(this, "statusCode", 409);
194
209
  }
195
210
  }
196
211
  class UnprocessableEntityError extends APIError {
197
212
  constructor() {
198
213
  super(...arguments);
199
214
  // todo: check if tela returns 400 or 422 for zod errors
200
- __publicField$a(this, "statusCode", 422);
215
+ __publicField$c(this, "statusCode", 422);
201
216
  }
202
217
  }
203
218
  class RateLimitError extends APIError {
204
219
  constructor() {
205
220
  super(...arguments);
206
- __publicField$a(this, "statusCode", 429);
221
+ __publicField$c(this, "statusCode", 429);
207
222
  }
208
223
  }
209
224
  class InternalServerError extends APIError {
210
225
  constructor() {
211
226
  super(...arguments);
212
- __publicField$a(this, "statusCode", 500);
227
+ __publicField$c(this, "statusCode", 500);
213
228
  }
214
229
  }
215
230
  function toError(err) {
@@ -495,10 +510,10 @@ function transformDurationToMs(durationStr) {
495
510
  return Number.parseInt(amount) * multiplier;
496
511
  }
497
512
 
498
- var __defProp$9 = Object.defineProperty;
499
- var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
500
- var __publicField$9 = (obj, key, value) => {
501
- __defNormalProp$9(obj, typeof key !== "symbol" ? key + "" : key, value);
513
+ var __defProp$b = Object.defineProperty;
514
+ var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
515
+ var __publicField$b = (obj, key, value) => {
516
+ __defNormalProp$b(obj, typeof key !== "symbol" ? key + "" : key, value);
502
517
  return value;
503
518
  };
504
519
  class Stream {
@@ -762,9 +777,9 @@ function findDoubleNewlineIndex(buffer) {
762
777
  }
763
778
  class SSEDecoder {
764
779
  constructor() {
765
- __publicField$9(this, "data");
766
- __publicField$9(this, "event");
767
- __publicField$9(this, "chunks");
780
+ __publicField$b(this, "data");
781
+ __publicField$b(this, "event");
782
+ __publicField$b(this, "chunks");
768
783
  this.event = null;
769
784
  this.data = [];
770
785
  this.chunks = [];
@@ -805,9 +820,9 @@ class SSEDecoder {
805
820
  const _LineDecoder = class _LineDecoder {
806
821
  // TextDecoder found in browsers; not typed to avoid pulling in either "dom" or "node" types.
807
822
  constructor() {
808
- __publicField$9(this, "buffer");
809
- __publicField$9(this, "trailingCR");
810
- __publicField$9(this, "textDecoder");
823
+ __publicField$b(this, "buffer");
824
+ __publicField$b(this, "trailingCR");
825
+ __publicField$b(this, "textDecoder");
811
826
  this.buffer = [];
812
827
  this.trailingCR = false;
813
828
  }
@@ -882,8 +897,8 @@ const _LineDecoder = class _LineDecoder {
882
897
  }
883
898
  };
884
899
  // prettier-ignore
885
- __publicField$9(_LineDecoder, "NEWLINE_CHARS", /* @__PURE__ */ new Set(["\n", "\r"]));
886
- __publicField$9(_LineDecoder, "NEWLINE_REGEXP", /\r\n|[\n\r]/g);
900
+ __publicField$b(_LineDecoder, "NEWLINE_CHARS", /* @__PURE__ */ new Set(["\n", "\r"]));
901
+ __publicField$b(_LineDecoder, "NEWLINE_REGEXP", /\r\n|[\n\r]/g);
887
902
  let LineDecoder = _LineDecoder;
888
903
  function partition(str, delimiter) {
889
904
  const index = str.indexOf(delimiter);
@@ -920,10 +935,10 @@ function readableStreamAsyncIterable(stream) {
920
935
  };
921
936
  }
922
937
 
923
- var __defProp$8 = Object.defineProperty;
924
- var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
925
- var __publicField$8 = (obj, key, value) => {
926
- __defNormalProp$8(obj, typeof key !== "symbol" ? key + "" : key, value);
938
+ var __defProp$a = Object.defineProperty;
939
+ var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
940
+ var __publicField$a = (obj, key, value) => {
941
+ __defNormalProp$a(obj, typeof key !== "symbol" ? key + "" : key, value);
927
942
  return value;
928
943
  };
929
944
  function getRequestIdFromResponse(response) {
@@ -999,10 +1014,10 @@ function transformObjectCase(obj, transformCase) {
999
1014
  }
1000
1015
  class BaseClient {
1001
1016
  constructor({ baseURL, maxRetries = 5, timeout = 0 }) {
1002
- __publicField$8(this, "baseURL");
1003
- __publicField$8(this, "maxRetries");
1004
- __publicField$8(this, "timeout");
1005
- __publicField$8(this, "fetch");
1017
+ __publicField$a(this, "baseURL");
1018
+ __publicField$a(this, "maxRetries");
1019
+ __publicField$a(this, "timeout");
1020
+ __publicField$a(this, "fetch");
1006
1021
  this.baseURL = baseURL;
1007
1022
  this.maxRetries = validateMaxRetries(maxRetries);
1008
1023
  this.timeout = validateTimeout(timeout);
@@ -1040,6 +1055,36 @@ class BaseClient {
1040
1055
  delete(path, opts) {
1041
1056
  return this.methodRequest("DELETE", path, opts);
1042
1057
  }
1058
+ /**
1059
+ * Performs a request and returns the raw {@link Response} together with its
1060
+ * {@link AbortController}, bypassing JSON parsing and case transformation.
1061
+ *
1062
+ * Intended for consumers that parse the response body themselves — e.g.
1063
+ * custom Server-Sent Events streams whose framing differs from the chat
1064
+ * completion stream handled by {@link Stream.fromSSEResponse}. Reuses the
1065
+ * client's retry, auth, timeout, and `baseURL` handling.
1066
+ *
1067
+ * @param method - The HTTP method to use.
1068
+ * @param path - Request path (relative to `baseURL`/`opts.baseURL`, or absolute).
1069
+ * @param opts - Request options (notably `baseURL`, `query`, and `signal`).
1070
+ * @returns The live `Response` and the `AbortController` controlling it.
1071
+ */
1072
+ async requestRaw(method, path, opts) {
1073
+ const { headers: customHeaders, ...restOpts } = opts ?? {};
1074
+ const headers = this.createHeaders();
1075
+ if (customHeaders) {
1076
+ for (const [key, value] of customHeaders.entries()) {
1077
+ headers.set(key, value);
1078
+ }
1079
+ }
1080
+ const { response, controller } = await this.request({
1081
+ method,
1082
+ path,
1083
+ headers,
1084
+ ...restOpts
1085
+ });
1086
+ return { response, controller };
1087
+ }
1043
1088
  async methodRequest(method, path, opts) {
1044
1089
  const { transformCase = true, headers: customHeaders, ...restOpts } = opts ?? {};
1045
1090
  const headers = this.createHeaders();
@@ -1287,10 +1332,10 @@ async function getStreamSize(stream) {
1287
1332
  return size;
1288
1333
  }
1289
1334
 
1290
- var __defProp$7 = Object.defineProperty;
1291
- var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1292
- var __publicField$7 = (obj, key, value) => {
1293
- __defNormalProp$7(obj, typeof key !== "symbol" ? key + "" : key, value);
1335
+ var __defProp$9 = Object.defineProperty;
1336
+ var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1337
+ var __publicField$9 = (obj, key, value) => {
1338
+ __defNormalProp$9(obj, typeof key !== "symbol" ? key + "" : key, value);
1294
1339
  return value;
1295
1340
  };
1296
1341
  function TelaFileSchema() {
@@ -1298,11 +1343,11 @@ function TelaFileSchema() {
1298
1343
  }
1299
1344
  class TelaFile {
1300
1345
  constructor(file, options = {}) {
1301
- __publicField$7(this, "_file");
1302
- __publicField$7(this, "_options");
1303
- __publicField$7(this, "_size", null);
1304
- __publicField$7(this, "_mimeType");
1305
- __publicField$7(this, "_name");
1346
+ __publicField$9(this, "_file");
1347
+ __publicField$9(this, "_options");
1348
+ __publicField$9(this, "_size", null);
1349
+ __publicField$9(this, "_mimeType");
1350
+ __publicField$9(this, "_name");
1306
1351
  this._file = file;
1307
1352
  if (file instanceof File || file instanceof Blob) {
1308
1353
  this._size = file.size;
@@ -1781,10 +1826,10 @@ async function streamFile(vaultReference, client) {
1781
1826
  });
1782
1827
  }
1783
1828
 
1784
- var __defProp$6 = Object.defineProperty;
1785
- var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1786
- var __publicField$6 = (obj, key, value) => {
1787
- __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
1829
+ var __defProp$8 = Object.defineProperty;
1830
+ var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1831
+ var __publicField$8 = (obj, key, value) => {
1832
+ __defNormalProp$8(obj, typeof key !== "symbol" ? key + "" : key, value);
1788
1833
  return value;
1789
1834
  };
1790
1835
  function timeout(ms, signal) {
@@ -1800,10 +1845,10 @@ function timeout(ms, signal) {
1800
1845
  }
1801
1846
  class Poller {
1802
1847
  constructor({ interval, timeout: timeout2, abortSignal }) {
1803
- __publicField$6(this, "_interval");
1804
- __publicField$6(this, "_timeout");
1805
- __publicField$6(this, "_abortSignal");
1806
- __publicField$6(this, "_internalAbortController");
1848
+ __publicField$8(this, "_interval");
1849
+ __publicField$8(this, "_timeout");
1850
+ __publicField$8(this, "_abortSignal");
1851
+ __publicField$8(this, "_internalAbortController");
1807
1852
  if (interval <= 0) {
1808
1853
  throw new TelaError("Interval must be greater than 0");
1809
1854
  }
@@ -1864,10 +1909,10 @@ class Poller {
1864
1909
  }
1865
1910
  }
1866
1911
 
1867
- var __defProp$5 = Object.defineProperty;
1868
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1869
- var __publicField$5 = (obj, key, value) => {
1870
- __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
1912
+ var __defProp$7 = Object.defineProperty;
1913
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1914
+ var __publicField$7 = (obj, key, value) => {
1915
+ __defNormalProp$7(obj, typeof key !== "symbol" ? key + "" : key, value);
1871
1916
  return value;
1872
1917
  };
1873
1918
  function isUUID(str) {
@@ -1923,21 +1968,21 @@ class CanvasExecution extends Emittery__default {
1923
1968
  */
1924
1969
  constructor(variables, params = { async: false }, outputSchema, client, isTask = false) {
1925
1970
  super();
1926
- __publicField$5(this, "_id");
1927
- __publicField$5(this, "_status");
1928
- __publicField$5(this, "_variables");
1929
- __publicField$5(this, "_params");
1930
- __publicField$5(this, "_client");
1931
- __publicField$5(this, "_outputSchema");
1932
- __publicField$5(this, "_skipResultValidation");
1933
- __publicField$5(this, "_abortController");
1934
- __publicField$5(this, "_isTask");
1935
- __publicField$5(this, "_headers");
1936
- __publicField$5(this, "_resultPromise");
1937
- __publicField$5(this, "_stream");
1938
- __publicField$5(this, "_rawResultValue");
1939
- __publicField$5(this, "_requestId");
1940
- __publicField$5(this, "_task");
1971
+ __publicField$7(this, "_id");
1972
+ __publicField$7(this, "_status");
1973
+ __publicField$7(this, "_variables");
1974
+ __publicField$7(this, "_params");
1975
+ __publicField$7(this, "_client");
1976
+ __publicField$7(this, "_outputSchema");
1977
+ __publicField$7(this, "_skipResultValidation");
1978
+ __publicField$7(this, "_abortController");
1979
+ __publicField$7(this, "_isTask");
1980
+ __publicField$7(this, "_headers");
1981
+ __publicField$7(this, "_resultPromise");
1982
+ __publicField$7(this, "_stream");
1983
+ __publicField$7(this, "_rawResultValue");
1984
+ __publicField$7(this, "_requestId");
1985
+ __publicField$7(this, "_task");
1941
1986
  this._variables = variables;
1942
1987
  this._params = params;
1943
1988
  this._outputSchema = outputSchema;
@@ -2568,10 +2613,10 @@ class CanvasExecution extends Emittery__default {
2568
2613
  }
2569
2614
  }
2570
2615
 
2571
- var __defProp$4 = Object.defineProperty;
2572
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2573
- var __publicField$4 = (obj, key, value) => {
2574
- __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
2616
+ var __defProp$6 = Object.defineProperty;
2617
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2618
+ var __publicField$6 = (obj, key, value) => {
2619
+ __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
2575
2620
  return value;
2576
2621
  };
2577
2622
  function resolveBatchQueue(queue) {
@@ -2723,8 +2768,8 @@ class BatchExecutionResult {
2723
2768
  * @internal
2724
2769
  */
2725
2770
  constructor(client, response) {
2726
- __publicField$4(this, "_client");
2727
- __publicField$4(this, "_response");
2771
+ __publicField$6(this, "_client");
2772
+ __publicField$6(this, "_response");
2728
2773
  this._client = client;
2729
2774
  this._response = response;
2730
2775
  }
@@ -3000,13 +3045,13 @@ class BatchExecution extends Emittery__default {
3000
3045
  */
3001
3046
  constructor(id, client, params = {}, creationResponse) {
3002
3047
  super();
3003
- __publicField$4(this, "_client");
3004
- __publicField$4(this, "_id");
3005
- __publicField$4(this, "_params");
3006
- __publicField$4(this, "_abortController");
3007
- __publicField$4(this, "_creationResponse");
3008
- __publicField$4(this, "_status", "created");
3009
- __publicField$4(this, "_resultPromise");
3048
+ __publicField$6(this, "_client");
3049
+ __publicField$6(this, "_id");
3050
+ __publicField$6(this, "_params");
3051
+ __publicField$6(this, "_abortController");
3052
+ __publicField$6(this, "_creationResponse");
3053
+ __publicField$6(this, "_status", "created");
3054
+ __publicField$6(this, "_resultPromise");
3010
3055
  this._id = id;
3011
3056
  this._client = client;
3012
3057
  this._params = params;
@@ -3219,10 +3264,10 @@ class Batch {
3219
3264
  * @internal
3220
3265
  */
3221
3266
  constructor(client, canvasIdentifier, params = {}) {
3222
- __publicField$4(this, "_client");
3223
- __publicField$4(this, "_canvasIdentifier");
3224
- __publicField$4(this, "_items", []);
3225
- __publicField$4(this, "_params");
3267
+ __publicField$6(this, "_client");
3268
+ __publicField$6(this, "_canvasIdentifier");
3269
+ __publicField$6(this, "_items", []);
3270
+ __publicField$6(this, "_params");
3226
3271
  this._client = client;
3227
3272
  this._canvasIdentifier = canvasIdentifier;
3228
3273
  this._params = params;
@@ -3367,10 +3412,10 @@ class Batch {
3367
3412
  }
3368
3413
  }
3369
3414
 
3370
- var __defProp$3 = Object.defineProperty;
3371
- var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3372
- var __publicField$3 = (obj, key, value) => {
3373
- __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
3415
+ var __defProp$5 = Object.defineProperty;
3416
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3417
+ var __publicField$5 = (obj, key, value) => {
3418
+ __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
3374
3419
  return value;
3375
3420
  };
3376
3421
  function fetchById(id, client) {
@@ -3402,15 +3447,15 @@ class Canvas {
3402
3447
  * @private
3403
3448
  */
3404
3449
  constructor({ id, applicationId, name, versionId, input, output, client, variables, isWorkflow }) {
3405
- __publicField$3(this, "_id");
3406
- __publicField$3(this, "_versionId");
3407
- __publicField$3(this, "_applicationId");
3408
- __publicField$3(this, "_name");
3409
- __publicField$3(this, "_input");
3410
- __publicField$3(this, "_output");
3411
- __publicField$3(this, "_client");
3412
- __publicField$3(this, "_variables");
3413
- __publicField$3(this, "_isWorkflow");
3450
+ __publicField$5(this, "_id");
3451
+ __publicField$5(this, "_versionId");
3452
+ __publicField$5(this, "_applicationId");
3453
+ __publicField$5(this, "_name");
3454
+ __publicField$5(this, "_input");
3455
+ __publicField$5(this, "_output");
3456
+ __publicField$5(this, "_client");
3457
+ __publicField$5(this, "_variables");
3458
+ __publicField$5(this, "_isWorkflow");
3414
3459
  this._id = id;
3415
3460
  this._applicationId = applicationId;
3416
3461
  this._name = name;
@@ -3667,24 +3712,24 @@ z.z.object({
3667
3712
  requestId: z.z.string()
3668
3713
  });
3669
3714
 
3670
- var __defProp$2 = Object.defineProperty;
3671
- var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3672
- var __publicField$2 = (obj, key, value) => {
3673
- __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
3715
+ var __defProp$4 = Object.defineProperty;
3716
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3717
+ var __publicField$4 = (obj, key, value) => {
3718
+ __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
3674
3719
  return value;
3675
3720
  };
3676
3721
  class Task extends Emittery__default {
3677
3722
  constructor(client, variables, task, requestId, outputSchema, skipResultValidation = false) {
3678
3723
  super();
3679
- __publicField$2(this, "_variables");
3680
- __publicField$2(this, "_task");
3681
- __publicField$2(this, "_abortController", new AbortController());
3682
- __publicField$2(this, "_client");
3683
- __publicField$2(this, "_outputSchema");
3684
- __publicField$2(this, "_skipResultValidation");
3685
- __publicField$2(this, "_resultPromise");
3686
- __publicField$2(this, "_status");
3687
- __publicField$2(this, "_requestId");
3724
+ __publicField$4(this, "_variables");
3725
+ __publicField$4(this, "_task");
3726
+ __publicField$4(this, "_abortController", new AbortController());
3727
+ __publicField$4(this, "_client");
3728
+ __publicField$4(this, "_outputSchema");
3729
+ __publicField$4(this, "_skipResultValidation");
3730
+ __publicField$4(this, "_resultPromise");
3731
+ __publicField$4(this, "_status");
3732
+ __publicField$4(this, "_requestId");
3688
3733
  this._variables = variables;
3689
3734
  this._task = task;
3690
3735
  this._client = client;
@@ -3932,10 +3977,10 @@ class Task extends Emittery__default {
3932
3977
  }
3933
3978
  }
3934
3979
 
3935
- var __defProp$1 = Object.defineProperty;
3936
- var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3937
- var __publicField$1 = (obj, key, value) => {
3938
- __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
3980
+ var __defProp$3 = Object.defineProperty;
3981
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3982
+ var __publicField$3 = (obj, key, value) => {
3983
+ __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
3939
3984
  return value;
3940
3985
  };
3941
3986
  const DateRange = z__default.object({
@@ -3981,11 +4026,11 @@ class Workstation {
3981
4026
  * @internal
3982
4027
  */
3983
4028
  constructor({ client, applicationId, promptVersion, input, output }) {
3984
- __publicField$1(this, "_id");
3985
- __publicField$1(this, "_promptVersion");
3986
- __publicField$1(this, "_client");
3987
- __publicField$1(this, "_input");
3988
- __publicField$1(this, "_output");
4029
+ __publicField$3(this, "_id");
4030
+ __publicField$3(this, "_promptVersion");
4031
+ __publicField$3(this, "_client");
4032
+ __publicField$3(this, "_input");
4033
+ __publicField$3(this, "_output");
3989
4034
  this._id = applicationId;
3990
4035
  this._promptVersion = promptVersion;
3991
4036
  this._client = client;
@@ -4676,6 +4721,490 @@ class Vault {
4676
4721
  }
4677
4722
  }
4678
4723
 
4724
+ var __defProp$2 = Object.defineProperty;
4725
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4726
+ var __publicField$2 = (obj, key, value) => {
4727
+ __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
4728
+ return value;
4729
+ };
4730
+ const AGENT_NO_TRANSFORM$1 = { transformCase: false };
4731
+ const DEFAULT_MESSAGE = "Execute";
4732
+ const RECONNECT_DELAY_MS = 2e3;
4733
+ const MAX_STREAM_RECONNECT_ERRORS = 5;
4734
+ class AgentExecution extends Emittery__default {
4735
+ constructor(context) {
4736
+ super();
4737
+ __publicField$2(this, "_sessionId");
4738
+ __publicField$2(this, "_status");
4739
+ __publicField$2(this, "_cursor");
4740
+ __publicField$2(this, "_resultPromise");
4741
+ __publicField$2(this, "_stream");
4742
+ __publicField$2(this, "_abortController");
4743
+ __publicField$2(this, "_client");
4744
+ __publicField$2(this, "_agentId");
4745
+ __publicField$2(this, "_mode");
4746
+ __publicField$2(this, "_reconnectDelayMs");
4747
+ this._client = context.client;
4748
+ this._agentId = context.agentId;
4749
+ this._mode = context.mode ?? "run";
4750
+ this._sessionId = context.sessionId;
4751
+ this._reconnectDelayMs = context.reconnectDelayMs ?? RECONNECT_DELAY_MS;
4752
+ this._abortController = new AbortController();
4753
+ }
4754
+ /**
4755
+ * Builds a resumable execution bound to an existing session id.
4756
+ *
4757
+ * Used by `tela.agents.getSession()`. The returned execution can `.stream`,
4758
+ * `.result`, `.cancel`, or `.recover` — but not `.continue` (a new turn
4759
+ * needs the agent id).
4760
+ */
4761
+ static fromSession(sessionId, client) {
4762
+ return new AgentExecution({ client, sessionId });
4763
+ }
4764
+ /**
4765
+ * The session id assigned by the server.
4766
+ *
4767
+ * @throws {ExecutionNotStartedError} If the execution has not started yet.
4768
+ */
4769
+ get sessionId() {
4770
+ if (!this._sessionId)
4771
+ throw new ExecutionNotStartedError();
4772
+ return this._sessionId;
4773
+ }
4774
+ /**
4775
+ * The latest known session status.
4776
+ *
4777
+ * @throws {ExecutionNotStartedError} If no status has been observed yet.
4778
+ */
4779
+ get status() {
4780
+ if (!this._status)
4781
+ throw new ExecutionNotStartedError();
4782
+ return this._status;
4783
+ }
4784
+ set status(status) {
4785
+ const changed = this._status !== status;
4786
+ this._status = status;
4787
+ if (changed)
4788
+ this.emit("status", status).catch(() => {
4789
+ });
4790
+ }
4791
+ /**
4792
+ * Starts (or continues) the session by POSTing to `/agent/:id/run`
4793
+ * (or `/agent/:id/test` in draft mode). Resets any in-flight stream/result
4794
+ * so the next read re-opens.
4795
+ *
4796
+ * @throws {AgentExecutionFailedError} If the server rejects the execution.
4797
+ */
4798
+ async start(params) {
4799
+ if (!this._agentId)
4800
+ throw new InvalidExecutionModeError("agents: this execution is bound to an existing session \u2014 use recover() to resume it (a new turn requires the agent id).");
4801
+ this._abortController = new AbortController();
4802
+ const message = resolveMessage(params);
4803
+ const inputSchema = await this.resolveInputs(params.inputs);
4804
+ const attachments = await this.resolveAttachments(params.attachments);
4805
+ const body = {
4806
+ message,
4807
+ sessionId: this._sessionId,
4808
+ inputSchema,
4809
+ attachments,
4810
+ environmentVariables: params.environmentVariables
4811
+ };
4812
+ if (this._mode === "test") {
4813
+ body.ref = params.ref;
4814
+ body.isMultiturn = params.isMultiturn;
4815
+ }
4816
+ const envelope = await this._client.post(`/agent/${this._agentId}/${this._mode}`, {
4817
+ ...AGENT_NO_TRANSFORM$1,
4818
+ body,
4819
+ signal: this._abortController.signal,
4820
+ headers: params.headers ? new Headers(params.headers) : void 0
4821
+ });
4822
+ const response = envelope.data;
4823
+ if (!response?.success || !response.sessionId)
4824
+ throw new AgentExecutionFailedError({ sessionId: response?.sessionId, error: response?.error });
4825
+ this._sessionId = response.sessionId;
4826
+ this._stream = void 0;
4827
+ this._resultPromise = void 0;
4828
+ this.status = "pending";
4829
+ return this;
4830
+ }
4831
+ /**
4832
+ * Continues this session with another turn (same `sessionId`).
4833
+ *
4834
+ * @returns A promise-like handle for the new turn (`.result` / `.stream`).
4835
+ */
4836
+ continue(params) {
4837
+ return toExecutionPromise(this, params);
4838
+ }
4839
+ /**
4840
+ * Recovers a failed/terminal session (`POST /agent/sessions/:id/recover`),
4841
+ * then re-opens the stream from the current cursor.
4842
+ *
4843
+ * @throws {ExecutionNotStartedError} If there is no session to recover.
4844
+ * @throws {AgentExecutionFailedError} If recovery is rejected.
4845
+ */
4846
+ async recover() {
4847
+ if (!this._sessionId)
4848
+ throw new ExecutionNotStartedError();
4849
+ this._abortController = new AbortController();
4850
+ const envelope = await this._client.post(`/agent/sessions/${this._sessionId}/recover`, {
4851
+ ...AGENT_NO_TRANSFORM$1,
4852
+ signal: this._abortController.signal
4853
+ });
4854
+ const response = envelope.data;
4855
+ if (!response?.success || !response.sessionId)
4856
+ throw new AgentExecutionFailedError({ sessionId: response?.sessionId ?? this._sessionId, error: response?.error });
4857
+ this._sessionId = response.sessionId;
4858
+ this._stream = void 0;
4859
+ this._resultPromise = void 0;
4860
+ this.status = "pending";
4861
+ return this;
4862
+ }
4863
+ /**
4864
+ * A live, typed stream of session events. Memoized: repeated access returns
4865
+ * the same generator. Updates `status` and the resume cursor as it goes.
4866
+ *
4867
+ * @throws {ExecutionNotStartedError} If the session has no id yet.
4868
+ */
4869
+ get stream() {
4870
+ if (!this._stream)
4871
+ this._stream = this.openStream();
4872
+ return this._stream;
4873
+ }
4874
+ async *openStream() {
4875
+ if (!this._sessionId)
4876
+ throw new ExecutionNotStartedError();
4877
+ let consecutiveErrors = 0;
4878
+ try {
4879
+ while (!this._abortController.signal.aborted) {
4880
+ try {
4881
+ const { response } = await this._client.requestRaw("GET", `/agent/sessions/${this._sessionId}`, {
4882
+ ...AGENT_NO_TRANSFORM$1,
4883
+ query: this._cursor !== void 0 ? { cursor: this._cursor } : void 0,
4884
+ signal: this._abortController.signal,
4885
+ headers: new Headers({ Accept: "text/event-stream" })
4886
+ });
4887
+ if (!response.body)
4888
+ throw new Error("agent session stream response has no body");
4889
+ for await (const event of agentSdk.parseSessionStream(response.body)) {
4890
+ consecutiveErrors = 0;
4891
+ if ("status" in event)
4892
+ this.status = event.status;
4893
+ if ("nextCursor" in event && event.nextCursor != null)
4894
+ this._cursor = event.nextCursor;
4895
+ if (event.kind === "steps")
4896
+ this.emit("step", event.steps).catch(() => {
4897
+ });
4898
+ if (event.kind === "result")
4899
+ this.emit("result", event.result).catch(() => {
4900
+ });
4901
+ yield event;
4902
+ switch (event.kind) {
4903
+ case "error":
4904
+ throw this.fail(event.sessionId, event.error);
4905
+ case "result":
4906
+ return;
4907
+ case "status":
4908
+ case "steps":
4909
+ case "timeline-finalize":
4910
+ if (event.status === "failed")
4911
+ throw this.fail(event.sessionId, "error" in event ? event.error : void 0);
4912
+ if (event.status === "cancelled")
4913
+ return;
4914
+ break;
4915
+ }
4916
+ }
4917
+ } catch (error) {
4918
+ if (error instanceof AgentExecutionFailedError)
4919
+ throw error;
4920
+ if (this._abortController.signal.aborted)
4921
+ return;
4922
+ if (++consecutiveErrors > MAX_STREAM_RECONNECT_ERRORS)
4923
+ throw error;
4924
+ }
4925
+ if (this._abortController.signal.aborted)
4926
+ return;
4927
+ await delay(this._reconnectDelayMs, this._abortController.signal);
4928
+ }
4929
+ } finally {
4930
+ this._abortController.abort();
4931
+ }
4932
+ }
4933
+ fail(sessionId, error) {
4934
+ const failure = new AgentExecutionFailedError({ sessionId, error });
4935
+ this.status = "failed";
4936
+ this.emit("error", failure).catch(() => {
4937
+ });
4938
+ return failure;
4939
+ }
4940
+ /**
4941
+ * Resolves with the session's result payload, lazily consuming the stream.
4942
+ *
4943
+ * Memoized: repeated access returns the same promise. Resolves on the first
4944
+ * `result` event — for `completed` *or* `waiting_messages`. Inspect
4945
+ * `.status` to tell them apart, and `.continue()` from a paused turn.
4946
+ *
4947
+ * @throws {AgentExecutionFailedError} If the session fails or the stream
4948
+ * ends without producing a result.
4949
+ */
4950
+ get result() {
4951
+ if (this._resultPromise)
4952
+ return this._resultPromise;
4953
+ this._resultPromise = (async () => {
4954
+ let lastResult;
4955
+ for await (const event of this.stream) {
4956
+ if (event.kind === "result")
4957
+ lastResult = event.result;
4958
+ }
4959
+ if (lastResult !== void 0)
4960
+ return lastResult;
4961
+ throw new AgentExecutionFailedError({
4962
+ sessionId: this._sessionId,
4963
+ error: "session stream ended without a result"
4964
+ });
4965
+ })();
4966
+ this._resultPromise.catch(() => {
4967
+ });
4968
+ return this._resultPromise;
4969
+ }
4970
+ /**
4971
+ * Cancels the session: aborts the open stream immediately, then requests a
4972
+ * server-side cancel (`POST /agent/sessions/:id/cancel`).
4973
+ */
4974
+ async cancel() {
4975
+ this._abortController.abort();
4976
+ if (this._sessionId) {
4977
+ await this._client.post(`/agent/sessions/${this._sessionId}/cancel`, { ...AGENT_NO_TRANSFORM$1 }).catch(() => {
4978
+ });
4979
+ }
4980
+ }
4981
+ /**
4982
+ * Resolves the agent's input values into {@link AgentInputItem}s, uploading
4983
+ * any `TelaFile`s to the vault and passing strings through as text.
4984
+ */
4985
+ async resolveInputs(inputs) {
4986
+ if (!inputs)
4987
+ return void 0;
4988
+ const entries = Object.entries(inputs);
4989
+ if (entries.length === 0)
4990
+ return void 0;
4991
+ return Promise.all(
4992
+ entries.map(async ([name, value]) => {
4993
+ if (isTelaFile(value)) {
4994
+ const { fileUrl } = await uploadFile(value, this._client);
4995
+ return { type: "file", name, vaultRef: fileUrl, filename: value.name ?? name };
4996
+ }
4997
+ return { type: "text", name, content: value };
4998
+ })
4999
+ );
5000
+ }
5001
+ /**
5002
+ * Resolves attachments to {@link AgentAttachment}s, uploading any `TelaFile`s.
5003
+ */
5004
+ async resolveAttachments(attachments) {
5005
+ if (!attachments || attachments.length === 0)
5006
+ return void 0;
5007
+ return Promise.all(
5008
+ attachments.map(async (attachment) => {
5009
+ if (isTelaFile(attachment)) {
5010
+ const { fileUrl } = await uploadFile(attachment, this._client);
5011
+ return { vaultRef: fileUrl, filename: attachment.name ?? "file" };
5012
+ }
5013
+ return attachment;
5014
+ })
5015
+ );
5016
+ }
5017
+ }
5018
+ function resolveMessage(params) {
5019
+ if (params.prompt !== void 0 && params.message !== void 0)
5020
+ throw new InvalidExecutionModeError("agents.execute: provide either `prompt` or `message`, not both");
5021
+ return params.prompt ?? params.message ?? DEFAULT_MESSAGE;
5022
+ }
5023
+ function delay(ms, signal) {
5024
+ return new Promise((resolve) => {
5025
+ if (signal.aborted) {
5026
+ resolve();
5027
+ return;
5028
+ }
5029
+ const timeout = setTimeout(resolve, ms);
5030
+ signal.addEventListener("abort", () => {
5031
+ clearTimeout(timeout);
5032
+ resolve();
5033
+ }, { once: true });
5034
+ });
5035
+ }
5036
+ function toExecutionPromise(execution, params) {
5037
+ let started;
5038
+ let stream;
5039
+ const ensureStarted = () => started ?? (started = execution.start(params));
5040
+ async function* deferredStream() {
5041
+ await ensureStarted();
5042
+ yield* execution.stream;
5043
+ }
5044
+ return {
5045
+ then(onfulfilled, onrejected) {
5046
+ return ensureStarted().then(() => onfulfilled?.(execution) ?? execution).catch(onrejected);
5047
+ },
5048
+ get result() {
5049
+ return ensureStarted().then(() => execution.result);
5050
+ },
5051
+ get stream() {
5052
+ return stream ?? (stream = deferredStream());
5053
+ }
5054
+ };
5055
+ }
5056
+
5057
+ var __defProp$1 = Object.defineProperty;
5058
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5059
+ var __publicField$1 = (obj, key, value) => {
5060
+ __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
5061
+ return value;
5062
+ };
5063
+ class Agent {
5064
+ constructor(client, record) {
5065
+ __publicField$1(this, "_client");
5066
+ __publicField$1(this, "_record");
5067
+ this._client = client;
5068
+ this._record = record;
5069
+ }
5070
+ /** The agent id. */
5071
+ get id() {
5072
+ return this._record.id;
5073
+ }
5074
+ /** The agent's display title. */
5075
+ get title() {
5076
+ return this._record.title;
5077
+ }
5078
+ /** The organization that owns the agent's repository. */
5079
+ get organizationName() {
5080
+ return this._record.organizationName;
5081
+ }
5082
+ /** The agent's repository name. */
5083
+ get repository() {
5084
+ return this._record.repository;
5085
+ }
5086
+ /** The agent's declared input variables. */
5087
+ get inputSchema() {
5088
+ return this._record.inputSchema;
5089
+ }
5090
+ /** The published commit id, or `null` if the agent has never been published. */
5091
+ get publishedId() {
5092
+ return this._record.publishedId;
5093
+ }
5094
+ /** Whether the agent supports multi-turn sessions. */
5095
+ get isMultiturn() {
5096
+ return this._record.isMultiturn ?? false;
5097
+ }
5098
+ /** The full agent record as returned by the API. */
5099
+ get record() {
5100
+ return this._record;
5101
+ }
5102
+ /**
5103
+ * Executes the agent. By default this runs the **published** version
5104
+ * (`POST /agent/:id/run`); pass `{ draft: true }` to run the current draft
5105
+ * (`POST /agent/:id/test`).
5106
+ *
5107
+ * Returns a promise-like handle: `await` it for the {@link AgentExecution},
5108
+ * read `.result` for the final payload, or iterate `.stream` for live events.
5109
+ *
5110
+ * @param params - Execution parameters (notably `prompt`, `inputs`, `draft`).
5111
+ */
5112
+ execute(params = {}) {
5113
+ const execution = new AgentExecution({
5114
+ client: this._client,
5115
+ agentId: this._record.id,
5116
+ mode: params.draft ? "test" : "run"
5117
+ });
5118
+ return toExecutionPromise(execution, params);
5119
+ }
5120
+ }
5121
+
5122
+ const AGENT_NO_TRANSFORM = { transformCase: false };
5123
+ class Agents {
5124
+ constructor(client) {
5125
+ this.client = client;
5126
+ }
5127
+ /**
5128
+ * Lists the agents available in the workspace (optionally filtered by project).
5129
+ */
5130
+ async list(query = {}) {
5131
+ const response = await this.client.get("/agent", {
5132
+ ...AGENT_NO_TRANSFORM,
5133
+ query
5134
+ });
5135
+ return response.data;
5136
+ }
5137
+ /**
5138
+ * Fetches an agent by id and returns a handle for running it.
5139
+ */
5140
+ async get(agentId) {
5141
+ const response = await this.client.get(`/agent/${agentId}`, {
5142
+ ...AGENT_NO_TRANSFORM
5143
+ });
5144
+ return new Agent(this.client, response.data);
5145
+ }
5146
+ /**
5147
+ * Executes an agent by id without first fetching its record.
5148
+ *
5149
+ * Convenience shortcut equivalent to `(await get(id)).execute(params)` but
5150
+ * skipping the metadata fetch. Defaults to the published version; pass
5151
+ * `{ draft: true }` to run the draft.
5152
+ */
5153
+ execute(agentId, params = {}) {
5154
+ const execution = new AgentExecution({
5155
+ client: this.client,
5156
+ agentId,
5157
+ mode: params.draft ? "test" : "run"
5158
+ });
5159
+ return toExecutionPromise(execution, params);
5160
+ }
5161
+ /**
5162
+ * Returns a resumable execution bound to an existing session id. Use it to
5163
+ * monitor (`.stream` / `.result`), `.cancel()`, or `.recover()` a session
5164
+ * that was started elsewhere.
5165
+ */
5166
+ async getSession(sessionId) {
5167
+ return AgentExecution.fromSession(sessionId, this.client);
5168
+ }
5169
+ /**
5170
+ * Fetches the session timeline summary (`GET /agent/sessions/:id/timeline`):
5171
+ * duration, token/cost metrics, prompt, and spans.
5172
+ */
5173
+ async getTimeline(sessionId) {
5174
+ const response = await this.client.get(`/agent/sessions/${sessionId}/timeline`, {
5175
+ ...AGENT_NO_TRANSFORM
5176
+ });
5177
+ return response.data;
5178
+ }
5179
+ /**
5180
+ * Cancels a running session (`POST /agent/sessions/:id/cancel`).
5181
+ */
5182
+ async cancel(sessionId) {
5183
+ const response = await this.client.post(`/agent/sessions/${sessionId}/cancel`, {
5184
+ ...AGENT_NO_TRANSFORM
5185
+ });
5186
+ return response?.data ?? {};
5187
+ }
5188
+ /**
5189
+ * Recovers a failed/terminal session and returns a resumable execution for
5190
+ * the new turn.
5191
+ */
5192
+ async recover(sessionId) {
5193
+ const execution = AgentExecution.fromSession(sessionId, this.client);
5194
+ await execution.recover();
5195
+ return execution;
5196
+ }
5197
+ /**
5198
+ * Ends a session (`DELETE /agent/sessions/:id`), marking it finished.
5199
+ */
5200
+ async endSession(sessionId) {
5201
+ const response = await this.client.delete(`/agent/sessions/${sessionId}`, {
5202
+ ...AGENT_NO_TRANSFORM
5203
+ });
5204
+ return response?.data ?? {};
5205
+ }
5206
+ }
5207
+
4679
5208
  var __defProp = Object.defineProperty;
4680
5209
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4681
5210
  var __publicField = (obj, key, value) => {
@@ -4762,6 +5291,17 @@ const _TelaSDK = class _TelaSDK extends BaseClient {
4762
5291
  * ```
4763
5292
  */
4764
5293
  __publicField(this, "vault", new Vault(this));
5294
+ /**
5295
+ * Agents API resource for running agent sessions by `agentId` — execute,
5296
+ * stream events, multi-turn, cancel — and reading session state.
5297
+ *
5298
+ * @example
5299
+ * ```typescript
5300
+ * const agent = await tela.agents.get('agent-id')
5301
+ * const result = await agent.execute({ prompt: 'Hello' }).result
5302
+ * ```
5303
+ */
5304
+ __publicField(this, "agents");
4765
5305
  __publicField(this, "workstation", {
4766
5306
  get: async (options) => {
4767
5307
  return Workstation.get({
@@ -4777,6 +5317,7 @@ const _TelaSDK = class _TelaSDK extends BaseClient {
4777
5317
  this.apiKey = apiKey;
4778
5318
  this.jwt = jwt;
4779
5319
  this.dataToken = dataToken;
5320
+ this.agents = new Agents(this);
4780
5321
  this.validateAuth();
4781
5322
  }
4782
5323
  get authToken() {
@@ -4853,12 +5394,18 @@ __publicField(_TelaSDK, "ConflictApiKeyAndJWTError", ConflictApiKeyAndJWTError);
4853
5394
  __publicField(_TelaSDK, "ExecutionFailedError", ExecutionFailedError);
4854
5395
  /** Thrown when a workstation task fails on the server. */
4855
5396
  __publicField(_TelaSDK, "TaskFailedError", TaskFailedError);
5397
+ /** Thrown when an agent session fails on the server. */
5398
+ __publicField(_TelaSDK, "AgentExecutionFailedError", AgentExecutionFailedError);
4856
5399
  let TelaSDK = _TelaSDK;
4857
5400
  function createTelaClient(opts) {
4858
5401
  return new TelaSDK(opts);
4859
5402
  }
4860
5403
 
4861
5404
  exports.APIError = APIError;
5405
+ exports.Agent = Agent;
5406
+ exports.AgentExecution = AgentExecution;
5407
+ exports.AgentExecutionFailedError = AgentExecutionFailedError;
5408
+ exports.Agents = Agents;
4862
5409
  exports.AuthenticationError = AuthenticationError;
4863
5410
  exports.AuthorizationError = AuthorizationError;
4864
5411
  exports.BadRequestError = BadRequestError;