diff --git a/.changeset/attest-credit-reuse.md b/.changeset/attest-credit-reuse.md deleted file mode 100644 index e34e11a4a..000000000 --- a/.changeset/attest-credit-reuse.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@smooai/smooth': minor ---- - -`th attest` reuses a pass when nothing the check reads has changed. Each pass is recorded locally, and a later commit whose diff (and merge-base move) the repo's `scripts/ci/_rows-touched.sh` calls `untouched` for a check is credited without re-running it. Any `scripts/ci/` change, a missing or failing hook, a dirty tree or a pass older than 72h still runs the check. `--no-reuse` forces a run. diff --git a/.changeset/haiku-luna-main-models.md b/.changeset/haiku-luna-main-models.md deleted file mode 100644 index b2253da5d..000000000 --- a/.changeset/haiku-luna-main-models.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@smooai/smooth': minor ---- - -Claude Haiku 5.5 and GPT-6 Luna are now both main models in Big Smooth and `th code`, and you can switch between them per turn (SMOODEV-4148). Haiku is not on the Smoo gateway. When you have an Anthropic key in `providers.json`, the daemon's new loopback model router sends Haiku turns to Anthropic and everything else to the gateway. The pickers offer Haiku only when it can run. A `th code` `/model` pick of the main slot now switches the live session immediately and is used again the next time you start `th code`. diff --git a/.changeset/model-picker-readable.md b/.changeset/model-picker-readable.md deleted file mode 100644 index 401a2c2da..000000000 --- a/.changeset/model-picker-readable.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@smooai/smooth': patch ---- - -Big Smooth's model picker is readable again (SMOODEV-4174). Each model's name gets its own line instead of being squeezed to "g." by the score and cost text, and the full id sits underneath. The main models (GPT-6 Luna, then Claude Haiku 5.5) are listed first. 🏆 now needs at least two benched models and a leader at 60% or better, so a lone 17.9% model no longer wears it. Premium is a text tag rather than a 💎. Unbenched rows say "not benched" once, an unmeasured $/pass is noted once in the footer, and the unexplained heart glyphs are replaced by the token price as text. The bench catalog now carries its run date, which the footer shows with its age, and the daemon serves Haiku's bench score from the full leaderboard. diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 42b0e72b2..1213271c4 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -13,7 +13,7 @@ "name": "smooth-agent", "source": "./claude-plugins/smooth-agent", "description": "Run a Big Smooth that drives Claude Code worker sessions over tmux, coordinate agents over th-mail, drive the org's Smooth Operator, and track work in pearls. Provides the /smooth command + a windows-build-box skill (throwaway Windows EC2 over SSM). Ships the shared SmooAI repo guardrail hooks (worktree enforcement, th-over-curl nudges, pearls-label reminder, pearl-store read-only-wedge guard).", - "version": "0.87.2", + "version": "0.88.0", "category": "orchestration", "keywords": ["orchestration", "tmux", "multi-agent", "th-mail", "pearls", "smooth-operator"], "author": { diff --git a/CHANGELOG.md b/CHANGELOG.md index b9a5d6e9b..a19821551 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # @smooai/smooth +## 0.88.0 + +### Minor Changes + +- 480e25c: `th attest` reuses a pass when nothing the check reads has changed. Each pass is recorded locally, and a later commit whose diff (and merge-base move) the repo's `scripts/ci/_rows-touched.sh` calls `untouched` for a check is credited without re-running it. Any `scripts/ci/` change, a missing or failing hook, a dirty tree or a pass older than 72h still runs the check. `--no-reuse` forces a run. +- aed580d: Claude Haiku 5.5 and GPT-6 Luna are now both main models in Big Smooth and `th code`, and you can switch between them per turn (SMOODEV-4148). Haiku is not on the Smoo gateway. When you have an Anthropic key in `providers.json`, the daemon's new loopback model router sends Haiku turns to Anthropic and everything else to the gateway. The pickers offer Haiku only when it can run. A `th code` `/model` pick of the main slot now switches the live session immediately and is used again the next time you start `th code`. + +### Patch Changes + +- 8c5e68b: Big Smooth's model picker is readable again (SMOODEV-4174). Each model's name gets its own line instead of being squeezed to "g." by the score and cost text, and the full id sits underneath. The main models (GPT-6 Luna, then Claude Haiku 5.5) are listed first. 🏆 now needs at least two benched models and a leader at 60% or better, so a lone 17.9% model no longer wears it. Premium is a text tag rather than a 💎. Unbenched rows say "not benched" once, an unmeasured $/pass is noted once in the footer, and the unexplained heart glyphs are replaced by the token price as text. The bench catalog now carries its run date, which the footer shows with its age, and the daemon serves Haiku's bench score from the full leaderboard. + ## 0.87.2 ### Patch Changes diff --git a/Cargo.lock b/Cargo.lock index de50908fe..1e534d08d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5264,7 +5264,7 @@ dependencies = [ [[package]] name = "smooai-smooth-api-client" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "async-trait", @@ -5293,7 +5293,7 @@ dependencies = [ [[package]] name = "smooai-smooth-bench" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "async-trait", @@ -5320,7 +5320,7 @@ dependencies = [ [[package]] name = "smooai-smooth-cast" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "dirs-next", @@ -5337,7 +5337,7 @@ dependencies = [ [[package]] name = "smooai-smooth-cli" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anstream", "anyhow", @@ -5398,7 +5398,7 @@ dependencies = [ [[package]] name = "smooai-smooth-code" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "async-trait", @@ -5429,7 +5429,7 @@ dependencies = [ [[package]] name = "smooai-smooth-daemon" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "async-trait", @@ -5478,7 +5478,7 @@ dependencies = [ [[package]] name = "smooai-smooth-diver" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "axum 0.8.8", @@ -5498,7 +5498,7 @@ dependencies = [ [[package]] name = "smooai-smooth-flow" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -5530,7 +5530,7 @@ dependencies = [ [[package]] name = "smooai-smooth-flow-client" -version = "0.87.2" +version = "0.88.0" dependencies = [ "serde", "serde_json", @@ -5538,7 +5538,7 @@ dependencies = [ [[package]] name = "smooai-smooth-flow-vt" -version = "0.87.2" +version = "0.88.0" dependencies = [ "cc", "thiserror 2.0.18", @@ -5547,7 +5547,7 @@ dependencies = [ [[package]] name = "smooai-smooth-goalie" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "bytes", @@ -5568,7 +5568,7 @@ dependencies = [ [[package]] name = "smooai-smooth-menubar" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "block2", @@ -5702,7 +5702,7 @@ dependencies = [ [[package]] name = "smooai-smooth-pearls" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "async-trait", @@ -5722,7 +5722,7 @@ dependencies = [ [[package]] name = "smooai-smooth-policy" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "chrono", @@ -5739,7 +5739,7 @@ dependencies = [ [[package]] name = "smooai-smooth-tmux" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "tempfile", @@ -5748,7 +5748,7 @@ dependencies = [ [[package]] name = "smooai-smooth-tools" -version = "0.87.2" +version = "0.88.0" dependencies = [ "anyhow", "async-trait", @@ -5779,7 +5779,7 @@ dependencies = [ [[package]] name = "smooai-smooth-web" -version = "0.87.2" +version = "0.88.0" dependencies = [ "axum 0.8.8", "axum-extra", diff --git a/Cargo.toml b/Cargo.toml index 2c3431238..d134a473f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["crates/*"] [workspace.package] -version = "0.87.2" +version = "0.88.0" edition = "2021" license = "MIT" repository = "https://github.com/SmooAI/smooth" @@ -227,23 +227,23 @@ smooth-operator-server = { git = "https://github.com/SmooAI/smooth-operator.git" smooth-operator-svc = { git = "https://github.com/SmooAI/smooth-operator.git", rev = "9b30ed7b", package = "smooai-smooth-operator", default-features = false } # smooth-owned coding-harness extensions to the generic engine (re-homed from # the engine when it went generic at 0.14.0). See crates/smooth-cast. -smooth-cast = { version = "0.87.2", path = "crates/smooth-cast", package = "smooai-smooth-cast" } -smooth-policy = { path = "crates/smooth-policy", version = "0.87.2", package = "smooai-smooth-policy" } -smooth-web = { version = "0.87.2", path = "crates/smooth-web", package = "smooai-smooth-web" } -smooth-code = { version = "0.87.2", path = "crates/smooth-code", package = "smooai-smooth-code" } -smooth-pearls = { path = "crates/smooth-pearls", version = "0.87.2", package = "smooai-smooth-pearls" } -smooth-diver = { version = "0.87.2", path = "crates/smooth-diver", package = "smooai-smooth-diver" } -smooth-tmux = { version = "0.87.2", path = "crates/smooth-tmux", package = "smooai-smooth-tmux" } +smooth-cast = { version = "0.88.0", path = "crates/smooth-cast", package = "smooai-smooth-cast" } +smooth-policy = { path = "crates/smooth-policy", version = "0.88.0", package = "smooai-smooth-policy" } +smooth-web = { version = "0.88.0", path = "crates/smooth-web", package = "smooai-smooth-web" } +smooth-code = { version = "0.88.0", path = "crates/smooth-code", package = "smooai-smooth-code" } +smooth-pearls = { path = "crates/smooth-pearls", version = "0.88.0", package = "smooai-smooth-pearls" } +smooth-diver = { version = "0.88.0", path = "crates/smooth-diver", package = "smooai-smooth-diver" } +smooth-tmux = { version = "0.88.0", path = "crates/smooth-tmux", package = "smooai-smooth-tmux" } # SmoothFlow engine (epic th-6ac036, lane A th-7f0af3): sessions under tmux, PTY streaming, supervision, fan-out. -smooth-flow = { version = "0.87.2", path = "crates/smooth-flow", package = "smooai-smooth-flow" } +smooth-flow = { version = "0.88.0", path = "crates/smooth-flow", package = "smooai-smooth-flow" } # The SmoothFlow session host's headless libghostty-vt (th-5025fb, ADR-011). -smooth-flow-vt = { version = "0.87.2", path = "crates/smooth-flow-vt", package = "smooai-smooth-flow-vt" } -smooth-api-client = { version = "0.87.2", path = "crates/smooth-api-client", package = "smooai-smooth-api-client" } +smooth-flow-vt = { version = "0.88.0", path = "crates/smooth-flow-vt", package = "smooai-smooth-flow-vt" } +smooth-api-client = { version = "0.88.0", path = "crates/smooth-api-client", package = "smooai-smooth-api-client" } # Chat-first Big Smooth daemon on the smooth-operator LocalServer engine (th-7225f9). -smooth-daemon = { version = "0.87.2", path = "crates/smooth-daemon", package = "smooai-smooth-daemon" } -smooth-tools = { version = "0.87.2", path = "crates/smooth-tools", package = "smooai-smooth-tools" } -smooth-goalie = { version = "0.87.2", path = "crates/smooth-goalie", package = "smooai-smooth-goalie" } -smooth-menubar = { version = "0.87.2", path = "crates/smooth-menubar", package = "smooai-smooth-menubar" } +smooth-daemon = { version = "0.88.0", path = "crates/smooth-daemon", package = "smooai-smooth-daemon" } +smooth-tools = { version = "0.88.0", path = "crates/smooth-tools", package = "smooai-smooth-tools" } +smooth-goalie = { version = "0.88.0", path = "crates/smooth-goalie", package = "smooai-smooth-goalie" } +smooth-menubar = { version = "0.88.0", path = "crates/smooth-menubar", package = "smooai-smooth-menubar" } # Cross-runtime client shared library (github.com/SmooAI/client-shared). # SMOODEV-1464: switched from a local `path = "../client-shared/rust"` dep to # a rev-pinned git dep. The path form only resolved on a dev laptop, so every diff --git a/apps/smoothflow-desktop/Cargo.lock b/apps/smoothflow-desktop/Cargo.lock index d2ae7ad34..cde76192b 100644 --- a/apps/smoothflow-desktop/Cargo.lock +++ b/apps/smoothflow-desktop/Cargo.lock @@ -6304,7 +6304,7 @@ dependencies = [ [[package]] name = "smooai-smooth-flow-client" -version = "0.87.2" +version = "0.88.0" dependencies = [ "serde", "serde_json", diff --git a/claude-plugins/smooth-agent/.claude-plugin/plugin.json b/claude-plugins/smooth-agent/.claude-plugin/plugin.json index 40d68d079..56eb56c65 100644 --- a/claude-plugins/smooth-agent/.claude-plugin/plugin.json +++ b/claude-plugins/smooth-agent/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://anthropic.com/claude-code/plugin.schema.json", "name": "smooth-agent", - "version": "0.87.2", + "version": "0.88.0", "description": "Big Smooth orchestration for Claude Code: tmux-supervised worker sessions that run in parallel, coordinate over th-mail, and track work in pearls. Auto-onboards every Claude Code session to the th-mail bus at startup, then nudges it to self-rename to a task-meaningful handle. Ships the `smooth` MCP server (th mcp serve) so agent mail, pearls and memory are tools rather than shell calls, plus a statusline showing your handle and unread count. Provides the /smooth command and a windows-build-box skill (throwaway Windows EC2 over SSM). Also ships the shared SmooAI repo guardrails as hooks (worktree enforcement, th-over-curl nudges, pearls-label reminder, pearl-store read-only-wedge guard, th-attest push hint) so the SmooAI repos stop hand-copying .claude/hooks.", "mcpServers": { "smooth": { diff --git a/package.json b/package.json index f3f3247fb..5fd403f92 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@smooai/smooth", - "version": "0.87.2", + "version": "0.88.0", "description": "Security-first AI agent orchestration platform", "homepage": "https://github.com/SmooAI/smooth#readme", "bugs": {