@sumicom/quicksave 0.1.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 (58) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ai/commitSummary.d.ts +26 -0
  3. package/dist/ai/commitSummary.d.ts.map +1 -0
  4. package/dist/ai/commitSummary.js +145 -0
  5. package/dist/ai/commitSummary.js.map +1 -0
  6. package/dist/config.d.ts +22 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +76 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/connection/connection.d.ts +54 -0
  11. package/dist/connection/connection.d.ts.map +1 -0
  12. package/dist/connection/connection.js +171 -0
  13. package/dist/connection/connection.js.map +1 -0
  14. package/dist/connection/signaling.d.ts +31 -0
  15. package/dist/connection/signaling.d.ts.map +1 -0
  16. package/dist/connection/signaling.js +144 -0
  17. package/dist/connection/signaling.js.map +1 -0
  18. package/dist/git/operations.d.ts +104 -0
  19. package/dist/git/operations.d.ts.map +1 -0
  20. package/dist/git/operations.js +383 -0
  21. package/dist/git/operations.js.map +1 -0
  22. package/dist/git/operations.test.d.ts +2 -0
  23. package/dist/git/operations.test.d.ts.map +1 -0
  24. package/dist/git/operations.test.js +232 -0
  25. package/dist/git/operations.test.js.map +1 -0
  26. package/dist/handlers/messageHandler.d.ts +33 -0
  27. package/dist/handlers/messageHandler.d.ts.map +1 -0
  28. package/dist/handlers/messageHandler.js +463 -0
  29. package/dist/handlers/messageHandler.js.map +1 -0
  30. package/dist/handlers/messageHandler.test.d.ts +2 -0
  31. package/dist/handlers/messageHandler.test.d.ts.map +1 -0
  32. package/dist/handlers/messageHandler.test.js +233 -0
  33. package/dist/handlers/messageHandler.test.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +127 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/webrtc/connection.d.ts +52 -0
  39. package/dist/webrtc/connection.d.ts.map +1 -0
  40. package/dist/webrtc/connection.js +255 -0
  41. package/dist/webrtc/connection.js.map +1 -0
  42. package/dist/webrtc/signaling.d.ts +41 -0
  43. package/dist/webrtc/signaling.d.ts.map +1 -0
  44. package/dist/webrtc/signaling.js +152 -0
  45. package/dist/webrtc/signaling.js.map +1 -0
  46. package/package.json +36 -0
  47. package/src/ai/commitSummary.ts +199 -0
  48. package/src/config.ts +97 -0
  49. package/src/connection/connection.ts +223 -0
  50. package/src/connection/signaling.ts +172 -0
  51. package/src/git/operations.test.ts +305 -0
  52. package/src/git/operations.ts +443 -0
  53. package/src/handlers/messageHandler.test.ts +294 -0
  54. package/src/handlers/messageHandler.ts +550 -0
  55. package/src/index.ts +151 -0
  56. package/src/types/webrtc.d.ts +38 -0
  57. package/tsconfig.json +13 -0
  58. package/vitest.config.ts +9 -0
