@benchcubed/today-cli 1.0.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.
Files changed (210) hide show
  1. package/README.md +296 -0
  2. package/dist/ai/bedrock-client.d.ts +1 -0
  3. package/dist/ai/bedrock-client.d.ts.map +1 -0
  4. package/dist/ai/bedrock-client.js +2 -0
  5. package/dist/ai/bedrock-client.js.map +1 -0
  6. package/dist/ai/knowledge-processor.d.ts +1 -0
  7. package/dist/ai/knowledge-processor.d.ts.map +1 -0
  8. package/dist/ai/knowledge-processor.js +2 -0
  9. package/dist/ai/knowledge-processor.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +70 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/ask.d.ts +3 -0
  15. package/dist/commands/ask.d.ts.map +1 -0
  16. package/dist/commands/ask.js +217 -0
  17. package/dist/commands/ask.js.map +1 -0
  18. package/dist/commands/audit.d.ts +3 -0
  19. package/dist/commands/audit.d.ts.map +1 -0
  20. package/dist/commands/audit.js +153 -0
  21. package/dist/commands/audit.js.map +1 -0
  22. package/dist/commands/auth.d.ts +3 -0
  23. package/dist/commands/auth.d.ts.map +1 -0
  24. package/dist/commands/auth.js +114 -0
  25. package/dist/commands/auth.js.map +1 -0
  26. package/dist/commands/config.d.ts +3 -0
  27. package/dist/commands/config.d.ts.map +1 -0
  28. package/dist/commands/config.js +72 -0
  29. package/dist/commands/config.js.map +1 -0
  30. package/dist/commands/embeddings.d.ts +3 -0
  31. package/dist/commands/embeddings.d.ts.map +1 -0
  32. package/dist/commands/embeddings.js +118 -0
  33. package/dist/commands/embeddings.js.map +1 -0
  34. package/dist/commands/experts.d.ts +3 -0
  35. package/dist/commands/experts.d.ts.map +1 -0
  36. package/dist/commands/experts.js +129 -0
  37. package/dist/commands/experts.js.map +1 -0
  38. package/dist/commands/export-import.d.ts +4 -0
  39. package/dist/commands/export-import.d.ts.map +1 -0
  40. package/dist/commands/export-import.js +285 -0
  41. package/dist/commands/export-import.js.map +1 -0
  42. package/dist/commands/git.d.ts +4 -0
  43. package/dist/commands/git.d.ts.map +1 -0
  44. package/dist/commands/git.js +274 -0
  45. package/dist/commands/git.js.map +1 -0
  46. package/dist/commands/impact.d.ts +3 -0
  47. package/dist/commands/impact.d.ts.map +1 -0
  48. package/dist/commands/impact.js +121 -0
  49. package/dist/commands/impact.js.map +1 -0
  50. package/dist/commands/insights.d.ts +3 -0
  51. package/dist/commands/insights.d.ts.map +1 -0
  52. package/dist/commands/insights.js +113 -0
  53. package/dist/commands/insights.js.map +1 -0
  54. package/dist/commands/learned.d.ts +3 -0
  55. package/dist/commands/learned.d.ts.map +1 -0
  56. package/dist/commands/learned.js +355 -0
  57. package/dist/commands/learned.js.map +1 -0
  58. package/dist/commands/onboard.d.ts +3 -0
  59. package/dist/commands/onboard.d.ts.map +1 -0
  60. package/dist/commands/onboard.js +141 -0
  61. package/dist/commands/onboard.js.map +1 -0
  62. package/dist/commands/recent.d.ts +3 -0
  63. package/dist/commands/recent.d.ts.map +1 -0
  64. package/dist/commands/recent.js +83 -0
  65. package/dist/commands/recent.js.map +1 -0
  66. package/dist/commands/secrets.d.ts +3 -0
  67. package/dist/commands/secrets.d.ts.map +1 -0
  68. package/dist/commands/secrets.js +203 -0
  69. package/dist/commands/secrets.js.map +1 -0
  70. package/dist/commands/stats.d.ts +3 -0
  71. package/dist/commands/stats.d.ts.map +1 -0
  72. package/dist/commands/stats.js +120 -0
  73. package/dist/commands/stats.js.map +1 -0
  74. package/dist/config/index.d.ts +12 -0
  75. package/dist/config/index.d.ts.map +1 -0
  76. package/dist/config/index.js +46 -0
  77. package/dist/config/index.js.map +1 -0
  78. package/dist/database/migrations.d.ts +13 -0
  79. package/dist/database/migrations.d.ts.map +1 -0
  80. package/dist/database/migrations.js +190 -0
  81. package/dist/database/migrations.js.map +1 -0
  82. package/dist/database/postgresql.d.ts +92 -0
  83. package/dist/database/postgresql.d.ts.map +1 -0
  84. package/dist/database/postgresql.js +382 -0
  85. package/dist/database/postgresql.js.map +1 -0
  86. package/dist/database/sqlite.d.ts +54 -0
  87. package/dist/database/sqlite.d.ts.map +1 -0
  88. package/dist/database/sqlite.js +337 -0
  89. package/dist/database/sqlite.js.map +1 -0
  90. package/dist/lambda/admin.d.ts +3 -0
  91. package/dist/lambda/admin.d.ts.map +1 -0
  92. package/dist/lambda/admin.js +818 -0
  93. package/dist/lambda/admin.js.map +1 -0
  94. package/dist/lambda/ai-services.d.ts +6 -0
  95. package/dist/lambda/ai-services.d.ts.map +1 -0
  96. package/dist/lambda/ai-services.js +472 -0
  97. package/dist/lambda/ai-services.js.map +1 -0
  98. package/dist/lambda/analytics.d.ts +3 -0
  99. package/dist/lambda/analytics.d.ts.map +1 -0
  100. package/dist/lambda/analytics.js +481 -0
  101. package/dist/lambda/analytics.js.map +1 -0
  102. package/dist/lambda/api-router.d.ts +3 -0
  103. package/dist/lambda/api-router.d.ts.map +1 -0
  104. package/dist/lambda/api-router.js +162 -0
  105. package/dist/lambda/api-router.js.map +1 -0
  106. package/dist/lambda/custom-topics.d.ts +3 -0
  107. package/dist/lambda/custom-topics.d.ts.map +1 -0
  108. package/dist/lambda/custom-topics.js +425 -0
  109. package/dist/lambda/custom-topics.js.map +1 -0
  110. package/dist/lambda/graph-builder.d.ts +3 -0
  111. package/dist/lambda/graph-builder.d.ts.map +1 -0
  112. package/dist/lambda/graph-builder.js +442 -0
  113. package/dist/lambda/graph-builder.js.map +1 -0
  114. package/dist/lambda/knowledge-ai.d.ts +3 -0
  115. package/dist/lambda/knowledge-ai.d.ts.map +1 -0
  116. package/dist/lambda/knowledge-ai.js +849 -0
  117. package/dist/lambda/knowledge-ai.js.map +1 -0
  118. package/dist/lambda/post-confirmation.d.ts +8 -0
  119. package/dist/lambda/post-confirmation.d.ts.map +1 -0
  120. package/dist/lambda/post-confirmation.js +92 -0
  121. package/dist/lambda/post-confirmation.js.map +1 -0
  122. package/dist/lambda/teams.d.ts +3 -0
  123. package/dist/lambda/teams.d.ts.map +1 -0
  124. package/dist/lambda/teams.js +568 -0
  125. package/dist/lambda/teams.js.map +1 -0
  126. package/dist/lib/export-helpers.d.ts +5 -0
  127. package/dist/lib/export-helpers.d.ts.map +1 -0
  128. package/dist/lib/export-helpers.js +137 -0
  129. package/dist/lib/export-helpers.js.map +1 -0
  130. package/dist/lib/import-helpers.d.ts +5 -0
  131. package/dist/lib/import-helpers.d.ts.map +1 -0
  132. package/dist/lib/import-helpers.js +185 -0
  133. package/dist/lib/import-helpers.js.map +1 -0
  134. package/dist/lib/insights-helpers.d.ts +123 -0
  135. package/dist/lib/insights-helpers.d.ts.map +1 -0
  136. package/dist/lib/insights-helpers.js +374 -0
  137. package/dist/lib/insights-helpers.js.map +1 -0
  138. package/dist/lib/search-helpers.d.ts +4 -0
  139. package/dist/lib/search-helpers.d.ts.map +1 -0
  140. package/dist/lib/search-helpers.js +124 -0
  141. package/dist/lib/search-helpers.js.map +1 -0
  142. package/dist/lib/secret-helpers.d.ts +2 -0
  143. package/dist/lib/secret-helpers.d.ts.map +1 -0
  144. package/dist/lib/secret-helpers.js +85 -0
  145. package/dist/lib/secret-helpers.js.map +1 -0
  146. package/dist/lib/stats-helpers.d.ts +41 -0
  147. package/dist/lib/stats-helpers.d.ts.map +1 -0
  148. package/dist/lib/stats-helpers.js +263 -0
  149. package/dist/lib/stats-helpers.js.map +1 -0
  150. package/dist/services/aws-api.d.ts +81 -0
  151. package/dist/services/aws-api.d.ts.map +1 -0
  152. package/dist/services/aws-api.js +388 -0
  153. package/dist/services/aws-api.js.map +1 -0
  154. package/dist/services/bedrock.d.ts +83 -0
  155. package/dist/services/bedrock.d.ts.map +1 -0
  156. package/dist/services/bedrock.js +434 -0
  157. package/dist/services/bedrock.js.map +1 -0
  158. package/dist/services/commit-learnings.d.ts +25 -0
  159. package/dist/services/commit-learnings.d.ts.map +1 -0
  160. package/dist/services/commit-learnings.js +180 -0
  161. package/dist/services/commit-learnings.js.map +1 -0
  162. package/dist/services/embedding-storage.d.ts +42 -0
  163. package/dist/services/embedding-storage.d.ts.map +1 -0
  164. package/dist/services/embedding-storage.js +124 -0
  165. package/dist/services/embedding-storage.js.map +1 -0
  166. package/dist/services/expert-engine.d.ts +21 -0
  167. package/dist/services/expert-engine.d.ts.map +1 -0
  168. package/dist/services/expert-engine.js +58 -0
  169. package/dist/services/expert-engine.js.map +1 -0
  170. package/dist/services/onboarding-accelerator.d.ts +118 -0
  171. package/dist/services/onboarding-accelerator.d.ts.map +1 -0
  172. package/dist/services/onboarding-accelerator.js +403 -0
  173. package/dist/services/onboarding-accelerator.js.map +1 -0
  174. package/dist/services/secret-detection.d.ts +46 -0
  175. package/dist/services/secret-detection.d.ts.map +1 -0
  176. package/dist/services/secret-detection.js +75 -0
  177. package/dist/services/secret-detection.js.map +1 -0
  178. package/dist/services/secret-manager-simple.d.ts +51 -0
  179. package/dist/services/secret-manager-simple.d.ts.map +1 -0
  180. package/dist/services/secret-manager-simple.js +119 -0
  181. package/dist/services/secret-manager-simple.js.map +1 -0
  182. package/dist/services/secret-manager.d.ts +150 -0
  183. package/dist/services/secret-manager.d.ts.map +1 -0
  184. package/dist/services/secret-manager.js +287 -0
  185. package/dist/services/secret-manager.js.map +1 -0
  186. package/dist/services/vector-embeddings.d.ts +70 -0
  187. package/dist/services/vector-embeddings.d.ts.map +1 -0
  188. package/dist/services/vector-embeddings.js +167 -0
  189. package/dist/services/vector-embeddings.js.map +1 -0
  190. package/dist/services/vector-search.d.ts +28 -0
  191. package/dist/services/vector-search.d.ts.map +1 -0
  192. package/dist/services/vector-search.js +192 -0
  193. package/dist/services/vector-search.js.map +1 -0
  194. package/dist/types/index.d.ts +86 -0
  195. package/dist/types/index.d.ts.map +1 -0
  196. package/dist/types/index.js +4 -0
  197. package/dist/types/index.js.map +1 -0
  198. package/dist/utils/formatting.d.ts +10 -0
  199. package/dist/utils/formatting.d.ts.map +1 -0
  200. package/dist/utils/formatting.js +82 -0
  201. package/dist/utils/formatting.js.map +1 -0
  202. package/dist/utils/git.d.ts +52 -0
  203. package/dist/utils/git.d.ts.map +1 -0
  204. package/dist/utils/git.js +182 -0
  205. package/dist/utils/git.js.map +1 -0
  206. package/dist/utils/validation.d.ts +17 -0
  207. package/dist/utils/validation.d.ts.map +1 -0
  208. package/dist/utils/validation.js +187 -0
  209. package/dist/utils/validation.js.map +1 -0
  210. package/package.json +81 -0
