247-cli 2.21.1 → 2.23.3

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 (160) hide show
  1. package/agent/dist/config.d.ts +4 -7
  2. package/agent/dist/config.d.ts.map +1 -1
  3. package/agent/dist/config.js +1 -2
  4. package/agent/dist/config.js.map +1 -1
  5. package/agent/dist/db/index.d.ts +0 -7
  6. package/agent/dist/db/index.d.ts.map +1 -1
  7. package/agent/dist/db/index.js +68 -333
  8. package/agent/dist/db/index.js.map +1 -1
  9. package/agent/dist/db/schema.d.ts +3 -90
  10. package/agent/dist/db/schema.d.ts.map +1 -1
  11. package/agent/dist/db/schema.js +4 -105
  12. package/agent/dist/db/schema.js.map +1 -1
  13. package/agent/dist/db/sessions.d.ts +0 -53
  14. package/agent/dist/db/sessions.d.ts.map +1 -1
  15. package/agent/dist/db/sessions.js +3 -224
  16. package/agent/dist/db/sessions.js.map +1 -1
  17. package/agent/dist/index.js +1 -0
  18. package/agent/dist/index.js.map +1 -1
  19. package/agent/dist/logger.d.ts +0 -2
  20. package/agent/dist/logger.d.ts.map +1 -1
  21. package/agent/dist/logger.js +0 -4
  22. package/agent/dist/logger.js.map +1 -1
  23. package/agent/dist/routes/attention.d.ts +10 -0
  24. package/agent/dist/routes/attention.d.ts.map +1 -0
  25. package/agent/dist/routes/attention.js +123 -0
  26. package/agent/dist/routes/attention.js.map +1 -0
  27. package/agent/dist/routes/index.d.ts +3 -7
  28. package/agent/dist/routes/index.d.ts.map +1 -1
  29. package/agent/dist/routes/index.js +3 -7
  30. package/agent/dist/routes/index.js.map +1 -1
  31. package/agent/dist/routes/pair.d.ts +26 -0
  32. package/agent/dist/routes/pair.d.ts.map +1 -0
  33. package/agent/dist/routes/pair.js +381 -0
  34. package/agent/dist/routes/pair.js.map +1 -0
  35. package/agent/dist/routes/projects.d.ts +2 -1
  36. package/agent/dist/routes/projects.d.ts.map +1 -1
  37. package/agent/dist/routes/projects.js +7 -39
  38. package/agent/dist/routes/projects.js.map +1 -1
  39. package/agent/dist/routes/sessions.d.ts +1 -0
  40. package/agent/dist/routes/sessions.d.ts.map +1 -1
  41. package/agent/dist/routes/sessions.js +14 -379
  42. package/agent/dist/routes/sessions.js.map +1 -1
  43. package/agent/dist/server.d.ts.map +1 -1
  44. package/agent/dist/server.js +11 -81
  45. package/agent/dist/server.js.map +1 -1
  46. package/agent/dist/services/index.d.ts +1 -6
  47. package/agent/dist/services/index.d.ts.map +1 -1
  48. package/agent/dist/services/index.js +4 -4
  49. package/agent/dist/services/index.js.map +1 -1
  50. package/agent/dist/setup-hooks.d.ts +10 -0
  51. package/agent/dist/setup-hooks.d.ts.map +1 -0
  52. package/agent/dist/setup-hooks.js +157 -0
  53. package/agent/dist/setup-hooks.js.map +1 -0
  54. package/agent/dist/status.d.ts +0 -6
  55. package/agent/dist/status.d.ts.map +1 -1
  56. package/agent/dist/status.js +2 -12
  57. package/agent/dist/status.js.map +1 -1
  58. package/agent/dist/terminal.d.ts +0 -11
  59. package/agent/dist/terminal.d.ts.map +1 -1
  60. package/agent/dist/terminal.js +6 -60
  61. package/agent/dist/terminal.js.map +1 -1
  62. package/agent/dist/websocket-handlers.d.ts +1 -0
  63. package/agent/dist/websocket-handlers.d.ts.map +1 -1
  64. package/agent/dist/websocket-handlers.js +3 -187
  65. package/agent/dist/websocket-handlers.js.map +1 -1
  66. package/agent/node_modules/247-shared/dist/types/index.d.ts +0 -232
  67. package/agent/node_modules/247-shared/dist/types/index.d.ts.map +1 -1
  68. package/agent/node_modules/247-shared/dist/types/index.js +1 -63
  69. package/agent/node_modules/247-shared/dist/types/index.js.map +1 -1
  70. package/agent/node_modules/247-shared/package.json +1 -1
  71. package/dist/index.js +1 -1
  72. package/package.json +3 -3
  73. package/agent/dist/db/environments.d.ts +0 -60
  74. package/agent/dist/db/environments.d.ts.map +0 -1
  75. package/agent/dist/db/environments.js +0 -235
  76. package/agent/dist/db/environments.js.map +0 -1
  77. package/agent/dist/db/events.d.ts +0 -46
  78. package/agent/dist/db/events.d.ts.map +0 -1
  79. package/agent/dist/db/events.js +0 -193
  80. package/agent/dist/db/events.js.map +0 -1
  81. package/agent/dist/db/history.d.ts +0 -37
  82. package/agent/dist/db/history.d.ts.map +0 -1
  83. package/agent/dist/db/history.js +0 -98
  84. package/agent/dist/db/history.js.map +0 -1
  85. package/agent/dist/db/push-subscriptions.d.ts +0 -44
  86. package/agent/dist/db/push-subscriptions.d.ts.map +0 -1
  87. package/agent/dist/db/push-subscriptions.js +0 -98
  88. package/agent/dist/db/push-subscriptions.js.map +0 -1
  89. package/agent/dist/editor.d.ts +0 -18
  90. package/agent/dist/editor.d.ts.map +0 -1
  91. package/agent/dist/editor.js +0 -222
  92. package/agent/dist/editor.js.map +0 -1
  93. package/agent/dist/environments.d.ts +0 -59
  94. package/agent/dist/environments.d.ts.map +0 -1
  95. package/agent/dist/environments.js +0 -229
  96. package/agent/dist/environments.js.map +0 -1
  97. package/agent/dist/git.d.ts +0 -39
  98. package/agent/dist/git.d.ts.map +0 -1
  99. package/agent/dist/git.js +0 -436
  100. package/agent/dist/git.js.map +0 -1
  101. package/agent/dist/heartbeat-monitor.d.ts +0 -24
  102. package/agent/dist/heartbeat-monitor.d.ts.map +0 -1
  103. package/agent/dist/heartbeat-monitor.js +0 -105
  104. package/agent/dist/heartbeat-monitor.js.map +0 -1
  105. package/agent/dist/push/sender.d.ts +0 -26
  106. package/agent/dist/push/sender.d.ts.map +0 -1
  107. package/agent/dist/push/sender.js +0 -122
  108. package/agent/dist/push/sender.js.map +0 -1
  109. package/agent/dist/push/vapid.d.ts +0 -25
  110. package/agent/dist/push/vapid.d.ts.map +0 -1
  111. package/agent/dist/push/vapid.js +0 -81
  112. package/agent/dist/push/vapid.js.map +0 -1
  113. package/agent/dist/routes/editor.d.ts +0 -9
  114. package/agent/dist/routes/editor.d.ts.map +0 -1
  115. package/agent/dist/routes/editor.js +0 -63
  116. package/agent/dist/routes/editor.js.map +0 -1
  117. package/agent/dist/routes/environments.d.ts +0 -6
  118. package/agent/dist/routes/environments.d.ts.map +0 -1
  119. package/agent/dist/routes/environments.js +0 -94
  120. package/agent/dist/routes/environments.js.map +0 -1
  121. package/agent/dist/routes/files.d.ts +0 -6
  122. package/agent/dist/routes/files.d.ts.map +0 -1
  123. package/agent/dist/routes/files.js +0 -84
  124. package/agent/dist/routes/files.js.map +0 -1
  125. package/agent/dist/routes/heartbeat.d.ts +0 -10
  126. package/agent/dist/routes/heartbeat.d.ts.map +0 -1
  127. package/agent/dist/routes/heartbeat.js +0 -124
  128. package/agent/dist/routes/heartbeat.js.map +0 -1
  129. package/agent/dist/routes/notification.d.ts +0 -9
  130. package/agent/dist/routes/notification.d.ts.map +0 -1
  131. package/agent/dist/routes/notification.js +0 -172
  132. package/agent/dist/routes/notification.js.map +0 -1
  133. package/agent/dist/routes/push.d.ts +0 -7
  134. package/agent/dist/routes/push.d.ts.map +0 -1
  135. package/agent/dist/routes/push.js +0 -98
  136. package/agent/dist/routes/push.js.map +0 -1
  137. package/agent/dist/routes/stop.d.ts +0 -9
  138. package/agent/dist/routes/stop.d.ts.map +0 -1
  139. package/agent/dist/routes/stop.js +0 -121
  140. package/agent/dist/routes/stop.js.map +0 -1
  141. package/agent/dist/services/cleanup.d.ts +0 -45
  142. package/agent/dist/services/cleanup.d.ts.map +0 -1
  143. package/agent/dist/services/cleanup.js +0 -130
  144. package/agent/dist/services/cleanup.js.map +0 -1
  145. package/agent/dist/services/execution.d.ts +0 -53
  146. package/agent/dist/services/execution.d.ts.map +0 -1
  147. package/agent/dist/services/execution.js +0 -75
  148. package/agent/dist/services/execution.js.map +0 -1
  149. package/agent/dist/services/stream-json.d.ts +0 -109
  150. package/agent/dist/services/stream-json.d.ts.map +0 -1
  151. package/agent/dist/services/stream-json.js +0 -335
  152. package/agent/dist/services/stream-json.js.map +0 -1
  153. package/agent/dist/services/worktree.d.ts +0 -41
  154. package/agent/dist/services/worktree.d.ts.map +0 -1
  155. package/agent/dist/services/worktree.js +0 -139
  156. package/agent/dist/services/worktree.js.map +0 -1
  157. package/agent/dist/setup-statusline.d.ts +0 -10
  158. package/agent/dist/setup-statusline.d.ts.map +0 -1
  159. package/agent/dist/setup-statusline.js +0 -234
  160. package/agent/dist/setup-statusline.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/db/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;GAcvB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QACnE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;QACpC,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QAC3E,WAAW,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACrE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;QACpC,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,IAAI;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;KACjC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,eAAyB,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;;GAIH,CACE;SACA,GAAG,CAAC,WAAW,CAAqB,CAAC;IAExC,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EACnB,KAAa,EACb,MAAc;IAEd,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,MAAM,WAAW,GAAG,EAAE;SACnB,OAAO,CAAC,qEAAqE,CAAC;SAC9E,GAAG,CAAC,WAAW,CAAsB,CAAC;IAEzC,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;;;GAKH,CACE;SACA,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAqB,CAAC;IAEvD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACvC,KAAK,EAAE,WAAW,CAAC,KAAK;KACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,KAAK,GAAG,EAAE;IAC7D,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;;;GAKH,CACE;SACA,GAAG,CAAC,WAAW,EAAE,KAAK,CAAqB,CAAC;IAE/C,qCAAqC;IACrC,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,OAAO,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;;GAIH,CACE;SACA,GAAG,CAAC,WAAW,CAAqB,CAAC;IAExC,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN;;;;;GAKH,CACE;SACA,GAAG,CAAC,WAAW,CAA+B,CAAC;IAElD,OAAO,GAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEhG,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;IAErC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAExF,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAEzB,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,qEAAqE,CAAC;SAC9E,GAAG,CAAC,WAAW,CAAsB,CAAC;IAEzC,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,GAAmB;IAChD,MAAM,KAAK,GAAiB;QAC1B,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE;QACrB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;IAEF,mBAAmB;IACnB,IAAI,GAAG,CAAC,SAAS;QAAE,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC;IAClD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,OAAO;QAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IAE5C,qBAAqB;IACrB,IAAI,GAAG,CAAC,WAAW;QAAE,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC;IACxD,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI;QAAE,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,UAAU,KAAK,CAAC,CAAC;IAEpE,eAAe;IACf,IAAI,GAAG,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC;IAEpD,gBAAgB;IAChB,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;QAAE,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC;IAC5D,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI;QAAE,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC;IACjE,IAAI,GAAG,CAAC,cAAc,KAAK,IAAI;QAAE,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC;IACzE,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI;QAAE,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC;IAE3D,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,37 +0,0 @@
