Releases: lbliii/milo-cli
Releases · lbliii/milo-cli
milo-cli 0.2.1
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=Trueparameters use--no-xxxflags, schemaenumvalues become argparsechoices, anddisplay_result=Falsesuppresses plain-format output while preserving--output-fileand--format json. - Lazy command hardening —
Group.lazy_command()supportsexamples,confirm, andannotationskwargs for parity withCLI.lazy_command().
milo-cli Added Changed Deprecated Removed Fixed Security 0.2.0
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_workersandon_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 colors —
ThemeStylenow supports 256-color (int index), truecolor (#rrggbbhex), and background colors (bgfield) - Pipeline TUI — Interactive
buildpipeexample with real-time phase visualization and progress bar pipeline_progressmacro — Reusable component for renderingPipelineStatewith status and progress bar- kida-templates 0.4.0 — Match blocks, try/fallback error boundaries, unless conditionals, and public
terminal_colorAPI
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
$reffor 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
Patch release focused on Elm Architecture ergonomics, Bubbletea-inspired effect patterns, CLI table-stakes features, and internal code health.
Highlights
- Reducer combinators —
quit_on,with_cursor,with_confirmdecorators stack to eliminate boilerplate key/cursor/confirm handling - Cmd effects — Lightweight
Cmdthunks as a simpler alternative to sagas for one-shot side effects, withBatch(concurrent) andSequence(serial) combinators TickCmd— Self-sustaining tick pattern with per-component, dynamic tick controlViewState— Declarative terminal state management (alt_screen,cursor_visible,window_title,mouse_mode) with diff-based rendering- Message filter —
App(filter=fn)intercepts actions before dispatch to drop or transform them - Shell completions —
install_completions()generates bash, zsh, and fish completions from CLI definitions - Doctor diagnostics —
run_doctor()validates environment, dependencies, and config health with structuredCheckspecs - Version checking — automatic PyPI upgrade notices (respects
NO_UPDATE_CHECKenv var) App.from_dir()— automatic template directory discovery, no manual loader setupContext.run_app()— bridge CLI command handlers to interactive Elm Architecture apps- Built-in template macros —
selectable_list,scrollable_list,format_timeincomponents/_defs.kida
CLI polish
- Structured error handling with
MiloErrorcode + 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 outputConfig.validate()type-checks against spec defaultsConfig.init()scaffolds starter config filesinvoke()test helper splits stdout/stderrRetrysaga effect with backoff- Saga/Cmd error recovery — unhandled exceptions dispatch
@@SAGA_ERROR/@@CMD_ERRORinstead of being swallowed
Internal improvements
- Extracted
_command_defs.py,_cli_help.py,_jsonrpc.py, and_mcp_router.pyfrom monolithic modules - Unified command registration between CLI and Group via
_make_command_def - Middleware wired into
CLI.run()andCLI.call()dispatch paths - Parallelized health checks and gateway discovery with
ThreadPoolExecutor - Lazy
walk_commandsgenerators 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_toolsin 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/*.kidaincluded in package data--versionrendering guards template path when no action groups are captured- Fixed unclosed backtick in
generate_help_allglobal 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
@@QUITno longer locks out subsequent Ctrl+C CLI.call()provides a properContextto middleware instead ofNone- 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_ERRORdispatches 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 completionsspinner— showcasesCmd,Batch,TickCmd, andViewStatepatterns
milo-cli 0.1.0
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
Full Changelog: https://github.com/lbliii/milo-cli/commits/v0.1.0