@vaporsoft/orc 0.1.0

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 (223) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +178 -0
  3. package/dist/bin/orc.d.ts +3 -0
  4. package/dist/bin/orc.d.ts.map +1 -0
  5. package/dist/bin/orc.js +4 -0
  6. package/dist/bin/orc.js.map +1 -0
  7. package/dist/src/cli.d.ts +6 -0
  8. package/dist/src/cli.d.ts.map +1 -0
  9. package/dist/src/cli.js +28 -0
  10. package/dist/src/cli.js.map +1 -0
  11. package/dist/src/commands/init.d.ts +6 -0
  12. package/dist/src/commands/init.d.ts.map +1 -0
  13. package/dist/src/commands/init.js +58 -0
  14. package/dist/src/commands/init.js.map +1 -0
  15. package/dist/src/commands/start.d.ts +17 -0
  16. package/dist/src/commands/start.d.ts.map +1 -0
  17. package/dist/src/commands/start.js +146 -0
  18. package/dist/src/commands/start.js.map +1 -0
  19. package/dist/src/constants.d.ts +18 -0
  20. package/dist/src/constants.d.ts.map +1 -0
  21. package/dist/src/constants.js +42 -0
  22. package/dist/src/constants.js.map +1 -0
  23. package/dist/src/core/comment-categorizer.d.ts +20 -0
  24. package/dist/src/core/comment-categorizer.d.ts.map +1 -0
  25. package/dist/src/core/comment-categorizer.js +208 -0
  26. package/dist/src/core/comment-categorizer.js.map +1 -0
  27. package/dist/src/core/comment-fetcher.d.ts +37 -0
  28. package/dist/src/core/comment-fetcher.d.ts.map +1 -0
  29. package/dist/src/core/comment-fetcher.js +138 -0
  30. package/dist/src/core/comment-fetcher.js.map +1 -0
  31. package/dist/src/core/daemon.d.ts +92 -0
  32. package/dist/src/core/daemon.d.ts.map +1 -0
  33. package/dist/src/core/daemon.js +896 -0
  34. package/dist/src/core/daemon.js.map +1 -0
  35. package/dist/src/core/fix-executor.d.ts +50 -0
  36. package/dist/src/core/fix-executor.d.ts.map +1 -0
  37. package/dist/src/core/fix-executor.js +374 -0
  38. package/dist/src/core/fix-executor.js.map +1 -0
  39. package/dist/src/core/git-manager.d.ts +44 -0
  40. package/dist/src/core/git-manager.d.ts.map +1 -0
  41. package/dist/src/core/git-manager.js +230 -0
  42. package/dist/src/core/git-manager.js.map +1 -0
  43. package/dist/src/core/pilot-config.d.ts +18 -0
  44. package/dist/src/core/pilot-config.d.ts.map +1 -0
  45. package/dist/src/core/pilot-config.js +76 -0
  46. package/dist/src/core/pilot-config.js.map +1 -0
  47. package/dist/src/core/progress-store.d.ts +32 -0
  48. package/dist/src/core/progress-store.d.ts.map +1 -0
  49. package/dist/src/core/progress-store.js +106 -0
  50. package/dist/src/core/progress-store.js.map +1 -0
  51. package/dist/src/core/repo-config.d.ts +11 -0
  52. package/dist/src/core/repo-config.d.ts.map +1 -0
  53. package/dist/src/core/repo-config.js +168 -0
  54. package/dist/src/core/repo-config.js.map +1 -0
  55. package/dist/src/core/session-controller.d.ts +61 -0
  56. package/dist/src/core/session-controller.d.ts.map +1 -0
  57. package/dist/src/core/session-controller.js +926 -0
  58. package/dist/src/core/session-controller.js.map +1 -0
  59. package/dist/src/core/thread-responder.d.ts +28 -0
  60. package/dist/src/core/thread-responder.d.ts.map +1 -0
  61. package/dist/src/core/thread-responder.js +193 -0
  62. package/dist/src/core/thread-responder.js.map +1 -0
  63. package/dist/src/core/worktree-manager.d.ts +26 -0
  64. package/dist/src/core/worktree-manager.d.ts.map +1 -0
  65. package/dist/src/core/worktree-manager.js +189 -0
  66. package/dist/src/core/worktree-manager.js.map +1 -0
  67. package/dist/src/github/gh-client.d.ts +57 -0
  68. package/dist/src/github/gh-client.d.ts.map +1 -0
  69. package/dist/src/github/gh-client.js +236 -0
  70. package/dist/src/github/gh-client.js.map +1 -0
  71. package/dist/src/github/queries.d.ts +9 -0
  72. package/dist/src/github/queries.d.ts.map +1 -0
  73. package/dist/src/github/queries.js +152 -0
  74. package/dist/src/github/queries.js.map +1 -0
  75. package/dist/src/github/types.d.ts +114 -0
  76. package/dist/src/github/types.d.ts.map +1 -0
  77. package/dist/src/github/types.js +3 -0
  78. package/dist/src/github/types.js.map +1 -0
  79. package/dist/src/tui/App.d.ts +8 -0
  80. package/dist/src/tui/App.d.ts.map +1 -0
  81. package/dist/src/tui/App.js +407 -0
  82. package/dist/src/tui/App.js.map +1 -0
  83. package/dist/src/tui/components/ActivityPane.d.ts +7 -0
  84. package/dist/src/tui/components/ActivityPane.d.ts.map +1 -0
  85. package/dist/src/tui/components/ActivityPane.js +10 -0
  86. package/dist/src/tui/components/ActivityPane.js.map +1 -0
  87. package/dist/src/tui/components/DetailPanel.d.ts +15 -0
  88. package/dist/src/tui/components/DetailPanel.d.ts.map +1 -0
  89. package/dist/src/tui/components/DetailPanel.js +137 -0
  90. package/dist/src/tui/components/DetailPanel.js.map +1 -0
  91. package/dist/src/tui/components/DrillInOverlay.d.ts +13 -0
  92. package/dist/src/tui/components/DrillInOverlay.d.ts.map +1 -0
  93. package/dist/src/tui/components/DrillInOverlay.js +85 -0
  94. package/dist/src/tui/components/DrillInOverlay.js.map +1 -0
  95. package/dist/src/tui/components/ExpandedContent.d.ts +10 -0
  96. package/dist/src/tui/components/ExpandedContent.d.ts.map +1 -0
  97. package/dist/src/tui/components/ExpandedContent.js +99 -0
  98. package/dist/src/tui/components/ExpandedContent.js.map +1 -0
  99. package/dist/src/tui/components/Header.d.ts +12 -0
  100. package/dist/src/tui/components/Header.d.ts.map +1 -0
  101. package/dist/src/tui/components/Header.js +35 -0
  102. package/dist/src/tui/components/Header.js.map +1 -0
  103. package/dist/src/tui/components/HelpBar.d.ts +2 -0
  104. package/dist/src/tui/components/HelpBar.d.ts.map +1 -0
  105. package/dist/src/tui/components/HelpBar.js +11 -0
  106. package/dist/src/tui/components/HelpBar.js.map +1 -0
  107. package/dist/src/tui/components/KeybindLegend.d.ts +7 -0
  108. package/dist/src/tui/components/KeybindLegend.d.ts.map +1 -0
  109. package/dist/src/tui/components/KeybindLegend.js +53 -0
  110. package/dist/src/tui/components/KeybindLegend.js.map +1 -0
  111. package/dist/src/tui/components/LogPane.d.ts +11 -0
  112. package/dist/src/tui/components/LogPane.d.ts.map +1 -0
  113. package/dist/src/tui/components/LogPane.js +31 -0
  114. package/dist/src/tui/components/LogPane.js.map +1 -0
  115. package/dist/src/tui/components/SessionList.d.ts +14 -0
  116. package/dist/src/tui/components/SessionList.d.ts.map +1 -0
  117. package/dist/src/tui/components/SessionList.js +31 -0
  118. package/dist/src/tui/components/SessionList.js.map +1 -0
  119. package/dist/src/tui/components/SessionRow.d.ts +10 -0
  120. package/dist/src/tui/components/SessionRow.d.ts.map +1 -0
  121. package/dist/src/tui/components/SessionRow.js +52 -0
  122. package/dist/src/tui/components/SessionRow.js.map +1 -0
  123. package/dist/src/tui/components/SettingsPanel.d.ts +8 -0
  124. package/dist/src/tui/components/SettingsPanel.d.ts.map +1 -0
  125. package/dist/src/tui/components/SettingsPanel.js +191 -0
  126. package/dist/src/tui/components/SettingsPanel.js.map +1 -0
  127. package/dist/src/tui/components/StatusBadge.d.ts +9 -0
  128. package/dist/src/tui/components/StatusBadge.d.ts.map +1 -0
  129. package/dist/src/tui/components/StatusBadge.js +52 -0
  130. package/dist/src/tui/components/StatusBadge.js.map +1 -0
  131. package/dist/src/tui/components/Toolbar.d.ts +5 -0
  132. package/dist/src/tui/components/Toolbar.d.ts.map +1 -0
  133. package/dist/src/tui/components/Toolbar.js +2 -0
  134. package/dist/src/tui/components/Toolbar.js.map +1 -0
  135. package/dist/src/tui/components/comment-constants.d.ts +4 -0
  136. package/dist/src/tui/components/comment-constants.d.ts.map +1 -0
  137. package/dist/src/tui/components/comment-constants.js +15 -0
  138. package/dist/src/tui/components/comment-constants.js.map +1 -0
  139. package/dist/src/tui/hooks/logFlushUtils.d.ts +15 -0
  140. package/dist/src/tui/hooks/logFlushUtils.d.ts.map +1 -0
  141. package/dist/src/tui/hooks/logFlushUtils.js +33 -0
  142. package/dist/src/tui/hooks/logFlushUtils.js.map +1 -0
  143. package/dist/src/tui/hooks/useBranchLogs.d.ts +7 -0
  144. package/dist/src/tui/hooks/useBranchLogs.d.ts.map +1 -0
  145. package/dist/src/tui/hooks/useBranchLogs.js +58 -0
  146. package/dist/src/tui/hooks/useBranchLogs.js.map +1 -0
  147. package/dist/src/tui/hooks/useDaemonState.d.ts +19 -0
  148. package/dist/src/tui/hooks/useDaemonState.d.ts.map +1 -0
  149. package/dist/src/tui/hooks/useDaemonState.js +152 -0
  150. package/dist/src/tui/hooks/useDaemonState.js.map +1 -0
  151. package/dist/src/tui/hooks/useInitialDiscovery.d.ts +8 -0
  152. package/dist/src/tui/hooks/useInitialDiscovery.d.ts.map +1 -0
  153. package/dist/src/tui/hooks/useInitialDiscovery.js +31 -0
  154. package/dist/src/tui/hooks/useInitialDiscovery.js.map +1 -0
  155. package/dist/src/tui/hooks/useLogBuffer.d.ts +7 -0
  156. package/dist/src/tui/hooks/useLogBuffer.d.ts.map +1 -0
  157. package/dist/src/tui/hooks/useLogBuffer.js +52 -0
  158. package/dist/src/tui/hooks/useLogBuffer.js.map +1 -0
  159. package/dist/src/tui/hooks/useNextCheckCountdown.d.ts +7 -0
  160. package/dist/src/tui/hooks/useNextCheckCountdown.d.ts.map +1 -0
  161. package/dist/src/tui/hooks/useNextCheckCountdown.js +42 -0
  162. package/dist/src/tui/hooks/useNextCheckCountdown.js.map +1 -0
  163. package/dist/src/tui/hooks/useTerminalFocus.d.ts +9 -0
  164. package/dist/src/tui/hooks/useTerminalFocus.d.ts.map +1 -0
  165. package/dist/src/tui/hooks/useTerminalFocus.js +43 -0
  166. package/dist/src/tui/hooks/useTerminalFocus.js.map +1 -0
  167. package/dist/src/tui/theme.d.ts +32 -0
  168. package/dist/src/tui/theme.d.ts.map +1 -0
  169. package/dist/src/tui/theme.js +61 -0
  170. package/dist/src/tui/theme.js.map +1 -0
  171. package/dist/src/types/config.d.ts +35 -0
  172. package/dist/src/types/config.d.ts.map +1 -0
  173. package/dist/src/types/config.js +14 -0
  174. package/dist/src/types/config.js.map +1 -0
  175. package/dist/src/types/index.d.ts +107 -0
  176. package/dist/src/types/index.d.ts.map +1 -0
  177. package/dist/src/types/index.js +3 -0
  178. package/dist/src/types/index.js.map +1 -0
  179. package/dist/src/utils/concurrency.d.ts +7 -0
  180. package/dist/src/utils/concurrency.d.ts.map +1 -0
  181. package/dist/src/utils/concurrency.js +26 -0
  182. package/dist/src/utils/concurrency.js.map +1 -0
  183. package/dist/src/utils/format.d.ts +2 -0
  184. package/dist/src/utils/format.d.ts.map +1 -0
  185. package/dist/src/utils/format.js +8 -0
  186. package/dist/src/utils/format.js.map +1 -0
  187. package/dist/src/utils/logger.d.ts +39 -0
  188. package/dist/src/utils/logger.d.ts.map +1 -0
  189. package/dist/src/utils/logger.js +120 -0
  190. package/dist/src/utils/logger.js.map +1 -0
  191. package/dist/src/utils/notify.d.ts +6 -0
  192. package/dist/src/utils/notify.d.ts.map +1 -0
  193. package/dist/src/utils/notify.js +15 -0
  194. package/dist/src/utils/notify.js.map +1 -0
  195. package/dist/src/utils/open-terminal.d.ts +12 -0
  196. package/dist/src/utils/open-terminal.d.ts.map +1 -0
  197. package/dist/src/utils/open-terminal.js +93 -0
  198. package/dist/src/utils/open-terminal.js.map +1 -0
  199. package/dist/src/utils/process.d.ts +14 -0
  200. package/dist/src/utils/process.d.ts.map +1 -0
  201. package/dist/src/utils/process.js +36 -0
  202. package/dist/src/utils/process.js.map +1 -0
  203. package/dist/src/utils/project-detector.d.ts +12 -0
  204. package/dist/src/utils/project-detector.d.ts.map +1 -0
  205. package/dist/src/utils/project-detector.js +123 -0
  206. package/dist/src/utils/project-detector.js.map +1 -0
  207. package/dist/src/utils/quoting.d.ts +15 -0
  208. package/dist/src/utils/quoting.d.ts.map +1 -0
  209. package/dist/src/utils/quoting.js +39 -0
  210. package/dist/src/utils/quoting.js.map +1 -0
  211. package/dist/src/utils/retry.d.ts +14 -0
  212. package/dist/src/utils/retry.d.ts.map +1 -0
  213. package/dist/src/utils/retry.js +41 -0
  214. package/dist/src/utils/retry.js.map +1 -0
  215. package/dist/src/utils/settings.d.ts +14 -0
  216. package/dist/src/utils/settings.d.ts.map +1 -0
  217. package/dist/src/utils/settings.js +21 -0
  218. package/dist/src/utils/settings.js.map +1 -0
  219. package/dist/src/utils/time.d.ts +2 -0
  220. package/dist/src/utils/time.d.ts.map +1 -0
  221. package/dist/src/utils/time.js +5 -0
  222. package/dist/src/utils/time.js.map +1 -0
  223. package/package.json +73 -0