1
- import type { DbStatusHistory } from './schema.js';
2
- import type { SessionStatus, AttentionReason } from '247-shared';
3
- /**
4
- * Record a status change in history
5
- */
6
- export declare function recordStatusChange(sessionName: string, status: SessionStatus, attentionReason: AttentionReason | null, event: string | null): void;
7
- /**
8
- * Get status history for a session
9
- */
10
- export declare function getSessionHistory(sessionName: string, limit?: number): DbStatusHistory[];
11
- /**
12
- * Get recent history across all sessions
13
- */
14
- export declare function getRecentHistory(limit?: number): DbStatusHistory[];
15
- /**
16
- * Get history within a time range
17
- */
18
- export declare function getHistoryInRange(startTime: number, endTime: number): DbStatusHistory[];
19
- /**
20
- * Cleanup old history entries
21
- * Returns number of deleted entries
22
- */
23
- export declare function cleanupOldHistory(maxAge: number): number;
24
- /**
25
- * Get statistics about status history
26
- */
27
- export declare function getHistoryStats(): {
28
- totalEntries: number;
29
- oldestEntry: number | null;
30
- newestEntry: number | null;
31
- entriesByStatus: Record<string, number>;
32
- };
33
- /**
34
- * Delete all history for a session
35
- */
36
- export declare function deleteSessionHistory(sessionName: string): number;
37
- //# sourceMappingURL=history.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/db/history.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,EACrB,eAAe,EAAE,eAAe,GAAG,IAAI,EACvC,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,eAAe,EAAE,CAYrF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,SAAM,GAAG,eAAe,EAAE,CAW/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAWvF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,CAkCA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAIhE"}
@@ -1,98 +0,0 @@
1
- import { getDatabase } from './index.js';
2
- /**
3
- * Record a status change in history
4
- */
5
- export function recordStatusChange(sessionName, status, attentionReason, event) {
6
- const db = getDatabase();
7
- const now = Date.now();
8
- db.prepare(`
9
- INSERT INTO status_history (session_name, status, attention_reason, event, timestamp)
10
- VALUES (?, ?, ?, ?, ?)
11
- `).run(sessionName, status, attentionReason, event, now);
12
- }
13
- /**
14
- * Get status history for a session
15
- */
16
- export function getSessionHistory(sessionName, limit = 100) {
17
- const db = getDatabase();
18
- return db
19
- .prepare(`
20
- SELECT * FROM status_history
21
- WHERE session_name = ?
22
- ORDER BY timestamp DESC
23
- LIMIT ?
24
- `)
25
- .all(sessionName, limit);
26
- }
27
- /**
28
- * Get recent history across all sessions
29
- */
30
- export function getRecentHistory(limit = 100) {
31
- const db = getDatabase();
32
- return db
33
- .prepare(`
34
- SELECT * FROM status_history
35
- ORDER BY timestamp DESC
36
- LIMIT ?
37
- `)
38
- .all(limit);
39
- }
40
- /**
41
- * Get history within a time range
42
- */
43
- export function getHistoryInRange(startTime, endTime) {
44
- const db = getDatabase();
45
- return db
46
- .prepare(`
47
- SELECT * FROM status_history
48
- WHERE timestamp >= ? AND timestamp <= ?
49
- ORDER BY timestamp DESC
50
- `)
51
- .all(startTime, endTime);
52
- }
53
- /**
54
- * Cleanup old history entries
55
- * Returns number of deleted entries
56
- */
57
- export function cleanupOldHistory(maxAge) {
58
- const db = getDatabase();
59
- const cutoff = Date.now() - maxAge;
60
- const result = db.prepare('DELETE FROM status_history WHERE timestamp < ?').run(cutoff);
61
- if (result.changes > 0) {
62
- console.log(`[DB] Cleaned up ${result.changes} old history entries`);
63
- }
64
- return result.changes;
65
- }
66
- /**
67
- * Get statistics about status history
68
- */
69
- export function getHistoryStats() {
70
- const db = getDatabase();
71
- const total = db.prepare('SELECT COUNT(*) as count FROM status_history').get();
72
- const oldest = db.prepare('SELECT MIN(timestamp) as ts FROM status_history').get();
73
- const newest = db.prepare('SELECT MAX(timestamp) as ts FROM status_history').get();
74
- const byStatus = db
75
- .prepare(`
76
- SELECT status, COUNT(*) as count FROM status_history GROUP BY status
77
- `)
78
- .all();
79
- const entriesByStatus = {};
80
- for (const row of byStatus) {
81
- entriesByStatus[row.status] = row.count;
82
- }
83
- return {
84
- totalEntries: total.count,
85
- oldestEntry: oldest.ts,
86
- newestEntry: newest.ts,
87
- entriesByStatus,
88
- };
89
- }
90
- /**
91
- * Delete all history for a session
92
- */
93
- export function deleteSessionHistory(sessionName) {
94
- const db = getDatabase();
95
- const result = db.prepare('DELETE FROM status_history WHERE session_name = ?').run(sessionName);
96
- return result.changes;
97
- }
98
- //# sourceMappingURL=history.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/db/history.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- /**
2
- * Push subscription database operations.
3
- * Stores Web Push subscriptions for sending notifications when browser is closed.
4
- */
5
- import type webpush from 'web-push';
6
- export interface DbPushSubscription {
7
- id: number;
8
- endpoint: string;
9
- keys_p256dh: string;
10
- keys_auth: string;
11
- user_agent: string | null;
12
- created_at: number;
13
- }
14
- /**
15
- * Create the push_subscriptions table (called during migration)
16
- */
17
- export declare const CREATE_PUSH_SUBSCRIPTIONS_SQL = "\nCREATE TABLE IF NOT EXISTS push_subscriptions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n endpoint TEXT UNIQUE NOT NULL,\n keys_p256dh TEXT NOT NULL,\n keys_auth TEXT NOT NULL,\n user_agent TEXT,\n created_at INTEGER NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_push_endpoint ON push_subscriptions(endpoint);\n";
18
- /**
19
- * Save a push subscription.
20
- * Uses REPLACE to handle re-subscriptions from the same endpoint.
21
- */
22
- export declare function saveSubscription(subscription: webpush.PushSubscription, userAgent?: string): DbPushSubscription;
23
- /**
24
- * Delete a push subscription by endpoint.
25
- */
26
- export declare function deleteSubscription(endpoint: string): boolean;
27
- /**
28
- * Get all active push subscriptions.
29
- */
30
- export declare function getAllSubscriptions(): DbPushSubscription[];
31
- /**
32
- * Get subscription count.
33
- */
34
- export declare function getSubscriptionCount(): number;
35
- /**
36
- * Convert DB subscription to web-push format.
37
- */
38
- export declare function toWebPushSubscription(dbSub: DbPushSubscription): webpush.PushSubscription;
39
- /**
40
- * Delete expired/invalid subscriptions.
41
- * Called when a push fails with 404 or 410 status.
42
- */
43
- export declare function deleteInvalidSubscriptions(endpoints: string[]): number;
44
- //# sourceMappingURL=push-subscriptions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"push-subscriptions.d.ts","sourceRoot":"","sources":["../../src/db/push-subscriptions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AAEpC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,6BAA6B,qUAWzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,OAAO,CAAC,gBAAgB,EACtC,SAAS,CAAC,EAAE,MAAM,GACjB,kBAAkB,CA0BpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,kBAAkB,EAAE,CAG1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAM7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAQzF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAUtE"}
@@ -1,98 +0,0 @@
1
- /**
2
- * Push subscription database operations.
3
- * Stores Web Push subscriptions for sending notifications when browser is closed.
4
- */
5
- import { getDatabase } from './index.js';
6
- /**
7
- * Create the push_subscriptions table (called during migration)
8
- */
9
- export const CREATE_PUSH_SUBSCRIPTIONS_SQL = `
10
- CREATE TABLE IF NOT EXISTS push_subscriptions (
11
- id INTEGER PRIMARY KEY AUTOINCREMENT,
12
- endpoint TEXT UNIQUE NOT NULL,
13
- keys_p256dh TEXT NOT NULL,
14
- keys_auth TEXT NOT NULL,
15
- user_agent TEXT,
16
- created_at INTEGER NOT NULL
17
- );
18
-
19
- CREATE INDEX IF NOT EXISTS idx_push_endpoint ON push_subscriptions(endpoint);
20
- `;
21
- /**
22
- * Save a push subscription.
23
- * Uses REPLACE to handle re-subscriptions from the same endpoint.
24
- */
25
- export function saveSubscription(subscription, userAgent) {
26
- const db = getDatabase();
27
- const now = Date.now();
28
- const stmt = db.prepare(`
29
- INSERT OR REPLACE INTO push_subscriptions
30
- (endpoint, keys_p256dh, keys_auth, user_agent, created_at)
31
- VALUES (@endpoint, @p256dh, @auth, @userAgent, @createdAt)
32
- `);
33
- stmt.run({
34
- endpoint: subscription.endpoint,
35
- p256dh: subscription.keys.p256dh,
36
- auth: subscription.keys.auth,
37
- userAgent: userAgent ?? null,
38
- createdAt: now,
39
- });
40
- return {
41
- id: 0, // Not needed for return
42
- endpoint: subscription.endpoint,
43
- keys_p256dh: subscription.keys.p256dh,
44
- keys_auth: subscription.keys.auth,
45
- user_agent: userAgent ?? null,
46
- created_at: now,
47
- };
48
- }
49
- /**
50
- * Delete a push subscription by endpoint.
51
- */
52
- export function deleteSubscription(endpoint) {
53
- const db = getDatabase();
54
- const result = db.prepare('DELETE FROM push_subscriptions WHERE endpoint = ?').run(endpoint);
55
- return result.changes > 0;
56
- }
57
- /**
58
- * Get all active push subscriptions.
59
- */
60
- export function getAllSubscriptions() {
61
- const db = getDatabase();
62
- return db.prepare('SELECT * FROM push_subscriptions').all();
63
- }
64
- /**
65
- * Get subscription count.
66
- */
67
- export function getSubscriptionCount() {
68
- const db = getDatabase();
69
- const result = db.prepare('SELECT COUNT(*) as count FROM push_subscriptions').get();
70
- return result.count;
71
- }
72
- /**
73
- * Convert DB subscription to web-push format.
74
- */
75
- export function toWebPushSubscription(dbSub) {
76
- return {
77
- endpoint: dbSub.endpoint,
78
- keys: {
79
- p256dh: dbSub.keys_p256dh,
80
- auth: dbSub.keys_auth,
81
- },
82
- };
83
- }
84
- /**
85
- * Delete expired/invalid subscriptions.
86
- * Called when a push fails with 404 or 410 status.
87
- */
88
- export function deleteInvalidSubscriptions(endpoints) {
89
- if (endpoints.length === 0)
90
- return 0;
91
- const db = getDatabase();
92
- const placeholders = endpoints.map(() => '?').join(',');
93
- const result = db
94
- .prepare(`DELETE FROM push_subscriptions WHERE endpoint IN (${placeholders})`)
95
- .run(...endpoints);
96
- return result.changes;
97
- }
98
- //# sourceMappingURL=push-subscriptions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"push-subscriptions.js","sourceRoot":"","sources":["../../src/db/push-subscriptions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAYzC;;GAEG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;CAW5C,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAsC,EACtC,SAAkB;IAElB,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC;QACP,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;QAChC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI;QAC5B,SAAS,EAAE,SAAS,IAAI,IAAI;QAC5B,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,CAAC,EAAE,wBAAwB;QAC/B,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM;QACrC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI;QACjC,UAAU,EAAE,SAAS,IAAI,IAAI;QAC7B,UAAU,EAAE,GAAG;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,OAAO,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,EAA0B,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,EAEhF,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE;YACJ,MAAM,EAAE,KAAK,CAAC,WAAW;YACzB,IAAI,EAAE,KAAK,CAAC,SAAS;SACtB;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAAmB;IAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAErC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,qDAAqD,YAAY,GAAG,CAAC;SAC7E,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAErB,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -1,18 +0,0 @@
1
- import { ChildProcess } from 'child_process';
2
- import type { EditorConfig, EditorStatus } from '247-shared';
3
- interface EditorInstance {
4
- project: string;
5
- port: number;
6
- process: ChildProcess;
7
- startedAt: number;
8
- lastActivity: number;
9
- }
10
- export declare function initEditor(config: EditorConfig | undefined, basePath: string): Promise<void>;
11
- export declare function getOrStartEditor(project: string): Promise<EditorInstance>;
12
- export declare function stopEditor(project: string): boolean;
13
- export declare function getEditorStatus(project: string): EditorStatus;
14
- export declare function getAllEditors(): EditorStatus[];
15
- export declare function updateEditorActivity(project: string): void;
16
- export declare function shutdownAllEditors(): void;
17
- export {};
18
- //# sourceMappingURL=editor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAY,MAAM,eAAe,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAmBD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiBf;AA2ED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAqF/E;AAGD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUnD;AAYD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAW7D;AAGD,wBAAgB,aAAa,IAAI,YAAY,EAAE,CAE9C;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAK1D;AAkBD,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
@@ -1,222 +0,0 @@
1
- import { spawn, execSync } from 'child_process';
2
- import { createConnection } from 'net';
3
- // Active code-server instances (one per project)
4
- const editorInstances = new Map();
5
- // Port allocation tracking
6
- const usedPorts = new Set();
7
- // Default config if not provided
8
- const DEFAULT_CONFIG = {
9
- enabled: true,
10
- portRange: { start: 4680, end: 4699 },
11
- idleTimeout: 30 * 60 * 1000, // 30 minutes
12
- };
13
- let editorConfig = DEFAULT_CONFIG;
14
- let projectsBasePath = '~/Dev';
15
- // Initialize editor manager with config
16
- export async function initEditor(config, basePath) {
17
- editorConfig = config || DEFAULT_CONFIG;
18
- projectsBasePath = basePath;
19
- if (editorConfig.enabled) {
20
- // Kill any orphan code-server processes from previous runs
21
- console.log('[Editor] Cleaning up orphan code-server processes...');
22
- await killOrphanCodeServers();
23
- // Start idle cleanup interval (check every 5 minutes)
24
- setInterval(cleanupIdleEditors, 5 * 60 * 1000);
25
- console.log('[Editor] Manager initialized, idle timeout:', editorConfig.idleTimeout / 1000, 's');
26
- }
27
- }
28
- // Check if a port is actually in use by trying to connect
29
- function isPortInUse(port) {
30
- return new Promise((resolve) => {
31
- const socket = createConnection({ port, host: '127.0.0.1' });
32
- socket.setTimeout(500);
33
- socket.on('connect', () => {
34
- socket.destroy();
35
- resolve(true);
36
- });
37
- socket.on('timeout', () => {
38
- socket.destroy();
39
- resolve(false);
40
- });
41
- socket.on('error', () => {
42
- socket.destroy();
43
- resolve(false);
44
- });
45
- });
46
- }
47
- // Kill any orphan code-server processes on the port range
48
- async function killOrphanCodeServers() {
49
- try {
50
- // Find code-server processes listening on our port range
51
- const result = execSync(`lsof -i :${editorConfig.portRange.start}-${editorConfig.portRange.end} -t 2>/dev/null || true`, { encoding: 'utf8' }).trim();
52
- if (result) {
53
- const pids = result.split('\n').filter(Boolean);
54
- for (const pid of pids) {
55
- try {
56
- console.log(`[Editor] Killing orphan process on port range: PID ${pid}`);
57
- process.kill(parseInt(pid), 'SIGTERM');
58
- }
59
- catch {
60
- // Process may have already exited
61
- }
62
- }
63
- // Wait a bit for processes to terminate
64
- await new Promise((resolve) => setTimeout(resolve, 500));
65
- }
66
- }
67
- catch {
68
- // lsof may not be available or no processes found
69
- }
70
- }
71
- // Allocate next available port from range (checks actual usage)
72
- async function allocatePort() {
73
- for (let port = editorConfig.portRange.start; port <= editorConfig.portRange.end; port++) {
74
- if (!usedPorts.has(port)) {
75
- // Double-check the port is actually free
76
- const inUse = await isPortInUse(port);
77
- if (!inUse) {
78
- usedPorts.add(port);
79
- return port;
80
- }
81
- else {
82
- console.log(`[Editor] Port ${port} is in use by another process, skipping`);
83
- }
84
- }
85
- }
86
- return null;
87
- }
88
- // Release port back to pool
89
- function releasePort(port) {
90
- usedPorts.delete(port);
91
- }
92
- // Get or start code-server for a project
93
- export async function getOrStartEditor(project) {
94
- // Check if already running
95
- const existing = editorInstances.get(project);
96
- if (existing) {
97
- existing.lastActivity = Date.now();
98
- return existing;
99
- }
100
- // Allocate port (checks actual port availability)
101
- const port = await allocatePort();
102
- if (!port) {
103
- throw new Error('No available ports for code-server');
104
- }
105
- // Resolve project path
106
- const projectPath = `${projectsBasePath}/${project}`.replace('~', process.env.HOME);
107
- console.log(`[Editor] Starting code-server for ${project} on port ${port}`);
108
- // Spawn code-server process with extended PATH for Homebrew
109
- const env = {
110
- ...process.env,
111
- PATH: `/opt/homebrew/bin:/usr/local/bin:${process.env.PATH}`,
112
- };
113
- const codeServer = spawn('code-server', [
114
- '--bind-addr',
115
- `127.0.0.1:${port}`,
116
- '--auth',
117
- 'none',
118
- '--disable-telemetry',
119
- '--disable-update-check',
120
- '--disable-proxy',
121
- projectPath,
122
- ], {
123
- stdio: ['ignore', 'pipe', 'pipe'],
124
- detached: false,
125
- env,
126
- });
127
- const instance = {
128
- project,
129
- port,
130
- process: codeServer,
131
- startedAt: Date.now(),
132
- lastActivity: Date.now(),
133
- };
134
- // Handle process events
135
- codeServer.on('error', (err) => {
136
- console.error(`[Editor] code-server error for ${project}:`, err);
137
- cleanupInstance(project);
138
- });
139
- codeServer.on('exit', (code) => {
140
- console.log(`[Editor] code-server for ${project} exited with code ${code}`);
141
- cleanupInstance(project);
142
- });
143
- // Log output for debugging
144
- codeServer.stdout?.on('data', (data) => {
145
- const msg = data.toString().trim();
146
- if (msg.includes('HTTP server listening')) {
147
- console.log(`[Editor] code-server ready for ${project} at http://127.0.0.1:${port}`);
148
- }
149
- });
150
- codeServer.stderr?.on('data', (data) => {
151
- const msg = data.toString().trim();
152
- // Filter out noisy messages
153
- if (!msg.includes('libva error') && !msg.includes('GLIBCXX')) {
154
- console.error(`[Editor] ${project}:`, msg);
155
- }
156
- });
157
- editorInstances.set(project, instance);
158
- // Wait for code-server to be ready (simple delay for now)
159
- await new Promise((resolve) => setTimeout(resolve, 2000));
160
- return instance;
161
- }
162
- // Stop code-server for a project
163
- export function stopEditor(project) {
164
- const instance = editorInstances.get(project);
165
- if (!instance) {
166
- return false;
167
- }
168
- console.log(`[Editor] Stopping code-server for ${project}`);
169
- instance.process.kill('SIGTERM');
170
- cleanupInstance(project);
171
- return true;
172
- }
173
- // Cleanup instance resources
174
- function cleanupInstance(project) {
175
- const instance = editorInstances.get(project);
176
- if (instance) {
177
- releasePort(instance.port);
178
- editorInstances.delete(project);
179
- }
180
- }
181
- // Get status of editor for a project
182
- export function getEditorStatus(project) {
183
- const instance = editorInstances.get(project);
184
- return {
185
- project,
186
- running: !!instance,
187
- port: instance?.port,
188
- pid: instance?.process.pid,
189
- startedAt: instance?.startedAt,
190
- lastActivity: instance?.lastActivity,
191
- };
192
- }
193
- // Get all running editors
194
- export function getAllEditors() {
195
- return Array.from(editorInstances.keys()).map(getEditorStatus);
196
- }
197
- // Update last activity timestamp (called when proxy forwards requests)
198
- export function updateEditorActivity(project) {
199
- const instance = editorInstances.get(project);
200
- if (instance) {
201
- instance.lastActivity = Date.now();
202
- }
203
- }
204
- // Cleanup idle editors (called periodically)
205
- function cleanupIdleEditors() {
206
- const now = Date.now();
207
- for (const [project, instance] of editorInstances) {
208
- const idleTime = now - instance.lastActivity;
209
- if (idleTime > editorConfig.idleTimeout) {
210
- console.log(`[Editor] Stopping idle code-server for ${project} (idle ${Math.round(idleTime / 1000)}s)`);
211
- stopEditor(project);
212
- }
213
- }
214
- }
215
- // Graceful shutdown - stop all editors
216
- export function shutdownAllEditors() {
217
- console.log(`[Editor] Shutting down ${editorInstances.size} code-server instances`);
218
- for (const project of editorInstances.keys()) {
219
- stopEditor(project);
220
- }
221
- }
222
- //# sourceMappingURL=editor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editor.js","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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"}
@@ -1,59 +0,0 @@
1
- import type { Environment, EnvironmentMetadata, EnvironmentProvider, CreateEnvironmentRequest, UpdateEnvironmentRequest } from '247-shared';
2
- /**
3
- * Load environments from disk
4
- */
5
- export declare function loadEnvironments(): void;
6
- /**
7
- * Get all environments (full data, agent-side only)
8
- */
9
- export declare function getAllEnvironments(): Environment[];
10
- /**
11
- * Get all environments as safe metadata (for dashboard)
12
- */
13
- export declare function getEnvironmentsMetadata(): EnvironmentMetadata[];
14
- /**
15
- * Get single environment by ID (full data)
16
- */
17
- export declare function getEnvironment(id: string): Environment | undefined;
18
- /**
19
- * Get single environment metadata
20
- */
21
- export declare function getEnvironmentMetadata(id: string): EnvironmentMetadata | undefined;
22
- /**
23
- * Get default environment
24
- */
25
- export declare function getDefaultEnvironment(): Environment | undefined;
26
- /**
27
- * Create new environment
28
- */
29
- export declare function createEnvironment(req: CreateEnvironmentRequest): Environment;
30
- /**
31
- * Update environment
32
- */
33
- export declare function updateEnvironment(id: string, req: UpdateEnvironmentRequest): Environment | null;
34
- /**
35
- * Delete environment
36
- */
37
- export declare function deleteEnvironment(id: string): boolean;
38
- /**
39
- * Get environment variables for terminal injection
40
- * Returns the variables for the specified environment, or default if not found
41
- */
42
- export declare function getEnvironmentVariables(environmentId?: string): Record<string, string>;
43
- /**
44
- * Track which environment a session uses
45
- */
46
- export declare function setSessionEnvironment(sessionName: string, environmentId: string): void;
47
- /**
48
- * Get the environment ID for a session
49
- */
50
- export declare function getSessionEnvironment(sessionName: string): string | undefined;
51
- /**
52
- * Clear session environment tracking (when session is killed)
53
- */
54
- export declare function clearSessionEnvironment(sessionName: string): void;
55
- /**
56
- * Create environment from preset
57
- */
58
- export declare function createEnvironmentFromPreset(provider: EnvironmentProvider, name: string, customVariables?: Record<string, string>): Environment;
59
- //# sourceMappingURL=environments.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"environments.d.ts","sourceRoot":"","sources":["../src/environments.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAepB;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAkCvC;AA8BD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,EAAE,CAElD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,mBAAmB,EAAE,CAE/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAIlF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,GAAG,SAAS,CAE/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,wBAAwB,GAAG,WAAW,CA2B5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,wBAAwB,GAAG,WAAW,GAAG,IAAI,CA4B/F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAiBrD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAatF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAEtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,MAAM,EACZ,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,WAAW,CAUb"}