Kumo 0.0.8
Kumo 0.0.8 is an incremental release focused on two practical tracks: moving the command-line surface onto a dedicated KumoCLIKit built with Swift Argument Parser, and hardening foreground shutdown so quitting or stopping the app leaves less stale proxy/runtime state behind.
Important: Kumo is still at an early stage. Features and data formats may continue to evolve quickly across macOS environments and runtime setups. Keep backups of important profiles and settings, and treat this build as an early preview.
What changed since 0.0.7
Compared with 0.0.7, this release focuses on three areas:
- Splitting the CLI implementation into reusable
KumoCLIKitcommands backed by Swift Argument Parser. - Making app termination and runtime shutdown collect diagnostics without getting stuck.
- Cleaning proxy node labels so inferred flag icons are not duplicated beside node names.
Highlights
CLIKit and Swift Argument Parser
The kumo command is now implemented through a dedicated KumoCLIKit package target instead of keeping nearly all command behavior in Sources/KumoCLI/main.swift.
- Added
KumoCLIKitwith command modules for configuration, core control, connection skill registration, logs, help, and shell completion. - Integrated
swift-argument-parser1.7.1 while keeping Yams for YAML-backed configuration flows. - Moved CLI runtime setup, output rendering, debug-log access, shared argument types, and skill selection helpers into focused library files.
- Kept the executable target small:
Sources/KumoCLI/main.swiftnow delegates to the reusable CLI entrypoint. - Added CLIKit test coverage for the refactored command entrypoint and behavior contracts.
Shutdown lifecycle hardening
Foreground shutdown now follows a log-and-continue chain so one failing cleanup step does not hide later failures or leave AppKit waiting forever.
- Renamed
shutdownForegroundRuntimetoshutdownActiveRuntimeand changed it to return aShutdownResultwith diagnostics instead of throwing at the first failure. - Added a synchronous
networksetupfallback throughSystemProxyController.disableSynchronouslywhen the normal proxy-disable path throws. - Added a
CoreSupervisor.stop()fallback when helper-routed core stop fails. - Added shutdown logging through
os.Logger("io.kumo.KumoApp", category: "shutdown"). - Updated
KumoAppDelegate.applicationShouldTerminateto race termination cleanup against a five-second timeout through a single resume gate. - Updated
KumoAppStore.prepareForTerminationso proxy groups, rules, connections, providers, traffic, service status, and TUN status are refreshed even when shutdown reports diagnostics.
Proxy node label cleanup
Overview now avoids rendering the same country or region twice when a proxy node name already contains a regional-indicator emoji.
- Added
ProxyCountry.displayNamecleanup that strips embedded regional-indicator pairs from display labels. - Kept the original node name intact for Mihomo API selection and search.
- Added unit coverage for regional flag display-name behavior.
Documentation and tests
- Updated
docs/interfaces/cli-agent-control.md,docs/operations/persistence-logging.md, anddocs/quality/testing-quality.mdfor the CLIKit split and Swift Argument Parser command structure. - Updated
docs/core/mihomo-runtime-controller.mdforshutdownActiveRuntime, shutdown diagnostics, synchronous proxy fallback, and the AppDelegate timeout. - Updated
docs/interfaces/macos-swiftui-interface.mdfor flag de-duplication in Overview. - Updated
docs/operations/system-integration-permissions.mdto tie foreground quit cleanup to the same system proxy disable path used at runtime. - Added
KumoCLIKitTests, four shutdown tests, andProxyCountryTests.
Assets
Kumo-macos-0.0.8-arm64.dmglatest.yml
SHA-256 for the DMG:
59ced3452aa24e3517e87f8310a1899e68b082d6992606aeaaab49bbca0f2815