Skip to content

milo-cli 0.1.1

Choose a tag to compare

@lbliii lbliii released this 04 Apr 13:52
· 69 commits to main since this release
bb33a1b

Patch release focused on Elm Architecture ergonomics, Bubbletea-inspired effect patterns, CLI table-stakes features, and internal code health.

Highlights

  • Reducer combinatorsquit_on, with_cursor, with_confirm decorators stack to eliminate boilerplate key/cursor/confirm handling
  • Cmd effects — Lightweight Cmd thunks as a simpler alternative to sagas for one-shot side effects, with Batch (concurrent) and Sequence (serial) combinators
  • TickCmd — Self-sustaining tick pattern with per-component, dynamic tick control
  • ViewState — Declarative terminal state management (alt_screen, cursor_visible, window_title, mouse_mode) with diff-based rendering
  • Message filterApp(filter=fn) intercepts actions before dispatch to drop or transform them
  • Shell completionsinstall_completions() generates bash, zsh, and fish completions from CLI definitions
  • Doctor diagnosticsrun_doctor() validates environment, dependencies, and config health with structured Check specs
  • Version checking — automatic PyPI upgrade notices (respects NO_UPDATE_CHECK env var)
  • App.from_dir() — automatic template directory discovery, no manual loader setup
  • Context.run_app() — bridge CLI command handlers to interactive Elm Architecture apps
  • Built-in template macrosselectable_list, scrollable_list, format_time in components/_defs.kida

CLI polish

  • Structured error handling with MiloError code + hint display
  • Command examples render in help output and generate_help_all()
  • Did-you-mean fuzzy suggestions on unknown commands
  • Before/after hooks via HookRegistry
  • Confirm gates for destructive commands
  • Dry-run and output-file global option flags
  • Progress bars via CLIProgress
  • Context.log() with leveled stderr output
  • Config.validate() type-checks against spec defaults
  • Config.init() scaffolds starter config files
  • invoke() test helper splits stdout/stderr
  • Retry saga effect with backoff
  • Saga/Cmd error recovery — unhandled exceptions dispatch @@SAGA_ERROR/@@CMD_ERROR instead of being swallowed

Internal improvements

  • Extracted _command_defs.py, _cli_help.py, _jsonrpc.py, and _mcp_router.py from monolithic modules
  • Unified command registration between CLI and Group via _make_command_def
  • Middleware wired into CLI.run() and CLI.call() dispatch paths
  • Parallelized health checks and gateway discovery with ThreadPoolExecutor
  • Lazy walk_commands generators avoid eager materialization
  • Pre-computed property sets in workflow detection eliminate O(n²) work
  • Fixed registry N+1 file reads in doctor checks
  • Cached _list_tools in MCP server to avoid per-request recomputation
  • Fixed execution_order() set rebuild performance
  • Bulletproof terminal cleanup — each step in App.run() finally block is individually guarded

Bug fixes

  • HelpRenderer now wired as default formatter in CLI.build_parser() and subparsers
  • Action group capture in help uses formatter lifecycle instead of parser attributes
  • Docstring descriptions propagate through schema to argparse help text
  • components/*.kida included in package data
  • --version rendering guards template path when no action groups are captured
  • Fixed unclosed backtick in generate_help_all global options
  • uv detection for version upgrade notices
  • Version string drift — all modules now use __version__ from __init__.py
  • ViewState merging in combine_reducers — fields from multiple reducers are merged, not overwritten
  • Message filter + Ctrl+C — filtered @@QUIT no longer locks out subsequent Ctrl+C
  • CLI.call() provides a proper Context to middleware instead of None
  • Gateway child I/O enforces a 30-second read timeout to prevent deadlocks
  • Store.shutdown() waits for pending work; Batch uses a 60-second timeout
  • Failed @@SAGA_ERROR/@@CMD_ERROR dispatches are logged instead of silently swallowed
  • Before/after hook errors are caught and reported instead of crashing

New examples

  • devtool — showcases doctor diagnostics, hooks, command examples in help, structured errors, and shell completions
  • spinner — showcases Cmd, Batch, TickCmd, and ViewState patterns