@onereach/idw-init-account-resources 0.18.0 → 0.18.1

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.17.3 build /builds/onereach/platform/idw/idw-template/packages/level-system/idw-init-account-resources
3
+ > @onereach/idw-init-account-resources@0.18.0 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,12 @@
1
1
  # @onereach/idw-init-account-resources
2
2
 
3
+ ## 0.18.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 3d3b837: pull latest changes from development
8
+ - 3d3b837: Implement migration for the new chat
9
+
3
10
  ## 0.18.0
4
11
 
5
12
  ### Minor Changes
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ module.exports = {
40
+ up: function (queryInterface) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ return __generator(this, function (_a) {
43
+ switch (_a.label) {
44
+ case 0: return [4, queryInterface.context.sequelize.query("\n CREATE TABLE IF NOT EXISTS chat_sessions (\n id UUID NOT NULL PRIMARY KEY,\n account_id UUID NOT NULL,\n user_id UUID NOT NULL,\n hitl_id VARCHAR(30),\n\n title VARCHAR(500), -- \u0437\u0433\u0435\u043D\u0435\u0440\u043E\u0432\u0430\u043D\u0430 \u043D\u0430\u0437\u0432\u0430 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0456 \u043F\u0435\u0440\u0448\u043E\u0433\u043E \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F\n status VARCHAR(30) NOT NULL CHECK (status IN ('active', 'archived')), -- active, archived\n\n metadata JSONB DEFAULT '{}', -- active models for the beginning\n\n created_at timestamptz NOT NULL,\n updated_at timestamptz DEFAULT NULL\n );\n ")];
45
+ case 1:
46
+ _a.sent();
47
+ return [4, queryInterface.context.sequelize.query("\n CREATE TABLE IF NOT EXISTS chat_messages (\n id UUID PRIMARY KEY NOT NULL,\n\n parent_message_id UUID REFERENCES chat_messages(id),\n chat_id UUID REFERENCES chat_sessions(id) ON DELETE CASCADE,\n role VARCHAR(30) NOT NULL CHECK (role IN ('user', 'assistant')),\n\n content TEXT NOT NULL,\n\n -- \u041C\u0435\u0442\u0430\u0434\u0430\u043D\u0456\n metadata JSONB DEFAULT '{}',\n\n created_at timestamptz NOT NULL,\n updated_at timestamptz DEFAULT NULL\n );\n ")];
48
+ case 2:
49
+ _a.sent();
50
+ return [4, queryInterface.context.sequelize.query("\n CREATE TABLE IF NOT EXISTS chat_files (\n PRIMARY KEY (chat_id, message_id),\n\n chat_id UUID REFERENCES chat_sessions(id) ON DELETE CASCADE,\n message_id UUID REFERENCES chat_messages(id) ON DELETE CASCADE,\n\n filename VARCHAR(500) NOT NULL,\n mime_type VARCHAR(100),\n\n size_bytes INTEGER,\n url TEXT,\n\n created_at timestamptz DEFAULT NOW()\n );\n ")];
51
+ case 3:
52
+ _a.sent();
53
+ return [4, queryInterface.context.sequelize.query("\n CREATE INDEX idx_chat_sessions_account_user ON chat_sessions(account_id, user_id);\n CREATE INDEX idx_chat_sessions_updated ON chat_sessions(account_id, updated_at DESC);\n CREATE INDEX idx_chat_messages_session ON chat_messages(chat_id, created_at);\n CREATE INDEX idx_chat_messages_content_search ON chat_messages USING GIN(to_tsvector('english', content));\n ")];
54
+ case 4:
55
+ _a.sent();
56
+ return [2];
57
+ }
58
+ });
59
+ });
60
+ },
61
+ down: function (queryInterface) {
62
+ return __awaiter(this, void 0, void 0, function () {
63
+ return __generator(this, function (_a) {
64
+ switch (_a.label) {
65
+ case 0: return [4, queryInterface.context.sequelize.query('DROP TABLE IF EXISTS chat_sessions')];
66
+ case 1:
67
+ _a.sent();
68
+ return [4, queryInterface.context.sequelize.query('DROP TABLE IF EXISTS chat_messages')];
69
+ case 2:
70
+ _a.sent();
71
+ return [4, queryInterface.context.sequelize.query('DROP TABLE IF EXISTS chat_files')];
72
+ case 3:
73
+ _a.sent();
74
+ return [4, queryInterface.context.sequelize.query("\n DROP INDEX IF EXISTS idx_chat_sessions_account_user ON chat_sessions(account_id, user_id);\n DROP INDEX IF EXISTS idx_chat_sessions_updated ON chat_sessions(account_id, updated_at DESC);\n DROP INDEX IF EXISTS idx_chat_messages_session ON chat_messages(chat_id, created_at);\n DROP INDEX IF EXISTS idx_chat_messages_content_search ON chat_messages USING GIN(to_tsvector('english', content));\n ")];
75
+ case 4:
76
+ _a.sent();
77
+ return [2];
78
+ }
79
+ });
80
+ });
81
+ },
82
+ };
83
+ //# sourceMappingURL=20250922090051-chat-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20250922090051-chat-sessions.js","sourceRoot":"","sources":["../../../src/assets/db_migrations/20250922090051-chat-sessions.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKb,MAAM,CAAC,OAAO,GAAG;IACT,EAAE,YAAC,cAAoE;;;;4BAC3E,WAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,yyBAe5C,CAAC,EAAA;;wBAfF,SAeE,CAAC;wBAEH,WAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,2hBAgB5C,CAAC,EAAA;;wBAhBF,SAgBE,CAAC;wBAEH,WAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,4aAe5C,CAAC,EAAA;;wBAfF,SAeE,CAAC;wBAEH,WAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,8YAK5C,CAAC,EAAA;;wBALF,SAKE,CAAC;;;;;KACJ;IAGK,IAAI,YAAC,cAAwE;;;;4BACjF,WAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAA;;wBAAlF,SAAkF,CAAC;wBACnF,WAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAA;;wBAAlF,SAAkF,CAAC;wBACnF,WAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAAA;;wBAA/E,SAA+E,CAAC;wBAEhF,WAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,8aAK5C,CAAC,EAAA;;wBALF,SAKE,CAAC;;;;;KACJ;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onereach/idw-init-account-resources",
3
- "version": "0.18.0",
3
+ "version": "0.18.1",
4
4
  "description": "Creation of required resources in OneReach account to enable IDW",
