aimux-cli 0.1.15 → 0.1.18

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 (299) hide show
  1. package/README.md +184 -67
  2. package/bin/aimux-dev +10 -0
  3. package/dist/alert-display.d.ts +21 -0
  4. package/dist/alert-display.js +86 -0
  5. package/dist/alert-display.js.map +1 -0
  6. package/dist/attachment-store.d.ts +0 -7
  7. package/dist/attachment-store.js +2 -86
  8. package/dist/attachment-store.js.map +1 -1
  9. package/dist/builtin-metadata-watchers.js +4 -4
  10. package/dist/builtin-metadata-watchers.js.map +1 -1
  11. package/dist/claude-hooks.d.ts +1 -0
  12. package/dist/claude-hooks.js +25 -0
  13. package/dist/claude-hooks.js.map +1 -1
  14. package/dist/config.d.ts +19 -13
  15. package/dist/config.js +28 -14
  16. package/dist/config.js.map +1 -1
  17. package/dist/connection-targets.d.ts +8 -0
  18. package/dist/connection-targets.js +28 -0
  19. package/dist/connection-targets.js.map +1 -0
  20. package/dist/credentials.d.ts +12 -0
  21. package/dist/credentials.js +49 -0
  22. package/dist/credentials.js.map +1 -0
  23. package/dist/daemon.d.ts +23 -0
  24. package/dist/daemon.js +391 -66
  25. package/dist/daemon.js.map +1 -1
  26. package/dist/dashboard/index.d.ts +13 -10
  27. package/dist/dashboard/index.js +3 -26
  28. package/dist/dashboard/index.js.map +1 -1
  29. package/dist/dashboard/order.d.ts +22 -0
  30. package/dist/dashboard/order.js +55 -0
  31. package/dist/dashboard/order.js.map +1 -0
  32. package/dist/dashboard/pending-actions.d.ts +39 -10
  33. package/dist/dashboard/pending-actions.js +166 -36
  34. package/dist/dashboard/pending-actions.js.map +1 -1
  35. package/dist/dashboard/quick-jump.d.ts +2 -1
  36. package/dist/dashboard/quick-jump.js +7 -4
  37. package/dist/dashboard/quick-jump.js.map +1 -1
  38. package/dist/dashboard/session-actions.d.ts +4 -4
  39. package/dist/dashboard/session-actions.js +1 -1
  40. package/dist/dashboard/session-actions.js.map +1 -1
  41. package/dist/dashboard/session-registry.d.ts +4 -3
  42. package/dist/dashboard/session-registry.js +16 -50
  43. package/dist/dashboard/session-registry.js.map +1 -1
  44. package/dist/dashboard/state.d.ts +1 -1
  45. package/dist/dashboard/state.js.map +1 -1
  46. package/dist/dashboard/ui-state-store.d.ts +16 -1
  47. package/dist/dashboard/ui-state-store.js +73 -2
  48. package/dist/dashboard/ui-state-store.js.map +1 -1
  49. package/dist/debug-state.d.ts +97 -0
  50. package/dist/debug-state.js +541 -0
  51. package/dist/debug-state.js.map +1 -0
  52. package/dist/debug.d.ts +38 -0
  53. package/dist/debug.js +219 -15
  54. package/dist/debug.js.map +1 -1
  55. package/dist/default-plugins/gh-pr-context.d.ts +2 -1
  56. package/dist/default-plugins/gh-pr-context.js +17 -11
  57. package/dist/default-plugins/gh-pr-context.js.map +1 -1
  58. package/dist/default-plugins/transcript-length.js +15 -2
  59. package/dist/default-plugins/transcript-length.js.map +1 -1
  60. package/dist/fast-control.js +37 -19
  61. package/dist/fast-control.js.map +1 -1
  62. package/dist/http-client.js +31 -2
  63. package/dist/http-client.js.map +1 -1
  64. package/dist/local-ui-server.d.ts +22 -0
  65. package/dist/local-ui-server.js +186 -0
  66. package/dist/local-ui-server.js.map +1 -0
  67. package/dist/login-flow.d.ts +7 -0
  68. package/dist/login-flow.js +120 -0
  69. package/dist/login-flow.js.map +1 -0
  70. package/dist/main.js +824 -152
  71. package/dist/main.js.map +1 -1
  72. package/dist/managed-launch-env.js +14 -0
  73. package/dist/managed-launch-env.js.map +1 -1
  74. package/dist/metadata-server.d.ts +36 -36
  75. package/dist/metadata-server.js +638 -137
  76. package/dist/metadata-server.js.map +1 -1
  77. package/dist/metadata-store.d.ts +4 -1
  78. package/dist/metadata-store.js +30 -2
  79. package/dist/metadata-store.js.map +1 -1
  80. package/dist/multiplexer/agent-io-methods.d.ts +2 -10
  81. package/dist/multiplexer/agent-io-methods.js +12 -43
  82. package/dist/multiplexer/agent-io-methods.js.map +1 -1
  83. package/dist/multiplexer/archives.js +8 -9
  84. package/dist/multiplexer/archives.js.map +1 -1
  85. package/dist/multiplexer/dashboard-control.js +45 -13
  86. package/dist/multiplexer/dashboard-control.js.map +1 -1
  87. package/dist/multiplexer/dashboard-interaction.d.ts +8 -2
  88. package/dist/multiplexer/dashboard-interaction.js +187 -28
  89. package/dist/multiplexer/dashboard-interaction.js.map +1 -1
  90. package/dist/multiplexer/dashboard-model.d.ts +10 -3
  91. package/dist/multiplexer/dashboard-model.js +417 -35
  92. package/dist/multiplexer/dashboard-model.js.map +1 -1
  93. package/dist/multiplexer/dashboard-ops.d.ts +9 -7
  94. package/dist/multiplexer/dashboard-ops.js +178 -68
  95. package/dist/multiplexer/dashboard-ops.js.map +1 -1
  96. package/dist/multiplexer/dashboard-state-methods.d.ts +2 -1
  97. package/dist/multiplexer/dashboard-state-methods.js +3 -2
  98. package/dist/multiplexer/dashboard-state-methods.js.map +1 -1
  99. package/dist/multiplexer/dashboard-tail-methods.d.ts +22 -10
  100. package/dist/multiplexer/dashboard-tail-methods.js +164 -47
  101. package/dist/multiplexer/dashboard-tail-methods.js.map +1 -1
  102. package/dist/multiplexer/dashboard-view-methods.d.ts +1 -1
  103. package/dist/multiplexer/dashboard-view-methods.js +23 -8
  104. package/dist/multiplexer/dashboard-view-methods.js.map +1 -1
  105. package/dist/multiplexer/graveyard-view-model.d.ts +9 -1
  106. package/dist/multiplexer/graveyard-view-model.js +39 -0
  107. package/dist/multiplexer/graveyard-view-model.js.map +1 -1
  108. package/dist/multiplexer/index.d.ts +15 -12
  109. package/dist/multiplexer/index.js +64 -43
  110. package/dist/multiplexer/index.js.map +1 -1
  111. package/dist/multiplexer/notifications.js +107 -24
  112. package/dist/multiplexer/notifications.js.map +1 -1
  113. package/dist/multiplexer/persistence-methods.d.ts +31 -4
  114. package/dist/multiplexer/persistence-methods.js +304 -308
  115. package/dist/multiplexer/persistence-methods.js.map +1 -1
  116. package/dist/multiplexer/runtime-lifecycle-methods.d.ts +8 -10
  117. package/dist/multiplexer/runtime-lifecycle-methods.js +104 -86
  118. package/dist/multiplexer/runtime-lifecycle-methods.js.map +1 -1
  119. package/dist/multiplexer/runtime-state.d.ts +8 -10
  120. package/dist/multiplexer/runtime-state.js +82 -145
  121. package/dist/multiplexer/runtime-state.js.map +1 -1
  122. package/dist/multiplexer/runtime-sync.d.ts +2 -10
  123. package/dist/multiplexer/runtime-sync.js +3 -18
  124. package/dist/multiplexer/runtime-sync.js.map +1 -1
  125. package/dist/multiplexer/service-state-snapshot.d.ts +2 -4
  126. package/dist/multiplexer/service-state-snapshot.js +4 -51
  127. package/dist/multiplexer/service-state-snapshot.js.map +1 -1
  128. package/dist/multiplexer/services.d.ts +1 -0
  129. package/dist/multiplexer/services.js +55 -5
  130. package/dist/multiplexer/services.js.map +1 -1
  131. package/dist/multiplexer/session-capture.d.ts +1 -0
  132. package/dist/multiplexer/session-capture.js +24 -0
  133. package/dist/multiplexer/session-capture.js.map +1 -0
  134. package/dist/multiplexer/session-launch.d.ts +4 -1
  135. package/dist/multiplexer/session-launch.js +152 -63
  136. package/dist/multiplexer/session-launch.js.map +1 -1
  137. package/dist/multiplexer/session-runtime-core.d.ts +8 -20
  138. package/dist/multiplexer/session-runtime-core.js +40 -135
  139. package/dist/multiplexer/session-runtime-core.js.map +1 -1
  140. package/dist/multiplexer/subscreens.js +10 -3
  141. package/dist/multiplexer/subscreens.js.map +1 -1
  142. package/dist/multiplexer/worktree-graveyard.d.ts +0 -1
  143. package/dist/multiplexer/worktree-graveyard.js +15 -16
  144. package/dist/multiplexer/worktree-graveyard.js.map +1 -1
  145. package/dist/multiplexer/worktrees.js +96 -40
  146. package/dist/multiplexer/worktrees.js.map +1 -1
  147. package/dist/notification-context.js +8 -4
  148. package/dist/notification-context.js.map +1 -1
  149. package/dist/notifications.js +163 -101
  150. package/dist/notifications.js.map +1 -1
  151. package/dist/notify.d.ts +4 -0
  152. package/dist/notify.js +14 -0
  153. package/dist/notify.js.map +1 -1
  154. package/dist/paths.d.ts +32 -7
  155. package/dist/paths.js +82 -58
  156. package/dist/paths.js.map +1 -1
  157. package/dist/pending-actions.d.ts +5 -0
  158. package/dist/pending-actions.js +14 -0
  159. package/dist/pending-actions.js.map +1 -0
  160. package/dist/plugin-runtime.js +9 -2
  161. package/dist/plugin-runtime.js.map +1 -1
  162. package/dist/project-events.d.ts +1 -10
  163. package/dist/project-events.js +0 -10
  164. package/dist/project-events.js.map +1 -1
  165. package/dist/project-scanner.d.ts +2 -3
  166. package/dist/project-scanner.js +58 -129
  167. package/dist/project-scanner.js.map +1 -1
  168. package/dist/project-service-manifest.d.ts +1 -3
  169. package/dist/project-service-manifest.js +1 -3
  170. package/dist/project-service-manifest.js.map +1 -1
  171. package/dist/relay-client.d.ts +30 -0
  172. package/dist/relay-client.js +191 -0
  173. package/dist/relay-client.js.map +1 -0
  174. package/dist/remote-access.d.ts +16 -0
  175. package/dist/remote-access.js +91 -0
  176. package/dist/remote-access.js.map +1 -0
  177. package/dist/runtime-core/exchange-derived.d.ts +2 -0
  178. package/dist/runtime-core/exchange-derived.js +154 -0
  179. package/dist/runtime-core/exchange-derived.js.map +1 -0
  180. package/dist/runtime-core/exchange-import.d.ts +24 -0
  181. package/dist/runtime-core/exchange-import.js +318 -0
  182. package/dist/runtime-core/exchange-import.js.map +1 -0
  183. package/dist/runtime-core/exchange-store.d.ts +157 -0
  184. package/dist/runtime-core/exchange-store.js +453 -0
  185. package/dist/runtime-core/exchange-store.js.map +1 -0
  186. package/dist/runtime-core/topology-services.d.ts +38 -0
  187. package/dist/runtime-core/topology-services.js +171 -0
  188. package/dist/runtime-core/topology-services.js.map +1 -0
  189. package/dist/runtime-core/topology-sessions.d.ts +52 -0
  190. package/dist/runtime-core/topology-sessions.js +239 -0
  191. package/dist/runtime-core/topology-sessions.js.map +1 -0
  192. package/dist/runtime-core/topology-store.d.ts +171 -0
  193. package/dist/runtime-core/topology-store.js +420 -0
  194. package/dist/runtime-core/topology-store.js.map +1 -0
  195. package/dist/runtime-core/topology-worktrees.d.ts +60 -0
  196. package/dist/runtime-core/topology-worktrees.js +200 -0
  197. package/dist/runtime-core/topology-worktrees.js.map +1 -0
  198. package/dist/runtime-migration.d.ts +69 -0
  199. package/dist/runtime-migration.js +399 -0
  200. package/dist/runtime-migration.js.map +1 -0
  201. package/dist/session-bootstrap.d.ts +8 -6
  202. package/dist/session-bootstrap.js +51 -158
  203. package/dist/session-bootstrap.js.map +1 -1
  204. package/dist/session-runtime.d.ts +2 -0
  205. package/dist/session-runtime.js +1 -0
  206. package/dist/session-runtime.js.map +1 -1
  207. package/dist/session-semantics.d.ts +12 -4
  208. package/dist/session-semantics.js +14 -0
  209. package/dist/session-semantics.js.map +1 -1
  210. package/dist/shell-hooks.js +32 -10
  211. package/dist/shell-hooks.js.map +1 -1
  212. package/dist/shell-state.d.ts +2 -0
  213. package/dist/shell-state.js +26 -1
  214. package/dist/shell-state.js.map +1 -1
  215. package/dist/statusline-model.d.ts +10 -2
  216. package/dist/statusline-model.js +106 -30
  217. package/dist/statusline-model.js.map +1 -1
  218. package/dist/task-workflow.d.ts +6 -9
  219. package/dist/task-workflow.js +37 -84
  220. package/dist/task-workflow.js.map +1 -1
  221. package/dist/tasks.d.ts +6 -33
  222. package/dist/tasks.js +46 -88
  223. package/dist/tasks.js.map +1 -1
  224. package/dist/team.d.ts +29 -0
  225. package/dist/team.js +40 -0
  226. package/dist/team.js.map +1 -1
  227. package/dist/threads.d.ts +6 -35
  228. package/dist/threads.js +89 -98
  229. package/dist/threads.js.map +1 -1
  230. package/dist/tmux/inbox-popup.js +37 -15
  231. package/dist/tmux/inbox-popup.js.map +1 -1
  232. package/dist/tmux/runtime-manager.d.ts +3 -0
  233. package/dist/tmux/runtime-manager.js +21 -4
  234. package/dist/tmux/runtime-manager.js.map +1 -1
  235. package/dist/tmux/statusline.js +49 -9
  236. package/dist/tmux/statusline.js.map +1 -1
  237. package/dist/tmux/window-open.js +1 -2
  238. package/dist/tmux/window-open.js.map +1 -1
  239. package/dist/tool-output-watchers.d.ts +0 -18
  240. package/dist/tool-output-watchers.js +0 -322
  241. package/dist/tool-output-watchers.js.map +1 -1
  242. package/dist/tui/screens/dashboard-renderers.js +37 -25
  243. package/dist/tui/screens/dashboard-renderers.js.map +1 -1
  244. package/dist/tui/screens/overlay-renderers.d.ts +2 -0
  245. package/dist/tui/screens/overlay-renderers.js +37 -1
  246. package/dist/tui/screens/overlay-renderers.js.map +1 -1
  247. package/dist/tui/screens/subscreen-renderers.js +7 -0
  248. package/dist/tui/screens/subscreen-renderers.js.map +1 -1
  249. package/dist/worktree.js +17 -0
  250. package/dist/worktree.js.map +1 -1
  251. package/dist-ui/_expo/static/css/web-30453ede1678c16acb08b97e83e8646d.css +1 -0
  252. package/dist-ui/_expo/static/js/web/entry-477c745b2adc79367a4380ecf07d9ff6.js +14620 -0
  253. package/dist-ui/assets/assets/images/icon.a5413dcd2e811c9f2317d01a28118d8a.png +0 -0
  254. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
  255. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
  256. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
  257. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
  258. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
  259. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
  260. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
  261. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
  262. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
  263. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
  264. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
  265. package/dist-ui/assets/node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
  266. package/dist-ui/assets/node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
  267. package/dist-ui/assets/node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
  268. package/dist-ui/assets/node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
  269. package/dist-ui/assets/node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
  270. package/dist-ui/assets/node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
  271. package/dist-ui/assets/node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
  272. package/dist-ui/favicon.ico +0 -0
  273. package/dist-ui/index.html +38 -0
  274. package/dist-ui/metadata.json +1 -0
  275. package/package.json +31 -15
  276. package/dist/agent-message-parts.d.ts +0 -17
  277. package/dist/agent-message-parts.js +0 -31
  278. package/dist/agent-message-parts.js.map +0 -1
  279. package/dist/instance-directory.d.ts +0 -32
  280. package/dist/instance-directory.js +0 -82
  281. package/dist/instance-directory.js.map +0 -1
  282. package/dist/instance-registry.d.ts +0 -39
  283. package/dist/instance-registry.js +0 -208
  284. package/dist/instance-registry.js.map +0 -1
  285. package/dist/multiplexer/session-actions.d.ts +0 -40
  286. package/dist/multiplexer/session-actions.js +0 -110
  287. package/dist/multiplexer/session-actions.js.map +0 -1
  288. package/dist/orchestration-dispatcher.d.ts +0 -25
  289. package/dist/orchestration-dispatcher.js +0 -59
  290. package/dist/orchestration-dispatcher.js.map +0 -1
  291. package/dist/session-input-operations.d.ts +0 -19
  292. package/dist/session-input-operations.js +0 -46
  293. package/dist/session-input-operations.js.map +0 -1
  294. package/dist/session-message-history.d.ts +0 -27
  295. package/dist/session-message-history.js +0 -105
  296. package/dist/session-message-history.js.map +0 -1
  297. package/dist/task-dispatcher.d.ts +0 -64
  298. package/dist/task-dispatcher.js +0 -213
  299. package/dist/task-dispatcher.js.map +0 -1
