From 6e24adcd5649072dc2ae2bb5e011754b1cb623ab Mon Sep 17 00:00:00 2001 From: Hibryda Date: Tue, 10 Mar 2026 03:52:16 +0100 Subject: [PATCH] feat(context): add ContextTab with LLM context window visualization --- .../components/Workspace/ContextTab.svelte | 799 ++++++++++++++++++ .../components/Workspace/ProjectBox.svelte | 4 +- 2 files changed, 801 insertions(+), 2 deletions(-) create mode 100644 v2/src/lib/components/Workspace/ContextTab.svelte diff --git a/v2/src/lib/components/Workspace/ContextTab.svelte b/v2/src/lib/components/Workspace/ContextTab.svelte new file mode 100644 index 0000000..1a4e859 --- /dev/null +++ b/v2/src/lib/components/Workspace/ContextTab.svelte @@ -0,0 +1,799 @@ + + +
+ {#if !session} +
+
+ + + + +
+

No active session

+

Start an agent session to see context window analysis

+
+ {:else} + +
+
+ {formatTokens(totalCost.inputTokens)} + input +
+
+ {formatTokens(totalCost.outputTokens)} + output +
+
+ {session.numTurns} + turns +
+
+ {formatCost(totalCost.costUsd)} + cost +
+
+ {formatDuration(session.durationMs)} + time +
+
+ {session.status} +
+
+ + +
+
+ Context Window + {formatTokens(totalCost.inputTokens)} / {formatTokens(CONTEXT_WINDOW)} +
+
+ {#each categories as cat} +
+ {/each} +
+
+
+ {#each categories as cat} +
+ + {cat.label} + {formatTokens(cat.tokens)} +
+ {/each} +
+
+ + + {#if fileRefs.length > 0} +
+
+ Files Touched + {fileRefs.length} +
+
+ {#each fileRefs.slice(0, 30) as ref (ref.path)} +
+
+ {#each Array.from(ref.ops) as op} + {op[0].toUpperCase()} + {/each} +
+ {ref.shortName} + {ref.count}× +
+ {/each} + {#if fileRefs.length > 30} +
+{fileRefs.length - 30} more
+ {/if} +
+
+ {/if} + + +
+
+ Turns + {turns.length} +
+
+ {#each turns as turn (turn.index)} +
+ + + {#if expandedTurns.has(turn.index)} +
+ {#each turn.messages as msg} + {#if msg.type !== 'cost' && msg.type !== 'status' && msg.type !== 'init'} +
+ {msgTypeLabel(msg.type)} + ~{formatTokens(estimateTokens(msg))} + {#if msg.type === 'tool_call'} + {@const tc = msg.content as ToolCallContent} + {tc.name} + {/if} +
+ {/if} + {/each} +
+ {/if} +
+ {/each} + {#if turns.length === 0} +
No turns yet
+ {/if} +
+
+ {/if} +
+ + diff --git a/v2/src/lib/components/Workspace/ProjectBox.svelte b/v2/src/lib/components/Workspace/ProjectBox.svelte index 3a48049..4a72a64 100644 --- a/v2/src/lib/components/Workspace/ProjectBox.svelte +++ b/v2/src/lib/components/Workspace/ProjectBox.svelte @@ -6,7 +6,7 @@ import TerminalTabs from './TerminalTabs.svelte'; import TeamAgentsPanel from './TeamAgentsPanel.svelte'; import ProjectFiles from './ProjectFiles.svelte'; - import ContextPane from '../Context/ContextPane.svelte'; + import ContextTab from './ContextTab.svelte'; import FilesTab from './FilesTab.svelte'; import SshTab from './SshTab.svelte'; import MemoriesTab from './MemoriesTab.svelte'; @@ -104,7 +104,7 @@
- +