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
@@ -0,0 +1,91 @@
1
+ const ACTOR_HEADER = "x-aimux-actor";
2
+ const ROLE_HEADER = "x-aimux-actor-role";
3
+ const USER_ID_HEADER = "x-aimux-actor-user-id";
4
+ const DISPLAY_NAME_HEADER = "x-aimux-actor-display-name";
5
+ const EMAIL_HEADER = "x-aimux-actor-email";
6
+ const SHARE_ID_HEADER = "x-aimux-share-id";
7
+ const SHARE_SESSION_ID_HEADER = "x-aimux-share-session-id";
8
+ const RELAY_HEADER_PREFIX = "x-aimux-";
9
+ function headerValue(headers, name) {
10
+ if (!headers)
11
+ return undefined;
12
+ const direct = headers[name];
13
+ if (typeof direct === "string")
14
+ return direct.trim() || undefined;
15
+ const lowerName = name.toLowerCase();
16
+ for (const [key, value] of Object.entries(headers)) {
17
+ if (key.toLowerCase() === lowerName)
18
+ return value.trim() || undefined;
19
+ }
20
+ return undefined;
21
+ }
22
+ function hasRelayActorHeaders(headers) {
23
+ if (!headers)
24
+ return false;
25
+ return Object.keys(headers).some((key) => key.toLowerCase().startsWith(RELAY_HEADER_PREFIX));
26
+ }
27
+ function actorFromJson(value) {
28
+ try {
29
+ const parsed = JSON.parse(value);
30
+ if (!parsed || typeof parsed !== "object")
31
+ return null;
32
+ const record = parsed;
33
+ return {
34
+ role: record.role === "owner" || record.role === "guest" ? record.role : undefined,
35
+ userId: typeof record.userId === "string" ? record.userId : undefined,
36
+ displayName: typeof record.displayName === "string" ? record.displayName : undefined,
37
+ email: typeof record.email === "string" ? record.email : undefined,
38
+ };
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ export function parseRemoteActor(headers) {
45
+ const actorJson = headerValue(headers, ACTOR_HEADER);
46
+ const jsonActor = actorJson ? actorFromJson(actorJson) : null;
47
+ const role = headerValue(headers, ROLE_HEADER) ?? jsonActor?.role;
48
+ if (!role) {
49
+ return hasRelayActorHeaders(headers) ? { role: "guest" } : null;
50
+ }
51
+ if (role !== "owner" && role !== "guest") {
52
+ return { role: "guest" };
53
+ }
54
+ return {
55
+ role,
56
+ userId: headerValue(headers, USER_ID_HEADER) ?? jsonActor?.userId,
57
+ displayName: headerValue(headers, DISPLAY_NAME_HEADER) ?? jsonActor?.displayName,
58
+ email: headerValue(headers, EMAIL_HEADER) ?? jsonActor?.email,
59
+ shareId: headerValue(headers, SHARE_ID_HEADER),
60
+ shareSessionId: headerValue(headers, SHARE_SESSION_ID_HEADER),
61
+ };
62
+ }
63
+ export function assertRemoteAccessAllowed(actor, method, pathname, searchParams) {
64
+ if (!actor || actor.role === "owner")
65
+ return { ok: true };
66
+ if (actor.role !== "guest")
67
+ return { ok: false, status: 403, error: "remote actor role is not allowed" };
68
+ if (method !== "GET")
69
+ return { ok: false, status: 403, error: "shared guests are read-only" };
70
+ if (pathname === "/health")
71
+ return { ok: true };
72
+ const proxyMatch = pathname.match(/^\/proxy\/[^/]+\/\d+(\/.*)$/);
73
+ if (!proxyMatch)
74
+ return { ok: false, status: 403, error: "shared guests cannot access daemon routes" };
75
+ const subPath = proxyMatch[1] || "/";
76
+ if (subPath === "/agents/output" || subPath === "/agents/history" || subPath === "/events") {
77
+ if (!actor.shareSessionId) {
78
+ return { ok: false, status: 403, error: "shared guest route requires an authorized share session" };
79
+ }
80
+ const requestedSessionId = searchParams.get("sessionId");
81
+ if (!requestedSessionId) {
82
+ return { ok: false, status: 403, error: "shared session route requires a session id" };
83
+ }
84
+ if (requestedSessionId !== actor.shareSessionId) {
85
+ return { ok: false, status: 403, error: "shared guest cannot access another session" };
86
+ }
87
+ return { ok: true };
88
+ }
89
+ return { ok: false, status: 403, error: "shared guests can only read shared session output" };
90
+ }
91
+ //# sourceMappingURL=remote-access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-access.js","sourceRoot":"","sources":["../src/remote-access.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { RuntimeExchange } from "./exchange-store.js";
2
+ export declare function deriveRuntimeExchangeIndexes(exchange: RuntimeExchange): RuntimeExchange;
@@ -0,0 +1,154 @@
1
+ function unique(values) {
2
+ return [...new Set(values.map((value) => value?.trim()).filter(Boolean))];
3
+ }
4
+ function handoffActionFromMessages(messages) {
5
+ const lifecycleMessage = [...messages]
6
+ .reverse()
7
+ .find((message) => message.metadata?.handoffAction === "accepted" || message.metadata?.handoffAction === "completed");
8
+ return {
9
+ action: lifecycleMessage?.metadata?.handoffAction,
10
+ actor: lifecycleMessage?.from,
11
+ };
12
+ }
13
+ function handoffFromThread(thread, messages) {
14
+ if (thread.kind !== "handoff")
15
+ return undefined;
16
+ const recipients = unique(thread.waitingOn?.length ? thread.waitingOn : thread.participants.filter((id) => id !== thread.createdBy));
17
+ if (recipients.length === 0)
18
+ return undefined;
19
+ const lifecycle = handoffActionFromMessages(messages);
20
+ const status = lifecycle.action === "completed"
21
+ ? "completed"
22
+ : lifecycle.action === "accepted"
23
+ ? "accepted"
24
+ : thread.status === "done"
25
+ ? "completed"
26
+ : thread.status === "abandoned"
27
+ ? "cancelled"
28
+ : "waiting";
29
+ return {
30
+ id: `handoff:${thread.id}`,
31
+ threadId: thread.id,
32
+ status,
33
+ from: thread.createdBy,
34
+ to: recipients,
35
+ acceptedBy: lifecycle.action === "accepted" ? lifecycle.actor : thread.status === "open" ? thread.owner : undefined,
36
+ completedBy: lifecycle.action === "completed" ? lifecycle.actor : thread.status === "done" ? thread.owner : undefined,
37
+ createdAt: thread.createdAt,
38
+ updatedAt: thread.updatedAt,
39
+ };
40
+ }
41
+ function reviewFromTask(task) {
42
+ if (task.type !== "review")
43
+ return undefined;
44
+ return {
45
+ id: `review:${task.id}`,
46
+ taskId: task.id,
47
+ reviewOf: task.reviewOf,
48
+ reviewer: task.assignedTo ?? task.assignee,
49
+ status: task.reviewStatus ?? "pending",
50
+ feedback: task.reviewFeedback ?? task.result,
51
+ createdAt: task.createdAt,
52
+ updatedAt: task.updatedAt,
53
+ };
54
+ }
55
+ function waitsFromThread(thread) {
56
+ const waitingOn = unique(thread.waitingOn ?? []);
57
+ if (waitingOn.length === 0)
58
+ return [];
59
+ return [
60
+ {
61
+ id: `wait:thread:${thread.id}`,
62
+ status: thread.status === "done" || thread.status === "abandoned" ? "satisfied" : "waiting",
63
+ subjectKind: "thread",
64
+ subjectId: thread.id,
65
+ waitingOn,
66
+ owner: thread.owner,
67
+ createdAt: thread.createdAt,
68
+ updatedAt: thread.updatedAt,
69
+ resolvedAt: thread.status === "done" || thread.status === "abandoned" ? thread.updatedAt : undefined,
70
+ },
71
+ ];
72
+ }
73
+ function waitsFromTask(task) {
74
+ const waitingOn = unique([
75
+ task.status === "blocked" ? task.assignedBy : undefined,
76
+ task.status === "assigned" || task.status === "pending" || task.status === "in_progress"
77
+ ? (task.assignedTo ?? task.assignee)
78
+ : undefined,
79
+ ]);
80
+ if (waitingOn.length === 0)
81
+ return [];
82
+ return [
83
+ {
84
+ id: `wait:task:${task.id}`,
85
+ status: task.status === "done" || task.status === "failed" ? "satisfied" : "waiting",
86
+ subjectKind: "task",
87
+ subjectId: task.id,
88
+ waitingOn,
89
+ owner: task.assignedBy,
90
+ createdAt: task.createdAt,
91
+ updatedAt: task.updatedAt,
92
+ resolvedAt: task.status === "done" || task.status === "failed" ? task.updatedAt : undefined,
93
+ },
94
+ ];
95
+ }
96
+ function inboxFromThread(thread) {
97
+ const participants = unique([...(thread.unreadBy ?? []), ...(thread.waitingOn ?? [])]);
98
+ return participants.map((participantId) => {
99
+ const waiting = (thread.waitingOn ?? []).includes(participantId);
100
+ return {
101
+ id: `inbox:${participantId}:thread:${thread.id}`,
102
+ participantId,
103
+ subjectKind: "thread",
104
+ subjectId: thread.id,
105
+ state: thread.status === "blocked" ? "blocked" : waiting ? "waiting" : "unread",
106
+ urgency: (waiting ? 10 : 0) + ((thread.unreadBy ?? []).includes(participantId) ? 3 : 0),
107
+ updatedAt: thread.updatedAt,
108
+ };
109
+ });
110
+ }
111
+ function inboxFromTask(task) {
112
+ const participants = unique([
113
+ task.status === "blocked" ? task.assignedBy : undefined,
114
+ task.status !== "done" && task.status !== "failed" ? (task.assignedTo ?? task.assignee) : undefined,
115
+ ]);
116
+ return participants.map((participantId) => ({
117
+ id: `inbox:${participantId}:task:${task.id}`,
118
+ participantId,
119
+ subjectKind: "task",
120
+ subjectId: task.id,
121
+ state: task.status === "blocked" ? "blocked" : task.status === "done" ? "done" : "waiting",
122
+ urgency: task.status === "blocked" ? 12 : task.type === "review" ? 8 : 6,
123
+ updatedAt: task.updatedAt,
124
+ }));
125
+ }
126
+ function preserveAcknowledgedInbox(nextEntries, previousEntries) {
127
+ const previousById = new Map(previousEntries.map((entry) => [entry.id, entry]));
128
+ return nextEntries.map((entry) => {
129
+ const previous = previousById.get(entry.id);
130
+ if (previous?.state === "done" && previous.updatedAt === entry.updatedAt) {
131
+ return { ...entry, state: "done" };
132
+ }
133
+ return entry;
134
+ });
135
+ }
136
+ export function deriveRuntimeExchangeIndexes(exchange) {
137
+ const messagesByThread = new Map();
138
+ for (const message of exchange.messages) {
139
+ const existing = messagesByThread.get(message.threadId) ?? [];
140
+ existing.push(message);
141
+ messagesByThread.set(message.threadId, existing);
142
+ }
143
+ const nextInbox = [...exchange.threads.flatMap(inboxFromThread), ...exchange.tasks.flatMap(inboxFromTask)];
144
+ return {
145
+ ...exchange,
146
+ handoffs: exchange.threads
147
+ .map((thread) => handoffFromThread(thread, messagesByThread.get(thread.id) ?? []))
148
+ .filter((handoff) => Boolean(handoff)),
149
+ reviews: exchange.tasks.map(reviewFromTask).filter((review) => Boolean(review)),
150
+ waits: [...exchange.threads.flatMap(waitsFromThread), ...exchange.tasks.flatMap(waitsFromTask)],
151
+ inbox: preserveAcknowledgedInbox(nextInbox, exchange.inbox),
152
+ };
153
+ }
154
+ //# sourceMappingURL=exchange-derived.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange-derived.js","sourceRoot":"","sources":["../../src/runtime-core/exchange-derived.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AttachmentRecord } from "../attachment-store.js";
2
+ import type { Task } from "../tasks.js";
3
+ import type { OrchestrationMessage, OrchestrationThread } from "../threads.js";
4
+ import { type RuntimeExchange } from "./exchange-store.js";
5
+ export interface RuntimeExchangeLegacySnapshot {
6
+ threads?: OrchestrationThread[];
7
+ messages?: OrchestrationMessage[];
8
+ tasks?: Task[];
9
+ planPaths?: string[];
10
+ historyPaths?: string[];
11
+ contextPaths?: string[];
12
+ recordingPaths?: string[];
13
+ statusPaths?: string[];
14
+ attachments?: AttachmentRecord[];
15
+ now?: string;
16
+ }
17
+ export declare function buildRuntimeExchangeFromLegacySnapshot(input?: RuntimeExchangeLegacySnapshot): RuntimeExchange;
18
+ export declare function importRuntimeExchangeFromLegacyFiles(input?: {
19
+ now?: string;
20
+ additionalHistoryPaths?: string[];
21
+ additionalContextPaths?: string[];
22
+ additionalRecordingPaths?: string[];
23
+ additionalStatusPaths?: string[];
24
+ }): RuntimeExchange;
@@ -0,0 +1,318 @@
1
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
2
+ import { basename, join } from "node:path";
3
+ import { getAttachmentsDir, getContextDir, getHistoryDir, getPlansDir, getRecordingsDir, getStatusDir, getTasksDir, getThreadsDir, } from "../paths.js";
4
+ import { emptyRuntimeExchange, } from "./exchange-store.js";
5
+ function unique(values) {
6
+ return [...new Set(values.map((value) => value?.trim()).filter(Boolean))];
7
+ }
8
+ function safeJson(path) {
9
+ try {
10
+ return JSON.parse(readFileSync(path, "utf8"));
11
+ }
12
+ catch {
13
+ return undefined;
14
+ }
15
+ }
16
+ function listFiles(dir, predicate) {
17
+ if (!existsSync(dir))
18
+ return [];
19
+ try {
20
+ return readdirSync(dir)
21
+ .filter(predicate)
22
+ .map((name) => join(dir, name));
23
+ }
24
+ catch {
25
+ return [];
26
+ }
27
+ }
28
+ function listNestedFiles(dir, predicate) {
29
+ if (!existsSync(dir))
30
+ return [];
31
+ const paths = [];
32
+ try {
33
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
34
+ const path = join(dir, entry.name);
35
+ if (entry.isDirectory()) {
36
+ paths.push(...listNestedFiles(path, predicate));
37
+ }
38
+ else if (predicate(entry.name)) {
39
+ paths.push(path);
40
+ }
41
+ }
42
+ }
43
+ catch {
44
+ return [];
45
+ }
46
+ return paths;
47
+ }
48
+ function readLegacyThreads() {
49
+ return listFiles(getThreadsDir(), (name) => name.endsWith(".json"))
50
+ .map((path) => safeJson(path))
51
+ .filter((thread) => Boolean(thread));
52
+ }
53
+ function readLegacyMessages(threadIds) {
54
+ return threadIds.flatMap((threadId) => {
55
+ const path = join(getThreadsDir(), `${threadId}.jsonl`);
56
+ if (!existsSync(path))
57
+ return [];
58
+ try {
59
+ return readFileSync(path, "utf8")
60
+ .split("\n")
61
+ .map((line) => line.trim())
62
+ .filter(Boolean)
63
+ .map((line) => {
64
+ try {
65
+ return JSON.parse(line);
66
+ }
67
+ catch {
68
+ return undefined;
69
+ }
70
+ })
71
+ .filter((message) => Boolean(message));
72
+ }
73
+ catch {
74
+ return [];
75
+ }
76
+ });
77
+ }
78
+ function readLegacyTasks() {
79
+ return listFiles(getTasksDir(), (name) => name.endsWith(".json"))
80
+ .map((path) => safeJson(path))
81
+ .filter((task) => Boolean(task));
82
+ }
83
+ function readLegacyAttachments() {
84
+ return listFiles(getAttachmentsDir(), (name) => name.endsWith(".json"))
85
+ .map((path) => safeJson(path))
86
+ .filter((attachment) => Boolean(attachment));
87
+ }
88
+ function toExchangeThread(thread) {
89
+ return {
90
+ id: thread.id,
91
+ title: thread.title,
92
+ kind: thread.kind,
93
+ status: thread.status,
94
+ createdAt: thread.createdAt,
95
+ updatedAt: thread.updatedAt,
96
+ createdBy: thread.createdBy,
97
+ participants: thread.participants,
98
+ owner: thread.owner,
99
+ waitingOn: thread.waitingOn,
100
+ worktreePath: thread.worktreePath,
101
+ taskId: thread.taskId,
102
+ relatedPlanIds: thread.relatedPlanIds,
103
+ lastMessageId: thread.lastMessageId,
104
+ unreadBy: thread.unreadBy,
105
+ tags: thread.tags,
106
+ };
107
+ }
108
+ function toExchangeMessage(message) {
109
+ return {
110
+ id: message.id,
111
+ threadId: message.threadId,
112
+ ts: message.ts,
113
+ from: message.from,
114
+ to: message.to,
115
+ kind: message.kind,
116
+ body: message.body,
117
+ taskId: message.taskId,
118
+ planId: message.planId,
119
+ metadata: message.metadata,
120
+ deliveredTo: message.deliveredTo,
121
+ deliveredAt: message.deliveredAt,
122
+ };
123
+ }
124
+ function normalizeReviewStatus(status) {
125
+ const normalized = String(status ?? "")
126
+ .trim()
127
+ .toLowerCase()
128
+ .replace(/[-\s]+/g, "_");
129
+ if (normalized === "approved" || normalized === "approve")
130
+ return "approved";
131
+ if (normalized === "changes_requested" || normalized === "request_changes")
132
+ return "changes_requested";
133
+ if (normalized === "pending")
134
+ return "pending";
135
+ return undefined;
136
+ }
137
+ function toExchangeTask(task) {
138
+ return {
139
+ id: task.id,
140
+ status: task.status,
141
+ assignedBy: task.assignedBy,
142
+ assignedTo: task.assignedTo,
143
+ assignee: task.assignee,
144
+ assigner: task.assigner,
145
+ threadId: task.threadId,
146
+ tool: task.tool,
147
+ description: task.description,
148
+ prompt: task.prompt,
149
+ result: task.result,
150
+ error: task.error,
151
+ createdAt: task.createdAt,
152
+ updatedAt: task.updatedAt,
153
+ notifiedAt: task.notifiedAt,
154
+ type: task.type,
155
+ reviewStatus: normalizeReviewStatus(task.reviewStatus),
156
+ reviewFeedback: task.reviewFeedback,
157
+ diff: task.diff,
158
+ iteration: task.iteration,
159
+ reviewOf: task.reviewOf,
160
+ };
161
+ }
162
+ function buildHandoff(thread) {
163
+ if (thread.kind !== "handoff")
164
+ return undefined;
165
+ const recipients = unique(thread.waitingOn?.length ? thread.waitingOn : thread.participants.filter((id) => id !== thread.createdBy));
166
+ if (recipients.length === 0)
167
+ return undefined;
168
+ return {
169
+ id: `handoff:${thread.id}`,
170
+ threadId: thread.id,
171
+ status: thread.status === "done" ? "completed" : thread.status === "abandoned" ? "cancelled" : "waiting",
172
+ from: thread.createdBy,
173
+ to: recipients,
174
+ acceptedBy: thread.status === "open" ? thread.owner : undefined,
175
+ completedBy: thread.status === "done" ? thread.owner : undefined,
176
+ createdAt: thread.createdAt,
177
+ updatedAt: thread.updatedAt,
178
+ };
179
+ }
180
+ function buildReview(task) {
181
+ if (task.type !== "review")
182
+ return undefined;
183
+ return {
184
+ id: `review:${task.id}`,
185
+ taskId: task.id,
186
+ reviewOf: task.reviewOf,
187
+ reviewer: task.assignedTo ?? task.assignee,
188
+ status: normalizeReviewStatus(task.reviewStatus) ?? "pending",
189
+ feedback: task.reviewFeedback ?? task.result,
190
+ createdAt: task.createdAt,
191
+ updatedAt: task.updatedAt,
192
+ };
193
+ }
194
+ function buildThreadWait(thread) {
195
+ const waitingOn = unique(thread.waitingOn ?? []);
196
+ if (waitingOn.length === 0)
197
+ return undefined;
198
+ return {
199
+ id: `wait:thread:${thread.id}`,
200
+ status: thread.status === "done" || thread.status === "abandoned" ? "satisfied" : "waiting",
201
+ subjectKind: "thread",
202
+ subjectId: thread.id,
203
+ waitingOn,
204
+ owner: thread.owner,
205
+ createdAt: thread.createdAt,
206
+ updatedAt: thread.updatedAt,
207
+ resolvedAt: thread.status === "done" || thread.status === "abandoned" ? thread.updatedAt : undefined,
208
+ };
209
+ }
210
+ function buildInboxEntries(thread) {
211
+ const participants = unique([...(thread.unreadBy ?? []), ...(thread.waitingOn ?? [])]);
212
+ return participants.map((participantId) => {
213
+ const waiting = (thread.waitingOn ?? []).includes(participantId);
214
+ return {
215
+ id: `inbox:${participantId}:thread:${thread.id}`,
216
+ participantId,
217
+ subjectKind: "thread",
218
+ subjectId: thread.id,
219
+ state: thread.status === "blocked" ? "blocked" : waiting ? "waiting" : "unread",
220
+ urgency: (waiting ? 10 : 0) + ((thread.unreadBy ?? []).includes(participantId) ? 3 : 0),
221
+ updatedAt: thread.updatedAt,
222
+ };
223
+ });
224
+ }
225
+ function planRefFromPath(path, now) {
226
+ const sessionId = basename(path).replace(/\.md$/, "");
227
+ return {
228
+ id: `plan:${sessionId}`,
229
+ path,
230
+ ownerSessionId: sessionId,
231
+ title: sessionId,
232
+ createdAt: now,
233
+ updatedAt: now,
234
+ };
235
+ }
236
+ function continuityKindForPath(path) {
237
+ const normalized = path.replaceAll("\\", "/");
238
+ if (normalized.includes("/recordings/"))
239
+ return "recording";
240
+ if (normalized.includes("/status/"))
241
+ return "status";
242
+ if (normalized.includes("/history/"))
243
+ return "history";
244
+ return "context";
245
+ }
246
+ function continuityRefFromPath(path, now) {
247
+ const kind = continuityKindForPath(path);
248
+ const file = basename(path);
249
+ const sessionId = file.replace(/\.(jsonl|md|txt)$/, "");
250
+ return {
251
+ id: `${kind}:${sessionId}:${file}`,
252
+ kind,
253
+ path,
254
+ sessionId,
255
+ createdAt: now,
256
+ updatedAt: now,
257
+ };
258
+ }
259
+ function attachmentRefFromRecord(record) {
260
+ return {
261
+ id: record.id,
262
+ path: record.contentPath,
263
+ contentUrl: `/attachments/${record.id}/content`,
264
+ mediaType: record.mimeType,
265
+ createdAt: record.createdAt,
266
+ updatedAt: record.createdAt,
267
+ };
268
+ }
269
+ export function buildRuntimeExchangeFromLegacySnapshot(input = {}) {
270
+ const now = input.now ?? new Date().toISOString();
271
+ const exchange = emptyRuntimeExchange(now);
272
+ const threads = input.threads ?? [];
273
+ const tasks = input.tasks ?? [];
274
+ exchange.threads = threads.map(toExchangeThread);
275
+ exchange.messages = (input.messages ?? []).map(toExchangeMessage);
276
+ exchange.tasks = tasks.map(toExchangeTask);
277
+ exchange.handoffs = threads
278
+ .map(buildHandoff)
279
+ .filter((handoff) => Boolean(handoff));
280
+ exchange.reviews = tasks.map(buildReview).filter((review) => Boolean(review));
281
+ exchange.waits = threads.map(buildThreadWait).filter((wait) => Boolean(wait));
282
+ exchange.inbox = threads.flatMap(buildInboxEntries);
283
+ exchange.planRefs = (input.planPaths ?? []).map((path) => planRefFromPath(path, now));
284
+ exchange.continuityRefs = [
285
+ ...(input.historyPaths ?? []),
286
+ ...(input.contextPaths ?? []),
287
+ ...(input.recordingPaths ?? []),
288
+ ...(input.statusPaths ?? []),
289
+ ].map((path) => continuityRefFromPath(path, now));
290
+ exchange.attachmentRefs = (input.attachments ?? []).map(attachmentRefFromRecord);
291
+ return exchange;
292
+ }
293
+ export function importRuntimeExchangeFromLegacyFiles(input = {}) {
294
+ const now = input.now ?? new Date().toISOString();
295
+ const threads = readLegacyThreads();
296
+ return buildRuntimeExchangeFromLegacySnapshot({
297
+ now,
298
+ threads,
299
+ messages: readLegacyMessages(threads.map((thread) => thread.id)),
300
+ tasks: readLegacyTasks(),
301
+ planPaths: listFiles(getPlansDir(), (name) => name.endsWith(".md")),
302
+ historyPaths: [
303
+ ...listFiles(getHistoryDir(), (name) => name.endsWith(".jsonl")),
304
+ ...(input.additionalHistoryPaths ?? []),
305
+ ],
306
+ contextPaths: [
307
+ ...listNestedFiles(getContextDir(), (name) => name.endsWith(".md") || name.endsWith(".jsonl")),
308
+ ...(input.additionalContextPaths ?? []),
309
+ ],
310
+ recordingPaths: [
311
+ ...listFiles(getRecordingsDir(), (name) => name.endsWith(".txt") || name.endsWith(".log")),
312
+ ...(input.additionalRecordingPaths ?? []),
313
+ ],
314
+ statusPaths: [...listFiles(getStatusDir(), (name) => name.endsWith(".md")), ...(input.additionalStatusPaths ?? [])],
315
+ attachments: readLegacyAttachments(),
316
+ });
317
+ }
318
+ //# sourceMappingURL=exchange-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange-import.js","sourceRoot":"","sources":["../../src/runtime-core/exchange-import.ts"],"names":[],"mappings":"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"}