@@ -4,18 +4,25 @@ import { parseKeys } from "../key-parser.js";
4
4
  import { addDashboardOperationFailure } from "../dashboard/operation-failures.js";
5
5
  import { buildWorktreeListOverlayOutput, buildWorktreeRemoveConfirmOverlayOutput, } from "../tui/screens/overlay-renderers.js";
6
6
  import { postToProjectService } from "./dashboard-control.js";
7
- import { DashboardPendingActions } from "../dashboard/pending-actions.js";
8
7
  import { dashboardCreatedSortKey } from "../dashboard/sort.js";
9
8
  function assertDashboardWorktreeMutationSettled(settled, action) {
10
9
  if (!settled) {
11
10
  throw new Error(`worktree ${action} did not settle before timing out`);
12
11
  }
13
12
  }
13
+ function findRenderedWorktreeForSettlement(host, path) {
14
+ const raw = Array.isArray(host.dashboardRawWorktreeGroupsCache)
15
+ ? host.dashboardRawWorktreeGroupsCache.find((entry) => entry.path === path)
16
+ : undefined;
17
+ if (raw)
18
+ return raw;
19
+ return host.dashboardWorktreeGroupsCache.find((entry) => entry.path === path);
20
+ }
14
21
  async function waitForRenderedDashboardWorktreeState(host, path, predicate, timeoutMs = 10_000) {
15
22
  const deadline = Date.now() + timeoutMs;
16
23
  while (Date.now() < deadline) {
17
24
  await host.refreshDashboardModelFromService(true);
18
- const group = host.dashboardWorktreeGroupsCache.find((entry) => entry.path === path);
25
+ const group = findRenderedWorktreeForSettlement(host, path);
19
26
  if (predicate(group))
20
27
  return true;
21
28
  await new Promise((resolve) => setTimeout(resolve, 100));
@@ -23,16 +30,19 @@ async function waitForRenderedDashboardWorktreeState(host, path, predicate, time
23
30
  return false;
24
31
  }
25
32
  async function runDashboardWorktreeMutation(host, opts) {
26
- host.dashboardPendingActions.set(opts.pendingKey, opts.pendingAction);
33
+ host.dashboardPendingActions.setWorktreeAction(opts.pendingPath, opts.pendingAction);
34
+ host.reapplyDashboardPendingActions?.();
27
35
  host.renderDashboard();
28
36
  try {
29
37
  await opts.request();
30
38
  assertDashboardWorktreeMutationSettled(await opts.settle(), opts.pendingAction);
31
- host.dashboardPendingActions.set(opts.pendingKey, null);
39
+ host.dashboardPendingActions.clearWorktreeAction(opts.pendingPath);
40
+ host.reapplyDashboardPendingActions?.();
32
41
  opts.onSuccess?.();
33
42
  }
34
43
  catch (error) {
35
- host.dashboardPendingActions.set(opts.pendingKey, null);
44
+ host.dashboardPendingActions.clearWorktreeAction(opts.pendingPath);
45
+ host.reapplyDashboardPendingActions?.();
36
46
  opts.onError?.(error);
37
47
  }
38
48
  }
@@ -45,32 +55,34 @@ function sortDashboardWorktrees(worktrees) {
45
55
  return dashboardCreatedSortKey(b) - dashboardCreatedSortKey(a);
46
56
  });
47
57
  }
