From 530117bf0103c661b11b015680fa4e81e552743f Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 10 May 2026 11:29:20 +0000 Subject: [PATCH] release(0.2.0): bump workspace + cut 0.2.0 release notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps `[workspace.package].version` from 0.1.0 to 0.2.0 (cascades to every member crate via `version.workspace = true`) and reframes the existing `## Unreleased` block as the `0.2.0` release. The 0.2.0 entry consolidates four PRs that landed since this CHANGELOG was first introduced: - PR #28 (OTel + model registry): observability stack, model registry + routing policy + capability-validating provider profile, fallback UI, Customize / Market panels, jarvis-cli telemetry/web subcommands. - PR #29 (model + session race fix): session-switch race repair around `conversation not found`, scoped-frame invariants, 4 new vitest cases. - PR #30 (channels + sidebar + auto-mode refactor): WeCom WebSocket gateway adapter, Channels REST + Settings section, Codex-style chat sidebar with project groups, ~700 LOC trimmed from auto_mode.rs, RUN_TIMEOUT default 5m → 10m. - PR #31 (Makefile + docs): align local cargo commands with CI's `--exclude jarvis-desktop` invariant. Plus the original CHANGELOG-introducing PR's web composer / workspace probe / WS metadata work. Verified: `cargo check --workspace --exclude jarvis-desktop` passes, Cargo.lock picks up the version bump (25 entries flipped). `## Unreleased` is left as a fresh "_No changes yet._" placeholder so future PRs have an obvious place to land. --- CHANGELOG.md | 36 +++++++++++++++++++++++++++++------- Cargo.lock | 30 +++++++++++++++--------------- Cargo.toml | 2 +- 3 files changed, 45 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ac152d..a1271ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,31 @@ All notable product changes are tracked here. ## Unreleased +_No changes yet._ + +## 0.2.0 - 2026-05-10 + +First minor release after the harness-core / workspace split. Aggregates +the work that landed across PRs #28 (OTel + model registry), #29 (model +routing + session-switch race), #30 (channel adapters + sidebar + +auto-mode refactor), and #31 (Makefile + docs CI alignment), plus the +web composer / workspace-probe work that introduced this `CHANGELOG.md`. + ### Added - Added a Claude Code-style composer context row in the web app. New sessions can now pick workspace and optional project context from chips above the input box instead of a blocking sidebar popover. - Added workspace probing for arbitrary folders through `GET /v1/workspace/probe`, allowing the UI to show the selected workspace's git branch before or while it is bound to a session. - Added workspace metadata to WebSocket `started` and `workspace_changed` frames so the client can keep workspace path, git branch, and dirty state in sync. -- Added an English-first `README.md` product overview. -- Added `README.zh-CN.md` as the Chinese translation of the README. +- Added the channels subsystem: `ChannelBinding` / `ChannelInstance` core types, JSON-file channel store, `/v1/channels` REST routes, a WeCom WebSocket gateway adapter, and a Channels section in web Settings. Lays groundwork for Feishu / DingTalk / Slack adapters per `docs/proposals/channel-plugins.md`. +- Added a Codex-style chat sidebar with project groups in `ConvoList` and a denser `ConvoRow` carrying run / unread state. +- Added subagent batch dispatch (`subagents/batch`), an internal subagent module, and richer tool-adapter plumbing in `harness-subagents`. +- Added an OTel observability stack: `infra/otel/collector.yaml` + `infra/otel/docker-compose.yml`, `docs/observability/local-stack.md`, server `observability_routes`, and `HarnessObservabilityPanel` / `HealthCenter` / `KpiStrip` UI surfaces. +- Added a model registry with capability-validating provider profiles, a routing-policy engine, fallback events with a UI banner, a model Market panel, and a Routing section in Settings. +- Added `harness-tools` extensions: `harness_health` tool, expanded `doc.rs`, and a default doc skill bundled with `harness-skill`. +- Added `jarvis-cli` `telemetry` and `web` subcommands. +- Added a `Customize` page and an extension-builder default skill. +- Added the `WorkOverview` agent runtime strip and a rewritten `RequirementDetail` page. +- Added an English-first `README.md` product overview and a `README.zh-CN.md` translation. - Added this `CHANGELOG.md` file. ### Changed @@ -18,16 +36,20 @@ All notable product changes are tracked here. - Changed the sidebar "New session" action to open a blank draft and focus the composer. Context is now applied lazily when the first message creates the persisted conversation. - Changed project selection in the web app to behave as light new-session context, with `Free chat` as the default. - Replaced the composer shoulder PR/diff row with a broader session context row for runtime, workspace, git branch, project, model, and permission-mode adjacency. -- Rebuilt the release web bundle and restarted the local server on `http://127.0.0.1:7001/` during development verification. +- Refactored `auto_mode.rs` (~700 LOC trimmed); `JARVIS_WORK_RUN_TIMEOUT_MS` default raised from 5 minutes to 10 minutes; `auto_mode_routes` expanded for richer status surfaces. +- Replaced the Lottie mascot in `AgentLoadingFooter` with three breathing dots — quieter feedback during silent moments. +- Rewrote `McpSection` / `PluginsSection` / `SkillsSection` / `RoutingSection` in web Settings. +- Aligned local cargo commands in `Makefile`, `CLAUDE.md`, and `AGENTS.md` with Linux CI by threading `--exclude jarvis-desktop` through `lint` / `test` / `check`. Override with `WORKSPACE_EXCLUDE=` on a machine with the GTK toolchain installed. ### Fixed +- Fixed the session-switch race that surfaced as `conversation not found` in the web UI: the backend now persists newly-`New`'d conversations immediately, normalises Resume load errors to a not-found signal, and the frontend reorders `setActiveId` to close the race window. Scoped streaming frames no longer toggle `activeId`. Locked in by 4 new vitest cases against the not-found cleanup + scoped-frame invariant. - Prevented a newly-created conversation from flashing an empty hint over a user message when the first send creates the session and immediately sends content. - Cleared stale workspace diff state when the active socket workspace changes. ### Verified -- `npm run build` in `apps/jarvis-web`. -- `cargo check -p harness-server`. -- `cargo build --release -p jarvis`. -- Manual HTTP check for `http://127.0.0.1:7001/`. +- `cargo check --workspace --exclude jarvis-desktop`. +- `cargo clippy --workspace --all-targets --exclude jarvis-desktop -- -D warnings`. +- `cargo test -p harness-server` (268/268 at PR #28-#29 merge time). +- `npm test` and `npm run build` in `apps/jarvis-web` (310/310 vitest). diff --git a/Cargo.lock b/Cargo.lock index 0c5daaf..5b9c3f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1964,7 +1964,7 @@ dependencies = [ [[package]] name = "harness-cloud" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "bytes", @@ -1983,7 +1983,7 @@ dependencies = [ [[package]] name = "harness-core" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-stream", "async-trait", @@ -2000,7 +2000,7 @@ dependencies = [ [[package]] name = "harness-llm" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-stream", "async-trait", @@ -2019,7 +2019,7 @@ dependencies = [ [[package]] name = "harness-mcp" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "futures", @@ -2035,7 +2035,7 @@ dependencies = [ [[package]] name = "harness-memory" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "blake3", @@ -2049,7 +2049,7 @@ dependencies = [ [[package]] name = "harness-plugin" -version = "0.1.0" +version = "0.2.0" dependencies = [ "chrono", "harness-core", @@ -2065,7 +2065,7 @@ dependencies = [ [[package]] name = "harness-requirement" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "chrono", @@ -2082,7 +2082,7 @@ dependencies = [ [[package]] name = "harness-server" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-stream", "async-trait", @@ -2117,7 +2117,7 @@ dependencies = [ [[package]] name = "harness-skill" -version = "0.1.0" +version = "0.2.0" dependencies = [ "harness-core", "include_dir", @@ -2131,7 +2131,7 @@ dependencies = [ [[package]] name = "harness-store" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "chrono", @@ -2147,7 +2147,7 @@ dependencies = [ [[package]] name = "harness-subagents" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "futures", @@ -2161,7 +2161,7 @@ dependencies = [ [[package]] name = "harness-tools" -version = "0.1.0" +version = "0.2.0" dependencies = [ "async-trait", "chrono", @@ -2666,7 +2666,7 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jarvis" -version = "0.1.0" +version = "0.2.0" dependencies = [ "anyhow", "async-trait", @@ -2703,7 +2703,7 @@ dependencies = [ [[package]] name = "jarvis-cli" -version = "0.1.0" +version = "0.2.0" dependencies = [ "anyhow", "clap", @@ -2725,7 +2725,7 @@ dependencies = [ [[package]] name = "jarvis-desktop" -version = "0.1.0" +version = "0.2.0" dependencies = [ "anyhow", "open", diff --git a/Cargo.toml b/Cargo.toml index 3cad2b0..7ec6d3d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ members = [ ] [workspace.package] -version = "0.1.0" +version = "0.2.0" edition = "2021" license = "MIT" rust-version = "1.80"