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: totalLines }), _jsx(Text, { color: "gray", children: " lines" }), commentLines > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", children: " \u2022 " }), _jsxs(Text, { color: "gray", dimColor: true, children: [commentLines, " comments"] })] }))] })] }), fullPath !== filename && (_jsxs(Text, { color: "gray", dimColor: true, children: [" \uD83D\uDCC1 ", fullPath] })), _jsx(Text, { color: actionColor, children: '┌' + '─'.repeat(78) + '┐' }), _jsx(Box, { flexDirection: "column", children: allLines.map((line, i) => {
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.53",
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",