feat(settings): Claude category — new-session defaults (T-457)
A Settings → Claude category sets per-user defaults for NEW sessions: model, effort, and permission mode (generic schema selects persisting app.claude.default*). The pane reads them at spawn — effort flows through the existing --effort flag (SpawnSpec.effort); model and permission mode are sent as control requests right after a fresh (non-resume, non-fork) session starts. 'default'/unset values are no-ops, leaving the CLI's own defaults. The optional "settings changed — apply to current sessions?" prompt is filed as T-470: it needs a custom control (a generic select can't prompt), so it's a clean follow-up on the T-452 escape hatch. Tests: defaultEffortFlag sentinel handling; the category contributes the three default fields. The thin pane-side applySessionDefaults is covered by the gate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,7 +10,9 @@ import 'package:clide/builtin/claude/src/claude_session_host.dart';
|
||||
import 'package:clide/builtin/claude/src/session_orchestrator.dart';
|
||||
import 'package:clide/builtin/claude/src/pane_context_status.dart';
|
||||
import 'package:clide/builtin/claude/src/claude_meta_sidebar.dart';
|
||||
import 'package:clide/builtin/claude/src/session_defaults.dart';
|
||||
import 'package:clide/builtin/claude/src/session_index.dart';
|
||||
import 'package:clide/builtin/claude/src/stream_json_session.dart' show kEffortLevels, kFallbackModels, kPermissionModes;
|
||||
import 'package:clide/builtin/claude/src/session_storage.dart';
|
||||
import 'package:clide/builtin/claude/src/ticket_pick_up.dart';
|
||||
import 'package:clide/builtin/claude/src/transcript_reader.dart' show ImageMessage;
|
||||
@@ -132,6 +134,49 @@ class ClaudeExtension extends ClideExtension {
|
||||
],
|
||||
),
|
||||
),
|
||||
// Claude settings category (T-457) — defaults applied to NEW sessions
|
||||
// (the pane reads these keys at spawn). Effort flows through --effort;
|
||||
// model + permission mode are sent as control requests post-spawn.
|
||||
SettingsCategoryContribution(
|
||||
id: 'claude',
|
||||
category: SettingsCategory(
|
||||
id: 'claude',
|
||||
title: 'Claude',
|
||||
iconName: 'sparkle',
|
||||
priority: 40,
|
||||
sections: [
|
||||
SettingsSection(
|
||||
label: 'New session defaults',
|
||||
fields: [
|
||||
SettingsField(
|
||||
key: kDefaultModelKey,
|
||||
kind: SettingsFieldKind.select,
|
||||
label: 'Model',
|
||||
help: 'Model for new sessions.',
|
||||
defaultValue: 'default',
|
||||
options: [for (final m in kFallbackModels) SettingsOption(value: m.value, label: m.displayName)],
|
||||
),
|
||||
SettingsField(
|
||||
key: kDefaultEffortKey,
|
||||
kind: SettingsFieldKind.select,
|
||||
label: 'Effort',
|
||||
help: 'Reasoning effort for new sessions (applied via --effort at spawn).',
|
||||
defaultValue: 'high',
|
||||
options: [for (final l in kEffortLevels) SettingsOption(value: l.value, label: l.displayName)],
|
||||
),
|
||||
SettingsField(
|
||||
key: kDefaultPermissionModeKey,
|
||||
kind: SettingsFieldKind.select,
|
||||
label: 'Permission mode',
|
||||
help: 'Starting permission mode for new sessions.',
|
||||
defaultValue: 'default',
|
||||
options: [for (final p in kPermissionModes) SettingsOption(value: p.value, label: p.displayName)],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
// T-171: agent roster controls (D-6 CLI/UI parity).
|
||||
// Usage: clide claude.agent.show <sessionId>
|
||||
CommandContribution(
|
||||
|
||||
Reference in New Issue
Block a user