diff --git a/.changeset/cli-glow-up.md b/.changeset/cli-glow-up.md deleted file mode 100644 index 4e6a9aa9b..000000000 --- a/.changeset/cli-glow-up.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@smooai/smooth': minor ---- - -th-7f1da8: the Presence glow-up + codified CLI spec. Bare `th --help` now renders a branded, grouped map of the surface (wordmark gradient, sections for Platform / Big Smooth / Work / Agent mail / Coding / LLM / System, teal-accent literals, dimmed blurbs) with a two-way sync test pinning it to the clap tree; `th --help-full` keeps the native flat view, and all per-command help is themed via clap styles — everything pipe-safe and NO_COLOR-clean. Appending `ai` to any command path (`smoo org ai`, `th pearls ai`, bare `th ai`) prints a generated markdown guide (about, subcommands, flags, curated examples, house conventions) built for humans and AI agents. The interface contract is codified in docs/Engineering/CLI-Spec.md and partly test-enforced: every platform `list` verb must offer `--json` — the new conformance test found and this change backfills 19 that didn't (orgs, members, crm contacts, knowledge, jobs, products, booking, heypage, auth profiles, admin config). diff --git a/.changeset/config-schema-cli.md b/.changeset/config-schema-cli.md deleted file mode 100644 index 8f7b4f622..000000000 --- a/.changeset/config-schema-cli.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@smooai/smooth': minor ---- - -`smoo config schema` — patch the @smooai/config schema straight from the CLI, remote-first. `show` renders every declared key per tier with type/description/default; `add` upserts a key declaration (`--tier secret|public|feature_flag|limit`, with `--type`/`--description`/`--default` and `--min`/`--max` clamp bounds for limits); `rm` removes one. Both write-verbs print the would-be change, support `--dry-run`, POST a new schema version via the same endpoint `push` uses, and keep a pulled local `.smooai-config/schema.json` in sync when one exists. Foot-guns are refused loudly: adding a key already declared in a different tier shows the existing declaration, and `rm` reminds you that values are not deleted. diff --git a/.changeset/schema-pull-local-sync.md b/.changeset/schema-pull-local-sync.md deleted file mode 100644 index f5b956c32..000000000 --- a/.changeset/schema-pull-local-sync.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@smooai/smooth': minor ---- - -`smoo config schema pull` — bring the LOCAL schema representation up to date with the org's remote schema, correctly for both consumer kinds. A plain pulled `schema.json` (no `config.ts`) is overwritten like `smoo config pull --force`; a TypeScript consumer is never rewritten wholesale — remote keys missing locally are emitted as ready-to-paste snippets in the file's own conventions (`BooleanSchema`/`StringSchema`/`NumberSchema`, `defineLimit({ default, min, max, step })`), with `--write` appending them into the right tier block mechanically (all-or-nothing, refusing on an ambiguous block). Local-only keys are reported (push would add them) and never deleted; tier and type drift on shared keys are reported as tables. `--dry-run` prints everything and writes nothing; `--json` emits the structured report. diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 4e6b5546f..3dc3cb2fa 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.39.0", + "version": "0.40.0", "category": "orchestration", "keywords": ["orchestration", "tmux", "multi-agent", "th-mail", "pearls", "smooth-operator"], "author": { diff --git a/CHANGELOG.md b/CHANGELOG.md index 0df0c2b6e..5b0d428de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # @smooai/smooth +## 0.40.0 + +### Minor Changes + +- 8f09b67: th-7f1da8: the Presence glow-up + codified CLI spec. Bare `th --help` now renders a branded, grouped map of the surface (wordmark gradient, sections for Platform / Big Smooth / Work / Agent mail / Coding / LLM / System, teal-accent literals, dimmed blurbs) with a two-way sync test pinning it to the clap tree; `th --help-full` keeps the native flat view, and all per-command help is themed via clap styles — everything pipe-safe and NO_COLOR-clean. Appending `ai` to any command path (`smoo org ai`, `th pearls ai`, bare `th ai`) prints a generated markdown guide (about, subcommands, flags, curated examples, house conventions) built for humans and AI agents. The interface contract is codified in docs/Engineering/CLI-Spec.md and partly test-enforced: every platform `list` verb must offer `--json` — the new conformance test found and this change backfills 19 that didn't (orgs, members, crm contacts, knowledge, jobs, products, booking, heypage, auth profiles, admin config). +- 1df7b79: `smoo config schema` — patch the @smooai/config schema straight from the CLI, remote-first. `show` renders every declared key per tier with type/description/default; `add` upserts a key declaration (`--tier secret|public|feature_flag|limit`, with `--type`/`--description`/`--default` and `--min`/`--max` clamp bounds for limits); `rm` removes one. Both write-verbs print the would-be change, support `--dry-run`, POST a new schema version via the same endpoint `push` uses, and keep a pulled local `.smooai-config/schema.json` in sync when one exists. Foot-guns are refused loudly: adding a key already declared in a different tier shows the existing declaration, and `rm` reminds you that values are not deleted. +- fd1077f: `smoo config schema pull` — bring the LOCAL schema representation up to date with the org's remote schema, correctly for both consumer kinds. A plain pulled `schema.json` (no `config.ts`) is overwritten like `smoo config pull --force`; a TypeScript consumer is never rewritten wholesale — remote keys missing locally are emitted as ready-to-paste snippets in the file's own conventions (`BooleanSchema`/`StringSchema`/`NumberSchema`, `defineLimit({ default, min, max, step })`), with `--write` appending them into the right tier block mechanically (all-or-nothing, refusing on an ambiguous block). Local-only keys are reported (push would add them) and never deleted; tier and type drift on shared keys are reported as tables. `--dry-run` prints everything and writes nothing; `--json` emits the structured report. + ## 0.39.0 ### Minor Changes diff --git a/Cargo.lock b/Cargo.lock index 5c5eb37ce..44e795d0a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5060,7 +5060,7 @@ dependencies = [ [[package]] name = "smooai-smooth-api-client" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "async-trait", @@ -5089,7 +5089,7 @@ dependencies = [ [[package]] name = "smooai-smooth-bench" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "async-trait", @@ -5116,7 +5116,7 @@ dependencies = [ [[package]] name = "smooai-smooth-cast" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "dirs-next", @@ -5132,7 +5132,7 @@ dependencies = [ [[package]] name = "smooai-smooth-cli" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anstream", "anyhow", @@ -5185,7 +5185,7 @@ dependencies = [ [[package]] name = "smooai-smooth-code" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "async-trait", @@ -5216,7 +5216,7 @@ dependencies = [ [[package]] name = "smooai-smooth-daemon" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "async-trait", @@ -5260,7 +5260,7 @@ dependencies = [ [[package]] name = "smooai-smooth-diver" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "axum 0.8.8", @@ -5280,7 +5280,7 @@ dependencies = [ [[package]] name = "smooai-smooth-goalie" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "bytes", @@ -5301,7 +5301,7 @@ dependencies = [ [[package]] name = "smooai-smooth-menubar" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "block2", @@ -5435,7 +5435,7 @@ dependencies = [ [[package]] name = "smooai-smooth-pearls" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "async-trait", @@ -5455,7 +5455,7 @@ dependencies = [ [[package]] name = "smooai-smooth-policy" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "chrono", @@ -5471,7 +5471,7 @@ dependencies = [ [[package]] name = "smooai-smooth-tmux" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "tempfile", @@ -5480,7 +5480,7 @@ dependencies = [ [[package]] name = "smooai-smooth-tools" -version = "0.39.0" +version = "0.40.0" dependencies = [ "anyhow", "async-trait", @@ -5511,7 +5511,7 @@ dependencies = [ [[package]] name = "smooai-smooth-web" -version = "0.39.0" +version = "0.40.0" dependencies = [ "axum 0.8.8", "axum-extra", diff --git a/Cargo.toml b/Cargo.toml index 4d14d586b..2c923465b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["crates/*"] [workspace.package] -version = "0.39.0" +version = "0.40.0" edition = "2021" license = "MIT" repository = "https://github.com/SmooAI/smooth" @@ -223,19 +223,19 @@ smooth-operator-server = { git = "https://github.com/SmooAI/smooth-operator.git" smooth-operator-svc = { git = "https://github.com/SmooAI/smooth-operator.git", rev = "b6c6b84", 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.39.0", path = "crates/smooth-cast", package = "smooai-smooth-cast" } -smooth-policy = { path = "crates/smooth-policy", version = "0.39.0", package = "smooai-smooth-policy" } -smooth-web = { version = "0.39.0", path = "crates/smooth-web", package = "smooai-smooth-web" } -smooth-code = { version = "0.39.0", path = "crates/smooth-code", package = "smooai-smooth-code" } -smooth-pearls = { path = "crates/smooth-pearls", version = "0.39.0", package = "smooai-smooth-pearls" } -smooth-diver = { version = "0.39.0", path = "crates/smooth-diver", package = "smooai-smooth-diver" } -smooth-tmux = { version = "0.39.0", path = "crates/smooth-tmux", package = "smooai-smooth-tmux" } -smooth-api-client = { version = "0.39.0", path = "crates/smooth-api-client", package = "smooai-smooth-api-client" } +smooth-cast = { version = "0.40.0", path = "crates/smooth-cast", package = "smooai-smooth-cast" } +smooth-policy = { path = "crates/smooth-policy", version = "0.40.0", package = "smooai-smooth-policy" } +smooth-web = { version = "0.40.0", path = "crates/smooth-web", package = "smooai-smooth-web" } +smooth-code = { version = "0.40.0", path = "crates/smooth-code", package = "smooai-smooth-code" } +smooth-pearls = { path = "crates/smooth-pearls", version = "0.40.0", package = "smooai-smooth-pearls" } +smooth-diver = { version = "0.40.0", path = "crates/smooth-diver", package = "smooai-smooth-diver" } +smooth-tmux = { version = "0.40.0", path = "crates/smooth-tmux", package = "smooai-smooth-tmux" } +smooth-api-client = { version = "0.40.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.39.0", path = "crates/smooth-daemon", package = "smooai-smooth-daemon" } -smooth-tools = { version = "0.39.0", path = "crates/smooth-tools", package = "smooai-smooth-tools" } -smooth-goalie = { version = "0.39.0", path = "crates/smooth-goalie", package = "smooai-smooth-goalie" } -smooth-menubar = { version = "0.39.0", path = "crates/smooth-menubar", package = "smooai-smooth-menubar" } +smooth-daemon = { version = "0.40.0", path = "crates/smooth-daemon", package = "smooai-smooth-daemon" } +smooth-tools = { version = "0.40.0", path = "crates/smooth-tools", package = "smooai-smooth-tools" } +smooth-goalie = { version = "0.40.0", path = "crates/smooth-goalie", package = "smooai-smooth-goalie" } +smooth-menubar = { version = "0.40.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/claude-plugins/smooth-agent/.claude-plugin/plugin.json b/claude-plugins/smooth-agent/.claude-plugin/plugin.json index c6274ead1..d0ce4b676 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.39.0", + "version": "0.40.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 ad7076922..bc4ddc265 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@smooai/smooth", - "version": "0.39.0", + "version": "0.40.0", "description": "Security-first AI agent orchestration platform", "homepage": "https://github.com/SmooAI/smooth#readme", "bugs": {