From b9b7e6c98998641bcb5d6d3fb497dfc8aa32c8f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Wed, 22 Jul 2026 19:55:30 -0400 Subject: [PATCH] release: v0.1.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since v0.1.4: - fix(fs): Windows-safe atomic replace everywhere (util::fs::replace_file) — model+effort switches now persist on Windows; models cache and session state writes no longer fail silently under AV/indexer file locks - fix(tui): a default-model persist failure keeps the live session's model instead of reverting the pick - docs: AGENTS.md records the replace_file contract --- AGENTS.md | 8 ++++ Cargo.lock | 124 ++++++++++++++++++++++++++--------------------------- Cargo.toml | 2 +- 3 files changed, 71 insertions(+), 63 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index f1a992f..fe8bc7c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -32,6 +32,14 @@ import) or any `KIMI_*` env var. - **Observability is local**: `kigi-log` (unified session log, `--debug` firehose, subsystem file logs, opt-in instrumentation) writes under `~/.kigi` only. Its zero-network property is a contract. +- **Atomic file replace goes through `util::fs::replace_file`** (tmp+rename + commit step; async callers wrap in `spawn_blocking`). Never inline a bare + `fs::rename` replace: Windows `MoveFileExW(REPLACE_EXISTING)` fails with a + sharing violation while AV/indexer/cloud-sync holds the destination open — + the "persists on macOS, silently doesn't on Windows" class (a /model + switch that never stuck). Plain rename stays correct only for true moves + whose destination doesn't pre-exist (worktree-pool markers, corrupt-file + backups). Write failures must at least `warn!` — never `let _ =`. - The root `Cargo.toml` is hand-maintained (upstream's generator is not in this repo). Members sorted; versions inherited from `workspace.package.version` — the single source of truth for the release diff --git a/Cargo.lock b/Cargo.lock index 3332181..cf61b36 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5442,7 +5442,7 @@ dependencies = [ [[package]] name = "kigi-acp-lib" -version = "0.1.4" +version = "0.1.5" dependencies = [ "agent-client-protocol", "async-trait", @@ -5456,7 +5456,7 @@ dependencies = [ [[package]] name = "kigi-agent" -version = "0.1.4" +version = "0.1.5" dependencies = [ "chrono", "dirs 6.0.0", @@ -5486,7 +5486,7 @@ dependencies = [ [[package]] name = "kigi-agent-lifecycle" -version = "0.1.4" +version = "0.1.5" dependencies = [ "async-trait", "tokio", @@ -5495,7 +5495,7 @@ dependencies = [ [[package]] name = "kigi-auth" -version = "0.1.4" +version = "0.1.5" dependencies = [ "async-trait", "http 1.4.2", @@ -5508,7 +5508,7 @@ dependencies = [ [[package]] name = "kigi-bin" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "clap", @@ -5543,7 +5543,7 @@ dependencies = [ [[package]] name = "kigi-chat-state" -version = "0.1.4" +version = "0.1.5" dependencies = [ "indexmap", "kigi-compaction", @@ -5560,7 +5560,7 @@ dependencies = [ [[package]] name = "kigi-codebase-graph" -version = "0.1.4" +version = "0.1.5" dependencies = [ "ahash", "clap", @@ -5596,7 +5596,7 @@ dependencies = [ [[package]] name = "kigi-compaction" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "async-trait", @@ -5609,7 +5609,7 @@ dependencies = [ [[package]] name = "kigi-config" -version = "0.1.4" +version = "0.1.5" dependencies = [ "base64", "blake3", @@ -5632,7 +5632,7 @@ dependencies = [ [[package]] name = "kigi-config-types" -version = "0.1.4" +version = "0.1.5" dependencies = [ "agent-client-protocol", "indexmap", @@ -5646,7 +5646,7 @@ dependencies = [ [[package]] name = "kigi-crash-handler" -version = "0.1.4" +version = "0.1.5" dependencies = [ "backtrace", "libc", @@ -5657,7 +5657,7 @@ dependencies = [ [[package]] name = "kigi-env" -version = "0.1.4" +version = "0.1.5" dependencies = [ "tracing", "url", @@ -5665,7 +5665,7 @@ dependencies = [ [[package]] name = "kigi-fast-worktree" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "bytes", @@ -5697,7 +5697,7 @@ dependencies = [ [[package]] name = "kigi-file-utils" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "aws-config", @@ -5721,7 +5721,7 @@ dependencies = [ [[package]] name = "kigi-fsnotify" -version = "0.1.4" +version = "0.1.5" dependencies = [ "criterion", "dunce", @@ -5742,7 +5742,7 @@ dependencies = [ [[package]] name = "kigi-gix-status" -version = "0.1.4" +version = "0.1.5" dependencies = [ "gix", "kigi-test-utils", @@ -5752,7 +5752,7 @@ dependencies = [ [[package]] name = "kigi-hooks" -version = "0.1.4" +version = "0.1.5" dependencies = [ "fastrand", "kigi-config", @@ -5771,7 +5771,7 @@ dependencies = [ [[package]] name = "kigi-hooks-plugins-types" -version = "0.1.4" +version = "0.1.5" dependencies = [ "serde", "serde_json", @@ -5779,7 +5779,7 @@ dependencies = [ [[package]] name = "kigi-http" -version = "0.1.4" +version = "0.1.5" dependencies = [ "kigi-auth", "kigi-log", @@ -5794,7 +5794,7 @@ dependencies = [ [[package]] name = "kigi-hunk-tracker" -version = "0.1.4" +version = "0.1.5" dependencies = [ "chrono", "dunce", @@ -5815,14 +5815,14 @@ dependencies = [ [[package]] name = "kigi-interjection-core" -version = "0.1.4" +version = "0.1.5" dependencies = [ "serde", ] [[package]] name = "kigi-log" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "chrono", @@ -5840,7 +5840,7 @@ dependencies = [ [[package]] name = "kigi-markdown" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anstyle", "anstyle-lossy", @@ -5864,14 +5864,14 @@ dependencies = [ [[package]] name = "kigi-markdown-core" -version = "0.1.4" +version = "0.1.5" dependencies = [ "pulldown-cmark", ] [[package]] name = "kigi-mcp" -version = "0.1.4" +version = "0.1.5" dependencies = [ "agent-client-protocol", "async-trait", @@ -5908,7 +5908,7 @@ dependencies = [ [[package]] name = "kigi-memory" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "arc-swap", @@ -5942,7 +5942,7 @@ dependencies = [ [[package]] name = "kigi-mermaid" -version = "0.1.4" +version = "0.1.5" dependencies = [ "fontdb", "image", @@ -5960,7 +5960,7 @@ dependencies = [ [[package]] name = "kigi-models" -version = "0.1.4" +version = "0.1.5" dependencies = [ "kigi-env", "serde", @@ -5970,7 +5970,7 @@ dependencies = [ [[package]] name = "kigi-pager-minimal" -version = "0.1.4" +version = "0.1.5" dependencies = [ "chrono", "crossterm", @@ -5987,7 +5987,7 @@ dependencies = [ [[package]] name = "kigi-pager-pty-harness" -version = "0.1.4" +version = "0.1.5" dependencies = [ "alacritty_terminal", "anyhow", @@ -6012,7 +6012,7 @@ dependencies = [ [[package]] name = "kigi-pager-render" -version = "0.1.4" +version = "0.1.5" dependencies = [ "agent-client-protocol", "anstyle", @@ -6064,7 +6064,7 @@ dependencies = [ [[package]] name = "kigi-paths" -version = "0.1.4" +version = "0.1.5" dependencies = [ "camino", "serde", @@ -6074,7 +6074,7 @@ dependencies = [ [[package]] name = "kigi-prompt-queue" -version = "0.1.4" +version = "0.1.5" dependencies = [ "serde", "serde_json", @@ -6082,7 +6082,7 @@ dependencies = [ [[package]] name = "kigi-proto-build" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "pbjson-build", @@ -6093,7 +6093,7 @@ dependencies = [ [[package]] name = "kigi-ratatui-inline" -version = "0.1.4" +version = "0.1.5" dependencies = [ "ansi-width", "anstyle-parse 0.2.7", @@ -6110,7 +6110,7 @@ dependencies = [ [[package]] name = "kigi-ratatui-textarea" -version = "0.1.4" +version = "0.1.5" dependencies = [ "arboard", "chrono", @@ -6131,7 +6131,7 @@ dependencies = [ [[package]] name = "kigi-sampler" -version = "0.1.4" +version = "0.1.5" dependencies = [ "async-openai", "async-stream", @@ -6154,7 +6154,7 @@ dependencies = [ [[package]] name = "kigi-sampling-types" -version = "0.1.4" +version = "0.1.5" dependencies = [ "assert_matches", "async-openai", @@ -6171,7 +6171,7 @@ dependencies = [ [[package]] name = "kigi-sandbox" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "chrono", @@ -6192,7 +6192,7 @@ dependencies = [ [[package]] name = "kigi-secrets" -version = "0.1.4" +version = "0.1.5" dependencies = [ "regex", "serde_json", @@ -6230,7 +6230,7 @@ dependencies = [ [[package]] name = "kigi-shell" -version = "0.1.4" +version = "0.1.5" dependencies = [ "agent-client-protocol", "anyhow", @@ -6367,7 +6367,7 @@ dependencies = [ [[package]] name = "kigi-shell-base" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "chrono", @@ -6392,7 +6392,7 @@ dependencies = [ [[package]] name = "kigi-sqlite-journal" -version = "0.1.4" +version = "0.1.5" dependencies = [ "libc", "rusqlite", @@ -6403,7 +6403,7 @@ dependencies = [ [[package]] name = "kigi-subagent-resolution" -version = "0.1.4" +version = "0.1.5" dependencies = [ "kigi-sampling-types", "kigi-tool-types", @@ -6418,7 +6418,7 @@ dependencies = [ [[package]] name = "kigi-system-power" -version = "0.1.4" +version = "0.1.5" dependencies = [ "windows-sys 0.59.0", "zbus", @@ -6426,7 +6426,7 @@ dependencies = [ [[package]] name = "kigi-test-support" -version = "0.1.4" +version = "0.1.5" dependencies = [ "agent-client-protocol", "anyhow", @@ -6448,7 +6448,7 @@ dependencies = [ [[package]] name = "kigi-test-utils" -version = "0.1.4" +version = "0.1.5" dependencies = [ "runfiles", "tracing", @@ -6457,11 +6457,11 @@ dependencies = [ [[package]] name = "kigi-token-estimation" -version = "0.1.4" +version = "0.1.5" [[package]] name = "kigi-tool-protocol" -version = "0.1.4" +version = "0.1.5" dependencies = [ "kigi-tool-types", "serde", @@ -6472,7 +6472,7 @@ dependencies = [ [[package]] name = "kigi-tool-runtime" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "async-trait", @@ -6490,7 +6490,7 @@ dependencies = [ [[package]] name = "kigi-tool-types" -version = "0.1.4" +version = "0.1.5" dependencies = [ "minijinja", "schemars 1.2.1", @@ -6500,7 +6500,7 @@ dependencies = [ [[package]] name = "kigi-tools" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "arc-swap", @@ -6577,7 +6577,7 @@ dependencies = [ [[package]] name = "kigi-tools-api" -version = "0.1.4" +version = "0.1.5" dependencies = [ "kigi-proto-build", "kigi-tool-protocol", @@ -6590,11 +6590,11 @@ dependencies = [ [[package]] name = "kigi-tracing-macros" -version = "0.1.4" +version = "0.1.5" [[package]] name = "kigi-tty-utils" -version = "0.1.4" +version = "0.1.5" dependencies = [ "libc", "nix 0.30.1", @@ -6604,7 +6604,7 @@ dependencies = [ [[package]] name = "kigi-tui" -version = "0.1.4" +version = "0.1.5" dependencies = [ "agent-client-protocol", "ansi-to-tui", @@ -6691,7 +6691,7 @@ dependencies = [ [[package]] name = "kigi-update" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "dunce", @@ -6720,14 +6720,14 @@ dependencies = [ [[package]] name = "kigi-version" -version = "0.1.4" +version = "0.1.5" dependencies = [ "semver", ] [[package]] name = "kigi-workspace" -version = "0.1.4" +version = "0.1.5" dependencies = [ "agent-client-protocol", "anyhow", @@ -6806,7 +6806,7 @@ dependencies = [ [[package]] name = "kigi-workspace-types" -version = "0.1.4" +version = "0.1.5" dependencies = [ "base64", "chrono", @@ -8840,7 +8840,7 @@ dependencies = [ [[package]] name = "ptyctl" -version = "0.1.4" +version = "0.1.5" dependencies = [ "alacritty_terminal", "anyhow", @@ -8858,7 +8858,7 @@ dependencies = [ [[package]] name = "ptyctl-cli" -version = "0.1.4" +version = "0.1.5" dependencies = [ "anyhow", "axum", diff --git a/Cargo.toml b/Cargo.toml index c39a580..0ede9ab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,7 +76,7 @@ members = [ ] [workspace.package] -version = "0.1.4" +version = "0.1.5" edition = "2024" license = "Apache-2.0"