@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,78 @@
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * Debug view component that displays the context being sent to Claude
4
+ * with color-coding to indicate provenance of each section.
5
+ */
6
+ import { Box, Text } from 'ink';
7
+ /**
8
+ * Color legend:
9
+ * - dim/gray: Static system prompt template
10
+ * - cyan: Session metadata (ID, counts)
11
+ * - blue: Recent context messages
12
+ * - yellow: Tool instructions
13
+ * - green: User input
14
+ */
15
+ function SectionHeader({ title, color }) {
16
+ return (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: color, bold: true, children: ['='.repeat(3), " ", title, " ", '='.repeat(60 - title.length)] }) }));
17
+ }
18
+ function truncate(text, maxLength) {
19
+ if (text.length <= maxLength)
20
+ return text;
21
+ return text.slice(0, maxLength - 3) + '...';
22
+ }
23
+ export function DebugContextView({ context, expanded = true, }) {
24
+ // Parse system prompt into sections for coloring
25
+ const systemPromptSections = parseSystemPrompt(context.systemPrompt);
26
+ // Collapsed view - just show a summary bar
27
+ if (!expanded) {
28
+ const retrievalSummary = context.retrieval
29
+ ? `${context.retrieval.historyCount} hist, ${context.retrieval.contentCount} content (~${context.retrieval.tokensUsed} tok)`
30
+ : 'none';
31
+ const alwaysIncludeSummary = context.alwaysInclude
32
+ ? `${context.alwaysInclude.files.filter(f => !f.error).length} files (~${context.alwaysInclude.totalTokens} tok)`
33
+ : 'none';
34
+ return (_jsxs(Box, { borderStyle: "round", borderColor: "magenta", paddingX: 1, children: [_jsx(Text, { color: "magenta", bold: true, children: "DEBUG (collapsed)" }), _jsx(Text, { color: "gray", children: " | " }), _jsxs(Text, { color: "cyan", children: ["Session: ", context.sessionId.slice(0, 8), "... (", context.messageCount, " msgs)"] }), _jsx(Text, { color: "gray", children: " | " }), _jsxs(Text, { color: "yellowBright", children: ["Always: ", alwaysIncludeSummary] }), _jsx(Text, { color: "gray", children: " | " }), _jsxs(Text, { color: "blue", children: [context.recentMessages.length, " recent"] }), _jsx(Text, { color: "gray", children: " | " }), _jsxs(Text, { color: "magentaBright", children: ["RAG: ", retrievalSummary] }), _jsx(Text, { color: "gray", children: " | " }), _jsxs(Text, { color: "green", children: ["Input: ", truncate(context.userMessage.replace(/\n/g, ' '), 30)] }), _jsx(Text, { color: "gray", children: " | " }), _jsx(Text, { color: "gray", dimColor: true, children: "Ctrl+D to expand" })] }));
35
+ }
36
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "magenta", paddingX: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "magenta", bold: true, children: "DEBUG: Context Being Sent to Claude" }), _jsxs(Text, { color: "gray", dimColor: true, children: [' ', "(Ctrl+D to collapse)"] })] }), _jsx(SectionHeader, { title: "SESSION METADATA", color: "cyan" }), _jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { color: "cyan", children: ["Session ID: ", context.sessionId] }) }), _jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { color: "cyan", children: ["Prior messages: ", context.messageCount, " (~", context.tokenCount, " tokens)"] }) }), context.budget && (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { title: "TOKEN BUDGET", color: "white" }), _jsxs(Box, { paddingLeft: 2, flexDirection: "column", children: [_jsxs(Text, { color: "white", children: ["Total: ", context.budget.total.toLocaleString(), " tokens"] }), _jsxs(Text, { color: "green", children: ["- User query: ", context.budget.userQuery.toLocaleString()] }), _jsxs(Text, { color: "yellowBright", children: ["- Always-include: ", context.budget.alwaysInclude.toLocaleString()] }), _jsxs(Text, { color: "blue", children: ["- Recent context: ", context.budget.recentContext.toLocaleString()] }), _jsxs(Text, { color: "magentaBright", children: ["- RAG available: ", context.budget.ragAvailable.toLocaleString(), " (used:", ' ', context.budget.ragUsed.toLocaleString(), ")"] })] })] })), context.alwaysInclude && context.alwaysInclude.files.length > 0 && (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { title: "ALWAYS-INCLUDE FILES", color: "yellowBright" }), _jsxs(Box, { paddingLeft: 2, flexDirection: "column", children: [_jsxs(Text, { color: "yellow", children: ["Total: ", context.alwaysInclude.files.length, " files (~", context.alwaysInclude.totalTokens, " tokens)"] }), context.alwaysInclude.files.map((file, i) => (_jsx(Box, { paddingLeft: 2, children: file.error ? (_jsxs(Text, { color: "red", children: [file.path, " - ERROR: ", file.error] })) : (_jsxs(Text, { color: "yellowBright", children: [file.path, " (", file.tokens, " tokens)", file.truncated ? ' [truncated]' : ''] })) }, i)))] })] })), _jsx(SectionHeader, { title: "SYSTEM PROMPT (Static)", color: "gray" }), _jsx(Box, { paddingLeft: 2, flexDirection: "column", children: systemPromptSections.staticInstructions.split('\n').map((line, i) => (_jsx(Text, { color: "gray", dimColor: true, children: truncate(line, 100) }, i))) }), context.recentMessages.length > 0 && (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { title: "RECENT CONTEXT", color: "blue" }), _jsx(Box, { paddingLeft: 2, flexDirection: "column", children: context.recentMessages.map((msg, i) => (_jsx(Box, { children: _jsxs(Text, { color: msg.role === 'user' ? 'blueBright' : 'blue', children: ["[", msg.role === 'user' ? 'User' : 'Assistant', "]:", ' ', truncate(msg.content.replace(/\n/g, ' '), 80)] }) }, i))) })] })), context.retrieval && (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { title: "RETRIEVED CONTEXT (RAG)", color: "magentaBright" }), _jsxs(Box, { paddingLeft: 2, flexDirection: "column", children: [_jsxs(Text, { color: "magenta", children: ["Tokens used: ", context.retrieval.tokensUsed, " | History:", ' ', context.retrieval.historyCount, " | Content: ", context.retrieval.contentCount] }), context.retrieval.debug.sessionResults.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "magentaBright", bold: true, children: "Session matches:" }), context.retrieval.debug.sessionResults.slice(0, 3).map((r, i) => (_jsxs(Text, { color: "magenta", children: ["[", r.sessionId.slice(0, 8), "...] (score: ", r.score, "): ", truncate(r.snippet, 60)] }, i)))] })), context.retrieval.debug.historyResults.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "magentaBright", bold: true, children: "History matches:" }), context.retrieval.debug.historyResults.slice(0, 5).map((r, i) => (_jsxs(Text, { color: "magenta", children: ["[#", r.index, " ", r.role, "] (score: ", r.score, "): ", truncate(r.snippet, 60)] }, i)))] })), context.retrieval.debug.contentResults.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "magentaBright", bold: true, children: "Content matches:" }), context.retrieval.debug.contentResults.slice(0, 3).map((r, i) => (_jsxs(Text, { color: "magenta", children: ["[", r.id, "] (score: ", r.score, "): ", truncate(r.snippet, 60)] }, i)))] }))] })] })), systemPromptSections.toolInstructions && (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { title: "TOOL INSTRUCTIONS", color: "yellow" }), _jsx(Box, { paddingLeft: 2, flexDirection: "column", children: systemPromptSections.toolInstructions.split('\n').map((line, i) => (_jsx(Text, { color: "yellow", children: truncate(line, 100) }, i))) })] })), _jsx(SectionHeader, { title: "USER INPUT", color: "green" }), _jsx(Box, { paddingLeft: 2, children: _jsx(Text, { color: "green", bold: true, children: truncate(context.userMessage.replace(/\n/g, ' '), 200) }) }), _jsx(Box, { marginTop: 1, borderStyle: "single", borderColor: "gray", paddingX: 1, children: _jsxs(Text, { color: "gray", children: ["Legend:", ' ', _jsx(Text, { color: "gray", dimColor: true, children: "Static" }), ' | ', _jsx(Text, { color: "cyan", children: "Metadata" }), ' | ', _jsx(Text, { color: "yellowBright", children: "Always-Include" }), ' | ', _jsx(Text, { color: "blue", children: "Recent" }), ' | ', _jsx(Text, { color: "magentaBright", children: "RAG" }), ' | ', _jsx(Text, { color: "yellow", children: "Tools" }), ' | ', _jsx(Text, { color: "green", children: "User Input" })] }) })] }));
37
+ }
38
+ function parseSystemPrompt(prompt) {
39
+ // Split the system prompt into logical sections
40
+ // Look for FALLBACK TOOLS (new) or MANDATORY TOOLS (old)
41
+ const toolsStart = prompt.indexOf('FALLBACK TOOLS') !== -1
42
+ ? prompt.indexOf('FALLBACK TOOLS')
43
+ : prompt.indexOf('MANDATORY TOOLS:');
44
+ const workflowStart = prompt.indexOf('WORKFLOW:');
45
+ let staticInstructions = '';
46
+ let toolInstructions = '';
47
+ if (toolsStart === -1) {
48
+ // No tools section, everything is static
49
+ staticInstructions = prompt;
50
+ }
51
+ else {
52
+ // Get the part before tools (skip the metadata at the top which we display separately)
53
+ const contentStart = prompt.indexOf('CONTEXT MANAGEMENT:');
54
+ if (contentStart !== -1 && contentStart < toolsStart) {
55
+ staticInstructions = prompt.slice(contentStart, toolsStart).trim();
56
+ }
57
+ // Get tools section
58
+ const toolsEnd = workflowStart !== -1 ? workflowStart : prompt.length;
59
+ if (toolsEnd !== -1 && toolsEnd > toolsStart) {
60
+ toolInstructions = prompt.slice(toolsStart, toolsEnd).trim();
61
+ }
62
+ else {
63
+ toolInstructions = prompt.slice(toolsStart).trim();
64
+ }
65
+ // Add workflow to static instructions
66
+ if (workflowStart !== -1) {
67
+ // Find next major section after workflow
68
+ const nextSection = prompt.indexOf('NEVER guess', workflowStart);
69
+ const workflowEnd = nextSection !== -1 ? nextSection : prompt.length;
70
+ staticInstructions += '\n\n' + prompt.slice(workflowStart, workflowEnd).trim();
71
+ }
72
+ }
73
+ return {
74
+ staticInstructions: staticInstructions.trim(),
75
+ toolInstructions: toolInstructions.trim(),
76
+ };
77
+ }
78
+ //# sourceMappingURL=DebugContextView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DebugContextView.js","sourceRoot":"","sources":["../../../src/tui/components/DebugContextView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Overlay menu for managing always-include files.
3
+ * Supports list, confirm-remove, and add-file modes.
4
+ */
5
+ import React from 'react';
6
+ interface IncludeMenuProps {
7
+ threadName: string;
8
+ onClose: () => void;
9
+ }
10
+ export declare function IncludeMenu({ threadName, onClose }: IncludeMenuProps): React.ReactElement;
11
+ export {};
12
+ //# sourceMappingURL=IncludeMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IncludeMenu.d.ts","sourceRoot":"","sources":["../../../src/tui/components/IncludeMenu.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAA2C,MAAM,OAAO,CAAC;AAehE,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CA2MzF"}
@@ -0,0 +1,127 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Overlay menu for managing always-include files.
4
+ * Supports list, confirm-remove, and add-file modes.
5
+ */
6
+ import { Box, Text, useInput } from 'ink';
7
+ import { useState, useEffect, useCallback } from 'react';
8
+ import { listAlwaysIncludeFiles, addAlwaysIncludeFile, removeAlwaysIncludeFile, } from '../../lib/config.js';
9
+ export function IncludeMenu({ threadName, onClose }) {
10
+ const [mode, setMode] = useState('list');
11
+ const [files, setFiles] = useState([]);
12
+ const [selectedIndex, setSelectedIndex] = useState(0);
13
+ const [statusMessage, setStatusMessage] = useState(null);
14
+ // Add-file mode state
15
+ const [addPath, setAddPath] = useState('');
16
+ const [addScope, setAddScope] = useState('thread');
17
+ // Confirm-remove mode state
18
+ const [confirmChoice, setConfirmChoice] = useState('no');
19
+ const [fileToRemove, setFileToRemove] = useState(null);
20
+ const loadFiles = useCallback(async () => {
21
+ const result = await listAlwaysIncludeFiles(threadName);
22
+ const entries = [
23
+ ...result.global.map(p => ({ path: p, scope: 'global' })),
24
+ ...result.thread.map(p => ({ path: p, scope: 'thread' })),
25
+ ];
26
+ setFiles(entries);
27
+ }, [threadName]);
28
+ useEffect(() => {
29
+ loadFiles();
30
+ }, [loadFiles]);
31
+ // Clear status message after a delay
32
+ useEffect(() => {
33
+ if (!statusMessage)
34
+ return;
35
+ const timer = setTimeout(() => setStatusMessage(null), 2000);
36
+ return () => clearTimeout(timer);
37
+ }, [statusMessage]);
38
+ useInput((input, key) => {
39
+ if (mode === 'list') {
40
+ if (key.escape) {
41
+ onClose();
42
+ return;
43
+ }
44
+ // Total items = files + "Add file..." option
45
+ const itemCount = files.length + 1;
46
+ const addFileIndex = files.length;
47
+ if (key.upArrow) {
48
+ setSelectedIndex(prev => (prev > 0 ? prev - 1 : itemCount - 1));
49
+ return;
50
+ }
51
+ if (key.downArrow) {
52
+ setSelectedIndex(prev => (prev < itemCount - 1 ? prev + 1 : 0));
53
+ return;
54
+ }
55
+ if (key.return) {
56
+ if (selectedIndex === addFileIndex) {
57
+ setMode('add-file');
58
+ setAddPath('');
59
+ setAddScope('thread');
60
+ }
61
+ else if (files[selectedIndex]) {
62
+ setFileToRemove(files[selectedIndex]);
63
+ setConfirmChoice('no');
64
+ setMode('confirm-remove');
65
+ }
66
+ return;
67
+ }
68
+ }
69
+ if (mode === 'confirm-remove') {
70
+ if (key.escape) {
71
+ setMode('list');
72
+ return;
73
+ }
74
+ if (key.leftArrow || key.rightArrow) {
75
+ setConfirmChoice(prev => (prev === 'yes' ? 'no' : 'yes'));
76
+ return;
77
+ }
78
+ if (key.return) {
79
+ if (confirmChoice === 'yes' && fileToRemove) {
80
+ const entry = fileToRemove;
81
+ const threadArg = entry.scope === 'thread' ? threadName : undefined;
82
+ removeAlwaysIncludeFile(entry.path, threadArg).then(() => {
83
+ setStatusMessage(`Removed: ${entry.path}`);
84
+ setMode('list');
85
+ setSelectedIndex(prev => Math.max(0, prev - 1));
86
+ loadFiles();
87
+ });
88
+ }
89
+ else {
90
+ setMode('list');
91
+ }
92
+ return;
93
+ }
94
+ }
95
+ if (mode === 'add-file') {
96
+ if (key.escape) {
97
+ setMode('list');
98
+ return;
99
+ }
100
+ if (key.tab) {
101
+ setAddScope(prev => (prev === 'global' ? 'thread' : 'global'));
102
+ return;
103
+ }
104
+ if (key.return) {
105
+ const trimmed = addPath.trim();
106
+ if (trimmed) {
107
+ const threadArg = addScope === 'thread' ? threadName : undefined;
108
+ addAlwaysIncludeFile(trimmed, threadArg).then(() => {
109
+ setStatusMessage(`Added: ${trimmed} [${addScope}]`);
110
+ setMode('list');
111
+ loadFiles();
112
+ });
113
+ }
114
+ return;
115
+ }
116
+ if (key.backspace || key.delete) {
117
+ setAddPath(prev => prev.slice(0, -1));
118
+ return;
119
+ }
120
+ if (input && !key.return && !key.tab) {
121
+ setAddPath(prev => prev + input);
122
+ }
123
+ }
124
+ });
125
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", paddingX: 1, marginTop: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "/include - Always-Include Files" }), statusMessage && _jsx(Text, { color: "green", children: statusMessage }), mode === 'list' && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [files.length === 0 && _jsx(Text, { color: "gray", children: "No files configured." }), files.map((file, i) => (_jsxs(Text, { children: [i === selectedIndex ? _jsx(Text, { color: "cyan", children: ' > ' }) : ' ', _jsx(Text, { children: file.path }), _jsxs(Text, { color: "gray", children: [" [", file.scope, "]"] })] }, file.path + file.scope))), _jsxs(Text, { children: [selectedIndex === files.length ? _jsx(Text, { color: "cyan", children: ' > ' }) : ' ', _jsx(Text, { color: "green", children: "+ Add file..." })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Arrow keys: navigate | Enter: select | Esc: close" }) })] })), mode === 'confirm-remove' && fileToRemove && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { children: ["Remove ", _jsx(Text, { bold: true, children: fileToRemove.path }), _jsxs(Text, { color: "gray", children: [" [", fileToRemove.scope, "]"] }), "?"] }), _jsxs(Box, { marginTop: 1, gap: 2, children: [_jsxs(Text, { children: ['[', _jsx(Text, { color: confirmChoice === 'yes' ? 'red' : 'gray', bold: confirmChoice === 'yes', children: "Yes" }), ']'] }), _jsxs(Text, { children: ['[', _jsx(Text, { color: confirmChoice === 'no' ? 'cyan' : 'gray', bold: confirmChoice === 'no', children: "No" }), ']'] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Left/Right: toggle | Enter: confirm | Esc: cancel" }) })] })), mode === 'add-file' && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "Path: " }), _jsx(Text, { children: addPath }), _jsx(Text, { color: "gray", children: "\u258B" })] }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { children: ["Scope:", ' ', _jsx(Text, { color: "cyan", bold: true, children: addScope })] }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Tab: toggle scope | Enter: add | Esc: cancel" }) })] }))] }));
126
+ }
127
+ //# sourceMappingURL=IncludeMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IncludeMenu.js","sourceRoot":"","sources":["../../../src/tui/components/IncludeMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Unified text input component.
3
+ * Normal mode: type to input buffer, Enter submits
4
+ * Processing mode: same input buffer with full editing, Enter interrupts Claude
5
+ * Supports Ctrl+V for clipboard image paste, Shift+Return for newlines,
6
+ * and correct multi-line paste handling.
7
+ *
8
+ * Uses refs for buffer/cursor to ensure synchronous correctness when multiple
9
+ * useInput calls fire within the same React batch (e.g. during paste).
10
+ */
11
+ import React from 'react';
12
+ import type { DetectedImage } from '../../lib/image-utils.js';
13
+ export interface SlashCommand {
14
+ name: string;
15
+ description: string;
16
+ }
17
+ interface InputAreaProps {
18
+ isProcessing: boolean;
19
+ onSubmit: (text: string, images?: DetectedImage[]) => void;
20
+ onInterjection: (text: string) => void;
21
+ isOverlayActive?: boolean;
22
+ contentBasePath?: string;
23
+ commands?: SlashCommand[];
24
+ }
25
+ export declare function InputArea({ isProcessing, onSubmit, onInterjection, isOverlayActive, contentBasePath, commands, }: InputAreaProps): React.ReactElement;
26
+ export {};
27
+ //# sourceMappingURL=InputArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../../src/tui/components/InputArea.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,cAAc;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IAC3D,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAyGD,wBAAgB,SAAS,CAAC,EACxB,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,eAAuB,EACvB,eAAe,EACf,QAAa,GACd,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CAgVrC"}