@sumicom/quicksave 0.5.1 → 0.6.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 (50) hide show
  1. package/dist/ai/asyncQueue.d.ts +16 -0
  2. package/dist/ai/asyncQueue.d.ts.map +1 -0
  3. package/dist/ai/asyncQueue.js +39 -0
  4. package/dist/ai/asyncQueue.js.map +1 -0
  5. package/dist/ai/asyncQueue.test.d.ts +2 -0
  6. package/dist/ai/asyncQueue.test.d.ts.map +1 -0
  7. package/dist/ai/asyncQueue.test.js +56 -0
  8. package/dist/ai/asyncQueue.test.js.map +1 -0
  9. package/dist/ai/cardBuilder.d.ts +64 -0
  10. package/dist/ai/cardBuilder.d.ts.map +1 -0
  11. package/dist/ai/cardBuilder.js +503 -0
  12. package/dist/ai/cardBuilder.js.map +1 -0
  13. package/dist/ai/claudeCodeService.d.ts +65 -32
  14. package/dist/ai/claudeCodeService.d.ts.map +1 -1
  15. package/dist/ai/claudeCodeService.js +534 -267
  16. package/dist/ai/claudeCodeService.js.map +1 -1
  17. package/dist/connection/connection.d.ts +24 -1
  18. package/dist/connection/connection.d.ts.map +1 -1
  19. package/dist/connection/connection.js +92 -6
  20. package/dist/connection/connection.js.map +1 -1
  21. package/dist/connection/pubsub.d.ts +41 -0
  22. package/dist/connection/pubsub.d.ts.map +1 -0
  23. package/dist/connection/pubsub.js +101 -0
  24. package/dist/connection/pubsub.js.map +1 -0
  25. package/dist/connection/pubsub.test.d.ts +2 -0
  26. package/dist/connection/pubsub.test.d.ts.map +1 -0
  27. package/dist/connection/pubsub.test.js +96 -0
  28. package/dist/connection/pubsub.test.js.map +1 -0
  29. package/dist/connection/relay.d.ts +4 -0
  30. package/dist/connection/relay.d.ts.map +1 -1
  31. package/dist/connection/relay.js +30 -0
  32. package/dist/connection/relay.js.map +1 -1
  33. package/dist/handlers/messageHandler.d.ts +22 -2
  34. package/dist/handlers/messageHandler.d.ts.map +1 -1
  35. package/dist/handlers/messageHandler.js +207 -16
  36. package/dist/handlers/messageHandler.js.map +1 -1
  37. package/dist/handlers/messageHandler.test.js +1 -1
  38. package/dist/index.js +192 -4
  39. package/dist/index.js.map +1 -1
  40. package/dist/service/ipc.test.js +6 -6
  41. package/dist/service/ipcClient.js +1 -1
  42. package/dist/service/run.d.ts.map +1 -1
  43. package/dist/service/run.js +125 -13
  44. package/dist/service/run.js.map +1 -1
  45. package/dist/service/singleton.test.js +1 -1
  46. package/dist/service/types.d.ts +29 -0
  47. package/dist/service/types.d.ts.map +1 -1
  48. package/dist/service/types.js +11 -0
  49. package/dist/service/types.js.map +1 -1
  50. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub.test.js","sourceRoot":"","sources":["../../src/connection/pubsub.test.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,10 @@ export declare class SignalingClient extends EventEmitter {
25
25
  private send;
26
26
  private attemptReconnect;
27
27
  private intentionalDisconnect;
28
+ private heartbeatInterval;
29
+ private pongTimeout;
30
+ private startHeartbeat;
31
+ private clearHeartbeat;
28
32
  disconnect(): void;
29
33
  getAgentId(): string;
30
34
  getConnectionUrl(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/connection/relay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,WAAW,CAAS;gBAEhB,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAMpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0DxB,OAAO,CAAC,aAAa;IA0BrB,OAAO,IAAI,IAAI;IAIf,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;YAkB5C,QAAQ;YAKR,UAAU;IAMxB,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,qBAAqB,CAAS;IAEtC,UAAU,IAAI,IAAI;IASlB,UAAU,IAAI,MAAM;IAIpB,gBAAgB,IAAI,MAAM;CAG3B"}
1
+ {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/connection/relay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,WAAW,CAAS;gBAEhB,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAMpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4DxB,OAAO,CAAC,aAAa;IA0BrB,OAAO,IAAI,IAAI;IAIf,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;YAkB5C,QAAQ;YAKR,UAAU;IAMxB,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,WAAW,CAA8C;IAEjE,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,cAAc;IAWtB,UAAU,IAAI,IAAI;IAUlB,UAAU,IAAI,MAAM;IAIpB,gBAAgB,IAAI,MAAM;CAG3B"}
@@ -24,6 +24,7 @@ export class SignalingClient extends EventEmitter {
24
24
  this.ws.on('open', () => {
25
25
  this.isConnected = true;
26
26
  this.reconnectAttempts = 0;
27
+ this.startHeartbeat();
27
28
  this.emit('connected');
28
29
  resolve();
29
30
  });
@@ -57,6 +58,7 @@ export class SignalingClient extends EventEmitter {
57
58
  });
58
59
  this.ws.on('close', () => {
59
60
  this.isConnected = false;
61
+ this.clearHeartbeat();
60
62
  this.emit('disconnected');
61
63
  this.attemptReconnect();
62
64
  });
@@ -151,8 +153,36 @@ export class SignalingClient extends EventEmitter {
151
153
  }, delay);
152
154
  }
153
155
  intentionalDisconnect = false;
156
+ heartbeatInterval = null;
157
+ pongTimeout = null;
158
+ startHeartbeat() {
159
+ this.clearHeartbeat();
160
+ this.ws?.on('pong', () => {
161
+ if (this.pongTimeout) {
162
+ clearTimeout(this.pongTimeout);
163
+ this.pongTimeout = null;
164
+ }
165
+ });
166
+ this.heartbeatInterval = setInterval(() => {
167
+ this.ws?.ping();
168
+ this.pongTimeout = setTimeout(() => {
169
+ this.ws?.terminate();
170
+ }, 15000);
171
+ }, 60000);
172
+ }
173
+ clearHeartbeat() {
174
+ if (this.heartbeatInterval) {
175
+ clearInterval(this.heartbeatInterval);
176
+ this.heartbeatInterval = null;
177
+ }
178
+ if (this.pongTimeout) {
179
+ clearTimeout(this.pongTimeout);
180
+ this.pongTimeout = null;
181
+ }
182
+ }
154
183
  disconnect() {
155
184
  this.intentionalDisconnect = true; // Prevent reconnection
185
+ this.clearHeartbeat();
156
186
  if (this.ws) {
157
187
  this.sendBye();
158
188
  this.ws.close();
@@ -1 +1 @@
1
- {"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/connection/relay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/connection/relay.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,17 @@ export declare class MessageHandler {
10
10
  private codingPaths;
11
11
  private aiService;
12
12
  private claudeService;
13
- constructor(repos: Repository[], _license?: License, codingPaths?: string[]);
13
+ private latestVersionCache;
14
+ private versionCheckInFlight;
15
+ onPeerSubscribed?: (peerAddress: string, sessionId: string) => void;
16
+ onPeerUnsubscribed?: (peerAddress: string, sessionId: string) => void;
17
+ private productionBuild;
18
+ constructor(repos: Repository[], _license?: License, codingPaths?: string[], productionBuild?: boolean);
19
+ /**
20
+ * Check npm registry for latest version. Deduped: returns cached value
21
+ * if checked within the last 12 hours. Only runs in production builds.
22
+ */
23
+ private checkLatestVersion;
14
24
  addRepo(repo: Repository): void;
15
25
  removeRepo(path: string): void;
16
26
  private getClientRepoPath;
@@ -48,13 +58,23 @@ export declare class MessageHandler {
48
58
  private handleAddRepo;
49
59
  private handleListCodingPaths;
50
60
  private handleAddCodingPath;
61
+ /** Callback set by run.ts to trigger daemon restart after update. */
62
+ onRestartRequested?: () => void;
63
+ private handleAgentCheckUpdate;
64
+ private handleAgentUpdate;
51
65
  private handleClaudeListSessions;
52
66
  private handleClaudeStart;
53
67
  private handleClaudeResume;
54
68
  private handleClaudeCancel;
55
69
  private handleClaudeClose;
56
70
  private handleClaudeUserInputResponse;
57
- private handleClaudeGetMessages;
71
+ private handleClaudeGetCards;
72
+ private handleGetPreferences;
73
+ private handleSetPreferences;
74
+ private handleSetSessionPermission;
75
+ private handleGetSessionConfig;
76
+ private handleSetSessionConfig;
77
+ private handleGetActiveSessions;
58
78
  private createErrorResponse;
59
79
  }
60
80
  //# sourceMappingURL=messageHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/messageHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAiCP,OAAO,EAMP,UAAU,EA2BX,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAK/D,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,aAAa,CAA8C;gBAEvD,KAAK,EAAE,UAAU,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE;IAgB3E,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAS/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ9B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAMvB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAWvC,OAAO,IAAI,IAAI;IAIf,qBAAqB,IAAI,MAAM;IAI/B,gBAAgB,IAAI,iBAAiB;IAIrC,OAAO,CAAC,YAAY;IAWd,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,WAAW,GAAE,MAAkB,GAC9B,OAAO,CAAC,OAAO,CAAC;IAmFnB,OAAO,CAAC,eAAe;YAuBT,YAAY;YAOZ,UAAU;YAQV,WAAW;YA2BX,aAAa;YA2Bb,gBAAgB;YA2BhB,kBAAkB;YA2BlB,YAAY;YA+BZ,SAAS;YAQT,cAAc;YAQd,cAAc;YA4Bd,aAAa;YA2Bb,aAAa;YA2Bb,kBAAkB;YA2BlB,mBAAmB;YAOnB,oBAAoB;YA2BpB,2BAA2B;IA0EzC,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,qBAAqB;YAQf,eAAe;IAoB7B,OAAO,CAAC,gBAAgB;YAuBV,qBAAqB;YAiErB,aAAa;IA8D3B,OAAO,CAAC,qBAAqB;YASf,mBAAmB;YAkDnB,wBAAwB;YAuBxB,iBAAiB;YAgCjB,kBAAkB;IAgChC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,6BAA6B;YAWvB,uBAAuB;IA8BrC,OAAO,CAAC,mBAAmB;CAK5B"}
1
+ {"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/messageHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAiCP,OAAO,EAMP,UAAU,EAuCX,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAO/D,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,kBAAkB,CAAuD;IACjF,OAAO,CAAC,oBAAoB,CAAuC;IACnE,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtE,OAAO,CAAC,eAAe,CAAU;gBAErB,KAAK,EAAE,UAAU,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,UAAQ;IAiBpG;;;OAGG;YACW,kBAAkB;IAgChC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAS/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ9B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAMvB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAWvC,OAAO,IAAI,IAAI;IAIf,qBAAqB,IAAI,MAAM;IAI/B,gBAAgB,IAAI,iBAAiB;IAIrC,OAAO,CAAC,YAAY;IAWd,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,WAAW,GAAE,MAAkB,GAC9B,OAAO,CAAC,OAAO,CAAC;IAwGnB,OAAO,CAAC,eAAe;YAsBT,YAAY;YAOZ,UAAU;YAQV,WAAW;YA2BX,aAAa;YA2Bb,gBAAgB;YA2BhB,kBAAkB;YA2BlB,YAAY;YA+BZ,SAAS;YAQT,cAAc;YAQd,cAAc;YA4Bd,aAAa;YA2Bb,aAAa;YA2Bb,kBAAkB;YA2BlB,mBAAmB;YAOnB,oBAAoB;YA2BpB,2BAA2B;IA0EzC,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,qBAAqB;YAQf,eAAe;IAoB7B,OAAO,CAAC,gBAAgB;YAuBV,qBAAqB;YAiErB,aAAa;IA8D3B,OAAO,CAAC,qBAAqB;YASf,mBAAmB;IAkDjC,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;YAElB,sBAAsB;YA8BtB,iBAAiB;YAuEjB,wBAAwB;YAuBxB,iBAAiB;YAiCjB,kBAAkB;IAyChC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,6BAA6B;YAWvB,oBAAoB;IA4BlC,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,mBAAmB;CAK5B"}
@@ -6,9 +6,10 @@ import { ClaudeCodeService } from '../ai/claudeCodeService.js';
6
6
  import { readdir, stat } from 'fs/promises';
7
7
  import { join, dirname, basename } from 'path';
8
8
  import { homedir } from 'os';
9
+ const VERSION_CHECK_INTERVAL_MS = 12 * 60 * 60 * 1000; // 12 hours
9
10
  export class MessageHandler {
10
11
  repos;
11
- agentVersion = '0.5.1';
12
+ agentVersion = '0.6.0';
12
13
  defaultRepoPath;
13
14
  clientRepos = new Map(); // peerAddress -> repoPath
14
15
  repoLocks = new Map(); // repoPath -> peerAddress holding lock
@@ -16,13 +17,19 @@ export class MessageHandler {
16
17
  codingPaths = new Map(); // path -> CodingPath
17
18
  aiService = null;
18
19
  claudeService = new ClaudeCodeService();
19
- constructor(repos, _license, codingPaths) {
20
+ latestVersionCache = null;
21
+ versionCheckInFlight = null;
22
+ onPeerSubscribed;
23
+ onPeerUnsubscribed;
24
+ productionBuild;
25
+ constructor(repos, _license, codingPaths, productionBuild = false) {
20
26
  this.repos = new Map();
21
27
  for (const repo of repos) {
22
28
  this.repos.set(repo.path, new GitOperations(repo.path));
23
29
  }
24
30
  this.availableRepos = repos;
25
31
  this.defaultRepoPath = repos.length > 0 ? repos[0].path : '';
32
+ this.productionBuild = productionBuild;
26
33
  // Load explicit coding paths only (repos and coding paths are independent)
27
34
  if (codingPaths) {
28
35
  for (const p of codingPaths) {
@@ -30,6 +37,42 @@ export class MessageHandler {
30
37
  }
31
38
  }
32
39
  }
40
+ /**
41
+ * Check npm registry for latest version. Deduped: returns cached value
42
+ * if checked within the last 12 hours. Only runs in production builds.
43
+ */
44
+ async checkLatestVersion(force = false) {
45
+ if (!force && !this.productionBuild)
46
+ return null;
47
+ // Return cached value if fresh
48
+ if (!force && this.latestVersionCache &&
49
+ Date.now() - this.latestVersionCache.checkedAt < VERSION_CHECK_INTERVAL_MS) {
50
+ return this.latestVersionCache.version;
51
+ }
52
+ // Dedup concurrent requests
53
+ if (this.versionCheckInFlight)
54
+ return this.versionCheckInFlight;
55
+ this.versionCheckInFlight = (async () => {
56
+ try {
57
+ const res = await fetch('https://registry.npmjs.org/@sumicom/quicksave/latest');
58
+ if (!res.ok)
59
+ return null;
60
+ const data = await res.json();
61
+ if (data.version) {
62
+ this.latestVersionCache = { version: data.version, checkedAt: Date.now() };
63
+ return data.version;
64
+ }
65
+ return null;
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ finally {
71
+ this.versionCheckInFlight = null;
72
+ }
73
+ })();
74
+ return this.versionCheckInFlight;
75
+ }
33
76
  addRepo(repo) {
34
77
  if (this.repos.has(repo.path))
35
78
  return;
@@ -158,6 +201,10 @@ export class MessageHandler {
158
201
  return this.handleListCodingPaths(message);
159
202
  case 'agent:add-coding-path':
160
203
  return this.handleAddCodingPath(message);
204
+ case 'agent:check-update':
205
+ return this.handleAgentCheckUpdate(message);
206
+ case 'agent:update':
207
+ return this.handleAgentUpdate(message);
161
208
  // Claude Code SDK
162
209
  case 'claude:list-sessions':
163
210
  return this.handleClaudeListSessions(message, peerAddress);
@@ -169,10 +216,27 @@ export class MessageHandler {
169
216
  return this.handleClaudeCancel(message);
170
217
  case 'claude:close':
171
218
  return this.handleClaudeClose(message);
172
- case 'claude:get-messages':
173
- return this.handleClaudeGetMessages(message, peerAddress);
174
219
  case 'claude:user-input-response':
175
220
  return this.handleClaudeUserInputResponse(message);
221
+ case 'claude:get-preferences':
222
+ return this.handleGetPreferences(message);
223
+ case 'claude:set-preferences':
224
+ return this.handleSetPreferences(message);
225
+ case 'claude:set-session-permission':
226
+ return this.handleSetSessionPermission(message);
227
+ case 'claude:active-sessions':
228
+ return this.handleGetActiveSessions(message);
229
+ case 'claude:get-cards':
230
+ return this.handleClaudeGetCards(message, peerAddress);
231
+ case 'claude:unsubscribe': {
232
+ const unsub = message.payload;
233
+ this.onPeerUnsubscribed?.(peerAddress, unsub.sessionId);
234
+ return createMessage('claude:unsubscribe:response', { ok: true });
235
+ }
236
+ case 'session:get-config':
237
+ return this.handleGetSessionConfig(message);
238
+ case 'session:set-config':
239
+ return this.handleSetSessionConfig(message);
176
240
  default:
177
241
  return this.createErrorResponse(message.id, 'UNKNOWN_MESSAGE_TYPE', `Unknown message type: ${message.type}`);
178
242
  }
@@ -183,20 +247,19 @@ export class MessageHandler {
183
247
  }
184
248
  }
185
249
  handleHandshake(message, peerAddress) {
250
+ // Fire-and-forget: check npm registry for latest version (12h dedup, production only)
251
+ this.checkLatestVersion().catch(() => { });
186
252
  const response = createMessage('handshake:ack', {
187
253
  success: true,
188
254
  agentVersion: this.agentVersion,
189
255
  repoPath: this.getClientRepoPath(peerAddress),
190
256
  availableRepos: this.availableRepos,
191
257
  availableCodingPaths: [...this.codingPaths.values()],
258
+ preferences: this.claudeService.getPreferences(),
259
+ latestVersion: this.latestVersionCache?.version,
260
+ devBuild: !this.productionBuild || undefined,
192
261
  });
193
262
  response.id = message.id;
194
- // Re-emit pending user input requests so they get broadcast to the new peer
195
- const pending = this.claudeService.getPendingInputRequests();
196
- for (const request of pending) {
197
- console.log(`[handshake] re-emitting pending user input: requestId=${request.requestId}`);
198
- this.claudeService.emit('user-input-request', request);
199
- }
200
263
  return response;
201
264
  }
202
265
  async handleStatus(message, peerAddress) {
@@ -782,6 +845,85 @@ export class MessageHandler {
782
845
  }
783
846
  }
784
847
  // ============================================================================
848
+ // Agent Self-Update
849
+ // ============================================================================
850
+ /** Callback set by run.ts to trigger daemon restart after update. */
851
+ onRestartRequested;
852
+ async handleAgentCheckUpdate(message) {
853
+ const currentVersion = this.agentVersion;
854
+ try {
855
+ const latestVersion = await this.checkLatestVersion(/* force */ true);
856
+ const response = createMessage('agent:check-update:response', {
857
+ currentVersion,
858
+ latestVersion: latestVersion || undefined,
859
+ updateAvailable: !!latestVersion && latestVersion !== currentVersion,
860
+ });
861
+ response.id = message.id;
862
+ return response;
863
+ }
864
+ catch (error) {
865
+ const response = createMessage('agent:check-update:response', {
866
+ currentVersion,
867
+ updateAvailable: false,
868
+ error: error instanceof Error ? error.message : 'Failed to check for updates',
869
+ });
870
+ response.id = message.id;
871
+ return response;
872
+ }
873
+ }
874
+ async handleAgentUpdate(message) {
875
+ const previousVersion = this.agentVersion;
876
+ try {
877
+ const { execFile } = await import('child_process');
878
+ const { promisify } = await import('util');
879
+ const execFileAsync = promisify(execFile);
880
+ // Use npm to install the latest global package
881
+ const { stdout, stderr } = await execFileAsync('npm', [
882
+ 'install', '-g', '@sumicom/quicksave@latest',
883
+ ], { timeout: 120_000 });
884
+ const output = (stdout + '\n' + stderr).trim();
885
+ // Parse the installed version from npm output
886
+ // npm output typically contains lines like: + @sumicom/quicksave@0.5.3
887
+ let newVersion = output.match(/@sumicom\/quicksave@(\d+\.\d+\.\d+)/)?.[1];
888
+ // Fallback: query npm for the actually installed version
889
+ if (!newVersion) {
890
+ try {
891
+ const { stdout: listOut } = await execFileAsync('npm', [
892
+ 'list', '-g', '@sumicom/quicksave', '--json',
893
+ ], { timeout: 10_000 });
894
+ const listData = JSON.parse(listOut);
895
+ newVersion = listData.dependencies?.['@sumicom/quicksave']?.version;
896
+ }
897
+ catch { /* best-effort */ }
898
+ }
899
+ const needsRestart = !!newVersion && newVersion !== previousVersion;
900
+ const response = createMessage('agent:update:response', {
901
+ success: true,
902
+ previousVersion,
903
+ newVersion: newVersion || undefined,
904
+ restarting: needsRestart,
905
+ });
906
+ response.id = message.id;
907
+ // Schedule daemon restart AFTER we send the response back to PWA
908
+ if (needsRestart && this.onRestartRequested) {
909
+ setTimeout(() => this.onRestartRequested?.(), 500);
910
+ }
911
+ return response;
912
+ }
913
+ catch (error) {
914
+ const response = createMessage('agent:update:response', {
915
+ success: false,
916
+ previousVersion,
917
+ restarting: false,
918
+ error: error instanceof Error
919
+ ? (error.message.includes('EACCES') ? `Permission denied. Try: sudo npm install -g @sumicom/quicksave@latest` : error.message)
920
+ : 'Failed to update agent',
921
+ });
922
+ response.id = message.id;
923
+ return response;
924
+ }
925
+ }
926
+ // ============================================================================
785
927
  // Claude Code SDK Handlers
786
928
  // ============================================================================
787
929
  async handleClaudeListSessions(message, peerAddress) {
@@ -808,6 +950,7 @@ export class MessageHandler {
808
950
  prompt, cwd, streamId, allowedTools, systemPrompt, model, permissionMode,
809
951
  });
810
952
  console.log(`[claude:start] session created: ${sessionId}`);
953
+ this.onPeerSubscribed?.(peerAddress, sessionId);
811
954
  const response = createMessage('claude:start:response', { success: true, sessionId, streamId });
812
955
  response.id = message.id;
813
956
  return response;
@@ -824,11 +967,19 @@ export class MessageHandler {
824
967
  const cwd = payloadCwd || this.getClientRepoPath(peerAddress);
825
968
  const streamId = generateMessageId();
826
969
  console.log(`[claude:resume] session=${requestedId} cwd=${cwd} prompt=${prompt.slice(0, 80)}`);
970
+ // Subscribe before resumeSession starts streaming — hot resume emits events
971
+ // immediately (user_message, then assistant turns), so we must be subscribed
972
+ // before session.send() fires, not after resumeSession() returns.
973
+ this.onPeerSubscribed?.(peerAddress, requestedId);
827
974
  try {
828
975
  const actualSessionId = await this.claudeService.resumeSession({
829
976
  sessionId: requestedId, prompt, cwd, streamId,
830
977
  });
831
978
  console.log(`[claude:resume] session resumed: ${actualSessionId}`);
979
+ // Re-subscribe with actual session ID (cold resume may return a different ID)
980
+ if (actualSessionId !== requestedId) {
981
+ this.onPeerSubscribed?.(peerAddress, actualSessionId);
982
+ }
832
983
  const response = createMessage('claude:resume:response', { success: true, sessionId: actualSessionId, streamId });
833
984
  response.id = message.id;
834
985
  return response;
@@ -863,26 +1014,66 @@ export class MessageHandler {
863
1014
  response.id = message.id;
864
1015
  return response;
865
1016
  }
866
- async handleClaudeGetMessages(message, peerAddress) {
1017
+ async handleClaudeGetCards(message, peerAddress) {
867
1018
  const { sessionId, cwd: payloadCwd, offset = 0, limit = 50 } = message.payload;
868
1019
  const cwd = payloadCwd || this.getClientRepoPath(peerAddress);
869
1020
  try {
870
- const result = await this.claudeService.getMessages(sessionId, cwd, offset, limit);
871
- const response = createMessage('claude:get-messages:response', result);
1021
+ const result = await this.claudeService.getCards(sessionId, cwd, offset, limit);
1022
+ this.onPeerSubscribed?.(peerAddress, sessionId);
1023
+ const response = createMessage('claude:get-cards:response', result);
872
1024
  response.id = message.id;
873
1025
  return response;
874
1026
  }
875
1027
  catch (error) {
876
- const response = createMessage('claude:get-messages:response', {
877
- messages: [],
1028
+ const response = createMessage('claude:get-cards:response', {
1029
+ cards: [],
878
1030
  total: 0,
879
1031
  hasMore: false,
880
- error: error instanceof Error ? error.message : 'Failed to get messages',
1032
+ error: error instanceof Error ? error.message : 'Failed to get cards',
881
1033
  });
882
1034
  response.id = message.id;
883
1035
  return response;
884
1036
  }
885
1037
  }
1038
+ handleGetPreferences(message) {
1039
+ const response = createMessage('claude:get-preferences:response', { preferences: this.claudeService.getPreferences() });
1040
+ response.id = message.id;
1041
+ return response;
1042
+ }
1043
+ handleSetPreferences(message) {
1044
+ const applied = this.claudeService.setPreferences(message.payload.preferences);
1045
+ const response = createMessage('claude:set-preferences:response', { success: true, preferences: applied });
1046
+ response.id = message.id;
1047
+ return response;
1048
+ }
1049
+ handleSetSessionPermission(message) {
1050
+ const { sessionId, permissionMode } = message.payload;
1051
+ const validModes = ['default', 'acceptEdits', 'bypassPermissions', 'plan'];
1052
+ const success = validModes.includes(permissionMode) && this.claudeService.setPermissionLevel(sessionId, permissionMode);
1053
+ const response = createMessage('claude:set-session-permission:response', { success, sessionId, permissionMode });
1054
+ response.id = message.id;
1055
+ return response;
1056
+ }
1057
+ handleGetSessionConfig(message) {
1058
+ const { sessionId } = message.payload;
1059
+ const config = this.claudeService.getSessionConfig(sessionId);
1060
+ const response = createMessage('session:get-config:response', { sessionId, config });
1061
+ response.id = message.id;
1062
+ return response;
1063
+ }
1064
+ handleSetSessionConfig(message) {
1065
+ const { sessionId, key, value } = message.payload;
1066
+ const config = this.claudeService.setSessionConfig(sessionId, key, value);
1067
+ const response = createMessage('session:set-config:response', { success: true, sessionId, config });
1068
+ response.id = message.id;
1069
+ return response;
1070
+ }
1071
+ handleGetActiveSessions(message) {
1072
+ const sessions = this.claudeService.getActiveSessions();
1073
+ const response = createMessage('claude:active-sessions:response', { sessions });
1074
+ response.id = message.id;
1075
+ return response;
1076
+ }
886
1077
  createErrorResponse(id, code, message) {
887
1078
  const response = createMessage('error', { code, message });
888
1079
  response.id = id;