From 07f658cdb44ab7dd9b38ac4ef03fbbadc809d0d8 Mon Sep 17 00:00:00 2001 From: escott- Date: Mon, 12 Oct 2026 19:15:02 -0700 Subject: [PATCH] chore(release): prepare MCP 1.0.22 Bumps the workspace, npm package, MCP Registry metadata and the boundary self-test to 1.0.22. Adds the 1.0.22 changelog: the Agent Coach Kit's /coach surface with the workflow, workflow_save and workflow_delete tools, its OAuth metadata and widget (3ccd4fe); the HTTP gateway registering the coach tools and matching the live API (956e406); and the Codex Cloud kit in kits/agent-coach-kit/codex-cloud (066161c, 2809dab). The coach API they call (537e7d645, edge routing 4abfdc033) is in the live backend. No dependency changes; no open PRs were left out. Checked on ovh-desktop against main 2809dab plus this change: - cargo fmt --all --check - cargo clippy --locked --workspace --all-targets -- -D warnings - cargo test --locked --workspace --all-targets: 3275 passed, 0 failed, 21 ignored - account_connection_smoke: 9 tests - cargo audit --deny warnings (403 crates, no advisories) and cargo deny --locked check - on a clean archive: release_contract metadata and resolve-version for tag v1.0.22, public_boundary, the four script tests, the adoption and grounding tests, npm test (6 passed) - the gate binary against a mock coach API: 18 of 18 checks on /coach (three tools, widget, protected-resource metadata, save and replay, pilot gating, sign-in challenge, delete confirm, no coach tools on the other surfaces); the published 1.0.21 fails 13 of them Co-Authored-By: Claude Opus 5.5 Signed-off-by: escott- --- .github/scripts/test_public_boundary.py | 2 +- CHANGELOG.md | 44 +++++++++++++++++++++++++ Cargo.lock | 14 ++++---- Cargo.toml | 14 ++++---- package.json | 2 +- server.json | 4 +-- 6 files changed, 62 insertions(+), 18 deletions(-) diff --git a/.github/scripts/test_public_boundary.py b/.github/scripts/test_public_boundary.py index c7a2e5a..c09818f 100644 --- a/.github/scripts/test_public_boundary.py +++ b/.github/scripts/test_public_boundary.py @@ -26,7 +26,7 @@ def test_private_search_names_are_rejected_in_public_comments_and_copy(self) -> boundary.verify_paths_and_source(root) def test_repository_satisfies_public_boundary(self) -> None: - self.assertEqual(boundary.verify(REPOSITORY_ROOT), "1.0.21") + self.assertEqual(boundary.verify(REPOSITORY_ROOT), "1.0.22") def test_forbidden_private_source_is_detected(self) -> None: with tempfile.TemporaryDirectory(prefix="public-boundary-") as temporary: diff --git a/CHANGELOG.md b/CHANGELOG.md index 60f755b..791177b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,49 @@ # Changelog +## 1.0.22 + +- Agent Coach Kit: a new `/coach` endpoint lets a person coach an agent on + recurring work from ChatGPT or Codex. It serves exactly three tools: + `workflow` (read-only: `capabilities`, `list`, `get`, `context`, `history`, + `compare`, `metrics`, `export`), `workflow_save` (append-only: create a + workflow, refine its goal, start a job, save an output as text, an https link + or a file the host hands over, add, rescope or retract feedback, edit or + import guidance, set effort, close, reopen or cancel a job, record a + verdict) and `workflow_delete` (one workflow, only with `confirm` set to its + slug; hidden at once, erased within 30 days). Every write carries an + operation id derived from its arguments, so a retry never saves twice, and + ends with one status line: `[COACH_SAVED]`, `[COACH_ALREADY_SAVED]`, + `[COACH_CONFLICT]` or `[COACH_NOT_SAVED]`. Replies name things by readable + reference (`weekly-note#4/v2`), keep the person's words ("You said") apart + from the coach's reading, and fence saved data as data, not instructions. + `/coach` has its own OAuth protected-resource metadata + (`/.well-known/oauth-protected-resource/coach`, scopes `read:coach` and + `write:coach`) and serves a ChatGPT widget (`ui://widget/coach.html`); hosts + without widgets get the same information as text. The coach tools stay off + every other surface; a server started with + `CONTEXTSTREAM_TOOL_SURFACE_PROFILE=coach` serves only them. Coach is a pilot: + accounts without it get `coach_not_enabled`, which is not treated as a + sign-in problem (3ccd4fe, 956e406). +- Hosted gateway: the HTTP gateway registers the coach tools (it builds its own + tool registry, so `/coach` listed nothing there), `compare` no longer shows a + version as revising itself, and `get` on guidance shows the person's words + beside the coach's reading (956e406). +- Tool results can carry `_meta`, which the transports merge into the + response's `_meta`; the coach tools use it to ask ChatGPT to sign the person + in after a 401 or 403 (3ccd4fe). +- Agent Coach Kit for Codex Cloud (`kits/agent-coach-kit/codex-cloud`): Codex + Cloud tasks cannot load MCP servers, so a repo skill + (`.agents/skills/contextstream-coach/SKILL.md`) and a standard-library helper + (`scripts/coach.py`) call the coach REST API with the person's key from a + Codex network secret. The README covers the environment, network access, the + storage host for large media, every command, the save tags and the exit + codes. The kit lives in the repository; it is not part of the npm package or + the binaries (066161c, 2809dab). + +Who gets what: the coach tools reach ChatGPT and Codex when the hosted gateway +runs this version; the default, OpenAI and consolidated tool lists do not +change. No dependency changes. + ## 1.0.21 - Hosted gateway: tools no longer read or write the gateway host's own disk. diff --git a/Cargo.lock b/Cargo.lock index caefb18..2a73f24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1624,7 +1624,7 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "mcp-acceleration-products" -version = "1.0.21" +version = "1.0.22" dependencies = [ "async-trait", "chrono", @@ -1642,7 +1642,7 @@ dependencies = [ [[package]] name = "mcp-client" -version = "1.0.21" +version = "1.0.22" dependencies = [ "anyhow", "base64 0.23.1", @@ -1670,7 +1670,7 @@ dependencies = [ [[package]] name = "mcp-model-registry" -version = "1.0.21" +version = "1.0.22" dependencies = [ "mcp-types", "serde", @@ -1679,7 +1679,7 @@ dependencies = [ [[package]] name = "mcp-server" -version = "1.0.21" +version = "1.0.22" dependencies = [ "anyhow", "async-trait", @@ -1736,7 +1736,7 @@ dependencies = [ [[package]] name = "mcp-session" -version = "1.0.21" +version = "1.0.22" dependencies = [ "chrono", "dashmap", @@ -1756,7 +1756,7 @@ dependencies = [ [[package]] name = "mcp-tools" -version = "1.0.21" +version = "1.0.22" dependencies = [ "anyhow", "async-trait", @@ -1792,7 +1792,7 @@ dependencies = [ [[package]] name = "mcp-types" -version = "1.0.21" +version = "1.0.22" dependencies = [ "async-trait", "chrono", diff --git a/Cargo.toml b/Cargo.toml index a7745cd..53424ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ members = [ ] [workspace.package] -version = "1.0.21" +version = "1.0.22" edition = "2021" rust-version = "1.95" license = "MIT" @@ -90,12 +90,12 @@ fs2 = "0.4" notify = "8" # Workspace crates -mcp-types = { version = "=1.0.21", path = "crates/mcp-types" } -mcp-client = { version = "=1.0.21", path = "crates/mcp-client" } -mcp-session = { version = "=1.0.21", path = "crates/mcp-session" } -mcp-tools = { version = "=1.0.21", path = "crates/mcp-tools" } -mcp-model-registry = { version = "=1.0.21", path = "crates/mcp-model-registry" } -mcp-acceleration-products = { version = "=1.0.21", path = "crates/mcp-acceleration-products" } +mcp-types = { version = "=1.0.22", path = "crates/mcp-types" } +mcp-client = { version = "=1.0.22", path = "crates/mcp-client" } +mcp-session = { version = "=1.0.22", path = "crates/mcp-session" } +mcp-tools = { version = "=1.0.22", path = "crates/mcp-tools" } +mcp-model-registry = { version = "=1.0.22", path = "crates/mcp-model-registry" } +mcp-acceleration-products = { version = "=1.0.22", path = "crates/mcp-acceleration-products" } # Testing mockall = "0.15" diff --git a/package.json b/package.json index 6d17999..bd72c67 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@contextstream/mcp-server", "mcpName": "io.github.contextstream/mcp-server", - "version": "1.0.21", + "version": "1.0.22", "description": "Verified npm launcher for the open-source ContextStream Rust MCP server", "type": "module", "license": "MIT", diff --git a/server.json b/server.json index c00cc8c..344b324 100644 --- a/server.json +++ b/server.json @@ -3,7 +3,7 @@ "name": "io.github.contextstream/mcp-server", "title": "ContextStream MCP Server", "description": "Project memory, semantic code search, and grounded agent context.", - "version": "1.0.21", + "version": "1.0.22", "repository": { "url": "https://github.com/contextstream/mcp-server", "source": "github" @@ -20,7 +20,7 @@ "registryType": "npm", "registryBaseUrl": "https://registry.npmjs.org", "identifier": "@contextstream/mcp-server", - "version": "1.0.21", + "version": "1.0.22", "transport": { "type": "stdio" },