58
+ function getOptimisticWorktreeCreatedAt(host, path) {
59
+ const existing = host.dashboardWorktreeGroupsCache.find((group) => group.path === path);
60
+ if (typeof existing?.createdAt === "string")
61
+ return existing.createdAt;
62
+ host.dashboardOptimisticWorktreeCreatedAt ??= new Map();
63
+ const cached = host.dashboardOptimisticWorktreeCreatedAt.get(path);
64
+ if (cached)
65
+ return cached;
66
+ const createdAt = new Date().toISOString();
67
+ host.dashboardOptimisticWorktreeCreatedAt.set(path, createdAt);
68
+ return createdAt;
69
+ }
48
70
  function showOptimisticDashboardWorktreeCreate(host, name) {
49
71
  const targetPath = getWorktreeCreatePath(name);
50
- const existing = host.dashboardWorktreeGroupsCache.find((group) => group.path === targetPath);
51
- if (!existing) {
52
- host.dashboardWorktreeGroupsCache = [
53
- ...host.dashboardWorktreeGroupsCache,
54
- {
55
- name,
56
- branch: name,
57
- path: targetPath,
58
- createdAt: new Date().toISOString(),
59
- status: "offline",
60
- pending: true,
61
- pendingAction: "creating",
62
- optimistic: true,
63
- sessions: [],
64
- services: [],
65
- },
66
- ];
67
- sortDashboardWorktrees(host.dashboardWorktreeGroupsCache);
68
- }
69
- else {
70
- existing.pending = true;
71
- existing.pendingAction = "creating";
72
- existing.optimistic = true;
73
- }
72
+ host.dashboardPendingActions.setWorktreeAction(targetPath, "creating", {
73
+ worktreeSeed: {
74
+ name,
75
+ branch: name,
76
+ path: targetPath,
77
+ createdAt: getOptimisticWorktreeCreatedAt(host, targetPath),
78
+ status: "offline",
79
+ isBare: false,
80
+ sessions: [],
81
+ services: [],
82
+ },
83
+ });
84
+ host.reapplyDashboardPendingActions?.();
85
+ sortDashboardWorktrees(host.dashboardWorktreeGroupsCache);
74
86
  host.dashboardState.focusedWorktreePath = targetPath;
75
87
  host.dashboardUiStateStore.markSelectionDirty();
76
88
  host.dashboardState.worktreeNavOrder = host.dashboardWorktreeGroupsCache.map((wt) => wt.path);
@@ -94,6 +106,8 @@ function showDashboardWorktreeCreateFailure(host, name, path, error) {
94
106
  worktreePath: path,
95
107
  worktreeName: name,
96
108
  });
