aicodeman 1.33.0 → 1.33.2

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 (177) hide show
  1. package/README.md +4 -0
  2. package/README.zh-CN.md +4 -0
  3. package/dist/config/cli-registry/schema.d.ts +1 -0
  4. package/dist/config/cli-registry/schema.d.ts.map +1 -1
  5. package/dist/config/cli-registry/schema.js +6 -0
  6. package/dist/config/cli-registry/schema.js.map +1 -1
  7. package/dist/config/cli-registry/stock.d.ts.map +1 -1
  8. package/dist/config/cli-registry/stock.js +20 -1
  9. package/dist/config/cli-registry/stock.js.map +1 -1
  10. package/dist/config/cli-registry/types.d.ts +13 -0
  11. package/dist/config/cli-registry/types.d.ts.map +1 -1
  12. package/dist/config/server-timing.d.ts +7 -0
  13. package/dist/config/server-timing.d.ts.map +1 -1
  14. package/dist/config/server-timing.js +7 -0
  15. package/dist/config/server-timing.js.map +1 -1
  16. package/dist/cron/cron-service.d.ts +20 -0
  17. package/dist/cron/cron-service.d.ts.map +1 -1
  18. package/dist/cron/cron-service.js +31 -10
  19. package/dist/cron/cron-service.js.map +1 -1
  20. package/dist/docker-hosts.d.ts +11 -0
  21. package/dist/docker-hosts.d.ts.map +1 -1
  22. package/dist/docker-hosts.js +30 -2
  23. package/dist/docker-hosts.js.map +1 -1
  24. package/dist/mux-interface.d.ts +7 -0
  25. package/dist/mux-interface.d.ts.map +1 -1
  26. package/dist/pane-exit-sweep.d.ts +77 -0
  27. package/dist/pane-exit-sweep.d.ts.map +1 -0
  28. package/dist/pane-exit-sweep.js +46 -0
  29. package/dist/pane-exit-sweep.js.map +1 -0
  30. package/dist/reboot-restore.d.ts +17 -14
  31. package/dist/reboot-restore.d.ts.map +1 -1
  32. package/dist/reboot-restore.js +25 -13
  33. package/dist/reboot-restore.js.map +1 -1
  34. package/dist/session-activity.d.ts +29 -0
  35. package/dist/session-activity.d.ts.map +1 -1
  36. package/dist/session-activity.js +56 -0
  37. package/dist/session-activity.js.map +1 -1
  38. package/dist/session.d.ts +57 -0
  39. package/dist/session.d.ts.map +1 -1
  40. package/dist/session.js +98 -2
  41. package/dist/session.js.map +1 -1
  42. package/dist/tmux-manager.d.ts +10 -0
  43. package/dist/tmux-manager.d.ts.map +1 -1
  44. package/dist/tmux-manager.js +13 -1
  45. package/dist/tmux-manager.js.map +1 -1
  46. package/dist/types/session.d.ts +7 -6
  47. package/dist/types/session.d.ts.map +1 -1
  48. package/dist/types/session.js.map +1 -1
  49. package/dist/web/paste-image-gc.d.ts +36 -0
  50. package/dist/web/paste-image-gc.d.ts.map +1 -1
  51. package/dist/web/paste-image-gc.js +57 -1
  52. package/dist/web/paste-image-gc.js.map +1 -1
  53. package/dist/web/public/admin-ui.js.gz +0 -0
  54. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  55. package/dist/web/public/{app.3ea688d2.js → app.91131d2c.js} +10 -10
  56. package/dist/web/public/app.91131d2c.js.br +0 -0
  57. package/dist/web/public/app.91131d2c.js.gz +0 -0
  58. package/dist/web/public/approvals-ui.js.gz +0 -0
  59. package/dist/web/public/{constants.dee9dcc7.js → constants.cc927eb8.js} +48 -0
  60. package/dist/web/public/constants.cc927eb8.js.br +0 -0
  61. package/dist/web/public/constants.cc927eb8.js.gz +0 -0
  62. package/dist/web/public/cron-ui.js.gz +0 -0
  63. package/dist/web/public/entrance-animations.js.gz +0 -0
  64. package/dist/web/public/home-sessions.js +11 -5
  65. package/dist/web/public/home-sessions.js.br +0 -0
  66. package/dist/web/public/home-sessions.js.gz +0 -0
  67. package/dist/web/public/host-wake-ui.js.gz +0 -0
  68. package/dist/web/public/i18n.f094d01f.js +1 -0
  69. package/dist/web/public/i18n.f094d01f.js.br +0 -0
  70. package/dist/web/public/i18n.f094d01f.js.gz +0 -0
  71. package/dist/web/public/image-input.a216cf9e.js.gz +0 -0
  72. package/dist/web/public/index.html +15 -9
  73. package/dist/web/public/index.html.br +0 -0
  74. package/dist/web/public/index.html.gz +0 -0
  75. package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
  76. package/dist/web/public/keyboard-accessory.c1e7c7b7.js.gz +0 -0
  77. package/dist/web/public/mobile-handlers.23a85db1.js.gz +0 -0
  78. package/dist/web/public/mobile-overview.js +40 -5
  79. package/dist/web/public/mobile-overview.js.br +0 -0
  80. package/dist/web/public/mobile-overview.js.gz +0 -0
  81. package/dist/web/public/mobile.1aa4952d.css +1 -0
  82. package/dist/web/public/mobile.1aa4952d.css.br +0 -0
  83. package/dist/web/public/mobile.1aa4952d.css.gz +0 -0
  84. package/dist/web/public/notification-manager.50bb87d8.js.gz +0 -0
  85. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  86. package/dist/web/public/panels-ui.67646701.js.gz +0 -0
  87. package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
  88. package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
  89. package/dist/web/public/readmymind-ui.js.gz +0 -0
  90. package/dist/web/public/reboot-restore-ui.js.gz +0 -0
  91. package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
  92. package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
  93. package/dist/web/public/session-lineage.js.gz +0 -0
  94. package/dist/web/public/{session-ui.acc0aa26.js → session-ui.7575a231.js} +39 -38
  95. package/dist/web/public/session-ui.7575a231.js.br +0 -0
  96. package/dist/web/public/session-ui.7575a231.js.gz +0 -0
  97. package/dist/web/public/settings-ui.c68e7f59.js.gz +0 -0
  98. package/dist/web/public/styles.3fe3312d.css +1 -0
  99. package/dist/web/public/styles.3fe3312d.css.br +0 -0
  100. package/dist/web/public/styles.3fe3312d.css.gz +0 -0
  101. package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
  102. package/dist/web/public/sw.js +2 -2
  103. package/dist/web/public/sw.js.br +0 -0
  104. package/dist/web/public/sw.js.gz +0 -0
  105. package/dist/web/public/tab-rail-resize.dcdc5772.js.gz +0 -0
  106. package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js.gz +0 -0
  107. package/dist/web/public/terminal-split.js.gz +0 -0
  108. package/dist/web/public/{terminal-ui.baf7c9c6.js → terminal-ui.d5223c0e.js} +2 -2
  109. package/dist/web/public/terminal-ui.d5223c0e.js.br +0 -0
  110. package/dist/web/public/terminal-ui.d5223c0e.js.gz +0 -0
  111. package/dist/web/public/ultracode-panel.js.gz +0 -0
  112. package/dist/web/public/ultracode-windows.js.gz +0 -0
  113. package/dist/web/public/upload.html.gz +0 -0
  114. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  115. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  116. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  117. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  118. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  119. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  120. package/dist/web/public/vendor/xterm-predictive-echo.bd6882b8.js.gz +0 -0
  121. package/dist/web/public/vendor/xterm-zerolag-input.6fee72f2.js.gz +0 -0
  122. package/dist/web/public/vendor/xterm.css.gz +0 -0
  123. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  124. package/dist/web/public/voice-input.c4b51eb6.js.gz +0 -0
  125. package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
  126. package/dist/web/public/webview-tabs.js.gz +0 -0
  127. package/dist/web/route-helpers.d.ts +16 -0
  128. package/dist/web/route-helpers.d.ts.map +1 -1
  129. package/dist/web/route-helpers.js +19 -0
  130. package/dist/web/route-helpers.js.map +1 -1
  131. package/dist/web/routes/cli-registry-routes.d.ts +3 -1
  132. package/dist/web/routes/cli-registry-routes.d.ts.map +1 -1
  133. package/dist/web/routes/cli-registry-routes.js +10 -1
  134. package/dist/web/routes/cli-registry-routes.js.map +1 -1
  135. package/dist/web/routes/session-routes.d.ts.map +1 -1
  136. package/dist/web/routes/session-routes.js +21 -2
  137. package/dist/web/routes/session-routes.js.map +1 -1
  138. package/dist/web/routes/webview-routes.d.ts.map +1 -1
  139. package/dist/web/routes/webview-routes.js +15 -3
  140. package/dist/web/routes/webview-routes.js.map +1 -1
  141. package/dist/web/routes/ws-routes.d.ts.map +1 -1
  142. package/dist/web/routes/ws-routes.js +9 -1
  143. package/dist/web/routes/ws-routes.js.map +1 -1
  144. package/dist/web/schemas.d.ts.map +1 -1
  145. package/dist/web/schemas.js +5 -1
  146. package/dist/web/schemas.js.map +1 -1
  147. package/dist/web/server.d.ts +37 -0
  148. package/dist/web/server.d.ts.map +1 -1
  149. package/dist/web/server.js +107 -3
  150. package/dist/web/server.js.map +1 -1
  151. package/dist/web/sse-events.d.ts +4 -2
  152. package/dist/web/sse-events.d.ts.map +1 -1
  153. package/dist/web/sse-events.js +4 -2
  154. package/dist/web/sse-events.js.map +1 -1
  155. package/dist/web/webview-sse.d.ts +4 -0
  156. package/dist/web/webview-sse.d.ts.map +1 -0
  157. package/dist/web/webview-sse.js +4 -0
  158. package/dist/web/webview-sse.js.map +1 -0
  159. package/package.json +2 -1
  160. package/scripts/postinstall.js +16 -4
  161. package/dist/web/public/app.3ea688d2.js.br +0 -0
  162. package/dist/web/public/app.3ea688d2.js.gz +0 -0
  163. package/dist/web/public/constants.dee9dcc7.js.br +0 -0
  164. package/dist/web/public/constants.dee9dcc7.js.gz +0 -0
  165. package/dist/web/public/i18n.600dab6c.js +0 -1
  166. package/dist/web/public/i18n.600dab6c.js.br +0 -0
  167. package/dist/web/public/i18n.600dab6c.js.gz +0 -0
  168. package/dist/web/public/mobile.eeadfbbe.css +0 -1
  169. package/dist/web/public/mobile.eeadfbbe.css.br +0 -0
  170. package/dist/web/public/mobile.eeadfbbe.css.gz +0 -0
  171. package/dist/web/public/session-ui.acc0aa26.js.br +0 -0
  172. package/dist/web/public/session-ui.acc0aa26.js.gz +0 -0
  173. package/dist/web/public/styles.340f073e.css +0 -1
  174. package/dist/web/public/styles.340f073e.css.br +0 -0
  175. package/dist/web/public/styles.340f073e.css.gz +0 -0
  176. package/dist/web/public/terminal-ui.baf7c9c6.js.br +0 -0
  177. package/dist/web/public/terminal-ui.baf7c9c6.js.gz +0 -0
