@onereach/idw-init-account-resources 0.19.7 → 0.20.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.
@@ -1,5 +1,5 @@
1
1
   WARN  Issue while reading "/builds/onereach/platform/idw/idw-template/.npmrc". Failed to replace env in config: ${OR_NPM_TOKEN}
2
2
 
3
- > @onereach/idw-init-account-resources@0.19.6 build /builds/onereach/platform/idw/idw-template/packages/level-system/idw-init-account-resources
3
+ > @onereach/idw-init-account-resources@0.19.7 build /builds/onereach/platform/idw/idw-template/packages/level-system/idw-init-account-resources
4
4
  > rimraf dist && tsc -b && mkdir dist/assets/skills/documentation && cp -r src/assets/skills/documentation/* dist/assets/skills/documentation
5
5
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @onereach/idw-init-account-resources
2
2
 
3
+ ## 0.20.0
4
+
5
+ ### Minor Changes
6
+
7
+ - bcf139e: refactor (fix) skill & domain initializer, use new tables instead of old (core)
8
+
3
9
  ## 0.19.7
4
10
 
5
11
  ### Patch Changes
package/dist/index.js CHANGED
@@ -113,20 +113,17 @@ function init(token_1, discoveryUrl_1) {
113
113
  return [4, logAsyncFunc('Files init', function () { return resources.files.init(); })];
114
114
  case 1:
115
115
  files = _a.sent();
116
- return [4, logAsyncFunc('RDB init', function () { return resources.rdb.init(); })];
116
+ return [4, logAsyncFunc('RDB init', function () { return resources.rdb.init({ files: files }); })];
117
117
  case 2:
118
- _a.sent();
119
- return [4, logAsyncFunc('IDW init', function () { return resources.idw.init(files); })];
120
- case 3:
121
118
  _a.sent();
122
119
  return [4, logAsyncFunc('HITL init', function () { return resources.hitl.init(); })];
123
- case 4:
120
+ case 3:
124
121
  _a.sent();
125
122
  return [4, logAsyncFunc('Lookup init', function () { return resources.lookup.init(); })];
126
- case 5:
123
+ case 4:
127
124
  collections = _a.sent();
128
125
  return [4, logAsyncFunc('Contacts init', function () { return resources.contacts.init(); })];
129
- case 6:
126
+ case 5:
130
127
  contactBooks = _a.sent();
131
128
  return [2, {
132
129
  collections: collections,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,kDAA4B;AAE5B,+CAOwB;AAQxB,SAAe,gBAAgB,CAAC,MAAc,EAAE,IAAY,EAAE,EAAsB;;;;;;;oBAEhF,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;oBACzB,WAAM,EAAE,EAAE,EAAA;;oBAArB,QAAQ,GAAG,SAAU;oBAC3B,MAAM,CAAC,IAAI,OAAX,MAAM,iBAAM,uBAAuB,EAAE,IAAI,GAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAE;oBAE3F,WAAO,QAAQ,EAAC;;;oBAEV,SAAS,GAAG,IAAI,KAAK,CAAC,yBAAyB,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,GAAC,EAAE,CAAC,CAAC;oBAC5E,MAAM,CAAC,KAAK,CAAC,GAAC,CAAC,CAAC;oBAEhB,MAAM,SAAS,CAAC;;;;;CAEnB;AAED,SAAsB,IAAI;wDAAC,KAAa,EAAE,YAAoB,EAAE,MAAwB;;QAAxB,uBAAA,EAAA,gBAAwB;;;;oBACtF,IAAA,gBAAM,EAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;oBACrC,IAAA,gBAAM,EAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;oBAE7C,SAAS,GAAG;wBAChB,GAAG,EAAE,IAAI,+BAAgB,CAAC;4BACxB,KAAK,OAAA;4BACL,YAAY,cAAA;yBACb,CAAC;wBACF,MAAM,EAAE,IAAI,kCAAmB,CAAC;4BAC9B,KAAK,OAAA;4BACL,YAAY,cAAA;yBACb,CAAC;wBACF,GAAG,EAAE,IAAI,+BAAgB,CAAC;4BACxB,KAAK,OAAA;4BACL,YAAY,cAAA;yBACb,CAAC;wBACF,IAAI,EAAE,IAAI,gCAAiB,CAAC;4BAC1B,KAAK,OAAA;4BACL,YAAY,cAAA;yBACb,CAAC;wBACF,QAAQ,EAAE,IAAI,oCAAqB,CAAC;4BAClC,KAAK,OAAA;4BACL,YAAY,cAAA;yBACb,CAAC;wBACF,KAAK,EAAE,IAAI,iCAAkB,CAAC;4BAC5B,KAAK,OAAA;4BACL,YAAY,cAAA;yBACb,CAAC;qBACH,CAAC;oBAEI,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAC3C,WAAM,YAAY,CAAC,YAAY,EAAE,cAAM,OAAA,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAtB,CAAsB,CAAC,EAAA;;oBAAtE,KAAK,GAAG,SAA8D;oBAE5E,WAAM,YAAY,CAAC,UAAU,EAAE,cAAM,OAAA,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,OAAA,EAAE,CAAC,EAA7B,CAA6B,CAAC,EAAA;;oBAAnE,SAAmE,CAAC;oBACpE,WAAM,YAAY,CAAC,WAAW,EAAE,cAAM,OAAA,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAArB,CAAqB,CAAC,EAAA;;oBAA5D,SAA4D,CAAC;oBAKzC,WAAM,YAAY,CAAC,aAAa,EAAE,cAAM,OAAA,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAvB,CAAuB,CAAC,EAAA;;oBAA9E,WAAW,GAAG,SAAgE;oBAC/D,WAAM,YAAY,CAAC,eAAe,EAAE,cAAM,OAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAzB,CAAyB,CAAC,EAAA;;oBAAnF,YAAY,GAAG,SAAoE;oBAEzF,WAAO;4BACL,WAAW,aAAA;4BACX,YAAY,cAAA;4BACZ,KAAK,OAAA;yBACN,EAAC;;;;CACH;AAhDD,oBAgDC"}
@@ -40,9 +40,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.InitRdbResources = void 0;
43
+ var files_1 = require("@or-sdk/files");
44
+ var idw_1 = require("@or-sdk/idw");
45
+ var crypto_1 = require("crypto");
43
46
  var path_1 = __importDefault(require("path"));
44
47
  var domains_1 = require("../assets/domains");
45
48
  var models_1 = require("../assets/models");
49
+ var skills_1 = require("../assets/skills");
50
+ var encodeAccountId_1 = require("../utils/encodeAccountId");
46
51
  var OrPgClient_1 = require("../utils/OrPgClient");
47
52
  var umzugSetup_1 = require("../utils/umzugSetup");
48
53
  var InitRdbResources = (function () {
@@ -54,26 +59,38 @@ var InitRdbResources = (function () {
54
59
  token: this.token,
55
60
  discoveryUrl: this.discoveryUrl,
56
61
  });
62
+ this.idwApi = new idw_1.IdwApiV2({
63
+ token: token,
64
+ discoveryUrl: discoveryUrl,
65
+ });
66
+ this.filesApi = new files_1.Files({
67
+ token: token,
68
+ discoveryUrl: discoveryUrl,
69
+ });
57
70
  }
58
- InitRdbResources.prototype.init = function () {
71
+ InitRdbResources.prototype.init = function (data) {
59
72
  return __awaiter(this, void 0, void 0, function () {
60
- var services, sdkApiUrl, accountId, sequelize, umzug, error_1;
61
- return __generator(this, function (_a) {
62
- switch (_a.label) {
63
- case 0: return [4, fetch("".concat(this.discoveryUrl, "/api/v2/services")).then(function (res) { return res.json(); })];
73
+ var files, services, sdkApiUrl, accountId, sequelize, umzug, error_1;
74
+ var _a, _b;
75
+ return __generator(this, function (_c) {
76
+ switch (_c.label) {
77
+ case 0:
78
+ files = data.files;
79
+ return [4, fetch("".concat(this.discoveryUrl, "/api/v2/services")).then(function (res) { return res.json(); })];
64
80
  case 1:
65
- services = (_a.sent()).services;
81
+ services = (_c.sent()).services;
66
82
  sdkApiUrl = services.find(function (service) { return service.serviceKey === 'sdk-api'; }).url;
67
83
  this.mcpApi = services.find(function (service) { return service.serviceKey === 'mcp-api'; }).url;
84
+ this.chatUrl = (_b = (_a = services.find(function (service) { return service.serviceKey === 'rwc'; })) === null || _a === void 0 ? void 0 : _a.url) === null || _b === void 0 ? void 0 : _b.replace('rwc.', 'chat.');
68
85
  return [4, fetch("".concat(sdkApiUrl, "/auth/token"), {
69
86
  headers: { Authorization: this.token },
70
87
  }).then(function (res) { return res.json(); })];
71
88
  case 2:
72
- accountId = (_a.sent()).accountId;
89
+ accountId = (_c.sent()).accountId;
73
90
  this.accPart = this.encode(accountId);
74
91
  return [4, this.pgClient.getSequelize(OrPgClient_1.DB_NAME.IDW)];
75
92
  case 3:
76
- sequelize = _a.sent();
93
+ sequelize = _c.sent();
77
94
  umzug = (0, umzugSetup_1.setupUmzug)({
78
95
  accountId: accountId,
79
96
  migrationsPath: path_1.default.join(__dirname, '../assets/db_migrations/*.{js,ts}'),
@@ -81,34 +98,61 @@ var InitRdbResources = (function () {
81
98
  token: this.token,
82
99
  sequelizeInstance: sequelize,
83
100
  });
84
- _a.label = 4;
101
+ _c.label = 4;
85
102
  case 4:
86
- _a.trys.push([4, 6, , 7]);
103
+ _c.trys.push([4, 6, , 7]);
87
104
  return [4, umzug.up()];
88
105
  case 5:
89
- _a.sent();
106
+ _c.sent();
90
107
  return [3, 7];
91
108
  case 6:
92
- error_1 = _a.sent();
109
+ error_1 = _c.sent();
93
110
  console.error('<======== Migration failed ========>');
94
111
  console.error('Migration type: ', error_1.name);
95
112
  console.warn('Migration error detail: ', error_1.detail || '<no detailed info>');
96
113
  throw new Error('Migration failed', { cause: error_1 });
97
- case 7: return [4, this.upsertDefaultData(sequelize, models_1.models, models_1.datasources)];
114
+ case 7: return [4, this.upsertDefaultData(sequelize, {
115
+ models: models_1.models,
116
+ datasources: models_1.datasources,
117
+ domains: domains_1.domains,
118
+ skills: skills_1.skills,
119
+ files: files,
120
+ }, accountId)];
98
121
  case 8:
99
- _a.sent();
122
+ _c.sent();
100
123
  return [4, this.linkOldKnowledgesToDefaultDomain(sequelize)];
101
124
  case 9:
102
- _a.sent();
125
+ _c.sent();
103
126
  return [4, sequelize.close()];
104
127
  case 10:
128
+ _c.sent();
129
+ return [2];
130
+ }
131
+ });
132
+ });
133
+ };
134
+ InitRdbResources.prototype.upsertDefaultData = function (sequelize, data, accountId) {
135
+ return __awaiter(this, void 0, void 0, function () {
136
+ var models, datasources, domains, skills;
137
+ return __generator(this, function (_a) {
138
+ switch (_a.label) {
139
+ case 0:
140
+ models = data.models, datasources = data.datasources, domains = data.domains, skills = data.skills;
141
+ return [4, this.setDatasources(sequelize, models, datasources)];
142
+ case 1:
143
+ _a.sent();
144
+ return [4, this.setSkillsAndDomains(sequelize, domains, skills, data.files, accountId)];
145
+ case 2:
146
+ _a.sent();
147
+ return [4, this.removeDeletedSkills(sequelize, skills)];
148
+ case 3:
105
149
  _a.sent();
106
150
  return [2];
107
151
  }
108
152
  });
109
153
  });
110
154
  };
111
- InitRdbResources.prototype.upsertDefaultData = function (sequelize_1) {
155
+ InitRdbResources.prototype.setDatasources = function (sequelize_1) {
112
156
  return __awaiter(this, arguments, void 0, function (sequelize, models, datasources) {
113
157
  var error_2;
114
158
  var _this = this;
@@ -205,11 +249,116 @@ var InitRdbResources = (function () {
205
249
  }); })];
206
250
  case 1:
207
251
  _a.sent();
208
- console.log('Default data successfully upserted.');
252
+ console.log('Default datasources successfully upserted.');
209
253
  return [3, 3];
210
254
  case 2:
211
255
  error_2 = _a.sent();
212
- console.error('Error upserting default data:', error_2);
256
+ console.error('Error upserting default datasources data:', error_2);
257
+ return [3, 3];
258
+ case 3: return [2];
259
+ }
260
+ });
261
+ });
262
+ };
263
+ InitRdbResources.prototype.setSkillsAndDomains = function (sequelize_1) {
264
+ return __awaiter(this, arguments, void 0, function (sequelize, domains, skills, files, accountId) {
265
+ var error_3;
266
+ var _this = this;
267
+ if (domains === void 0) { domains = []; }
268
+ if (skills === void 0) { skills = []; }
269
+ return __generator(this, function (_a) {
270
+ switch (_a.label) {
271
+ case 0:
272
+ _a.trys.push([0, 2, , 3]);
273
+ return [4, sequelize.transaction(function (transaction) { return __awaiter(_this, void 0, void 0, function () {
274
+ var index, domainMap, _i, domains_2, domain, domainResult, transformedSkills, _a, transformedSkills_1, skill, skillResult, skillId;
275
+ var _this = this;
276
+ return __generator(this, function (_b) {
277
+ switch (_b.label) {
278
+ case 0:
279
+ index = 0;
280
+ domainMap = {};
281
+ _i = 0, domains_2 = domains;
282
+ _b.label = 1;
283
+ case 1:
284
+ if (!(_i < domains_2.length)) return [3, 4];
285
+ domain = domains_2[_i];
286
+ return [4, sequelize.query("\n INSERT INTO domains (id, account_id, slug, name, abbreviation, image, created_at, updated_at)\n VALUES (:id, :accountId, :slug, :name, :abbreviation, :image, :created_at, :updated_at)\n ON CONFLICT (slug) DO UPDATE\n SET abbreviation = EXCLUDED.abbreviation,\n updated_at = NOW()\n RETURNING id;\n ", {
287
+ replacements: {
288
+ id: (0, crypto_1.randomUUID)(),
289
+ accountId: accountId,
290
+ slug: this.slugify(domain.name),
291
+ name: domain.name,
292
+ abbreviation: domain.abbreviation,
293
+ image: "/domains/img-".concat(index, ".png"),
294
+ created_at: new Date(),
295
+ updated_at: new Date(),
296
+ },
297
+ transaction: transaction,
298
+ })];
299
+ case 2:
300
+ domainResult = (_b.sent())[0];
301
+ index++;
302
+ domainMap[domain.name] = domainResult[0].id;
303
+ _b.label = 3;
304
+ case 3:
305
+ _i++;
306
+ return [3, 1];
307
+ case 4:
308
+ transformedSkills = skills.map(function (skill) { return _this.mapSkillData(skill, files, accountId); });
309
+ _a = 0, transformedSkills_1 = transformedSkills;
310
+ _b.label = 5;
311
+ case 5:
312
+ if (!(_a < transformedSkills_1.length)) return [3, 10];
313
+ skill = transformedSkills_1[_a];
314
+ return [4, sequelize.query("\n INSERT INTO skills (id, account_id, slug, name, description, meta, url, created_at, updated_at)\n VALUES (:id, :accountId, :slug, :name, :description, :meta, :url, :created_at, :updated_at)\n ON CONFLICT (slug) DO UPDATE\n SET description = EXCLUDED.description,\n meta = EXCLUDED.meta,\n url = EXCLUDED.url,\n updated_at = NOW()\n RETURNING id;\n ", {
315
+ replacements: {
316
+ id: (0, crypto_1.randomUUID)(),
317
+ accountId: accountId,
318
+ slug: this.slugify(skill.name),
319
+ name: skill.name,
320
+ description: skill.description,
321
+ meta: JSON.stringify(skill.meta),
322
+ url: skill.url,
323
+ created_at: new Date(),
324
+ updated_at: new Date(),
325
+ },
326
+ transaction: transaction,
327
+ })];
328
+ case 6:
329
+ skillResult = (_b.sent())[0];
330
+ skillId = skillResult[0].id;
331
+ return [4, sequelize.query('DELETE FROM domain_skills WHERE skill = :skill_id;', {
332
+ replacements: { skill_id: skillId },
333
+ transaction: transaction,
334
+ })];
335
+ case 7:
336
+ _b.sent();
337
+ return [4, sequelize.query("\n INSERT INTO domain_skills (id, skill, domain)\n VALUES (:id, :skill, :domain)", {
338
+ replacements: {
339
+ id: (0, crypto_1.randomUUID)(),
340
+ skill: skillId,
341
+ domain: domainMap[skill.domain],
342
+ },
343
+ transaction: transaction,
344
+ })];
345
+ case 8:
346
+ _b.sent();
347
+ _b.label = 9;
348
+ case 9:
349
+ _a++;
350
+ return [3, 5];
351
+ case 10: return [2];
352
+ }
353
+ });
354
+ }); })];
355
+ case 1:
356
+ _a.sent();
357
+ console.log('Default skills and domains successfully upserted.');
358
+ return [3, 3];
359
+ case 2:
360
+ error_3 = _a.sent();
361
+ console.error('Error upserting default skills and domains data:', error_3);
213
362
  return [3, 3];
214
363
  case 3: return [2];
215
364
  }
@@ -264,6 +413,86 @@ var InitRdbResources = (function () {
264
413
  var n = BigInt('0x' + hex);
265
414
  return n.toString(36);
266
415
  };
416
+ InitRdbResources.prototype.removeDeletedSkills = function (sequelize, skillDefinitions) {
417
+ return __awaiter(this, void 0, void 0, function () {
418
+ var skills, isSystem, isDeleted, deletedSystemSkills, DOCUMENTATION_FOLDER;
419
+ var _this = this;
420
+ return __generator(this, function (_a) {
421
+ switch (_a.label) {
422
+ case 0: return [4, sequelize.query('SELECT * FROM skills')];
423
+ case 1:
424
+ skills = (_a.sent())[0];
425
+ isSystem = function (skill) { var _a, _b; return (_b = (_a = skill.meta) === null || _a === void 0 ? void 0 : _a.skill) === null || _b === void 0 ? void 0 : _b.isSystem; };
426
+ isDeleted = function (skill) { return !skillDefinitions.find(function (item) { return item.name === skill.name; }); };
427
+ deletedSystemSkills = skills.filter(function (skill) { return isSystem(skill) && isDeleted(skill); });
428
+ return [4, Promise.all(deletedSystemSkills.map(function (skill) { return _this.idwApi.deleteSkill(skill.id); }))];
429
+ case 2:
430
+ _a.sent();
431
+ return [4, Promise.all(deletedSystemSkills.map(function (skill) { return sequelize.query('' +
432
+ 'DELETE FROM skills WHERE id = :skill_id', { replacements: { skill_id: skill.id } }); }))];
433
+ case 3:
434
+ _a.sent();
435
+ DOCUMENTATION_FOLDER = 'IDW/docs';
436
+ return [4, Promise.all(deletedSystemSkills.map(function (skill) {
437
+ return _this.filesApi
438
+ .deleteFile("".concat(DOCUMENTATION_FOLDER, "/").concat(skill.slug, ".pdf"), true)
439
+ .catch(function (err) {
440
+ console.warn("Failed to delete file for skill \"".concat(skill.slug, "\":"), err.message);
441
+ return null;
442
+ });
443
+ }))];
444
+ case 4:
445
+ _a.sent();
446
+ return [2];
447
+ }
448
+ });
449
+ });
450
+ };
451
+ ;
452
+ InitRdbResources.prototype.slugify = function (string) {
453
+ var result = String(string)
454
+ .normalize('NFKD')
455
+ .replace(/[\u0300-\u036f]/g, '')
456
+ .trim()
457
+ .toLowerCase()
458
+ .replace(/[^a-z0-9 -]/g, '')
459
+ .replace(/\s+/g, '-')
460
+ .replace(/-+/g, '-')
461
+ .replace(/^-+|-+$/g, '');
462
+ var alphanumCount = (result.match(/[a-z0-9]/g) || []).length;
463
+ if (alphanumCount < 2) {
464
+ throw new Error('Slug must have at least 2 alphanumeric characters');
465
+ }
466
+ return result;
467
+ };
468
+ ;
469
+ InitRdbResources.prototype.mapSkillData = function (skillDefinition, files, account_id) {
470
+ var _a, _b;
471
+ var encodedAccountId = (0, encodeAccountId_1.encodeAccountId)(account_id);
472
+ return {
473
+ slug: this.slugify(skillDefinition.name),
474
+ name: skillDefinition.name,
475
+ description: skillDefinition.description,
476
+ url: "".concat(this.chatUrl, "/").concat(encodedAccountId, "/").concat(skillDefinition.meta.chatId),
477
+ domain: (_a = skillDefinition.domain) !== null && _a !== void 0 ? _a : domains_1.UnlabelledDomain.name,
478
+ meta: {
479
+ chat: {
480
+ id: skillDefinition.meta.chatId,
481
+ },
482
+ skill: {
483
+ advanced: skillDefinition.advanced,
484
+ disabled: skillDefinition.disabled,
485
+ editable: skillDefinition.editable,
486
+ userRole: skillDefinition.forRoles,
487
+ forUsers: skillDefinition.forUsers,
488
+ prompt: skillDefinition.meta.prompt,
489
+ promptParams: skillDefinition.meta.promptParams,
490
+ isSystem: (_b = skillDefinition.isSystem) !== null && _b !== void 0 ? _b : true,
491
+ docUrl: files[skillDefinition.uid],
492
+ },
493
+ },
494
+ };
495
+ };
267
496
  return InitRdbResources;
268
497
  }());
269
498
  exports.InitRdbResources = InitRdbResources;
@@ -1 +1 @@
1
- {"version":3,"file":"rdb.js","sourceRoot":"","sources":["../../src/initializers/rdb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rdb.js","sourceRoot":"","sources":["../../src/initializers/rdb.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onereach/idw-init-account-resources",
3
- "version": "0.19.7",
3
+ "version": "0.20.0",
4
4
  "description": "Creation of required resources in OneReach account to enable IDW",
5
5
  "license": "UNLICENSED",
6
6
  "contributors": [
@@ -15,7 +15,7 @@
15
15
  "@or-sdk/files": "3.4.36",
16
16
  "@or-sdk/graph": "1.7.26",
17
17
  "@or-sdk/hitl": "0.34.35",
18
- "@or-sdk/idw": "7.11.1",
18
+ "@or-sdk/idw": "8.1.1",
19
19
  "@or-sdk/key-value-storage": "^0.27.10",
20
20
  "@or-sdk/lookup": "1.14.5",
21
21
  "@or-sdk/pgsql": "1.1.8",
package/src/index.ts CHANGED
@@ -66,10 +66,12 @@ export async function init(token: string, discoveryUrl: string, logger: Logger =
66
66
  const logAsyncFunc = FuncExecutionLog.bind(null, logger);
67
67
  const files = await logAsyncFunc('Files init', () => resources.files.init());
68
68
 
69
- await logAsyncFunc('RDB init', () => resources.rdb.init());
70
- await logAsyncFunc('IDW init', () => resources.idw.init(files));
69
+ await logAsyncFunc('RDB init', () => resources.rdb.init({ files }));
71
70
  await logAsyncFunc('HITL init', () => resources.hitl.init());
72
71
 
72
+ // we do not need idw init anymore since we do initialization inside RDB init, but let's keep it for a while
73
+ // await logAsyncFunc('IDW init', () => resources.idw.init(files));
74
+
73
75
  const collections = await logAsyncFunc('Lookup init', () => resources.lookup.init());
74
76
  const contactBooks = await logAsyncFunc('Contacts init', () => resources.contacts.init());
75
77
 
@@ -1,9 +1,17 @@
1
+ import { Files } from '@or-sdk/files';
2
+ import { IdwApiV2, SkillItem } from '@or-sdk/idw';
3
+ import { randomUUID } from 'crypto';
1
4
  import path from 'path';
2
5
  import { Sequelize } from 'sequelize';
3
6
 
4
- import { UnlabelledDomain } from '../assets/domains';
7
+ import { UnlabelledDomain, domains } from '../assets/domains';
5
8
  import { datasources, models } from '../assets/models';
6
- import { DatasourceDefinition, DiscovyreService, IdwModel, IdwModelDefinition, InitRdbResourcesConfig } from '../types';
9
+ import { skills } from '../assets/skills';
10
+ import {
11
+ DomainDefinition, SkillDefinition, DatasourceDefinition, DiscovyreService,
12
+ IdwModel, IdwModelDefinition, InitRdbResourcesConfig,
13
+ } from '../types';
14
+ import { encodeAccountId } from '../utils/encodeAccountId';
7
15
  import { DB_NAME, OrPgClient } from '../utils/OrPgClient';
8
16
  import { setupUmzug } from '../utils/umzugSetup';
9
17
 
@@ -12,8 +20,12 @@ export class InitRdbResources {
12
20
  private discoveryUrl: string;
13
21
  private pgClient: OrPgClient;
14
22
 
23
+ private idwApi: IdwApiV2;
24
+ private filesApi: Files;
25
+
15
26
  private mcpApi!: string;
16
27
  private accPart!: string;
28
+ private chatUrl!: string;
17
29
 
18
30
  constructor({ token, discoveryUrl }: InitRdbResourcesConfig) {
19
31
  this.token = token;
@@ -23,14 +35,27 @@ export class InitRdbResources {
23
35
  token: this.token,
24
36
  discoveryUrl: this.discoveryUrl,
25
37
  });
38
+
39
+ this.idwApi = new IdwApiV2({
40
+ token,
41
+ discoveryUrl,
42
+ });
43
+
44
+ this.filesApi = new Files({
45
+ token,
46
+ discoveryUrl,
47
+ });
26
48
  }
27
49
 
28
- public async init(): Promise<void> {
50
+ public async init(data: { files: Record<string, string>; }): Promise<void> {
51
+ const { files } = data;
52
+
29
53
  const { services } =
30
54
  await fetch(`${this.discoveryUrl}/api/v2/services`).then(res => res.json());
31
55
 
32
56
  const sdkApiUrl = services.find((service: DiscovyreService) => service.serviceKey === 'sdk-api').url;
33
57
  this.mcpApi = services.find((service: DiscovyreService) => service.serviceKey === 'mcp-api').url;
58
+ this.chatUrl = services.find((service: DiscovyreService) => service.serviceKey === 'rwc')?.url?.replace('rwc.', 'chat.');
34
59
 
35
60
  const { accountId } = await fetch(`${sdkApiUrl}/auth/token`, {
36
61
  headers: { Authorization: this.token },
@@ -58,7 +83,13 @@ export class InitRdbResources {
58
83
  throw new Error('Migration failed', { cause: error });
59
84
  }
60
85
 
61
- await this.upsertDefaultData(sequelize, models, datasources);
86
+ await this.upsertDefaultData(sequelize, {
87
+ models,
88
+ datasources,
89
+ domains,
90
+ skills,
91
+ files,
92
+ }, accountId);
62
93
  await this.linkOldKnowledgesToDefaultDomain(sequelize);
63
94
 
64
95
  await sequelize.close();
@@ -66,9 +97,23 @@ export class InitRdbResources {
66
97
 
67
98
  private async upsertDefaultData(
68
99
  sequelize: Sequelize,
69
- models: IdwModelDefinition[] = [],
70
- datasources: DatasourceDefinition[] = [],
100
+ data: {
101
+ models: IdwModelDefinition[],
102
+ datasources: DatasourceDefinition[],
103
+ domains: DomainDefinition[],
104
+ skills: SkillDefinition[],
105
+ files: Record<string, string>,
106
+ },
107
+ accountId: string,
71
108
  ) {
109
+ const { models, datasources, domains, skills } = data;
110
+ await this.setDatasources(sequelize, models, datasources);
111
+ await this.setSkillsAndDomains(sequelize, domains, skills, data.files, accountId);
112
+ await this.removeDeletedSkills(sequelize, skills);
113
+ }
114
+
115
+ private async setDatasources(sequelize: Sequelize, models: IdwModelDefinition[] = [],
116
+ datasources: DatasourceDefinition[] = []) {
72
117
  try {
73
118
  await sequelize.transaction(async (transaction) => {
74
119
  // Upsert datasources
@@ -175,9 +220,109 @@ export class InitRdbResources {
175
220
  });
176
221
 
177
222
  // eslint-disable-next-line no-console
178
- console.log('Default data successfully upserted.');
223
+ console.log('Default datasources successfully upserted.');
224
+ } catch (error) {
225
+ console.error('Error upserting default datasources data:', error);
226
+ }
227
+ }
228
+
229
+ private async setSkillsAndDomains(sequelize: Sequelize,
230
+ domains: DomainDefinition[] = [],
231
+ skills: SkillDefinition[] = [],
232
+ files: Record<string, string>,
233
+ accountId: string) {
234
+ try {
235
+ await sequelize.transaction(async (transaction) => {
236
+ let index = 0;
237
+ const domainMap: Record<string, string> = {};
238
+
239
+ for (const domain of domains) {
240
+ const [domainResult] = await sequelize.query(
241
+ `
242
+ INSERT INTO domains (id, account_id, slug, name, abbreviation, image, created_at, updated_at)
243
+ VALUES (:id, :accountId, :slug, :name, :abbreviation, :image, :created_at, :updated_at)
244
+ ON CONFLICT (slug) DO UPDATE
245
+ SET abbreviation = EXCLUDED.abbreviation,
246
+ updated_at = NOW()
247
+ RETURNING id;
248
+ `,
249
+ {
250
+ replacements: {
251
+ id: randomUUID(),
252
+ accountId,
253
+ slug: this.slugify(domain.name),
254
+ name: domain.name,
255
+ abbreviation: domain.abbreviation,
256
+ image: `/domains/img-${index}.png`,
257
+ created_at: new Date(),
258
+ updated_at: new Date(),
259
+ },
260
+ transaction,
261
+ },
262
+ );
263
+ index++;
264
+ domainMap[domain.name] = (domainResult[0] as { id: string; }).id;
265
+ }
266
+
267
+ const transformedSkills = skills.map((skill) => this.mapSkillData(skill, files, accountId));
268
+ for (const skill of transformedSkills) {
269
+ const [skillResult] = await sequelize.query(
270
+ `
271
+ INSERT INTO skills (id, account_id, slug, name, description, meta, url, created_at, updated_at)
272
+ VALUES (:id, :accountId, :slug, :name, :description, :meta, :url, :created_at, :updated_at)
273
+ ON CONFLICT (slug) DO UPDATE
274
+ SET description = EXCLUDED.description,
275
+ meta = EXCLUDED.meta,
276
+ url = EXCLUDED.url,
277
+ updated_at = NOW()
278
+ RETURNING id;
279
+ `,
280
+ {
281
+ replacements: {
282
+ id: randomUUID(),
283
+ accountId,
284
+ slug: this.slugify(skill.name),
285
+ name: skill.name,
286
+ description: skill.description,
287
+ meta: JSON.stringify(skill.meta),
288
+ url: skill.url,
289
+ created_at: new Date(),
290
+ updated_at: new Date(),
291
+ },
292
+ transaction,
293
+ },
294
+ );
295
+ const skillId = (skillResult[0] as { id: string; }).id;
296
+
297
+ // delete old relations
298
+ await sequelize.query(
299
+ 'DELETE FROM domain_skills WHERE skill = :skill_id;',
300
+ {
301
+ replacements: { skill_id: skillId },
302
+ transaction,
303
+ },
304
+ );
305
+
306
+ await sequelize.query(
307
+ `
308
+ INSERT INTO domain_skills (id, skill, domain)
309
+ VALUES (:id, :skill, :domain)`,
310
+ {
311
+ replacements: {
312
+ id: randomUUID(),
313
+ skill: skillId,
314
+ domain: domainMap[skill.domain],
315
+ },
316
+ transaction,
317
+ },
318
+ );
319
+ }
320
+ });
321
+
322
+ // eslint-disable-next-line no-console
323
+ console.log('Default skills and domains successfully upserted.');
179
324
  } catch (error) {
180
- console.error('Error upserting default data:', error);
325
+ console.error('Error upserting default skills and domains data:', error);
181
326
  }
182
327
  }
183
328
 
@@ -223,4 +368,81 @@ export class InitRdbResources {
223
368
  // BigInt -> base36 string (lowercase [0-9a-z])
224
369
  return n.toString(36);
225
370
  }
371
+
372
+ private async removeDeletedSkills(sequelize: Sequelize, skillDefinitions: SkillDefinition[]) {
373
+ const [skills] = (await sequelize.query('SELECT * FROM skills')) as SkillItem[][];
374
+
375
+ const isSystem = (skill: SkillItem) => (skill.meta?.skill as { isSystem?: boolean; })?.isSystem;
376
+ const isDeleted = (skill: SkillItem) => !skillDefinitions.find((item) => item.name === skill.name);
377
+
378
+ const deletedSystemSkills = skills.filter((skill) => isSystem(skill) && isDeleted(skill));
379
+ await Promise.all(deletedSystemSkills.map((skill) => this.idwApi.deleteSkill(skill.id)));
380
+
381
+ await Promise.all(
382
+ deletedSystemSkills.map((skill) => sequelize.query('' +
383
+ 'DELETE FROM skills WHERE id = :skill_id',
384
+ { replacements: { skill_id: skill.id } }),
385
+ ),
386
+ );
387
+
388
+ const DOCUMENTATION_FOLDER = 'IDW/docs';
389
+
390
+ await Promise.all(
391
+ deletedSystemSkills.map((skill) =>
392
+ this.filesApi
393
+ .deleteFile(`${DOCUMENTATION_FOLDER}/${skill.slug}.pdf`, true)
394
+ .catch((err) => {
395
+ console.warn(`Failed to delete file for skill "${skill.slug}":`, err.message);
396
+ return null;
397
+ }),
398
+ ),
399
+ );
400
+ };
401
+
402
+ private slugify(string: string): string {
403
+ const result = String(string)
404
+ .normalize('NFKD') // split accented characters into their base characters and diacritical marks
405
+ .replace(/[\u0300-\u036f]/g, '') // remove all the accents, which happen to be all in the \u03xx UNICODE block.
406
+ .trim() // trim leading or trailing whitespace
407
+ .toLowerCase() // convert to lowercase
408
+ .replace(/[^a-z0-9 -]/g, '') // remove non-alphanumeric characters
409
+ .replace(/\s+/g, '-') // replace spaces with hyphens
410
+ .replace(/-+/g, '-') // remove consecutive hyphens
411
+ .replace(/^-+|-+$/g, ''); // remove leading/trailing hyphens
412
+
413
+ const alphanumCount = (result.match(/[a-z0-9]/g) || []).length;
414
+
415
+ if (alphanumCount < 2) {
416
+ throw new Error('Slug must have at least 2 alphanumeric characters');
417
+ }
418
+
419
+ return result;
420
+ };
421
+
422
+ private mapSkillData(skillDefinition: SkillDefinition, files: Record<string, string>, account_id: string) {
423
+ const encodedAccountId = encodeAccountId(account_id);
424
+ return {
425
+ slug: this.slugify(skillDefinition.name),
426
+ name: skillDefinition.name,
427
+ description: skillDefinition.description,
428
+ url: `${this.chatUrl}/${encodedAccountId}/${skillDefinition.meta.chatId}`,
429
+ domain: skillDefinition.domain ?? UnlabelledDomain.name,
430
+ meta: {
431
+ chat: {
432
+ id: skillDefinition.meta.chatId,
433
+ },
434
+ skill: {
435
+ advanced: skillDefinition.advanced,
436
+ disabled: skillDefinition.disabled,
437
+ editable: skillDefinition.editable,
438
+ userRole: skillDefinition.forRoles,
439
+ forUsers: skillDefinition.forUsers,
440
+ prompt: skillDefinition.meta.prompt,
441
+ promptParams: skillDefinition.meta.promptParams,
442
+ isSystem: skillDefinition.isSystem ?? true,
443
+ docUrl: files[skillDefinition.uid],
444
+ },
445
+ },
446
+ };
447
+ }
226
448
  }