aimux-cli 0.1.16 → 0.1.19

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 (357) hide show
  1. package/README.md +184 -67
  2. package/bin/aimux-dev +10 -0
  3. package/dist/agent-events.js +0 -1
  4. package/dist/agent-output-parser.js +0 -1
  5. package/dist/agent-prompt-delivery.js +0 -1
  6. package/dist/agent-tracker.js +0 -1
  7. package/dist/agent-watcher.js +0 -1
  8. package/dist/alert-display.d.ts +21 -0
  9. package/dist/alert-display.js +85 -0
  10. package/dist/atomic-write.js +0 -1
  11. package/dist/attachment-store.d.ts +0 -7
  12. package/dist/attachment-store.js +2 -87
  13. package/dist/builtin-metadata-watchers.js +4 -5
  14. package/dist/claude-hooks.d.ts +1 -0
  15. package/dist/claude-hooks.js +25 -1
  16. package/dist/config.d.ts +19 -13
  17. package/dist/config.js +28 -15
  18. package/dist/connection-targets.d.ts +8 -0
  19. package/dist/connection-targets.js +27 -0
  20. package/dist/context/compactor.js +0 -1
  21. package/dist/context/context-bridge.js +0 -1
  22. package/dist/context/context-file.js +0 -1
  23. package/dist/context/history.js +0 -1
  24. package/dist/credentials.d.ts +12 -0
  25. package/dist/credentials.js +48 -0
  26. package/dist/daemon.d.ts +23 -0
  27. package/dist/daemon.js +391 -67
  28. package/dist/dashboard/command-spec.js +0 -1
  29. package/dist/dashboard/feedback.js +0 -1
  30. package/dist/dashboard/index.d.ts +13 -10
  31. package/dist/dashboard/index.js +3 -27
  32. package/dist/dashboard/operation-failures.js +0 -1
  33. package/dist/dashboard/order.d.ts +22 -0
  34. package/dist/dashboard/order.js +54 -0
  35. package/dist/dashboard/pending-actions.d.ts +39 -10
  36. package/dist/dashboard/pending-actions.js +166 -37
  37. package/dist/dashboard/quick-jump.d.ts +2 -1
  38. package/dist/dashboard/quick-jump.js +7 -5
  39. package/dist/dashboard/runtime-evidence.js +0 -1
  40. package/dist/dashboard/session-actions.d.ts +4 -4
  41. package/dist/dashboard/session-actions.js +1 -2
  42. package/dist/dashboard/session-registry.d.ts +4 -3
  43. package/dist/dashboard/session-registry.js +16 -51
  44. package/dist/dashboard/sort.js +0 -1
  45. package/dist/dashboard/state.d.ts +1 -1
  46. package/dist/dashboard/state.js +0 -1
  47. package/dist/dashboard/targets.js +0 -1
  48. package/dist/dashboard/ui-state-store.d.ts +16 -1
  49. package/dist/dashboard/ui-state-store.js +73 -3
  50. package/dist/debug-state.d.ts +97 -0
  51. package/dist/debug-state.js +540 -0
  52. package/dist/debug.d.ts +38 -0
  53. package/dist/debug.js +219 -16
  54. package/dist/default-plugins/gh-pr-context.d.ts +2 -1
  55. package/dist/default-plugins/gh-pr-context.js +17 -12
  56. package/dist/default-plugins/transcript-length.js +15 -3
  57. package/dist/fast-control.js +37 -20
  58. package/dist/hotkeys.js +0 -1
  59. package/dist/http-client.js +31 -3
  60. package/dist/key-parser.js +0 -1
  61. package/dist/last-used.js +0 -1
  62. package/dist/local-ui-server.d.ts +22 -0
  63. package/dist/local-ui-server.js +185 -0
  64. package/dist/login-flow.d.ts +7 -0
  65. package/dist/login-flow.js +119 -0
  66. package/dist/main.js +821 -152
  67. package/dist/managed-launch-env.js +14 -1
  68. package/dist/metadata-server.d.ts +36 -36
  69. package/dist/metadata-server.js +638 -138
  70. package/dist/metadata-store.d.ts +4 -1
  71. package/dist/metadata-store.js +30 -3
  72. package/dist/multiplexer/agent-io-methods.d.ts +2 -10
  73. package/dist/multiplexer/agent-io-methods.js +12 -44
  74. package/dist/multiplexer/archives.js +8 -10
  75. package/dist/multiplexer/dashboard-actions-methods.js +0 -1
  76. package/dist/multiplexer/dashboard-control.js +45 -14
  77. package/dist/multiplexer/dashboard-interaction.d.ts +8 -2
  78. package/dist/multiplexer/dashboard-interaction.js +187 -29
  79. package/dist/multiplexer/dashboard-model.d.ts +10 -3
  80. package/dist/multiplexer/dashboard-model.js +417 -36
  81. package/dist/multiplexer/dashboard-ops.d.ts +9 -7
  82. package/dist/multiplexer/dashboard-ops.js +178 -69
  83. package/dist/multiplexer/dashboard-state-methods.d.ts +2 -1
  84. package/dist/multiplexer/dashboard-state-methods.js +3 -3
  85. package/dist/multiplexer/dashboard-tail-methods.d.ts +22 -10
  86. package/dist/multiplexer/dashboard-tail-methods.js +164 -48
  87. package/dist/multiplexer/dashboard-view-methods.d.ts +1 -1
  88. package/dist/multiplexer/dashboard-view-methods.js +23 -9
  89. package/dist/multiplexer/graveyard-view-model.d.ts +9 -1
  90. package/dist/multiplexer/graveyard-view-model.js +39 -1
  91. package/dist/multiplexer/index.d.ts +15 -12
  92. package/dist/multiplexer/index.js +64 -44
  93. package/dist/multiplexer/navigation.js +0 -1
  94. package/dist/multiplexer/notifications.js +107 -25
  95. package/dist/multiplexer/persistence-methods.d.ts +31 -4
  96. package/dist/multiplexer/persistence-methods.js +304 -309
  97. package/dist/multiplexer/runtime-lifecycle-methods.d.ts +8 -10
  98. package/dist/multiplexer/runtime-lifecycle-methods.js +104 -87
  99. package/dist/multiplexer/runtime-state.d.ts +8 -10
  100. package/dist/multiplexer/runtime-state.js +82 -146
  101. package/dist/multiplexer/runtime-sync.d.ts +2 -10
  102. package/dist/multiplexer/runtime-sync.js +3 -19
  103. package/dist/multiplexer/service-state-snapshot.d.ts +2 -4
  104. package/dist/multiplexer/service-state-snapshot.js +4 -52
  105. package/dist/multiplexer/services.d.ts +1 -0
  106. package/dist/multiplexer/services.js +55 -6
  107. package/dist/multiplexer/session-capture.d.ts +1 -0
  108. package/dist/multiplexer/session-capture.js +23 -0
  109. package/dist/multiplexer/session-launch.d.ts +4 -1
  110. package/dist/multiplexer/session-launch.js +152 -64
  111. package/dist/multiplexer/session-runtime-core.d.ts +8 -20
  112. package/dist/multiplexer/session-runtime-core.js +40 -136
  113. package/dist/multiplexer/subscreens.js +10 -4
  114. package/dist/multiplexer/tool-picker.js +0 -1
  115. package/dist/multiplexer/worktree-graveyard.d.ts +0 -1
  116. package/dist/multiplexer/worktree-graveyard.js +15 -17
  117. package/dist/multiplexer/worktrees.js +96 -41
  118. package/dist/notification-context.js +8 -5
  119. package/dist/notifications.js +163 -102
  120. package/dist/notify.d.ts +4 -0
  121. package/dist/notify.js +14 -1
  122. package/dist/orchestration-actions.js +0 -1
  123. package/dist/orchestration-routing.js +0 -1
  124. package/dist/orchestration.js +0 -1
  125. package/dist/osc-notifications.js +0 -1
  126. package/dist/paths.d.ts +32 -7
  127. package/dist/paths.js +82 -59
  128. package/dist/pending-actions.d.ts +5 -0
  129. package/dist/pending-actions.js +13 -0
  130. package/dist/plugin-runtime.js +9 -3
  131. package/dist/project-events.d.ts +1 -10
  132. package/dist/project-events.js +0 -11
  133. package/dist/project-scanner.d.ts +2 -3
  134. package/dist/project-scanner.js +58 -130
  135. package/dist/project-service-manifest.d.ts +1 -3
  136. package/dist/project-service-manifest.js +1 -4
  137. package/dist/recency.js +0 -1
  138. package/dist/recorder.js +0 -1
  139. package/dist/relay-client.d.ts +30 -0
  140. package/dist/relay-client.js +190 -0
  141. package/dist/remote-access.d.ts +16 -0
  142. package/dist/remote-access.js +90 -0
  143. package/dist/runtime-core/exchange-derived.d.ts +2 -0
  144. package/dist/runtime-core/exchange-derived.js +153 -0
  145. package/dist/runtime-core/exchange-import.d.ts +24 -0
  146. package/dist/runtime-core/exchange-import.js +317 -0
  147. package/dist/runtime-core/exchange-store.d.ts +157 -0
  148. package/dist/runtime-core/exchange-store.js +452 -0
  149. package/dist/runtime-core/topology-services.d.ts +38 -0
  150. package/dist/runtime-core/topology-services.js +170 -0
  151. package/dist/runtime-core/topology-sessions.d.ts +52 -0
  152. package/dist/runtime-core/topology-sessions.js +238 -0
  153. package/dist/runtime-core/topology-store.d.ts +171 -0
  154. package/dist/runtime-core/topology-store.js +419 -0
  155. package/dist/runtime-core/topology-worktrees.d.ts +60 -0
  156. package/dist/runtime-core/topology-worktrees.js +199 -0
  157. package/dist/runtime-migration.d.ts +69 -0
  158. package/dist/runtime-migration.js +398 -0
  159. package/dist/session-bootstrap.d.ts +8 -6
  160. package/dist/session-bootstrap.js +51 -159
  161. package/dist/session-runtime.d.ts +2 -0
  162. package/dist/session-runtime.js +1 -1
  163. package/dist/session-semantics.d.ts +12 -4
  164. package/dist/session-semantics.js +14 -1
  165. package/dist/shell-args.js +0 -1
  166. package/dist/shell-hooks.js +32 -11
  167. package/dist/shell-state.d.ts +2 -0
  168. package/dist/shell-state.js +26 -2
  169. package/dist/status-detector.js +0 -1
  170. package/dist/statusline-model.d.ts +10 -2
  171. package/dist/statusline-model.js +106 -31
  172. package/dist/task-workflow.d.ts +6 -9
  173. package/dist/task-workflow.js +37 -85
  174. package/dist/tasks.d.ts +6 -33
  175. package/dist/tasks.js +46 -89
  176. package/dist/team.d.ts +29 -0
  177. package/dist/team.js +40 -1
  178. package/dist/terminal-host.js +0 -1
  179. package/dist/threads.d.ts +6 -35
  180. package/dist/threads.js +89 -99
  181. package/dist/tmux/doctor.js +0 -1
  182. package/dist/tmux/inbox-popup.js +37 -16
  183. package/dist/tmux/runtime-manager.d.ts +3 -0
  184. package/dist/tmux/runtime-manager.js +21 -5
  185. package/dist/tmux/session-transport.js +0 -1
  186. package/dist/tmux/statusline-cache.js +0 -1
  187. package/dist/tmux/statusline.js +49 -10
  188. package/dist/tmux/switcher.js +0 -1
  189. package/dist/tmux/window-open.js +1 -3
  190. package/dist/tool-output-watchers.d.ts +0 -18
  191. package/dist/tool-output-watchers.js +0 -323
  192. package/dist/tui/render/box.js +0 -1
  193. package/dist/tui/render/text.js +0 -1
  194. package/dist/tui/screens/dashboard-renderers.js +37 -26
  195. package/dist/tui/screens/overlay-renderers.d.ts +2 -0
  196. package/dist/tui/screens/overlay-renderers.js +37 -2
  197. package/dist/tui/screens/subscreen-renderers.js +7 -1
  198. package/dist/workflow.js +0 -1
  199. package/dist/worktree.js +17 -1
  200. package/dist-ui/_expo/static/css/web-30453ede1678c16acb08b97e83e8646d.css +1 -0
  201. package/dist-ui/_expo/static/js/web/entry-477c745b2adc79367a4380ecf07d9ff6.js +14620 -0
  202. package/dist-ui/assets/assets/images/icon.a5413dcd2e811c9f2317d01a28118d8a.png +0 -0
  203. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
  204. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
  205. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
  206. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
  207. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
  208. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
  209. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
  210. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
  211. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
  212. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
  213. package/dist-ui/assets/node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
  214. package/dist-ui/assets/node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
  215. package/dist-ui/assets/node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
  216. package/dist-ui/assets/node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
  217. package/dist-ui/assets/node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
  218. package/dist-ui/assets/node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
  219. package/dist-ui/assets/node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
  220. package/dist-ui/assets/node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
  221. package/dist-ui/favicon.ico +0 -0
  222. package/dist-ui/index.html +38 -0
  223. package/dist-ui/metadata.json +1 -0
  224. package/package.json +29 -12
  225. package/dist/agent-events.js.map +0 -1
  226. package/dist/agent-message-parts.d.ts +0 -17
  227. package/dist/agent-message-parts.js +0 -31
  228. package/dist/agent-message-parts.js.map +0 -1
  229. package/dist/agent-output-parser.js.map +0 -1
  230. package/dist/agent-prompt-delivery.js.map +0 -1
  231. package/dist/agent-tracker.js.map +0 -1
  232. package/dist/agent-watcher.js.map +0 -1
  233. package/dist/atomic-write.js.map +0 -1
  234. package/dist/attachment-store.js.map +0 -1
  235. package/dist/builtin-metadata-watchers.js.map +0 -1
  236. package/dist/claude-hooks.js.map +0 -1
  237. package/dist/config.js.map +0 -1
  238. package/dist/context/compactor.js.map +0 -1
  239. package/dist/context/context-bridge.js.map +0 -1
  240. package/dist/context/context-file.js.map +0 -1
  241. package/dist/context/history.js.map +0 -1
  242. package/dist/daemon.js.map +0 -1
  243. package/dist/dashboard/command-spec.js.map +0 -1
  244. package/dist/dashboard/feedback.js.map +0 -1
  245. package/dist/dashboard/index.js.map +0 -1
  246. package/dist/dashboard/operation-failures.js.map +0 -1
  247. package/dist/dashboard/pending-actions.js.map +0 -1
  248. package/dist/dashboard/quick-jump.js.map +0 -1
  249. package/dist/dashboard/runtime-evidence.js.map +0 -1
  250. package/dist/dashboard/session-actions.js.map +0 -1
  251. package/dist/dashboard/session-registry.js.map +0 -1
  252. package/dist/dashboard/sort.js.map +0 -1
  253. package/dist/dashboard/state.js.map +0 -1
  254. package/dist/dashboard/targets.js.map +0 -1
  255. package/dist/dashboard/ui-state-store.js.map +0 -1
  256. package/dist/debug.js.map +0 -1
  257. package/dist/default-plugins/gh-pr-context.js.map +0 -1
  258. package/dist/default-plugins/transcript-length.js.map +0 -1
  259. package/dist/fast-control.js.map +0 -1
  260. package/dist/hotkeys.js.map +0 -1
  261. package/dist/http-client.js.map +0 -1
  262. package/dist/instance-directory.d.ts +0 -32
  263. package/dist/instance-directory.js +0 -82
  264. package/dist/instance-directory.js.map +0 -1
  265. package/dist/instance-registry.d.ts +0 -39
  266. package/dist/instance-registry.js +0 -208
  267. package/dist/instance-registry.js.map +0 -1
  268. package/dist/key-parser.js.map +0 -1
  269. package/dist/last-used.js.map +0 -1
  270. package/dist/main.js.map +0 -1
  271. package/dist/managed-launch-env.js.map +0 -1
  272. package/dist/metadata-server.js.map +0 -1
  273. package/dist/metadata-store.js.map +0 -1
  274. package/dist/multiplexer/agent-io-methods.js.map +0 -1
  275. package/dist/multiplexer/archives.js.map +0 -1
  276. package/dist/multiplexer/dashboard-actions-methods.js.map +0 -1
  277. package/dist/multiplexer/dashboard-control.js.map +0 -1
  278. package/dist/multiplexer/dashboard-interaction.js.map +0 -1
  279. package/dist/multiplexer/dashboard-model.js.map +0 -1
  280. package/dist/multiplexer/dashboard-ops.js.map +0 -1
  281. package/dist/multiplexer/dashboard-state-methods.js.map +0 -1
  282. package/dist/multiplexer/dashboard-tail-methods.js.map +0 -1
  283. package/dist/multiplexer/dashboard-view-methods.js.map +0 -1
  284. package/dist/multiplexer/graveyard-view-model.js.map +0 -1
  285. package/dist/multiplexer/index.js.map +0 -1
  286. package/dist/multiplexer/navigation.js.map +0 -1
  287. package/dist/multiplexer/notifications.js.map +0 -1
  288. package/dist/multiplexer/persistence-methods.js.map +0 -1
  289. package/dist/multiplexer/runtime-lifecycle-methods.js.map +0 -1
  290. package/dist/multiplexer/runtime-state.js.map +0 -1
  291. package/dist/multiplexer/runtime-sync.js.map +0 -1
  292. package/dist/multiplexer/service-state-snapshot.js.map +0 -1
  293. package/dist/multiplexer/services.js.map +0 -1
  294. package/dist/multiplexer/session-actions.d.ts +0 -40
  295. package/dist/multiplexer/session-actions.js +0 -110
  296. package/dist/multiplexer/session-actions.js.map +0 -1
  297. package/dist/multiplexer/session-launch.js.map +0 -1
  298. package/dist/multiplexer/session-runtime-core.js.map +0 -1
  299. package/dist/multiplexer/subscreens.js.map +0 -1
  300. package/dist/multiplexer/tool-picker.js.map +0 -1
  301. package/dist/multiplexer/worktree-graveyard.js.map +0 -1
  302. package/dist/multiplexer/worktrees.js.map +0 -1
  303. package/dist/notification-context.js.map +0 -1
  304. package/dist/notifications.js.map +0 -1
  305. package/dist/notify.js.map +0 -1
  306. package/dist/orchestration-actions.js.map +0 -1
  307. package/dist/orchestration-dispatcher.d.ts +0 -25
  308. package/dist/orchestration-dispatcher.js +0 -59
  309. package/dist/orchestration-dispatcher.js.map +0 -1
  310. package/dist/orchestration-routing.js.map +0 -1
  311. package/dist/orchestration.js.map +0 -1
  312. package/dist/osc-notifications.js.map +0 -1
  313. package/dist/paths.js.map +0 -1
  314. package/dist/plugin-runtime.js.map +0 -1
  315. package/dist/project-events.js.map +0 -1
  316. package/dist/project-scanner.js.map +0 -1
  317. package/dist/project-service-manifest.js.map +0 -1
  318. package/dist/recency.js.map +0 -1
  319. package/dist/recorder.js.map +0 -1
  320. package/dist/session-bootstrap.js.map +0 -1
  321. package/dist/session-input-operations.d.ts +0 -19
  322. package/dist/session-input-operations.js +0 -46
  323. package/dist/session-input-operations.js.map +0 -1
  324. package/dist/session-message-history.d.ts +0 -27
  325. package/dist/session-message-history.js +0 -105
  326. package/dist/session-message-history.js.map +0 -1
  327. package/dist/session-runtime.js.map +0 -1
  328. package/dist/session-semantics.js.map +0 -1
  329. package/dist/shell-args.js.map +0 -1
  330. package/dist/shell-hooks.js.map +0 -1
  331. package/dist/shell-state.js.map +0 -1
  332. package/dist/status-detector.js.map +0 -1
  333. package/dist/statusline-model.js.map +0 -1
  334. package/dist/task-dispatcher.d.ts +0 -64
  335. package/dist/task-dispatcher.js +0 -213
  336. package/dist/task-dispatcher.js.map +0 -1
  337. package/dist/task-workflow.js.map +0 -1
  338. package/dist/tasks.js.map +0 -1
  339. package/dist/team.js.map +0 -1
  340. package/dist/terminal-host.js.map +0 -1
  341. package/dist/threads.js.map +0 -1
  342. package/dist/tmux/doctor.js.map +0 -1
  343. package/dist/tmux/inbox-popup.js.map +0 -1
  344. package/dist/tmux/runtime-manager.js.map +0 -1
  345. package/dist/tmux/session-transport.js.map +0 -1
  346. package/dist/tmux/statusline-cache.js.map +0 -1
  347. package/dist/tmux/statusline.js.map +0 -1
  348. package/dist/tmux/switcher.js.map +0 -1
  349. package/dist/tmux/window-open.js.map +0 -1
  350. package/dist/tool-output-watchers.js.map +0 -1
  351. package/dist/tui/render/box.js.map +0 -1
  352. package/dist/tui/render/text.js.map +0 -1
  353. package/dist/tui/screens/dashboard-renderers.js.map +0 -1
  354. package/dist/tui/screens/overlay-renderers.js.map +0 -1
  355. package/dist/tui/screens/subscreen-renderers.js.map +0 -1
  356. package/dist/workflow.js.map +0 -1
  357. package/dist/worktree.js.map +0 -1
