@getsupervisor/agents-studio-sdk 1.9.0 → 1.11.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,32 @@
1
+ ## v1.10.0
2
+
3
+ ## [1.10.0](https://github.com/julio-supervisor/agents-studio-be/compare/v1.9.0...v1.10.0) (2025-10-17)
4
+
5
+ ### Features
6
+
7
+ * **badges:** agregar archivo SVG de badge de cobertura ([9a880d4](https://github.com/julio-supervisor/agents-studio-be/commit/9a880d4e5f6983ab441aa04371ee5c49ee69de16))
8
+ * **ci:** add coverage badge generation and update README with coverage metrics ([ce21547](https://github.com/julio-supervisor/agents-studio-be/commit/ce21547440a70536fb461526dc8673c8e91ca1fc))
9
+ * **ci:** add NODE_AUTH_TOKEN build argument for Docker image ([5711a10](https://github.com/julio-supervisor/agents-studio-be/commit/5711a106667262e83b3598c71a7aa85b7468d3d2))
10
+ * **ci:** update coverage badge generation and enhance README with CI badges ([f65f7df](https://github.com/julio-supervisor/agents-studio-be/commit/f65f7df6d6eb40f401bbee0e9c9cc25dbce98476))
11
+ * **instructions:** implement instruction management module ([48f2a5e](https://github.com/julio-supervisor/agents-studio-be/commit/48f2a5e6549606707b2571a0844d433d8b8a8dc9))
12
+
13
+ ### Bug Fixes
14
+
15
+ * **ci:** update coverage badge generation action and README to reflect new badge path ([0ba765c](https://github.com/julio-supervisor/agents-studio-be/commit/0ba765c67c7bba37aa5fbb2f75f0e0eb2d53cd93))
16
+ * **ci:** update coverage badge generation paths for consistency ([fec0e57](https://github.com/julio-supervisor/agents-studio-be/commit/fec0e57bd7e1f2e9de01058da89271b0a542a7b4))
17
+ * **docs:** actualizar descripciones de instrucciones en la especificación OpenAPI ([5f8a36f](https://github.com/julio-supervisor/agents-studio-be/commit/5f8a36f9ceab3b39d6f81a51ef9500d33eb5713a))
18
+ * **docs:** corregir la ruta del badge de cobertura en el README ([049c28f](https://github.com/julio-supervisor/agents-studio-be/commit/049c28fa4323f82b43616d92fd262309f8d84efa))
19
+
20
+
21
+ ## v1.9.0
22
+
23
+ ## [1.9.0](https://github.com/julio-supervisor/agents-studio-be/compare/v1.8.0...v1.9.0) (2025-10-16)
24
+
25
+ ### Features
26
+
27
+ * **api-keys:** add API key management functionality ([bf2ae93](https://github.com/julio-supervisor/agents-studio-be/commit/bf2ae93ea123707eaf8676027819d8739d31f7f1))
28
+
29
+
1
30
  ## v1.8.0
2
31
 
3
32
  ## [1.8.0](https://github.com/julio-supervisor/agents-studio-be/compare/v1.7.0...v1.8.0) (2025-10-15)
package/README.md CHANGED
@@ -32,6 +32,29 @@ await client.agents
32
32
  .instructions('version-1')
33
33
  .create({ order: 1, content: 'Saluda con empatía' });
34
34
 
35
+ // administrar blueprints por versión
36
+ const blueprints = client.agents.blueprints(agent.agentId);
37
+ await blueprints
38
+ .version('version-1')
39
+ .create({
40
+ languageId: 'es-MX',
41
+ personalityName: 'Embajador de marca',
42
+ personalityRole: 'Consultor de adopción',
43
+ targetAudience: 'Usuarios nuevos',
44
+ mainGoal: 'Incrementar la activación',
45
+ personalityInitialGreeting: '¡Hola! Soy tu asistente de onboarding.',
46
+ personalityMessageStyleId: 'style-uuid',
47
+ personalityToneStyleId: 'tone-uuid',
48
+ requiredData: [{ key: 'industry', label: 'Industria' }],
49
+ criticalRules: ['Nunca compartas precios internos'],
50
+ topicsAllowed: ['onboarding', 'soporte'],
51
+ topicsForbidden: ['facturación'],
52
+ });
53
+
54
+ // los helpers del entity también exponen blueprints
55
+ const agentBlueprint = await agent.blueprints.version('version-1').get();
56
+ console.log(agentBlueprint.personalityName);
57
+
35
58
  // catálogo y recursos de tools
36
59
  const tools = await client.tools.list({ agentType: 'chat' });
37
60
  await client.tools.uploadResource(tools.data[0].identifier, formData);
package/dist/index.cjs CHANGED
@@ -22,11 +22,13 @@ __export(index_exports, {
22
22
  HttpError: () => HttpError,
23
23
  NetworkError: () => NetworkError,
24
24
  TimeoutError: () => TimeoutError,
25
+ bindAgentBlueprints: () => bindAgentBlueprints,
25
26
  bindAgentInstructions: () => bindAgentInstructions,
26
27
  bindAgentPhones: () => bindAgentPhones,
27
28
  bindAgentSchedule: () => bindAgentSchedule,
28
29
  bindAgentTags: () => bindAgentTags,
29
30
  bindAgentVersions: () => bindAgentVersions,
31
+ createAgentBlueprintsApi: () => createAgentBlueprintsApi,
30
32
  createAgentEntity: () => createAgentEntity,
31
33
  createAgentInstructionsApi: () => createAgentInstructionsApi,
32
34
  createAgentPhonesApi: () => createAgentPhonesApi,
@@ -42,98 +44,6 @@ __export(index_exports, {
42
44
  });
43
45
  module.exports = __toCommonJS(index_exports);
44
46
 
45
- // src/utils/pagination.ts
46
- var toNumber = (value) => {
47
- return typeof value === "number" ? value : void 0;
48
- };
49
- var toBoolean = (value) => {
50
- return typeof value === "boolean" ? value : void 0;
51
- };
52
- function cloneOptions(options, overrides) {
53
- return {
54
- ...options ?? {},
55
- ...overrides ?? {}
56
- };
57
- }
58
- function normalizeMeta(meta) {
59
- if (!meta) {
60
- return void 0;
61
- }
62
- const metaRecord = meta;
63
- return {
64
- ...metaRecord,
65
- page: toNumber(metaRecord.page),
66
- limit: toNumber(metaRecord.limit) ?? toNumber(metaRecord.pageSize),
67
- total: toNumber(metaRecord.total) ?? toNumber(metaRecord.totalItems),
68
- hasNext: toBoolean(metaRecord.hasNext),
69
- hasPrevious: toBoolean(metaRecord.hasPrevious),
70
- totalPages: toNumber(metaRecord.totalPages)
71
- };
72
- }
73
- function resolveHasNext(meta, limit) {
74
- if (typeof meta?.hasNext === "boolean") {
75
- return meta.hasNext;
76
- }
77
- if (typeof meta?.total === "number" && typeof meta?.page === "number" && typeof limit === "number") {
78
- return meta.page * limit < meta.total;
79
- }
80
- if (typeof meta?.totalPages === "number" && typeof meta?.page === "number") {
81
- return meta.page < meta.totalPages;
82
- }
83
- return false;
84
- }
85
- function resolveHasPrevious(meta) {
86
- if (typeof meta?.hasPrevious === "boolean") {
87
- return meta.hasPrevious;
88
- }
89
- if (typeof meta?.page === "number") {
90
- return meta.page > 1;
91
- }
92
- return false;
93
- }
94
- function attachPaginator(response, fetchPage, options) {
95
- const baseOptions = options ?? {};
96
- const meta = normalizeMeta(response.meta);
97
- const currentPage = typeof meta?.page === "number" ? meta.page : typeof baseOptions.page === "number" ? baseOptions.page : 1;
98
- const currentLimit = typeof meta?.limit === "number" ? meta.limit : typeof baseOptions.limit === "number" ? baseOptions.limit : void 0;
99
- const getNextResponse = async (page, overrides) => {
100
- const nextOptions = cloneOptions(baseOptions, {
101
- ...overrides,
102
- page
103
- });
104
- const nextResponse = await fetchPage(nextOptions);
105
- return attachPaginator(nextResponse, fetchPage, nextOptions);
106
- };
107
- return Object.assign(response, {
108
- async next() {
109
- if (!resolveHasNext(meta, currentLimit)) {
110
- return null;
111
- }
112
- return getNextResponse(currentPage + 1);
113
- },
114
- async prev() {
115
- if (!resolveHasPrevious(meta)) {
116
- return null;
117
- }
118
- return getNextResponse(Math.max(1, currentPage - 1));
119
- },
120
- async page(pageNumber) {
121
- if (typeof pageNumber !== "number" || Number.isNaN(pageNumber)) {
122
- throw new TypeError("page(pageNumber) requires a numeric value.");
123
- }
124
- if (pageNumber < 1) {
125
- throw new RangeError(
126
- "Page numbers must be greater than or equal to 1."
127
- );
128
- }
129
- return getNextResponse(pageNumber);
130
- },
131
- async reload() {
132
- return getNextResponse(currentPage);
133
- }
134
- });
135
- }
136
-
137
47
  // src/errors.ts
138
48
  var HttpError = class extends Error {
139
49
  constructor(status, statusText, body, url) {
@@ -424,6 +334,149 @@ function getQueryBuilderString(value) {
424
334
  return String(result);
425
335
  }
426
336
 
337
+ // src/api/agent-blueprints.ts
338
+ function createAgentBlueprintsApi(cfg) {
339
+ const { base, doFetch } = createHttp(cfg);
340
+ const jsonHeaders = { "content-type": "application/json" };
341
+ const list = async (agentId, options = {}) => {
342
+ const query = serializeListOptions({ filter: options.filter });
343
+ const res = await doFetch(`${base}/v1/agents/${agentId}/blueprints`, {
344
+ method: "GET",
345
+ query
346
+ });
347
+ return res.json();
348
+ };
349
+ const get = async (agentId, versionId) => {
350
+ const res = await doFetch(
351
+ `${base}/v1/agents/${agentId}/versions/${versionId}/blueprint`,
352
+ {
353
+ method: "GET"
354
+ }
355
+ );
356
+ return res.json();
357
+ };
358
+ const create = async (agentId, versionId, payload) => {
359
+ const res = await doFetch(
360
+ `${base}/v1/agents/${agentId}/versions/${versionId}/blueprint`,
361
+ {
362
+ method: "POST",
363
+ body: JSON.stringify(payload),
364
+ headers: jsonHeaders
365
+ }
366
+ );
367
+ return res.json();
368
+ };
369
+ const update = async (agentId, versionId, payload) => {
370
+ const res = await doFetch(
371
+ `${base}/v1/agents/${agentId}/versions/${versionId}/blueprint`,
372
+ {
373
+ method: "PATCH",
374
+ body: JSON.stringify(payload),
375
+ headers: jsonHeaders
376
+ }
377
+ );
378
+ return res.json();
379
+ };
380
+ return {
381
+ list,
382
+ get,
383
+ create,
384
+ update
385
+ };
386
+ }
387
+
388
+ // src/utils/pagination.ts
389
+ var toNumber = (value) => {
390
+ return typeof value === "number" ? value : void 0;
391
+ };
392
+ var toBoolean = (value) => {
393
+ return typeof value === "boolean" ? value : void 0;
394
+ };
395
+ function cloneOptions(options, overrides) {
396
+ return {
397
+ ...options ?? {},
398
+ ...overrides ?? {}
399
+ };
400
+ }
401
+ function normalizeMeta(meta) {
402
+ if (!meta) {
403
+ return void 0;
404
+ }
405
+ const metaRecord = meta;
406
+ return {
407
+ ...metaRecord,
408
+ page: toNumber(metaRecord.page),
409
+ limit: toNumber(metaRecord.limit) ?? toNumber(metaRecord.pageSize),
410
+ total: toNumber(metaRecord.total) ?? toNumber(metaRecord.totalItems),
411
+ hasNext: toBoolean(metaRecord.hasNext),
412
+ hasPrevious: toBoolean(metaRecord.hasPrevious),
413
+ totalPages: toNumber(metaRecord.totalPages)
414
+ };
415
+ }
416
+ function resolveHasNext(meta, limit) {
417
+ if (typeof meta?.hasNext === "boolean") {
418
+ return meta.hasNext;
419
+ }
420
+ if (typeof meta?.total === "number" && typeof meta?.page === "number" && typeof limit === "number") {
421
+ return meta.page * limit < meta.total;
422
+ }
423
+ if (typeof meta?.totalPages === "number" && typeof meta?.page === "number") {
424
+ return meta.page < meta.totalPages;
425
+ }
426
+ return false;
427
+ }
428
+ function resolveHasPrevious(meta) {
429
+ if (typeof meta?.hasPrevious === "boolean") {
430
+ return meta.hasPrevious;
431
+ }
432
+ if (typeof meta?.page === "number") {
433
+ return meta.page > 1;
434
+ }
435
+ return false;
436
+ }
437
+ function attachPaginator(response, fetchPage, options) {
438
+ const baseOptions = options ?? {};
439
+ const meta = normalizeMeta(response.meta);
440
+ const currentPage = typeof meta?.page === "number" ? meta.page : typeof baseOptions.page === "number" ? baseOptions.page : 1;
441
+ const currentLimit = typeof meta?.limit === "number" ? meta.limit : typeof baseOptions.limit === "number" ? baseOptions.limit : void 0;
442
+ const getNextResponse = async (page, overrides) => {
443
+ const nextOptions = cloneOptions(baseOptions, {
444
+ ...overrides,
445
+ page
446
+ });
447
+ const nextResponse = await fetchPage(nextOptions);
448
+ return attachPaginator(nextResponse, fetchPage, nextOptions);
449
+ };
450
+ return Object.assign(response, {
451
+ async next() {
452
+ if (!resolveHasNext(meta, currentLimit)) {
453
+ return null;
454
+ }
455
+ return getNextResponse(currentPage + 1);
456
+ },
457
+ async prev() {
458
+ if (!resolveHasPrevious(meta)) {
459
+ return null;
460
+ }
461
+ return getNextResponse(Math.max(1, currentPage - 1));
462
+ },
463
+ async page(pageNumber) {
464
+ if (typeof pageNumber !== "number" || Number.isNaN(pageNumber)) {
465
+ throw new TypeError("page(pageNumber) requires a numeric value.");
466
+ }
467
+ if (pageNumber < 1) {
468
+ throw new RangeError(
469
+ "Page numbers must be greater than or equal to 1."
470
+ );
471
+ }
472
+ return getNextResponse(pageNumber);
473
+ },
474
+ async reload() {
475
+ return getNextResponse(currentPage);
476
+ }
477
+ });
478
+ }
479
+
427
480
  // src/api/agent-instructions.ts
428
481
  function createAgentInstructionsApi(cfg) {
429
482
  const { base, doFetch } = createHttp(cfg);
@@ -714,6 +767,24 @@ var bindAgentVersions = (api, agentId) => ({
714
767
  };
715
768
  }
716
769
  });
770
+ var bindAgentBlueprints = (api, agentId) => ({
771
+ list(opts) {
772
+ return api.list(agentId, opts);
773
+ },
774
+ version(versionId) {
775
+ return {
776
+ get() {
777
+ return api.get(agentId, versionId);
778
+ },
779
+ create(payload) {
780
+ return api.create(agentId, versionId, payload);
781
+ },
782
+ update(payload) {
783
+ return api.update(agentId, versionId, payload);
784
+ }
785
+ };
786
+ }
787
+ });
717
788
  var createAgentEntity = (dto, options) => {
718
789
  const {
719
790
  instructionsApi,
@@ -721,6 +792,7 @@ var createAgentEntity = (dto, options) => {
721
792
  phonesApi,
722
793
  scheduleApi,
723
794
  versionsApi,
795
+ blueprintsApi,
724
796
  reload,
725
797
  updateAgent,
726
798
  deleteAgent
@@ -732,6 +804,7 @@ var createAgentEntity = (dto, options) => {
732
804
  phones: bindAgentPhones(phonesApi, dto.agentId),
733
805
  schedule: bindAgentSchedule(scheduleApi, dto.agentId),
734
806
  versions: bindAgentVersions(versionsApi, dto.agentId),
807
+ blueprints: bindAgentBlueprints(blueprintsApi, dto.agentId),
735
808
  async save(patch) {
736
809
  return updateAgent(dto.agentId, patch);
737
810
  },
@@ -814,6 +887,7 @@ function createAgentsApi(cfg, relatedApis) {
814
887
  phonesApi: relatedApis.phonesApi,
815
888
  scheduleApi: relatedApis.scheduleApi,
816
889
  versionsApi: relatedApis.versionsApi,
890
+ blueprintsApi: relatedApis.blueprintsApi,
817
891
  reload: async (agentId) => {
818
892
  const latest = await getAgentDetail(agentId);
819
893
  return wrapAgent(latest);
@@ -1065,13 +1139,15 @@ function createClient(initialCfg) {
1065
1139
  const phonesApi = createAgentPhonesApi(runtimeCfg);
1066
1140
  const scheduleApi = createAgentScheduleApi(runtimeCfg);
1067
1141
  const versionsApi = createAgentVersionsApi(runtimeCfg);
1142
+ const blueprintsApi = createAgentBlueprintsApi(runtimeCfg);
1068
1143
  const voicesApi = createVoicesApi(runtimeCfg);
1069
1144
  const agentsApi = createAgentsApi(runtimeCfg, {
1070
1145
  instructionsApi,
1071
1146
  tagsApi,
1072
1147
  phonesApi,
1073
1148
  scheduleApi,
1074
- versionsApi
1149
+ versionsApi,
1150
+ blueprintsApi
1075
1151
  });
1076
1152
  const instructionsNamespace = Object.assign(
1077
1153
  (agentId) => bindAgentInstructions(instructionsApi, agentId),
@@ -1093,6 +1169,10 @@ function createClient(initialCfg) {
1093
1169
  (agentId) => bindAgentVersions(versionsApi, agentId),
1094
1170
  versionsApi
1095
1171
  );
1172
+ const blueprintsNamespace = Object.assign(
1173
+ (agentId) => bindAgentBlueprints(blueprintsApi, agentId),
1174
+ blueprintsApi
1175
+ );
1096
1176
  const apis = {
1097
1177
  agents: {
1098
1178
  ...agentsApi,
@@ -1100,7 +1180,8 @@ function createClient(initialCfg) {
1100
1180
  tags: tagsNamespace,
1101
1181
  phones: phonesNamespace,
1102
1182
  schedule: scheduleNamespace,
1103
- versions: versionsNamespace
1183
+ versions: versionsNamespace,
1184
+ blueprints: blueprintsNamespace
1104
1185
  },
1105
1186
  workspaces: createWorkspacesApi(runtimeCfg),
1106
1187
  tools: createToolsApi(runtimeCfg),
@@ -1152,11 +1233,13 @@ function createClient(initialCfg) {
1152
1233
  HttpError,
1153
1234
  NetworkError,
1154
1235
  TimeoutError,
1236
+ bindAgentBlueprints,
1155
1237
  bindAgentInstructions,
1156
1238
  bindAgentPhones,
1157
1239
  bindAgentSchedule,
1158
1240
  bindAgentTags,
1159
1241
  bindAgentVersions,
1242
+ createAgentBlueprintsApi,
1160
1243
  createAgentEntity,
1161
1244
  createAgentInstructionsApi,
1162
1245
  createAgentPhonesApi,