tycono 0.1.105 → 0.1.107-beta.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tycono",
3
- "version": "0.1.105",
3
+ "version": "0.1.107-beta.0",
4
4
  "description": "Build an AI company. Watch them work.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -53,6 +53,7 @@
53
53
  "@types/express": "^5.0.0",
54
54
  "@types/node": "^22.13.4",
55
55
  "@types/react": "^19.2.14",
56
+ "react-devtools-core": "^4.28.5",
56
57
  "tsup": "^8.5.1",
57
58
  "typescript": "^5.7.3"
58
59
  },
@@ -45,7 +45,7 @@ function isSystemNoise(text: string): boolean {
45
45
  if (/^##\s*Your Role/i.test(t)) return true;
46
46
  if (t.includes('무엇을 도와드릴까요')) return true;
47
47
  // Conversation context leakage
48
- if (t.startsWith('[Previous execution]')) return true;
48
+ if (t.startsWith('[Previous execution')) return true;
49
49
  if (/^Tools used:/i.test(t)) return true;
50
50
  return false;
51
51
  }
@@ -275,7 +275,7 @@ function StreamLineRow({ line }: { line: StreamLine }) {
275
275
  );
276
276
  }
277
277
 
278
- const QUICK_ACTIONS = ['waves', 'agents', 'sessions', 'docs'] as const;
278
+ const QUICK_ACTIONS = ['waves', 'agents', 'sessions', 'ports', 'docs'] as const;
279
279
  type QuickAction = typeof QUICK_ACTIONS[number];
280
280
 
281
281
  export const CommandMode: React.FC<CommandModeProps> = ({
@@ -299,18 +299,21 @@ export const CommandMode: React.FC<CommandModeProps> = ({
299
299
  }
300
300
 
301
301
  // Merge user inputs + system messages + event lines (cap total)
302
- const allLines = [...userInputs, ...systemMessages, ...eventLines].slice(-100);
302
+ const allLines = [...userInputs, ...systemMessages, ...eventLines].slice(-60);
303
303
 
304
- // Split into committed (scrollback) and live (re-rendered)
305
- const newCommitted = allLines.slice(committedRef.current);
306
- if (newCommitted.length > 6) {
307
- const toCommit = newCommitted.slice(0, -6);
308
- committedRef.current += toCommit.length;
304
+ // Reset committedRef if it exceeds allLines (prevents unbounded growth)
305
+ if (committedRef.current > allLines.length) {
306
+ committedRef.current = Math.max(0, allLines.length - 6);
309
307
  }
310
308
 
311
- // Cap committed to prevent Static from holding too many items
312
- const rawCommitted = allLines.slice(0, committedRef.current);
313
- const committedLines = rawCommitted.length > 50 ? rawCommitted.slice(-50) : rawCommitted;
309
+ // Commit older lines to Static scrollback, keep last 6 as live
310
+ const newCount = allLines.length - committedRef.current;
311
+ if (newCount > 6) {
312
+ committedRef.current = allLines.length - 6;
313
+ }
314
+
315
+ // Only send last 20 committed items to Static (prevent Ink memory growth)
316
+ const committedLines = allLines.slice(Math.max(0, committedRef.current - 20), committedRef.current);
314
317
  const liveLines = allLines.slice(committedRef.current);
315
318
 
316
319
  // Quick bar navigation
@@ -118,7 +118,10 @@ export function useSSE(waveId: string | null): SSEState {
118
118
  reconnectAttemptRef.current = 0;
119
119
 
120
120
  // Add to batch buffer (don't trigger React re-render yet)
121
- batchRef.current.push(trimEvent(event));
121
+ // Cap batch to prevent unbounded growth if flush is delayed
122
+ if (batchRef.current.length < 50) {
123
+ batchRef.current.push(trimEvent(event));
124
+ }
122
125
 
123
126
  // Schedule flush if not already scheduled
124
127
  if (!batchTimerRef.current) {