@getsupervisor/agents-studio-sdk 1.0.0 → 1.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,40 @@
1
+ ## v1.1.0
2
+
3
+ ## [1.1.0](https://github.com/julio-supervisor/agents-studio-be/compare/v1.0.0...v1.1.0) (2025-10-09)
4
+
5
+ ### Features
6
+
7
+ * agregar documentación inicial para el monorepo y sus contextos ([84b7383](https://github.com/julio-supervisor/agents-studio-be/commit/84b7383189c83e0e0a72d95ec12234253a317c0a))
8
+ * agregar endpoint de health check y controlador correspondiente ([361f3b9](https://github.com/julio-supervisor/agents-studio-be/commit/361f3b9bf30907ed37c17ab7da5a60b8816a659a))
9
+ * agregar soporte para workspaces dinámicos en el cliente, incluyendo métodos para establecer y obtener el workspace actual ([2eb6894](https://github.com/julio-supervisor/agents-studio-be/commit/2eb6894de045e69200a42f333383b8826c4eda19))
10
+ * **auth:** integrate Auth0 for JWT authentication ([6a885f5](https://github.com/julio-supervisor/agents-studio-be/commit/6a885f5351898b5fdbe3ef036a1dcace311e446e))
11
+ * **database:** agregar configuración de PostgreSQL y TypeORM, incluyendo documentación y docker-compose ([01cf725](https://github.com/julio-supervisor/agents-studio-be/commit/01cf7258c34c04843f8b85c88797a1deca3682de))
12
+ * **database:** agregar migración para la tabla external_workspaces con extensión pgcrypto ([71173e7](https://github.com/julio-supervisor/agents-studio-be/commit/71173e7c5abdc1095471ee0ae37a7b5641c1a90c))
13
+ * **database:** agregar migraciones para las tablas business_hour_exceptions, agent_business_hours, catalog_tags, agent_versions, user_profiles, user_roles y workspace_settings, incluyendo índices y triggers ([d735ade](https://github.com/julio-supervisor/agents-studio-be/commit/d735ade30d0a2269bd37f03e3d0543e3d83e4fcd))
14
+ * **database:** agregar migraciones para las tablas external_users y agents, incluyendo índices y restricciones ([7d00502](https://github.com/julio-supervisor/agents-studio-be/commit/7d00502dbb402a3e7c18a78a7b9d5b6c70ef7e94))
15
+ * **database:** agregar migraciones y semillas para catálogos de lenguaje, estilo, tono y herramientas, incluyendo funciones utilitarias ([1ee3857](https://github.com/julio-supervisor/agents-studio-be/commit/1ee385707ac4b98d514e7527d5e7296d64185bec))
16
+ * enhance documentation for agent creation endpoint and update interceptor details ([4660630](https://github.com/julio-supervisor/agents-studio-be/commit/466063032ed0d739d67d50c828c829d5ae849fe6))
17
+ * implement WorkspaceGuard for workspace ID validation in HTTP requests ([6011d1f](https://github.com/julio-supervisor/agents-studio-be/commit/6011d1f3fe763bf111863ac3dffb9b1c620fa5fc))
18
+
19
+
20
+ ## v1.0.0
21
+
22
+ ## 1.0.0 (2025-10-07)
23
+
24
+ ### Features
25
+
26
+ * agregar módulo de agentes y espacio de trabajo con controladores y servicios ([14a91ac](https://github.com/julio-supervisor/agents-studio-be/commit/14a91acd242d648469590916e4c45080a5336d33))
27
+ * agregar módulo de herramientas con controlador y servicio mock ([70e7335](https://github.com/julio-supervisor/agents-studio-be/commit/70e7335b656ed693d0b9ab1fe35408a11dd88ff9))
28
+ * implement code changes to enhance functionality and improve performance ([732e680](https://github.com/julio-supervisor/agents-studio-be/commit/732e680dffcb4ec0c34260d54a32d76bdfa080e8))
29
+ * implement initial structure for public API with tools and workspaces modules ([c6f9e6f](https://github.com/julio-supervisor/agents-studio-be/commit/c6f9e6f40ea25026c73bef801fe84095bcff3c91))
30
+
31
+ ### Bug Fixes
32
+
33
+ * corregir la ruta de trabajo y la ruta del artefacto de cobertura en el flujo de trabajo de pruebas unitarias ([43863e4](https://github.com/julio-supervisor/agents-studio-be/commit/43863e4043b1cba3840adfb8d2b53d7ec92471fa))
34
+ * corregir la ruta del archivo de bloqueo de dependencias en el flujo de trabajo de despliegue ([ddfabd2](https://github.com/julio-supervisor/agents-studio-be/commit/ddfabd24bf7bd8561e7bc0c826fd15a734fee1fd))
35
+ * corregir la ruta del archivo de bloqueo de dependencias en el flujo de trabajo de pruebas unitarias ([3486c88](https://github.com/julio-supervisor/agents-studio-be/commit/3486c888cbbc98443b127b4ef75e2f7cf233f590))
36
+
37
+
1
38
  # Changelog
2
39
 
3
40
  Todas las notas de versión generadas automáticamente por semantic-release aparecerán aquí.
package/README.md CHANGED
@@ -39,9 +39,36 @@ createClient({
39
39
  headers: { Authorization: 'Bearer ...' },
40
40
  timeoutMs: 35000,
41
41
  retry: { maxRetries: 2, baseDelayMs: 300 },
42
+ workspaceId: 'ws-123',
42
43
  });
43
44
  ```
44
45
 
46
+ ### Workspaces dinámicos
47
+
48
+ Puedes fijar el workspace al crear el cliente, actualizarlo en caliente o delegar en una función:
49
+
50
+ ```ts
51
+ const client = createClient({
52
+ baseUrl,
53
+ headers: { Authorization: 'Bearer ...' },
54
+ // opción estática
55
+ workspaceId: 'ws-123',
56
+ });
57
+
58
+ // consultar el workspace actual
59
+ client.workspace.get(); // 'ws-123'
60
+
61
+ // actualizarlo sin reconstruir el cliente
62
+ client.workspace.set('ws-456');
63
+
64
+ // o delegar en un getter dinámico (por ejemplo, almacenamiento local)
65
+ client.workspace.useGetter(() => sessionStorage.getItem('workspace') ?? undefined);
66
+
67
+ // crear un cliente aislado para otro workspace
68
+ const scoped = client.workspace.scoped('ws-789');
69
+ await scoped.agents.get('agentId');
70
+ ```
71
+
45
72
  ## Errores tipados y reintentos
46
73
 
47
74
  - HttpError(status, statusText, body)
package/dist/index.cjs CHANGED
@@ -22,6 +22,10 @@ __export(index_exports, {
22
22
  HttpError: () => HttpError,
23
23
  NetworkError: () => NetworkError,
24
24
  TimeoutError: () => TimeoutError,
25
+ bindAgentInstructions: () => bindAgentInstructions,
26
+ bindAgentKnowledge: () => bindAgentKnowledge,
27
+ bindAgentPhones: () => bindAgentPhones,
28
+ createAgentEntity: () => createAgentEntity,
25
29
  createAgentInstructionsApi: () => createAgentInstructionsApi,
26
30
  createAgentKnowledgeApi: () => createAgentKnowledgeApi,
27
31
  createAgentPhonesApi: () => createAgentPhonesApi,
@@ -33,6 +37,48 @@ __export(index_exports, {
33
37
  });
34
38
  module.exports = __toCommonJS(index_exports);
35
39
 
40
+ // src/entities/agent.ts
41
+ var bindAgentInstructions = (api, agentId) => ({
42
+ list(opts) {
43
+ return api.list(agentId, opts);
44
+ },
45
+ create(payload) {
46
+ return api.create(agentId, payload);
47
+ }
48
+ });
49
+ var bindAgentKnowledge = (api, agentId) => ({
50
+ upload(payload) {
51
+ return api.upload(agentId, payload);
52
+ },
53
+ listBases() {
54
+ return api.listBases(agentId);
55
+ },
56
+ listUploads() {
57
+ return api.listUploads(agentId);
58
+ }
59
+ });
60
+ var bindAgentPhones = (api, agentId) => ({
61
+ connect(payload) {
62
+ return api.connect(agentId, payload);
63
+ },
64
+ disconnect(phoneId) {
65
+ return api.disconnect(agentId, phoneId);
66
+ }
67
+ });
68
+ var createAgentEntity = (dto, options) => {
69
+ const { instructionsApi, knowledgeApi, phonesApi, reload } = options;
70
+ const entity = {
71
+ ...dto,
72
+ instructions: bindAgentInstructions(instructionsApi, dto.agentId),
73
+ knowledge: bindAgentKnowledge(knowledgeApi, dto.agentId),
74
+ phones: bindAgentPhones(phonesApi, dto.agentId),
75
+ async refresh() {
76
+ return reload(dto.agentId);
77
+ }
78
+ };
79
+ return Object.freeze(entity);
80
+ };
81
+
36
82
  // src/errors.ts
37
83
  var HttpError = class extends Error {
38
84
  constructor(status, statusText, body, url) {
@@ -100,16 +146,48 @@ async function withRetry(fn, policy) {
100
146
  function createHttp(cfg) {
101
147
  const base = cfg.baseUrl.replace(/\/$/, "");
102
148
  const fx = cfg.fetchImpl ?? fetch;
103
- const headers = cfg.headers ?? {};
149
+ const baseHeaders = { ...cfg.headers ?? {} };
104
150
  const timeout = cfg.timeoutMs ?? 35e3;
105
151
  const log = cfg.logger ?? {};
106
152
  const retry = cfg.retry;
107
- async function doFetch(url, init) {
153
+ const WORKSPACE_HEADER = "x-workspace-id";
154
+ const resolveWorkspaceId = () => cfg.getWorkspaceId?.() ?? cfg.workspaceId ?? void 0;
155
+ const normalizeHeaders = (headers) => {
156
+ if (!headers) {
157
+ return {};
158
+ }
159
+ if (headers instanceof Headers) {
160
+ const result = {};
161
+ headers.forEach((value, key) => {
162
+ result[key] = value;
163
+ });
164
+ return result;
165
+ }
166
+ if (Array.isArray(headers)) {
167
+ return headers.reduce((acc, [key, value]) => {
168
+ acc[key] = value;
169
+ return acc;
170
+ }, {});
171
+ }
172
+ return { ...headers };
173
+ };
174
+ const buildHeaders = (extra) => {
175
+ const workspaceId = resolveWorkspaceId();
176
+ const normalizedExtra = normalizeHeaders(extra);
177
+ const headersWithWorkspace = workspaceId ? { [WORKSPACE_HEADER]: workspaceId } : {};
178
+ return {
179
+ ...baseHeaders,
180
+ ...headersWithWorkspace,
181
+ ...normalizedExtra
182
+ };
183
+ };
184
+ async function doFetch(url, init = {}) {
108
185
  const ab = new AbortController();
109
186
  const req = async () => {
110
187
  try {
188
+ const finalHeaders = buildHeaders(init.headers);
111
189
  const res = await withTimeout(
112
- fx(url, { ...init, signal: ab.signal }),
190
+ fx(url, { ...init, headers: finalHeaders, signal: ab.signal }),
113
191
  timeout,
114
192
  ab,
115
193
  url
@@ -127,33 +205,94 @@ function createHttp(cfg) {
127
205
  };
128
206
  return withRetry(req, retry);
129
207
  }
130
- return { base, headers, timeout, log, retry, doFetch };
208
+ return {
209
+ base,
210
+ timeout,
211
+ log,
212
+ retry,
213
+ doFetch,
214
+ buildHeaders,
215
+ resolveWorkspaceId
216
+ };
131
217
  }
132
218
 
133
219
  // src/api/agents.ts
134
- function createAgentsApi(cfg) {
135
- const { base, headers, doFetch } = createHttp(cfg);
220
+ function createAgentsApi(cfg, relatedApis) {
221
+ const { base, doFetch } = createHttp(cfg);
222
+ const jsonHeaders = { "content-type": "application/json" };
223
+ const listAgents = async () => {
224
+ const res = await doFetch(`${base}/v1/agents`, {
225
+ method: "GET"
226
+ });
227
+ return res.json();
228
+ };
229
+ const getAgentDetail = async (agentId) => {
230
+ const res = await doFetch(`${base}/v1/agents/${agentId}`, {
231
+ method: "GET"
232
+ });
233
+ return res.json();
234
+ };
235
+ const createAgent = async (payload) => {
236
+ const res = await doFetch(`${base}/v1/agents`, {
237
+ method: "POST",
238
+ body: JSON.stringify(payload),
239
+ headers: jsonHeaders
240
+ });
241
+ return res.json();
242
+ };
243
+ const updateAgent = async (agentId, payload) => {
244
+ const res = await doFetch(`${base}/v1/agents/${agentId}`, {
245
+ method: "PATCH",
246
+ body: JSON.stringify(payload),
247
+ headers: jsonHeaders
248
+ });
249
+ return res.json();
250
+ };
251
+ const deleteAgent = async (agentId) => {
252
+ await doFetch(`${base}/v1/agents/${agentId}`, {
253
+ method: "DELETE"
254
+ });
255
+ };
256
+ const baseApi = {
257
+ list: listAgents,
258
+ get: getAgentDetail,
259
+ create: createAgent,
260
+ update: updateAgent,
261
+ delete: deleteAgent
262
+ };
263
+ if (!relatedApis) {
264
+ return baseApi;
265
+ }
266
+ const wrapAgent = (detail) => createAgentEntity(detail, {
267
+ instructionsApi: relatedApis.instructionsApi,
268
+ knowledgeApi: relatedApis.knowledgeApi,
269
+ phonesApi: relatedApis.phonesApi,
270
+ reload: async (agentId) => {
271
+ const latest = await getAgentDetail(agentId);
272
+ return wrapAgent(latest);
273
+ }
274
+ });
136
275
  return {
276
+ ...baseApi,
137
277
  async get(agentId) {
138
- const res = await doFetch(`${base}/v1/agents/${agentId}`, {
139
- method: "GET",
140
- headers
141
- });
142
- return res.json();
278
+ const detail = await getAgentDetail(agentId);
279
+ return wrapAgent(detail);
143
280
  },
144
- async delete(agentId) {
145
- await doFetch(`${base}/v1/agents/${agentId}`, {
146
- method: "DELETE",
147
- headers
148
- });
281
+ async create(payload) {
282
+ const detail = await createAgent(payload);
283
+ return wrapAgent(detail);
284
+ },
285
+ async update(agentId, payload) {
286
+ const detail = await updateAgent(agentId, payload);
287
+ return wrapAgent(detail);
149
288
  }
150
289
  };
151
290
  }
152
291
 
153
292
  // src/api/agent-knowledge.ts
154
293
  function createAgentKnowledgeApi(cfg) {
155
- const { base, headers, doFetch } = createHttp(cfg);
156
- const jsonHeaders = { "content-type": "application/json", ...headers };
294
+ const { base, doFetch } = createHttp(cfg);
295
+ const jsonHeaders = { "content-type": "application/json" };
157
296
  return {
158
297
  async upload(agentId, payload) {
159
298
  const res = await doFetch(
@@ -170,8 +309,7 @@ function createAgentKnowledgeApi(cfg) {
170
309
  const res = await doFetch(
171
310
  `${base}/v1/agents/${agentId}/knowledge/bases`,
172
311
  {
173
- method: "GET",
174
- headers
312
+ method: "GET"
175
313
  }
176
314
  );
177
315
  return res.json();
@@ -180,8 +318,7 @@ function createAgentKnowledgeApi(cfg) {
180
318
  const res = await doFetch(
181
319
  `${base}/v1/agents/${agentId}/knowledge/uploads`,
182
320
  {
183
- method: "GET",
184
- headers
321
+ method: "GET"
185
322
  }
186
323
  );
187
324
  return res.json();
@@ -191,16 +328,15 @@ function createAgentKnowledgeApi(cfg) {
191
328
 
192
329
  // src/api/agent-instructions.ts
193
330
  function createAgentInstructionsApi(cfg) {
194
- const { base, headers, doFetch } = createHttp(cfg);
195
- const jsonHeaders = { "content-type": "application/json", ...headers };
331
+ const { base, doFetch } = createHttp(cfg);
332
+ const jsonHeaders = { "content-type": "application/json" };
196
333
  return {
197
334
  async list(agentId, opts) {
198
335
  const search = opts?.versionId ? `?versionId=${encodeURIComponent(opts.versionId)}` : "";
199
336
  const res = await doFetch(
200
337
  `${base}/v1/agents/${agentId}/instructions${search}`,
201
338
  {
202
- method: "GET",
203
- headers
339
+ method: "GET"
204
340
  }
205
341
  );
206
342
  return res.json();
@@ -218,8 +354,8 @@ function createAgentInstructionsApi(cfg) {
218
354
 
219
355
  // src/api/agent-phones.ts
220
356
  function createAgentPhonesApi(cfg) {
221
- const { base, headers, doFetch } = createHttp(cfg);
222
- const jsonHeaders = { "content-type": "application/json", ...headers };
357
+ const { base, doFetch } = createHttp(cfg);
358
+ const jsonHeaders = { "content-type": "application/json" };
223
359
  return {
224
360
  async connect(agentId, payload) {
225
361
  const res = await doFetch(`${base}/v1/agents/${agentId}/phones`, {
@@ -231,8 +367,7 @@ function createAgentPhonesApi(cfg) {
231
367
  },
232
368
  async disconnect(agentId, phoneId) {
233
369
  await doFetch(`${base}/v1/agents/${agentId}/phones/${phoneId}`, {
234
- method: "DELETE",
235
- headers
370
+ method: "DELETE"
236
371
  });
237
372
  }
238
373
  };
@@ -240,16 +375,15 @@ function createAgentPhonesApi(cfg) {
240
375
 
241
376
  // src/api/workspaces.ts
242
377
  function createWorkspacesApi(cfg) {
243
- const { base, headers, doFetch } = createHttp(cfg);
244
- const jsonHeaders = { "content-type": "application/json", ...headers };
378
+ const { base, doFetch } = createHttp(cfg);
379
+ const jsonHeaders = { "content-type": "application/json" };
245
380
  return {
246
381
  async listPhones(workspaceId, opts) {
247
382
  const search = opts?.channel ? `?channel=${opts.channel}` : "";
248
383
  const res = await doFetch(
249
384
  `${base}/v1/workspaces/${workspaceId}/phones${search}`,
250
385
  {
251
- method: "GET",
252
- headers
386
+ method: "GET"
253
387
  }
254
388
  );
255
389
  return res.json();
@@ -267,13 +401,12 @@ function createWorkspacesApi(cfg) {
267
401
 
268
402
  // src/api/tools.ts
269
403
  function createToolsApi(cfg) {
270
- const { base, headers, doFetch } = createHttp(cfg);
271
- const jsonHeaders = { "content-type": "application/json", ...headers };
404
+ const { base, doFetch } = createHttp(cfg);
405
+ const jsonHeaders = { "content-type": "application/json" };
272
406
  return {
273
407
  async list() {
274
408
  const res = await doFetch(`${base}/v1/tools`, {
275
- method: "GET",
276
- headers
409
+ method: "GET"
277
410
  });
278
411
  return res.json();
279
412
  },
@@ -289,16 +422,58 @@ function createToolsApi(cfg) {
289
422
  }
290
423
 
291
424
  // src/client.ts
292
- function createClient(cfg) {
293
- return {
425
+ function createClient(initialCfg) {
426
+ const runtimeCfg = {
427
+ ...initialCfg
428
+ };
429
+ const resolveWorkspaceId = () => runtimeCfg.workspaceId ?? runtimeCfg.getWorkspaceId?.();
430
+ const setWorkspaceId = (workspaceId) => {
431
+ runtimeCfg.workspaceId = workspaceId;
432
+ };
433
+ const setWorkspaceGetter = (getter) => {
434
+ runtimeCfg.getWorkspaceId = getter;
435
+ };
436
+ const instructionsApi = createAgentInstructionsApi(runtimeCfg);
437
+ const knowledgeApi = createAgentKnowledgeApi(runtimeCfg);
438
+ const phonesApi = createAgentPhonesApi(runtimeCfg);
439
+ const agentsApi = createAgentsApi(runtimeCfg, {
440
+ instructionsApi,
441
+ knowledgeApi,
442
+ phonesApi
443
+ });
444
+ const apis = {
294
445
  agents: {
295
- ...createAgentsApi(cfg),
296
- knowledge: createAgentKnowledgeApi(cfg),
297
- instructions: createAgentInstructionsApi(cfg),
298
- phones: createAgentPhonesApi(cfg)
446
+ ...agentsApi,
447
+ knowledge: knowledgeApi,
448
+ instructions: instructionsApi,
449
+ phones: phonesApi
299
450
  },
300
- workspaces: createWorkspacesApi(cfg),
301
- tools: createToolsApi(cfg)
451
+ workspaces: createWorkspacesApi(runtimeCfg),
452
+ tools: createToolsApi(runtimeCfg)
453
+ };
454
+ return {
455
+ ...apis,
456
+ workspace: {
457
+ get: resolveWorkspaceId,
458
+ set(id) {
459
+ setWorkspaceGetter(void 0);
460
+ setWorkspaceId(id);
461
+ },
462
+ useGetter(getter) {
463
+ setWorkspaceGetter(getter);
464
+ },
465
+ clear() {
466
+ setWorkspaceGetter(void 0);
467
+ setWorkspaceId(void 0);
468
+ },
469
+ scoped(id) {
470
+ return createClient({
471
+ ...initialCfg,
472
+ workspaceId: id,
473
+ getWorkspaceId: void 0
474
+ });
475
+ }
476
+ }
302
477
  };
303
478
  }
304
479
  // Annotate the CommonJS export names for ESM import in node:
@@ -306,6 +481,10 @@ function createClient(cfg) {
306
481
  HttpError,
307
482
  NetworkError,
308
483
  TimeoutError,
484
+ bindAgentInstructions,
485
+ bindAgentKnowledge,
486
+ bindAgentPhones,
487
+ createAgentEntity,
309
488
  createAgentInstructionsApi,
310
489
  createAgentKnowledgeApi,
311
490
  createAgentPhonesApi,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/http.ts","../src/api/agents.ts","../src/api/agent-knowledge.ts","../src/api/agent-instructions.ts","../src/api/agent-phones.ts","../src/api/workspaces.ts","../src/api/tools.ts","../src/client.ts"],"sourcesContent":["export * from './api/agents';\nexport * from './api/agent-knowledge';\nexport * from './api/agent-instructions';\nexport * from './api/agent-phones';\nexport * from './api/workspaces';\nexport * from './api/tools';\nexport * from './client';\nexport * from './errors';\nexport * from './http';\nexport * from './types';\n","export class HttpError extends Error {\n constructor(\n public status: number,\n public statusText: string,\n public body?: unknown,\n public url?: string,\n ) {\n super(`HTTP ${status} ${statusText}`);\n this.name = 'HttpError';\n }\n}\n\nexport class TimeoutError extends Error {\n constructor(\n public ms: number,\n public url?: string,\n ) {\n super(`Timeout after ${ms}ms`);\n this.name = 'TimeoutError';\n }\n}\n\nexport class NetworkError extends Error {\n constructor(\n public cause?: unknown,\n public url?: string,\n ) {\n super('Network error');\n this.name = 'NetworkError';\n }\n}\n\nexport type RetryPolicy = {\n maxRetries?: number; // default 2\n baseDelayMs?: number; // default 300\n maxDelayMs?: number; // default 3000\n retryOn?: (err: unknown, attempt: number) => boolean; // default: network or 5xx\n};\n","import { ClientConfig } from './types';\nimport { HttpError, NetworkError, RetryPolicy, TimeoutError } from './errors';\n\nfunction sleep(ms: number) {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nasync function withTimeout<T>(\n p: Promise<T>,\n ms: number,\n ab?: AbortController,\n url?: string,\n) {\n return new Promise<T>((resolve, reject) => {\n const to = setTimeout(() => {\n ab?.abort();\n reject(new TimeoutError(ms, url));\n }, ms);\n p.then((v) => {\n clearTimeout(to);\n resolve(v);\n }).catch((e) => {\n clearTimeout(to);\n reject(e);\n });\n });\n}\n\nasync function withRetry<T>(\n fn: (attempt: number) => Promise<T>,\n policy?: RetryPolicy,\n): Promise<T> {\n const max = policy?.maxRetries ?? 2;\n const base = policy?.baseDelayMs ?? 300;\n const maxDelay = policy?.maxDelayMs ?? 3000;\n const retryOn =\n policy?.retryOn ??\n ((err) =>\n err instanceof NetworkError ||\n (err instanceof HttpError && err.status >= 500));\n let attempt = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n return await fn(attempt);\n } catch (e) {\n if (attempt >= max || !retryOn(e, attempt)) throw e;\n const delay =\n Math.min(maxDelay, base * 2 ** attempt) +\n Math.floor(Math.random() * 100);\n await sleep(delay);\n attempt += 1;\n }\n }\n}\n\nexport function createHttp(cfg: ClientConfig & { retry?: RetryPolicy }) {\n const base = cfg.baseUrl.replace(/\\/$/, '');\n const fx = cfg.fetchImpl ?? fetch;\n const headers = cfg.headers ?? {};\n const timeout = cfg.timeoutMs ?? 35000;\n const log = cfg.logger ?? {};\n const retry = cfg.retry;\n\n async function doFetch(url: string, init: RequestInit) {\n const ab = new AbortController();\n const req = async () => {\n try {\n const res = await withTimeout(\n fx(url, { ...init, signal: ab.signal }),\n timeout,\n ab,\n url,\n );\n if (!res.ok) {\n const body = await res\n .clone()\n .json()\n .catch(() => undefined);\n throw new HttpError(res.status, res.statusText, body, url);\n }\n return res;\n } catch (e: any) {\n if (e.name === 'AbortError') throw new TimeoutError(timeout, url);\n if (e instanceof HttpError) throw e;\n throw new NetworkError(e, url);\n }\n };\n return withRetry(req, retry);\n }\n\n return { base, headers, timeout, log, retry, doFetch };\n}\n","import type { AgentDetail, ClientConfig } from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createAgentsApi(cfg: ClientConfig & { retry?: RetryPolicy }) {\n const { base, headers, doFetch } = createHttp(cfg);\n\n return {\n async get(agentId: string): Promise<AgentDetail> {\n const res = await doFetch(`${base}/v1/agents/${agentId}`, {\n method: 'GET',\n headers,\n });\n return res.json();\n },\n async delete(agentId: string): Promise<void> {\n await doFetch(`${base}/v1/agents/${agentId}`, {\n method: 'DELETE',\n headers,\n });\n },\n };\n}\n","import type {\n AgentKnowledgeBasesResponse,\n AgentKnowledgeUploadsResponse,\n ClientConfig,\n KnowledgeUploadRequest,\n KnowledgeUploadResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createAgentKnowledgeApi(\n cfg: ClientConfig & { retry?: RetryPolicy },\n) {\n const { base, headers, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json', ...headers };\n\n return {\n async upload(\n agentId: string,\n payload: KnowledgeUploadRequest,\n ): Promise<KnowledgeUploadResponse> {\n const res = await doFetch(\n `${base}/v1/agents/${agentId}/knowledge/upload`,\n {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n },\n );\n return res.json();\n },\n async listBases(agentId: string): Promise<AgentKnowledgeBasesResponse> {\n const res = await doFetch(\n `${base}/v1/agents/${agentId}/knowledge/bases`,\n {\n method: 'GET',\n headers,\n },\n );\n return res.json();\n },\n async listUploads(agentId: string): Promise<AgentKnowledgeUploadsResponse> {\n const res = await doFetch(\n `${base}/v1/agents/${agentId}/knowledge/uploads`,\n {\n method: 'GET',\n headers,\n },\n );\n return res.json();\n },\n };\n}\n","import type {\n AgentInstructionsResponse,\n ClientConfig,\n CreateInstructionRequest,\n InstructionCreatedResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createAgentInstructionsApi(\n cfg: ClientConfig & { retry?: RetryPolicy },\n) {\n const { base, headers, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json', ...headers };\n\n return {\n async list(\n agentId: string,\n opts?: { versionId?: string },\n ): Promise<AgentInstructionsResponse> {\n const search = opts?.versionId\n ? `?versionId=${encodeURIComponent(opts.versionId)}`\n : '';\n const res = await doFetch(\n `${base}/v1/agents/${agentId}/instructions${search}`,\n {\n method: 'GET',\n headers,\n },\n );\n return res.json();\n },\n async create(\n agentId: string,\n payload: CreateInstructionRequest,\n ): Promise<InstructionCreatedResponse> {\n const res = await doFetch(`${base}/v1/agents/${agentId}/instructions`, {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n });\n return res.json();\n },\n };\n}\n","import type {\n ClientConfig,\n ConnectPhoneRequest,\n PhoneAssignmentResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createAgentPhonesApi(\n cfg: ClientConfig & { retry?: RetryPolicy },\n) {\n const { base, headers, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json', ...headers };\n\n return {\n async connect(\n agentId: string,\n payload: ConnectPhoneRequest,\n ): Promise<PhoneAssignmentResponse> {\n const res = await doFetch(`${base}/v1/agents/${agentId}/phones`, {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n });\n return res.json();\n },\n async disconnect(agentId: string, phoneId: string): Promise<void> {\n await doFetch(`${base}/v1/agents/${agentId}/phones/${phoneId}`, {\n method: 'DELETE',\n headers,\n });\n },\n };\n}\n","import type {\n ClientConfig,\n WorkspaceEnableRequest,\n WorkspaceEnableResponse,\n WorkspacePhoneChannel,\n WorkspacePhonesResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createWorkspacesApi(\n cfg: ClientConfig & { retry?: RetryPolicy },\n) {\n const { base, headers, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json', ...headers };\n\n return {\n async listPhones(\n workspaceId: string,\n opts?: { channel?: WorkspacePhoneChannel },\n ): Promise<WorkspacePhonesResponse> {\n const search = opts?.channel ? `?channel=${opts.channel}` : '';\n const res = await doFetch(\n `${base}/v1/workspaces/${workspaceId}/phones${search}`,\n {\n method: 'GET',\n headers,\n },\n );\n return res.json();\n },\n async enable(\n workspaceId: string,\n payload: WorkspaceEnableRequest,\n ): Promise<WorkspaceEnableResponse> {\n const res = await doFetch(`${base}/v1/workspaces/${workspaceId}/enable`, {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n });\n return res.json();\n },\n };\n}\n","import type {\n ClientConfig,\n ExecuteToolRequest,\n ExecuteToolResponse,\n ToolsCatalogResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createToolsApi(cfg: ClientConfig & { retry?: RetryPolicy }) {\n const { base, headers, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json', ...headers };\n\n return {\n async list(): Promise<ToolsCatalogResponse> {\n const res = await doFetch(`${base}/v1/tools`, {\n method: 'GET',\n headers,\n });\n return res.json();\n },\n async execute(\n toolId: string,\n payload: ExecuteToolRequest,\n ): Promise<ExecuteToolResponse> {\n const res = await doFetch(`${base}/v1/tools/${toolId}/execute`, {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n });\n return res.json();\n },\n };\n}\n","import type { ClientConfig } from './types';\nimport type { RetryPolicy } from './errors';\nimport { createAgentsApi } from './api/agents';\nimport { createAgentKnowledgeApi } from './api/agent-knowledge';\nimport { createAgentInstructionsApi } from './api/agent-instructions';\nimport { createAgentPhonesApi } from './api/agent-phones';\nimport { createWorkspacesApi } from './api/workspaces';\nimport { createToolsApi } from './api/tools';\n\nexport function createClient(cfg: ClientConfig & { retry?: RetryPolicy }) {\n return {\n agents: {\n ...createAgentsApi(cfg),\n knowledge: createAgentKnowledgeApi(cfg),\n instructions: createAgentInstructionsApi(cfg),\n phones: createAgentPhonesApi(cfg),\n },\n workspaces: createWorkspacesApi(cfg),\n tools: createToolsApi(cfg),\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/entities/agent.ts","../src/errors.ts","../src/http.ts","../src/api/agents.ts","../src/api/agent-knowledge.ts","../src/api/agent-instructions.ts","../src/api/agent-phones.ts","../src/api/workspaces.ts","../src/api/tools.ts","../src/client.ts"],"sourcesContent":["export * from './api/agents';\nexport * from './api/agent-knowledge';\nexport * from './api/agent-instructions';\nexport * from './api/agent-phones';\nexport * from './api/workspaces';\nexport * from './api/tools';\nexport * from './client';\nexport * from './entities/agent';\nexport * from './errors';\nexport * from './http';\nexport * from './types';\n","import type {\n AgentDetail,\n ConnectPhoneRequest,\n CreateInstructionRequest,\n KnowledgeUploadRequest,\n} from '../types';\nimport type { createAgentInstructionsApi } from '../api/agent-instructions';\nimport type { createAgentKnowledgeApi } from '../api/agent-knowledge';\nimport type { createAgentPhonesApi } from '../api/agent-phones';\n\ntype AgentInstructionsApi = ReturnType<typeof createAgentInstructionsApi>;\ntype AgentKnowledgeApi = ReturnType<typeof createAgentKnowledgeApi>;\ntype AgentPhonesApi = ReturnType<typeof createAgentPhonesApi>;\n\ntype AgentInstructionsHelper = ReturnType<typeof bindAgentInstructions>;\ntype AgentKnowledgeHelper = ReturnType<typeof bindAgentKnowledge>;\ntype AgentPhonesHelper = ReturnType<typeof bindAgentPhones>;\n\nexport interface AgentEntity extends AgentDetail {\n instructions: AgentInstructionsHelper;\n knowledge: AgentKnowledgeHelper;\n phones: AgentPhonesHelper;\n refresh(): Promise<AgentEntity>;\n}\n\nexport type AgentEntityFactoryOptions = {\n instructionsApi: AgentInstructionsApi;\n knowledgeApi: AgentKnowledgeApi;\n phonesApi: AgentPhonesApi;\n reload(agentId: string): Promise<AgentEntity>;\n};\n\nexport const bindAgentInstructions = (\n api: AgentInstructionsApi,\n agentId: string,\n) => ({\n list(opts?: { versionId?: string }) {\n return api.list(agentId, opts);\n },\n create(payload: CreateInstructionRequest) {\n return api.create(agentId, payload);\n },\n});\n\nexport const bindAgentKnowledge = (\n api: AgentKnowledgeApi,\n agentId: string,\n) => ({\n upload(payload: KnowledgeUploadRequest) {\n return api.upload(agentId, payload);\n },\n listBases() {\n return api.listBases(agentId);\n },\n listUploads() {\n return api.listUploads(agentId);\n },\n});\n\nexport const bindAgentPhones = (api: AgentPhonesApi, agentId: string) => ({\n connect(payload: ConnectPhoneRequest) {\n return api.connect(agentId, payload);\n },\n disconnect(phoneId: string) {\n return api.disconnect(agentId, phoneId);\n },\n});\n\nexport const createAgentEntity = (\n dto: AgentDetail,\n options: AgentEntityFactoryOptions,\n): AgentEntity => {\n const { instructionsApi, knowledgeApi, phonesApi, reload } = options;\n\n const entity: AgentEntity = {\n ...dto,\n instructions: bindAgentInstructions(instructionsApi, dto.agentId),\n knowledge: bindAgentKnowledge(knowledgeApi, dto.agentId),\n phones: bindAgentPhones(phonesApi, dto.agentId),\n async refresh() {\n return reload(dto.agentId);\n },\n };\n\n return Object.freeze(entity);\n};\n","export class HttpError extends Error {\n constructor(\n public status: number,\n public statusText: string,\n public body?: unknown,\n public url?: string,\n ) {\n super(`HTTP ${status} ${statusText}`);\n this.name = 'HttpError';\n }\n}\n\nexport class TimeoutError extends Error {\n constructor(\n public ms: number,\n public url?: string,\n ) {\n super(`Timeout after ${ms}ms`);\n this.name = 'TimeoutError';\n }\n}\n\nexport class NetworkError extends Error {\n constructor(\n public cause?: unknown,\n public url?: string,\n ) {\n super('Network error');\n this.name = 'NetworkError';\n }\n}\n\nexport type RetryPolicy = {\n maxRetries?: number; // default 2\n baseDelayMs?: number; // default 300\n maxDelayMs?: number; // default 3000\n retryOn?: (err: unknown, attempt: number) => boolean; // default: network or 5xx\n};\n","import { ClientConfig } from './types';\nimport { HttpError, NetworkError, RetryPolicy, TimeoutError } from './errors';\n\nfunction sleep(ms: number) {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nasync function withTimeout<T>(\n p: Promise<T>,\n ms: number,\n ab?: AbortController,\n url?: string,\n) {\n return new Promise<T>((resolve, reject) => {\n const to = setTimeout(() => {\n ab?.abort();\n reject(new TimeoutError(ms, url));\n }, ms);\n p.then((v) => {\n clearTimeout(to);\n resolve(v);\n }).catch((e) => {\n clearTimeout(to);\n reject(e);\n });\n });\n}\n\nasync function withRetry<T>(\n fn: (attempt: number) => Promise<T>,\n policy?: RetryPolicy,\n): Promise<T> {\n const max = policy?.maxRetries ?? 2;\n const base = policy?.baseDelayMs ?? 300;\n const maxDelay = policy?.maxDelayMs ?? 3000;\n const retryOn =\n policy?.retryOn ??\n ((err) =>\n err instanceof NetworkError ||\n (err instanceof HttpError && err.status >= 500));\n let attempt = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n return await fn(attempt);\n } catch (e) {\n if (attempt >= max || !retryOn(e, attempt)) throw e;\n const delay =\n Math.min(maxDelay, base * 2 ** attempt) +\n Math.floor(Math.random() * 100);\n await sleep(delay);\n attempt += 1;\n }\n }\n}\n\nexport function createHttp(cfg: ClientConfig & { retry?: RetryPolicy }) {\n const base = cfg.baseUrl.replace(/\\/$/, '');\n const fx = cfg.fetchImpl ?? fetch;\n const baseHeaders = { ...(cfg.headers ?? {}) };\n const timeout = cfg.timeoutMs ?? 35000;\n const log = cfg.logger ?? {};\n const retry = cfg.retry;\n const WORKSPACE_HEADER = 'x-workspace-id';\n\n const resolveWorkspaceId = () =>\n cfg.getWorkspaceId?.() ?? cfg.workspaceId ?? undefined;\n\n const normalizeHeaders = (headers?: HeadersInit): Record<string, string> => {\n if (!headers) {\n return {};\n }\n\n if (headers instanceof Headers) {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n }\n\n if (Array.isArray(headers)) {\n return headers.reduce<Record<string, string>>((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {});\n }\n\n return { ...headers } as Record<string, string>;\n };\n\n const buildHeaders = (extra?: HeadersInit): Record<string, string> => {\n const workspaceId = resolveWorkspaceId();\n const normalizedExtra = normalizeHeaders(extra);\n const headersWithWorkspace = workspaceId\n ? { [WORKSPACE_HEADER]: workspaceId }\n : {};\n\n return {\n ...baseHeaders,\n ...headersWithWorkspace,\n ...normalizedExtra,\n };\n };\n\n async function doFetch(url: string, init: RequestInit = {}) {\n const ab = new AbortController();\n const req = async () => {\n try {\n const finalHeaders = buildHeaders(init.headers);\n const res = await withTimeout(\n fx(url, { ...init, headers: finalHeaders, signal: ab.signal }),\n timeout,\n ab,\n url,\n );\n if (!res.ok) {\n const body = await res\n .clone()\n .json()\n .catch(() => undefined);\n throw new HttpError(res.status, res.statusText, body, url);\n }\n return res;\n } catch (e: any) {\n if (e.name === 'AbortError') throw new TimeoutError(timeout, url);\n if (e instanceof HttpError) throw e;\n throw new NetworkError(e, url);\n }\n };\n return withRetry(req, retry);\n }\n\n return {\n base,\n timeout,\n log,\n retry,\n doFetch,\n buildHeaders,\n resolveWorkspaceId,\n };\n}\n","import type {\n AgentDetail,\n AgentListResponse,\n ClientConfig,\n CreateAgentRequest,\n UpdateAgentRequest,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport type { AgentEntity } from '../entities/agent';\nimport type { createAgentInstructionsApi } from './agent-instructions';\nimport type { createAgentKnowledgeApi } from './agent-knowledge';\nimport type { createAgentPhonesApi } from './agent-phones';\nimport { createAgentEntity } from '../entities/agent';\nimport { createHttp } from '../http';\n\ntype AgentEntityDependencies = {\n instructionsApi: ReturnType<typeof createAgentInstructionsApi>;\n knowledgeApi: ReturnType<typeof createAgentKnowledgeApi>;\n phonesApi: ReturnType<typeof createAgentPhonesApi>;\n};\n\nexport type AgentsApi = {\n list(): Promise<AgentListResponse>;\n get(agentId: string): Promise<AgentDetail>;\n create(payload: CreateAgentRequest): Promise<AgentDetail>;\n update(agentId: string, payload: UpdateAgentRequest): Promise<AgentDetail>;\n delete(agentId: string): Promise<void>;\n};\n\nexport type AgentsApiWithEntities = Omit<\n AgentsApi,\n 'get' | 'create' | 'update'\n> & {\n get(agentId: string): Promise<AgentEntity>;\n create(payload: CreateAgentRequest): Promise<AgentEntity>;\n update(agentId: string, payload: UpdateAgentRequest): Promise<AgentEntity>;\n};\n\nexport function createAgentsApi(\n cfg: ClientConfig & { retry?: RetryPolicy },\n relatedApis?: AgentEntityDependencies,\n): AgentsApi | AgentsApiWithEntities {\n const { base, doFetch } = createHttp(cfg);\n\n const jsonHeaders = { 'content-type': 'application/json' } as const;\n\n const listAgents = async (): Promise<AgentListResponse> => {\n const res = await doFetch(`${base}/v1/agents`, {\n method: 'GET',\n });\n return res.json();\n };\n\n const getAgentDetail = async (agentId: string): Promise<AgentDetail> => {\n const res = await doFetch(`${base}/v1/agents/${agentId}`, {\n method: 'GET',\n });\n return res.json();\n };\n\n const createAgent = async (\n payload: CreateAgentRequest,\n ): Promise<AgentDetail> => {\n const res = await doFetch(`${base}/v1/agents`, {\n method: 'POST',\n body: JSON.stringify(payload),\n headers: jsonHeaders,\n });\n return res.json();\n };\n\n const updateAgent = async (\n agentId: string,\n payload: UpdateAgentRequest,\n ): Promise<AgentDetail> => {\n const res = await doFetch(`${base}/v1/agents/${agentId}`, {\n method: 'PATCH',\n body: JSON.stringify(payload),\n headers: jsonHeaders,\n });\n return res.json();\n };\n\n const deleteAgent = async (agentId: string): Promise<void> => {\n await doFetch(`${base}/v1/agents/${agentId}`, {\n method: 'DELETE',\n });\n };\n\n const baseApi: AgentsApi = {\n list: listAgents,\n get: getAgentDetail,\n create: createAgent,\n update: updateAgent,\n delete: deleteAgent,\n };\n\n if (!relatedApis) {\n return baseApi;\n }\n\n const wrapAgent = (detail: AgentDetail): AgentEntity =>\n createAgentEntity(detail, {\n instructionsApi: relatedApis.instructionsApi,\n knowledgeApi: relatedApis.knowledgeApi,\n phonesApi: relatedApis.phonesApi,\n reload: async (agentId: string) => {\n const latest = await getAgentDetail(agentId);\n return wrapAgent(latest);\n },\n });\n\n return {\n ...baseApi,\n async get(agentId: string) {\n const detail = await getAgentDetail(agentId);\n return wrapAgent(detail);\n },\n async create(payload: CreateAgentRequest) {\n const detail = await createAgent(payload);\n return wrapAgent(detail);\n },\n async update(agentId: string, payload: UpdateAgentRequest) {\n const detail = await updateAgent(agentId, payload);\n return wrapAgent(detail);\n },\n } satisfies AgentsApiWithEntities;\n}\n","import type {\n AgentKnowledgeBasesResponse,\n AgentKnowledgeUploadsResponse,\n ClientConfig,\n KnowledgeUploadRequest,\n KnowledgeUploadResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createAgentKnowledgeApi(\n cfg: ClientConfig & { retry?: RetryPolicy },\n) {\n const { base, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json' };\n\n return {\n async upload(\n agentId: string,\n payload: KnowledgeUploadRequest,\n ): Promise<KnowledgeUploadResponse> {\n const res = await doFetch(\n `${base}/v1/agents/${agentId}/knowledge/upload`,\n {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n },\n );\n return res.json();\n },\n async listBases(agentId: string): Promise<AgentKnowledgeBasesResponse> {\n const res = await doFetch(\n `${base}/v1/agents/${agentId}/knowledge/bases`,\n {\n method: 'GET',\n },\n );\n return res.json();\n },\n async listUploads(agentId: string): Promise<AgentKnowledgeUploadsResponse> {\n const res = await doFetch(\n `${base}/v1/agents/${agentId}/knowledge/uploads`,\n {\n method: 'GET',\n },\n );\n return res.json();\n },\n };\n}\n","import type {\n AgentInstructionsResponse,\n ClientConfig,\n CreateInstructionRequest,\n InstructionCreatedResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createAgentInstructionsApi(\n cfg: ClientConfig & { retry?: RetryPolicy },\n) {\n const { base, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json' };\n\n return {\n async list(\n agentId: string,\n opts?: { versionId?: string },\n ): Promise<AgentInstructionsResponse> {\n const search = opts?.versionId\n ? `?versionId=${encodeURIComponent(opts.versionId)}`\n : '';\n const res = await doFetch(\n `${base}/v1/agents/${agentId}/instructions${search}`,\n {\n method: 'GET',\n },\n );\n return res.json();\n },\n async create(\n agentId: string,\n payload: CreateInstructionRequest,\n ): Promise<InstructionCreatedResponse> {\n const res = await doFetch(`${base}/v1/agents/${agentId}/instructions`, {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n });\n return res.json();\n },\n };\n}\n","import type {\n ClientConfig,\n ConnectPhoneRequest,\n PhoneAssignmentResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createAgentPhonesApi(\n cfg: ClientConfig & { retry?: RetryPolicy },\n) {\n const { base, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json' };\n\n return {\n async connect(\n agentId: string,\n payload: ConnectPhoneRequest,\n ): Promise<PhoneAssignmentResponse> {\n const res = await doFetch(`${base}/v1/agents/${agentId}/phones`, {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n });\n return res.json();\n },\n async disconnect(agentId: string, phoneId: string): Promise<void> {\n await doFetch(`${base}/v1/agents/${agentId}/phones/${phoneId}`, {\n method: 'DELETE',\n });\n },\n };\n}\n","import type {\n ClientConfig,\n WorkspaceEnableRequest,\n WorkspaceEnableResponse,\n WorkspacePhoneChannel,\n WorkspacePhonesResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createWorkspacesApi(\n cfg: ClientConfig & { retry?: RetryPolicy },\n) {\n const { base, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json' };\n\n return {\n async listPhones(\n workspaceId: string,\n opts?: { channel?: WorkspacePhoneChannel },\n ): Promise<WorkspacePhonesResponse> {\n const search = opts?.channel ? `?channel=${opts.channel}` : '';\n const res = await doFetch(\n `${base}/v1/workspaces/${workspaceId}/phones${search}`,\n {\n method: 'GET',\n },\n );\n return res.json();\n },\n async enable(\n workspaceId: string,\n payload: WorkspaceEnableRequest,\n ): Promise<WorkspaceEnableResponse> {\n const res = await doFetch(`${base}/v1/workspaces/${workspaceId}/enable`, {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n });\n return res.json();\n },\n };\n}\n","import type {\n ClientConfig,\n ExecuteToolRequest,\n ExecuteToolResponse,\n ToolsCatalogResponse,\n} from '../types';\nimport type { RetryPolicy } from '../errors';\nimport { createHttp } from '../http';\n\nexport function createToolsApi(cfg: ClientConfig & { retry?: RetryPolicy }) {\n const { base, doFetch } = createHttp(cfg);\n const jsonHeaders = { 'content-type': 'application/json' };\n\n return {\n async list(): Promise<ToolsCatalogResponse> {\n const res = await doFetch(`${base}/v1/tools`, {\n method: 'GET',\n });\n return res.json();\n },\n async execute(\n toolId: string,\n payload: ExecuteToolRequest,\n ): Promise<ExecuteToolResponse> {\n const res = await doFetch(`${base}/v1/tools/${toolId}/execute`, {\n method: 'POST',\n headers: jsonHeaders,\n body: JSON.stringify(payload),\n });\n return res.json();\n },\n };\n}\n","import type { AgentsApiWithEntities } from './api/agents';\nimport type { ClientConfig } from './types';\nimport type { RetryPolicy } from './errors';\nimport { createAgentInstructionsApi } from './api/agent-instructions';\nimport { createAgentKnowledgeApi } from './api/agent-knowledge';\nimport { createAgentPhonesApi } from './api/agent-phones';\nimport { createAgentsApi } from './api/agents';\nimport { createToolsApi } from './api/tools';\nimport { createWorkspacesApi } from './api/workspaces';\n\nexport function createClient(\n initialCfg: ClientConfig & { retry?: RetryPolicy },\n) {\n const runtimeCfg: ClientConfig & { retry?: RetryPolicy } = {\n ...initialCfg,\n };\n\n const resolveWorkspaceId = () =>\n runtimeCfg.workspaceId ?? runtimeCfg.getWorkspaceId?.();\n\n const setWorkspaceId = (workspaceId?: string) => {\n runtimeCfg.workspaceId = workspaceId;\n };\n\n const setWorkspaceGetter = (\n getter?: (() => string | undefined) | undefined,\n ) => {\n runtimeCfg.getWorkspaceId = getter;\n };\n\n const instructionsApi = createAgentInstructionsApi(runtimeCfg);\n const knowledgeApi = createAgentKnowledgeApi(runtimeCfg);\n const phonesApi = createAgentPhonesApi(runtimeCfg);\n\n const agentsApi = createAgentsApi(runtimeCfg, {\n instructionsApi,\n knowledgeApi,\n phonesApi,\n }) as AgentsApiWithEntities;\n\n const apis = {\n agents: {\n ...agentsApi,\n knowledge: knowledgeApi,\n instructions: instructionsApi,\n phones: phonesApi,\n },\n workspaces: createWorkspacesApi(runtimeCfg),\n tools: createToolsApi(runtimeCfg),\n };\n\n return {\n ...apis,\n workspace: {\n get: resolveWorkspaceId,\n set(id?: string) {\n setWorkspaceGetter(undefined);\n setWorkspaceId(id);\n },\n useGetter(getter?: () => string | undefined) {\n setWorkspaceGetter(getter);\n },\n clear() {\n setWorkspaceGetter(undefined);\n setWorkspaceId(undefined);\n },\n scoped(id: string) {\n return createClient({\n ...initialCfg,\n workspaceId: id,\n getWorkspaceId: undefined,\n });\n },\n },\n };\n}\n"],"mappings":"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","names":[]}