@@ -32,6 +32,7 @@ export interface SessionContextMetadata {
32
32
  worktreePath?: string;
33
33
  worktreeName?: string;
34
34
  branch?: string;
35
+ transcriptPath?: string;
35
36
  pr?: SessionPrMetadata;
36
37
  repo?: SessionRepoMetadata;
37
38
  }
@@ -57,9 +58,10 @@ export interface SessionDerivedMetadata extends SessionDerivedState {
57
58
  lastEvent?: AgentEvent;
58
59
  events?: AgentEvent[];
59
60
  services?: SessionServiceMetadata[];
61
+ shellCommand?: string;
62
+ shellCommandState?: "running" | "prompt";
60
63
  }
61
64
  export interface SessionMetadata {
62
- label?: string;
63
65
  status?: SessionStatusMetadata;
64
66
  progress?: SessionProgressMetadata;
65
67
  logs?: SessionLogEntry[];
@@ -82,6 +84,7 @@ export declare function loadMetadataState(projectRoot?: string): MetadataState;
82
84
  export declare function saveMetadataState(state: MetadataState, projectRoot?: string): void;
83
85
  export declare function updateSessionMetadata(sessionId: string, updater: (current: SessionMetadata) => SessionMetadata, projectRoot?: string): MetadataState;
84
86
  export declare function clearSessionLogs(sessionId: string, projectRoot?: string): MetadataState;
87
+ export declare function clearSessionTranscriptPath(sessionId: string, projectRoot?: string): MetadataState;
85
88
  export declare function loadMetadataEndpoint(projectRoot?: string): MetadataApiEndpoint | null;
86
89
  export declare function resolveProjectServiceEndpoint(projectRoot?: string): {
87
90
  host: string;
@@ -27,11 +27,24 @@ function loadJson(path, fallback) {
27
27
  function saveJson(path, value) {
28
28
  writeJsonAtomic(path, value);
29
29
  }
30
+ function scrubProjectionAuthorityFields(state) {
31
+ const sessions = state.sessions;
32
+ if (!sessions || typeof sessions !== "object")
33
+ return state;
34
+ for (const session of Object.values(sessions)) {
35
+ if (session && typeof session === "object") {
36
+ delete session.backendSessionId;
37
+ delete session.label;
38
+ }
39
+ }
40
+ return state;
41
+ }
30
42
  export function loadMetadataState(projectRoot) {
31
- return loadJson(metadataPathFor(projectRoot), { version: 1, sessions: {} });
43
+ const state = loadJson(metadataPathFor(projectRoot), { version: 1, sessions: {} });
44
+ return scrubProjectionAuthorityFields(state);
32
45
  }
33
46
  export function saveMetadataState(state, projectRoot) {
34
- saveJson(metadataPathFor(projectRoot), state);
47
+ saveJson(metadataPathFor(projectRoot), scrubProjectionAuthorityFields(state));
35
48
  }
36
49
  export function updateSessionMetadata(sessionId, updater, projectRoot) {
37
50
  const state = loadMetadataState(projectRoot);
@@ -50,6 +63,21 @@ export function clearSessionLogs(sessionId, projectRoot) {
50
63
  return next;
51
64
  }, projectRoot);
52
65
  }
66
+ export function clearSessionTranscriptPath(sessionId, projectRoot) {
67
+ const state = loadMetadataState(projectRoot);
68
+ const current = state.sessions[sessionId];
69
+ if (!current?.context?.transcriptPath)
70
+ return state;
71
+ const context = { ...current.context };
72
+ delete context.transcriptPath;
73
+ state.sessions[sessionId] = {
74
+ ...current,
75
+ context,
76
+ updatedAt: new Date().toISOString(),
77
+ };
78
+ saveMetadataState(state, projectRoot);
79
+ return state;
80
+ }
53
81
  export function loadMetadataEndpoint(projectRoot) {
54
82
  return loadJson(endpointPathFor(projectRoot), null);
55
83
  }
@@ -82,4 +110,3 @@ export function removeMetadataEndpoint(projectRoot) {
82
110
  }
83
111
  catch { }
84
112
  }
85
- //# sourceMappingURL=metadata-store.js.map
@@ -1,7 +1,6 @@
1
1
  import type { DashboardSession } from "../dashboard/index.js";
2
- import { type MessageKind } from "../threads.js";
2
+ import type { MessageKind } from "../threads.js";
3
3
  export declare const agentIoMethods: {
4
- composeOrchestrationPrompt(this: any, threadId: string, from: string, body: string, kind: MessageKind, title?: string): string;
5
4
  orchestrationWorkflowPressure(this: any, sessionId: string, status?: DashboardSession["status"]): number;
6
5
  deliverOrchestrationMessage(this: any, recipients: string[], threadId: string, from: string, body: string, kind: MessageKind, title?: string, messageId?: string): string[];
7
6
  sendOrchestrationMessage(this: any, input: any): {
@@ -24,17 +23,10 @@ export declare const agentIoMethods: {
24
23
  readStatusHeadline(this: any, sessionId: string): string | undefined;
25
24
  deriveHeadline(this: any, sessionId: string): string | undefined;
26
25
  resolveRunningSession(this: any, sessionId: string): any;
27
- writeTmuxAgentInput(this: any, sessionId: string, transport: any, data: string): void;
28
- normalizeAgentInput(this: any, data: string, submit: boolean, sessionId?: string): string;
29
- paneStillContainsAgentDraft(this: any, target: any, draft: string): boolean;
30
- scheduleTmuxAgentSubmit(this: any, sessionId: string, target: any, draft: string): void;
31
- writeAgentInput(this: any, sessionId: string, data?: string, parts?: any[], clientMessageId?: string, submit?: boolean): Promise<{
32
- sessionId: string;
33
- }>;
34
- readAgentHistory(this: any, sessionId: string, lastN?: number): Promise<any>;
35
26
  interruptAgent(this: any, sessionId: string): Promise<{
36
27
  sessionId: string;
37
28
  }>;
29
+ sendAgentInput(this: any, sessionId: string, text: string): Promise<any>;
38
30
  readAgentOutput(this: any, sessionId: string, startLine?: number): Promise<any>;
39
31
  };
40
32
  export type AgentIoMethods = typeof agentIoMethods;
@@ -1,18 +1,9 @@
1
1
  import { sendDirectMessage, sendThreadMessage } from "../orchestration.js";
2
2
  import { sendHandoff } from "../orchestration-actions.js";
3
3
  import { resolveOrchestrationRecipients } from "../orchestration-routing.js";
4
- import { markMessageDelivered } from "../threads.js";
5
4
  import { stopProjectServices as stopProjectServicesImpl } from "./dashboard-model.js";
6
- import { applyDashboardSessionLabel as applyDashboardSessionLabelImpl, applySessionLabel as applySessionLabelImpl, deriveHeadline as deriveHeadlineImpl, getSessionLabel as getSessionLabelImpl, interruptAgent as interruptAgentImpl, normalizeAgentInput as normalizeAgentInputImpl, paneStillContainsAgentDraft as paneStillContainsAgentDraftImpl, readAgentHistory as readAgentHistoryImpl, readAgentOutput as readAgentOutputImpl, readStatusHeadline as readStatusHeadlineImpl, resolveRunningSession as resolveRunningSessionImpl, scheduleTmuxAgentSubmit as scheduleTmuxAgentSubmitImpl, updateSessionLabel as updateSessionLabelImpl, writeAgentInput as writeAgentInputImpl, writeTmuxAgentInput as writeTmuxAgentInputImpl, } from "./session-runtime-core.js";
5
+ import { applyDashboardSessionLabel as applyDashboardSessionLabelImpl, applySessionLabel as applySessionLabelImpl, deriveHeadline as deriveHeadlineImpl, getSessionLabel as getSessionLabelImpl, readAgentOutput as readAgentOutputImpl, sendAgentInput as sendAgentInputImpl, readStatusHeadline as readStatusHeadlineImpl, resolveRunningSession as resolveRunningSessionImpl, updateSessionLabel as updateSessionLabelImpl, interruptAgent as interruptAgentImpl, } from "./session-runtime-core.js";
7
6
  export const agentIoMethods = {
8
- composeOrchestrationPrompt(threadId, from, body, kind, title) {
9
- const prefix = `[AIMUX MESSAGE ${threadId} from ${from}]`;
10
- const headline = title ? `${title}\n\n` : "";
11
- return (`${prefix} ${headline}${body}\n\n` +
12
- `Read .aimux/threads/${threadId}.json and .aimux/threads/${threadId}.jsonl for context. ` +
13
- `This is a ${kind} message delivered by aimux. ` +
14
- `Check the thread now, then either reply in-thread or briefly acknowledge that no action is needed.`);
15
- },
16
7
  orchestrationWorkflowPressure(sessionId, status) {
17
8
  const semantic = this.deriveSessionSemanticState(sessionId, status);
18
9
  return (semantic.waitingOnMeCount * 5 +
@@ -22,21 +13,14 @@ export const agentIoMethods = {
22
13
  semantic.waitingOnThemCount);
23
14
  },
24
15
  deliverOrchestrationMessage(recipients, threadId, from, body, kind, title, messageId) {
25
- const delivered = [];
26
- for (const recipient of recipients) {
27
- const session = this.sessions.find((candidate) => candidate.id === recipient && !candidate.exited);
28
- if (!session)
29
- continue;
30
- const runtime = this.deriveSessionSemanticState(session.id, session.status).runtime;
31
- if (!runtime.canReceiveInput)
32
- continue;
33
- void this.writeAgentInput(recipient, this.composeOrchestrationPrompt(threadId, from, body, kind, title), undefined, undefined, true);
34
- if (messageId) {
35
- markMessageDelivered(threadId, messageId, recipient);
36
- }
37
- delivered.push(recipient);
38
- }
39
- return delivered;
16
+ void recipients;
17
+ void threadId;
18
+ void from;
19
+ void body;
20
+ void kind;
21
+ void title;
22
+ void messageId;
23
+ return [];
40
24
  },
41
25
  sendOrchestrationMessage(input) {
42
26
  const from = input.from?.trim() || "user";
@@ -156,29 +140,13 @@ export const agentIoMethods = {
156
140
  resolveRunningSession(sessionId) {
157
141
  return resolveRunningSessionImpl(this, sessionId);
158
142
  },
159
- writeTmuxAgentInput(sessionId, transport, data) {
160
- writeTmuxAgentInputImpl(this, sessionId, transport, data);
161
- },
162
- normalizeAgentInput(data, submit, sessionId) {
163
- return normalizeAgentInputImpl(this, data, submit, sessionId);
164
- },
165
- paneStillContainsAgentDraft(target, draft) {
166
- return paneStillContainsAgentDraftImpl(this, target, draft);
167
- },
168
- scheduleTmuxAgentSubmit(sessionId, target, draft) {
169
- scheduleTmuxAgentSubmitImpl(this, sessionId, target, draft);
170
- },
171
- async writeAgentInput(sessionId, data = "", parts, clientMessageId, submit = false) {
172
- return writeAgentInputImpl(this, sessionId, data, parts, clientMessageId, submit);
173
- },
174
- async readAgentHistory(sessionId, lastN) {
175
- return readAgentHistoryImpl(this, sessionId, lastN);
176
- },
177
143
  async interruptAgent(sessionId) {
178
144
  return interruptAgentImpl(this, sessionId);
179
145
  },
146
+ async sendAgentInput(sessionId, text) {
147
+ return sendAgentInputImpl(this, sessionId, text);
148
+ },
180
149
  async readAgentOutput(sessionId, startLine) {
181
150
  return readAgentOutputImpl(this, sessionId, startLine);
182
151
  },
183
152
  };
184
- //# sourceMappingURL=agent-io-methods.js.map
@@ -1,7 +1,7 @@
1
1
  import { mkdirSync, readFileSync, readdirSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { spawnSync } from "node:child_process";
4
- import { getGraveyardPath, getPlansDir } from "../paths.js";
4
+ import { getPlansDir } from "../paths.js";
5
5
  import { debug } from "../debug.js";
6
6
  import { parseKeys } from "../key-parser.js";
7
7
  import { loadLastUsedState } from "../last-used.js";
@@ -11,6 +11,7 @@ import { postToProjectService } from "./dashboard-control.js";
11
11
  import { requestJson } from "../http-client.js";
12
12
  import { resolveProjectServiceEndpoint } from "../metadata-store.js";
13
13
  import { buildGraveyardViewModel, } from "./graveyard-view-model.js";
14
+ import { listTopologySessionStates } from "../runtime-core/topology-sessions.js";
14
15
  export function showGraveyard(host) {
15
16
  host.clearDashboardSubscreens();
16
17
  loadGraveyardEntries(host);
@@ -118,7 +119,9 @@ export function resurrectGraveyardEntry(host, idx) {
118
119
  ? host.mode === "dashboard"
119
120
  ? postToProjectService(host, "/graveyard/worktrees/resurrect", { path: item.entry.path }, { timeoutMs: 10_000 })
120
121
  : host.resurrectGraveyardWorktree(item.entry.path)
121
- : host.resurrectGraveyardSession(item.entry.id);
122
+ : host.mode === "dashboard"
123
+ ? postToProjectService(host, "/graveyard/resurrect", { sessionId: item.entry.id }, { timeoutMs: 10_000 })
124
+ : host.resurrectGraveyardSession(item.entry.id);
122
125
  void promise
123
126
  .then(() => {
124
127
  host.graveyardEntries = host.listGraveyardEntries();
@@ -147,6 +150,8 @@ function refreshGraveyardViewModel(host) {
147
150
  const viewModel = buildGraveyardViewModel({
148
151
  worktrees: host.worktreeGraveyardEntries ?? [],
149
152
  agents: host.graveyardEntries ?? [],
153
+ parentSessions: [...(host.dashboardSessionsCache ?? []), ...(host.sessions ?? []), ...(host.offlineSessions ?? [])],
154
+ teammates: [...(host.dashboardTeammatesCache ?? []), ...(host.sessions ?? []), ...(host.offlineSessions ?? [])],
150
155
  lastUsedById: lastUsedState.items,
151
156
  });
152
157
  host.graveyardViewModel = viewModel;
@@ -190,13 +195,7 @@ async function deleteSelectedGraveyardWorktree(host) {
190
195
  }
191
196
  }
192
197
  function loadGraveyardEntries(host) {
193
- const graveyardPath = getGraveyardPath();
194
- try {
195
- host.graveyardEntries = JSON.parse(readFileSync(graveyardPath, "utf-8"));
196
- }
197
- catch {
198
- host.graveyardEntries = [];
199
- }
198
+ host.graveyardEntries = listTopologySessionStates({ statuses: ["graveyard"] });
200
199
  host.worktreeGraveyardEntries = listWorktreeGraveyardEntries();
201
200
  refreshGraveyardViewModel(host);
202
201
  }
@@ -385,4 +384,3 @@ export function openPlanInEditor(host, path) {
385
384
  host.renderDashboardErrorOverlay();
386
385
  }
387
386
  }
388
- //# sourceMappingURL=archives.js.map
@@ -184,4 +184,3 @@ export const dashboardActionMethods = {
184
184
  handleToolOptionsKeyImpl(this, data);
185
185
  },
186
186
  };
187
- //# sourceMappingURL=dashboard-actions-methods.js.map
@@ -4,7 +4,7 @@ import { join } from "node:path";
4
4
  import { updateNotificationContext } from "../notification-context.js";
5
5
  import { requestJson } from "../http-client.js";
6
6
  import { markLastUsed } from "../last-used.js";
7
- import { loadMetadataState, resolveProjectServiceEndpoint } from "../metadata-store.js";
7
+ import { loadMetadataState, removeMetadataEndpoint, resolveProjectServiceEndpoint } from "../metadata-store.js";
8
8
  import { parseKeys } from "../key-parser.js";
9
9
  import { ensureDaemonRunning, ensureProjectService } from "../daemon.js";
10
10
  import { getProjectStateDir } from "../paths.js";
@@ -13,7 +13,7 @@ import { loadStatusline, renderTmuxStatuslineFromData } from "../tmux/statusline
13
13
  import { openManagedServiceWindow, openManagedSessionWindow } from "../tmux/window-open.js";
14
14
  import { resolveOrchestrationRecipients } from "../orchestration-routing.js";
15
15
  import { sortDashboardEntriesByCreatedAt } from "../dashboard/sort.js";
16
- import { buildDashboardBusyOverlayOutput, buildDashboardErrorOverlayOutput, buildLabelInputOverlayOutput, buildMigratePickerOverlayOutput, buildNotificationPanelOverlayOutput, buildServiceInputOverlayOutput, buildSwitcherOverlayOutput, buildWorktreeListOverlayOutput, buildWorktreeRemoveConfirmOverlayOutput, } from "../tui/screens/overlay-renderers.js";
16
+ import { buildDashboardBusyOverlayOutput, buildDashboardErrorOverlayOutput, buildLabelInputOverlayOutput, buildMigratePickerOverlayOutput, buildNotificationPanelOverlayOutput, buildServiceInputOverlayOutput, buildSwitcherOverlayOutput, buildTeammatePickerOverlayOutput, buildWorktreeListOverlayOutput, buildWorktreeRemoveConfirmOverlayOutput, } from "../tui/screens/overlay-renderers.js";
17
17
  import { buildWorktreeInputOverlayOutput } from "./worktrees.js";
18
18
  import { buildToolOptionsOverlayOutput, buildToolPickerOverlayOutput } from "./tool-picker.js";
19
19
  import { buildThreadReplyOverlayOutput } from "./subscreens.js";
@@ -48,13 +48,13 @@ function primeLiveTmuxFooter(host, target) {
48
48
  }
49
49
  export function updateWorktreeSessions(host) {
50
50
  const allDash = host.getDashboardSessions();
51
- host.dashboardState.worktreeSessions = sortDashboardEntriesByCreatedAt(allDash.filter((s) => {
51
+ host.dashboardState.worktreeSessions = host.dashboardUiStateStore.orderSessionsForWorktree(sortDashboardEntriesByCreatedAt(allDash.filter((s) => {
52
52
  return (s.worktreePath ?? undefined) === host.dashboardState.focusedWorktreePath;
53
- }));
53
+ })), host.dashboardState.focusedWorktreePath);
54
54
  const filteredServices = host.getDashboardServices().filter((service) => {
55
55
  return (service.worktreePath ?? undefined) === host.dashboardState.focusedWorktreePath;
56
56
  });
57
- const worktreeServices = sortDashboardEntriesByCreatedAt(filteredServices);
57
+ const worktreeServices = host.dashboardUiStateStore.orderServicesForWorktree(sortDashboardEntriesByCreatedAt(filteredServices), host.dashboardState.focusedWorktreePath);
58
58
  host.dashboardState.worktreeEntries = [
59
59
  ...host.dashboardState.worktreeSessions.map((session) => ({ kind: "session", id: session.id })),
60
60
  ...worktreeServices.map((service) => ({ kind: "service", id: service.id })),
@@ -109,6 +109,9 @@ export function handleActiveDashboardOverlayKey(host, data) {
109
109
  case "notification-panel":
110
110
  host.handleNotificationPanelKey(data);
111
111
  return true;
112
+ case "teammate-picker":
113
+ host.handleTeammatePickerKey(data);
114
+ return true;
112
115
  case "worktree-remove-confirm":
113
116
  host.handleWorktreeRemoveConfirmKey(data);
114
117
  return true;
@@ -165,6 +168,9 @@ export function buildActiveDashboardOverlayOutput(host) {
165
168
  if (host.dashboardOverlayState.kind === "notification-panel") {
166
169
  return buildNotificationPanelOverlayOutput(host);
167
170
  }
171
+ if (host.dashboardOverlayState.kind === "teammate-picker") {
172
+ return buildTeammatePickerOverlayOutput(host);
173
+ }
168
174
  if (host.dashboardOverlayState.kind === "thread-reply") {
169
175
  return buildThreadReplyOverlayOutput(host);
170
176
  }
@@ -372,7 +378,7 @@ export function showOrchestrationRoutePicker(host, mode) {
372
378
  exited: session.exited,
373
379
  };
374
380
  });
375
- if (selected && !selected.remoteInstancePid) {
381
+ if (selected) {
376
382
  options.push({
377
383
  label: `${selected.label ?? selected.command ?? selected.id} (${selected.id})`,
378
384
  sessionId: selected.id,
@@ -527,10 +533,15 @@ export function renderOrchestrationRoutePicker(host) {
527
533
  process.stdout.write(output);
528
534
  }
529
535
  export async function postToProjectService(host, path, body, opts) {
530
- for (let attempt = 0; attempt < 2; attempt += 1) {
531
- const endpoint = resolveProjectServiceEndpoint(process.cwd());
536
+ const projectRoot = process.cwd();
537
+ const timeoutMs = opts?.timeoutMs ?? 1000;
538
+ const deadline = Date.now() + timeoutMs;
539
+ let lastError = null;
540
+ for (let attempt = 0; Date.now() <= deadline; attempt += 1) {
541
+ const endpoint = resolveProjectServiceEndpoint(projectRoot);
532
542
  if (!endpoint) {
533
543
  await ensureDashboardControlPlane(host);
544
+ await sleepProjectServiceRetry(attempt);
534
545
  continue;
535
546
  }
536
547
  try {
@@ -538,26 +549,47 @@ export async function postToProjectService(host, path, body, opts) {
538
549
  method: "POST",
539
550
  headers: { "content-type": "application/json" },
540
551
  body,
541
- timeoutMs: opts?.timeoutMs ?? 1000,
552
+ timeoutMs: Math.max(1, deadline - Date.now()),
542
553
  });
543
554
  if (status >= 200 && status < 300 && json?.ok !== false) {
544
555
  return json;
545
556
  }
546
- if (attempt === 0) {
557
+ lastError = new Error(json?.error || `request failed: ${status}`);
558
+ if (isProjectServiceRetryableStatus(status) && Date.now() < deadline) {
547
559
  await ensureDashboardControlPlane(host);
560
+ await sleepProjectServiceRetry(attempt);
548
561
  continue;
549
562
  }
550
- throw new Error(json?.error || `request failed: ${status}`);
563
+ throw lastError;
551
564
  }
552
565
  catch (error) {
553
- if (attempt === 0) {
566
+ lastError = error;
567
+ if (isProjectServiceConnectionError(error) && Date.now() < deadline) {
568
+ removeMetadataEndpoint(projectRoot);
554
569
  await ensureDashboardControlPlane(host);
570
+ await sleepProjectServiceRetry(attempt);
555
571
  continue;
556
572
  }
557
573
  throw error;
558
574
  }
559
575
  }
560
- throw new Error("no live project service endpoint");
576
+ throw lastError instanceof Error ? lastError : new Error("no live project service endpoint");
577
+ }
578
+ function isProjectServiceConnectionError(error) {
579
+ const code = typeof error?.code === "string" ? error.code : "";
580
+ const message = error instanceof Error ? error.message : String(error);
581
+ return (code === "ECONNREFUSED" ||
582
+ code === "ECONNRESET" ||
583
+ code === "EPIPE" ||
584
+ message.includes("ECONNREFUSED") ||
585
+ message.includes("ECONNRESET") ||
586
+ message.includes("socket hang up"));
587
+ }
588
+ function isProjectServiceRetryableStatus(status) {
589
+ return status === 502 || status === 503 || status === 504;
590
+ }
591
+ async function sleepProjectServiceRetry(attempt) {
592
+ await new Promise((resolve) => setTimeout(resolve, Math.min(250, 50 + attempt * 25)));
561
593
  }
562
594
  export async function ensureDashboardControlPlane(host) {
563
595
  if (host.dashboardServiceRecovery) {
@@ -641,4 +673,3 @@ export function handleOrchestrationRoutePickerKey(host, data) {
641
673
  showOrchestrationInput(host, mode, target);
642
674
  }
643
675
  }
644
- //# sourceMappingURL=dashboard-control.js.map
@@ -12,10 +12,16 @@ export declare const dashboardInteractionMethods: {
12
12
  handleDashboardKey(this: any, data: Buffer): void;
13
13
  activateDashboardEntryByNumber(this: any, index: number): Promise<void>;
14
14
  activateDashboardService(this: any, service: DashboardService): Promise<void>;
15
- activateDashboardEntry(this: any, entry: DashboardSession): Promise<void>;
15
+ activateDashboardEntry(this: any, entry: DashboardSession, options?: {
16
+ preserveDashboardSelection?: boolean;
17
+ }): Promise<void>;
18
+ getTeammatePickerEntries(this: any): DashboardSession[];
19
+ showTeammatePicker(this: any): void;
20
+ renderTeammatePicker(this: any): void;
21
+ handleTeammatePickerKey(this: any, data: Buffer): void;
16
22
  handleServiceInputKey(this: any, data: Buffer): void;
17
23
  handleLabelInputKey(this: any, data: Buffer): void;
18
- handleReviewRequest(this: any): void;
24
+ handleReviewRequest(this: any): Promise<void>;
19
25
  formatRoutePreview(this: any, recipientIds: string[]): string;
20
26
  submitDashboardOrchestrationAction(this: any, mode: "message" | "handoff" | "task", target: any, body: string): Promise<void>;
21
27
  };