@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.
- package/README.md +148 -0
- package/dist/cli/cumulus.d.ts +3 -0
- package/dist/cli/cumulus.d.ts.map +1 -0
- package/dist/cli/cumulus.js +233 -0
- package/dist/cli/cumulus.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +86 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +241 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/content-detector.d.ts +46 -0
- package/dist/lib/content-detector.d.ts.map +1 -0
- package/dist/lib/content-detector.js +359 -0
- package/dist/lib/content-detector.js.map +1 -0
- package/dist/lib/content-store.d.ts +255 -0
- package/dist/lib/content-store.d.ts.map +1 -0
- package/dist/lib/content-store.js +955 -0
- package/dist/lib/content-store.js.map +1 -0
- package/dist/lib/context-budget.d.ts +83 -0
- package/dist/lib/context-budget.d.ts.map +1 -0
- package/dist/lib/context-budget.js +101 -0
- package/dist/lib/context-budget.js.map +1 -0
- package/dist/lib/embeddings.d.ts +64 -0
- package/dist/lib/embeddings.d.ts.map +1 -0
- package/dist/lib/embeddings.js +176 -0
- package/dist/lib/embeddings.js.map +1 -0
- package/dist/lib/history.d.ts +120 -0
- package/dist/lib/history.d.ts.map +1 -0
- package/dist/lib/history.js +205 -0
- package/dist/lib/history.js.map +1 -0
- package/dist/lib/image-utils.d.ts +41 -0
- package/dist/lib/image-utils.d.ts.map +1 -0
- package/dist/lib/image-utils.js +288 -0
- package/dist/lib/image-utils.js.map +1 -0
- package/dist/lib/migrate.d.ts +35 -0
- package/dist/lib/migrate.d.ts.map +1 -0
- package/dist/lib/migrate.js +196 -0
- package/dist/lib/migrate.js.map +1 -0
- package/dist/lib/retriever.d.ts +56 -0
- package/dist/lib/retriever.d.ts.map +1 -0
- package/dist/lib/retriever.js +644 -0
- package/dist/lib/retriever.js.map +1 -0
- package/dist/lib/revert.d.ts +23 -0
- package/dist/lib/revert.d.ts.map +1 -0
- package/dist/lib/revert.js +75 -0
- package/dist/lib/revert.js.map +1 -0
- package/dist/lib/session.d.ts +65 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +289 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/snapshots.d.ts +39 -0
- package/dist/lib/snapshots.d.ts.map +1 -0
- package/dist/lib/snapshots.js +99 -0
- package/dist/lib/snapshots.js.map +1 -0
- package/dist/lib/stream-processor.d.ts +149 -0
- package/dist/lib/stream-processor.d.ts.map +1 -0
- package/dist/lib/stream-processor.js +389 -0
- package/dist/lib/stream-processor.js.map +1 -0
- package/dist/lib/summarizer.d.ts +67 -0
- package/dist/lib/summarizer.d.ts.map +1 -0
- package/dist/lib/summarizer.js +213 -0
- package/dist/lib/summarizer.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +16 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/proxy.d.ts +19 -0
- package/dist/mcp/proxy.d.ts.map +1 -0
- package/dist/mcp/proxy.js +120 -0
- package/dist/mcp/proxy.js.map +1 -0
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +29 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/shared-server.d.ts +21 -0
- package/dist/mcp/shared-server.d.ts.map +1 -0
- package/dist/mcp/shared-server.js +210 -0
- package/dist/mcp/shared-server.js.map +1 -0
- package/dist/mcp/tool-handler.d.ts +20 -0
- package/dist/mcp/tool-handler.d.ts.map +1 -0
- package/dist/mcp/tool-handler.js +1405 -0
- package/dist/mcp/tool-handler.js.map +1 -0
- package/dist/tui/components/App.d.ts +11 -0
- package/dist/tui/components/App.d.ts.map +1 -0
- package/dist/tui/components/App.js +607 -0
- package/dist/tui/components/App.js.map +1 -0
- package/dist/tui/components/DebugContextView.d.ts +13 -0
- package/dist/tui/components/DebugContextView.d.ts.map +1 -0
- package/dist/tui/components/DebugContextView.js +78 -0
- package/dist/tui/components/DebugContextView.js.map +1 -0
- package/dist/tui/components/IncludeMenu.d.ts +12 -0
- package/dist/tui/components/IncludeMenu.d.ts.map +1 -0
- package/dist/tui/components/IncludeMenu.js +127 -0
- package/dist/tui/components/IncludeMenu.js.map +1 -0
- package/dist/tui/components/InputArea.d.ts +27 -0
- package/dist/tui/components/InputArea.d.ts.map +1 -0
- package/dist/tui/components/InputArea.js +366 -0
- package/dist/tui/components/InputArea.js.map +1 -0
- package/dist/tui/components/MarkdownText.d.ts +38 -0
- package/dist/tui/components/MarkdownText.d.ts.map +1 -0
- package/dist/tui/components/MarkdownText.js +234 -0
- package/dist/tui/components/MarkdownText.js.map +1 -0
- package/dist/tui/components/MessageBubble.d.ts +11 -0
- package/dist/tui/components/MessageBubble.d.ts.map +1 -0
- package/dist/tui/components/MessageBubble.js +16 -0
- package/dist/tui/components/MessageBubble.js.map +1 -0
- package/dist/tui/components/MessageHistory.d.ts +11 -0
- package/dist/tui/components/MessageHistory.d.ts.map +1 -0
- package/dist/tui/components/MessageHistory.js +12 -0
- package/dist/tui/components/MessageHistory.js.map +1 -0
- package/dist/tui/components/RevertMenu.d.ts +17 -0
- package/dist/tui/components/RevertMenu.d.ts.map +1 -0
- package/dist/tui/components/RevertMenu.js +144 -0
- package/dist/tui/components/RevertMenu.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +14 -0
- package/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/tui/components/StatusBar.js +13 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/StreamingResponse.d.ts +15 -0
- package/dist/tui/components/StreamingResponse.d.ts.map +1 -0
- package/dist/tui/components/StreamingResponse.js +52 -0
- package/dist/tui/components/StreamingResponse.js.map +1 -0
- package/dist/tui/hooks/useAppState.d.ts +147 -0
- package/dist/tui/hooks/useAppState.d.ts.map +1 -0
- package/dist/tui/hooks/useAppState.js +110 -0
- package/dist/tui/hooks/useAppState.js.map +1 -0
- package/dist/tui/hooks/useClaudeProcess.d.ts +19 -0
- package/dist/tui/hooks/useClaudeProcess.d.ts.map +1 -0
- package/dist/tui/hooks/useClaudeProcess.js +185 -0
- package/dist/tui/hooks/useClaudeProcess.js.map +1 -0
- package/dist/tui/index.d.ts +10 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +11 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/utils/streamParser.d.ts +31 -0
- package/dist/tui/utils/streamParser.d.ts.map +1 -0
- package/dist/tui/utils/streamParser.js +63 -0
- package/dist/tui/utils/streamParser.js.map +1 -0
- 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"}
|