@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,274 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createCaptureFromPushCommand = createCaptureFromPushCommand;
40
+ exports.createGitHookCommand = createGitHookCommand;
41
+ const commander_1 = require("commander");
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const ora_1 = __importDefault(require("ora"));
44
+ const config_1 = require("../config");
45
+ const formatting_1 = require("../utils/formatting");
46
+ function createCaptureFromPushCommand() {
47
+ const cmd = new commander_1.Command('capture-from-push');
48
+ cmd
49
+ .description('Capture learning entries from git commits (used by git hook)')
50
+ .option('--old <ref>', 'Old git reference (before push)')
51
+ .option('--new <ref>', 'New git reference (after push)')
52
+ .option('--recent <count>', 'Number of recent commits to analyze', '1')
53
+ .action(async (options) => {
54
+ const spinner = (0, ora_1.default)();
55
+ try {
56
+ const { isGitRepository, getCommitsFromPush, getRecentCommits } = await Promise.resolve().then(() => __importStar(require('../utils/git')));
57
+ const { generateLearningsFromCommits } = await Promise.resolve().then(() => __importStar(require('../services/commit-learnings')));
58
+ const { awsApiService } = await Promise.resolve().then(() => __importStar(require('../services/aws-api')));
59
+ // Check if we're in a git repository
60
+ if (!await isGitRepository()) {
61
+ console.log(chalk_1.default.yellow('āš ļø Not in a git repository. Skipping learning capture.'));
62
+ return;
63
+ }
64
+ spinner.start('Analyzing commits for learning opportunities...');
65
+ let commits;
66
+ if (options.old && options.new) {
67
+ // Analyze commits from a push
68
+ commits = await getCommitsFromPush(options.old, options.new);
69
+ }
70
+ else {
71
+ // Analyze recent commits
72
+ const count = parseInt(options.recent, 10);
73
+ commits = await getRecentCommits(count);
74
+ }
75
+ if (commits.length === 0) {
76
+ spinner.info('No commits to analyze');
77
+ return;
78
+ }
79
+ spinner.text = `Analyzing ${commits.length} commit(s)...`;
80
+ // Generate learning entries from commits
81
+ const learnings = await generateLearningsFromCommits(commits);
82
+ if (learnings.length === 0) {
83
+ spinner.info('No well-structured commits found to capture as learning entries');
84
+ console.log(chalk_1.default.gray('šŸ’” Tip: Use conventional commits (e.g., "feat: add feature", "fix: resolve bug") for automatic learning capture'));
85
+ return;
86
+ }
87
+ spinner.succeed(`Found ${learnings.length} learning opportunity/opportunities from commits`);
88
+ // Display and submit each learning
89
+ for (const learning of learnings) {
90
+ console.log('');
91
+ console.log(chalk_1.default.cyan(`šŸ“š Learning from commit: ${learning.commitMessage.substring(0, 60)}...`));
92
+ console.log(chalk_1.default.gray(` Hash: ${learning.commitHash.substring(0, 8)}`));
93
+ console.log(chalk_1.default.gray(` Topics: ${learning.topics.join(', ') || 'None'}`));
94
+ // Create entry for cloud submission
95
+ const entry = {
96
+ content: learning.content,
97
+ authorId: config_1.configManager.getConfig().userId || 'demo_user',
98
+ teamId: config_1.configManager.getConfig().teamId || 'demo_team',
99
+ aiTopics: learning.topics,
100
+ expertiseLevel: 'intermediate',
101
+ impactScore: 2.5,
102
+ helpfulnessRating: 0,
103
+ timeSavedMinutes: 15,
104
+ viewCount: 0,
105
+ shareCount: 0,
106
+ questionsAnswered: 0,
107
+ onboardingRelevance: false,
108
+ metadata: {
109
+ source: 'git-push-hook',
110
+ commitHash: learning.commitHash,
111
+ commitMessage: learning.commitMessage
112
+ }
113
+ };
114
+ // Submit to cloud
115
+ try {
116
+ const apiAvailable = await awsApiService.isAvailable();
117
+ if (apiAvailable) {
118
+ spinner.start('Syncing learning to cloud...');
119
+ const result = await awsApiService.submitKnowledgeEntry(entry);
120
+ if (result) {
121
+ spinner.succeed(`Learning entry created: ${result}`);
122
+ }
123
+ else {
124
+ spinner.warn('Failed to create learning entry');
125
+ }
126
+ }
127
+ else {
128
+ spinner.info('Cloud services not available - learning saved locally');
129
+ console.log(chalk_1.default.gray('šŸ’” Learning will sync when cloud services are available'));
130
+ }
131
+ }
132
+ catch (error) {
133
+ spinner.warn('Failed to sync to cloud, but learning captured locally');
134
+ console.log(chalk_1.default.gray(` ${error}`));
135
+ }
136
+ }
137
+ console.log('');
138
+ console.log(chalk_1.default.green(`✨ Successfully captured ${learnings.length} learning entries from your commits!`));
139
+ }
140
+ catch (error) {
141
+ spinner.fail('Failed to capture learnings from commits');
142
+ console.error((0, formatting_1.formatErrorMessage)(error));
143
+ process.exit(1);
144
+ }
145
+ });
146
+ return cmd;
147
+ }
148
+ function createGitHookCommand() {
149
+ const cmd = new commander_1.Command('git-hook');
150
+ cmd
151
+ .description('Manage git push hook for automatic learning capture')
152
+ .option('--enable', 'Enable git push hook')
153
+ .option('--disable', 'Disable git push hook')
154
+ .option('--status', 'Check git hook status')
155
+ .action(async (options) => {
156
+ const spinner = (0, ora_1.default)();
157
+ try {
158
+ const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
159
+ const path = await Promise.resolve().then(() => __importStar(require('path')));
160
+ const { isGitRepository, getGitRoot } = await Promise.resolve().then(() => __importStar(require('../utils/git')));
161
+ // Check if we're in a git repository
162
+ if (!await isGitRepository()) {
163
+ console.log(chalk_1.default.red('āŒ Not in a git repository'));
164
+ console.log(chalk_1.default.gray(' Please run this command from within a git repository'));
165
+ return;
166
+ }
167
+ const gitRoot = await getGitRoot();
168
+ const hookPath = path.join(gitRoot, '.git', 'hooks', 'pre-push');
169
+ const hookSourcePath = path.join(gitRoot, 'scripts', 'pre-push-hook.sh');
170
+ // Check status
171
+ if (options.status || (!options.enable && !options.disable)) {
172
+ try {
173
+ const hookContent = await fs.readFile(hookPath, 'utf-8');
174
+ if (hookContent.includes('Today CLI')) {
175
+ console.log(chalk_1.default.green('āœ… Git push hook is ENABLED'));
176
+ console.log(chalk_1.default.gray(` Hook location: ${hookPath}`));
177
+ console.log(chalk_1.default.gray(' Commits will be automatically analyzed on git push'));
178
+ }
179
+ else {
180
+ console.log(chalk_1.default.yellow('āš ļø Git push hook exists but is not from Today CLI'));
181
+ console.log(chalk_1.default.gray(` Hook location: ${hookPath}`));
182
+ }
183
+ }
184
+ catch (error) {
185
+ if (error.code === 'ENOENT') {
186
+ console.log(chalk_1.default.gray('āŒ Git push hook is DISABLED'));
187
+ console.log(chalk_1.default.gray(' Use --enable to enable automatic learning capture'));
188
+ }
189
+ else {
190
+ throw error;
191
+ }
192
+ }
193
+ return;
194
+ }
195
+ // Enable hook
196
+ if (options.enable) {
197
+ spinner.start('Enabling git push hook...');
198
+ // Check if hook source exists
199
+ try {
200
+ await fs.access(hookSourcePath);
201
+ }
202
+ catch {
203
+ spinner.fail('Hook source file not found');
204
+ console.log(chalk_1.default.red(` Expected: ${hookSourcePath}`));
205
+ console.log(chalk_1.default.gray(' Please ensure you are in the Today CLI directory'));
206
+ return;
207
+ }
208
+ // Check if hook already exists
209
+ try {
210
+ const existingHook = await fs.readFile(hookPath, 'utf-8');
211
+ if (existingHook.includes('Today CLI')) {
212
+ spinner.info('Git push hook is already enabled');
213
+ return;
214
+ }
215
+ // Backup existing hook
216
+ const backupPath = `${hookPath}.backup`;
217
+ await fs.writeFile(backupPath, existingHook);
218
+ spinner.text = 'Existing hook backed up, installing Today CLI hook...';
219
+ }
220
+ catch (error) {
221
+ if (error.code !== 'ENOENT') {
222
+ throw error;
223
+ }
224
+ }
225
+ // Copy and make executable
226
+ const hookContent = await fs.readFile(hookSourcePath, 'utf-8');
227
+ await fs.writeFile(hookPath, hookContent, { mode: 0o755 });
228
+ spinner.succeed('Git push hook enabled successfully!');
229
+ console.log(chalk_1.default.green('✨ Your commits will now be automatically analyzed on git push'));
230
+ console.log(chalk_1.default.gray(' Well-structured commits will be captured as learning entries'));
231
+ console.log(chalk_1.default.gray(' Use conventional commits for best results (e.g., "feat:", "fix:")'));
232
+ }
233
+ // Disable hook
234
+ if (options.disable) {
235
+ spinner.start('Disabling git push hook...');
236
+ try {
237
+ const hookContent = await fs.readFile(hookPath, 'utf-8');
238
+ if (!hookContent.includes('Today CLI')) {
239
+ spinner.warn('Git push hook is not from Today CLI');
240
+ console.log(chalk_1.default.gray(' Not removing the existing hook'));
241
+ return;
242
+ }
243
+ // Remove the hook
244
+ await fs.unlink(hookPath);
245
+ // Restore backup if it exists
246
+ const backupPath = `${hookPath}.backup`;
247
+ try {
248
+ await fs.access(backupPath);
249
+ await fs.rename(backupPath, hookPath);
250
+ spinner.succeed('Git push hook disabled and previous hook restored');
251
+ }
252
+ catch {
253
+ spinner.succeed('Git push hook disabled');
254
+ }
255
+ console.log(chalk_1.default.gray(' Commits will no longer be automatically analyzed'));
256
+ }
257
+ catch (error) {
258
+ if (error.code === 'ENOENT') {
259
+ spinner.info('Git push hook is already disabled');
260
+ }
261
+ else {
262
+ throw error;
263
+ }
264
+ }
265
+ }
266
+ }
267
+ catch (error) {
268
+ spinner.fail('Failed to manage git hook');
269
+ console.error((0, formatting_1.formatErrorMessage)(error));
270
+ }
271
+ });
272
+ return cmd;
273
+ }
274
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createImpactCommand(): Command;
3
+ //# sourceMappingURL=impact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../../src/commands/impact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,mBAAmB,IAAI,OAAO,CAyF7C"}
@@ -0,0 +1,121 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createImpactCommand = createImpactCommand;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const ora_1 = __importDefault(require("ora"));
43
+ const config_1 = require("../config");
44
+ const formatting_1 = require("../utils/formatting");
45
+ const stats_helpers_1 = require("../lib/stats-helpers");
46
+ const export_helpers_1 = require("../lib/export-helpers");
47
+ function createImpactCommand() {
48
+ const cmd = new commander_1.Command('impact');
49
+ cmd
50
+ .description('Show detailed ROI analysis and workplace efficiency improvements from cloud data')
51
+ .option('--team', 'Show team-wide impact analysis')
52
+ .option('--export <format>', 'Export results (json, csv)', 'json')
53
+ .action(async (options) => {
54
+ const spinner = (0, ora_1.default)('Calculating cloud-based workplace efficiency impact...').start();
55
+ try {
56
+ // Check authentication first
57
+ const { awsApiService } = await Promise.resolve().then(() => __importStar(require('../services/aws-api')));
58
+ if (!awsApiService.isAuthenticated()) {
59
+ spinner.fail('Authentication required');
60
+ console.log(chalk_1.default.red('āŒ You must authenticate first to view impact analysis'));
61
+ console.log(chalk_1.default.gray('šŸ’” Run: today auth --username demo-user --password DemoPass123!'));
62
+ return;
63
+ }
64
+ spinner.text = 'Fetching knowledge entries from cloud...';
65
+ // Get entries from cloud backend
66
+ const entries = await awsApiService.getKnowledgeEntries(1000);
67
+ if (entries.length === 0) {
68
+ spinner.succeed('Analysis complete');
69
+ console.log(chalk_1.default.yellow('\nšŸš€ No knowledge entries found in cloud database'));
70
+ console.log(chalk_1.default.gray('šŸ’” Start capturing knowledge to see impact analysis'));
71
+ return;
72
+ }
73
+ const userId = config_1.configManager.getConfig().userId || 'demo_user';
74
+ const teamId = config_1.configManager.getConfig().teamId || 'demo_team';
75
+ // Filter entries based on scope
76
+ let filteredEntries = options.team
77
+ ? entries.filter(entry => entry.teamId === teamId)
78
+ : entries.filter(entry => entry.authorId === userId);
79
+ // If no entries match the config, use all entries (for demo purposes)
80
+ if (filteredEntries.length === 0 && entries.length > 0) {
81
+ filteredEntries = entries;
82
+ }
83
+ spinner.text = 'Analyzing cloud-based ROI and efficiency gains...';
84
+ // Calculate detailed impact metrics from cloud data
85
+ const impact = (0, stats_helpers_1.calculateDetailedImpact)(filteredEntries, options.team);
86
+ // Try to get enhanced cloud analytics
87
+ try {
88
+ spinner.text = 'Fetching enhanced cloud impact analytics...';
89
+ const cloudAnalytics = await awsApiService.getAnalytics('all', options.team);
90
+ if (cloudAnalytics) {
91
+ impact.cloudEnhanced = true;
92
+ impact.cloudMetrics = cloudAnalytics;
93
+ }
94
+ }
95
+ catch (error) {
96
+ // Continue with calculated impact only
97
+ impact.cloudEnhanced = false;
98
+ }
99
+ spinner.succeed('Cloud impact analysis complete');
100
+ // Display detailed impact report
101
+ (0, stats_helpers_1.displayImpactReport)(impact, options.team);
102
+ // Export if requested
103
+ if (options.export) {
104
+ const filename = `today-cloud-impact-${Date.now()}.${options.export}`;
105
+ (0, export_helpers_1.exportImpactData)(impact, filename, options.export);
106
+ console.log(chalk_1.default.green(`\nšŸ“Š Cloud impact data exported to: ${filename}`));
107
+ }
108
+ }
109
+ catch (error) {
110
+ spinner.fail('Failed to analyze cloud impact');
111
+ console.error((0, formatting_1.formatErrorMessage)(error));
112
+ if (error instanceof Error && error.message.includes('Authentication')) {
113
+ console.log(chalk_1.default.yellow('\nšŸ’” Make sure you are authenticated:'));
114
+ console.log(chalk_1.default.gray(' today auth --username demo-user --password DemoPass123!'));
115
+ }
116
+ process.exit(1);
117
+ }
118
+ });
119
+ return cmd;
120
+ }
121
+ //# sourceMappingURL=impact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/commands/impact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createInsightsCommand(): Command;
3
+ //# sourceMappingURL=insights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../src/commands/insights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,qBAAqB,IAAI,OAAO,CA+E/C"}
@@ -0,0 +1,113 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createInsightsCommand = createInsightsCommand;
40
+ const commander_1 = require("commander");
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const ora_1 = __importDefault(require("ora"));
43
+ const config_1 = require("../config");
44
+ const formatting_1 = require("../utils/formatting");
45
+ const bedrock_1 = require("../services/bedrock");
46
+ const insights_helpers_1 = require("../lib/insights-helpers");
47
+ function createInsightsCommand() {
48
+ const cmd = new commander_1.Command('insights');
49
+ cmd
50
+ .description('Get comprehensive AI-powered knowledge insights and recommendations from cloud data')
51
+ .option('--team', 'Show team-wide insights')
52
+ .option('--detailed', 'Show detailed analysis with specific recommendations')
53
+ .action(async (options) => {
54
+ const spinner = (0, ora_1.default)('Analyzing cloud knowledge patterns with AI...').start();
55
+ try {
56
+ // Check authentication first
57
+ const { awsApiService } = await Promise.resolve().then(() => __importStar(require('../services/aws-api')));
58
+ if (!awsApiService.isAuthenticated()) {
59
+ spinner.fail('Authentication required');
60
+ console.log(chalk_1.default.red('āŒ You must authenticate first to view insights'));
61
+ console.log(chalk_1.default.gray('šŸ’” Run: today auth --username demo-user --password DemoPass123!'));
62
+ return;
63
+ }
64
+ // Get comprehensive learning data from cloud
65
+ spinner.text = 'Fetching knowledge entries from cloud...';
66
+ const entries = await awsApiService.getKnowledgeEntries(1000);
67
+ if (entries.length === 0) {
68
+ spinner.succeed('Analysis complete');
69
+ console.log(chalk_1.default.yellow('\nšŸ“Š No knowledge entries found for analysis'));
70
+ console.log(chalk_1.default.gray('šŸ’” Start capturing knowledge to get AI-powered insights'));
71
+ return;
72
+ }
73
+ // Apply team/user filtering with fallback
74
+ const userId = config_1.configManager.getConfig().userId || 'demo_user';
75
+ const teamId = config_1.configManager.getConfig().teamId || 'demo_team';
76
+ let filteredEntries = options.team
77
+ ? entries.filter(entry => entry.teamId === teamId)
78
+ : entries.filter(entry => entry.authorId === userId);
79
+ // If no entries match config, use all entries for demo
80
+ if (filteredEntries.length === 0 && entries.length > 0) {
81
+ filteredEntries = entries;
82
+ }
83
+ spinner.text = 'Analyzing learning patterns and knowledge gaps...';
84
+ // Generate comprehensive insights
85
+ const insights = await (0, insights_helpers_1.generateComprehensiveInsights)(filteredEntries, options.team, options.detailed);
86
+ // Try to enhance with Bedrock AI if available
87
+ const bedrockAvailable = await bedrock_1.bedrockService.isAvailable();
88
+ let aiEnhancedInsights = null;
89
+ if (bedrockAvailable) {
90
+ try {
91
+ spinner.text = 'Enhancing insights with Amazon Bedrock AI...';
92
+ aiEnhancedInsights = await bedrock_1.bedrockService.generateInsights(filteredEntries, teamId);
93
+ }
94
+ catch (error) {
95
+ console.warn('Bedrock enhancement failed, using comprehensive analysis');
96
+ }
97
+ }
98
+ spinner.succeed('AI knowledge analysis complete');
99
+ // Display comprehensive insights
100
+ (0, insights_helpers_1.displayComprehensiveInsights)(insights, aiEnhancedInsights, options.team, options.detailed, bedrockAvailable);
101
+ }
102
+ catch (error) {
103
+ spinner.fail('AI insights generation failed');
104
+ console.error((0, formatting_1.formatErrorMessage)(error));
105
+ if (error instanceof Error && error.message.includes('Authentication')) {
106
+ console.log(chalk_1.default.yellow('\nšŸ’” Make sure you are authenticated:'));
107
+ console.log(chalk_1.default.gray(' today auth --username demo-user --password DemoPass123!'));
108
+ }
109
+ }
110
+ });
111
+ return cmd;
112
+ }
113
+ //# sourceMappingURL=insights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../src/commands/insights.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createLearnedCommand(): Command;
3
+ //# sourceMappingURL=learned.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learned.d.ts","sourceRoot":"","sources":["../../src/commands/learned.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,oBAAoB,IAAI,OAAO,CAiW9C"}