aimux-cli 0.1.16 → 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 +821 -151
  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 +28 -12
  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
@@ -2,6 +2,7 @@ import { closeNotificationPanel as closeNotificationPanelImpl, handleNotificatio
2
2
  import { beginWorktreeRemoval as beginWorktreeRemovalImpl, finishWorktreeRemoval as finishWorktreeRemovalImpl, handleWorktreeInputKey as handleWorktreeInputKeyImpl, handleWorktreeRemoveConfirmKey as handleWorktreeRemoveConfirmKeyImpl, handleWorktreeListKey as handleWorktreeListKeyImpl, renderWorktreeInput as renderWorktreeInputImpl, renderWorktreeList as renderWorktreeListImpl, renderWorktreeRemoveConfirm as renderWorktreeRemoveConfirmImpl, showWorktreeCreatePrompt as showWorktreeCreatePromptImpl, showWorktreeList as showWorktreeListImpl, } from "./worktrees.js";
3
3
  import { createService as createServiceImpl, removeOfflineService as removeOfflineServiceImpl, resumeOfflineService as resumeOfflineServiceImpl, resumeOfflineServiceById as resumeOfflineServiceByIdImpl, serviceLabelForCommand as serviceLabelForCommandImpl, stopService as stopServiceImpl, } from "./services.js";
4
4
  import { derivedStatusLabel } from "../dashboard/index.js";
5
+ import { selectDashboardTeammates } from "../dashboard/session-registry.js";
5
6
  import { hasRuntimeEvidence, isAttachableDashboardSessionEntry } from "../dashboard/runtime-evidence.js";
6
7
  export const dashboardViewMethods = {
7
8
  serviceLabelForCommand(commandLine) {
@@ -10,29 +11,38 @@ export const dashboardViewMethods = {
10
11
  generateDashboardSessionId(command) {
11
12
  return `${command}-${Math.random().toString(36).slice(2, 8)}`;
12
13
  },
13
- settleDashboardCreatePending(itemId) {
14
+ settleDashboardCreatePending(itemId, target) {
14
15
  if (!(this.startedInDashboard && this.mode === "dashboard"))
15
16
  return;
16
- this.dashboardPendingActions.settleCreatePending(itemId, () => {
17
+ const pendingTarget = target ??
18
+ (itemId.startsWith("worktree:")
19
+ ? "worktree"
20
+ : this.getDashboardSessions?.().some((entry) => entry.id === itemId)
21
+ ? "session"
22
+ : "service");
23
+ this.dashboardPendingActions.settleCreatePending(pendingTarget, itemId, () => {
17
24
  this.refreshLocalDashboardModel();
18
25
  this.renderDashboard();
19
26
  }, {
20
- timeoutMs: itemId.startsWith("worktree:") ? 180_000 : undefined,
27
+ timeoutMs: pendingTarget === "worktree" ? 180_000 : undefined,
21
28
  isSettled: async () => {
22
29
  if (typeof this.refreshDashboardModelFromService === "function") {
23
30
  await this.refreshDashboardModelFromService(true);
24
31
  }
25
- if (itemId.startsWith("worktree:")) {
26
- const path = itemId.slice("worktree:".length);
32
+ if (pendingTarget === "worktree") {
33
+ const path = itemId.startsWith("worktree:") ? itemId.slice("worktree:".length) : itemId;
27
34
  const rawWorktree = this.listDesktopWorktrees?.().find((entry) => entry.path === path);
28
35
  if (rawWorktree && rawWorktree.pending !== true && rawWorktree.pendingAction !== "creating")
29
36
  return true;
30
37
  const group = this.dashboardWorktreeGroupsCache?.find((entry) => entry.path === path);
31
38
  return Boolean(group) && group.pendingAction !== "creating" && group.pending !== true;
32
39
  }
33
- const service = this.getDashboardServices?.().find((entry) => entry.id === itemId);
34
- if (service)
35
- return service.pendingAction !== "creating" || hasRuntimeEvidence(service);
40
+ if (pendingTarget === "service") {
41
+ const service = this.getDashboardServices?.().find((entry) => entry.id === itemId);
42
+ if (service)
43
+ return service.pendingAction !== "creating" || hasRuntimeEvidence(service);
44
+ return false;
45
+ }
36
46
  const session = this.getDashboardSessions?.().find((entry) => entry.id === itemId);
37
47
  return isAttachableDashboardSessionEntry(session);
38
48
  },
@@ -72,6 +82,7 @@ export const dashboardViewMethods = {
72
82
  }
73
83
  : this.getViewportSize();
74
84
  const dashSessions = this.dashboardSessionsCache;
85
+ const dashTeammates = this.dashboardTeammatesCache ?? [];
75
86
  const dashServices = this.dashboardServicesCache;
76
87
  const worktreeGroups = this.dashboardWorktreeGroupsCache;
77
88
  const mainCheckoutInfo = this.dashboardMainCheckoutInfoCache;
@@ -88,6 +99,9 @@ export const dashboardViewMethods = {
88
99
  else if (!hasWorktrees && dashSessions.length > 0) {
89
100
  selectedSession = dashSessions[this.activeIndex]?.id;
90
101
  }
102
+ const selectedSessionEntry = selectedSession
103
+ ? dashSessions.find((session) => session.id === selectedSession)
104
+ : undefined;
91
105
  this.dashboard.update({
92
106
  sessions: dashSessions,
93
107
  services: dashServices,
@@ -97,6 +111,7 @@ export const dashboardViewMethods = {
97
111
  navLevel: hasWorktrees ? this.dashboardState.level : "sessions",
98
112
  selectedSessionId: selectedSession,
99
113
  selectedServiceId: selectedService,
114
+ selectedTeammates: selectDashboardTeammates(dashTeammates, selectedSessionEntry),
100
115
  runtimeLabel: "tmux",
101
116
  mainCheckout: mainCheckoutInfo,
102
117
  operationFailures: this.dashboardOperationFailuresCache ?? [],
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-view-methods.js","sourceRoot":"","sources":["../../src/multiplexer/dashboard-view-methods.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard-view-methods.js","sourceRoot":"","sources":["../../src/multiplexer/dashboard-view-methods.ts"],"names":[],"mappings":"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"}
@@ -54,7 +54,13 @@ export type GraveyardStandaloneAgentRow = {
54
54
  actionNumber: number;
55
55
  lastUsedAt?: string;
56
56
  };
57
- export type GraveyardViewRow = GraveyardSectionRow | GraveyardAgentWorktreeRow | GraveyardWorktreeRow | GraveyardAttachedAgentRow | GraveyardAttachedServiceRow | GraveyardAttachedMoreRow | GraveyardStandaloneAgentRow;
57
+ export type GraveyardOrphanTeammateRow = {
58
+ kind: "orphan-teammate";
59
+ entry: SessionState;
60
+ parentSessionId: string;
61
+ lastUsedAt?: string;
62
+ };
63
+ export type GraveyardViewRow = GraveyardSectionRow | GraveyardAgentWorktreeRow | GraveyardWorktreeRow | GraveyardAttachedAgentRow | GraveyardAttachedServiceRow | GraveyardAttachedMoreRow | GraveyardStandaloneAgentRow | GraveyardOrphanTeammateRow;
58
64
  export type GraveyardSelectableRow = GraveyardWorktreeRow | GraveyardStandaloneAgentRow;
59
65
  export interface GraveyardViewModel {
60
66
  rows: GraveyardViewRow[];
@@ -63,6 +69,8 @@ export interface GraveyardViewModel {
63
69
  export interface BuildGraveyardViewModelInput {
64
70
  worktrees: WorktreeGraveyardEntry[];
65
71
  agents: SessionState[];
72
+ parentSessions?: SessionState[];
73
+ teammates?: SessionState[];
66
74
  lastUsedById?: Record<string, LastUsedEntry | undefined>;
67
75
  }
68
76
  export declare function buildGraveyardViewModel(input: BuildGraveyardViewModelInput): GraveyardViewModel;
@@ -1,10 +1,12 @@
1
1
  import { basename } from "node:path";
2
2
  import { parseRecencyTimestamp } from "../recency.js";
3
+ import { isTeammateSession, selectOrphanTeammates } from "../team.js";
3
4
  export const MAX_VISIBLE_ATTACHED_AGENTS_PER_WORKTREE = 5;
4
5
  export function buildGraveyardViewModel(input) {
5
6
  const rows = [];
6
7
  const selectableRows = [];
7
8
  const flatAgentsClaimedByWorktree = new Set();
9
+ const renderedAgentIds = new Set();
8
10
  const addSelectable = (row) => {
9
11
  const actionIndex = selectableRows.length;
10
12
  const withAction = { ...row, actionIndex, actionNumber: actionIndex + 1 };
@@ -34,6 +36,9 @@ export function buildGraveyardViewModel(input) {
34
36
  sortAt: worktreeSortTimestamp(worktree, attachedAgents, attachedServices),
35
37
  });
36
38
  rows.push(worktreeRow);
39
+ for (const agent of attachedAgents) {
40
+ renderedAgentIds.add(agent.entry.id);
41
+ }
37
42
  for (const agent of visibleAttachedAgents) {
38
43
  rows.push({ kind: "attached-agent-display", parentPath: worktree.path, agent });
39
44
  }
@@ -61,6 +66,7 @@ export function buildGraveyardViewModel(input) {
61
66
  entry: agent,
62
67
  lastUsedAt: input.lastUsedById?.[agent.id]?.lastUsedAt,
63
68
  }));
69
+ renderedAgentIds.add(agent.id);
64
70
  }
65
71
  }
66
72
  }
@@ -73,10 +79,43 @@ export function buildGraveyardViewModel(input) {
73
79
  entry: agent,
74
80
  lastUsedAt: input.lastUsedById?.[agent.id]?.lastUsedAt,
75
81
  }));
82
+ renderedAgentIds.add(agent.id);
83
+ }
84
+ }
85
+ const orphanTeammates = selectOrphanTeammates(input.teammates ?? [], collectKnownParentIds(input)).filter((session) => !renderedAgentIds.has(session.id) && !input.agents.some((agent) => agent.id === session.id));
86
+ if (orphanTeammates.length > 0) {
87
+ rows.push({ kind: "section", label: "Orphaned Teammates" });
88
+ for (const teammate of orphanTeammates) {
89
+ const parentSessionId = teammate.team?.parentSessionId;
90
+ if (!parentSessionId)
91
+ continue;
92
+ rows.push({
93
+ kind: "orphan-teammate",
94
+ entry: teammate,
95
+ parentSessionId,
96
+ lastUsedAt: input.lastUsedById?.[teammate.id]?.lastUsedAt,
97
+ });
76
98
  }
77
99
  }
78
100
  return { rows, selectableRows };
79
101
  }
102
+ function collectKnownParentIds(input) {
103
+ const ids = new Set();
104
+ const add = (session) => {
105
+ if (!session || isTeammateSession(session))
106
+ return;
107
+ ids.add(session.id);
108
+ };
109
+ for (const session of input.parentSessions ?? [])
110
+ add(session);
111
+ for (const agent of input.agents)
112
+ add(agent);
113
+ for (const worktree of input.worktrees) {
114
+ for (const agent of worktree.agents ?? [])
115
+ add(agent);
116
+ }
117
+ return ids;
118
+ }
80
119
  function sortWorktrees(worktrees, flatAgents, lastUsedById) {
81
120
  const sortMsByPath = new Map();
82
121
  for (const worktree of worktrees) {
@@ -1 +1 @@
1
- {"version":3,"file":"graveyard-view-model.js","sourceRoot":"","sources":["../../src/multiplexer/graveyard-view-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graveyard-view-model.js","sourceRoot":"","sources":["../../src/multiplexer/graveyard-view-model.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { SessionRuntime, type SessionTransport } from "../session-runtime.js";
2
2
  import { type TmuxTarget } from "../tmux/runtime-manager.js";
3
+ import type { SessionTeamMetadata } from "../team.js";
3
4
  import { type DashboardActionMethods } from "./dashboard-actions-methods.js";
4
5
  import { type AgentIoMethods } from "./agent-io-methods.js";
5
6
  import { type DashboardInteractionMethods } from "./dashboard-interaction.js";
@@ -18,6 +19,7 @@ export interface SessionState {
18
19
  lifecycle?: "live" | "offline";
19
20
  createdAt?: string;
20
21
  backendSessionId?: string;
22
+ team?: SessionTeamMetadata;
21
23
  worktreePath?: string;
22
24
  label?: string;
23
25
  headline?: string;
@@ -36,7 +38,6 @@ export interface ServiceState {
36
38
  export interface SavedState {
37
39
  savedAt: string;
38
40
  cwd: string;
39
- sessions: SessionState[];
40
41
  services?: ServiceState[];
41
42
  }
42
43
  type ManagedSession = SessionRuntime;
@@ -95,8 +96,10 @@ export declare class Multiplexer {
95
96
  private planEntries;
96
97
  private planIndex;
97
98
  private notificationPanelState;
99
+ private teammatePickerState;
98
100
  private dashboardPendingActions;
99
101
  private stoppingSessionIds;
102
+ private unpreservedExitedSessionIds;
100
103
  private graveyardAfterStopSessionIds;
101
104
  private dashboardQuickJumpTimeout;
102
105
  /** Quick switcher overlay state */
@@ -105,7 +108,6 @@ export declare class Multiplexer {
105
108
  /** MRU order of session IDs (most recent first) */
106
109
  private sessionMRU;
107
110
  /** Sessions confirmed registered in the instance registry (for claim detection) */
108
- private confirmedRegistered;
109
111
  /** The focused worktree path on the dashboard (undefined = main repo) */
110
112
  private dashboardState;
111
113
  private dashboardUiStateStore;
@@ -117,11 +119,8 @@ export declare class Multiplexer {
117
119
  private dashboardPendingExpandedViewportCount;
118
120
  private dashboardModelVersion;
119
121
  private agentTracker;
120
- private instanceId;
121
122
  private contextWatcher;
122
- private taskDispatcher;
123
- private orchestrationDispatcher;
124
- /** Maps session ID → toolConfigKey for state saving */
123
+ /** Maps session ID → toolConfigKey for topology persistence */
125
124
  private sessionToolKeys;
126
125
  /** Maps session ID → original args (before preamble injection) */
127
126
  private sessionOriginalArgs;
@@ -131,10 +130,9 @@ export declare class Multiplexer {
131
130
  private sessionRoles;
132
131
  /** Maps session ID → user-provided stable label */
133
132
  private sessionLabels;
134
- /** Offline sessions from previous runs (loaded from state.json) */
133
+ /** Offline sessions from previous runs (loaded from runtime topology) */
135
134
  private offlineSessions;
136
135
  /** Cross-instance discovery and claim/heartbeat ownership */
137
- private instanceDirectory;
138
136
  private tmuxRuntimeManager;
139
137
  private sessionBootstrap;
140
138
  private sessionTmuxTargets;
@@ -147,7 +145,9 @@ export declare class Multiplexer {
147
145
  private lastStatuslineSnapshotKey;
148
146
  private desktopStateSnapshot;
149
147
  private dashboardSessionsCache;
148
+ private dashboardTeammatesCache;
150
149
  private dashboardServicesCache;
150
+ private dashboardRawWorktreeGroupsCache;
151
151
  private dashboardWorktreeGroupsCache;
152
152
  private dashboardOperationFailuresCache;
153
153
  private dashboardMainCheckoutInfoCache;
@@ -161,14 +161,13 @@ export declare class Multiplexer {
161
161
  get sessionCount(): number;
162
162
  get activeSession(): ManagedSession | null;
163
163
  private publishAlert;
164
+ private resolveSessionAlertDisplayContext;
164
165
  private deriveSessionSemanticState;
165
166
  private registerManagedSession;
166
167
  private handleSessionRuntimeEvent;
167
168
  private buildTmuxWindowMetadata;
168
169
  private syncTmuxWindowMetadata;
169
170
  private updateContextWatcherSessions;
170
- private createTaskDispatcher;
171
- private createOrchestrationDispatcher;
172
171
  private selectLinkedOrOpenTarget;
173
172
  run(opts: {
174
173
  command: string;
@@ -178,7 +177,7 @@ export declare class Multiplexer {
178
177
  runProjectService(): Promise<number>;
179
178
  /**
180
179
  * Resume previous sessions using each tool's native resume mechanism.
181
- * Reads state.json and spawns sessions with resumeArgs instead of normal args.
180
+ * Reads runtime topology and spawns sessions with resumeArgs instead of normal args.
182
181
  */
183
182
  resumeSessions(toolFilter?: string): Promise<number>;
184
183
  /**
@@ -186,7 +185,11 @@ export declare class Multiplexer {
186
185
  * Starts fresh sessions but with context from the previous conversation.
187
186
  */
188
187
  restoreSessions(toolFilter?: string): Promise<number>;
189
- createSession(command: string, args: string[], preambleFlag?: string[], toolConfigKey?: string, extraPreamble?: string, sessionIdFlag?: string[], worktreePath?: string, backendSessionIdOverride?: string, sessionIdOverride?: string, detachedInTmux?: boolean, suppressStartupPreamble?: boolean): SessionTransport;
188
+ createSession(command: string, args: string[], preambleFlag?: string[], toolConfigKey?: string, extraPreamble?: string, sessionIdFlag?: string[], worktreePath?: string, backendSessionIdOverride?: string, sessionIdOverride?: string, detachedInTmux?: boolean, suppressStartupPreamble?: boolean, team?: SessionTeamMetadata): SessionTransport;
189
+ recordSessionBackendSessionId(sessionId: string, backendSessionId: string): {
190
+ sessionId: string;
191
+ backendSessionId: string;
192
+ };
190
193
  /**
191
194
  * Migrate an agent from its current worktree to a target worktree.
192
195
  * Copies history and context, kills the old session, starts a new one
@@ -1,20 +1,17 @@
1
- import { randomUUID } from "node:crypto";
2
1
  import { HotkeyHandler } from "../hotkeys.js";
3
2
  import { Dashboard } from "../dashboard/index.js";
4
3
  import { DashboardOverlayState, DashboardState } from "../dashboard/state.js";
5
4
  import { ContextWatcher } from "../context/context-bridge.js";
6
5
  import { loadConfig } from "../config.js";
7
6
  import { findMainRepo } from "../worktree.js";
8
- import { TaskDispatcher } from "../task-dispatcher.js";
9
7
  import { TerminalHost } from "../terminal-host.js";
10
8
  import { AgentTracker } from "../agent-tracker.js";
11
- import { InstanceDirectory } from "../instance-directory.js";
12
9
  import { TmuxRuntimeManager } from "../tmux/runtime-manager.js";
13
10
  import { loadMetadataState } from "../metadata-store.js";
14
11
  import { SessionBootstrapService } from "../session-bootstrap.js";
15
12
  import { createThread, appendMessage, updateThread } from "../threads.js";
16
- import { OrchestrationDispatcher } from "../orchestration-dispatcher.js";
17
13
  import { ProjectEventBus } from "../project-events.js";
14
+ import { contextualizeAlertInput, mergeDisplayContext, metadataDisplayContext, } from "../alert-display.js";
18
15
  import { deriveSessionSemantics } from "../session-semantics.js";
19
16
  import { listNotifications } from "../notifications.js";
20
17
  import { DashboardUiStateStore } from "../dashboard/ui-state-store.js";
@@ -91,12 +88,19 @@ export class Multiplexer {
91
88
  planEntries = [];
92
89
  planIndex = 0;
93
90
  notificationPanelState = null;
91
+ teammatePickerState = null;
94
92
  dashboardPendingActions = new DashboardPendingActions(() => {
95
93
  if (this.mode === "dashboard") {
94
+ void this.refreshDashboardModelFromService(true).then(() => {
95
+ if (this.mode === "dashboard") {
96
+ this.renderCurrentDashboardView();
97
+ }
98
+ });
96
99
  this.renderCurrentDashboardView();
97
100
  }
98
101
  });
99
102
  stoppingSessionIds = new Set();
103
+ unpreservedExitedSessionIds = new Set();
100
104
  graveyardAfterStopSessionIds = new Set();
101
105
  dashboardQuickJumpTimeout = null;
102
106
  /** Quick switcher overlay state */
@@ -105,7 +109,6 @@ export class Multiplexer {
105
109
  /** MRU order of session IDs (most recent first) */
106
110
  sessionMRU = [];
107
111
  /** Sessions confirmed registered in the instance registry (for claim detection) */
108
- confirmedRegistered = new Set();
109
112
  /** The focused worktree path on the dashboard (undefined = main repo) */
110
113
  dashboardState = new DashboardState();
111
114
  dashboardUiStateStore = new DashboardUiStateStore();
@@ -117,11 +120,8 @@ export class Multiplexer {
117
120
  dashboardPendingExpandedViewportCount = 0;
118
121
  dashboardModelVersion = 0;
119
122
  agentTracker = new AgentTracker();
120
- instanceId = randomUUID();
121
123
  contextWatcher = new ContextWatcher((target) => this.tmuxRuntimeManager.captureTarget(target, { startLine: -120 }));
122
- taskDispatcher = null;
123
- orchestrationDispatcher = null;
124
- /** Maps session ID → toolConfigKey for state saving */
124
+ /** Maps session ID → toolConfigKey for topology persistence */
125
125
  sessionToolKeys = new Map();
126
126
  /** Maps session ID → original args (before preamble injection) */
127
127
  sessionOriginalArgs = new Map();
@@ -131,10 +131,9 @@ export class Multiplexer {
131
131
  sessionRoles = new Map();
132
132
  /** Maps session ID → user-provided stable label */
133
133
  sessionLabels = new Map();
134
- /** Offline sessions from previous runs (loaded from state.json) */
134
+ /** Offline sessions from previous runs (loaded from runtime topology) */
135
135
  offlineSessions = [];
136
136
  /** Cross-instance discovery and claim/heartbeat ownership */
137
- instanceDirectory = new InstanceDirectory();
138
137
  tmuxRuntimeManager = new TmuxRuntimeManager();
139
138
  sessionBootstrap = new SessionBootstrapService({
140
139
  tmuxRuntimeManager: this.tmuxRuntimeManager,
@@ -153,7 +152,9 @@ export class Multiplexer {
153
152
  lastStatuslineSnapshotKey = null;
154
153
  desktopStateSnapshot = null;
155
154
  dashboardSessionsCache = [];
155
+ dashboardTeammatesCache = [];
156
156
  dashboardServicesCache = [];
157
+ dashboardRawWorktreeGroupsCache = [];
157
158
  dashboardWorktreeGroupsCache = [];
158
159
  dashboardOperationFailuresCache = [];
159
160
  dashboardMainCheckoutInfoCache = { name: "Main Checkout", branch: "" };
@@ -176,20 +177,12 @@ export class Multiplexer {
176
177
  this.hotkeys = new HotkeyHandler((action) => this.handleAction(action));
177
178
  this.dashboard = new Dashboard();
178
179
  this.runtimeSync = new MultiplexerRuntimeSync({
179
- instanceDirectory: this.instanceDirectory,
180
- instanceId: this.instanceId,
181
180
  cwd: process.cwd(),
182
181
  getMode: () => this.mode,
183
- getConfirmedRegistered: () => this.confirmedRegistered,
184
- setConfirmedRegistered: (value) => {
185
- this.confirmedRegistered = value;
186
- },
187
- getInstanceSessionRefs: () => this.getInstanceSessionRefs(),
188
- syncSessionsFromState: () => this.syncSessionsFromState(),
189
- loadOfflineSessions: () => this.loadOfflineSessions(),
182
+ syncSessionsFromTopology: () => this.syncSessionsFromTopology(),
183
+ loadOfflineTopologySessions: () => this.loadOfflineTopologySessions(),
190
184
  renderCurrentDashboardView: () => this.renderCurrentDashboardView(),
191
185
  renderDashboard: () => this.renderDashboard(),
192
- handleSessionClaimed: (sessionId) => this.handleSessionClaimed(sessionId),
193
186
  writeStatuslineFile: () => this.writeStatuslineFile(),
194
187
  });
195
188
  this.eventBus.subscribe((event) => {
@@ -232,7 +225,42 @@ export class Multiplexer {
232
225
  return this.sessions[this.activeIndex] ?? null;
233
226
  }
234
227
  publishAlert(input) {
235
- this.eventBus.publishAlert(input);
228
+ const displayContext = this.resolveSessionAlertDisplayContext(input.sessionId, input.worktreePath);
229
+ this.eventBus.publishAlert(contextualizeAlertInput(input, displayContext));
230
+ }
231
+ resolveSessionAlertDisplayContext(sessionId, worktreePath) {
232
+ if (!sessionId)
233
+ return worktreePath ? { worktreePath } : undefined;
234
+ let context = {};
235
+ try {
236
+ context = metadataDisplayContext(loadMetadataState().sessions[sessionId]);
237
+ }
238
+ catch { }
239
+ const session = this.dashboardSessionsCache.find((entry) => entry.id === sessionId) ??
240
+ this.sessions.find((entry) => entry.id === sessionId) ??
241
+ this.offlineSessions.find((entry) => entry.id === sessionId);
242
+ const service = this.dashboardServicesCache.find((entry) => entry.id === sessionId) ??
243
+ this.offlineServices?.find?.((entry) => entry.id === sessionId);
244
+ const sessionAny = session;
245
+ const serviceAny = service;
246
+ const resolvedWorktreePath = worktreePath ?? this.sessionWorktreePaths.get(sessionId) ?? sessionAny?.worktreePath ?? serviceAny?.worktreePath;
247
+ const group = resolvedWorktreePath
248
+ ? this.dashboardWorktreeGroupsCache.find((entry) => entry.path === resolvedWorktreePath)
249
+ : this.dashboardWorktreeGroupsCache.find((entry) => !entry.path);
250
+ const serviceCommand = serviceAny?.launchCommandLine ?? serviceAny?.command ?? "";
251
+ const liveContext = {
252
+ label: this.getSessionLabel(sessionId) ??
253
+ sessionAny?.label ??
254
+ serviceAny?.label ??
255
+ (serviceCommand ? this.serviceLabelForCommand?.(serviceCommand) : undefined) ??
256
+ sessionAny?.command,
257
+ command: sessionAny?.command ?? serviceAny?.command ?? serviceAny?.launchCommandLine,
258
+ worktreePath: resolvedWorktreePath,
259
+ worktreeName: sessionAny?.worktreeName ?? serviceAny?.worktreeName ?? group?.name,
260
+ branch: sessionAny?.worktreeBranch ?? serviceAny?.worktreeBranch ?? group?.branch,
261
+ };
262
+ context = mergeDisplayContext(context, liveContext);
263
+ return Object.values(context).some((value) => value !== undefined) ? context : undefined;
236
264
  }
237
265
  deriveSessionSemanticState(sessionId, status) {
238
266
  const derived = loadMetadataState().sessions[sessionId]?.derived;
@@ -245,11 +273,11 @@ export class Multiplexer {
245
273
  unseenCount: derived?.unseenCount,
246
274
  notificationUnreadCount: unreadNotifications.length,
247
275
  latestNotification,
248
- hasActiveTask: Boolean(this.taskDispatcher?.getSessionTask(sessionId)),
276
+ hasActiveTask: false,
249
277
  });
250
278
  }
251
- registerManagedSession(session, args, toolConfigKey, worktreePath, role, startTime) {
252
- return registerManagedSessionImpl(this, session, args, toolConfigKey, worktreePath, role, startTime);
279
+ registerManagedSession(session, args, toolConfigKey, worktreePath, role, startTime, team) {
280
+ return registerManagedSessionImpl(this, session, args, toolConfigKey, worktreePath, role, startTime, team);
253
281
  }
254
282
  handleSessionRuntimeEvent(runtime, event) {
255
283
  handleSessionRuntimeEventImpl(this, runtime, event);
@@ -263,16 +291,6 @@ export class Multiplexer {
263
291
  updateContextWatcherSessions() {
264
292
  updateContextWatcherSessionsImpl(this);
265
293
  }
266
- createTaskDispatcher() {
267
- return new TaskDispatcher((id) => this.sessions.find((s) => s.id === id), (id) => this.sessionToolKeys.get(id), (id) => this.sessionRoles.get(id), (id) => this.deriveSessionSemanticState(id).runtime.canReceiveInput, (session, prompt) => {
268
- void this.writeAgentInput(session.id, prompt, undefined, undefined, true);
269
- });
270
- }
271
- createOrchestrationDispatcher() {
272
- return new OrchestrationDispatcher((id) => this.sessions.find((s) => s.id === id), (id) => this.deriveSessionSemanticState(id).runtime.canReceiveInput, (session, prompt) => {
273
- void this.writeAgentInput(session.id, prompt, undefined, undefined, true);
274
- });
275
- }
276
294
  selectLinkedOrOpenTarget(target) {
277
295
  selectLinkedOrOpenTarget(this.tmuxRuntimeManager, target);
278
296
  }
@@ -287,7 +305,7 @@ export class Multiplexer {
287
305
  }
288
306
  /**
289
307
  * Resume previous sessions using each tool's native resume mechanism.
290
- * Reads state.json and spawns sessions with resumeArgs instead of normal args.
308
+ * Reads runtime topology and spawns sessions with resumeArgs instead of normal args.
291
309
  */
292
310
  async resumeSessions(toolFilter) {
293
311
  return resumeSessionsImpl(this, toolFilter);
@@ -299,8 +317,11 @@ export class Multiplexer {
299
317
  async restoreSessions(toolFilter) {
300
318
  return restoreSessionsImpl(this, toolFilter);
301
319
  }
302
- createSession(command, args, preambleFlag, toolConfigKey, extraPreamble, sessionIdFlag, worktreePath, backendSessionIdOverride, sessionIdOverride, detachedInTmux = false, suppressStartupPreamble = false) {
303
- return createSessionImpl(this, command, args, preambleFlag, toolConfigKey, extraPreamble, sessionIdFlag, worktreePath, backendSessionIdOverride, sessionIdOverride, detachedInTmux, suppressStartupPreamble);
320
+ createSession(command, args, preambleFlag, toolConfigKey, extraPreamble, sessionIdFlag, worktreePath, backendSessionIdOverride, sessionIdOverride, detachedInTmux = false, suppressStartupPreamble = false, team) {
321
+ return createSessionImpl(this, command, args, preambleFlag, toolConfigKey, extraPreamble, sessionIdFlag, worktreePath, backendSessionIdOverride, sessionIdOverride, detachedInTmux, suppressStartupPreamble, team);
322
+ }
323
+ recordSessionBackendSessionId(sessionId, backendSessionId) {
324
+ return runtimeLifecycleMethods.recordSessionBackendSessionId.call(this, sessionId, backendSessionId);
304
325
  }
305
326
  /**
306
327
  * Migrate an agent from its current worktree to a target worktree.
@@ -371,17 +392,17 @@ export class Multiplexer {
371
392
  await this.contextWatcher.syncNow(sourceSessionId).catch(() => { });
372
393
  const sourceSnapshot = this.sessionBootstrap.readForkSourceSnapshot(sourceSessionId);
373
394
  this.sessionBootstrap.seedForkArtifacts(sourceSessionId, targetSessionId, targetToolConfigKey);
395
+ const codexContinuityPreamble = !toolCfg.preambleFlag
396
+ ? this.sessionBootstrap.buildCodexForkContinuityPreamble(sourceSessionId, targetSessionId, sourceSnapshot, instruction)
397
+ : undefined;
374
398
  const extraPreamble = [
375
399
  this.sessionBootstrap.buildForkPreamble(sourceSessionId, targetSessionId),
376
- instruction?.trim(),
400
+ codexContinuityPreamble ? undefined : instruction?.trim(),
401
+ codexContinuityPreamble,
377
402
  ]
378
403
  .filter(Boolean)
379
404
  .join("\n\n");
380
405
  const transport = this.createSession(toolCfg.command, [...toolCfg.args, ...extraArgs], toolCfg.preambleFlag, targetToolConfigKey, extraPreamble, toolCfg.sessionIdFlag, targetWorktree, undefined, targetSessionId, !toolCfg.preambleFlag);
381
- if (!toolCfg.preambleFlag) {
382
- const kickoff = this.sessionBootstrap.buildCodexForkKickoffPrompt(sourceSessionId, targetSessionId, sourceSnapshot, instruction);
383
- await this.sessionBootstrap.deliverDetachedCodexKickoffPrompt(targetSessionId, kickoff, 1800);
384
- }
385
406
  this.agentTracker.emit(sourceSessionId, {
386
407
  kind: "status",
387
408
  message: `Forked ${targetSessionId} from this session`,