Skip to content

Kumo 0.0.8

Choose a tag to compare

@kumoappdev kumoappdev released this 15 May 06:52

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:

  1. Splitting the CLI implementation into reusable KumoCLIKit commands backed by Swift Argument Parser.
  2. Making app termination and runtime shutdown collect diagnostics without getting stuck.
  3. 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 KumoCLIKit with command modules for configuration, core control, connection skill registration, logs, help, and shell completion.
  • Integrated swift-argument-parser 1.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.swift now 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 shutdownForegroundRuntime to shutdownActiveRuntime and changed it to return a ShutdownResult with diagnostics instead of throwing at the first failure.
  • Added a synchronous networksetup fallback through SystemProxyController.disableSynchronously when 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.applicationShouldTerminate to race termination cleanup against a five-second timeout through a single resume gate.
  • Updated KumoAppStore.prepareForTermination so 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.displayName cleanup 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, and docs/quality/testing-quality.md for the CLIKit split and Swift Argument Parser command structure.
  • Updated docs/core/mihomo-runtime-controller.md for shutdownActiveRuntime, shutdown diagnostics, synchronous proxy fallback, and the AppDelegate timeout.
  • Updated docs/interfaces/macos-swiftui-interface.md for flag de-duplication in Overview.
  • Updated docs/operations/system-integration-permissions.md to tie foreground quit cleanup to the same system proxy disable path used at runtime.
  • Added KumoCLIKitTests, four shutdown tests, and ProxyCountryTests.

Assets

  • Kumo-macos-0.0.8-arm64.dmg
  • latest.yml

SHA-256 for the DMG:

59ced3452aa24e3517e87f8310a1899e68b082d6992606aeaaab49bbca0f2815