@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 +37 -0
- package/README.md +27 -0
- package/dist/index.cjs +225 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +396 -102
- package/dist/index.d.ts +396 -102
- package/dist/index.js +221 -46
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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
|
|
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
|
-
|
|
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 {
|
|
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,
|
|
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
|
|
139
|
-
|
|
140
|
-
headers
|
|
141
|
-
});
|
|
142
|
-
return res.json();
|
|
278
|
+
const detail = await getAgentDetail(agentId);
|
|
279
|
+
return wrapAgent(detail);
|
|
143
280
|
},
|
|
144
|
-
async
|
|
145
|
-
await
|
|
146
|
-
|
|
147
|
-
|
|
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,
|
|
156
|
-
const jsonHeaders = { "content-type": "application/json"
|
|
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,
|
|
195
|
-
const jsonHeaders = { "content-type": "application/json"
|
|
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,
|
|
222
|
-
const jsonHeaders = { "content-type": "application/json"
|
|
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,
|
|
244
|
-
const jsonHeaders = { "content-type": "application/json"
|
|
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,
|
|
271
|
-
const jsonHeaders = { "content-type": "application/json"
|
|
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(
|
|
293
|
-
|
|
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
|
-
...
|
|
296
|
-
knowledge:
|
|
297
|
-
instructions:
|
|
298
|
-
phones:
|
|
446
|
+
...agentsApi,
|
|
447
|
+
knowledge: knowledgeApi,
|
|
448
|
+
instructions: instructionsApi,
|
|
449
|
+
phones: phonesApi
|
|
299
450
|
},
|
|
300
|
-
workspaces: createWorkspacesApi(
|
|
301
|
-
tools: createToolsApi(
|
|
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,
|
package/dist/index.cjs.map
CHANGED
|
@@ -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":[]}
|