@selentar/analitoly 0.1.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.
Files changed (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/api/dist/dashboards/dash_1775220041958_v1r8io.json +829 -0
  4. package/api/dist/dashboards/dash_1775222037264_1rrsrd.json +309 -0
  5. package/api/dist/src/agent/agent.controller.d.ts +26 -0
  6. package/api/dist/src/agent/agent.controller.js +124 -0
  7. package/api/dist/src/agent/agent.controller.js.map +1 -0
  8. package/api/dist/src/agent/agent.module.d.ts +2 -0
  9. package/api/dist/src/agent/agent.module.js +23 -0
  10. package/api/dist/src/agent/agent.module.js.map +1 -0
  11. package/api/dist/src/agent/agent.service.d.ts +39 -0
  12. package/api/dist/src/agent/agent.service.js +389 -0
  13. package/api/dist/src/agent/agent.service.js.map +1 -0
  14. package/api/dist/src/agent/mcp-config.d.ts +9 -0
  15. package/api/dist/src/agent/mcp-config.js +51 -0
  16. package/api/dist/src/agent/mcp-config.js.map +1 -0
  17. package/api/dist/src/app.module.d.ts +2 -0
  18. package/api/dist/src/app.module.js +52 -0
  19. package/api/dist/src/app.module.js.map +1 -0
  20. package/api/dist/src/chart/chart.controller.d.ts +8 -0
  21. package/api/dist/src/chart/chart.controller.js +38 -0
  22. package/api/dist/src/chart/chart.controller.js.map +1 -0
  23. package/api/dist/src/chart/chart.module.d.ts +2 -0
  24. package/api/dist/src/chart/chart.module.js +24 -0
  25. package/api/dist/src/chart/chart.module.js.map +1 -0
  26. package/api/dist/src/chart/chart.service.d.ts +32 -0
  27. package/api/dist/src/chart/chart.service.js +106 -0
  28. package/api/dist/src/chart/chart.service.js.map +1 -0
  29. package/api/dist/src/chat/chat.controller.d.ts +14 -0
  30. package/api/dist/src/chat/chat.controller.js +73 -0
  31. package/api/dist/src/chat/chat.controller.js.map +1 -0
  32. package/api/dist/src/chat/chat.module.d.ts +2 -0
  33. package/api/dist/src/chat/chat.module.js +22 -0
  34. package/api/dist/src/chat/chat.module.js.map +1 -0
  35. package/api/dist/src/chat/chat.service.d.ts +25 -0
  36. package/api/dist/src/chat/chat.service.js +168 -0
  37. package/api/dist/src/chat/chat.service.js.map +1 -0
  38. package/api/dist/src/connection/connection.controller.d.ts +46 -0
  39. package/api/dist/src/connection/connection.controller.js +189 -0
  40. package/api/dist/src/connection/connection.controller.js.map +1 -0
  41. package/api/dist/src/connection/connection.model.d.ts +116 -0
  42. package/api/dist/src/connection/connection.model.js +23 -0
  43. package/api/dist/src/connection/connection.model.js.map +1 -0
  44. package/api/dist/src/connection/connection.module.d.ts +2 -0
  45. package/api/dist/src/connection/connection.module.js +31 -0
  46. package/api/dist/src/connection/connection.module.js.map +1 -0
  47. package/api/dist/src/connection/connection.repository.d.ts +16 -0
  48. package/api/dist/src/connection/connection.repository.js +195 -0
  49. package/api/dist/src/connection/connection.repository.js.map +1 -0
  50. package/api/dist/src/connection/connection.service.d.ts +50 -0
  51. package/api/dist/src/connection/connection.service.js +343 -0
  52. package/api/dist/src/connection/connection.service.js.map +1 -0
  53. package/api/dist/src/context/context.controller.d.ts +13 -0
  54. package/api/dist/src/context/context.controller.js +86 -0
  55. package/api/dist/src/context/context.controller.js.map +1 -0
  56. package/api/dist/src/context/context.module.d.ts +2 -0
  57. package/api/dist/src/context/context.module.js +39 -0
  58. package/api/dist/src/context/context.module.js.map +1 -0
  59. package/api/dist/src/context/context.service.d.ts +32 -0
  60. package/api/dist/src/context/context.service.js +177 -0
  61. package/api/dist/src/context/context.service.js.map +1 -0
  62. package/api/dist/src/dashboard/dashboard.controller.d.ts +21 -0
  63. package/api/dist/src/dashboard/dashboard.controller.js +109 -0
  64. package/api/dist/src/dashboard/dashboard.controller.js.map +1 -0
  65. package/api/dist/src/dashboard/dashboard.model.d.ts +15 -0
  66. package/api/dist/src/dashboard/dashboard.model.js +3 -0
  67. package/api/dist/src/dashboard/dashboard.model.js.map +1 -0
  68. package/api/dist/src/dashboard/dashboard.module.d.ts +2 -0
  69. package/api/dist/src/dashboard/dashboard.module.js +24 -0
  70. package/api/dist/src/dashboard/dashboard.module.js.map +1 -0
  71. package/api/dist/src/dashboard/dashboard.repository.d.ts +9 -0
  72. package/api/dist/src/dashboard/dashboard.repository.js +72 -0
  73. package/api/dist/src/dashboard/dashboard.repository.js.map +1 -0
  74. package/api/dist/src/dashboard/dashboard.service.d.ts +14 -0
  75. package/api/dist/src/dashboard/dashboard.service.js +87 -0
  76. package/api/dist/src/dashboard/dashboard.service.js.map +1 -0
  77. package/api/dist/src/datasource/connectors/connector.interface.d.ts +6 -0
  78. package/api/dist/src/datasource/connectors/connector.interface.js +3 -0
  79. package/api/dist/src/datasource/connectors/connector.interface.js.map +1 -0
  80. package/api/dist/src/datasource/connectors/mongo.connector.d.ts +30 -0
  81. package/api/dist/src/datasource/connectors/mongo.connector.js +167 -0
  82. package/api/dist/src/datasource/connectors/mongo.connector.js.map +1 -0
  83. package/api/dist/src/datasource/connectors/mongo.connector.test.d.ts +1 -0
  84. package/api/dist/src/datasource/connectors/mongo.connector.test.js +179 -0
  85. package/api/dist/src/datasource/connectors/mongo.connector.test.js.map +1 -0
  86. package/api/dist/src/datasource/connectors/postgres.connector.d.ts +50 -0
  87. package/api/dist/src/datasource/connectors/postgres.connector.js +213 -0
  88. package/api/dist/src/datasource/connectors/postgres.connector.js.map +1 -0
  89. package/api/dist/src/datasource/connectors/postgres.connector.test.d.ts +1 -0
  90. package/api/dist/src/datasource/connectors/postgres.connector.test.js +197 -0
  91. package/api/dist/src/datasource/connectors/postgres.connector.test.js.map +1 -0
  92. package/api/dist/src/datasource/datasource.controller.d.ts +16 -0
  93. package/api/dist/src/datasource/datasource.controller.js +79 -0
  94. package/api/dist/src/datasource/datasource.controller.js.map +1 -0
  95. package/api/dist/src/datasource/datasource.model.d.ts +26 -0
  96. package/api/dist/src/datasource/datasource.model.js +3 -0
  97. package/api/dist/src/datasource/datasource.model.js.map +1 -0
  98. package/api/dist/src/datasource/datasource.module.d.ts +2 -0
  99. package/api/dist/src/datasource/datasource.module.js +31 -0
  100. package/api/dist/src/datasource/datasource.module.js.map +1 -0
  101. package/api/dist/src/datasource/datasource.repository.d.ts +11 -0
  102. package/api/dist/src/datasource/datasource.repository.js +61 -0
  103. package/api/dist/src/datasource/datasource.repository.js.map +1 -0
  104. package/api/dist/src/datasource/datasource.service.d.ts +28 -0
  105. package/api/dist/src/datasource/datasource.service.js +95 -0
  106. package/api/dist/src/datasource/datasource.service.js.map +1 -0
  107. package/api/dist/src/example/example.controller.d.ts +10 -0
  108. package/api/dist/src/example/example.controller.js +43 -0
  109. package/api/dist/src/example/example.controller.js.map +1 -0
  110. package/api/dist/src/example/example.model.d.ts +6 -0
  111. package/api/dist/src/example/example.model.js +3 -0
  112. package/api/dist/src/example/example.model.js.map +1 -0
  113. package/api/dist/src/example/example.module.d.ts +2 -0
  114. package/api/dist/src/example/example.module.js +23 -0
  115. package/api/dist/src/example/example.module.js.map +1 -0
  116. package/api/dist/src/example/example.repository.d.ts +6 -0
  117. package/api/dist/src/example/example.repository.js +30 -0
  118. package/api/dist/src/example/example.repository.js.map +1 -0
  119. package/api/dist/src/example/example.service.d.ts +10 -0
  120. package/api/dist/src/example/example.service.js +31 -0
  121. package/api/dist/src/example/example.service.js.map +1 -0
  122. package/api/dist/src/integration/integration.controller.d.ts +15 -0
  123. package/api/dist/src/integration/integration.controller.js +69 -0
  124. package/api/dist/src/integration/integration.controller.js.map +1 -0
  125. package/api/dist/src/integration/integration.model.d.ts +17 -0
  126. package/api/dist/src/integration/integration.model.js +3 -0
  127. package/api/dist/src/integration/integration.model.js.map +1 -0
  128. package/api/dist/src/integration/integration.module.d.ts +2 -0
  129. package/api/dist/src/integration/integration.module.js +24 -0
  130. package/api/dist/src/integration/integration.module.js.map +1 -0
  131. package/api/dist/src/integration/integration.repository.d.ts +6 -0
  132. package/api/dist/src/integration/integration.repository.js +45 -0
  133. package/api/dist/src/integration/integration.repository.js.map +1 -0
  134. package/api/dist/src/integration/integration.service.d.ts +12 -0
  135. package/api/dist/src/integration/integration.service.js +78 -0
  136. package/api/dist/src/integration/integration.service.js.map +1 -0
  137. package/api/dist/src/main.d.ts +1 -0
  138. package/api/dist/src/main.js +19 -0
  139. package/api/dist/src/main.js.map +1 -0
  140. package/api/dist/src/mcp/grafana.mcp.d.ts +1 -0
  141. package/api/dist/src/mcp/grafana.mcp.js +95 -0
  142. package/api/dist/src/mcp/grafana.mcp.js.map +1 -0
  143. package/api/dist/src/mcp/graylog.mcp.d.ts +1 -0
  144. package/api/dist/src/mcp/graylog.mcp.js +241 -0
  145. package/api/dist/src/mcp/graylog.mcp.js.map +1 -0
  146. package/api/dist/src/mcp/mcp-server.d.ts +1 -0
  147. package/api/dist/src/mcp/mcp-server.js +336 -0
  148. package/api/dist/src/mcp/mcp-server.js.map +1 -0
  149. package/api/dist/src/paths.d.ts +8 -0
  150. package/api/dist/src/paths.js +50 -0
  151. package/api/dist/src/paths.js.map +1 -0
  152. package/api/dist/src/paths.test.d.ts +1 -0
  153. package/api/dist/src/paths.test.js +60 -0
  154. package/api/dist/src/paths.test.js.map +1 -0
  155. package/api/dist/src/project/project.controller.d.ts +44 -0
  156. package/api/dist/src/project/project.controller.js +79 -0
  157. package/api/dist/src/project/project.controller.js.map +1 -0
  158. package/api/dist/src/project/project.model.d.ts +19 -0
  159. package/api/dist/src/project/project.model.js +3 -0
  160. package/api/dist/src/project/project.model.js.map +1 -0
  161. package/api/dist/src/project/project.module.d.ts +2 -0
  162. package/api/dist/src/project/project.module.js +24 -0
  163. package/api/dist/src/project/project.module.js.map +1 -0
  164. package/api/dist/src/project/project.repository.d.ts +6 -0
  165. package/api/dist/src/project/project.repository.js +52 -0
  166. package/api/dist/src/project/project.repository.js.map +1 -0
  167. package/api/dist/src/project/project.service.d.ts +17 -0
  168. package/api/dist/src/project/project.service.js +163 -0
  169. package/api/dist/src/project/project.service.js.map +1 -0
  170. package/api/dist/tsconfig.tsbuildinfo +1 -0
  171. package/api/dist/vitest.config.d.ts +2 -0
  172. package/api/dist/vitest.config.js +10 -0
  173. package/api/dist/vitest.config.js.map +1 -0
  174. package/api/public/dist/Analitoly.png +0 -0
  175. package/api/public/dist/AnalitolyShort.png +0 -0
  176. package/api/public/dist/Gitlab.png +0 -0
  177. package/api/public/dist/Grafana.png +0 -0
  178. package/api/public/dist/Graylog.png +0 -0
  179. package/api/public/dist/Mongodb.png +0 -0
  180. package/api/public/dist/PostgreSQL.png +0 -0
  181. package/api/public/dist/assets/index-BPB3ckw4.js +222 -0
  182. package/api/public/dist/assets/index-CSAGa0SG.js +227 -0
  183. package/api/public/dist/index.html +12 -0
  184. package/bin/analitoly-mcp.js +18 -0
  185. package/bin/analitoly.js +38 -0
  186. package/package.json +54 -0
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ConnectionService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const connection_repository_1 = require("./connection.repository");
15
+ const postgres_connector_1 = require("../datasource/connectors/postgres.connector");
16
+ const mongo_connector_1 = require("../datasource/connectors/mongo.connector");
17
+ const connection_model_1 = require("./connection.model");
18
+ const child_process_1 = require("child_process");
19
+ const fs = require("fs");
20
+ const os = require("os");
21
+ const path = require("path");
22
+ const crypto = require("crypto");
23
+ const paths_1 = require("../paths");
24
+ let ConnectionService = class ConnectionService {
25
+ constructor(repository, postgresConnector, mongoConnector) {
26
+ this.repository = repository;
27
+ this.postgresConnector = postgresConnector;
28
+ this.mongoConnector = mongoConnector;
29
+ }
30
+ getAll(includeDeleted = false) {
31
+ return this.repository.readAll(includeDeleted).map((c) => this.maskSecrets(c));
32
+ }
33
+ getById(id) {
34
+ const conn = this.repository.findById(id);
35
+ if (!conn)
36
+ throw new common_1.NotFoundException('Connection not found');
37
+ return this.maskSecrets(conn);
38
+ }
39
+ getByType(type) {
40
+ this.validateType(type);
41
+ return this.repository.findByType(type).map((c) => this.maskSecrets(c));
42
+ }
43
+ getRawById(id) {
44
+ const conn = this.repository.findById(id);
45
+ if (!conn)
46
+ throw new common_1.NotFoundException('Connection not found');
47
+ return conn;
48
+ }
49
+ getActiveForType(type) {
50
+ return this.repository.findActive(type);
51
+ }
52
+ create(dto) {
53
+ this.validateType(dto.type);
54
+ const conn = this.repository.create(dto);
55
+ return this.maskSecrets(conn);
56
+ }
57
+ update(id, dto) {
58
+ const conn = this.repository.update(id, dto);
59
+ if (!conn)
60
+ throw new common_1.NotFoundException('Connection not found');
61
+ return this.maskSecrets(conn);
62
+ }
63
+ delete(id) {
64
+ const conn = this.repository.softDelete(id);
65
+ if (!conn)
66
+ throw new common_1.NotFoundException('Connection not found');
67
+ }
68
+ async activate(id) {
69
+ const conn = this.repository.findById(id);
70
+ if (!conn)
71
+ throw new common_1.NotFoundException('Connection not found');
72
+ if (conn.category === 'repository') {
73
+ this.repository.update(id, { active: true });
74
+ return this.connectProject(id);
75
+ }
76
+ const updated = this.repository.update(id, { active: true });
77
+ return this.maskSecrets(updated);
78
+ }
79
+ deactivate(id) {
80
+ const conn = this.repository.update(id, { active: false });
81
+ if (!conn)
82
+ throw new common_1.NotFoundException('Connection not found');
83
+ return this.maskSecrets(conn);
84
+ }
85
+ async testConnection(id) {
86
+ const conn = this.repository.findById(id);
87
+ if (!conn)
88
+ throw new common_1.NotFoundException('Connection not found');
89
+ return this.testConfig(conn.type, conn.config);
90
+ }
91
+ async testConnectionConfig(type, config) {
92
+ this.validateType(type);
93
+ return this.testConfig(type, config);
94
+ }
95
+ async testConfig(type, config) {
96
+ try {
97
+ switch (type) {
98
+ case 'postgresql':
99
+ case 'mongodb': {
100
+ const dsConfig = { type: type, ...config };
101
+ const connector = type === 'postgresql' ? this.postgresConnector : this.mongoConnector;
102
+ const ok = await connector.testConnection(dsConfig);
103
+ return { connected: ok };
104
+ }
105
+ case 'graylog':
106
+ return { connected: await this.testGraylog(config) };
107
+ case 'grafana':
108
+ return { connected: await this.testGrafana(config) };
109
+ case 'local':
110
+ return this.testLocal(config);
111
+ case 'gitlab':
112
+ return this.testGitlab(config);
113
+ default:
114
+ return { connected: false, error: `Unknown type: ${type}` };
115
+ }
116
+ }
117
+ catch (err) {
118
+ return { connected: false, error: err instanceof Error ? err.message : String(err) };
119
+ }
120
+ }
121
+ async testGraylog(config) {
122
+ const credentials = Buffer.from(`${config.username}:${config.password}`).toString('base64');
123
+ const url = config.baseUrl.replace(/\/+$/, '');
124
+ const res = await fetch(`${url}/api/system`, {
125
+ headers: { Authorization: `Basic ${credentials}` },
126
+ signal: AbortSignal.timeout(5000),
127
+ });
128
+ return res.ok;
129
+ }
130
+ async testGrafana(config) {
131
+ const url = config.url.replace(/\/+$/, '');
132
+ const res = await fetch(`${url}/api/health`, {
133
+ headers: { Authorization: `Bearer ${config.serviceAccountToken}` },
134
+ signal: AbortSignal.timeout(5000),
135
+ });
136
+ return res.ok;
137
+ }
138
+ testLocal(config) {
139
+ const resolvedPath = path.resolve(config.path);
140
+ if (!fs.existsSync(resolvedPath))
141
+ return { connected: false, error: 'Path does not exist' };
142
+ const stat = fs.statSync(resolvedPath);
143
+ if (!stat.isDirectory())
144
+ return { connected: false, error: 'Path is not a directory' };
145
+ try {
146
+ fs.accessSync(resolvedPath, fs.constants.R_OK);
147
+ return { connected: true };
148
+ }
149
+ catch {
150
+ return { connected: false, error: 'Path is not readable' };
151
+ }
152
+ }
153
+ testGitlab(config) {
154
+ try {
155
+ const parsed = new URL(config.url);
156
+ let pathname = parsed.pathname;
157
+ if (!pathname.endsWith('.git'))
158
+ pathname += '.git';
159
+ const cloneUrl = `${parsed.protocol}//oauth2:${config.token}@${parsed.host}${pathname}`;
160
+ (0, child_process_1.execSync)(`git ls-remote --exit-code ${cloneUrl}`, { timeout: 15_000, stdio: 'pipe' });
161
+ return { connected: true };
162
+ }
163
+ catch {
164
+ return { connected: false, error: 'Cannot access repository. Check URL and token.' };
165
+ }
166
+ }
167
+ async connectProject(id) {
168
+ const conn = this.repository.findById(id);
169
+ if (!conn)
170
+ throw new common_1.NotFoundException('Connection not found');
171
+ if (conn.category !== 'repository')
172
+ throw new common_1.BadRequestException('Not a repository connection');
173
+ if (conn.type === 'local') {
174
+ const localConfig = conn.config;
175
+ const resolvedPath = path.resolve(localConfig.path);
176
+ if (!fs.existsSync(resolvedPath)) {
177
+ this.repository.update(id, { active: false });
178
+ this.repository.updateState(id, { localPath: resolvedPath, status: 'error', error: 'Path does not exist' });
179
+ throw new common_1.BadRequestException('Path does not exist: ' + resolvedPath);
180
+ }
181
+ if (!fs.statSync(resolvedPath).isDirectory()) {
182
+ this.repository.update(id, { active: false });
183
+ this.repository.updateState(id, { localPath: resolvedPath, status: 'error', error: 'Path is not a directory' });
184
+ throw new common_1.BadRequestException('Path is not a directory: ' + resolvedPath);
185
+ }
186
+ try {
187
+ fs.accessSync(resolvedPath, fs.constants.R_OK);
188
+ }
189
+ catch {
190
+ this.repository.update(id, { active: false });
191
+ this.repository.updateState(id, { localPath: resolvedPath, status: 'error', error: 'Path is not readable' });
192
+ throw new common_1.BadRequestException('Path is not readable: ' + resolvedPath);
193
+ }
194
+ const updated = this.repository.updateState(id, { localPath: resolvedPath, status: 'ready' });
195
+ return this.maskSecrets(updated);
196
+ }
197
+ const gitlabConfig = conn.config;
198
+ const tmpDir = path.join(os.tmpdir(), `analitoly-${crypto.randomBytes(6).toString('hex')}`);
199
+ this.repository.updateState(id, { localPath: tmpDir, status: 'cloning' });
200
+ try {
201
+ const parsed = new URL(gitlabConfig.url);
202
+ let pathname = parsed.pathname;
203
+ if (!pathname.endsWith('.git'))
204
+ pathname += '.git';
205
+ const cloneUrl = `${parsed.protocol}//oauth2:${gitlabConfig.token}@${parsed.host}${pathname}`;
206
+ const branchArgs = gitlabConfig.branch ? `--branch ${gitlabConfig.branch}` : '';
207
+ const cmd = `git clone --depth 1 ${branchArgs} ${cloneUrl} ${tmpDir}`;
208
+ await new Promise((resolve, reject) => {
209
+ (0, child_process_1.exec)(cmd, { timeout: 120_000 }, (error) => {
210
+ if (error)
211
+ reject(error);
212
+ else
213
+ resolve();
214
+ });
215
+ });
216
+ const updated = this.repository.updateState(id, { localPath: tmpDir, status: 'ready' });
217
+ return this.maskSecrets(updated);
218
+ }
219
+ catch (err) {
220
+ const updated = this.repository.updateState(id, {
221
+ localPath: tmpDir,
222
+ status: 'error',
223
+ error: String(err),
224
+ });
225
+ return this.maskSecrets(updated);
226
+ }
227
+ }
228
+ async disconnectProject(id) {
229
+ const conn = this.repository.findById(id);
230
+ if (!conn)
231
+ throw new common_1.NotFoundException('Connection not found');
232
+ if (conn.state?.localPath && conn.type === 'gitlab') {
233
+ try {
234
+ fs.rmSync(conn.state.localPath, { recursive: true, force: true });
235
+ }
236
+ catch { }
237
+ }
238
+ this.repository.updateState(id, undefined);
239
+ }
240
+ getDashboard() {
241
+ return { charts: this.repository.readDashboard() };
242
+ }
243
+ saveDashboard(charts) {
244
+ this.repository.writeDashboard(charts);
245
+ return { charts };
246
+ }
247
+ exportConnections() {
248
+ const connections = this.repository.readAll(false);
249
+ const exportable = connections.map((c) => ({
250
+ type: c.type,
251
+ name: c.name,
252
+ config: c.config,
253
+ }));
254
+ const result = {
255
+ version: 1,
256
+ exportedAt: new Date().toISOString(),
257
+ connections: exportable,
258
+ };
259
+ const dashCharts = this.repository.readDashboard();
260
+ if (dashCharts.length > 0) {
261
+ result.dashboard = { charts: dashCharts };
262
+ }
263
+ const ctxPath = (0, paths_1.contextPath)();
264
+ if (fs.existsSync(ctxPath)) {
265
+ try {
266
+ result.context = fs.readFileSync(ctxPath, 'utf-8');
267
+ }
268
+ catch { }
269
+ }
270
+ return result;
271
+ }
272
+ importConnections(data) {
273
+ if (!data?.connections || !Array.isArray(data.connections)) {
274
+ throw new common_1.BadRequestException('Invalid import file format');
275
+ }
276
+ const existing = this.repository.readAll(false);
277
+ for (const conn of existing) {
278
+ if (conn.type === 'gitlab' && conn.state?.localPath) {
279
+ try {
280
+ fs.rmSync(conn.state.localPath, { recursive: true, force: true });
281
+ }
282
+ catch { }
283
+ }
284
+ this.repository.softDelete(conn.id);
285
+ }
286
+ let imported = 0;
287
+ let skipped = 0;
288
+ for (const item of data.connections) {
289
+ if (!item.type || !item.name || !item.config) {
290
+ skipped++;
291
+ continue;
292
+ }
293
+ if (!connection_model_1.CONNECTION_TYPES.includes(item.type)) {
294
+ skipped++;
295
+ continue;
296
+ }
297
+ this.repository.create({ type: item.type, name: item.name, config: item.config, active: false });
298
+ imported++;
299
+ }
300
+ let dashboardImported = false;
301
+ if (data.dashboard?.charts && Array.isArray(data.dashboard.charts) && data.dashboard.charts.length > 0) {
302
+ this.repository.writeDashboard(data.dashboard.charts);
303
+ dashboardImported = true;
304
+ }
305
+ let contextImported = false;
306
+ if (data.context && typeof data.context === 'string') {
307
+ try {
308
+ const ctxDir = path.dirname((0, paths_1.contextPath)());
309
+ if (!fs.existsSync(ctxDir))
310
+ fs.mkdirSync(ctxDir, { recursive: true });
311
+ fs.writeFileSync((0, paths_1.contextPath)(), data.context, 'utf-8');
312
+ contextImported = true;
313
+ }
314
+ catch { }
315
+ }
316
+ return { imported, skipped, dashboardImported, contextImported };
317
+ }
318
+ maskSecrets(conn) {
319
+ const fields = connection_model_1.SENSITIVE_FIELDS[conn.type] || [];
320
+ if (fields.length === 0)
321
+ return conn;
322
+ const masked = { ...conn, config: { ...conn.config } };
323
+ for (const field of fields) {
324
+ if (masked.config[field]) {
325
+ masked.config[field] = '***';
326
+ }
327
+ }
328
+ return masked;
329
+ }
330
+ validateType(type) {
331
+ if (!connection_model_1.CONNECTION_TYPES.includes(type)) {
332
+ throw new common_1.BadRequestException(`Invalid connection type: ${type}. Valid: ${connection_model_1.CONNECTION_TYPES.join(', ')}`);
333
+ }
334
+ }
335
+ };
336
+ exports.ConnectionService = ConnectionService;
337
+ exports.ConnectionService = ConnectionService = __decorate([
338
+ (0, common_1.Injectable)(),
339
+ __metadata("design:paramtypes", [connection_repository_1.ConnectionRepository,
340
+ postgres_connector_1.PostgresConnector,
341
+ mongo_connector_1.MongoConnector])
342
+ ], ConnectionService);
343
+ //# sourceMappingURL=connection.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.service.js","sourceRoot":"","sources":["../../../src/connection/connection.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Response } from 'express';
2
+ import { ContextService } from './context.service';
3
+ import { AgentService } from '../agent/agent.service';
4
+ export declare class ContextController {
5
+ private readonly contextService;
6
+ private readonly agentService;
7
+ constructor(contextService: ContextService, agentService: AgentService);
8
+ getStatus(): import("./context.service").ContextStatus;
9
+ initialize(sessionId: string, res: Response): Promise<void>;
10
+ reset(): {
11
+ ok: boolean;
12
+ };
13
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var _a;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ContextController = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const express_1 = require("express");
19
+ const context_service_1 = require("./context.service");
20
+ const agent_service_1 = require("../agent/agent.service");
21
+ let ContextController = class ContextController {
22
+ constructor(contextService, agentService) {
23
+ this.contextService = contextService;
24
+ this.agentService = agentService;
25
+ }
26
+ getStatus() {
27
+ return this.contextService.getStatus();
28
+ }
29
+ async initialize(sessionId, res) {
30
+ res.writeHead(200, {
31
+ 'Content-Type': 'text/event-stream',
32
+ 'Cache-Control': 'no-cache',
33
+ Connection: 'keep-alive',
34
+ 'X-Accel-Buffering': 'no',
35
+ });
36
+ res.flushHeaders();
37
+ const heartbeat = setInterval(() => res.write(': heartbeat\n\n'), 5000);
38
+ res.on('close', () => clearInterval(heartbeat));
39
+ try {
40
+ const prompt = await this.contextService.buildInitializationPrompt();
41
+ for await (const event of this.agentService.sendMessage(sessionId, prompt)) {
42
+ res.write(`data: ${JSON.stringify(event)}\n\n`);
43
+ }
44
+ }
45
+ catch (err) {
46
+ const errorMsg = err instanceof Error ? err.message : String(err);
47
+ res.write(`data: ${JSON.stringify({ type: 'error', message: errorMsg })}\n\n`);
48
+ }
49
+ finally {
50
+ clearInterval(heartbeat);
51
+ res.write(`data: ${JSON.stringify({ type: 'close' })}\n\n`);
52
+ res.end();
53
+ }
54
+ }
55
+ reset() {
56
+ this.contextService.deleteContext();
57
+ return { ok: true };
58
+ }
59
+ };
60
+ exports.ContextController = ContextController;
61
+ __decorate([
62
+ (0, common_1.Get)(),
63
+ __metadata("design:type", Function),
64
+ __metadata("design:paramtypes", []),
65
+ __metadata("design:returntype", void 0)
66
+ ], ContextController.prototype, "getStatus", null);
67
+ __decorate([
68
+ (0, common_1.Post)('initialize'),
69
+ __param(0, (0, common_1.Body)('sessionId')),
70
+ __param(1, (0, common_1.Res)()),
71
+ __metadata("design:type", Function),
72
+ __metadata("design:paramtypes", [String, typeof (_a = typeof express_1.Response !== "undefined" && express_1.Response) === "function" ? _a : Object]),
73
+ __metadata("design:returntype", Promise)
74
+ ], ContextController.prototype, "initialize", null);
75
+ __decorate([
76
+ (0, common_1.Delete)(),
77
+ __metadata("design:type", Function),
78
+ __metadata("design:paramtypes", []),
79
+ __metadata("design:returntype", void 0)
80
+ ], ContextController.prototype, "reset", null);
81
+ exports.ContextController = ContextController = __decorate([
82
+ (0, common_1.Controller)('context'),
83
+ __metadata("design:paramtypes", [context_service_1.ContextService,
84
+ agent_service_1.AgentService])
85
+ ], ContextController);
86
+ //# sourceMappingURL=context.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.controller.js","sourceRoot":"","sources":["../../../src/context/context.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA0E;AAC1E,qCAAmC;AACnC,uDAAmD;AACnD,0DAAsD;AAG/C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YACmB,cAA8B,EAC9B,YAA0B;QAD1B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;IAC1C,CAAC;IAGJ,SAAS;QACP,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;IACzC,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CACK,SAAiB,EAC7B,GAAa;QAEpB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,YAAY;YACxB,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;QACH,GAAG,CAAC,YAAY,EAAE,CAAC;QAEnB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC;QACxE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,yBAAyB,EAAE,CAAC;YAErE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC3E,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClE,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;QACjF,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5D,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAGD,KAAK;QACH,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QACpC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;CACF,CAAA;AAhDY,8CAAiB;AAO5B;IADC,IAAA,YAAG,GAAE;;;;kDAGL;AAGK;IADL,IAAA,aAAI,EAAC,YAAY,CAAC;IAEhB,WAAA,IAAA,aAAI,EAAC,WAAW,CAAC,CAAA;IACjB,WAAA,IAAA,YAAG,GAAE,CAAA;;iEAAM,kBAAQ,oBAAR,kBAAQ;;mDA2BrB;AAGD;IADC,IAAA,eAAM,GAAE;;;;8CAIR;4BA/CU,iBAAiB;IAD7B,IAAA,mBAAU,EAAC,SAAS,CAAC;qCAGe,gCAAc;QAChB,4BAAY;GAHlC,iBAAiB,CAgD7B"}
@@ -0,0 +1,2 @@
1
+ export declare class ContextModule {
2
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ContextModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const context_controller_1 = require("./context.controller");
12
+ const context_service_1 = require("./context.service");
13
+ const connection_repository_1 = require("../connection/connection.repository");
14
+ const datasource_service_1 = require("../datasource/datasource.service");
15
+ const datasource_repository_1 = require("../datasource/datasource.repository");
16
+ const postgres_connector_1 = require("../datasource/connectors/postgres.connector");
17
+ const mongo_connector_1 = require("../datasource/connectors/mongo.connector");
18
+ const project_repository_1 = require("../project/project.repository");
19
+ const agent_module_1 = require("../agent/agent.module");
20
+ let ContextModule = class ContextModule {
21
+ };
22
+ exports.ContextModule = ContextModule;
23
+ exports.ContextModule = ContextModule = __decorate([
24
+ (0, common_1.Module)({
25
+ imports: [(0, common_1.forwardRef)(() => agent_module_1.AgentModule)],
26
+ controllers: [context_controller_1.ContextController],
27
+ providers: [
28
+ context_service_1.ContextService,
29
+ connection_repository_1.ConnectionRepository,
30
+ datasource_service_1.DataSourceService,
31
+ datasource_repository_1.DataSourceRepository,
32
+ postgres_connector_1.PostgresConnector,
33
+ mongo_connector_1.MongoConnector,
34
+ project_repository_1.ProjectRepository,
35
+ ],
36
+ exports: [context_service_1.ContextService],
37
+ })
38
+ ], ContextModule);
39
+ //# sourceMappingURL=context.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.module.js","sourceRoot":"","sources":["../../../src/context/context.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAoD;AACpD,6DAAyD;AACzD,uDAAmD;AACnD,+EAA2E;AAC3E,yEAAqE;AACrE,+EAA2E;AAC3E,oFAAgF;AAChF,8EAA0E;AAC1E,sEAAkE;AAClE,wDAAoD;AAgB7C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAdzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,0BAAW,CAAC,CAAC;QACxC,WAAW,EAAE,CAAC,sCAAiB,CAAC;QAChC,SAAS,EAAE;YACT,gCAAc;YACd,4CAAoB;YACpB,sCAAiB;YACjB,4CAAoB;YACpB,sCAAiB;YACjB,gCAAc;YACd,sCAAiB;SAClB;QACD,OAAO,EAAE,CAAC,gCAAc,CAAC;KAC1B,CAAC;GACW,aAAa,CAAG"}
@@ -0,0 +1,32 @@
1
+ import { ConnectionRepository } from '../connection/connection.repository';
2
+ import { DataSourceService } from '../datasource/datasource.service';
3
+ import { ProjectRepository } from '../project/project.repository';
4
+ export interface ContextStatus {
5
+ initialized: boolean;
6
+ updatedAt?: string;
7
+ fingerprint?: string;
8
+ stale?: boolean;
9
+ newSources?: string[];
10
+ }
11
+ export interface ParsedContext {
12
+ content: string;
13
+ fingerprint: string;
14
+ updatedAt: string;
15
+ }
16
+ export declare class ContextService {
17
+ private readonly connectionRepo;
18
+ private readonly dataSourceService;
19
+ private readonly projectRepo;
20
+ constructor(connectionRepo: ConnectionRepository, dataSourceService: DataSourceService, projectRepo: ProjectRepository);
21
+ readContext(): ParsedContext | null;
22
+ writeContext(content: string, fingerprint?: string): void;
23
+ deleteContext(): void;
24
+ computeFingerprint(): string;
25
+ checkStaleness(): {
26
+ stale: boolean;
27
+ newSources: string[];
28
+ };
29
+ getStatus(): ContextStatus;
30
+ collectRawData(): Promise<string>;
31
+ buildInitializationPrompt(): Promise<string>;
32
+ }