@@ -0,0 +1,388 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.awsApiService = exports.AWSAPIService = void 0;
37
+ const client_cognito_identity_provider_1 = require("@aws-sdk/client-cognito-identity-provider");
38
+ const config_1 = require("../config");
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const os = __importStar(require("os"));
42
+ class AWSAPIService {
43
+ constructor() {
44
+ this.accessToken = null;
45
+ const config = config_1.configManager.getConfig();
46
+ this.cognitoClient = new client_cognito_identity_provider_1.CognitoIdentityProviderClient({
47
+ region: config.awsRegion || 'eu-west-2'
48
+ });
49
+ // Use configuration values with environment variable fallbacks
50
+ this.apiEndpoint = config.apiEndpoint || process.env.TODAY_API_ENDPOINT || 'https://vwnifvxmp2.execute-api.eu-west-2.amazonaws.com/competition/api';
51
+ this._userPoolId = config.userPoolId || process.env.TODAY_USER_POOL_ID || 'eu-west-2_eJTe4e4oW';
52
+ this.clientId = config.clientId || process.env.TODAY_CLIENT_ID || '57a94nddco7si2sabtdgloq72r';
53
+ // Set up token storage path
54
+ this.tokenFilePath = path.join(os.homedir(), '.today', 'auth-token');
55
+ // Load existing token if available
56
+ this.loadStoredToken();
57
+ }
58
+ /**
59
+ * Load stored authentication token
60
+ */
61
+ loadStoredToken() {
62
+ try {
63
+ if (fs.existsSync(this.tokenFilePath)) {
64
+ const tokenData = fs.readFileSync(this.tokenFilePath, 'utf8');
65
+ const parsed = JSON.parse(tokenData);
66
+ // Check if token is still valid (simple expiry check)
67
+ if (parsed.token && parsed.expiresAt && new Date(parsed.expiresAt) > new Date()) {
68
+ this.accessToken = parsed.token;
69
+ }
70
+ else {
71
+ // Token expired, remove it
72
+ this.clearStoredToken();
73
+ }
74
+ }
75
+ }
76
+ catch (error) {
77
+ console.warn('Failed to load stored token:', error);
78
+ this.clearStoredToken();
79
+ }
80
+ }
81
+ /**
82
+ * Store authentication token securely
83
+ */
84
+ storeToken(token, expiresIn = 3600) {
85
+ try {
86
+ const tokenDir = path.dirname(this.tokenFilePath);
87
+ if (!fs.existsSync(tokenDir)) {
88
+ fs.mkdirSync(tokenDir, { recursive: true });
89
+ }
90
+ const expiresAt = new Date(Date.now() + (expiresIn * 1000));
91
+ const tokenData = {
92
+ token,
93
+ expiresAt: expiresAt.toISOString()
94
+ };
95
+ fs.writeFileSync(this.tokenFilePath, JSON.stringify(tokenData), { mode: 0o600 });
96
+ }
97
+ catch (error) {
98
+ console.warn('Failed to store token:', error);
99
+ }
100
+ }
101
+ /**
102
+ * Clear stored authentication token
103
+ */
104
+ clearStoredToken() {
105
+ try {
106
+ if (fs.existsSync(this.tokenFilePath)) {
107
+ fs.unlinkSync(this.tokenFilePath);
108
+ }
109
+ }
110
+ catch (error) {
111
+ console.warn('Failed to clear stored token:', error);
112
+ }
113
+ }
114
+ /**
115
+ * Check if AWS API is available
116
+ */
117
+ async isAvailable() {
118
+ try {
119
+ // Simple health check - try to reach the API endpoint
120
+ const response = await fetch(`${this.apiEndpoint}/health`, {
121
+ method: 'GET',
122
+ headers: {
123
+ 'Content-Type': 'application/json',
124
+ },
125
+ });
126
+ return response.status < 500; // Accept any non-server error
127
+ }
128
+ catch (error) {
129
+ console.warn('AWS API not available:', error);
130
+ return false;
131
+ }
132
+ }
133
+ /**
134
+ * Authenticate with Cognito (for demo purposes, using a simple approach)
135
+ */
136
+ async authenticate(username, password) {
137
+ try {
138
+ const command = new client_cognito_identity_provider_1.InitiateAuthCommand({
139
+ AuthFlow: client_cognito_identity_provider_1.AuthFlowType.USER_PASSWORD_AUTH,
140
+ ClientId: this.clientId,
141
+ AuthParameters: {
142
+ USERNAME: username,
143
+ PASSWORD: password,
144
+ },
145
+ });
146
+ const response = await this.cognitoClient.send(command);
147
+ if (response.AuthenticationResult?.AccessToken) {
148
+ // For API Gateway Cognito authorizer, we might need the ID token instead of access token
149
+ const idToken = response.AuthenticationResult.IdToken;
150
+ const accessToken = response.AuthenticationResult.AccessToken;
151
+ // Try ID token first, fallback to access token
152
+ this.accessToken = idToken || accessToken;
153
+ // Store token with expiry (default 1 hour)
154
+ const expiresIn = response.AuthenticationResult.ExpiresIn || 3600;
155
+ this.storeToken(this.accessToken, expiresIn);
156
+ console.log(`Authenticated with user pool: ${this._userPoolId}`);
157
+ console.log(`Using ${idToken ? 'ID' : 'Access'} token for API calls`);
158
+ return true;
159
+ }
160
+ return false;
161
+ }
162
+ catch (error) {
163
+ console.warn('Authentication failed:', error);
164
+ return false;
165
+ }
166
+ }
167
+ /**
168
+ * Find experts for a given topic using the deployed Lambda function
169
+ */
170
+ async findExperts(topic) {
171
+ try {
172
+ const url = `${this.apiEndpoint}/experts?topic=${encodeURIComponent(topic)}`;
173
+ const response = await fetch(url, {
174
+ method: 'GET',
175
+ headers: {
176
+ 'Content-Type': 'application/json',
177
+ ...(this.accessToken && { 'Authorization': `Bearer ${this.accessToken}` }),
178
+ },
179
+ });
180
+ if (!response.ok) {
181
+ throw new Error(`API request failed: ${response.status} ${response.statusText}`);
182
+ }
183
+ const result = await response.json();
184
+ if (result.success && result.data) {
185
+ return result.data.experts;
186
+ }
187
+ // Check if the response has experts directly (not wrapped in data)
188
+ if (result.success && result.experts) {
189
+ return result.experts;
190
+ }
191
+ throw new Error(result.error || 'Failed to find experts');
192
+ }
193
+ catch (error) {
194
+ console.warn('Expert finding failed:', error);
195
+ return [];
196
+ }
197
+ }
198
+ /**
199
+ * Submit a knowledge entry to the cloud backend
200
+ */
201
+ async submitKnowledgeEntry(entry) {
202
+ try {
203
+ const response = await fetch(`${this.apiEndpoint}/knowledge`, {
204
+ method: 'POST',
205
+ headers: {
206
+ 'Content-Type': 'application/json',
207
+ ...(this.accessToken && { 'Authorization': `Bearer ${this.accessToken}` }),
208
+ },
209
+ body: JSON.stringify(entry),
210
+ });
211
+ if (!response.ok) {
212
+ throw new Error(`API request failed: ${response.status} ${response.statusText}`);
213
+ }
214
+ const result = await response.json();
215
+ if (result.success && result.data) {
216
+ return result.data.entry.id;
217
+ }
218
+ // Check if the response has the entry directly (not wrapped in data)
219
+ if (result.success && result.entry) {
220
+ return result.entry.id;
221
+ }
222
+ throw new Error(result.error || 'Failed to submit knowledge entry');
223
+ }
224
+ catch (error) {
225
+ console.warn('Knowledge submission failed:', error);
226
+ return null;
227
+ }
228
+ }
229
+ /**
230
+ * Process a natural language question using the cloud backend
231
+ */
232
+ async processQuestion(question) {
233
+ try {
234
+ const url = `${this.apiEndpoint}/knowledge?q=${encodeURIComponent(question)}`;
235
+ const response = await fetch(url, {
236
+ method: 'GET',
237
+ headers: {
238
+ 'Content-Type': 'application/json',
239
+ ...(this.accessToken && { 'Authorization': `Bearer ${this.accessToken}` }),
240
+ },
241
+ });
242
+ if (!response.ok) {
243
+ throw new Error(`API request failed: ${response.status} ${response.statusText}`);
244
+ }
245
+ const result = await response.json();
246
+ if (result.success) {
247
+ return result.data;
248
+ }
249
+ throw new Error(result.error || 'Failed to process question');
250
+ }
251
+ catch (error) {
252
+ console.warn('Question processing failed:', error);
253
+ return null;
254
+ }
255
+ }
256
+ /**
257
+ * Get analytics data from the cloud backend
258
+ */
259
+ async getAnalytics(period = 'week', teamWide = false) {
260
+ try {
261
+ const params = new URLSearchParams({
262
+ period,
263
+ scope: teamWide ? 'team' : 'user'
264
+ });
265
+ const response = await fetch(`${this.apiEndpoint}/metrics?${params}`, {
266
+ method: 'GET',
267
+ headers: {
268
+ 'Content-Type': 'application/json',
269
+ ...(this.accessToken && { 'Authorization': `Bearer ${this.accessToken}` }),
270
+ },
271
+ });
272
+ if (!response.ok) {
273
+ throw new Error(`Analytics request failed: ${response.status} ${response.statusText}`);
274
+ }
275
+ const result = await response.json();
276
+ if (result.success && result.data) {
277
+ return result.data;
278
+ }
279
+ // Check if the response has analytics directly (not wrapped in data)
280
+ if (result.success && result.analytics) {
281
+ return result.analytics;
282
+ }
283
+ throw new Error(result.error || 'Failed to get analytics');
284
+ }
285
+ catch (error) {
286
+ console.warn('Cloud analytics failed:', error);
287
+ return null;
288
+ }
289
+ }
290
+ /**
291
+ * Get knowledge entries from the cloud backend
292
+ */
293
+ async getKnowledgeEntries(limit = 100) {
294
+ try {
295
+ const response = await fetch(`${this.apiEndpoint}/knowledge?limit=${limit}`, {
296
+ method: 'GET',
297
+ headers: {
298
+ 'Content-Type': 'application/json',
299
+ ...(this.accessToken && { 'Authorization': `Bearer ${this.accessToken}` }),
300
+ },
301
+ });
302
+ if (!response.ok) {
303
+ throw new Error(`Knowledge request failed: ${response.status} ${response.statusText}`);
304
+ }
305
+ const result = await response.json();
306
+ if (result.success && result.data) {
307
+ return result.data.entries;
308
+ }
309
+ // Check if the response has entries directly (not wrapped in data)
310
+ if (result.success && result.entries) {
311
+ return result.entries;
312
+ }
313
+ return [];
314
+ }
315
+ catch (error) {
316
+ console.warn('Failed to get knowledge entries from cloud:', error);
317
+ return [];
318
+ }
319
+ }
320
+ /**
321
+ * Get authentication status
322
+ */
323
+ isAuthenticated() {
324
+ return this.accessToken !== null;
325
+ }
326
+ /**
327
+ * Clear authentication
328
+ */
329
+ logout() {
330
+ this.accessToken = null;
331
+ this.clearStoredToken();
332
+ }
333
+ /**
334
+ * Generic API call method
335
+ */
336
+ async callAPI(endpoint, method = 'GET', body) {
337
+ try {
338
+ const url = `${this.apiEndpoint}${endpoint}`;
339
+ const options = {
340
+ method,
341
+ headers: {
342
+ 'Content-Type': 'application/json',
343
+ ...(this.accessToken && { 'Authorization': `Bearer ${this.accessToken}` }),
344
+ }
345
+ };
346
+ if (body && (method === 'POST' || method === 'PUT' || method === 'DELETE')) {
347
+ options.body = JSON.stringify(body);
348
+ }
349
+ const response = await fetch(url, options);
350
+ if (!response.ok) {
351
+ let rawBody = null;
352
+ let parsedBody = null;
353
+ try {
354
+ rawBody = await response.text();
355
+ if (rawBody) {
356
+ try {
357
+ parsedBody = JSON.parse(rawBody);
358
+ }
359
+ catch {
360
+ // Body is not valid JSON; keep rawBody for diagnostics.
361
+ }
362
+ }
363
+ }
364
+ catch {
365
+ // Ignore body read errors; we still want to throw based on status.
366
+ }
367
+ const baseMessage = `API request failed: ${response.status} ${response.statusText}`;
368
+ const detailedMessage = rawBody ? `${baseMessage} - ${rawBody}` : baseMessage;
369
+ const error = new Error(detailedMessage);
370
+ if (parsedBody !== null) {
371
+ error.responseBody = parsedBody;
372
+ }
373
+ else if (rawBody !== null) {
374
+ error.responseBody = rawBody;
375
+ }
376
+ throw error;
377
+ }
378
+ return await response.json();
379
+ }
380
+ catch (error) {
381
+ console.warn(`API call to ${endpoint} failed:`, error);
382
+ throw error;
383
+ }
384
+ }
385
+ }
386
+ exports.AWSAPIService = AWSAPIService;
387
+ exports.awsApiService = new AWSAPIService();
388
+ //# sourceMappingURL=aws-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-api.js","sourceRoot":"","sources":["../../src/services/aws-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ export interface BedrockResponse {
2
+ topics: string[];
3
+ tags: string[];
4
+ impactScore: number;
5
+ expertiseLevel: 'beginner' | 'intermediate' | 'expert';
6
+ relatedExperts: string[];
7
+ summary?: string;
8
+ }
9
+ export interface QuestionAnalysis {
10
+ intent: string;
11
+ topics: string[];
12
+ confidence: number;
13
+ suggestedSearchTerms: string[];
14
+ }
15
+ export declare class BedrockService {
16
+ constructor();
17
+ /**
18
+ * Enhance learning entry with AI-generated metadata
19
+ * Routes through authenticated backend API
20
+ */
21
+ enhanceKnowledgeEntry(content: string, authorId: string): Promise<BedrockResponse>;
22
+ /**
23
+ * Enhanced natural language querying with efficient semantic search
24
+ * Uses two-stage filtering: hybrid search pre-filtering + AI ranking for top candidates
25
+ */
26
+ processNaturalLanguageQuery(question: string, searchFunction: (query: string, queryEmbedding?: number[], limit?: number) => Promise<any[]>): Promise<{
27
+ analysis: QuestionAnalysis;
28
+ rankedResults: Array<{
29
+ entry: any;
30
+ relevanceScore: number;
31
+ matchReason: string;
32
+ }>;
33
+ suggestedExperts: string[];
34
+ }>;
35
+ /**
36
+ * Public method for question analysis
37
+ */
38
+ analyzeQuestion(question: string): Promise<QuestionAnalysis>;
39
+ /**
40
+ * Stage 1: Efficient hybrid candidate filtering
41
+ * Uses database search + vector similarity to get best candidates
42
+ */
43
+ private getHybridCandidates;
44
+ /**
45
+ * Generate embedding for question using real Titan embeddings
46
+ */
47
+ private generateQuestionEmbedding;
48
+ /**
49
+ * Stage 2: AI-powered semantic ranking on small candidate set
50
+ * Only processes top candidates to control Bedrock costs
51
+ */
52
+ private rankTopCandidates;
53
+ /**
54
+ * Optimized ranking prompt that processes fewer entries more efficiently
55
+ */
56
+ private _buildEfficientRankingPrompt;
57
+ /**
58
+ * Suggest experts based on identified topics
59
+ */
60
+ private suggestExpertsForTopics;
61
+ /**
62
+ * Generate insights from learning patterns
63
+ */
64
+ generateInsights(entries: any[], _teamId: string): Promise<string[]>;
65
+ private _buildKnowledgeEnhancementPrompt;
66
+ private _buildQuestionAnalysisPrompt;
67
+ private _buildInsightsPrompt;
68
+ private _parseKnowledgeResponse;
69
+ private _parseQuestionResponse;
70
+ private _parseRelevanceResponse;
71
+ private _parseInsightsResponse;
72
+ private getFallbackResponse;
73
+ private getFallbackQuestionAnalysis;
74
+ private getBasicRelevanceRanking;
75
+ private getFallbackQueryResult;
76
+ private getFallbackInsights;
77
+ /**
78
+ * Check if Bedrock is available and configured
79
+ */
80
+ isAvailable(): Promise<boolean>;
81
+ }
82
+ export declare const bedrockService: BedrockService;
83
+ //# sourceMappingURL=bedrock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../src/services/bedrock.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,UAAU,GAAG,cAAc,GAAG,QAAQ,CAAC;IACvD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,qBAAa,cAAc;;IAKzB;;;OAGG;IACG,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA8BxF;;;OAGG;IACG,2BAA2B,CAC/B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,GAC3F,OAAO,CAAC;QACT,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,aAAa,EAAE,KAAK,CAAC;YACnB,KAAK,EAAE,GAAG,CAAC;YACX,cAAc,EAAE,MAAM,CAAC;YACvB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IA2BF;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAalE;;;OAGG;YACW,mBAAmB;IA6CjC;;OAEG;YACW,yBAAyB;IAUvC;;;OAGG;YACW,iBAAiB;IAsB/B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA2BpC;;OAEG;YACW,uBAAuB;IA0BrC;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW1E,OAAO,CAAC,gCAAgC;IAwBxC,OAAO,CAAC,4BAA4B;IAsBpC,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,2BAA2B;IAenC,OAAO,CAAC,wBAAwB;IA0BhC,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQtC;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}