@luckydraw/cumulus 0.5.1

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 (142) hide show
  1. package/README.md +148 -0
  2. package/dist/cli/cumulus.d.ts +3 -0
  3. package/dist/cli/cumulus.d.ts.map +1 -0
  4. package/dist/cli/cumulus.js +233 -0
  5. package/dist/cli/cumulus.js.map +1 -0
  6. package/dist/index.d.ts +33 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +43 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/config.d.ts +86 -0
  11. package/dist/lib/config.d.ts.map +1 -0
  12. package/dist/lib/config.js +241 -0
  13. package/dist/lib/config.js.map +1 -0
  14. package/dist/lib/content-detector.d.ts +46 -0
  15. package/dist/lib/content-detector.d.ts.map +1 -0
  16. package/dist/lib/content-detector.js +359 -0
  17. package/dist/lib/content-detector.js.map +1 -0
  18. package/dist/lib/content-store.d.ts +255 -0
  19. package/dist/lib/content-store.d.ts.map +1 -0
  20. package/dist/lib/content-store.js +955 -0
  21. package/dist/lib/content-store.js.map +1 -0
  22. package/dist/lib/context-budget.d.ts +83 -0
  23. package/dist/lib/context-budget.d.ts.map +1 -0
  24. package/dist/lib/context-budget.js +101 -0
  25. package/dist/lib/context-budget.js.map +1 -0
  26. package/dist/lib/embeddings.d.ts +64 -0
  27. package/dist/lib/embeddings.d.ts.map +1 -0
  28. package/dist/lib/embeddings.js +176 -0
  29. package/dist/lib/embeddings.js.map +1 -0
  30. package/dist/lib/history.d.ts +120 -0
  31. package/dist/lib/history.d.ts.map +1 -0
  32. package/dist/lib/history.js +205 -0
  33. package/dist/lib/history.js.map +1 -0
  34. package/dist/lib/image-utils.d.ts +41 -0
  35. package/dist/lib/image-utils.d.ts.map +1 -0
  36. package/dist/lib/image-utils.js +288 -0
  37. package/dist/lib/image-utils.js.map +1 -0
  38. package/dist/lib/migrate.d.ts +35 -0
  39. package/dist/lib/migrate.d.ts.map +1 -0
  40. package/dist/lib/migrate.js +196 -0
  41. package/dist/lib/migrate.js.map +1 -0
  42. package/dist/lib/retriever.d.ts +56 -0
  43. package/dist/lib/retriever.d.ts.map +1 -0
  44. package/dist/lib/retriever.js +644 -0
  45. package/dist/lib/retriever.js.map +1 -0
  46. package/dist/lib/revert.d.ts +23 -0
  47. package/dist/lib/revert.d.ts.map +1 -0
  48. package/dist/lib/revert.js +75 -0
  49. package/dist/lib/revert.js.map +1 -0
  50. package/dist/lib/session.d.ts +65 -0
  51. package/dist/lib/session.d.ts.map +1 -0
  52. package/dist/lib/session.js +289 -0
  53. package/dist/lib/session.js.map +1 -0
  54. package/dist/lib/snapshots.d.ts +39 -0
  55. package/dist/lib/snapshots.d.ts.map +1 -0
  56. package/dist/lib/snapshots.js +99 -0
  57. package/dist/lib/snapshots.js.map +1 -0
  58. package/dist/lib/stream-processor.d.ts +149 -0
  59. package/dist/lib/stream-processor.d.ts.map +1 -0
  60. package/dist/lib/stream-processor.js +389 -0
  61. package/dist/lib/stream-processor.js.map +1 -0
  62. package/dist/lib/summarizer.d.ts +67 -0
  63. package/dist/lib/summarizer.d.ts.map +1 -0
  64. package/dist/lib/summarizer.js +213 -0
  65. package/dist/lib/summarizer.js.map +1 -0
  66. package/dist/mcp/index.d.ts +3 -0
  67. package/dist/mcp/index.d.ts.map +1 -0
  68. package/dist/mcp/index.js +16 -0
  69. package/dist/mcp/index.js.map +1 -0
  70. package/dist/mcp/proxy.d.ts +19 -0
  71. package/dist/mcp/proxy.d.ts.map +1 -0
  72. package/dist/mcp/proxy.js +120 -0
  73. package/dist/mcp/proxy.js.map +1 -0
  74. package/dist/mcp/server.d.ts +6 -0
  75. package/dist/mcp/server.d.ts.map +1 -0
  76. package/dist/mcp/server.js +29 -0
  77. package/dist/mcp/server.js.map +1 -0
  78. package/dist/mcp/shared-server.d.ts +21 -0
  79. package/dist/mcp/shared-server.d.ts.map +1 -0
  80. package/dist/mcp/shared-server.js +210 -0
  81. package/dist/mcp/shared-server.js.map +1 -0
  82. package/dist/mcp/tool-handler.d.ts +20 -0
  83. package/dist/mcp/tool-handler.d.ts.map +1 -0
  84. package/dist/mcp/tool-handler.js +1405 -0
  85. package/dist/mcp/tool-handler.js.map +1 -0
  86. package/dist/tui/components/App.d.ts +11 -0
  87. package/dist/tui/components/App.d.ts.map +1 -0
  88. package/dist/tui/components/App.js +607 -0
  89. package/dist/tui/components/App.js.map +1 -0
  90. package/dist/tui/components/DebugContextView.d.ts +13 -0
  91. package/dist/tui/components/DebugContextView.d.ts.map +1 -0
  92. package/dist/tui/components/DebugContextView.js +78 -0
  93. package/dist/tui/components/DebugContextView.js.map +1 -0
  94. package/dist/tui/components/IncludeMenu.d.ts +12 -0
  95. package/dist/tui/components/IncludeMenu.d.ts.map +1 -0
  96. package/dist/tui/components/IncludeMenu.js +127 -0
  97. package/dist/tui/components/IncludeMenu.js.map +1 -0
  98. package/dist/tui/components/InputArea.d.ts +27 -0
  99. package/dist/tui/components/InputArea.d.ts.map +1 -0
  100. package/dist/tui/components/InputArea.js +366 -0
  101. package/dist/tui/components/InputArea.js.map +1 -0
  102. package/dist/tui/components/MarkdownText.d.ts +38 -0
  103. package/dist/tui/components/MarkdownText.d.ts.map +1 -0
  104. package/dist/tui/components/MarkdownText.js +234 -0
  105. package/dist/tui/components/MarkdownText.js.map +1 -0
  106. package/dist/tui/components/MessageBubble.d.ts +11 -0
  107. package/dist/tui/components/MessageBubble.d.ts.map +1 -0
  108. package/dist/tui/components/MessageBubble.js +16 -0
  109. package/dist/tui/components/MessageBubble.js.map +1 -0
  110. package/dist/tui/components/MessageHistory.d.ts +11 -0
  111. package/dist/tui/components/MessageHistory.d.ts.map +1 -0
  112. package/dist/tui/components/MessageHistory.js +12 -0
  113. package/dist/tui/components/MessageHistory.js.map +1 -0
  114. package/dist/tui/components/RevertMenu.d.ts +17 -0
  115. package/dist/tui/components/RevertMenu.d.ts.map +1 -0
  116. package/dist/tui/components/RevertMenu.js +144 -0
  117. package/dist/tui/components/RevertMenu.js.map +1 -0
  118. package/dist/tui/components/StatusBar.d.ts +14 -0
  119. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  120. package/dist/tui/components/StatusBar.js +13 -0
  121. package/dist/tui/components/StatusBar.js.map +1 -0
  122. package/dist/tui/components/StreamingResponse.d.ts +15 -0
  123. package/dist/tui/components/StreamingResponse.d.ts.map +1 -0
  124. package/dist/tui/components/StreamingResponse.js +52 -0
  125. package/dist/tui/components/StreamingResponse.js.map +1 -0
  126. package/dist/tui/hooks/useAppState.d.ts +147 -0
  127. package/dist/tui/hooks/useAppState.d.ts.map +1 -0
  128. package/dist/tui/hooks/useAppState.js +110 -0
  129. package/dist/tui/hooks/useAppState.js.map +1 -0
  130. package/dist/tui/hooks/useClaudeProcess.d.ts +19 -0
  131. package/dist/tui/hooks/useClaudeProcess.d.ts.map +1 -0
  132. package/dist/tui/hooks/useClaudeProcess.js +185 -0
  133. package/dist/tui/hooks/useClaudeProcess.js.map +1 -0
  134. package/dist/tui/index.d.ts +10 -0
  135. package/dist/tui/index.d.ts.map +1 -0
  136. package/dist/tui/index.js +11 -0
  137. package/dist/tui/index.js.map +1 -0
  138. package/dist/tui/utils/streamParser.d.ts +31 -0
  139. package/dist/tui/utils/streamParser.d.ts.map +1 -0
  140. package/dist/tui/utils/streamParser.js +63 -0
  141. package/dist/tui/utils/streamParser.js.map +1 -0
  142. package/package.json +94 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownText.js","sourceRoot":"","sources":["../../../src/tui/components/MarkdownText.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Single message display with role-based styling.