5
5
  "license": "UNLICENSED",
6
6
  "contributors": [
@@ -30,6 +30,7 @@
30
30
  "@types/pg": "8.11.6",
31
31
  "@types/semver": "7.5.8",
32
32
  "bun": "1.1.9",
33
+ "ts-node": "^10.9.0",
33
34
  "rimraf": "5.0.7",
34
35
  "typescript": "5.4.5"
35
36
  },
@@ -0,0 +1,81 @@
1
+ 'use strict';
2
+ import { QueryInterface, Sequelize } from 'sequelize';
3
+
4
+
5
+ /** @type {import('sequelize-cli').Migration} */
6
+ module.exports = {
7
+ async up(queryInterface: QueryInterface & {context: {sequelize: Sequelize;};}) {
8
+ await queryInterface.context.sequelize.query(`
9
+ CREATE TABLE IF NOT EXISTS chat_sessions (
10
+ id UUID NOT NULL PRIMARY KEY,
11
+ account_id UUID NOT NULL,
12
+ user_id UUID NOT NULL,
13
+ hitl_id VARCHAR(30),
14
+
15
+ title VARCHAR(500), -- згенерована назва на основі першого повідомлення
16
+ status VARCHAR(30) NOT NULL CHECK (status IN ('active', 'archived')), -- active, archived
17
+
18
+ metadata JSONB DEFAULT '{}', -- active models for the beginning
19
+
20
+ created_at timestamptz NOT NULL,
21
+ updated_at timestamptz DEFAULT NULL
22
+ );
23
+ `);
24
+
25
+ await queryInterface.context.sequelize.query(`
26
+ CREATE TABLE IF NOT EXISTS chat_messages (
27
+ id UUID PRIMARY KEY NOT NULL,
28
+
29
+ parent_message_id UUID REFERENCES chat_messages(id),
30
+ chat_id UUID REFERENCES chat_sessions(id) ON DELETE CASCADE,
31
+ role VARCHAR(30) NOT NULL CHECK (role IN ('user', 'assistant')),
32
+
33
+ content TEXT NOT NULL,
34
+
35
+ -- Метадані
36
+ metadata JSONB DEFAULT '{}',
37
+
38
+ created_at timestamptz NOT NULL,
39
+ updated_at timestamptz DEFAULT NULL
40
+ );
41
+ `);
42
+
43
+ await queryInterface.context.sequelize.query(`
44
+ CREATE TABLE IF NOT EXISTS chat_files (
45
+ PRIMARY KEY (chat_id, message_id),
46
+
47
+ chat_id UUID REFERENCES chat_sessions(id) ON DELETE CASCADE,
48
+ message_id UUID REFERENCES chat_messages(id) ON DELETE CASCADE,
49
+
50
+ filename VARCHAR(500) NOT NULL,
51
+ mime_type VARCHAR(100),
52
+
53
+ size_bytes INTEGER,
54
+ url TEXT,
55
+
56
+ created_at timestamptz DEFAULT NOW()
57
+ );
58
+ `);
59
+
60
+ await queryInterface.context.sequelize.query(`
61
+ CREATE INDEX idx_chat_sessions_account_user ON chat_sessions(account_id, user_id);
62
+ CREATE INDEX idx_chat_sessions_updated ON chat_sessions(account_id, updated_at DESC);
63
+ CREATE INDEX idx_chat_messages_session ON chat_messages(chat_id, created_at);
64
+ CREATE INDEX idx_chat_messages_content_search ON chat_messages USING GIN(to_tsvector('english', content));
65
+ `);
66
+ },
67
+
68
+
69
+ async down(queryInterface: QueryInterface & { context: { sequelize: Sequelize; }; }) {
70
+ await queryInterface.context.sequelize.query('DROP TABLE IF EXISTS chat_sessions');
71
+ await queryInterface.context.sequelize.query('DROP TABLE IF EXISTS chat_messages');
72
+ await queryInterface.context.sequelize.query('DROP TABLE IF EXISTS chat_files');
73
+
74
+ await queryInterface.context.sequelize.query(`
75
+ DROP INDEX IF EXISTS idx_chat_sessions_account_user ON chat_sessions(account_id, user_id);
76
+ DROP INDEX IF EXISTS idx_chat_sessions_updated ON chat_sessions(account_id, updated_at DESC);
77
+ DROP INDEX IF EXISTS idx_chat_messages_session ON chat_messages(chat_id, created_at);
78
+ DROP INDEX IF EXISTS idx_chat_messages_content_search ON chat_messages USING GIN(to_tsvector('english', content));
79
+ `);
80
+ },
81
+ };