@@ -0,0 +1,463 @@
1
+ import { createMessage, } from '@sumicom/quicksave-shared';
2
+ import { GitOperations } from '../git/operations.js';
3
+ import { getAnthropicApiKey, setAnthropicApiKey, hasAnthropicApiKey } from '../config.js';
4
+ import { CommitSummaryService } from '../ai/commitSummary.js';
5
+ import { readdir, stat } from 'fs/promises';
6
+ import { join, dirname, basename } from 'path';
7
+ import { homedir } from 'os';
8
+ export class MessageHandler {
9
+ repos;
10
+ agentVersion = '0.1.0';
11
+ currentRepoPath;
12
+ availableRepos;
13
+ aiService = null;
14
+ constructor(repos, _license) {
15
+ this.repos = new Map();
16
+ for (const repo of repos) {
17
+ this.repos.set(repo.path, new GitOperations(repo.path));
18
+ }
19
+ this.availableRepos = repos;
20
+ this.currentRepoPath = repos[0].path;
21
+ // License handling will be implemented later
22
+ }
23
+ get git() {
24
+ return this.repos.get(this.currentRepoPath);
25
+ }
26
+ getAiService() {
27
+ const apiKey = getAnthropicApiKey();
28
+ if (!apiKey)
29
+ return null;
30
+ // Create service lazily and reuse for caching
31
+ if (!this.aiService) {
32
+ this.aiService = new CommitSummaryService(apiKey);
33
+ }
34
+ return this.aiService;
35
+ }
36
+ async handleMessage(message) {
37
+ try {
38
+ switch (message.type) {
39
+ case 'handshake':
40
+ return this.handleHandshake(message);
41
+ case 'ping':
42
+ return createMessage('pong', { timestamp: Date.now() });
43
+ case 'git:status':
44
+ return this.handleStatus(message);
45
+ case 'git:diff':
46
+ return this.handleDiff(message);
47
+ case 'git:stage':
48
+ return this.handleStage(message);
49
+ case 'git:unstage':
50
+ return this.handleUnstage(message);
51
+ case 'git:stage-patch':
52
+ return this.handleStagePatch(message);
53
+ case 'git:unstage-patch':
54
+ return this.handleUnstagePatch(message);
55
+ case 'git:commit':
56
+ return this.handleCommit(message);
57
+ case 'git:log':
58
+ return this.handleLog(message);
59
+ case 'git:branches':
60
+ return this.handleBranches();
61
+ case 'git:checkout':
62
+ return this.handleCheckout(message);
63
+ case 'git:discard':
64
+ return this.handleDiscard(message);
65
+ case 'ai:generate-commit-summary':
66
+ return this.handleGenerateCommitSummary(message);
67
+ case 'ai:set-api-key':
68
+ return this.handleSetApiKey(message);
69
+ case 'ai:get-api-key-status':
70
+ return this.handleGetApiKeyStatus(message);
71
+ case 'agent:list-repos':
72
+ return this.handleListRepos(message);
73
+ case 'agent:switch-repo':
74
+ return this.handleSwitchRepo(message);
75
+ case 'agent:browse-directory':
76
+ return this.handleBrowseDirectory(message);
77
+ case 'agent:add-repo':
78
+ return this.handleAddRepo(message);
79
+ default:
80
+ return this.createErrorResponse(message.id, 'UNKNOWN_MESSAGE_TYPE', `Unknown message type: ${message.type}`);
81
+ }
82
+ }
83
+ catch (error) {
84
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
85
+ return this.createErrorResponse(message.id, 'HANDLER_ERROR', errorMessage);
86
+ }
87
+ }
88
+ handleHandshake(message) {
89
+ const response = createMessage('handshake:ack', {
90
+ success: true,
91
+ agentVersion: this.agentVersion,
92
+ repoPath: this.currentRepoPath,
93
+ availableRepos: this.availableRepos,
94
+ });
95
+ response.id = message.id;
96
+ return response;
97
+ }
98
+ async handleStatus(message) {
99
+ const status = await this.git.getStatus();
100
+ const response = createMessage('git:status:response', status);
101
+ response.id = message.id;
102
+ return response;
103
+ }
104
+ async handleDiff(message) {
105
+ const { path, staged } = message.payload;
106
+ const diff = await this.git.getDiff(path, staged);
107
+ const response = createMessage('git:diff:response', diff);
108
+ response.id = message.id;
109
+ return response;
110
+ }
111
+ async handleStage(message) {
112
+ try {
113
+ await this.git.stage(message.payload.paths);
114
+ const response = createMessage('git:stage:response', { success: true });
115
+ response.id = message.id;
116
+ return response;
117
+ }
118
+ catch (error) {
119
+ const response = createMessage('git:stage:response', {
120
+ success: false,
121
+ error: error instanceof Error ? error.message : 'Failed to stage files',
122
+ });
123
+ response.id = message.id;
124
+ return response;
125
+ }
126
+ }
127
+ async handleUnstage(message) {
128
+ try {
129
+ await this.git.unstage(message.payload.paths);
130
+ const response = createMessage('git:unstage:response', { success: true });
131
+ response.id = message.id;
132
+ return response;
133
+ }
134
+ catch (error) {
135
+ const response = createMessage('git:unstage:response', {
136
+ success: false,
137
+ error: error instanceof Error ? error.message : 'Failed to unstage files',
138
+ });
139
+ response.id = message.id;
140
+ return response;
141
+ }
142
+ }
143
+ async handleStagePatch(message) {
144
+ try {
145
+ await this.git.stagePatch(message.payload.patch);
146
+ const response = createMessage('git:stage-patch:response', { success: true });
147
+ response.id = message.id;
148
+ return response;
149
+ }
150
+ catch (error) {
151
+ const response = createMessage('git:stage-patch:response', {
152
+ success: false,
153
+ error: error instanceof Error ? error.message : 'Failed to stage patch',
154
+ });
155
+ response.id = message.id;
156
+ return response;
157
+ }
158
+ }
159
+ async handleUnstagePatch(message) {
160
+ try {
161
+ await this.git.unstagePatch(message.payload.patch);
162
+ const response = createMessage('git:unstage-patch:response', { success: true });
163
+ response.id = message.id;
164
+ return response;
165
+ }
166
+ catch (error) {
167
+ const response = createMessage('git:unstage-patch:response', {
168
+ success: false,
169
+ error: error instanceof Error ? error.message : 'Failed to unstage patch',
170
+ });
171
+ response.id = message.id;
172
+ return response;
173
+ }
174
+ }
175
+ async handleCommit(message) {
176
+ try {
177
+ const { message: commitMessage, description } = message.payload;
178
+ const hash = await this.git.commit(commitMessage, description);
179
+ const response = createMessage('git:commit:response', {
180
+ success: true,
181
+ hash,
182
+ });
183
+ response.id = message.id;
184
+ return response;
185
+ }
186
+ catch (error) {
187
+ const response = createMessage('git:commit:response', {
188
+ success: false,
189
+ error: error instanceof Error ? error.message : 'Failed to commit',
190
+ });
191
+ response.id = message.id;
192
+ return response;
193
+ }
194
+ }
195
+ async handleLog(message) {
196
+ const limit = message.payload.limit || 50;
197
+ const commits = await this.git.getLog(limit);
198
+ const response = createMessage('git:log:response', { commits });
199
+ response.id = message.id;
200
+ return response;
201
+ }
202
+ async handleBranches() {
203
+ const { branches, current } = await this.git.getBranches();
204
+ return createMessage('git:branches:response', {
205
+ branches,
206
+ current,
207
+ });
208
+ }
209
+ async handleCheckout(message) {
210
+ try {
211
+ const { branch, create } = message.payload;
212
+ await this.git.checkout(branch, create);
213
+ const response = createMessage('git:checkout:response', { success: true });
214
+ response.id = message.id;
215
+ return response;
216
+ }
217
+ catch (error) {
218
+ const response = createMessage('git:checkout:response', {
219
+ success: false,
220
+ error: error instanceof Error ? error.message : 'Failed to checkout',
221
+ });
222
+ response.id = message.id;
223
+ return response;
224
+ }
225
+ }
226
+ async handleDiscard(message) {
227
+ try {
228
+ await this.git.discard(message.payload.paths);
229
+ const response = createMessage('git:discard:response', { success: true });
230
+ response.id = message.id;
231
+ return response;
232
+ }
233
+ catch (error) {
234
+ const response = createMessage('git:discard:response', {
235
+ success: false,
236
+ error: error instanceof Error ? error.message : 'Failed to discard changes',
237
+ });
238
+ response.id = message.id;
239
+ return response;
240
+ }
241
+ }
242
+ async handleGenerateCommitSummary(message) {
243
+ const aiService = this.getAiService();
244
+ if (!aiService) {
245
+ const response = createMessage('ai:generate-commit-summary:response', {
246
+ success: false,
247
+ error: 'Configure your API key in Settings',
248
+ errorCode: 'NO_API_KEY',
249
+ });
250
+ response.id = message.id;
251
+ return response;
252
+ }
253
+ try {
254
+ const status = await this.git.getStatus();
255
+ if (status.staged.length === 0) {
256
+ const response = createMessage('ai:generate-commit-summary:response', {
257
+ success: false,
258
+ error: 'No staged changes to summarize',
259
+ errorCode: 'NO_STAGED_CHANGES',
260
+ });
261
+ response.id = message.id;
262
+ return response;
263
+ }
264
+ // Collect diffs for all staged files
265
+ const diffs = await Promise.all(status.staged.map((file) => this.git.getDiff(file.path, true)));
266
+ // Generate summary (uses internal queue and cache)
267
+ const result = await aiService.generateSummary({
268
+ diffs,
269
+ context: message.payload.context,
270
+ model: message.payload.model,
271
+ });
272
+ const response = createMessage('ai:generate-commit-summary:response', {
273
+ success: true,
274
+ summary: result.summary,
275
+ description: result.description,
276
+ tokenUsage: result.tokenUsage,
277
+ cached: result.cached,
278
+ });
279
+ response.id = message.id;
280
+ return response;
281
+ }
282
+ catch (error) {
283
+ const errorMessage = error instanceof Error ? error.message : 'Failed to generate summary';
284
+ const isRateLimit = errorMessage.includes('rate_limit');
285
+ const response = createMessage('ai:generate-commit-summary:response', {
286
+ success: false,
287
+ error: errorMessage,
288
+ errorCode: isRateLimit ? 'RATE_LIMITED' : 'API_ERROR',
289
+ });
290
+ response.id = message.id;
291
+ return response;
292
+ }
293
+ }
294
+ handleSetApiKey(message) {
295
+ try {
296
+ setAnthropicApiKey(message.payload.apiKey);
297
+ const response = createMessage('ai:set-api-key:response', {
298
+ success: true,
299
+ });
300
+ response.id = message.id;
301
+ return response;
302
+ }
303
+ catch (error) {
304
+ const response = createMessage('ai:set-api-key:response', {
305
+ success: false,
306
+ error: error instanceof Error ? error.message : 'Failed to save API key',
307
+ });
308
+ response.id = message.id;
309
+ return response;
310
+ }
311
+ }
312
+ handleGetApiKeyStatus(message) {
313
+ const response = createMessage('ai:get-api-key-status:response', {
314
+ configured: hasAnthropicApiKey(),
315
+ });
316
+ response.id = message.id;
317
+ return response;
318
+ }
319
+ async handleListRepos(message) {
320
+ // Refresh branch info for all repos
321
+ const repos = [];
322
+ for (const repo of this.availableRepos) {
323
+ const git = this.repos.get(repo.path);
324
+ try {
325
+ const { current } = await git.getBranches();
326
+ repos.push({ ...repo, currentBranch: current });
327
+ }
328
+ catch {
329
+ repos.push(repo);
330
+ }
331
+ }
332
+ const response = createMessage('agent:list-repos:response', {
333
+ repos,
334
+ current: this.currentRepoPath,
335
+ });
336
+ response.id = message.id;
337
+ return response;
338
+ }
339
+ handleSwitchRepo(message) {
340
+ const { path } = message.payload;
341
+ // Check if the requested repo is in our available repos
342
+ if (!this.repos.has(path)) {
343
+ const response = createMessage('agent:switch-repo:response', {
344
+ success: false,
345
+ newPath: this.currentRepoPath,
346
+ error: `Repository not available: ${path}`,
347
+ });
348
+ response.id = message.id;
349
+ return response;
350
+ }
351
+ this.currentRepoPath = path;
352
+ const response = createMessage('agent:switch-repo:response', {
353
+ success: true,
354
+ newPath: path,
355
+ });
356
+ response.id = message.id;
357
+ return response;
358
+ }
359
+ async handleBrowseDirectory(message) {
360
+ const requestedPath = message.payload.path || homedir();
361
+ try {
362
+ const entries = [];
363
+ const dirEntries = await readdir(requestedPath, { withFileTypes: true });
364
+ for (const entry of dirEntries) {
365
+ // Skip hidden files/folders (starting with .)
366
+ if (entry.name.startsWith('.'))
367
+ continue;
368
+ const fullPath = join(requestedPath, entry.name);
369
+ const isDirectory = entry.isDirectory();
370
+ // Check if it's a git repo (has .git folder)
371
+ let isGitRepo = false;
372
+ if (isDirectory) {
373
+ try {
374
+ const gitPath = join(fullPath, '.git');
375
+ const gitStat = await stat(gitPath);
376
+ isGitRepo = gitStat.isDirectory();
377
+ }
378
+ catch {
379
+ // Not a git repo
380
+ }
381
+ }
382
+ entries.push({
383
+ name: entry.name,
384
+ path: fullPath,
385
+ isDirectory,
386
+ isGitRepo,
387
+ });
388
+ }
389
+ // Sort: directories first, then alphabetically
390
+ entries.sort((a, b) => {
391
+ if (a.isDirectory && !b.isDirectory)
392
+ return -1;
393
+ if (!a.isDirectory && b.isDirectory)
394
+ return 1;
395
+ return a.name.localeCompare(b.name);
396
+ });
397
+ // Calculate parent path
398
+ const parentPath = requestedPath === '/' ? null : dirname(requestedPath);
399
+ const response = createMessage('agent:browse-directory:response', {
400
+ path: requestedPath,
401
+ parentPath,
402
+ entries,
403
+ });
404
+ response.id = message.id;
405
+ return response;
406
+ }
407
+ catch (error) {
408
+ const response = createMessage('agent:browse-directory:response', {
409
+ path: requestedPath,
410
+ parentPath: dirname(requestedPath),
411
+ entries: [],
412
+ error: error instanceof Error ? error.message : 'Failed to read directory',
413
+ });
414
+ response.id = message.id;
415
+ return response;
416
+ }
417
+ }
418
+ async handleAddRepo(message) {
419
+ const { path: repoPath } = message.payload;
420
+ // Check if already added
421
+ if (this.repos.has(repoPath)) {
422
+ const response = createMessage('agent:add-repo:response', {
423
+ success: false,
424
+ error: 'Repository already added',
425
+ });
426
+ response.id = message.id;
427
+ return response;
428
+ }
429
+ try {
430
+ // Verify it's a git repo by trying to get branches
431
+ const git = new GitOperations(repoPath);
432
+ const { current } = await git.getBranches();
433
+ // Add to our maps
434
+ this.repos.set(repoPath, git);
435
+ const newRepo = {
436
+ path: repoPath,
437
+ name: basename(repoPath),
438
+ currentBranch: current,
439
+ };
440
+ this.availableRepos.push(newRepo);
441
+ const response = createMessage('agent:add-repo:response', {
442
+ success: true,
443
+ repo: newRepo,
444
+ });
445
+ response.id = message.id;
446
+ return response;
447
+ }
448
+ catch (error) {
449
+ const response = createMessage('agent:add-repo:response', {
450
+ success: false,
451
+ error: error instanceof Error ? error.message : 'Failed to add repository',
452
+ });
453
+ response.id = message.id;
454
+ return response;
455
+ }
456
+ }
457
+ createErrorResponse(id, code, message) {
458
+ const response = createMessage('error', { code, message });
459
+ response.id = id;
460
+ return response;
461
+ }
462
+ }
463
+ //# sourceMappingURL=messageHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageHandler.js","sourceRoot":"","sources":["../../src/handlers/messageHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=messageHandler.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageHandler.test.d.ts","sourceRoot":"","sources":["../../src/handlers/messageHandler.test.ts"],"names":[],"mappings":""}