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:
15
app/main.py
15
app/main.py
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user