@@ -0,0 +1,407 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useState, useCallback, useEffect, useMemo } from "react";
3
+ import { Box, useApp, useInput, useStdin, useStdout } from "ink";
4
+ import { openTerminal } from "../utils/open-terminal.js";
5
+ import { logger } from "../utils/logger.js";
6
+ import { useDaemonState } from "./hooks/useDaemonState.js";
7
+ import { useLogBuffer } from "./hooks/useLogBuffer.js";
8
+ import { useBranchLogs } from "./hooks/useBranchLogs.js";
9
+ import { useNextCheckCountdown } from "./hooks/useNextCheckCountdown.js";
10
+ import { useInitialDiscovery } from "./hooks/useInitialDiscovery.js";
11
+ import { useTerminalFocus } from "./hooks/useTerminalFocus.js";
12
+ import { Header } from "./components/Header.js";
13
+ import { SessionList } from "./components/SessionList.js";
14
+ import { DetailPanel, getVisibleSections } from "./components/DetailPanel.js";
15
+ import { LogPane } from "./components/LogPane.js";
16
+ import { HelpBar } from "./components/HelpBar.js";
17
+ import { KeybindLegend } from "./components/KeybindLegend.js";
18
+ import { SettingsPanel } from "./components/SettingsPanel.js";
19
+ import { useThemeContext } from "./theme.js";
20
+ export function App({ daemon, startTime }) {
21
+ const { theme, toggleTheme } = useThemeContext();
22
+ const { exit } = useApp();
23
+ const { stdout } = useStdout();
24
+ const { isRawModeSupported } = useStdin();
25
+ const terminalFocused = useTerminalFocus();
26
+ const renderPaused = !terminalFocused;
27
+ const entries = useDaemonState(daemon, renderPaused);
28
+ const { entries: logEntries } = useLogBuffer(renderPaused);
29
+ const nextCheckIn = useNextCheckCountdown(daemon, renderPaused);
30
+ const isDiscovering = useInitialDiscovery(daemon);
31
+ const [focusedPane, setFocusedPane] = useState("sessions");
32
+ const [sessionIndex, setSessionIndex] = useState(0);
33
+ const [logOffset, setLogOffset] = useState(0);
34
+ const [detailMode, setDetailMode] = useState("off");
35
+ const [detailModeBeforeLogs, setDetailModeBeforeLogs] = useState("off");
36
+ const [branchLogOffset, setBranchLogOffset] = useState(0);
37
+ const [toolbarIndex, setToolbarIndex] = useState(-1);
38
+ const [showSettings, setShowSettings] = useState(false);
39
+ const [showLegend, setShowLegend] = useState(false);
40
+ const [focusedSection, setFocusedSection] = useState(null);
41
+ const [collapsedSections, setCollapsedSections] = useState(new Set());
42
+ const termHeight = stdout?.rows ?? 24;
43
+ const logVisibleLines = Math.max(3, termHeight - 12);
44
+ const branchLogLines = Math.max(3, Math.floor((termHeight - 16) / 2));
45
+ const showLogs = focusedPane === "logs";
46
+ // Split branches into open and merged
47
+ const { openBranches, mergedBranches } = useMemo(() => {
48
+ const open = [];
49
+ const merged = [];
50
+ for (const [branch, entry] of entries) {
51
+ if (entry.mergedAt != null) {
52
+ merged.push(branch);
53
+ }
54
+ else {
55
+ open.push(branch);
56
+ }
57
+ }
58
+ open.sort();
59
+ merged.sort();
60
+ return { openBranches: open, mergedBranches: merged };
61
+ }, [entries]);
62
+ const openCount = openBranches.length;
63
+ // Clamp sessionIndex inline to prevent stale index highlighting merged branches
64
+ const clampedSessionIndex = useMemo(() => {
65
+ if (openCount === 0) {
66
+ return -1;
67
+ }
68
+ return Math.max(0, Math.min(sessionIndex, openCount - 1));
69
+ }, [sessionIndex, openCount]);
70
+ // Update sessionIndex state when it gets clamped to keep state in sync
71
+ React.useEffect(() => {
72
+ if (clampedSessionIndex !== sessionIndex) {
73
+ setSessionIndex(clampedSessionIndex);
74
+ }
75
+ }, [clampedSessionIndex, sessionIndex]);
76
+ const selectedBranch = openBranches[clampedSessionIndex] ?? null;
77
+ // Track previous selected branch to detect when it changes (e.g., due to sorting shifts)
78
+ const prevSelectedBranchRef = React.useRef(selectedBranch);
79
+ React.useEffect(() => {
80
+ if (prevSelectedBranchRef.current !== selectedBranch) {
81
+ // Branch changed (even if index stayed same due to list reordering)
82
+ setFocusedSection(null);
83
+ setCollapsedSections(new Set());
84
+ prevSelectedBranchRef.current = selectedBranch;
85
+ }
86
+ }, [selectedBranch]);
87
+ const branchLogs = useBranchLogs(selectedBranch, renderPaused);
88
+ const selectedEntry = selectedBranch ? entries.get(selectedBranch) : undefined;
89
+ const activityLines = selectedEntry?.state?.claudeActivity ?? [];
90
+ const visibleSections = getVisibleSections(selectedEntry);
91
+ // Auto-focus a session that enters conflict_prompt (only when newly entering that status)
92
+ const [prevConflictBranches, setPrevConflictBranches] = useState(new Set());
93
+ useEffect(() => {
94
+ const currentConflictBranches = new Set();
95
+ openBranches.forEach((b) => {
96
+ const e = entries.get(b);
97
+ if (e?.state?.status === "conflict_prompt") {
98
+ currentConflictBranches.add(b);
99
+ }
100
+ });
101
+ // Find branches that newly entered conflict_prompt
102
+ const newConflictBranches = [...currentConflictBranches].filter(b => !prevConflictBranches.has(b));
103
+ if (newConflictBranches.length > 0) {
104
+ // Focus on the first branch that newly entered conflict_prompt
105
+ const conflictIndex = openBranches.findIndex(b => b === newConflictBranches[0]);
106
+ if (conflictIndex >= 0) {
107
+ setSessionIndex(conflictIndex);
108
+ setDetailMode("detail");
109
+ setFocusedSection(null); // Will default to first visible section
110
+ setCollapsedSections(new Set()); // Clear collapsed sections for new branch
111
+ setFocusedPane("sessions");
112
+ }
113
+ }
114
+ setPrevConflictBranches(currentConflictBranches);
115
+ }, [entries, openBranches]);
116
+ const toolbarButtons = [
117
+ { label: "Start All", action: () => daemon.startAll("once").catch((err) => logger.error(`startAll failed: ${err}`)) },
118
+ { label: "Watch All", action: () => daemon.watchAll().catch((err) => logger.error(`watchAll failed: ${err}`)) },
119
+ { label: "Stop All", action: () => daemon.stopAll().catch((err) => logger.error(`stopAll failed: ${err}`)) },
120
+ { label: "Refresh", action: () => daemon.refreshNow().catch((err) => logger.error(`refresh failed: ${err}`)) },
121
+ ];
122
+ const onQuit = useCallback(() => {
123
+ exit();
124
+ }, [exit]);
125
+ const onClearMerged = useCallback(() => {
126
+ daemon.clearMergedPRs();
127
+ }, [daemon]);
128
+ useInput((input, key) => {
129
+ // Modal panels — block all other keybindings when open
130
+ if (showSettings || showLegend)
131
+ return;
132
+ if (input === "q") {
133
+ onQuit();
134
+ return;
135
+ }
136
+ if (input === "h") {
137
+ setShowLegend(true);
138
+ return;
139
+ }
140
+ if (input === ",") {
141
+ setShowSettings(true);
142
+ return;
143
+ }
144
+ if (input === "t") {
145
+ toggleTheme();
146
+ return;
147
+ }
148
+ // Clear merged branches
149
+ if (input === "d" && mergedBranches.length > 0) {
150
+ onClearMerged();
151
+ return;
152
+ }
153
+ // Conflict resolution: R to resolve once, A to always auto-resolve
154
+ if (focusedPane === "sessions") {
155
+ const branch = openBranches[clampedSessionIndex];
156
+ const entry = branch ? entries.get(branch) : undefined;
157
+ if (entry?.state?.status === "conflict_prompt") {
158
+ if (input === "r" || input === "R") {
159
+ daemon.resolveConflicts(branch, false);
160
+ return;
161
+ }
162
+ if (input === "a" || input === "A") {
163
+ daemon.resolveConflicts(branch, true);
164
+ return;
165
+ }
166
+ if (key.escape) {
167
+ daemon.dismissConflictResolution(branch);
168
+ return;
169
+ }
170
+ }
171
+ }
172
+ // Plain git rebase (no Claude)
173
+ if (input === "r" && focusedPane === "sessions") {
174
+ const branch = openBranches[clampedSessionIndex];
175
+ if (branch && !daemon.isRunning(branch)) {
176
+ daemon.rebaseBranchPlain(branch).catch(() => { });
177
+ }
178
+ return;
179
+ }
180
+ // Rebase + Claude conflict resolution
181
+ if (input === "f" && focusedPane === "sessions") {
182
+ const branch = openBranches[clampedSessionIndex];
183
+ if (branch && !daemon.isRunning(branch)) {
184
+ daemon.rebaseBranch(branch).catch(() => { });
185
+ }
186
+ return;
187
+ }
188
+ if (key.tab) {
189
+ setFocusedPane((prev) => {
190
+ if (prev === "sessions") {
191
+ // Switching to logs — save and hide detail views
192
+ setDetailModeBeforeLogs(detailMode);
193
+ setDetailMode("off");
194
+ return "logs";
195
+ }
196
+ else {
197
+ // Switching back — restore detail state
198
+ setDetailMode(detailModeBeforeLogs);
199
+ return "sessions";
200
+ }
201
+ });
202
+ return;
203
+ }
204
+ // Toolbar: Enter activates focused button
205
+ if ((key.return || input === "\n") && toolbarIndex >= 0) {
206
+ toolbarButtons[toolbarIndex]?.action();
207
+ return;
208
+ }
209
+ // Toolbar: Escape deselects
210
+ if (key.escape && toolbarIndex >= 0) {
211
+ setToolbarIndex(-1);
212
+ return;
213
+ }
214
+ // Toolbar: left/right navigate between buttons
215
+ if (key.leftArrow && toolbarIndex >= 0) {
216
+ setToolbarIndex((prev) => Math.max(0, prev - 1));
217
+ return;
218
+ }
219
+ if (key.rightArrow && toolbarIndex >= 0) {
220
+ setToolbarIndex((prev) => Math.min(toolbarButtons.length - 1, prev + 1));
221
+ return;
222
+ }
223
+ // Toolbar: down arrow exits toolbar back to session list
224
+ if (key.downArrow && toolbarIndex >= 0) {
225
+ setToolbarIndex(-1);
226
+ return;
227
+ }
228
+ // Toggle detail pane for selected branch (handle both \r and \n)
229
+ if ((key.return || input === "\n") && focusedPane === "sessions") {
230
+ if (detailMode !== "detail") {
231
+ setFocusedSection(null); // Will default to first visible section
232
+ }
233
+ setDetailMode((prev) => prev === "detail" ? "off" : "detail");
234
+ return;
235
+ }
236
+ // Swap detail view with branch logs
237
+ if (input === "l" && focusedPane === "sessions") {
238
+ setDetailMode((prev) => prev === "logs" ? "off" : "logs");
239
+ setBranchLogOffset(0);
240
+ return;
241
+ }
242
+ // Start/stop selected branch (one-shot)
243
+ if (input === "s" && focusedPane === "sessions") {
244
+ const branch = openBranches[clampedSessionIndex];
245
+ if (branch) {
246
+ if (daemon.isRunning(branch)) {
247
+ daemon.stopBranch(branch).catch(() => { });
248
+ }
249
+ else {
250
+ daemon.startBranch(branch, "once").catch(() => { });
251
+ }
252
+ }
253
+ return;
254
+ }
255
+ // Watch selected branch (continuous)
256
+ if (input === "w" && focusedPane === "sessions") {
257
+ const branch = openBranches[clampedSessionIndex];
258
+ if (branch && !daemon.isRunning(branch)) {
259
+ daemon.watchBranch(branch).catch(() => { });
260
+ }
261
+ return;
262
+ }
263
+ // Start all (one-shot)
264
+ if (input === "a") {
265
+ daemon.startAll("once").catch((err) => {
266
+ logger.error(`startAll failed: ${err}`);
267
+ });
268
+ return;
269
+ }
270
+ // Stop all
271
+ if (input === "x") {
272
+ daemon.stopAll().catch((err) => {
273
+ logger.error(`stopAll failed: ${err}`);
274
+ });
275
+ return;
276
+ }
277
+ // Resume Claude session in new terminal
278
+ if (input === "c" && focusedPane === "sessions") {
279
+ const branch = openBranches[clampedSessionIndex];
280
+ const entry = branch ? entries.get(branch) : undefined;
281
+ const st = entry?.state;
282
+ if (st?.lastSessionId && st.workDir) {
283
+ openTerminal(`cd '${st.workDir}' && claude --resume ${st.lastSessionId}`);
284
+ logger.info(`Resuming Claude session ${st.lastSessionId}`, branch);
285
+ }
286
+ else {
287
+ logger.warn("No Claude session to resume for this branch", branch);
288
+ }
289
+ return;
290
+ }
291
+ // Open worktree shell in new terminal
292
+ if (input === "e" && focusedPane === "sessions") {
293
+ const branch = openBranches[clampedSessionIndex];
294
+ const entry = branch ? entries.get(branch) : undefined;
295
+ const st = entry?.state;
296
+ if (st?.workDir) {
297
+ openTerminal(`cd '${st.workDir}'`);
298
+ logger.info(`Opening shell at ${st.workDir}`, branch);
299
+ }
300
+ else {
301
+ logger.warn("No worktree directory for this branch", branch);
302
+ }
303
+ return;
304
+ }
305
+ // Space toggles collapse of focused section in detail view
306
+ if (input === " " && focusedPane === "sessions" && detailMode === "detail" && visibleSections.length > 0) {
307
+ // Use same validation as DetailPanel: check if focusedSection is in visibleSections before using it
308
+ const section = (focusedSection && visibleSections.includes(focusedSection))
309
+ ? focusedSection
310
+ : visibleSections[0];
311
+ if (section) {
312
+ setCollapsedSections((prev) => {
313
+ const next = new Set(prev);
314
+ if (next.has(section)) {
315
+ next.delete(section);
316
+ }
317
+ else {
318
+ next.add(section);
319
+ }
320
+ return next;
321
+ });
322
+ }
323
+ return;
324
+ }
325
+ // j/k always navigate the session list
326
+ if (input === "k" && focusedPane === "sessions") {
327
+ const nextIndex = Math.max(0, sessionIndex - 1);
328
+ if (nextIndex !== sessionIndex) {
329
+ // Only reset section state when actually changing branches
330
+ setBranchLogOffset(0);
331
+ setFocusedSection(null);
332
+ setCollapsedSections(new Set());
333
+ }
334
+ setSessionIndex(nextIndex);
335
+ return;
336
+ }
337
+ if (input === "j" && focusedPane === "sessions") {
338
+ const nextIndex = Math.min(openCount - 1, sessionIndex + 1);
339
+ if (nextIndex !== sessionIndex) {
340
+ // Only reset section state when actually changing branches
341
+ setBranchLogOffset(0);
342
+ setFocusedSection(null);
343
+ setCollapsedSections(new Set());
344
+ }
345
+ setSessionIndex(nextIndex);
346
+ return;
347
+ }
348
+ if (focusedPane === "sessions") {
349
+ if (detailMode === "logs") {
350
+ // When branch logs are open, arrows scroll the branch log
351
+ if (key.upArrow) {
352
+ setBranchLogOffset((prev) => Math.min(prev + 1, Math.max(0, branchLogs.length - branchLogLines)));
353
+ }
354
+ else if (key.downArrow) {
355
+ setBranchLogOffset((prev) => Math.max(0, prev - 1));
356
+ }
357
+ }
358
+ else if (detailMode === "detail" && visibleSections.length > 0) {
359
+ // When detail panel is open, arrows navigate between sections
360
+ const currentIndex = focusedSection ? visibleSections.indexOf(focusedSection) : 0;
361
+ const effectiveIndex = currentIndex >= 0 ? currentIndex : 0;
362
+ if (key.upArrow) {
363
+ const newIndex = Math.max(0, effectiveIndex - 1);
364
+ setFocusedSection(visibleSections[newIndex] ?? null);
365
+ }
366
+ else if (key.downArrow) {
367
+ const newIndex = Math.min(visibleSections.length - 1, effectiveIndex + 1);
368
+ setFocusedSection(visibleSections[newIndex] ?? null);
369
+ }
370
+ }
371
+ else {
372
+ if (key.upArrow) {
373
+ if (sessionIndex === 0) {
374
+ // At top of session list — move focus up into toolbar
375
+ setToolbarIndex(0);
376
+ }
377
+ else {
378
+ const nextIndex = sessionIndex - 1;
379
+ setBranchLogOffset(0);
380
+ setFocusedSection(null);
381
+ setCollapsedSections(new Set());
382
+ setSessionIndex(nextIndex);
383
+ }
384
+ }
385
+ else if (key.downArrow) {
386
+ const nextIndex = Math.min(openCount - 1, sessionIndex + 1);
387
+ if (nextIndex !== sessionIndex) {
388
+ setBranchLogOffset(0);
389
+ setFocusedSection(null);
390
+ setCollapsedSections(new Set());
391
+ }
392
+ setSessionIndex(nextIndex);
393
+ }
394
+ }
395
+ }
396
+ else {
397
+ if (key.upArrow) {
398
+ setLogOffset((prev) => Math.min(prev + 1, Math.max(0, logEntries.length - logVisibleLines)));
399
+ }
400
+ else if (key.downArrow) {
401
+ setLogOffset((prev) => Math.max(0, prev - 1));
402
+ }
403
+ }
404
+ }, { isActive: isRawModeSupported });
405
+ return (_jsxs(Box, { flexDirection: "column", height: termHeight, children: [_jsx(Header, { entries: entries, startTime: startTime, nextCheckIn: nextCheckIn, buttons: toolbarButtons, selectedButton: toolbarIndex }), _jsx(SessionList, { entries: entries, selectedIndex: clampedSessionIndex, focused: focusedPane === "sessions" && toolbarIndex < 0, openBranches: openBranches, mergedBranches: mergedBranches, renderPaused: renderPaused, isDiscovering: isDiscovering }), detailMode !== "logs" && (_jsx(DetailPanel, { entries: entries, selectedBranch: selectedBranch, showDetail: detailMode === "detail", activityLines: activityLines, focusedSection: detailMode === "detail" ? focusedSection : null, collapsedSections: collapsedSections })), detailMode === "logs" && (_jsx(LogPane, { entries: branchLogs, focused: focusedPane === "sessions", scrollOffset: branchLogOffset, visibleLines: branchLogLines, label: selectedBranch ? `Logs [${selectedBranch}]` : "Logs" })), showLogs && (_jsx(LogPane, { entries: logEntries, focused: focusedPane === "logs", scrollOffset: logOffset, visibleLines: logVisibleLines, label: "All Logs" })), showSettings && (_jsx(SettingsPanel, { daemon: daemon, onClose: () => setShowSettings(false) })), showLegend && (_jsx(KeybindLegend, { showingLogs: showLogs, onClose: () => setShowLegend(false) })), _jsx(Box, { flexGrow: 1, borderStyle: "round", borderColor: theme.border, borderTop: false, borderBottom: false }), _jsx(HelpBar, {})] }));
406
+ }
407
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../../src/tui/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface ActivityPaneProps {
2
+ lines: string[];
3
+ branch: string;
4
+ }
5
+ export declare function ActivityPane({ lines, branch }: ActivityPaneProps): import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
7
+ //# sourceMappingURL=ActivityPane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityPane.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/ActivityPane.tsx"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,iBAAiB,kDA6BhE"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { useTheme } from "../theme.js";
4
+ export function ActivityPane({ lines, branch }) {
5
+ const theme = useTheme();
6
+ if (lines.length === 0)
7
+ return null;
8
+ return (_jsxs(Box, { borderStyle: "round", borderColor: theme.border, borderTop: false, borderBottom: false, paddingX: 1, flexDirection: "column", children: [_jsxs(Text, { color: theme.accent, dimColor: true, children: ["━━ ", _jsx(Text, { color: theme.accent, bold: true, children: "Claude" }), " ", _jsxs(Text, { dimColor: true, children: ["[", branch, "]"] })] }), lines.map((line, i) => (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { dimColor: i < lines.length - 1, color: i === lines.length - 1 ? theme.text : undefined, children: line }) }, i)))] }));
9
+ }
10
+ //# sourceMappingURL=ActivityPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityPane.js","sourceRoot":"","sources":["../../../../src/tui/components/ActivityPane.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOvC,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAqB;IAC/D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,OAAO,CACL,MAAC,GAAG,IACF,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,KAAK,CAAC,MAAM,EACzB,SAAS,EAAE,KAAK,EAChB,YAAY,EAAE,KAAK,EACnB,QAAQ,EAAE,CAAC,EACX,aAAa,EAAC,QAAQ,aAEtB,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,mBAChC,KAAK,EACN,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,6BAAc,EAC5C,GAAG,EACJ,MAAC,IAAI,IAAC,QAAQ,wBAAG,MAAM,SAAS,IAC3B,EACN,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,GAAG,IAAS,UAAU,EAAE,CAAC,YACxB,KAAC,IAAI,IAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,YACzF,IAAI,GACA,IAHC,CAAC,CAIL,CACP,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { PREntry } from "../hooks/useDaemonState.js";
2
+ export type DetailSection = "cycles" | "conflicts" | "ci" | "comments" | "claude";
3
+ /** Returns the ordered list of visible sections for the given entry. */
4
+ export declare function getVisibleSections(entry: PREntry | undefined): DetailSection[];
5
+ interface DetailPanelProps {
6
+ entries: Map<string, PREntry>;
7
+ selectedBranch: string | null;
8
+ showDetail: boolean;
9
+ activityLines?: string[];
10
+ focusedSection?: DetailSection | null;
11
+ collapsedSections?: Set<DetailSection>;
12
+ }
13
+ export declare function DetailPanel({ entries, selectedBranch, showDetail, activityLines, focusedSection, collapsedSections, }: DetailPanelProps): import("react/jsx-runtime").JSX.Element | null;
14
+ export {};
15
+ //# sourceMappingURL=DetailPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DetailPanel.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/DetailPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAM1D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAC;AAElF,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,aAAa,EAAE,CAQ9E;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,iBAAiB,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;CACxC;AAmJD,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,cAAc,EACd,UAAU,EACV,aAAkB,EAClB,cAAqB,EACrB,iBAA6B,GAC9B,EAAE,gBAAgB,kDAoYlB"}