Skip to content

Releases: lbliii/milo-cli

milo-cli 0.2.1

12 Apr 15:23
83ccab3

Choose a tag to compare

Patch release fixing group command help display, lazy command argument defaults, and schema handling.

Fixed

  • Group help display — Bare invocation of a command group now correctly shows group help instead of "Unknown command". Help output lists subcommands by name instead of raw argparse internals.
  • Lazy command defaults — Lazy commands now propagate function signature defaults to argparse. Schema defaults are JSON-safe, boolean schema defaults are respected, boolean default=True parameters use --no-xxx flags, schema enum values become argparse choices, and display_result=False suppresses plain-format output while preserving --output-file and --format json.
  • Lazy command hardeningGroup.lazy_command() supports examples, confirm, and annotations kwargs for parity with CLI.lazy_command().

milo-cli Added Changed Deprecated Removed Fixed Security 0.2.0

10 Apr 18:31
5e18323

Choose a tag to compare

Feature release focused on saga effect expansion, structured concurrency primitives, extended theming, and orchestration-layer resilience.

Highlights

  • Saga effects expansion — Race (first-wins with loser cancellation), All (wait-all with fail-fast), Take (pause until action dispatched), and Debounce (cancel-and-restart timer)
  • Structured concurrency — SagaContext for cancellation trees, EffectResult handler registry, TakeEvery/TakeLatest higher-order effects, configurable thread pool with max_workers and on_pool_pressure
  • Orchestration hardening — Timeout wrapper effect, TryCall structured error handling, saga cancellation tokens, PhasePolicy (retry/skip/stop), DFS cycle detection, phase context forwarding
  • Extended theme colorsThemeStyle now supports 256-color (int index), truecolor (#rrggbb hex), and background colors (bg field)
  • Pipeline TUI — Interactive buildpipe example with real-time phase visualization and progress bar
  • pipeline_progress macro — Reusable component for rendering PipelineState with status and progress bar
  • kida-templates 0.4.0 — Match blocks, try/fallback error boundaries, unless conditionals, and public terminal_color API

MCP gateway improvements

  • Per-request timeout enforcement
  • Graceful child restart on failure
  • Gateway test suite covering namespacing, routing, proxying, idle reaping, and error handling

Schema improvements

  • Tuple, set, and frozenset schema support
  • $ref for recursive dataclasses
  • Fallback warnings for unsupported types

Infrastructure

  • Adopted Towncrier for changelog management with CI enforcement
  • Comprehensive benchmarks and free-threading stress tests for saga effects

milo-cli 0.1.1

04 Apr 13:52
bb33a1b

Choose a tag to compare

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

milo-cli 0.1.0

30 Mar 23:06
b014b00

Choose a tag to compare

What's Changed

  • Add milo CLI framework for free-threaded Python by @lbliii in #1
  • Add README and Bengal documentation site by @lbliii in #2
  • Add production maturity tooling by @lbliii in #3
  • Fix production baseurl so GitHub Pages styles load by @lbliii in #4
  • Bump kida-templates to 0.3.0, add terminal rendering and examples by @lbliii in #5
  • Add Bengal-ready CLI primitives: groups, config, pipeline, plugins by @lbliii in #6
  • Add MCP gateway, terminal renderer, examples, and docs by @lbliii in #7
  • Add MCP v2: persistent gateway, resources, prompts, middleware, observability by @lbliii in #8
  • Rename template files from .txt to .kida by @lbliii in #9

New Contributors

  • @lbliii made their first contribution in #1

Full Changelog: https://github.com/lbliii/milo-cli/commits/v0.1.0