@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.
- package/README.md +296 -0
- package/dist/ai/bedrock-client.d.ts +1 -0
- package/dist/ai/bedrock-client.d.ts.map +1 -0
- package/dist/ai/bedrock-client.js +2 -0
- package/dist/ai/bedrock-client.js.map +1 -0
- package/dist/ai/knowledge-processor.d.ts +1 -0
- package/dist/ai/knowledge-processor.d.ts.map +1 -0
- package/dist/ai/knowledge-processor.js +2 -0
- package/dist/ai/knowledge-processor.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +70 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/ask.d.ts +3 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +217 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +153 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +114 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +72 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/embeddings.d.ts +3 -0
- package/dist/commands/embeddings.d.ts.map +1 -0
- package/dist/commands/embeddings.js +118 -0
- package/dist/commands/embeddings.js.map +1 -0
- package/dist/commands/experts.d.ts +3 -0
- package/dist/commands/experts.d.ts.map +1 -0
- package/dist/commands/experts.js +129 -0
- package/dist/commands/experts.js.map +1 -0
- package/dist/commands/export-import.d.ts +4 -0
- package/dist/commands/export-import.d.ts.map +1 -0
- package/dist/commands/export-import.js +285 -0
- package/dist/commands/export-import.js.map +1 -0
- package/dist/commands/git.d.ts +4 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +274 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/impact.d.ts +3 -0
- package/dist/commands/impact.d.ts.map +1 -0
- package/dist/commands/impact.js +121 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/insights.d.ts +3 -0
- package/dist/commands/insights.d.ts.map +1 -0
- package/dist/commands/insights.js +113 -0
- package/dist/commands/insights.js.map +1 -0
- package/dist/commands/learned.d.ts +3 -0
- package/dist/commands/learned.d.ts.map +1 -0
- package/dist/commands/learned.js +355 -0
- package/dist/commands/learned.js.map +1 -0
- package/dist/commands/onboard.d.ts +3 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +141 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/recent.d.ts +3 -0
- package/dist/commands/recent.d.ts.map +1 -0
- package/dist/commands/recent.js +83 -0
- package/dist/commands/recent.js.map +1 -0
- package/dist/commands/secrets.d.ts +3 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +203 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +120 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/config/index.d.ts +12 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +46 -0
- package/dist/config/index.js.map +1 -0
- package/dist/database/migrations.d.ts +13 -0
- package/dist/database/migrations.d.ts.map +1 -0
- package/dist/database/migrations.js +190 -0
- package/dist/database/migrations.js.map +1 -0
- package/dist/database/postgresql.d.ts +92 -0
- package/dist/database/postgresql.d.ts.map +1 -0
- package/dist/database/postgresql.js +382 -0
- package/dist/database/postgresql.js.map +1 -0
- package/dist/database/sqlite.d.ts +54 -0
- package/dist/database/sqlite.d.ts.map +1 -0
- package/dist/database/sqlite.js +337 -0
- package/dist/database/sqlite.js.map +1 -0
- package/dist/lambda/admin.d.ts +3 -0
- package/dist/lambda/admin.d.ts.map +1 -0
- package/dist/lambda/admin.js +818 -0
- package/dist/lambda/admin.js.map +1 -0
- package/dist/lambda/ai-services.d.ts +6 -0
- package/dist/lambda/ai-services.d.ts.map +1 -0
- package/dist/lambda/ai-services.js +472 -0
- package/dist/lambda/ai-services.js.map +1 -0
- package/dist/lambda/analytics.d.ts +3 -0
- package/dist/lambda/analytics.d.ts.map +1 -0
- package/dist/lambda/analytics.js +481 -0
- package/dist/lambda/analytics.js.map +1 -0
- package/dist/lambda/api-router.d.ts +3 -0
- package/dist/lambda/api-router.d.ts.map +1 -0
- package/dist/lambda/api-router.js +162 -0
- package/dist/lambda/api-router.js.map +1 -0
- package/dist/lambda/custom-topics.d.ts +3 -0
- package/dist/lambda/custom-topics.d.ts.map +1 -0
- package/dist/lambda/custom-topics.js +425 -0
- package/dist/lambda/custom-topics.js.map +1 -0
- package/dist/lambda/graph-builder.d.ts +3 -0
- package/dist/lambda/graph-builder.d.ts.map +1 -0
- package/dist/lambda/graph-builder.js +442 -0
- package/dist/lambda/graph-builder.js.map +1 -0
- package/dist/lambda/knowledge-ai.d.ts +3 -0
- package/dist/lambda/knowledge-ai.d.ts.map +1 -0
- package/dist/lambda/knowledge-ai.js +849 -0
- package/dist/lambda/knowledge-ai.js.map +1 -0
- package/dist/lambda/post-confirmation.d.ts +8 -0
- package/dist/lambda/post-confirmation.d.ts.map +1 -0
- package/dist/lambda/post-confirmation.js +92 -0
- package/dist/lambda/post-confirmation.js.map +1 -0
- package/dist/lambda/teams.d.ts +3 -0
- package/dist/lambda/teams.d.ts.map +1 -0
- package/dist/lambda/teams.js +568 -0
- package/dist/lambda/teams.js.map +1 -0
- package/dist/lib/export-helpers.d.ts +5 -0
- package/dist/lib/export-helpers.d.ts.map +1 -0
- package/dist/lib/export-helpers.js +137 -0
- package/dist/lib/export-helpers.js.map +1 -0
- package/dist/lib/import-helpers.d.ts +5 -0
- package/dist/lib/import-helpers.d.ts.map +1 -0
- package/dist/lib/import-helpers.js +185 -0
- package/dist/lib/import-helpers.js.map +1 -0
- package/dist/lib/insights-helpers.d.ts +123 -0
- package/dist/lib/insights-helpers.d.ts.map +1 -0
- package/dist/lib/insights-helpers.js +374 -0
- package/dist/lib/insights-helpers.js.map +1 -0
- package/dist/lib/search-helpers.d.ts +4 -0
- package/dist/lib/search-helpers.d.ts.map +1 -0
- package/dist/lib/search-helpers.js +124 -0
- package/dist/lib/search-helpers.js.map +1 -0
- package/dist/lib/secret-helpers.d.ts +2 -0
- package/dist/lib/secret-helpers.d.ts.map +1 -0
- package/dist/lib/secret-helpers.js +85 -0
- package/dist/lib/secret-helpers.js.map +1 -0
- package/dist/lib/stats-helpers.d.ts +41 -0
- package/dist/lib/stats-helpers.d.ts.map +1 -0
- package/dist/lib/stats-helpers.js +263 -0
- package/dist/lib/stats-helpers.js.map +1 -0
- package/dist/services/aws-api.d.ts +81 -0
- package/dist/services/aws-api.d.ts.map +1 -0
- package/dist/services/aws-api.js +388 -0
- package/dist/services/aws-api.js.map +1 -0
- package/dist/services/bedrock.d.ts +83 -0
- package/dist/services/bedrock.d.ts.map +1 -0
- package/dist/services/bedrock.js +434 -0
- package/dist/services/bedrock.js.map +1 -0
- package/dist/services/commit-learnings.d.ts +25 -0
- package/dist/services/commit-learnings.d.ts.map +1 -0
- package/dist/services/commit-learnings.js +180 -0
- package/dist/services/commit-learnings.js.map +1 -0
- package/dist/services/embedding-storage.d.ts +42 -0
- package/dist/services/embedding-storage.d.ts.map +1 -0
- package/dist/services/embedding-storage.js +124 -0
- package/dist/services/embedding-storage.js.map +1 -0
- package/dist/services/expert-engine.d.ts +21 -0
- package/dist/services/expert-engine.d.ts.map +1 -0
- package/dist/services/expert-engine.js +58 -0
- package/dist/services/expert-engine.js.map +1 -0
- package/dist/services/onboarding-accelerator.d.ts +118 -0
- package/dist/services/onboarding-accelerator.d.ts.map +1 -0
- package/dist/services/onboarding-accelerator.js +403 -0
- package/dist/services/onboarding-accelerator.js.map +1 -0
- package/dist/services/secret-detection.d.ts +46 -0
- package/dist/services/secret-detection.d.ts.map +1 -0
- package/dist/services/secret-detection.js +75 -0
- package/dist/services/secret-detection.js.map +1 -0
- package/dist/services/secret-manager-simple.d.ts +51 -0
- package/dist/services/secret-manager-simple.d.ts.map +1 -0
- package/dist/services/secret-manager-simple.js +119 -0
- package/dist/services/secret-manager-simple.js.map +1 -0
- package/dist/services/secret-manager.d.ts +150 -0
- package/dist/services/secret-manager.d.ts.map +1 -0
- package/dist/services/secret-manager.js +287 -0
- package/dist/services/secret-manager.js.map +1 -0
- package/dist/services/vector-embeddings.d.ts +70 -0
- package/dist/services/vector-embeddings.d.ts.map +1 -0
- package/dist/services/vector-embeddings.js +167 -0
- package/dist/services/vector-embeddings.js.map +1 -0
- package/dist/services/vector-search.d.ts +28 -0
- package/dist/services/vector-search.d.ts.map +1 -0
- package/dist/services/vector-search.js +192 -0
- package/dist/services/vector-search.js.map +1 -0
- package/dist/types/index.d.ts +86 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/formatting.d.ts +10 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +82 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/git.d.ts +52 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +182 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/validation.d.ts +17 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +187 -0
- package/dist/utils/validation.js.map +1 -0
- 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"}
|