feat(config): add /config TUI with tab-based settings and plugin config framework
- textual-based ConfigApp with General, Plugins, and per-plugin tabs - GeneralConfig (user_name, assistant_name) + plugin_settings dict added to PyraConfig - ConfigField dataclass and config_fields() method added to plugin protocol - /config slash command in chat REPL launches the TUI - pyra auto-runs setup wizard on first invocation when no config.yaml exists - CLAUDE.md updated with config_fields() plugin guide and Code Inventory entries Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -33,6 +33,7 @@ _STATIC_COMMANDS = {
|
||||
"/exit": "Exit Pyra",
|
||||
"/clear": "Clear conversation history",
|
||||
"/memory list": "List memory files",
|
||||
"/config": "Open configuration TUI",
|
||||
"/help": "Show available slash commands",
|
||||
}
|
||||
|
||||
@@ -198,6 +199,15 @@ def start_chat() -> None:
|
||||
_show_memory_list()
|
||||
continue
|
||||
|
||||
if user_input == "/config":
|
||||
from pyra.config.tui import launch_config_tui
|
||||
launch_config_tui()
|
||||
try:
|
||||
cfg = load_config()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
continue
|
||||
|
||||
if user_input in plugin_slash:
|
||||
try:
|
||||
plugin_slash[user_input]()
|
||||
|
||||
Reference in New Issue
Block a user