aimux-cli 0.1.5 → 0.1.6

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 (159) hide show
  1. package/dist/builtin-metadata-watchers.js +1 -1
  2. package/dist/context/context-bridge.d.ts +1 -1
  3. package/dist/context/context-bridge.js +1 -1
  4. package/dist/dashboard/command-spec.d.ts +7 -0
  5. package/dist/dashboard/command-spec.js +127 -0
  6. package/dist/dashboard/command-spec.js.map +1 -0
  7. package/dist/{dashboard-feedback.js → dashboard/feedback.js} +1 -1
  8. package/dist/dashboard/feedback.js.map +1 -0
  9. package/dist/{dashboard.d.ts → dashboard/index.d.ts} +16 -5
  10. package/dist/{dashboard.js → dashboard/index.js} +7 -4
  11. package/dist/dashboard/index.js.map +1 -0
  12. package/dist/{dashboard-pending-actions.d.ts → dashboard/pending-actions.d.ts} +8 -3
  13. package/dist/dashboard/pending-actions.js +90 -0
  14. package/dist/dashboard/pending-actions.js.map +1 -0
  15. package/dist/{dashboard-session-actions.d.ts → dashboard/session-actions.d.ts} +2 -2
  16. package/dist/{dashboard-session-actions.js → dashboard/session-actions.js} +1 -1
  17. package/dist/dashboard/session-actions.js.map +1 -0
  18. package/dist/{dashboard-session-registry.d.ts → dashboard/session-registry.d.ts} +7 -7
  19. package/dist/{dashboard-session-registry.js → dashboard/session-registry.js} +2 -2
  20. package/dist/dashboard/session-registry.js.map +1 -0
  21. package/dist/{dashboard-state.d.ts → dashboard/state.d.ts} +1 -1
  22. package/dist/{dashboard-state.js → dashboard/state.js} +1 -1
  23. package/dist/dashboard/state.js.map +1 -0
  24. package/dist/{dashboard-targets.d.ts → dashboard/targets.d.ts} +1 -6
  25. package/dist/{dashboard-targets.js → dashboard/targets.js} +5 -123
  26. package/dist/dashboard/targets.js.map +1 -0
  27. package/dist/{dashboard-ui-state-store.d.ts → dashboard/ui-state-store.d.ts} +2 -2
  28. package/dist/{dashboard-ui-state-store.js → dashboard/ui-state-store.js} +2 -2
  29. package/dist/dashboard/ui-state-store.js.map +1 -0
  30. package/dist/fast-control.d.ts +1 -1
  31. package/dist/fast-control.js +1 -1
  32. package/dist/instance-directory.js +1 -1
  33. package/dist/main.js +6 -5
  34. package/dist/main.js.map +1 -1
  35. package/dist/metadata-server.js +3 -17
  36. package/dist/metadata-server.js.map +1 -1
  37. package/dist/multiplexer/agent-io-methods.d.ts +40 -0
  38. package/dist/multiplexer/agent-io-methods.js +177 -0
  39. package/dist/multiplexer/agent-io-methods.js.map +1 -0
  40. package/dist/multiplexer/archives.d.ts +15 -0
  41. package/dist/multiplexer/archives.js +270 -0
  42. package/dist/multiplexer/archives.js.map +1 -0
  43. package/dist/multiplexer/dashboard-actions-methods.d.ts +57 -0
  44. package/dist/multiplexer/dashboard-actions-methods.js +159 -0
  45. package/dist/multiplexer/dashboard-actions-methods.js.map +1 -0
  46. package/dist/multiplexer/dashboard-control.d.ts +36 -0
  47. package/dist/multiplexer/dashboard-control.js +571 -0
  48. package/dist/multiplexer/dashboard-control.js.map +1 -0
  49. package/dist/multiplexer/dashboard-interaction.d.ts +12 -0
  50. package/dist/multiplexer/dashboard-interaction.js +552 -0
  51. package/dist/multiplexer/dashboard-interaction.js.map +1 -0
  52. package/dist/multiplexer/dashboard-model.d.ts +40 -0
  53. package/dist/multiplexer/dashboard-model.js +420 -0
  54. package/dist/multiplexer/dashboard-model.js.map +1 -0
  55. package/dist/multiplexer/dashboard-ops.d.ts +35 -0
  56. package/dist/multiplexer/dashboard-ops.js +158 -0
  57. package/dist/multiplexer/dashboard-ops.js.map +1 -0
  58. package/dist/multiplexer/dashboard-state-methods.d.ts +56 -0
  59. package/dist/multiplexer/dashboard-state-methods.js +123 -0
  60. package/dist/multiplexer/dashboard-state-methods.js.map +1 -0
  61. package/dist/multiplexer/dashboard-tail-methods.d.ts +104 -0
  62. package/dist/multiplexer/dashboard-tail-methods.js +252 -0
  63. package/dist/multiplexer/dashboard-tail-methods.js.map +1 -0
  64. package/dist/multiplexer/dashboard-view-methods.d.ts +51 -0
  65. package/dist/multiplexer/dashboard-view-methods.js +159 -0
  66. package/dist/multiplexer/dashboard-view-methods.js.map +1 -0
  67. package/dist/multiplexer/index.d.ts +205 -0
  68. package/dist/multiplexer/index.js +444 -0
  69. package/dist/multiplexer/index.js.map +1 -0
  70. package/dist/multiplexer/navigation.d.ts +17 -0
  71. package/dist/multiplexer/navigation.js +203 -0
  72. package/dist/multiplexer/navigation.js.map +1 -0
  73. package/dist/multiplexer/notifications.d.ts +6 -0
  74. package/dist/multiplexer/notifications.js +75 -0
  75. package/dist/multiplexer/notifications.js.map +1 -0
  76. package/dist/multiplexer/persistence-methods.d.ts +77 -0
  77. package/dist/multiplexer/persistence-methods.js +347 -0
  78. package/dist/multiplexer/persistence-methods.js.map +1 -0
  79. package/dist/multiplexer/runtime-lifecycle-methods.d.ts +36 -0
  80. package/dist/multiplexer/runtime-lifecycle-methods.js +235 -0
  81. package/dist/multiplexer/runtime-lifecycle-methods.js.map +1 -0
  82. package/dist/multiplexer/runtime-state.d.ts +32 -0
  83. package/dist/multiplexer/runtime-state.js +439 -0
  84. package/dist/multiplexer/runtime-state.js.map +1 -0
  85. package/dist/{multiplexer-runtime-sync.d.ts → multiplexer/runtime-sync.d.ts} +2 -2
  86. package/dist/{multiplexer-runtime-sync.js → multiplexer/runtime-sync.js} +1 -1
  87. package/dist/multiplexer/runtime-sync.js.map +1 -0
  88. package/dist/multiplexer/services.d.ts +23 -0
  89. package/dist/multiplexer/services.js +187 -0
  90. package/dist/multiplexer/services.js.map +1 -0
  91. package/dist/multiplexer/session-actions.d.ts +36 -0
  92. package/dist/multiplexer/session-actions.js +108 -0
  93. package/dist/multiplexer/session-actions.js.map +1 -0
  94. package/dist/multiplexer/session-launch.d.ts +20 -0
  95. package/dist/multiplexer/session-launch.js +407 -0
  96. package/dist/multiplexer/session-launch.js.map +1 -0
  97. package/dist/multiplexer/session-runtime-core.d.ts +37 -0
  98. package/dist/multiplexer/session-runtime-core.js +400 -0
  99. package/dist/multiplexer/session-runtime-core.js.map +1 -0
  100. package/dist/multiplexer/subscreens.d.ts +30 -0
  101. package/dist/multiplexer/subscreens.js +685 -0
  102. package/dist/multiplexer/subscreens.js.map +1 -0
  103. package/dist/multiplexer/tool-picker.d.ts +8 -0
  104. package/dist/multiplexer/tool-picker.js +142 -0
  105. package/dist/multiplexer/tool-picker.js.map +1 -0
  106. package/dist/multiplexer/worktrees.d.ts +12 -0
  107. package/dist/multiplexer/worktrees.js +181 -0
  108. package/dist/multiplexer/worktrees.js.map +1 -0
  109. package/dist/project-scanner.d.ts +1 -1
  110. package/dist/project-scanner.js +1 -1
  111. package/dist/session-bootstrap.d.ts +1 -1
  112. package/dist/session-semantics.d.ts +1 -1
  113. package/dist/{tmux-doctor.d.ts → tmux/doctor.d.ts} +1 -1
  114. package/dist/{tmux-doctor.js → tmux/doctor.js} +4 -3
  115. package/dist/tmux/doctor.js.map +1 -0
  116. package/dist/{tmux-runtime-manager.d.ts → tmux/runtime-manager.d.ts} +1 -0
  117. package/dist/{tmux-runtime-manager.js → tmux/runtime-manager.js} +29 -10
  118. package/dist/tmux/runtime-manager.js.map +1 -0
  119. package/dist/{tmux-session-transport.d.ts → tmux/session-transport.d.ts} +2 -2
  120. package/dist/{tmux-session-transport.js → tmux/session-transport.js} +2 -2
  121. package/dist/tmux/session-transport.js.map +1 -0
  122. package/dist/{tmux-statusline.d.ts → tmux/statusline.d.ts} +1 -1
  123. package/dist/{tmux-statusline.js → tmux/statusline.js} +4 -4
  124. package/dist/tmux/statusline.js.map +1 -0
  125. package/dist/{tmux-switcher.js → tmux/switcher.js} +7 -7
  126. package/dist/tmux/switcher.js.map +1 -0
  127. package/dist/{tmux-window-open.d.ts → tmux/window-open.d.ts} +1 -1
  128. package/dist/{tmux-window-open.js → tmux/window-open.js} +1 -1
  129. package/dist/tmux/window-open.js.map +1 -0
  130. package/dist/tool-output-watchers.js +1 -1
  131. package/dist/tui/render/box.js +25 -6
  132. package/dist/tui/render/box.js.map +1 -1
  133. package/dist/tui/screens/dashboard-renderers.d.ts +3 -2
  134. package/dist/tui/screens/dashboard-renderers.js +17 -2
  135. package/dist/tui/screens/dashboard-renderers.js.map +1 -1
  136. package/dist/tui/screens/overlay-renderers.js +2 -2
  137. package/dist/tui/screens/overlay-renderers.js.map +1 -1
  138. package/package.json +1 -1
  139. package/dist/dashboard-feedback.js.map +0 -1
  140. package/dist/dashboard-pending-actions.js +0 -52
  141. package/dist/dashboard-pending-actions.js.map +0 -1
  142. package/dist/dashboard-session-actions.js.map +0 -1
  143. package/dist/dashboard-session-registry.js.map +0 -1
  144. package/dist/dashboard-state.js.map +0 -1
  145. package/dist/dashboard-targets.js.map +0 -1
  146. package/dist/dashboard-ui-state-store.js.map +0 -1
  147. package/dist/dashboard.js.map +0 -1
  148. package/dist/multiplexer-runtime-sync.js.map +0 -1
  149. package/dist/multiplexer.d.ts +0 -500
  150. package/dist/multiplexer.js +0 -6081
  151. package/dist/multiplexer.js.map +0 -1
  152. package/dist/tmux-doctor.js.map +0 -1
  153. package/dist/tmux-runtime-manager.js.map +0 -1
  154. package/dist/tmux-session-transport.js.map +0 -1
  155. package/dist/tmux-statusline.js.map +0 -1
  156. package/dist/tmux-switcher.js.map +0 -1
  157. package/dist/tmux-window-open.js.map +0 -1
  158. /package/dist/{dashboard-feedback.d.ts → dashboard/feedback.d.ts} +0 -0
  159. /package/dist/{tmux-switcher.d.ts → tmux/switcher.d.ts} +0 -0
