feat: implement tweaks plan - modals, smart shell, spinner, /models, debug log, skills

Phase 1: Permission modal dialog, session resume modal, HistoryInput with
up/down arrow cycling, remove "You:" echo from chat log, LLM client cleanup
on unmount.

Phase 2: Smart shell auto-approve using allowed/denied command lists from
ToolsConfig, animated thinking spinner with live token count in status bar.

Phase 3: /models slash command (list + switch), CLI directory positional
argument, JSONL debug logger with rotation.

Phase 4: Skills system with SkillsManager, load_skill LLM tool, /skills
listing, skill invocation via slash commands, system prompt integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 15:46:44 -05:00
parent 7600195ecf
commit 3f9012e6c2
13 changed files with 683 additions and 37 deletions

View File

@@ -36,6 +36,13 @@ def parse_args() -> argparse.Namespace:
default=None,
help="Path to log file for persistent logging",
)
parser.add_argument(
"directory",
nargs="?",
type=Path,
default=None,
help="Project directory to use as workspace root (default: current directory)",
)
return parser.parse_args()
@@ -63,6 +70,14 @@ def main() -> None:
print_error(f"Configuration error: {e}")
sys.exit(1)
# Override workspace root if directory argument provided
if args.directory:
target = Path(args.directory).resolve()
if not target.is_dir():
print_error(f"Not a directory: {target}")
sys.exit(1)
config.agent.workspace_root = target
logger.info("config_loaded", model=config.llm.model, endpoint=config.llm.endpoint)
# Pre-TUI startup info (printed to console before Textual takes over)