codeep 1.0.53 → 1.0.54
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.
|
@@ -140,8 +140,35 @@ const isSectionBreak = (line, prevLine) => {
|
|
|
140
140
|
return false;
|
|
141
141
|
};
|
|
142
142
|
export const LiveCodeStream = ({ actions, isRunning }) => {
|
|
143
|
+
// State for streaming effect - show lines progressively
|
|
144
|
+
const [visibleLines, setVisibleLines] = useState(0);
|
|
145
|
+
const [lastActionId, setLastActionId] = useState(null);
|
|
143
146
|
// Find the current write/edit action with code content
|
|
144
147
|
const currentAction = actions.length > 0 ? actions[actions.length - 1] : null;
|
|
148
|
+
// Create a unique ID for the current action
|
|
149
|
+
const actionId = currentAction ? `${currentAction.target}-${currentAction.timestamp}` : null;
|
|
150
|
+
// Reset visible lines when action changes, then stream progressively
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
if (!currentAction || !currentAction.details) {
|
|
153
|
+
setVisibleLines(0);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// If this is a new action, reset and start streaming
|
|
157
|
+
if (actionId !== lastActionId) {
|
|
158
|
+
setLastActionId(actionId);
|
|
159
|
+
setVisibleLines(10); // Start with first 10 lines
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Stream more lines progressively
|
|
163
|
+
const totalLines = currentAction.details.split('\n').length;
|
|
164
|
+
if (visibleLines < totalLines) {
|
|
165
|
+
const timer = setTimeout(() => {
|
|
166
|
+
// Add 10 more lines every 100ms
|
|
167
|
+
setVisibleLines(prev => Math.min(prev + 10, totalLines));
|
|
168
|
+
}, 100);
|
|
169
|
+
return () => clearTimeout(timer);
|
|
170
|
+
}
|
|
171
|
+
}, [currentAction, actionId, lastActionId, visibleLines]);
|
|
145
172
|
// Only show for write/edit actions with content
|
|
146
173
|
if (!isRunning || !currentAction)
|
|
147
174
|
return null;
|
|
@@ -158,13 +185,15 @@ export const LiveCodeStream = ({ actions, isRunning }) => {
|
|
|
158
185
|
const totalLines = allLines.length;
|
|
159
186
|
const actionLabel = currentAction.type === 'write' ? '✨ Creating' : '✏️ Editing';
|
|
160
187
|
const actionColor = currentAction.type === 'write' ? 'green' : 'yellow';
|
|
188
|
+
// Only show lines up to visibleLines (streaming effect)
|
|
189
|
+
const linesToShow = allLines.slice(0, visibleLines);
|
|
190
|
+
const remainingLines = totalLines - visibleLines;
|
|
161
191
|
// Calculate code stats
|
|
162
|
-
const nonEmptyLines = allLines.filter(l => l.trim()).length;
|
|
163
192
|
const commentLines = allLines.filter(l => {
|
|
164
193
|
const t = l.trim();
|
|
165
194
|
return t.startsWith('//') || t.startsWith('#') || t.startsWith('/*') || t.startsWith('*');
|
|
166
195
|
}).length;
|
|
167
|
-
return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsxs(Text, { color: actionColor, bold: true, children: [actionLabel, " "] }), _jsx(Text, { color: "white", bold: true, children: filename })] }), _jsxs(Box, { children: [_jsxs(Text, { color: "gray", children: [langLabel, " \u2022 "] }), _jsx(Text, { color: "cyan", children:
|
|
196
|
+
return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsxs(Text, { color: actionColor, bold: true, children: [actionLabel, " "] }), _jsx(Text, { color: "white", bold: true, children: filename })] }), _jsxs(Box, { children: [_jsxs(Text, { color: "gray", children: [langLabel, " \u2022 "] }), _jsx(Text, { color: "cyan", children: visibleLines }), _jsxs(Text, { color: "gray", children: ["/", totalLines, " lines"] }), remainingLines > 0 && (_jsx(Text, { color: "yellow", children: " \u25BC streaming..." }))] })] }), fullPath !== filename && (_jsxs(Text, { color: "gray", dimColor: true, children: [" \uD83D\uDCC1 ", fullPath] })), _jsx(Text, { color: actionColor, children: '┌' + '─'.repeat(78) + '┐' }), _jsx(Box, { flexDirection: "column", children: linesToShow.map((line, i) => {
|
|
168
197
|
const lineNum = i + 1;
|
|
169
198
|
const prevLine = i > 0 ? allLines[i - 1] : null;
|
|
170
199
|
const showSeparator = isSectionBreak(line, prevLine);
|
|
@@ -172,7 +201,7 @@ export const LiveCodeStream = ({ actions, isRunning }) => {
|
|
|
172
201
|
// Zebra striping for better readability (subtle)
|
|
173
202
|
const isEvenLine = i % 2 === 0;
|
|
174
203
|
return (_jsxs(Box, { flexDirection: "column", children: [showSeparator && i > 0 && (_jsx(Text, { color: "gray", dimColor: true, children: '│' + ' '.repeat(78) + '│' })), _jsxs(Text, { children: [_jsx(Text, { color: actionColor, children: "\u2502" }), _jsx(Text, { color: isEvenLine ? 'gray' : 'white', dimColor: !isEvenLine, children: String(lineNum).padStart(4, ' ') }), _jsx(Text, { color: "gray", dimColor: true, children: " \u2502 " }), _jsx(Text, { color: lineColor, children: line.slice(0, 70) }), line.length > 70 && _jsx(Text, { color: "gray", children: "\u2026" }), line.length <= 70 && _jsx(Text, { children: ' '.repeat(Math.max(0, 70 - line.length)) }), _jsx(Text, { color: actionColor, children: "\u2502" })] })] }, i));
|
|
175
|
-
}) }), _jsx(Text, { color: actionColor, children: '└' + '─'.repeat(78) + '┘' })] }));
|
|
204
|
+
}) }), remainingLines > 0 && (_jsxs(Text, { color: "yellow", children: ['│', " ... ", remainingLines, " more lines loading... ", '│'] })), _jsx(Text, { color: actionColor, children: '└' + '─'.repeat(78) + '┘' })] }));
|
|
176
205
|
};
|
|
177
206
|
// Helper functions for action display
|
|
178
207
|
const getActionColor = (type) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeep",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.54",
|
|
4
4
|
"description": "AI-powered coding assistant built for the terminal. Multiple LLM providers, project-aware context, and a seamless development workflow.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|