Releases: lbliii/milo-cli
milo-cli 0.3.1
Patch release focused on post-0.3.0 dependency alignment, template verification, and steward guidance.
Highlights
- Kida 0.9 adoption — Milo now depends on
kida-templates>=0.9.0,<0.10.0. - Template verification —
scripts/check_templates.pynow enforces Kida strict end tags and refactor-safe same-folder imports while still compiling through Milo's terminal-aware filters and globals. - Steward network — Root and scoped
AGENTS.mdguidance now includes verification status, cross-cutting concerns, known regression patterns, steward questions, and self-audit tracking.
Changed
- Refreshed the lockfile for Kida 0.9.
- Expanded steward guidance across core, docs, examples, site, benchmarks, scaffold, templates, input, and tests.
Fixed
- Cleaned bundled component imports to use refactor-safe
./_defs.kidasame-folder paths. - Removed the generic
tryclose fromerror.kidaso the bundled templates satisfy the stricter local template gate without relying on Kida 0.9's inconsistenttryclose suggestion.
milo-cli 0.3.0
Feature release focused on agent-native CLI authoring, stricter template contracts, release stewardship, and command/MCP/schema parity hardening.
Highlights
- Agent-native authoring —
milo new <name>scaffolds a tested CLI project, andmilo verify <path>runs import, schema, dispatch, in-process MCP, and subprocess MCP transport checks. - Agent repair loops — MCP validation errors now carry structured argument and constraint context;
llms.txtoutput marks required, optional, and defaulted inputs more clearly. - Kida 0.7 adoption — Milo now uses
kida-templates>=0.7.0,<0.8.0, with inline component compilation and validated template calls enabled by default. - Strict undefined templates — Stock templates already satisfy strict rendering. User templates that relied on silent undefined fallbacks now raise
UndefinedError; passget_env(strict_undefined=False)to keep loose rendering. - Terminal layout filters — New display-cell filters and open-rule helpers make table, frame, divider, meter, and truncation output align by rendered cell width.
- Steward system — Scoped
AGENTS.mdfiles define ownership, contract checklists, consultation triggers, and review expectations across core, docs, tests, templates, examples, site, benchmarks, and scaffold domains.
Added
milo componentsfor listing bundled and user-defined Kida component defs, with--jsonoutput for tooling and--pathfor extra template directories.milo.livere-exports forLiveRenderer,Spinner,stream_to_terminal, andterminal_env.function_to_schema(..., warn_missing_docs=True)to surface undocumented typed parameters during verification.form_schema()for form introspection.- Agent docs, testing guidance, migration recipes, example docs, and optional Markdown snippet verification.
- Silent-exception linting with explicit
# silent: <reason>annotations. - Output-gallery guidance, scaffolded verification coverage, terminal cleanup checks, dispatch lock edge coverage, and display-cell rendering benchmarks.
Changed
get_env()defaults toinline_components=Trueandvalidate_calls=True, and acceptsenable_capturefor static-site and capture flows.- Gateway, registry, and saga executor pools use Kida workload-aware worker sizing.
pipeline_progressandpipeline_detailtemplates include flush boundaries to encode their streaming contract.- Documentation site navigation is reorganized around reader intent: About, Get Started, Build CLIs, Build Apps, Quality and Operations, Reference, Examples, and Applied Tutorials.
- Steward guidance now includes evidence-backed review finding format, collateral update rules, synthesis requirements, and parity-matrix expectations.
- Internal code adopts more Python 3.14 patterns, including PEP 695 type aliases, pattern matching in form key handlers, and frozen/slotted dataclasses in tests.
Fixed
- Contract regressions found in the project-wide bugbash across command dispatch, MCP, schema generation, app runtime, flow, form,
llms.txt, and docs. - Context injection parity, JSON-RPC invalid-request handling, gateway progress routing, Store shutdown/listener serialization, and CLI/schema contract drift.
milo-cli 0.2.2
Patch release adding pipeline observability, refactoring command dispatch internals, improving performance, and fixing a batch of sharp edges.
Added
- Pipeline observability —
PhaseLogdataclass with@@PHASE_LOGaction and ring-buffer reducer for per-phase stdout/stderr capture (opt-in viaPipeline(capture_output=True)). Newphase_detail()andpipeline_detail()kida macros for interactive TUI with cursor navigation, log scrolling, and auto-follow.PipelineViewState+make_detail_reducer()for Elm-style keyboard-driven expand/collapse interaction.milo://pipeline/timelineMCP resource exposes phase execution timeline as structured JSON. Gateway--statusnow shows real CLI metrics and pipeline state.
Changed
- kida-templates 0.5.0 — Correctness fix for variable bindings inside unrolled for-loops (affects form, select, pipeline, and component templates) and faster template compilation from cached
str.joinand filter folding. - Dispatch performance — Replaced SHA256 with builtin hash and deferred recording append outside the lock. Fixed
get_env()singleton cache (122us to 125ns). Bulk task accounting for Batch effects. - Command dispatch refactor — Shared builtin-mode handling, command resolution, hook execution, middleware execution, generator consumption, and output writing across
run(),call(), andcall_raw()without changing the public API.
Fixed
call()/call_raw()error handling — Re-raise exceptions instead of callingsys.exit(1), restoring the pre-refactor behavior for programmatic invocations.- Sharp edges (batch 1) — Fix 7 Python 2
except A, B:syntax errors, replace silent exception swallowing with warnings/logging, add atomic file writes, guard unhandled template lookups, and addraise_on_errortoConfig.validate(). - Sharp edges (batch 2) — Warn on silent template/config fallbacks, validate PhasePolicy and pipeline dependencies eagerly, fix exit code on aborted confirmations (130 instead of 0), suppress
display_result=Falseacross all output formats, tighten Context injection type check, returndefaultfromconfirm()in dry-run mode, addfail_fastoption to hook invocation and parallel pipelines. - Sharp edges (batch 3) — Additional syntax errors, silent failures, and strict API fixes.
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