@@ -0,0 +1,32 @@
1
+ type RuntimeStateHost = any;
2
+ export declare function renderCurrentDashboardView(host: RuntimeStateHost): void;
3
+ export declare function startStatusRefresh(host: RuntimeStateHost): void;
4
+ export declare function stopStatusRefresh(host: RuntimeStateHost): void;
5
+ export declare function syncSessionsFromState(host: RuntimeStateHost, state?: any): void;
6
+ export declare function loadOfflineSessions(host: RuntimeStateHost, state?: any): boolean;
7
+ export declare function loadOfflineServices(host: RuntimeStateHost, state?: any): boolean;
8
+ export declare function buildLiveServiceStates(host: RuntimeStateHost): any[];
9
+ export declare function restoreTmuxSessionsFromState(host: RuntimeStateHost, state?: any): void;
10
+ export declare function stopSessionToOffline(host: RuntimeStateHost, session: any): void;
11
+ export declare function adjustAfterRemove(host: RuntimeStateHost, hasWorktrees: boolean): void;
12
+ export declare function graveyardSession(host: RuntimeStateHost, sessionId: string): void;
13
+ export declare function isSessionRuntimeLive(host: RuntimeStateHost, runtime: any): boolean;
14
+ export declare function evictZombieSession(host: RuntimeStateHost, runtime: any): void;
15
+ export declare function resumeOfflineSession(host: RuntimeStateHost, session: any): void;
16
+ export declare function startHeartbeat(host: RuntimeStateHost): void;
17
+ export declare function handleSessionClaimed(host: RuntimeStateHost, sessionId: string): void;
18
+ export declare function stopHeartbeat(host: RuntimeStateHost): void;
19
+ export declare function startProjectServiceRefresh(host: RuntimeStateHost): void;
20
+ export declare function stopProjectServiceRefresh(host: RuntimeStateHost): void;
21
+ export declare function getRemoteInstancesSafe(host: RuntimeStateHost): any;
22
+ export declare function getRemoteOwnedSessionKeys(host: RuntimeStateHost): Set<string>;
23
+ export declare function getInstanceSessionRefs(host: RuntimeStateHost): any[];
24
+ export declare function writeSessionsFile(host: RuntimeStateHost): void;
25
+ export declare function removeSessionsFile(): void;
26
+ export declare function listDesktopWorktrees(_host: RuntimeStateHost): Array<{
27
+ name: string;
28
+ path: string;
29
+ branch: string;
30
+ isBare: boolean;
31
+ }>;
32
+ export {};
@@ -0,0 +1,439 @@
1
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import { loadConfig } from "../config.js";
3
+ import { loadMetadataState, updateSessionMetadata } from "../metadata-store.js";
4
+ import { getGraveyardPath, getLocalAimuxDir, getStatePath } from "../paths.js";
5
+ import { listWorktrees as listAllWorktrees } from "../worktree.js";
6
+ import { isDashboardWindowName } from "../tmux/runtime-manager.js";
7
+ import { TmuxSessionTransport } from "../tmux/session-transport.js";
8
+ export function renderCurrentDashboardView(host) {
9
+ if (host.isDashboardScreen("activity")) {
10
+ host.renderActivityDashboard();
11
+ return;
12
+ }
13
+ if (host.isDashboardScreen("workflow")) {
14
+ host.renderWorkflow();
15
+ return;
16
+ }
17
+ if (host.isDashboardScreen("threads")) {
18
+ host.renderThreads();
19
+ return;
20
+ }
21
+ if (host.isDashboardScreen("plans")) {
22
+ host.renderPlans();
23
+ return;
24
+ }
25
+ if (host.isDashboardScreen("help")) {
26
+ host.renderHelp();
27
+ return;
28
+ }
29
+ if (host.isDashboardScreen("graveyard")) {
30
+ host.renderGraveyard();
31
+ return;
32
+ }
33
+ host.renderDashboard();
34
+ host.renderActiveDashboardOverlay();
35
+ }
36
+ export function startStatusRefresh(host) {
37
+ if (host.statusInterval)
38
+ return;
39
+ host.statusInterval = setInterval(() => {
40
+ let dashboardNeedsRender = false;
41
+ if (host.mode === "project-service") {
42
+ host.taskDispatcher?.tick(host.sessions.map((s) => s.id));
43
+ host.orchestrationDispatcher?.tick(host.sessions.map((s) => s.id));
44
+ host.writeStatuslineFile();
45
+ }
46
+ const events = host.taskDispatcher?.drainEvents() ?? [];
47
+ for (const ev of events) {
48
+ if (ev.type === "assigned") {
49
+ host.footerFlash = `⧫ Task assigned → ${ev.sessionId}`;
50
+ }
51
+ else if (ev.type === "completed") {
52
+ host.footerFlash = `✓ Task done by ${ev.sessionId}`;
53
+ }
54
+ else if (ev.type === "failed") {
55
+ host.footerFlash = `✗ Task failed: ${ev.sessionId}`;
56
+ }
57
+ else if (ev.type === "review_created") {
58
+ host.footerFlash = `⧫ Review created: ${ev.description}`;
59
+ }
60
+ else if (ev.type === "review_approved") {
61
+ host.footerFlash = `✓ Review approved: ${ev.description}`;
62
+ }
63
+ else if (ev.type === "changes_requested") {
64
+ host.footerFlash = `↻ Changes requested: ${ev.description}`;
65
+ }
66
+ host.footerFlashTicks = 3;
67
+ dashboardNeedsRender = true;
68
+ }
69
+ const orchestrationEvents = host.orchestrationDispatcher?.drainEvents() ?? [];
70
+ for (const event of orchestrationEvents) {
71
+ if (event.type === "message_delivered") {
72
+ host.footerFlash = `✉ Message delivered → ${event.sessionId}`;
73
+ host.footerFlashTicks = 3;
74
+ dashboardNeedsRender = true;
75
+ }
76
+ }
77
+ if (host.dashboardFeedback.tickFlashVisibilityChanged()) {
78
+ dashboardNeedsRender = true;
79
+ }
80
+ for (const session of host.sessions) {
81
+ const prev = host.prevStatuses.get(session.id);
82
+ const curr = session.status;
83
+ if (prev && prev !== curr && curr === "idle" && prev === "running") {
84
+ host.publishAlert({
85
+ kind: "needs_input",
86
+ sessionId: session.id,
87
+ title: `${session.id} needs input`,
88
+ message: "Agent is waiting for input.",
89
+ dedupeKey: `idle-needs-input:${session.id}`,
90
+ cooldownMs: 15_000,
91
+ });
92
+ }
93
+ host.prevStatuses.set(session.id, curr);
94
+ }
95
+ if (host.mode === "dashboard") {
96
+ const now = Date.now();
97
+ if (now >= host.dashboardNextBackgroundRefreshAt) {
98
+ host.dashboardNextBackgroundRefreshAt = now + 5000;
99
+ void host.refreshDashboardModelFromService().then((refreshed) => {
100
+ if (refreshed || dashboardNeedsRender) {
101
+ host.renderCurrentDashboardView();
102
+ }
103
+ });
104
+ }
105
+ else if (dashboardNeedsRender) {
106
+ host.renderCurrentDashboardView();
107
+ }
108
+ }
109
+ }, 1000);
110
+ }
111
+ export function stopStatusRefresh(host) {
112
+ if (host.statusInterval) {
113
+ clearInterval(host.statusInterval);
114
+ host.statusInterval = null;
115
+ }
116
+ }
117
+ export function syncSessionsFromState(host, state = host.constructor.loadState()) {
118
+ restoreTmuxSessionsFromState(host, state);
119
+ loadOfflineSessions(host, state);
120
+ loadOfflineServices(host, state);
121
+ host.invalidateDesktopStateSnapshot();
122
+ }
123
+ export function loadOfflineSessions(host, state = host.constructor.loadState()) {
124
+ if (!state || state.sessions.length === 0) {
125
+ const changed = host.offlineSessions.length > 0;
126
+ host.offlineSessions = [];
127
+ return changed;
128
+ }
129
+ const ownedIds = new Set();
130
+ for (const s of host.sessions)
131
+ ownedIds.add(s.id);
132
+ for (const inst of host.getRemoteInstancesSafe()) {
133
+ for (const rs of inst.sessions)
134
+ ownedIds.add(rs.id);
135
+ }
136
+ const ownedBackendIds = new Set(host.sessions
137
+ .map((session) => session.backendSessionId)
138
+ .filter((value) => Boolean(value)));
139
+ const nextOfflineSessions = state.sessions.filter((s) => {
140
+ if (ownedIds.has(s.id))
141
+ return false;
142
+ if (s.backendSessionId && ownedBackendIds.has(s.backendSessionId))
143
+ return false;
144
+ if (s.worktreePath && !existsSync(s.worktreePath))
145
+ return false;
146
+ return true;
147
+ });
148
+ const previousKey = host.offlineSessions
149
+ .map((session) => `${session.id}:${session.label ?? ""}:${session.worktreePath ?? ""}`)
150
+ .join("|");
151
+ const nextKey = nextOfflineSessions
152
+ .map((session) => `${session.id}:${session.label ?? ""}:${session.worktreePath ?? ""}`)
153
+ .join("|");
154
+ host.offlineSessions = nextOfflineSessions;
155
+ if (host.offlineSessions.length > 0) {
156
+ host.debug?.(`loaded ${host.offlineSessions.length} offline session(s) from state.json`, "session");
157
+ }
158
+ return previousKey !== nextKey;
159
+ }
160
+ export function loadOfflineServices(host, state = host.constructor.loadState()) {
161
+ const savedServices = state?.services ?? [];
162
+ if (savedServices.length === 0) {
163
+ const changed = host.offlineServices.length > 0;
164
+ host.offlineServices = [];
165
+ return changed;
166
+ }
167
+ const liveServiceIds = new Set(host.tmuxRuntimeManager
168
+ .listProjectManagedWindows(process.cwd())
169
+ .filter(({ target, metadata }) => !isDashboardWindowName(target.windowName) && metadata.kind === "service")
170
+ .map(({ metadata }) => metadata.sessionId));
171
+ const nextOfflineServices = savedServices.filter((service) => {
172
+ if (liveServiceIds.has(service.id))
173
+ return false;
174
+ if (service.worktreePath && !existsSync(service.worktreePath))
175
+ return false;
176
+ return true;
177
+ });
178
+ const previousKey = host.offlineServices
179
+ .map((service) => `${service.id}:${service.label ?? ""}:${service.worktreePath ?? ""}:${service.launchCommandLine ?? ""}`)
180
+ .join("|");
181
+ const nextKey = nextOfflineServices
182
+ .map((service) => `${service.id}:${service.label ?? ""}:${service.worktreePath ?? ""}:${service.launchCommandLine ?? ""}`)
183
+ .join("|");
184
+ host.offlineServices = nextOfflineServices;
185
+ return previousKey !== nextKey;
186
+ }
187
+ export function buildLiveServiceStates(host) {
188
+ const seen = new Set();
189
+ const liveServices = [];
190
+ for (const { metadata } of host.tmuxRuntimeManager.listProjectManagedWindows(process.cwd())) {
191
+ if (metadata.kind !== "service")
192
+ continue;
193
+ if (seen.has(metadata.sessionId))
194
+ continue;
195
+ seen.add(metadata.sessionId);
196
+ const launchCommandLine = metadata.command === "shell" ? "" : metadata.args?.[0] === "-lc" ? (metadata.args[1] ?? "") : "";
197
+ liveServices.push({
198
+ id: metadata.sessionId,
199
+ worktreePath: metadata.worktreePath,
200
+ label: metadata.label,
201
+ launchCommandLine,
202
+ });
203
+ }
204
+ return liveServices;
205
+ }
206
+ export function restoreTmuxSessionsFromState(host, state = host.constructor.loadState()) {
207
+ const savedById = new Map((state?.sessions ?? []).map((session) => [session.id, session]));
208
+ const cols = process.stdout.columns ?? 80;
209
+ const rows = process.stdout.rows ?? 24;
210
+ for (const { target, metadata } of host.tmuxRuntimeManager.listProjectManagedWindows(process.cwd())) {
211
+ if (isDashboardWindowName(target.windowName))
212
+ continue;
213
+ if (metadata.kind === "service")
214
+ continue;
215
+ if (host.sessions.some((session) => session.id === metadata.sessionId))
216
+ continue;
217
+ const transport = new TmuxSessionTransport(metadata.sessionId, metadata.command, target, host.tmuxRuntimeManager, cols, rows);
218
+ transport.backendSessionId = metadata.backendSessionId;
219
+ host.sessionTmuxTargets.set(metadata.sessionId, target);
220
+ host.registerManagedSession(transport, metadata.args, metadata.toolConfigKey, metadata.worktreePath, undefined);
221
+ const saved = savedById.get(metadata.sessionId);
222
+ const label = metadata.label ?? saved?.label;
223
+ if (label) {
224
+ host.sessionLabels.set(metadata.sessionId, label);
225
+ }
226
+ if (target.windowName !== metadata.command) {
227
+ transport.renameWindow(metadata.command);
228
+ }
229
+ host.syncTmuxWindowMetadata(metadata.sessionId);
230
+ }
231
+ }
232
+ export function stopSessionToOffline(host, session) {
233
+ if (host.stoppingSessionIds.has(session.id))
234
+ return;
235
+ const offlineEntry = {
236
+ id: session.id,
237
+ tool: session.command,
238
+ toolConfigKey: host.sessionToolKeys.get(session.id) ?? session.command,
239
+ command: session.command,
240
+ args: host.sessionOriginalArgs.get(session.id) ?? [],
241
+ backendSessionId: session.backendSessionId,
242
+ worktreePath: host.sessionWorktreePaths.get(session.id),
243
+ label: host.getSessionLabel(session.id),
244
+ headline: host.deriveHeadline(session.id),
245
+ };
246
+ if (!host.offlineSessions.some((entry) => entry.id === session.id)) {
247
+ host.offlineSessions.push(offlineEntry);
248
+ }
249
+ host.stoppingSessionIds.add(session.id);
250
+ host.startedInDashboard = true;
251
+ session.kill();
252
+ host.debug?.(`stopped session ${session.id} → offline`, "session");
253
+ }
254
+ export function adjustAfterRemove(host, hasWorktrees) {
255
+ if (hasWorktrees && host.dashboardState.level === "sessions") {
256
+ host.updateWorktreeSessions();
257
+ if (host.dashboardState.worktreeEntries.length === 0) {
258
+ host.dashboardState.level = "worktrees";
259
+ }
260
+ else if (host.dashboardState.sessionIndex >= host.dashboardState.worktreeEntries.length) {
261
+ host.dashboardState.sessionIndex = host.dashboardState.worktreeEntries.length - 1;
262
+ }
263
+ }
264
+ else if (!hasWorktrees) {
265
+ const total = host.getDashboardSessions().length;
266
+ if (host.activeIndex >= total) {
267
+ host.activeIndex = Math.max(0, total - 1);
268
+ }
269
+ }
270
+ }
271
+ export function graveyardSession(host, sessionId) {
272
+ const session = host.offlineSessions.find((s) => s.id === sessionId);
273
+ if (!session)
274
+ return;
275
+ host.offlineSessions = host.offlineSessions.filter((s) => s.id !== sessionId);
276
+ const graveyardPath = getGraveyardPath();
277
+ let graveyard = [];
278
+ if (existsSync(graveyardPath)) {
279
+ try {
280
+ graveyard = JSON.parse(readFileSync(graveyardPath, "utf-8"));
281
+ }
282
+ catch { }
283
+ }
284
+ graveyard.push({ ...session, id: session.id });
285
+ writeFileSync(graveyardPath, JSON.stringify(graveyard, null, 2) + "\n");
286
+ const statePath = getStatePath();
287
+ if (existsSync(statePath)) {
288
+ try {
289
+ const state = JSON.parse(readFileSync(statePath, "utf-8"));
290
+ state.sessions = state.sessions.filter((s) => s.id !== sessionId);
291
+ writeFileSync(statePath, JSON.stringify(state, null, 2) + "\n");
292
+ }
293
+ catch { }
294
+ }
295
+ host.debug?.(`graveyarded session ${sessionId}`, "session");
296
+ }
297
+ export function isSessionRuntimeLive(host, runtime) {
298
+ if (runtime.exited)
299
+ return false;
300
+ const mappedTarget = host.sessionTmuxTargets.get(runtime.id);
301
+ const runtimeTarget = runtime.transport instanceof TmuxSessionTransport ? runtime.transport.tmuxTarget : undefined;
302
+ const target = mappedTarget ?? runtimeTarget;
303
+ if (!target)
304
+ return false;
305
+ try {
306
+ return Boolean(host.tmuxRuntimeManager.getTargetByWindowId(target.sessionName, target.windowId));
307
+ }
308
+ catch {
309
+ return false;
310
+ }
311
+ }
312
+ export function evictZombieSession(host, runtime) {
313
+ const idx = host.sessions.indexOf(runtime);
314
+ if (idx >= 0) {
315
+ host.sessions.splice(idx, 1);
316
+ }
317
+ host.stoppingSessionIds.delete(runtime.id);
318
+ host.sessionTmuxTargets.delete(runtime.id);
319
+ host.writeSessionsFile();
320
+ host.updateContextWatcherSessions();
321
+ host.saveState();
322
+ }
323
+ export function resumeOfflineSession(host, session) {
324
+ const existing = host.sessions.find((runtime) => runtime.id === session.id);
325
+ if (existing) {
326
+ if (isSessionRuntimeLive(host, existing)) {
327
+ host.offlineSessions = host.offlineSessions.filter((s) => s.id !== session.id);
328
+ host.invalidateDesktopStateSnapshot();
329
+ host.writeStatuslineFile();
330
+ return;
331
+ }
332
+ evictZombieSession(host, existing);
333
+ }
334
+ const config = loadConfig();
335
+ const toolCfg = config.tools[session.toolConfigKey];
336
+ if (!toolCfg)
337
+ return;
338
+ const derived = loadMetadataState().sessions[session.id]?.derived;
339
+ const relaunchFresh = derived?.activity === "error" || derived?.attention === "error";
340
+ const useBackendResume = !relaunchFresh && host.sessionBootstrap.canResumeWithBackendSessionId(toolCfg, session.backendSessionId);
341
+ let actionArgs;
342
+ if (useBackendResume) {
343
+ actionArgs = toolCfg.resumeArgs.map((a) => a.replace("{sessionId}", session.backendSessionId));
344
+ }
345
+ else if (relaunchFresh) {
346
+ actionArgs = [];
347
+ }
348
+ else {
349
+ actionArgs = [...(toolCfg.resumeFallback ?? [])];
350
+ }
351
+ const args = [...(toolCfg.args ?? []), ...actionArgs];
352
+ if (relaunchFresh) {
353
+ updateSessionMetadata(session.id, (current) => {
354
+ const next = { ...current };
355
+ delete next.derived;
356
+ delete next.status;
357
+ delete next.progress;
358
+ return next;
359
+ });
360
+ }
361
+ const preservedLabel = session.label ?? host.getSessionLabel(session.id);
362
+ host.offlineSessions = host.offlineSessions.filter((s) => s.id !== session.id);
363
+ host.invalidateDesktopStateSnapshot();
364
+ host.saveState();
365
+ host.writeStatuslineFile();
366
+ if (preservedLabel) {
367
+ host.sessionLabels.set(session.id, preservedLabel);
368
+ }
369
+ host.debug?.(`resuming offline session ${session.id} (${relaunchFresh ? "fresh" : useBackendResume ? `backend=${session.backendSessionId ?? "none"}` : "fallback"})`, "session");
370
+ host.createSession(session.command, args, toolCfg.preambleFlag, session.toolConfigKey, undefined, undefined, session.worktreePath, useBackendResume ? session.backendSessionId : undefined, session.id, true);
371
+ }
372
+ export function startHeartbeat(host) {
373
+ host.runtimeSync.startHeartbeat();
374
+ }
375
+ export function handleSessionClaimed(host, sessionId) {
376
+ const session = host.sessions.find((s) => s.id === sessionId);
377
+ if (!session)
378
+ return;
379
+ host.debug?.(`session ${sessionId} was claimed by another instance, killing local PTY`, "instance");
380
+ session.kill();
381
+ const idx = host.sessions.indexOf(session);
382
+ if (idx >= 0) {
383
+ host.sessions.splice(idx, 1);
384
+ host.sessionToolKeys.delete(sessionId);
385
+ host.sessionOriginalArgs.delete(sessionId);
386
+ host.sessionWorktreePaths.delete(sessionId);
387
+ host.sessionTmuxTargets.delete(sessionId);
388
+ }
389
+ if (host.activeIndex >= host.sessions.length) {
390
+ host.activeIndex = Math.max(0, host.sessions.length - 1);
391
+ }
392
+ host.renderDashboard();
393
+ }
394
+ export function stopHeartbeat(host) {
395
+ host.runtimeSync.stopHeartbeat();
396
+ }
397
+ export function startProjectServiceRefresh(host) {
398
+ host.runtimeSync.startProjectServiceRefresh();
399
+ }
400
+ export function stopProjectServiceRefresh(host) {
401
+ host.runtimeSync.stopProjectServiceRefresh();
402
+ }
403
+ export function getRemoteInstancesSafe(host) {
404
+ return host.instanceDirectory.getRemoteInstancesSafe(host.instanceId, process.cwd());
405
+ }
406
+ export function getRemoteOwnedSessionKeys(host) {
407
+ return host.instanceDirectory.getRemoteOwnedSessionKeys(host.instanceId, process.cwd());
408
+ }
409
+ export function getInstanceSessionRefs(host) {
410
+ return host.sessions.map((s) => ({
411
+ id: s.id,
412
+ tool: s.command,
413
+ backendSessionId: s.backendSessionId,
414
+ worktreePath: host.sessionWorktreePaths.get(s.id),
415
+ }));
416
+ }
417
+ export function writeSessionsFile(host) {
418
+ const dir = getLocalAimuxDir();
419
+ if (!existsSync(dir))
420
+ mkdirSync(dir, { recursive: true });
421
+ const localSessions = host.sessions.map((s) => ({
422
+ id: s.id,
423
+ tool: s.command,
424
+ backendSessionId: s.backendSessionId,
425
+ worktreePath: host.sessionWorktreePaths.get(s.id),
426
+ }));
427
+ const data = host.instanceDirectory.buildSessionsFileEntries(localSessions, host.instanceDirectory.getRemoteInstancesSafe(host.instanceId, process.cwd()));
428
+ writeFileSync(`${dir}/sessions.json`, JSON.stringify(data, null, 2) + "\n");
429
+ }
430
+ export function removeSessionsFile() {
431
+ try {
432
+ unlinkSync(`${getLocalAimuxDir()}/sessions.json`);
433
+ }
434
+ catch { }
435
+ }
436
+ export function listDesktopWorktrees(_host) {
437
+ return listAllWorktrees().filter((wt) => !wt.isBare);
438
+ }
439
+ //# sourceMappingURL=runtime-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-state.js","sourceRoot":"","sources":["../../src/multiplexer/runtime-state.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { InstanceDirectory } from "./instance-directory.js";
2
- import type { InstanceSessionRef } from "./instance-registry.js";
1
+ import type { InstanceDirectory } from "../instance-directory.js";
2
+ import type { InstanceSessionRef } from "../instance-registry.js";
3
3
  export declare class MultiplexerRuntimeSync {
4
4
  private readonly deps;
5
5
  private heartbeatInterval;
@@ -55,4 +55,4 @@ export class MultiplexerRuntimeSync {
55
55
  }
56
56
  }
