Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ npm run test:vitest -- ... # Repo-owned direct Vitest path for focused passthro

**WebSocket Protocol:** Schema-validated messages using Zod. Handshake flow: client sends `hello` with token → server validates → sends `ready`. Message types include `terminal.create/input/resize/detach/attach` and broadcasts like `sessions.updated`.

**PTY Lifecycle:** Each terminal has a unique ID. Server maintains 64KB scrollback buffer. On attach, client receives buffer snapshot then streams new output. On detach, process continues running (background session). Configurable idle timeout (180 mins default).
**PTY Lifecycle:** Each terminal has a unique ID. Server maintains 64KB scrollback buffer. On attach, client receives buffer snapshot then streams new output. On detach, process continues running (background session). Configurable idle timeout (15 mins default).

**Claude Session Discovery:** Watches `~/.claude/projects/*/sessions/*.jsonl` for new files. Parses JSONL streams to extract messages, groups by project path.

Expand Down
2 changes: 1 addition & 1 deletion shared/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -725,7 +725,7 @@ export function createDefaultServerSettings(options: SettingsDefaultsOptions = {
debug: options.loggingDebug ?? false,
},
safety: {
autoKillIdleMinutes: 180,
autoKillIdleMinutes: 15,
},
terminal: {
scrollback: 10000,
Expand Down
4 changes: 2 additions & 2 deletions src/components/settings/SafetySettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -498,9 +498,9 @@ export default function SafetySettings({
<SettingsRow label="Auto-kill idle (minutes)">
<RangeSlider
value={settings.safety.autoKillIdleMinutes}
min={10}
min={5}
max={720}
step={10}
step={5}
format={(v) => String(v)}
onChange={(v) => {
applyServerSetting({ safety: { autoKillIdleMinutes: v } })
Expand Down
2 changes: 1 addition & 1 deletion test/unit/client/components/SettingsView.behavior.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ describe('SettingsView behavior sections', () => {
const autoKillSlider = getSlider((slider) => {
const min = slider.getAttribute('min')
const max = slider.getAttribute('max')
return min === '10' && max === '720'
return min === '5' && max === '720'
})

fireEvent.change(autoKillSlider, { target: { value: '300' } })
Expand Down
1 change: 1 addition & 0 deletions test/unit/shared/settings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ describe('shared settings contract', () => {

expect(resolved.terminal.fontFamily).toBe('Fira Code')
expect(resolved.terminal.scrollback).toBe(10000)
expect(resolved.safety.autoKillIdleMinutes).toBe(15)
expect(resolved.sidebar.sortMode).toBe('project')
expect(resolved.agentChat.defaultPlugins).toEqual([])
})
Expand Down
Loading