@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,337 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.database = exports.SQLiteDatabase = void 0;
7
+ const sqlite3_1 = __importDefault(require("sqlite3"));
8
+ const util_1 = require("util");
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_1 = __importDefault(require("fs"));
11
+ class SQLiteDatabase {
12
+ constructor(dbPath) {
13
+ this.dbPath = dbPath || path_1.default.join(process.cwd(), '.today', 'knowledge.db');
14
+ this.ensureDirectoryExists();
15
+ this.db = new sqlite3_1.default.Database(this.dbPath);
16
+ this.initializeTables();
17
+ }
18
+ ensureDirectoryExists() {
19
+ const dir = path_1.default.dirname(this.dbPath);
20
+ if (!fs_1.default.existsSync(dir)) {
21
+ fs_1.default.mkdirSync(dir, { recursive: true });
22
+ }
23
+ }
24
+ async initializeTables() {
25
+ const run = (0, util_1.promisify)(this.db.run.bind(this.db));
26
+ // Learning entries table
27
+ await run(`
28
+ CREATE TABLE IF NOT EXISTS learning_entries (
29
+ id TEXT PRIMARY KEY,
30
+ content TEXT NOT NULL,
31
+ author_id TEXT NOT NULL,
32
+ team_id TEXT NOT NULL,
33
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
34
+ ai_topics TEXT, -- JSON array
35
+ expertise_level TEXT DEFAULT 'beginner',
36
+ impact_score REAL DEFAULT 0,
37
+ helpfulness_rating REAL DEFAULT 0,
38
+ time_saved_minutes INTEGER DEFAULT 0,
39
+ view_count INTEGER DEFAULT 0,
40
+ share_count INTEGER DEFAULT 0,
41
+ questions_answered INTEGER DEFAULT 0,
42
+ onboarding_relevance BOOLEAN DEFAULT FALSE,
43
+ embedding_generated BOOLEAN DEFAULT FALSE,
44
+ semantic_keywords TEXT, -- Extracted concepts for hybrid search
45
+ synced BOOLEAN DEFAULT FALSE
46
+ )
47
+ `);
48
+ // Vector embeddings table for semantic search
49
+ await run(`
50
+ CREATE TABLE IF NOT EXISTS knowledge_embeddings (
51
+ entry_id TEXT PRIMARY KEY,
52
+ embedding BLOB, -- Serialized vector (1536 dimensions for Titan)
53
+ embedding_model TEXT DEFAULT 'amazon.titan-embed-text-v1',
54
+ dimensions INTEGER DEFAULT 1536,
55
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
56
+ FOREIGN KEY (entry_id) REFERENCES learning_entries(id) ON DELETE CASCADE
57
+ )
58
+ `);
59
+ // Productivity impact tracking
60
+ await run(`
61
+ CREATE TABLE IF NOT EXISTS productivity_impacts (
62
+ id TEXT PRIMARY KEY,
63
+ user_id TEXT NOT NULL,
64
+ team_id TEXT NOT NULL,
65
+ date DATETIME DEFAULT CURRENT_TIMESTAMP,
66
+ times_saved_minutes INTEGER DEFAULT 0,
67
+ duplicate_questions_avoided INTEGER DEFAULT 0,
68
+ knowledge_reused INTEGER DEFAULT 0,
69
+ expert_connections_made INTEGER DEFAULT 0,
70
+ onboarding_tasks_completed INTEGER DEFAULT 0,
71
+ estimated_cost_savings REAL DEFAULT 0,
72
+ productivity_increase REAL DEFAULT 0,
73
+ synced BOOLEAN DEFAULT FALSE
74
+ )
75
+ `);
76
+ // Sync queue for offline operations
77
+ await run(`
78
+ CREATE TABLE IF NOT EXISTS sync_queue (
79
+ id TEXT PRIMARY KEY,
80
+ operation TEXT NOT NULL, -- 'create', 'update', 'delete'
81
+ table_name TEXT NOT NULL,
82
+ record_id TEXT NOT NULL,
83
+ data TEXT, -- JSON data
84
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
85
+ synced BOOLEAN DEFAULT FALSE
86
+ )
87
+ `);
88
+ }
89
+ async createEntry(entry) {
90
+ const run = (0, util_1.promisify)(this.db.run.bind(this.db));
91
+ const id = `entry_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
92
+ await run(`
93
+ INSERT INTO learning_entries (
94
+ id, content, author_id, team_id, created_at, ai_topics,
95
+ expertise_level, impact_score, helpfulness_rating, time_saved_minutes,
96
+ view_count, share_count, questions_answered, onboarding_relevance
97
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
98
+ `, [
99
+ id,
100
+ entry.content,
101
+ entry.authorId,
102
+ entry.teamId,
103
+ entry.createdAt.toISOString(),
104
+ JSON.stringify(entry.aiTopics),
105
+ entry.expertiseLevel,
106
+ entry.impactScore,
107
+ entry.helpfulnessRating,
108
+ entry.timeSavedMinutes,
109
+ entry.viewCount,
110
+ entry.shareCount,
111
+ entry.questionsAnswered,
112
+ entry.onboardingRelevance ? 1 : 0
113
+ ]);
114
+ return id;
115
+ }
116
+ async getEntries(limit = 50) {
117
+ const all = (0, util_1.promisify)(this.db.all.bind(this.db));
118
+ const rows = await all(`
119
+ SELECT * FROM learning_entries
120
+ ORDER BY created_at DESC
121
+ LIMIT ?
122
+ `, [limit]);
123
+ return rows.map(this.mapRowToEntry);
124
+ }
125
+ async searchEntries(query, limit = 50) {
126
+ const all = (0, util_1.promisify)(this.db.all.bind(this.db));
127
+ // Try the enhanced search first, fall back to basic search if column doesn't exist
128
+ try {
129
+ const rows = await all(`
130
+ SELECT * FROM learning_entries
131
+ WHERE content LIKE ? OR ai_topics LIKE ? OR semantic_keywords LIKE ?
132
+ ORDER BY created_at DESC
133
+ LIMIT ?
134
+ `, [`%${query}%`, `%${query}%`, `%${query}%`, limit]);
135
+ return rows.map(this.mapRowToEntry);
136
+ }
137
+ catch (error) {
138
+ // Fallback to basic search if semantic_keywords column doesn't exist
139
+ console.warn('Enhanced search failed, using basic search:', error);
140
+ const rows = await all(`
141
+ SELECT * FROM learning_entries
142
+ WHERE content LIKE ? OR ai_topics LIKE ?
143
+ ORDER BY created_at DESC
144
+ LIMIT ?
145
+ `, [`%${query}%`, `%${query}%`, limit]);
146
+ return rows.map(this.mapRowToEntry);
147
+ }
148
+ }
149
+ /**
150
+ * Store vector embedding for a knowledge entry
151
+ */
152
+ async storeEmbedding(entryId, embedding, model = 'amazon.titan-embed-text-v1') {
153
+ const run = (0, util_1.promisify)(this.db.run.bind(this.db));
154
+ // Serialize embedding as Buffer
155
+ const embeddingBuffer = Buffer.from(new Float32Array(embedding).buffer);
156
+ await run(`
157
+ INSERT OR REPLACE INTO knowledge_embeddings (entry_id, embedding, embedding_model, dimensions)
158
+ VALUES (?, ?, ?, ?)
159
+ `, [entryId, embeddingBuffer, model, embedding.length]);
160
+ // Mark entry as having embedding generated
161
+ await run(`
162
+ UPDATE learning_entries SET embedding_generated = TRUE WHERE id = ?
163
+ `, [entryId]);
164
+ }
165
+ /**
166
+ * Get embedding for a specific entry
167
+ */
168
+ async getEmbedding(entryId) {
169
+ const get = (0, util_1.promisify)(this.db.get.bind(this.db));
170
+ const row = await get(`
171
+ SELECT embedding, dimensions FROM knowledge_embeddings WHERE entry_id = ?
172
+ `, [entryId]);
173
+ if (!row || !row.embedding) {
174
+ return null;
175
+ }
176
+ // Deserialize embedding from Buffer
177
+ const float32Array = new Float32Array(row.embedding.buffer);
178
+ return Array.from(float32Array);
179
+ }
180
+ /**
181
+ * Get all embeddings for semantic search
182
+ */
183
+ async getAllEmbeddings() {
184
+ const all = (0, util_1.promisify)(this.db.all.bind(this.db));
185
+ const rows = await all(`
186
+ SELECT entry_id, embedding, dimensions FROM knowledge_embeddings
187
+ `);
188
+ return rows.map((row) => ({
189
+ entryId: row.entry_id,
190
+ embedding: Array.from(new Float32Array(row.embedding.buffer))
191
+ }));
192
+ }
193
+ /**
194
+ * Semantic search using vector similarity
195
+ */
196
+ async semanticSearch(queryEmbedding, limit = 20, threshold = 0.7) {
197
+ // Get all embeddings
198
+ const embeddings = await this.getAllEmbeddings();
199
+ if (embeddings.length === 0) {
200
+ return [];
201
+ }
202
+ // Calculate similarities (this would be optimized with a vector database in production)
203
+ const similarities = embeddings.map(item => ({
204
+ entryId: item.entryId,
205
+ similarity: this.cosineSimilarity(queryEmbedding, item.embedding)
206
+ }))
207
+ .filter(item => item.similarity >= threshold)
208
+ .sort((a, b) => b.similarity - a.similarity)
209
+ .slice(0, limit);
210
+ // Get the actual entries
211
+ const entryIds = similarities.map(s => s.entryId);
212
+ const entries = await this.getEntriesByIds(entryIds);
213
+ // Combine entries with similarity scores
214
+ return similarities.map(sim => ({
215
+ entry: entries.find(e => e.id === sim.entryId),
216
+ similarity: sim.similarity
217
+ })).filter(item => item.entry);
218
+ }
219
+ /**
220
+ * Hybrid search combining keyword and semantic search
221
+ */
222
+ async hybridSearch(query, queryEmbedding, limit = 30) {
223
+ const keywordLimit = Math.floor(limit * 0.4); // 40% from keywords
224
+ const semanticLimit = Math.floor(limit * 0.6); // 60% from semantic
225
+ // Get keyword results
226
+ const keywordResults = await this.searchEntries(query, keywordLimit);
227
+ let semanticResults = [];
228
+ // Get semantic results if embedding provided
229
+ if (queryEmbedding) {
230
+ const semanticMatches = await this.semanticSearch(queryEmbedding, semanticLimit, 0.6); // Lower threshold for better recall
231
+ semanticResults = semanticMatches.map(match => match.entry);
232
+ }
233
+ // Combine and deduplicate results
234
+ const combined = [...keywordResults];
235
+ const existingIds = new Set(keywordResults.map(e => e.id));
236
+ semanticResults.forEach(entry => {
237
+ if (!existingIds.has(entry.id)) {
238
+ combined.push(entry);
239
+ }
240
+ });
241
+ return combined.slice(0, limit);
242
+ }
243
+ /**
244
+ * Get entries by IDs maintaining order
245
+ */
246
+ async getEntriesByIds(ids) {
247
+ if (ids.length === 0)
248
+ return [];
249
+ const all = (0, util_1.promisify)(this.db.all.bind(this.db));
250
+ const placeholders = ids.map(() => '?').join(',');
251
+ const rows = await all(`
252
+ SELECT * FROM learning_entries WHERE id IN (${placeholders})
253
+ `, ids);
254
+ const entryMap = new Map(rows.map(row => [row.id, this.mapRowToEntry(row)]));
255
+ // Return entries in the same order as requested IDs
256
+ return ids.map(id => entryMap.get(id)).filter(Boolean);
257
+ }
258
+ /**
259
+ * Calculate cosine similarity between two vectors
260
+ */
261
+ cosineSimilarity(a, b) {
262
+ if (a.length !== b.length || a.length === 0)
263
+ return 0;
264
+ const dotProduct = a.reduce((sum, val, i) => sum + val * b[i], 0);
265
+ const magnitudeA = Math.sqrt(a.reduce((sum, val) => sum + val * val, 0));
266
+ const magnitudeB = Math.sqrt(b.reduce((sum, val) => sum + val * val, 0));
267
+ if (magnitudeA === 0 || magnitudeB === 0)
268
+ return 0;
269
+ return dotProduct / (magnitudeA * magnitudeB);
270
+ }
271
+ /**
272
+ * Get entries without embeddings for batch processing
273
+ */
274
+ async getEntriesWithoutEmbeddings(limit = 50) {
275
+ const all = (0, util_1.promisify)(this.db.all.bind(this.db));
276
+ const rows = await all(`
277
+ SELECT * FROM learning_entries
278
+ WHERE embedding_generated = FALSE
279
+ ORDER BY created_at DESC
280
+ LIMIT ?
281
+ `, [limit]);
282
+ return rows.map(this.mapRowToEntry);
283
+ }
284
+ async recordProductivityImpact(impact) {
285
+ const run = (0, util_1.promisify)(this.db.run.bind(this.db));
286
+ const id = `impact_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
287
+ await run(`
288
+ INSERT INTO productivity_impacts (
289
+ id, user_id, team_id, times_saved_minutes, duplicate_questions_avoided,
290
+ knowledge_reused, expert_connections_made, onboarding_tasks_completed,
291
+ estimated_cost_savings, productivity_increase
292
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
293
+ `, [
294
+ id,
295
+ impact.userId,
296
+ impact.teamId,
297
+ impact.timesSavedMinutes,
298
+ impact.duplicateQuestionsAvoided,
299
+ impact.knowledgeReused,
300
+ impact.expertConnectionsMade,
301
+ impact.onboardingTasksCompleted,
302
+ impact.estimatedCostSavings,
303
+ impact.productivityIncrease
304
+ ]);
305
+ }
306
+ mapRowToEntry(row) {
307
+ return {
308
+ id: row.id,
309
+ content: row.content,
310
+ authorId: row.author_id,
311
+ teamId: row.team_id,
312
+ createdAt: new Date(row.created_at),
313
+ aiTopics: JSON.parse(row.ai_topics || '[]'),
314
+ expertiseLevel: row.expertise_level,
315
+ impactScore: row.impact_score,
316
+ helpfulnessRating: row.helpfulness_rating,
317
+ timeSavedMinutes: row.time_saved_minutes,
318
+ viewCount: row.view_count,
319
+ shareCount: row.share_count,
320
+ questionsAnswered: row.questions_answered,
321
+ onboardingRelevance: Boolean(row.onboarding_relevance)
322
+ };
323
+ }
324
+ async close() {
325
+ return new Promise((resolve, reject) => {
326
+ this.db.close((err) => {
327
+ if (err)
328
+ reject(err);
329
+ else
330
+ resolve();
331
+ });
332
+ });
333
+ }
334
+ }
335
+ exports.SQLiteDatabase = SQLiteDatabase;
336
+ exports.database = new SQLiteDatabase();
337
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/database/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
2
+ export declare const handler: (event: APIGatewayProxyEvent) => Promise<APIGatewayProxyResult>;
3
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/lambda/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAwEzE,eAAO,MAAM,OAAO,GAAU,OAAO,oBAAoB,KAAG,OAAO,CAAC,qBAAqB,CAgIxF,CAAC"}