57
57
  }
58
- //# sourceMappingURL=multiplexer-runtime-sync.js.map
58
+ //# sourceMappingURL=runtime-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-sync.js","sourceRoot":"","sources":["../../src/multiplexer/runtime-sync.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,sBAAsB;IAKd;IAJX,iBAAiB,GAA0C,IAAI,CAAC;IAChE,sBAAsB,GAA0C,IAAI,CAAC;IAE7E,YACmB,IAchB;QAdgB,SAAI,GAAJ,IAAI,CAcpB;IACA,CAAC;IAEJ,cAAc;QACZ,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACnC,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,iBAAiB,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,IAAI,oBAAoB,GAAG,KAAK,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,iBAAiB;iBACxB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;iBACrG,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACf,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACnC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;oBACnC,oBAAoB,GAAG,IAAI,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACtD,IAAI,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,WAAW,EAAE,CAAC;oBAChE,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEnB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACvD,IAAI,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,WAAW,EAAE,CAAC;gBAC1D,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACzC,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAED,0BAA0B;QACxB,IAAI,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACxC,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7C,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAClC,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,yBAAyB;QACvB,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC3C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACrC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import type { ServiceState } from "./index.js";
2
+ type ServiceHost = any;
3
+ export declare function serviceLabelForCommand(commandLine: string): string;
4
+ export declare function createService(host: ServiceHost, commandLine: string, worktreePath?: string): {
5
+ serviceId: string;
6
+ };
7
+ export declare function stopService(host: ServiceHost, serviceId: string): {
8
+ serviceId: string;
9
+ status: "stopped";
10
+ };
11
+ export declare function removeOfflineService(host: ServiceHost, serviceId: string): {
12
+ serviceId: string;
13
+ status: "removed";
14
+ };
15
+ export declare function resumeOfflineService(host: ServiceHost, service: ServiceState): {
16
+ serviceId: string;
17
+ status: "running";
18
+ };
19
+ export declare function resumeOfflineServiceById(host: ServiceHost, serviceId: string): {
20
+ serviceId: string;
21
+ status: "running";
22
+ };
23
+ export {};