feat(#37): JSON-based settings + schema-driven UI#42
Merged
Conversation
- SettingsPanel: off-canvas slide-in → centered fixed dialog (920px, 88vh)
- Replace horizontal top tabs with left sidebar icon+label nav
- ExtraTab interface gains optional icon prop
- Add 'Open settings.json' button to General → Configuration section
- SETTINGS_OPEN_FILE ('settings:open-file') IPC constant in types.ts
- AppService.config.openSettingsFile() method
- CommandPalette: 'Open settings.json' command (guards on service capability)
- Add SettingsStringProperty, SettingsNumberProperty, SettingsBooleanProperty, SettingsSection, SettingsContribution types to types.ts - src/settings/settingsRegistry.ts — singleton register/unregister/getAll - src/settings/coreContributions.ts — registers General, Labs, Updates sections - index.ts: export settingsRegistry, auto-register core contributions on import - Complex sections (Providers, MCP, Routing, Analytics) left as custom components
- Add SchemaFormRenderer: renders SettingsContribution sections to form controls (Toggle/select/text/number) with per-field Reset button - Add PropertyField: boolean card-style, string (text/select/password/ textarea), number (input w/ min/max/step); handles dot-notation paths - Add SchemaSearchResults: full-text search across all registered contributions, grouped by contribution label + section breadcrumb - Add search input in settings sidebar (above nav); clears to tab on click - Replace GeneralTab JSX with SchemaFormRenderer; override defaultProviderId to render the populated provider dropdown; keep Configuration section - Replace LabsTab sections with SchemaFormRenderer; keep ⚗️ banner; remove LabsFeatureRow (superseded by PropertyField boolean card) - Add Updates tab (openconduit.updates from registry) with refresh icon - Section now accepts optional description prop - Import coreContributions as side-effect in SettingsPanel to ensure the registry is populated regardless of how the component is imported
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #37
Summary
Full implementation of JSON-based settings and a schema-driven settings UI across all four phases.
Changes
Phase 1 — Settings modal revamp +
settings:open-fileh-[88vh], fixed)settings:open-fileIPC channel + "Open settings.json" buttonPhase 2 —
SettingsContributiontype system + registrySettingsStringProperty,SettingsNumberProperty,SettingsBooleanProperty,SettingsProperty,SettingsSection,SettingsContributiontypes totypes.tssettingsRegistrysingleton (src/settings/settingsRegistry.ts)coreContributions.tsregisters built-in sections: General, Labs, UpdatesPhase 3 — Schema-driven renderer + search
SchemaFormRendererrenders anySettingsContributionas form sectionsPropertyFieldhandles string/number/boolean with all property options (enum,sensitive,multiline,minimum,maximum,step, etc.)SchemaSearchResultsfull-text search across all registry contributionsPhase 4 — In-app CodeMirror JSON editor
oneDarktheme + custom slate-950 structural overridesDependencies added
@codemirror/state,@codemirror/view,@codemirror/commands,@codemirror/lang-json,@codemirror/theme-one-dark