From bb36a69b1e71b8c334f9e5260d9fffc65cdd7b24 Mon Sep 17 00:00:00 2001 From: ZdenekSrotyr Date: Thu, 7 May 2026 06:22:56 +0200 Subject: [PATCH] release: 0.44.0 --- CHANGELOG.md | 40 ++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f43ff6..9f7f01e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,46 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C ## [Unreleased] +## [0.44.0] — 2026-05-07 + +### Added +- `agnes refresh-marketplace` — single CLI command that owns the per-user + filtered Claude Code marketplace lifecycle. `--bootstrap` does the + first-time setup: clones the per-user marketplace bare repo to + `~/.agnes/marketplace`, strips the PAT from the cloned origin URL so it + doesn't sit in plaintext at rest, registers the local path with Claude + Code, and installs every plugin in the served manifest at + `--scope project`. Without `--bootstrap` it does an incremental refresh: + fetch + reset to the remote, then version-aware reconcile (install missing + plugins, update on version diff, skip on match). Plugins removed from the + manifest are deliberately NOT auto-uninstalled — a transient empty manifest + from the server would otherwise wipe the user's stack. +- `agnes init` now installs a SessionStart hook that runs + `agnes refresh-marketplace --quiet` on every Claude Code session, + alongside the existing chained `agnes self-upgrade; agnes pull` entry. + The marketplace refresh runs as a *separate* hook entry (not chained) + so a failure (e.g. fresh workspace with no clone yet) doesn't suppress + the data pull. The refresh command is wrapped in `bash -c "..."` + because Claude Code on Windows runs hook commands directly without a + shell, which would otherwise leave the `2>/dev/null || true` syntax + uninterpreted. +- When `agnes refresh-marketplace` detects an actual change, it emits + Claude Code hook JSON on stdout — `systemMessage` (transient toast) + and `additionalContext` (model-side system reminder) — both pointing + at `/reload-plugins` so the running session loads new plugins without + a restart. + +### Changed +- Install-prompt step 5 (in the dashboard-served setup payload) collapses + from a 15-line inline shell sequence — `rm -rf` + `git clone` + per-plugin + `claude plugin install` calls — to a single `agnes refresh-marketplace + --bootstrap` invocation. The old inline form tripped Claude Code's agent + `rm -rf` permission gate on first run. +- `scripts/dev/agnes-client-reset.sh`: now cleans + `~/.claude/plugins/{marketplaces,cache}/agnes`, drops the uv build cache, + and documents workspace-scoped residue that can't be enumerated from a + user-level reset. + ### Internal - `infra/modules/customer-instance` (tag `infra-v1.7.0`): `google_compute_instance.vm` now sets `allow_stopping_for_update = true`. Without it, changing `machine_type` (or any other field GCP will only mutate on a stopped VM) caused Terraform to fall back to a destroy + recreate, churning VM-local state for what should be an in-place resize. Consumers do not need to update — the field is provider-side only — but bumping the module ref to `infra-v1.7.0` enables in-place machine-type bumps. diff --git a/pyproject.toml b/pyproject.toml index d74f25b..7267555 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "agnes-the-ai-analyst" -version = "0.43.0" +version = "0.44.0" description = "Agnes — AI Data Analyst platform for AI analytical systems" requires-python = ">=3.11,<3.14" license = "MIT"