3
+ */
4
+ import React from 'react';
5
+ import type { Message } from '../../lib/history.js';
6
+ interface MessageBubbleProps {
7
+ message: Message;
8
+ }
9
+ export declare function MessageBubble({ message }: MessageBubbleProps): React.ReactElement;
10
+ export {};
11
+ //# sourceMappingURL=MessageBubble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageBubble.d.ts","sourceRoot":"","sources":["../../../src/tui/components/MessageBubble.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAuBjF"}
@@ -0,0 +1,16 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Single message display with role-based styling.
4
+ */
5
+ import { Box, Text } from 'ink';
6
+ import { MarkdownText } from './MarkdownText.js';
7
+ export function MessageBubble({ message }) {
8
+ const isUser = message.role === 'user';
9
+ const isSession = message.role === 'session';
10
+ if (isSession) {
11
+ // Don't render session documents
12
+ return _jsx(_Fragment, {});
13
+ }
14
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: isUser ? 'cyan' : 'white', bold: true, children: isUser ? '> ' : '' }), _jsx(Box, { marginLeft: isUser ? 2 : 0, children: isUser ? (_jsx(Text, { color: "cyan", children: message.content })) : (_jsx(MarkdownText, { content: message.content })) })] }));
15
+ }
16
+ //# sourceMappingURL=MessageBubble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageBubble.js","sourceRoot":"","sources":["../../../src/tui/components/MessageBubble.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAKhC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAsB;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;IAE7C,IAAI,SAAS,EAAE,CAAC;QACd,iCAAiC;QACjC,OAAO,mBAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,kBACzC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GACd,EACP,KAAC,GAAG,IAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAC5B,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,OAAO,CAAC,OAAO,GAAQ,CAC5C,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAI,CAC3C,GACG,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Renders completed messages using Static for permanence.
3
+ */
4
+ import React from 'react';
5
+ import type { Message } from '../../lib/history.js';
6
+ interface MessageHistoryProps {
7
+ messages: Message[];
8
+ }
9
+ export declare function MessageHistory({ messages }: MessageHistoryProps): React.ReactElement;
10
+ export {};
11
+ //# sourceMappingURL=MessageHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageHistory.d.ts","sourceRoot":"","sources":["../../../src/tui/components/MessageHistory.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CASpF"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Renders completed messages using Static for permanence.
4
+ */
5
+ import { Static } from 'ink';
6
+ import { MessageBubble } from './MessageBubble.js';
7
+ export function MessageHistory({ messages }) {
8
+ // Filter out session documents from display
9
+ const displayMessages = messages.filter(m => m.role !== 'session');
10
+ return (_jsx(Static, { items: displayMessages, children: message => _jsx(MessageBubble, { message: message }, message.id) }));
11
+ }
12
+ //# sourceMappingURL=MessageHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageHistory.js","sourceRoot":"","sources":["../../../src/tui/components/MessageHistory.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAK7B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,MAAM,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAuB;IAC9D,4CAA4C;IAC5C,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAEnE,OAAO,CACL,KAAC,MAAM,IAAC,KAAK,EAAE,eAAe,YAC3B,OAAO,CAAC,EAAE,CAAC,KAAC,aAAa,IAAkB,OAAO,EAAE,OAAO,IAA5B,OAAO,CAAC,EAAE,CAAsB,GACzD,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Overlay menu for reverting conversation to an earlier point.
3
+ * Supports list, confirm, and result modes.
4
+ */
5
+ import React from 'react';
6
+ import type { HistoryStore, Message } from '../../lib/history.js';
7
+ import type { RevertResult } from '../../lib/revert.js';
8
+ interface RevertMenuProps {
9
+ messages: Message[];
10
+ threadName: string;
11
+ historyStore: HistoryStore;
12
+ onRevert: (result: RevertResult) => void;
13
+ onClose: () => void;
14
+ }
15
+ export declare function RevertMenu({ messages, historyStore, onRevert, onClose, }: RevertMenuProps): React.ReactElement;
16
+ export {};
17
+ //# sourceMappingURL=RevertMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevertMenu.d.ts","sourceRoot":"","sources":["../../../src/tui/components/RevertMenu.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAsBxD,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkDD,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,OAAO,GACR,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CA8KtC"}
@@ -0,0 +1,144 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Overlay menu for reverting conversation to an earlier point.
4
+ * Supports list, confirm, and result modes.
5
+ */
6
+ import { Box, Text, useInput } from 'ink';
7
+ import { useState, useEffect, useMemo } from 'react';
8
+ import { executeRevert } from '../../lib/revert.js';
9
+ function formatTime(timestamp) {
10
+ const d = new Date(timestamp);
11
+ const h = d.getHours();
12
+ const m = d.getMinutes().toString().padStart(2, '0');
13
+ const ampm = h >= 12 ? 'PM' : 'AM';
14
+ const h12 = h % 12 || 12;
15
+ return `${h12}:${m} ${ampm}`;
16
+ }
17
+ function truncatePreview(content, maxLen = 50) {
18
+ const firstLine = content.split('\n')[0] ?? '';
19
+ if (firstLine.length <= maxLen)
20
+ return firstLine;
21
+ return firstLine.slice(0, maxLen - 3) + '...';
22
+ }
23
+ /**
24
+ * Group messages into user+assistant turn pairs.
25
+ * Returns most recent first, max 50 turns.
26
+ */
27
+ function groupTurns(messages) {
28
+ const turns = [];
29
+ let turnIndex = 0;
30
+ for (let i = 0; i < messages.length; i++) {
31
+ const msg = messages[i];
32
+ if (msg.role === 'user') {
33
+ turnIndex++;
34
+ const nextMsg = messages[i + 1];
35
+ const assistantMsg = nextMsg?.role === 'assistant' ? nextMsg : undefined;
36
+ const gitSnapshot = msg.metadata?.gitSnapshot;
37
+ turns.push({
38
+ index: turnIndex,
39
+ userMessage: msg,
40
+ assistantMessage: assistantMsg,
41
+ preview: truncatePreview(msg.content),
42
+ time: formatTime(msg.timestamp),
43
+ hasGitSnapshot: !!gitSnapshot,
44
+ gitSnapshot,
45
+ });
46
+ }
47
+ }
48
+ // Most recent first, max 50
49
+ return turns.reverse().slice(0, 50);
50
+ }
51
+ export function RevertMenu({ messages, historyStore, onRevert, onClose, }) {
52
+ const [mode, setMode] = useState('list');
53
+ const [selectedIndex, setSelectedIndex] = useState(0);
54
+ const [restoreGit, setRestoreGit] = useState(false);
55
+ const [resultMessage, setResultMessage] = useState('');
56
+ const [resultColor, setResultColor] = useState('green');
57
+ const turns = useMemo(() => groupTurns(messages), [messages]);
58
+ // Auto-close result after 2s
59
+ useEffect(() => {
60
+ if (mode !== 'result')
61
+ return;
62
+ const timer = setTimeout(() => onClose(), 2000);
63
+ return () => clearTimeout(timer);
64
+ }, [mode, onClose]);
65
+ useInput((_input, key) => {
66
+ if (mode === 'list') {
67
+ if (key.escape) {
68
+ onClose();
69
+ return;
70
+ }
71
+ if (key.upArrow) {
72
+ setSelectedIndex(prev => (prev > 0 ? prev - 1 : turns.length - 1));
73
+ return;
74
+ }
75
+ if (key.downArrow) {
76
+ setSelectedIndex(prev => (prev < turns.length - 1 ? prev + 1 : 0));
77
+ return;
78
+ }
79
+ if (key.return && turns.length > 0) {
80
+ setRestoreGit(false);
81
+ setMode('confirm');
82
+ return;
83
+ }
84
+ }
85
+ if (mode === 'confirm') {
86
+ if (key.escape) {
87
+ setMode('list');
88
+ return;
89
+ }
90
+ if (key.leftArrow || key.rightArrow) {
91
+ setRestoreGit(prev => !prev);
92
+ return;
93
+ }
94
+ if (key.return) {
95
+ const turn = turns[selectedIndex];
96
+ // Determine the last message to keep: the assistant response if it exists, otherwise the user message
97
+ const lastKeptMessage = turn.assistantMessage ?? turn.userMessage;
98
+ executeRevert(historyStore, lastKeptMessage.id, {
99
+ restoreGit: restoreGit && turn.hasGitSnapshot,
100
+ gitSnapshot: turn.gitSnapshot,
101
+ }).then(result => {
102
+ if (result.success) {
103
+ let msg = `Reverted: removed ${result.removedCount} message${result.removedCount !== 1 ? 's' : ''}`;
104
+ if (result.gitResult?.success) {
105
+ msg += ' | Code restored';
106
+ if (result.gitResult.warning) {
107
+ msg += ` (${result.gitResult.warning})`;
108
+ }
109
+ }
110
+ else if (result.gitResult && !result.gitResult.success) {
111
+ msg += ` | Git restore failed: ${result.gitResult.error}`;
112
+ }
113
+ setResultMessage(msg);
114
+ setResultColor('green');
115
+ onRevert(result);
116
+ }
117
+ else {
118
+ setResultMessage(`Revert failed: ${result.error}`);
119
+ setResultColor('red');
120
+ }
121
+ setMode('result');
122
+ });
123
+ return;
124
+ }
125
+ }
126
+ if (mode === 'result') {
127
+ if (key.return || key.escape) {
128
+ onClose();
129
+ return;
130
+ }
131
+ }
132
+ });
133
+ const selectedTurn = turns[selectedIndex];
134
+ // Count messages that would be removed
135
+ const messagesAfter = selectedTurn
136
+ ? messages.length -
137
+ messages.indexOf(selectedTurn.assistantMessage ?? selectedTurn.userMessage) -
138
+ 1
139
+ : 0;
140
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "yellow", paddingX: 1, marginTop: 1, children: [_jsx(Text, { bold: true, color: "yellow", children: "/revert - Revert Conversation" }), mode === 'list' && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [turns.length === 0 && _jsx(Text, { color: "gray", children: "No turns to revert to." }), turns.map((turn, i) => (_jsxs(Text, { children: [i === selectedIndex ? _jsx(Text, { color: "yellow", children: ' > ' }) : ' ', _jsxs(Text, { color: "gray", children: ["[", turn.index, "]"] }), _jsxs(Text, { children: [" ", turn.preview] }), _jsxs(Text, { color: "gray", children: [" ", turn.time] }), turn.hasGitSnapshot && _jsx(Text, { color: "green", children: " [git]" })] }, turn.userMessage.id))), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Up/Down: navigate | Enter: select | Esc: close" }) })] })), mode === 'confirm' && selectedTurn && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { children: ["Revert to after turn ", _jsxs(Text, { bold: true, children: ["#", selectedTurn.index] }), "?"] }), _jsxs(Text, { color: "gray", children: ["Removes ", messagesAfter, " message", messagesAfter !== 1 ? 's' : '', " after this exchange."] }), selectedTurn.hasGitSnapshot && (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { children: "Also restore code? " }), _jsxs(Text, { children: ['[', _jsx(Text, { color: restoreGit ? 'green' : 'gray', bold: restoreGit, children: "Yes" }), '] [', _jsx(Text, { color: !restoreGit ? 'cyan' : 'gray', bold: !restoreGit, children: "No" }), ']'] })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: selectedTurn.hasGitSnapshot
141
+ ? 'Left/Right: toggle code restore | Enter: confirm | Esc: back'
142
+ : 'Enter: confirm | Esc: back' }) })] })), mode === 'result' && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: resultColor, children: resultMessage }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Enter/Esc to close" }) })] }))] }));
143
+ }
144
+ //# sourceMappingURL=RevertMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RevertMenu.js","sourceRoot":"","sources":["../../../src/tui/components/RevertMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Status bar showing thread info, stats, and streaming indicator.
3
+ */
4
+ import React from 'react';
5
+ import type { HistoryStats } from '../../lib/history.js';
6
+ interface StatusBarProps {
7
+ threadName: string;
8
+ stats: HistoryStats;
9
+ isProcessing: boolean;
10
+ error: string | null;
11
+ }
12
+ export declare function StatusBar({ threadName, stats, isProcessing, error, }: StatusBarProps): React.ReactElement;
13
+ export {};
14
+ //# sourceMappingURL=StatusBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKzD,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EACxB,UAAU,EACV,KAAK,EACL,YAAY,EACZ,KAAK,GACN,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA0BrC"}
@@ -0,0 +1,13 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Status bar showing thread info, stats, and streaming indicator.
4
+ */
5
+ import { createRequire } from 'module';
6
+ import { Box, Text } from 'ink';
7
+ import Spinner from 'ink-spinner';
8
+ const require = createRequire(import.meta.url);
9
+ const { version } = require('../../../package.json');
10
+ export function StatusBar({ threadName, stats, isProcessing, error, }) {
11
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [error && (_jsx(Box, { children: _jsxs(Text, { color: "red", children: ["Error: ", error] }) })), _jsxs(Box, { children: [isProcessing && (_jsx(Box, { marginRight: 1, children: _jsx(Text, { color: "cyan", children: _jsx(Spinner, { type: "dots" }) }) })), _jsxs(Text, { color: "gray", children: ["cumulus v", version, " | ", threadName, " | ", stats.count, " messages | ~", stats.totalTokens, " tokens"] }), !isProcessing && _jsx(Text, { color: "gray", children: " | Type 'exit' or Ctrl+C to quit" })] })] }));
12
+ }
13
+ //# sourceMappingURL=StatusBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/tui/components/StatusBar.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,OAAO,MAAM,aAAa,CAAC;AAKlC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAwB,CAAC;AAS5E,MAAM,UAAU,SAAS,CAAC,EACxB,UAAU,EACV,KAAK,EACL,YAAY,EACZ,KAAK,GACU;IACf,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aAErC,KAAK,IAAI,CACR,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wBAAS,KAAK,IAAQ,GACnC,CACP,EAGD,MAAC,GAAG,eACD,YAAY,IAAI,CACf,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,YACjB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAChB,KAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,GAClB,GACH,CACP,EACD,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,0BACN,OAAO,SAAK,UAAU,SAAK,KAAK,CAAC,KAAK,mBAAe,KAAK,CAAC,WAAW,eAC3E,EACN,CAAC,YAAY,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,iDAAkD,IAClF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Live-updating Claude response during streaming.
3
+ * Shows raw text with a blinking cursor. Full markdown formatting is applied
4
+ * only after completion when the message moves to MessageHistory/Static.
5
+ *
6
+ * The viewport is capped to ~50% of terminal height with wrapping-aware line
7
+ * counting, so the dynamic area never exceeds what Ink can safely erase.
8
+ */
9
+ import React from 'react';
10
+ interface StreamingResponseProps {
11
+ content: string;
12
+ }
13
+ export declare function StreamingResponse({ content }: StreamingResponseProps): React.ReactElement | null;
14
+ export {};
15
+ //# sourceMappingURL=StreamingResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamingResponse.d.ts","sourceRoot":"","sources":["../../../src/tui/components/StreamingResponse.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,sBAAsB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAqDhG"}
@@ -0,0 +1,52 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Live-updating Claude response during streaming.
4
+ * Shows raw text with a blinking cursor. Full markdown formatting is applied
5
+ * only after completion when the message moves to MessageHistory/Static.
6
+ *
7
+ * The viewport is capped to ~50% of terminal height with wrapping-aware line
8
+ * counting, so the dynamic area never exceeds what Ink can safely erase.
9
+ */
10
+ import { Box, Text, useStdout } from 'ink';
11
+ import { useState, useEffect } from 'react';
12
+ const CURSOR = ' \u2588'; // space + full block character
13
+ const BLINK_INTERVAL_MS = 530;
14
+ export function StreamingResponse({ content }) {
15
+ const { stdout } = useStdout();
16
+ const [cursorVisible, setCursorVisible] = useState(true);
17
+ useEffect(() => {
18
+ const timer = setInterval(() => {
19
+ setCursorVisible(v => !v);
20
+ }, BLINK_INTERVAL_MS);
21
+ return () => clearInterval(timer);
22
+ }, []);
23
+ if (!content) {
24
+ return null;
25
+ }
26
+ const termWidth = stdout.columns || 80;
27
+ const termHeight = stdout.rows || 24;
28
+ // Cap streaming viewport to ~50% of terminal height. This leaves ample room
29
+ // for the header, input area, status bar, margins, and any line-wrap overflow
30
+ // in other dynamic components. The previous approach (rows - 9) was too tight
31
+ // and didn't account for MarkdownText expanding raw lines (e.g. tables).
32
+ // We now render raw text during streaming to avoid that expansion entirely.
33
+ const maxTermRows = Math.max(3, Math.floor(termHeight * 0.5));
34
+ const lines = content.split('\n');
35
+ // Walk backwards from the last line, accumulating terminal rows
36
+ // (accounting for wrapping) until we hit the budget.
37
+ let usedRows = 0;
38
+ let startIdx = lines.length;
39
+ for (let i = lines.length - 1; i >= 0; i--) {
40
+ const lineLen = lines[i].length || 1; // empty line = 1 terminal row
41
+ const lineTermRows = Math.ceil(lineLen / termWidth) || 1;
42
+ if (usedRows + lineTermRows > maxTermRows)
43
+ break;
44
+ usedRows += lineTermRows;
45
+ startIdx = i;
46
+ }
47
+ const truncatedCount = startIdx;
48
+ const visibleLines = lines.slice(startIdx);
49
+ const visibleContent = visibleLines.join('\n');
50
+ return (_jsxs(Box, { flexDirection: "column", children: [truncatedCount > 0 && _jsxs(Text, { dimColor: true, children: ["... (", truncatedCount, " lines above)"] }), _jsxs(Text, { children: [visibleContent, cursorVisible ? CURSOR : ''] })] }));
51
+ }
52
+ //# sourceMappingURL=StreamingResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamingResponse.js","sourceRoot":"","sources":["../../../src/tui/components/StreamingResponse.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMnD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,+BAA+B;AACzD,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,MAAM,UAAU,iBAAiB,CAAC,EAAE,OAAO,EAA0B;IACnE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAErC,4EAA4E;IAC5E,8EAA8E;IAC9E,8EAA8E;IAC9E,yEAAyE;IACzE,4EAA4E;IAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;IAE9D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,gEAAgE;IAChE,qDAAqD;IACrD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,8BAA8B;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,QAAQ,GAAG,YAAY,GAAG,WAAW;YAAE,MAAM;QACjD,QAAQ,IAAI,YAAY,CAAC;QACzB,QAAQ,GAAG,CAAC,CAAC;IACf,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC;IAChC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/C,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,cAAc,GAAG,CAAC,IAAI,MAAC,IAAI,IAAC,QAAQ,4BAAO,cAAc,qBAAqB,EAC/E,MAAC,IAAI,eACF,cAAc,EACd,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IACvB,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Application state management with context and reducer.
3
+ */
4
+ import { type Dispatch } from 'react';
5
+ import type { HistoryStats, Message } from '../../lib/history.js';
6
+ /** Retrieval debug info */
7
+ export interface RetrievalDebugInfo {
8
+ historyCount: number;
9
+ contentCount: number;
10
+ tokensUsed: number;
11
+ debug: {
12
+ historyResults: Array<{
13
+ index: number;
14
+ role: string;
15
+ score: number;
16
+ snippet: string;
17
+ }>;
18
+ contentResults: Array<{
19
+ id: string;
20
+ score: number;
21
+ snippet: string;
22
+ }>;
23
+ sessionResults: Array<{
24
+ sessionId: string;
25
+ score: number;
26
+ snippet: string;
27
+ }>;
28
+ };
29
+ }
30
+ /** Always-include file debug info */
31
+ export interface AlwaysIncludeDebugInfo {
32
+ files: Array<{
33
+ path: string;
34
+ resolvedPath: string;
35
+ tokens: number;
36
+ truncated: boolean;
37
+ error?: string;
38
+ }>;
39
+ totalTokens: number;
40
+ }
41
+ /** Budget allocation debug info */
42
+ export interface BudgetDebugInfo {
43
+ total: number;
44
+ userQuery: number;
45
+ alwaysInclude: number;
46
+ recentContext: number;
47
+ ragAvailable: number;
48
+ ragUsed: number;
49
+ }
50
+ /** Context info for debug display */
51
+ export interface DebugContext {
52
+ systemPrompt: string;
53
+ userMessage: string;
54
+ recentMessages: Array<{
55
+ role: string;
56
+ content: string;
57
+ }>;
58
+ sessionId: string;
59
+ messageCount: number;
60
+ tokenCount: number;
61
+ retrieval: RetrievalDebugInfo | null;
62
+ alwaysInclude?: AlwaysIncludeDebugInfo;
63
+ budget?: BudgetDebugInfo;
64
+ }
65
+ export interface AppState {
66
+ messages: Message[];
67
+ streamBuffer: string;
68
+ isProcessing: boolean;
69
+ stats: HistoryStats;
70
+ error: string | null;
71
+ threadName: string;
72
+ sessionId: string | null;
73
+ /** Set when Claude's response indicates a background task - triggers auto-follow-up */
74
+ pendingAutoFollowUp: boolean;
75
+ /** Debug mode flag */
76
+ debugMode: boolean;
77
+ /** Context being sent to Claude (for debug display) */
78
+ debugContext: DebugContext | null;
79
+ /** Whether the debug context view is expanded */
80
+ debugContextExpanded: boolean;
81
+ /** Active overlay (e.g. /include menu, /revert menu) */
82
+ overlay: 'include' | 'revert' | null;
83
+ /** Message waiting to be flushed to Static after the dynamic area is cleared */
84
+ pendingMessage: Message | null;
85
+ }
86
+ export type AppAction = {
87
+ type: 'SET_MESSAGES';
88
+ messages: Message[];
89
+ } | {
90
+ type: 'ADD_MESSAGE';
91
+ message: Message;
92
+ } | {
93
+ type: 'UPDATE_STREAM';
94
+ text: string;
95
+ } | {
96
+ type: 'APPEND_STREAM';
97
+ text: string;
98
+ } | {
99
+ type: 'CLEAR_STREAM';
100
+ } | {
101
+ type: 'COMPLETE_RESPONSE';
102
+ message: Message;
103
+ } | {
104
+ type: 'SET_PROCESSING';
105
+ isProcessing: boolean;
106
+ } | {
107
+ type: 'SET_STATS';
108
+ stats: HistoryStats;
109
+ } | {
110
+ type: 'SET_ERROR';
111
+ error: string | null;
112
+ } | {
113
+ type: 'SET_SESSION_ID';
114
+ sessionId: string;
115
+ } | {
116
+ type: 'MARK_INTERRUPTED';
117
+ partialContent: string;
118
+ } | {
119
+ type: 'SET_PENDING_AUTO_FOLLOW_UP';
120
+ pending: boolean;
121
+ } | {
122
+ type: 'SET_DEBUG_MODE';
123
+ debugMode: boolean;
124
+ } | {
125
+ type: 'SET_DEBUG_CONTEXT';
126
+ context: DebugContext | null;
127
+ } | {
128
+ type: 'SET_DEBUG_EXPANDED';
129
+ expanded: boolean;
130
+ } | {
131
+ type: 'TOGGLE_DEBUG_EXPANDED';
132
+ } | {
133
+ type: 'SET_OVERLAY';
134
+ overlay: 'include' | 'revert' | null;
135
+ } | {
136
+ type: 'FLUSH_PENDING_MESSAGE';
137
+ };
138
+ export declare function createInitialState(threadName: string, debugMode?: boolean): AppState;
139
+ export declare function appReducer(state: AppState, action: AppAction): AppState;
140
+ export interface AppContextValue {
141
+ state: AppState;
142
+ dispatch: Dispatch<AppAction>;
143
+ }
144
+ export declare const AppContext: import("react").Context<AppContextValue | null>;
145
+ export declare function useAppContext(): AppContextValue;
146
+ export declare function useAppReducer(threadName: string, debugMode?: boolean): [AppState, Dispatch<AppAction>];
147
+ //# sourceMappingURL=useAppState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAppState.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useAppState.ts"],"names":[],"mappings":"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"}