109
+ host.dashboardPendingActions.clearWorktreeAction(path);
110
+ host.dashboardOptimisticWorktreeCreatedAt?.delete?.(path);
97
111
  removeOptimisticDashboardWorktree(host, path);
98
112
  host.dashboardWorktreeGroupsCache = [
99
113
  ...host.dashboardWorktreeGroupsCache,
@@ -119,6 +133,40 @@ function showDashboardWorktreeCreateFailure(host, name, path, error) {
119
133
  host.dashboardUiStateStore.markSelectionDirty();
120
134
  host.showDashboardError(`Failed to create "${name}"`, [`Path: ${path}`, `Error: ${message}`]);
121
135
  }
136
+ function findDashboardWorktreeCreateFailure(host, path) {
137
+ const groupFailure = host.dashboardWorktreeGroupsCache?.find((group) => group.path === path)?.operationFailure;
138
+ if (groupFailure)
139
+ return groupFailure;
140
+ return (host.dashboardOperationFailuresCache ?? []).find((failure) => failure.targetKind === "worktree" && failure.operation === "create" && failure.worktreePath === path);
141
+ }
142
+ function isDashboardWorktreeCreateSettled(group) {
143
+ if (!group)
144
+ return false;
145
+ if (group.operationFailure)
146
+ return false;
147
+ return group.pending !== true && group.pendingAction !== "creating";
148
+ }
149
+ async function waitForRenderedDashboardWorktreeCreate(host, name, path, timeoutMs = 180_000) {
150
+ const deadline = Date.now() + timeoutMs;
151
+ while (Date.now() < deadline) {
152
+ if (typeof host.refreshDashboardModelFromService === "function") {
153
+ await host.refreshDashboardModelFromService(true);
154
+ }
155
+ const failure = findDashboardWorktreeCreateFailure(host, path);
156
+ if (failure) {
157
+ const message = typeof failure.message === "string" ? failure.message : "worktree create failed";
158
+ return { ok: false, error: new Error(message) };
159
+ }
160
+ const group = findRenderedWorktreeForSettlement(host, path);
161
+ if (isDashboardWorktreeCreateSettled(group)) {
162
+ return { ok: true };
163
+ }
164
+ showOptimisticDashboardWorktreeCreate(host, name);
165
+ host.renderDashboard?.();
166
+ await new Promise((resolve) => setTimeout(resolve, 250));
167
+ }
168
+ return { ok: false, error: new Error("worktree creating did not settle before timing out") };
169
+ }
122
170
  export function showWorktreeCreatePrompt(host) {
123
171
  host.openDashboardOverlay("worktree-input");
124
172
  host.worktreeInputBuffer = "";
@@ -170,17 +218,27 @@ export function handleWorktreeInputKey(host, data) {
170
218
  if (name) {
171
219
  if (host.mode === "dashboard") {
172
220
  const targetPath = showOptimisticDashboardWorktreeCreate(host, name);
173
- const pendingKey = DashboardPendingActions.worktreeKey(targetPath);
174
221
  host.renderDashboard();
175
222
  void (async () => {
176
223
  try {
177
224
  await postToProjectService(host, "/worktrees/create", { name }, { timeoutMs: 180_000 });
178
- await host.refreshDashboardModelFromService?.(true);
225
+ const result = await waitForRenderedDashboardWorktreeCreate(host, name, targetPath);
226
+ if (!result.ok) {
227
+ throw result.error;
228
+ }
179
229
  debug(`worktree created from UI: ${name}`, "worktree");
180
- host.settleDashboardCreatePending?.(pendingKey);
230
+ host.dashboardPendingActions.clearWorktreeAction(targetPath);
231
+ host.reapplyDashboardPendingActions?.();
232
+ host.dashboardOptimisticWorktreeCreatedAt?.delete?.(targetPath);
233
+ await host.refreshDashboardModelFromService?.(true);
234
+ host.dashboardState.focusedWorktreePath = targetPath;
235
+ host.dashboardUiStateStore.markSelectionDirty();
236
+ host.renderDashboard();
181
237
  }
182
238
  catch (err) {
183
- host.dashboardPendingActions.set(pendingKey, null);
239
+ host.dashboardPendingActions.clearWorktreeAction(targetPath);
240
+ host.reapplyDashboardPendingActions?.();
241
+ host.dashboardOptimisticWorktreeCreatedAt?.delete?.(targetPath);
184
242
  debug(`worktree create failed: ${err instanceof Error ? err.message : String(err)}`, "worktree");
185
243
  showDashboardWorktreeCreateFailure(host, name, targetPath, err);
186
244
  }
@@ -241,8 +299,6 @@ export function beginWorktreeRemoval(host, path, name, oldIdx) {
241
299
  host.renderDashboard();
242
300
  return;
243
301
  }
244
- if (host.pendingWorktreeRemovals?.has?.(path))
245
- return;
246
302
  debug(`begin worktree graveyard: name=${name} path=${path}`, "worktree");
247
303
  host.worktreeRemovalJob = {
248
304
  path,
@@ -251,15 +307,12 @@ export function beginWorktreeRemoval(host, path, name, oldIdx) {
251
307
  oldIdx,
252
308
  stderr: "",
253
309
  };
254
- host.refreshLocalDashboardModel();
255
- host.renderDashboard();
256
310
  if (host.mode === "dashboard") {
257
- const pendingKey = DashboardPendingActions.worktreeKey(path);
258
311
  void runDashboardWorktreeMutation(host, {
259
- pendingKey,
312
+ pendingPath: path,
260
313
  pendingAction: "graveyarding",
261
314
  request: async () => {
262
- await postToProjectService(host, "/worktrees/graveyard", { path }, { timeoutMs: 10_000 });
315
+ await postToProjectService(host, "/worktrees/graveyard", { path }, { timeoutMs: 180_000 });
263
316
  },
264
317
  settle: () => waitForRenderedDashboardWorktreeState(host, path, (group) => !group),
265
318
  onSuccess: () => {
@@ -276,6 +329,8 @@ export function beginWorktreeRemoval(host, path, name, oldIdx) {
276
329
  });
277
330
  return;
278
331
  }
332
+ host.refreshLocalDashboardModel();
333
+ host.renderDashboard();
279
334
  void (async () => {
280
335
  try {
281
336
  await host.graveyardDesktopWorktree(path);
@@ -326,6 +381,7 @@ export function finishWorktreeRemoval(host, code) {
326
381
  `Error: ${message}`,
327
382
  ...details,
328
383
  ]);
384
+ host.renderDashboard();
329
385
  return;
330
386
  }
331
387
  host.renderDashboard();
@@ -1 +1 @@
1
- {"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/multiplexer/worktrees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EACL,8BAA8B,EAC9B,uCAAuC,GACxC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAa/D,SAAS,sCAAsC,CAC7C,OAAgB,EAChB,MAAgD;IAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,mCAAmC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qCAAqC,CAClD,IAAkB,EAClB,IAAY,EACZ,SAA8C,EAC9C,SAAS,GAAG,MAAM;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1F,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,4BAA4B,CAAC,IAAkB,EAAE,IAAsC;IACpG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACtE,IAAI,CAAC,eAAe,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,sCAAsC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAChF,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,SAAqB;IACnD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QACnC,OAAO,uBAAuB,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qCAAqC,CAAC,IAAkB,EAAE,IAAY;IAC7E,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAI,IAAI,CAAC,4BAA2C,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACnH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,4BAA4B,GAAG;YAClC,GAAG,IAAI,CAAC,4BAA4B;YACpC;gBACE,IAAI;gBACJ,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,UAAU;gBACzB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,EAAE;aACb;SACF,CAAC;QACF,sBAAsB,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,QAAQ,CAAC,aAAa,GAAG,UAAU,CAAC;QACpC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,UAAU,CAAC;IACrD,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;IAChD,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACnG,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iCAAiC,CAAC,IAAkB,EAAE,IAAY;IACzE,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClH,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACnG,IAAI,IAAI,CAAC,cAAc,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,SAAS,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,kCAAkC,CAAC,IAAkB,EAAE,IAAY,EAAE,IAAY,EAAE,KAAc;IACxG,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,4BAA4B,CAAC;QAC3C,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,8BAA8B,IAAI,GAAG;QAC5C,OAAO;QACP,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IACH,iCAAiC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,4BAA4B,GAAG;QAClC,GAAG,IAAI,CAAC,4BAA4B;QACpC;YACE,IAAI;YACJ,MAAM,EAAE,UAAU;YAClB,IAAI;YACJ,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;YACZ,gBAAgB,EAAE,OAAO;SAC1B;KACF,CAAC;IACF,sBAAsB,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC1D,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAC/C,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACnG,IAAI,CAAC,+BAA+B,GAAG;QACrC,OAAO;QACP,GAAG,CAAC,IAAI,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC,MAAM,CACpD,CAAC,QAAa,EAAE,EAAE,CAChB,CAAC,CACC,QAAQ,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU;YAC1C,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS;YACxC,QAAQ,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAC/C,CACJ;KACF,CAAC;IACF,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;IAChD,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,IAAI,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,EAAE,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAkB;IACzD,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IAC5C,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;IAC9B,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,IAAkB;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAG,CAAC,kBAAkB,EAAE,EAAE,EAAE,WAAW,IAAI,CAAC,mBAAmB,GAAG,EAAE,EAAE,EAAE,gCAAgC,CAAC,CAAC;IAErH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnD,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC;QACzB,MAAM,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,cAAc,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,MAAM,IAAI,gBAAgB,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,MAAM,IAAI,OAAO,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,0BAA0B,KAAK,UAAU,EAAE,CAAC;QACvF,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAkB,EAAE,IAAY;IACrE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;IAErC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,mCAAmC,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,qCAAqC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACnE,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,CAAC;wBACH,MAAM,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;wBACxF,MAAM,IAAI,CAAC,gCAAgC,EAAE,CAAC,IAAI,CAAC,CAAC;wBACpD,KAAK,CAAC,6BAA6B,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;wBACvD,IAAI,CAAC,4BAA4B,EAAE,CAAC,UAAU,CAAC,CAAC;oBAClD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;wBACnD,KAAK,CAAC,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;wBACjG,kCAAkC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;gBACL,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBACjC,KAAK,CAAC,6BAA6B,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;QACD,IAAI,CAAC,mCAAmC,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACvE,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC,IAAI,CAAC;QACvC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAkB;IACjD,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC3C,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAkB;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,0BAA0B,KAAK,UAAU,EAAE,CAAC;QACvF,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAkB;IAC5D,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,0BAA0B,KAAK,UAAU,EAAE,CAAC;QACvF,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,uCAAuC,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAkB,EAAE,IAAY,EAAE,IAAY,EAAE,MAAc;IACjG,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,KAAK,IAAI;QAAE,OAAO;IACnD,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,wBAAwB,YAAY,EAAE,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,wCAAwC,EAAE;YAChE,wBAAwB,YAAY,0BAA0B,IAAI,IAAI;SACvE,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO;IAEtD,KAAK,CAAC,kCAAkC,IAAI,SAAS,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IACzE,IAAI,CAAC,kBAAkB,GAAG;QACxB,IAAI;QACJ,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,MAAM;QACN,MAAM,EAAE,EAAE;KACX,CAAC;IACF,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAClC,IAAI,CAAC,eAAe,EAAE,CAAC;IACvB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,4BAA4B,CAAC,IAAI,EAAE;YACtC,UAAU;YACV,aAAa,EAAE,cAAc;YAC7B,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,MAAM,oBAAoB,CAAC,IAAI,EAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,CAAC,qCAAqC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;YAClF,SAAS,EAAE,GAAG,EAAE;gBACd,KAAK,CAAC,4CAA4C,IAAI,SAAS,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;gBACnF,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5F,CAAC;gBACD,KAAK,CACH,yCAAyC,IAAI,SAAS,IAAI,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACtH,UAAU,CACX,CAAC;gBACF,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjC,CAAC;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAC1C,KAAK,CAAC,4CAA4C,IAAI,SAAS,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YACnF,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5F,CAAC;YACD,KAAK,CACH,yCAAyC,IAAI,SAAS,IAAI,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACtH,UAAU,CACX,CAAC;YACF,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAkB,EAAE,IAAY;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO;IAEjB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM;SACvB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,gBAAgB,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,KAAK,CAAC,yBAAyB,GAAG,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QAEvD,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAChF,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7F,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,cAAc,CAAC,mBAAmB;gBACrC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACtD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,uCAAuC,IAAI,EAAE,CAAC;QAC5E,IAAI,CAAC,WAAW,GAAG,WAAW,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,GAAG,CAAC,IAAI,GAAG,EAAE;YAC3D,SAAS,GAAG,CAAC,IAAI,EAAE;YACnB,UAAU,OAAO,EAAE;YACnB,GAAG,OAAO;SACX,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,IAAkB,EAAE,IAAY;IAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7C,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1E,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,mCAAmC,EAAE,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAkB,EAAE,IAAY;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;IAErC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,mCAAmC,EAAE,CAAC;IAC7C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/multiplexer/worktrees.ts"],"names":[],"mappings":"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"}
@@ -35,12 +35,16 @@ function isDirectSessionFocus(entry, sessionId) {
35
35
  }
36
36
  export function updateNotificationContext(source, patch) {
37
37
  const state = loadState();
38
+ const previous = state.contexts[source];
39
+ const has = (key) => Object.prototype.hasOwnProperty.call(patch, key);
40
+ const nextSessionId = has("sessionId") ? patch.sessionId : previous?.sessionId;
41
+ const nextScreen = has("screen") ? patch.screen : has("sessionId") && nextSessionId ? "session" : previous?.screen;
38
42
  const next = {
39
43
  source,
40
- focused: patch.focused ?? state.contexts[source]?.focused ?? false,
41
- screen: patch.screen ?? state.contexts[source]?.screen,
42
- sessionId: patch.sessionId ?? state.contexts[source]?.sessionId,
43
- panelOpen: patch.panelOpen ?? state.contexts[source]?.panelOpen ?? false,
44
+ focused: has("focused") ? (patch.focused ?? false) : (previous?.focused ?? false),
45
+ screen: nextScreen,
46
+ sessionId: nextSessionId,
47
+ panelOpen: has("panelOpen") ? (patch.panelOpen ?? false) : (previous?.panelOpen ?? false),
44
48
  updatedAt: new Date().toISOString(),
45
49
  };
46
50
  state.contexts[source] = next;
@@ -1 +1 @@
1
- {"version":3,"file":"notification-context.js","sourceRoot":"","sources":["../src/notification-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAmBxD,8EAA8E;AAC9E,2EAA2E;AAC3E,wEAAwE;AACxE,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC;AAErC,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,0BAA0B,EAAE,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;QAC3D,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACtC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAA+B;IAChD,eAAe,CAAC,0BAA0B,EAAE,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,OAAO,CAAC,KAA2C;IAC1D,IAAI,CAAC,KAAK,EAAE,SAAS;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,gBAAgB,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA+B,EAAE,SAAiB;IAC9E,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAAiC,EACjC,KAAsE;IAEtE,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,IAAI,GAA6B;QACrC,MAAM;QACN,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,IAAI,KAAK;QAClE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;QACtD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS;QAC/D,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,IAAI,KAAK;QACxE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IACF,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,SAAS,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,SAAiB;IAC5D,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,SAAS;QAC1D,IAAI,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAiB;IAC1D,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,SAAS;QAC1D,IAAI,KAAK,CAAC,SAAS,IAAI,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QACjF,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;IACxG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"notification-context.js","sourceRoot":"","sources":["../src/notification-context.ts"],"names":[],"mappings":"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"}
@@ -1,48 +1,8 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { existsSync, readFileSync } from "node:fs";
3
- import { writeJsonAtomic } from "./atomic-write.js";
4
- import { getNotificationsPath } from "./paths.js";
5
- function loadState() {
6
- const path = getNotificationsPath();
7
- if (!existsSync(path))
8
- return { version: 1, notifications: [] };
9
- try {
10
- const raw = readFileSync(path, "utf8");
11
- const parsed = JSON.parse(raw);
12
- if (parsed.version !== 1 || !Array.isArray(parsed.notifications)) {
13
- return { version: 1, notifications: [] };
14
- }
15
- return parsed;
16
- }
17
- catch {
18
- return { version: 1, notifications: [] };
19
- }
20
- }
21
- function saveState(state) {
22
- writeJsonAtomic(getNotificationsPath(), state);
23
- }
24
- export function addNotification(input) {
25
- const now = input.createdAt ?? new Date().toISOString();
26
- const state = loadState();
27
- const record = {
28
- id: randomUUID(),
29
- title: input.title.trim() || "aimux",
30
- subtitle: input.subtitle?.trim() || undefined,
31
- body: input.body.trim() || input.title.trim() || "aimux",
32
- sessionId: input.sessionId?.trim() || undefined,
33
- targetKey: normalizeTargetKey(input),
34
- targetKind: normalizeTargetKind(input),
35
- kind: input.kind?.trim() || undefined,
36
- unread: input.unread ?? true,
37
- cleared: false,
38
- createdAt: now,
39
- updatedAt: now,
40
- dedupeKey: input.dedupeKey?.trim() || undefined,
41
- };
42
- state.notifications.unshift(record);
43
- saveState(state);
44
- return record;
45
- }
2
+ import { deriveRuntimeExchangeIndexes } from "./runtime-core/exchange-derived.js";
3
+ import { createRuntimeExchangeStore, } from "./runtime-core/exchange-store.js";
4
+ const PROJECT_NOTIFICATION_PARTICIPANT = "project";
5
+ const NOTIFICATION_TAG = "notification";
46
6
  function normalizeTargetKey(input) {
47
7
  const targetKey = input.targetKey?.trim();
48
8
  if (targetKey)
@@ -53,39 +13,127 @@ function normalizeTargetKey(input) {
53
13
  function normalizeTargetKind(input) {
54
14
  if (input.targetKind)
55
15
  return input.targetKind;
56
- return input.sessionId?.trim() ? "session" : undefined;
16
+ return input.sessionId?.trim() ? "session" : "generic";
57
17
  }
58
- function recordTargetKey(record) {
59
- return record.targetKey ?? (record.sessionId ? `session:${record.sessionId}` : undefined);
18
+ function metadataString(message, key) {
19
+ const value = message?.metadata?.[key];
20
+ return typeof value === "string" && value.trim() ? value : undefined;
60
21
  }
61
- export function upsertNotification(input) {
62
- const targetKey = normalizeTargetKey(input);
22
+ function metadataBoolean(message, key) {
23
+ return message?.metadata?.[key] === true;
24
+ }
25
+ function notificationThreadId(targetKey) {
63
26
  if (!targetKey)
64
- return addNotification(input);
27
+ return `notification-${randomUUID()}`;
28
+ return `notification-${Buffer.from(targetKey).toString("base64url")}`;
29
+ }
30
+ function threadLatestMessage(exchange, threadId) {
31
+ return exchange.messages
32
+ .filter((message) => message.threadId === threadId)
33
+ .sort((a, b) => b.ts.localeCompare(a.ts))[0];
34
+ }
35
+ function entryForThread(exchange, thread) {
36
+ return exchange.inbox.find((entry) => entry.subjectKind === "thread" && entry.subjectId === thread.id);
37
+ }
38
+ function notificationRecord(exchange, thread, message) {
39
+ const entry = entryForThread(exchange, thread);
40
+ const sessionId = metadataString(message, "notificationSessionId");
41
+ const targetKey = metadataString(message, "notificationTargetKey");
42
+ const targetKind = metadataString(message, "notificationTargetKind");
43
+ return {
44
+ id: metadataString(message, "notificationRecordId") ?? thread.id,
45
+ title: thread.title,
46
+ subtitle: metadataString(message, "notificationSubtitle"),
47
+ body: message.body,
48
+ sessionId,
49
+ targetKey,
50
+ targetKind,
51
+ kind: metadataString(message, "notificationKind"),
52
+ unread: Boolean(entry && entry.state !== "done"),
53
+ cleared: metadataBoolean(message, "notificationCleared"),
54
+ createdAt: thread.createdAt,
55
+ updatedAt: thread.updatedAt,
56
+ dedupeKey: metadataString(message, "notificationDedupeKey"),
57
+ };
58
+ }
59
+ function notificationRecords(exchange = createRuntimeExchangeStore().read()) {
60
+ return exchange.threads
61
+ .filter((thread) => thread.tags?.includes(NOTIFICATION_TAG))
62
+ .map((thread) => {
63
+ const message = threadLatestMessage(exchange, thread.id);
64
+ return message ? notificationRecord(exchange, thread, message) : undefined;
65
+ })
66
+ .filter((record) => Boolean(record))
67
+ .sort((a, b) => b.createdAt.localeCompare(a.createdAt));
68
+ }
69
+ function writeNotification(input) {
65
70
  const now = input.createdAt ?? new Date().toISOString();
66
- const state = loadState();
67
- const record = {
68
- id: randomUUID(),
71
+ const sessionId = input.sessionId?.trim() || undefined;
72
+ const targetKey = normalizeTargetKey(input);
73
+ const targetKind = normalizeTargetKind(input);
74
+ const threadId = input.replaceTarget ? notificationThreadId(targetKey) : notificationThreadId();
75
+ const participantId = sessionId ?? PROJECT_NOTIFICATION_PARTICIPANT;
76
+ const thread = {
77
+ id: threadId,
69
78
  title: input.title.trim() || "aimux",
70
- subtitle: input.subtitle?.trim() || undefined,
71
- body: input.body.trim() || input.title.trim() || "aimux",
72
- sessionId: input.sessionId?.trim() || undefined,
73
- targetKey,
74
- targetKind: normalizeTargetKind(input),
75
- kind: input.kind?.trim() || undefined,
76
- unread: input.unread ?? true,
77
- cleared: false,
79
+ kind: "conversation",
80
+ status: "open",
78
81
  createdAt: now,
79
82
  updatedAt: now,
80
- dedupeKey: input.dedupeKey?.trim() || undefined,
83
+ createdBy: "aimux",
84
+ participants: ["aimux", participantId],
85
+ lastMessageId: `message-${threadId}`,
86
+ unreadBy: input.unread === false ? [] : [participantId],
87
+ tags: [NOTIFICATION_TAG],
81
88
  };
82
- state.notifications = [record, ...state.notifications.filter((existing) => recordTargetKey(existing) !== targetKey)];
83
- saveState(state);
89
+ const message = {
90
+ id: `message-${threadId}`,
91
+ threadId,
92
+ ts: now,
93
+ from: "aimux",
94
+ to: [participantId],
95
+ kind: "note",
96
+ body: input.body.trim() || input.title.trim() || "aimux",
97
+ metadata: {
98
+ notificationRecordId: randomUUID(),
99
+ notificationSubtitle: input.subtitle?.trim() || null,
100
+ notificationSessionId: sessionId ?? null,
101
+ notificationTargetKey: targetKey ?? null,
102
+ notificationTargetKind: targetKind ?? null,
103
+ notificationKind: input.kind?.trim() || null,
104
+ notificationDedupeKey: input.dedupeKey?.trim() || null,
105
+ notificationCleared: false,
106
+ },
107
+ };
108
+ let record;
109
+ createRuntimeExchangeStore().update((exchange) => {
110
+ const next = deriveRuntimeExchangeIndexes({
111
+ ...exchange,
112
+ generatedAt: now,
113
+ threads: [...exchange.threads.filter((existing) => existing.id !== threadId), thread],
114
+ messages: [...exchange.messages.filter((existing) => existing.threadId !== threadId), message],
115
+ });
116
+ const inbox = input.unread === false
117
+ ? next.inbox.map((entry) => entry.subjectKind === "thread" && entry.subjectId === threadId
118
+ ? { ...entry, state: "done" }
119
+ : entry)
120
+ : next.inbox;
121
+ const updated = { ...next, inbox };
122
+ record = notificationRecord(updated, thread, message);
123
+ return updated;
124
+ });
125
+ if (!record)
126
+ throw new Error("failed to write notification");
84
127
  return record;
85
128
  }
129
+ export function addNotification(input) {
130
+ return writeNotification(input);
131
+ }
132
+ export function upsertNotification(input) {
133
+ return writeNotification({ ...input, replaceTarget: Boolean(normalizeTargetKey(input)) });
134
+ }
86
135
  export function listNotifications(opts) {
87
- const state = loadState();
88
- return state.notifications.filter((record) => {
136
+ return notificationRecords().filter((record) => {
89
137
  if (!opts?.includeCleared && record.cleared)
90
138
  return false;
91
139
  if (opts?.unreadOnly && !record.unread)
@@ -96,49 +144,63 @@ export function listNotifications(opts) {
96
144
  });
97
145
  }
98
146
  export function markNotificationsRead(opts) {
99
- const state = loadState();
100
- let changed = 0;
101
- const now = new Date().toISOString();
102
- state.notifications = state.notifications.map((record) => {
147
+ const store = createRuntimeExchangeStore();
148
+ const records = notificationRecords(store.read()).filter((record) => {
103
149
  if (record.cleared || !record.unread)
104
- return record;
105
- const matchesId = opts?.id ? record.id === opts.id : true;
106
- const matchesSession = opts?.sessionId ? record.sessionId === opts.sessionId : true;
107
- if (!matchesId || !matchesSession)
108
- return record;
109
- changed += 1;
110
- return {
111
- ...record,
112
- unread: false,
113
- updatedAt: now,
114
- };
150
+ return false;
151
+ if (opts?.id && record.id !== opts.id)
152
+ return false;
153
+ if (opts?.sessionId && record.sessionId !== opts.sessionId)
154
+ return false;
155
+ return true;
115
156
  });
116
- if (changed > 0)
117
- saveState(state);
118
- return changed;
157
+ if (records.length === 0)
158
+ return 0;
159
+ const threadIds = new Set(records
160
+ .map((record) => {
161
+ const exchange = store.read();
162
+ return exchange.threads.find((thread) => {
163
+ const message = threadLatestMessage(exchange, thread.id);
164
+ return message && notificationRecord(exchange, thread, message).id === record.id;
165
+ })?.id;
166
+ })
167
+ .filter((id) => Boolean(id)));
168
+ store.update((exchange) => ({
169
+ ...exchange,
170
+ inbox: exchange.inbox.map((entry) => entry.subjectKind === "thread" && threadIds.has(entry.subjectId) ? { ...entry, state: "done" } : entry),
171
+ }));
172
+ return records.length;
119
173
  }
120
174
  export function clearNotifications(opts) {
121
- const state = loadState();
122
- let changed = 0;
123
- const now = new Date().toISOString();
124
- state.notifications = state.notifications.map((record) => {
175
+ const store = createRuntimeExchangeStore();
176
+ const records = notificationRecords(store.read()).filter((record) => {
125
177
  if (record.cleared)
126
- return record;
127
- const matchesId = opts?.id ? record.id === opts.id : true;
128
- const matchesSession = opts?.sessionId ? record.sessionId === opts.sessionId : true;
129
- if (!matchesId || !matchesSession)
130
- return record;
131
- changed += 1;
178
+ return false;
179
+ if (opts?.id && record.id !== opts.id)
180
+ return false;
181
+ if (opts?.sessionId && record.sessionId !== opts.sessionId)
182
+ return false;
183
+ return true;
184
+ });
185
+ if (records.length === 0)
186
+ return 0;
187
+ const recordIds = new Set(records.map((record) => record.id));
188
+ store.update((exchange) => {
189
+ const threadIds = new Set(exchange.threads
190
+ .map((thread) => {
191
+ const message = threadLatestMessage(exchange, thread.id);
192
+ return message && recordIds.has(notificationRecord(exchange, thread, message).id) ? thread.id : undefined;
193
+ })
194
+ .filter((id) => Boolean(id)));
132
195
  return {
133
- ...record,
134
- unread: false,
135
- cleared: true,
136
- updatedAt: now,
196
+ ...exchange,
197
+ messages: exchange.messages.map((message) => message.threadId && threadIds.has(message.threadId)
198
+ ? { ...message, metadata: { ...(message.metadata ?? {}), notificationCleared: true } }
199
+ : message),
200
+ inbox: exchange.inbox.map((entry) => entry.subjectKind === "thread" && threadIds.has(entry.subjectId) ? { ...entry, state: "done" } : entry),
137
201
  };
138
202
  });
139
- if (changed > 0)
140
- saveState(state);
141
- return changed;
203
+ return records.length;
142
204
  }
143
205
  export function unreadNotificationCount(opts) {
144
206
  return listNotifications({ unreadOnly: true, sessionId: opts?.sessionId }).length;