@@ -12,7 +12,8 @@
12
12
  * image dir.
13
13
  */
14
14
  import fs from 'node:fs/promises';
15
- import { join } from 'node:path';
15
+ import { realpathSync } from 'node:fs';
16
+ import { join, resolve } from 'node:path';
16
17
  const MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
17
18
  const SWEEP_INTERVAL_MS = 60 * 60 * 1000; // 1 hour
18
19
  const INITIAL_DELAY_MS = 30 * 1000; // 30s after startup
@@ -50,6 +51,61 @@ export async function sweepPasteImagesOnce(ctx, now = Date.now()) {
50
51
  }
51
52
  return { scanned, deleted };
52
53
  }
54
+ /**
55
+ * The path two sessions must share to share a paste-image dir: the canonical
56
+ * path when it can be resolved, so a sibling that reaches the same directory
57
+ * through a symlink matches, and the normalised path otherwise (a directory
58
+ * that no longer exists has nothing left to protect).
59
+ */
60
+ function canonicalDir(dir) {
61
+ try {
62
+ return realpathSync(dir);
63
+ }
64
+ catch {
65
+ return resolve(dir);
66
+ }
67
+ }
68
+ /**
69
+ * Does another live session still use this working directory's paste-image
70
+ * dir? Deleting a session removes `{workingDir}/.claude-images` recursively,
71
+ * and several sessions routinely share one case directory, so without this
72
+ * check closing one session deletes the pasted images a sibling in the same
73
+ * case still refers to.
74
+ *
75
+ * Two kinds of sibling count as live:
76
+ *
77
+ * - a session in the server's map, unless it is itself being killed;
78
+ * - a persisted record whose status is not `stopped`. That covers a session
79
+ * detached with `killMux=false`, which leaves the server's map while its
80
+ * tmux pane keeps running, and a session whose detach is still in progress.
81
+ *
82
+ * A session being KILLED does not count. Without that exemption, killing two
83
+ * sessions of one case concurrently (a bulk delete, or the exited-agent sweep
84
+ * closing two panes on one tick) would have each defer to the other, and
85
+ * neither would remove the dir.
86
+ *
87
+ * Erring toward "in use" only costs a missed deletion, which the periodic
88
+ * sweep above ages out. A pinned record whose tmux session is gone keeps its
89
+ * status through boot pruning, so it holds the dir this way until unpinned.
90
+ */
91
+ export function pasteImageDirInUseByOtherSession(input) {
92
+ const target = canonicalDir(input.workingDir);
93
+ const matches = (user) => user.id !== input.closingId &&
94
+ !input.killing.has(user.id) &&
95
+ !!user.workingDir &&
96
+ canonicalDir(user.workingDir) === target;
97
+ for (const user of input.live) {
98
+ if (matches(user))
99
+ return true;
100
+ }
101
+ for (const user of input.persisted) {
102
+ if (user.status === 'stopped')
103
+ continue;
104
+ if (matches(user))
105
+ return true;
106
+ }
107
+ return false;
108
+ }
53
109
  export function startPasteImageGc(ctx) {
54
110
  const initial = setTimeout(() => {
55
111
  void sweepPasteImagesOnce(ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"paste-image-gc.js","sourceRoot":"","sources":["../../src/web/paste-image-gc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AACrD,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AACnD,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,oBAAoB;AAExD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAkC,EAClC,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC;IAChC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACvD,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,6BAA6B;QACzC,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACzC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;oBAAE,SAAS;gBAC3B,IAAI,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;oBACxB,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACnB,OAAO,IAAI,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAkC;IAClE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;QAC9B,KAAK,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,KAAK,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACtB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IACzD,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,UAAU;QAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC3D,OAAO,GAAS,EAAE;QAChB,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"paste-image-gc.js","sourceRoot":"","sources":["../../src/web/paste-image-gc.ts"],"names":[],"mappings":"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"}
Binary file