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,400 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { loadConfig } from "../config.js";
4
+ import { readHistory } from "../context/history.js";
5
+ import { getAimuxDirFor, getProjectStateDir, getStatusDir } from "../paths.js";
6
+ import { loadTeamConfig } from "../team.js";
7
+ import { SessionRuntime } from "../session-runtime.js";
8
+ import { TmuxSessionTransport } from "../tmux/session-transport.js";
9
+ import { loadMetadataState } from "../metadata-store.js";
10
+ import { parseAgentOutput } from "../agent-output-parser.js";
11
+ import { serializeAgentInput } from "../agent-message-parts.js";
12
+ import { resolveAttachmentPath } from "../attachment-store.js";
13
+ import { appendSessionMessage, readSessionMessages } from "../session-message-history.js";
14
+ import { captureGitContext } from "../context/context-bridge.js";
15
+ export function getSessionLabel(host, sessionId) {
16
+ return (host.sessionLabels.get(sessionId) ?? host.offlineSessions.find((session) => session.id === sessionId)?.label);
17
+ }
18
+ export function applySessionLabel(host, sessionId, label) {
19
+ const trimmed = label?.trim();
20
+ if (trimmed) {
21
+ host.sessionLabels.set(sessionId, trimmed);
22
+ }
23
+ else {
24
+ host.sessionLabels.delete(sessionId);
25
+ }
26
+ const offline = host.offlineSessions.find((session) => session.id === sessionId);
27
+ if (offline) {
28
+ if (trimmed)
29
+ offline.label = trimmed;
30
+ else
31
+ delete offline.label;
32
+ }
33
+ }
34
+ export function applyDashboardSessionLabel(host, sessionId, label) {
35
+ const trimmed = label?.trim();
36
+ host.dashboardSessionsCache = host.dashboardSessionsCache.map((session) => session.id === sessionId ? { ...session, label: trimmed || undefined } : session);
37
+ host.dashboardWorktreeGroupsCache = host.dashboardWorktreeGroupsCache.map((group) => ({
38
+ ...group,
39
+ sessions: group.sessions.map((session) => session.id === sessionId ? { ...session, label: trimmed || undefined } : session),
40
+ }));
41
+ host.dashboardState.worktreeSessions = host.dashboardState.worktreeSessions.map((session) => session.id === sessionId ? { ...session, label: trimmed || undefined } : session);
42
+ }
43
+ export async function updateSessionLabel(host, sessionId, label) {
44
+ if (host.mode === "dashboard") {
45
+ applySessionLabel(host, sessionId, label);
46
+ applyDashboardSessionLabel(host, sessionId, label);
47
+ host.setPendingDashboardSessionAction(sessionId, "renaming");
48
+ host.writeStatuslineFile();
49
+ host.renderCurrentDashboardView();
50
+ void host
51
+ .postToProjectService("/agents/rename", { sessionId, label })
52
+ .then(() => {
53
+ host.invalidateDesktopStateSnapshot();
54
+ host.setPendingDashboardSessionAction(sessionId, null);
55
+ host.writeStatuslineFile();
56
+ host.renderCurrentDashboardView();
57
+ })
58
+ .catch((err) => {
59
+ host.setPendingDashboardSessionAction(sessionId, null);
60
+ host.footerFlash = `Rename failed: ${err instanceof Error ? err.message : String(err)}`;
61
+ host.footerFlashTicks = 4;
62
+ host.writeStatuslineFile();
63
+ host.renderCurrentDashboardView();
64
+ });
65
+ return;
66
+ }
67
+ applySessionLabel(host, sessionId, label);
68
+ host.invalidateDesktopStateSnapshot();
69
+ const localSession = host.sessions.find((session) => session.id === sessionId)?.transport;
70
+ if (localSession instanceof TmuxSessionTransport) {
71
+ localSession.renameWindow(localSession.command);
72
+ const target = localSession.tmuxTarget;
73
+ host.sessionTmuxTargets.set(sessionId, target);
74
+ host.syncTmuxWindowMetadata(sessionId);
75
+ }
76
+ host.saveState();
77
+ host.writeStatuslineFile();
78
+ host.renderDashboard();
79
+ }
80
+ export function readStatusHeadline(_host, sessionId) {
81
+ try {
82
+ const statusPath = join(getStatusDir(), `${sessionId}.md`);
83
+ if (!existsSync(statusPath))
84
+ return undefined;
85
+ const content = readFileSync(statusPath, "utf-8").trim();
86
+ if (!content)
87
+ return undefined;
88
+ return content.split("\n")[0].slice(0, 80);
89
+ }
90
+ catch {
91
+ return undefined;
92
+ }
93
+ }
94
+ export function deriveHeadline(host, sessionId) {
95
+ const taskDescription = host.taskDispatcher?.getSessionTask(sessionId);
96
+ if (taskDescription)
97
+ return taskDescription.slice(0, 80);
98
+ const statusHeadline = readStatusHeadline(host, sessionId);
99
+ if (statusHeadline)
100
+ return statusHeadline;
101
+ try {
102
+ const turns = readHistory(sessionId, { lastN: 3 });
103
+ const lastPrompt = turns.filter((turn) => turn.type === "prompt").pop();
104
+ if (lastPrompt)
105
+ return lastPrompt.content.slice(0, 80);
106
+ }
107
+ catch { }
108
+ return undefined;
109
+ }
110
+ export function resolveRunningSession(host, sessionId) {
111
+ const session = host.sessions.find((candidate) => candidate.id === sessionId);
112
+ if (!session || session.exited) {
113
+ throw new Error(`Session "${sessionId}" is not running`);
114
+ }
115
+ return session;
116
+ }
117
+ export function writeTmuxAgentInput(host, sessionId, transport, data) {
118
+ const target = host.sessionTmuxTargets.get(sessionId) ?? transport.tmuxTarget;
119
+ let textBuffer = "";
120
+ const flushText = () => {
121
+ if (!textBuffer)
122
+ return;
123
+ host.tmuxRuntimeManager.sendText(target, textBuffer);
124
+ textBuffer = "";
125
+ };
126
+ for (const ch of data) {
127
+ if (ch === "\r") {
128
+ flushText();
129
+ host.tmuxRuntimeManager.sendEnter(target);
130
+ continue;
131
+ }
132
+ if (ch === "\n") {
133
+ flushText();
134
+ host.tmuxRuntimeManager.sendKey(target, "C-j");
135
+ continue;
136
+ }
137
+ textBuffer += ch;
138
+ }
139
+ flushText();
140
+ }
141
+ export function normalizeAgentInput(_host, data, submit) {
142
+ if (!submit)
143
+ return data;
144
+ return data.replace(/(?:\r\n|\r|\n)+$/g, "");
145
+ }
146
+ export function paneStillContainsAgentDraft(host, target, draft) {
147
+ try {
148
+ const pane = host.tmuxRuntimeManager.captureTarget(target, { startLine: -60 });
149
+ const normalize = (value) => value.replace(/\s+/g, " ").trim().toLowerCase();
150
+ const normalizedDraft = normalize(draft);
151
+ if (!normalizedDraft)
152
+ return false;
153
+ return normalize(pane).includes(normalizedDraft);
154
+ }
155
+ catch {
156
+ return false;
157
+ }
158
+ }
159
+ export function scheduleTmuxAgentSubmit(host, sessionId, target, draft) {
160
+ const submitOnce = () => {
161
+ try {
162
+ host.tmuxRuntimeManager.sendEnter(target);
163
+ }
164
+ catch { }
165
+ };
166
+ const step = (attempt = 1) => {
167
+ if (attempt > 4)
168
+ return;
169
+ setTimeout(() => {
170
+ try {
171
+ const currentTarget = host.sessionTmuxTargets.get(sessionId);
172
+ if (!currentTarget || currentTarget.windowId !== target.windowId) {
173
+ return;
174
+ }
175
+ submitOnce();
176
+ if (attempt >= 4)
177
+ return;
178
+ setTimeout(() => {
179
+ try {
180
+ if (paneStillContainsAgentDraft(host, target, draft)) {
181
+ step(attempt + 1);
182
+ }
183
+ }
184
+ catch { }
185
+ }, 700);
186
+ }
187
+ catch { }
188
+ }, attempt === 1 ? 150 : 700);
189
+ };
190
+ step();
191
+ }
192
+ export async function writeAgentInput(host, sessionId, data = "", parts, clientMessageId, submit = false) {
193
+ const session = resolveRunningSession(host, sessionId);
194
+ appendSessionMessage(sessionId, { data, parts, clientMessageId });
195
+ const serializedData = serializeAgentInput({ data, parts }, {
196
+ tool: host.sessionToolKeys.get(sessionId),
197
+ resolveAttachmentPath,
198
+ });
199
+ const normalizedData = normalizeAgentInput(host, serializedData, submit);
200
+ if (!normalizedData && !submit) {
201
+ throw new Error("input data is required");
202
+ }
203
+ if (session.transport instanceof TmuxSessionTransport) {
204
+ if (normalizedData) {
205
+ writeTmuxAgentInput(host, sessionId, session.transport, normalizedData);
206
+ }
207
+ if (submit) {
208
+ const target = host.sessionTmuxTargets.get(sessionId) ?? session.transport.tmuxTarget;
209
+ scheduleTmuxAgentSubmit(host, sessionId, target, normalizedData);
210
+ }
211
+ }
212
+ else {
213
+ session.write(submit ? `${normalizedData}\r` : normalizedData);
214
+ }
215
+ return { sessionId };
216
+ }
217
+ export async function readAgentHistory(host, sessionId, lastN) {
218
+ resolveRunningSession(host, sessionId);
219
+ return {
220
+ sessionId,
221
+ messages: readSessionMessages(sessionId, { lastN: lastN ?? 20 }),
222
+ lastN: lastN ?? 20,
223
+ };
224
+ }
225
+ export async function interruptAgent(host, sessionId) {
226
+ const session = resolveRunningSession(host, sessionId);
227
+ if (session.transport instanceof TmuxSessionTransport) {
228
+ const target = host.sessionTmuxTargets.get(sessionId) ?? session.transport.tmuxTarget;
229
+ host.tmuxRuntimeManager.sendEscape(target);
230
+ }
231
+ else {
232
+ session.write("\x1b");
233
+ }
234
+ return { sessionId };
235
+ }
236
+ export async function readAgentOutput(host, sessionId, startLine) {
237
+ resolveRunningSession(host, sessionId);
238
+ const target = host.sessionTmuxTargets.get(sessionId);
239
+ if (!target) {
240
+ throw new Error(`Session "${sessionId}" does not have a tmux target`);
241
+ }
242
+ const output = host.tmuxRuntimeManager.captureTarget(target, {
243
+ startLine: startLine ?? -120,
244
+ });
245
+ return {
246
+ sessionId,
247
+ output,
248
+ startLine: startLine ?? -120,
249
+ parsed: parseAgentOutput(output, {
250
+ tool: host.sessionToolKeys.get(sessionId),
251
+ }),
252
+ };
253
+ }
254
+ export function registerManagedSession(host, session, args, toolConfigKey, worktreePath, role, startTime) {
255
+ const existing = host.sessions.find((runtime) => runtime.transport === session);
256
+ if (existing)
257
+ return existing;
258
+ const runtime = new SessionRuntime(session, startTime, {
259
+ onEvent: (event) => host.handleSessionRuntimeEvent(runtime, event),
260
+ });
261
+ if (toolConfigKey) {
262
+ host.sessionToolKeys.set(runtime.id, toolConfigKey);
263
+ }
264
+ host.sessionOriginalArgs.set(runtime.id, args);
265
+ if (worktreePath) {
266
+ host.sessionWorktreePaths.set(runtime.id, worktreePath);
267
+ }
268
+ if (role) {
269
+ host.sessionRoles.set(runtime.id, role);
270
+ }
271
+ else if (!host.sessionRoles.has(runtime.id)) {
272
+ try {
273
+ const teamConfig = loadTeamConfig();
274
+ host.sessionRoles.set(runtime.id, teamConfig.defaultRole);
275
+ }
276
+ catch { }
277
+ }
278
+ const label = host.offlineSessions.find((offline) => offline.id === runtime.id)?.label;
279
+ if (label) {
280
+ host.sessionLabels.set(runtime.id, label);
281
+ }
282
+ host.sessions.push(runtime);
283
+ host.writeSessionsFile();
284
+ host.updateContextWatcherSessions();
285
+ if (host.sessions.length === 1)
286
+ host.contextWatcher.start();
287
+ return runtime;
288
+ }
289
+ export function handleSessionRuntimeEvent(host, runtime, event) {
290
+ if (event.type === "output") {
291
+ host.writeStatuslineFile();
292
+ return;
293
+ }
294
+ if (event.type !== "exit")
295
+ return;
296
+ const code = event.code;
297
+ host.debug?.(`session exited: ${runtime.id} (code=${code})`, "session");
298
+ const uptime = runtime.startTime ? Date.now() - runtime.startTime : Infinity;
299
+ let errorHint = "";
300
+ if (code !== 0 && uptime < 10_000) {
301
+ const sessionCwd = host.sessionWorktreePaths.get(runtime.id);
302
+ const searchDirs = [getProjectStateDir(), sessionCwd ? getAimuxDirFor(sessionCwd) : null].filter(Boolean);
303
+ for (const dir of searchDirs) {
304
+ if (errorHint)
305
+ break;
306
+ try {
307
+ const logPath = join(dir, "recordings", `${runtime.id}.log`);
308
+ if (existsSync(logPath)) {
309
+ const raw = readFileSync(logPath, "utf-8");
310
+ const lines = raw
311
+ .split("\n")
312
+ .map((l) => l.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, "").trim())
313
+ .filter(Boolean);
314
+ const errorLine = lines.find((l) => l.includes("Error") || l.includes("error") || l.includes("unmatched") || l.includes("not found"));
315
+ if (errorLine)
316
+ errorHint = `: ${errorLine.slice(0, 60)}`;
317
+ }
318
+ }
319
+ catch { }
320
+ }
321
+ host.footerFlash = `✗ ${runtime.id} crashed (code ${code})${errorHint}`;
322
+ host.footerFlashTicks = 8;
323
+ host.debug?.(`quick crash: ${runtime.id} (code=${code}, uptime=${uptime}ms)${errorHint}`, "session");
324
+ }
325
+ if (code !== 0) {
326
+ host.publishAlert({
327
+ kind: "task_failed",
328
+ sessionId: runtime.id,
329
+ title: `${runtime.id} failed`,
330
+ message: errorHint ? `Agent exited with code ${code}${errorHint}` : `Agent exited with code ${code}.`,
331
+ dedupeKey: `exit-failed:${runtime.id}`,
332
+ cooldownMs: 15_000,
333
+ });
334
+ }
335
+ captureGitContext(runtime.id, runtime.command).catch(() => { });
336
+ const idx = host.sessions.indexOf(runtime);
337
+ if (idx === -1)
338
+ return;
339
+ host.sessions.splice(idx, 1);
340
+ host.stoppingSessionIds.delete(runtime.id);
341
+ host.writeSessionsFile();
342
+ host.updateContextWatcherSessions();
343
+ const mappedTarget = host.sessionTmuxTargets.get(runtime.id);
344
+ const runtimeTarget = runtime.transport instanceof TmuxSessionTransport ? runtime.transport.tmuxTarget : undefined;
345
+ if (!mappedTarget || !runtimeTarget || mappedTarget.windowId === runtimeTarget.windowId) {
346
+ host.sessionTmuxTargets.delete(runtime.id);
347
+ }
348
+ host.saveState();
349
+ if (host.sessions.length === 0) {
350
+ if (host.startedInDashboard) {
351
+ host.renderDashboard();
352
+ return;
353
+ }
354
+ host.resolveRun?.(code);
355
+ return;
356
+ }
357
+ if (host.activeIndex >= host.sessions.length) {
358
+ host.activeIndex = host.sessions.length - 1;
359
+ }
360
+ host.renderDashboard();
361
+ }
362
+ export function buildTmuxWindowMetadata(host, sessionId, command) {
363
+ const sessionMetadata = loadMetadataState().sessions[sessionId];
364
+ return {
365
+ kind: "agent",
366
+ sessionId,
367
+ command,
368
+ args: host.sessionOriginalArgs.get(sessionId) ?? [],
369
+ toolConfigKey: host.sessionToolKeys.get(sessionId) ?? command,
370
+ backendSessionId: host.sessions.find((session) => session.id === sessionId)?.backendSessionId,
371
+ worktreePath: host.sessionWorktreePaths.get(sessionId),
372
+ label: getSessionLabel(host, sessionId),
373
+ role: host.sessionRoles.get(sessionId),
374
+ activity: sessionMetadata?.derived?.activity,
375
+ attention: sessionMetadata?.derived?.attention,
376
+ unseenCount: sessionMetadata?.derived?.unseenCount,
377
+ statusText: sessionMetadata?.status?.text,
378
+ };
379
+ }
380
+ export function syncTmuxWindowMetadata(host, sessionId) {
381
+ const runtime = host.sessions.find((session) => session.id === sessionId);
382
+ if (!runtime || !(runtime.transport instanceof TmuxSessionTransport))
383
+ return;
384
+ const metadata = buildTmuxWindowMetadata(host, sessionId, runtime.command);
385
+ host.tmuxRuntimeManager.setWindowMetadata(runtime.transport.tmuxTarget, metadata);
386
+ host.tmuxRuntimeManager.applyManagedAgentWindowPolicy(runtime.transport.tmuxTarget, metadata.toolConfigKey);
387
+ }
388
+ export function updateContextWatcherSessions(host) {
389
+ host.contextWatcher.updateSessions(host.sessions.map((s) => {
390
+ const key = host.sessionToolKeys.get(s.id);
391
+ const tc = key ? loadConfig().tools[key] : undefined;
392
+ return {
393
+ id: s.id,
394
+ command: s.command,
395
+ turnPatterns: tc?.turnPatterns?.map((p) => new RegExp(p)),
396
+ tmuxTarget: host.sessionTmuxTargets.get(s.id),
397
+ };
398
+ }));
399
+ }
400
+ //# sourceMappingURL=session-runtime-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-runtime-core.js","sourceRoot":"","sources":["../../src/multiplexer/session-runtime-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type OrchestrationThread, type ThreadStatus } from "../threads.js";
2
+ import { type ThreadEntry, type WorkflowEntry } from "../workflow.js";
3
+ type SubscreenHost = any;
4
+ export declare function attentionScore(host: SubscreenHost, entry: any): number;
5
+ export declare function getActivityEntries(host: SubscreenHost): any[];
6
+ export declare function showActivityDashboard(host: SubscreenHost): void;
7
+ export declare function buildWorkflowEntriesForHost(host: SubscreenHost): WorkflowEntry[];
8
+ export declare function showWorkflow(host: SubscreenHost): void;
9
+ export declare function renderWorkflow(host: SubscreenHost): void;
10
+ export declare function renderWorkflowDetailsForHost(host: SubscreenHost, width: number, height: number): string[];
11
+ export declare function handleWorkflowKey(host: SubscreenHost, data: Buffer): void;
12
+ export declare function renderActivityDashboard(host: SubscreenHost): void;
13
+ export declare function handleActivityKey(host: SubscreenHost, data: Buffer): void;
14
+ export declare function showThreads(host: SubscreenHost): void;
15
+ export declare function getPreferredThreadIndexForParticipant(_host: SubscreenHost, participantId: string, entries: ThreadEntry[]): number;
16
+ export declare function openRelevantThreadForSession(host: SubscreenHost, sessionId: string): void;
17
+ export declare function renderThreads(host: SubscreenHost): void;
18
+ export declare function renderThreadDetailsForHost(host: SubscreenHost, width: number, height: number): string[];
19
+ export declare function handleThreadsKey(host: SubscreenHost, data: Buffer): void;
20
+ export declare function renderThreadReply(host: SubscreenHost): void;
21
+ export declare function describeHandoffState(_host: SubscreenHost, thread: OrchestrationThread): string;
22
+ export declare function runThreadHandoffAction(host: SubscreenHost, mode: "accept" | "complete", threadId: string): Promise<void>;
23
+ export declare function runThreadStatusAction(host: SubscreenHost, threadId: string, status: ThreadStatus): Promise<void>;
24
+ export declare function runTaskLifecycleAction(host: SubscreenHost, mode: "accept" | "block" | "complete" | "reopen", taskId: string): Promise<void>;
25
+ export declare function runReviewLifecycleAction(host: SubscreenHost, mode: "approve" | "request_changes", taskId: string): Promise<void>;
26
+ export declare function describeWorkflowFilter(host: SubscreenHost): string;
27
+ export declare function cycleWorkflowFilter(host: SubscreenHost): void;
28
+ export declare function handleThreadReplyKey(host: SubscreenHost, data: Buffer): void;
29
+ export declare function activateNextAttentionEntry(host: SubscreenHost): Promise<void>;
30
+ export {};