From deff24634bd074d0df525c987b7caaa4e297353a Mon Sep 17 00:00:00 2001 From: Abhishek Chauhan Date: Thu, 22 Oct 2026 11:55:46 +0530 Subject: [PATCH] release: 0.10.0 Version 0.10.0 in pyproject, __init__, server.json, the OpenAPI base and generated spec, and the CLI, quickstart and HTTP endpoint docs. The initialize response was re-captured from a 0.10.0 server and matches the documented one apart from the version. CHANGELOG and the docs changelog get the 0.10.0 entry. --- CHANGELOG.md | 6 +++++- .../v0.10.0-rest-api-and-memory-backends.md | 21 +++++++++++++++++++ docs/changelog/README.md | 3 ++- docs/changelog/SUMMARY.md | 1 + .../getting-started/quickstart.md | 2 +- docs/documentation/reference/cli.md | 6 +++--- .../documentation/reference/http-endpoints.md | 4 ++-- openapi/base.yaml | 6 +++--- openapi/vayl-server.yaml | 6 +++--- pyproject.toml | 2 +- server.json | 4 ++-- src/vayl/__init__.py | 2 +- 12 files changed, 45 insertions(+), 18 deletions(-) create mode 100644 docs/changelog/2026/v0.10.0-rest-api-and-memory-backends.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c72674..082194c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,10 @@ All notable changes to Vayl are documented here. This project adheres to [Semantic Versioning](https://semver.org/). -## [Unreleased] +## [0.10.0] — 2026-10-22 + +REST routes for every tool with a generated API reference, and memory backends for Google ADK, +LlamaIndex and AutoGen. No change to the MCP tools or their arguments. ### Added - **REST routes for every tool.** `vayl-server` serves `POST /v1/tools/` (the tool's arguments @@ -397,6 +400,7 @@ old, removals retract, ambiguous input is flagged, and history stays queryable (`vayl-mcp`) or an authenticated team server (`vayl-server`). SQLite by default, optional Postgres; encryption at rest, an Ed25519-signed tamper-evident audit chain, RBAC, and GDPR tools. +[0.10.0]: https://github.com/ac12644/vayl/releases/tag/v0.10.0 [0.9.1]: https://github.com/ac12644/vayl/releases/tag/v0.9.1 [0.9.0]: https://github.com/ac12644/vayl/releases/tag/v0.9.0 [0.8.0]: https://github.com/ac12644/vayl/releases/tag/v0.8.0 diff --git a/docs/changelog/2026/v0.10.0-rest-api-and-memory-backends.md b/docs/changelog/2026/v0.10.0-rest-api-and-memory-backends.md new file mode 100644 index 0000000..2152b60 --- /dev/null +++ b/docs/changelog/2026/v0.10.0-rest-api-and-memory-backends.md @@ -0,0 +1,21 @@ +--- +description: >- + REST routes for every tool with a generated API reference, memory backends + for Google ADK, LlamaIndex and AutoGen, and setup pages for seven more clients. +icon: plug +--- + +# v0.10.0 — REST API and memory backends + +_22 October 2026_ + +## Added + +* **REST routes for every tool.** `vayl-server` serves `POST /v1/tools/` (the tool's arguments as a JSON object, `{"result": "..."}` back) and `GET /v1/tools`, behind the same authentication and checks as `/mcp`. Errors use status codes: `401`, `403` for a missing capability or scope, `404` for an unknown tool, `422` for bad arguments. See the [HTTP API reference](https://vayl.gitbook.io/vayl-docs/api-reference). +* **An API reference generated from the code.** One typed operation per tool, with the capability it needs and a real example. A test fails if the spec drifts from the tools. +* **Memory backends for Google ADK, LlamaIndex and AutoGen.** They plug into each framework's own memory, so what the user says is stored and the current facts reach the model before each turn. Install with `pip install 'vayl-mcp[adk]'`, `[llamaindex]` or `[autogen]`. See [Agent frameworks](https://vayl.gitbook.io/vayl-docs/documentation/integrations/agent-frameworks), which also covers Pydantic AI and Agno over MCP. +* **Setup pages** for VS Code, Windsurf, Zed, Cline, Continue, Codex CLI and Gemini CLI. + +No action needed to upgrade. + +[Full notes on GitHub](https://github.com/ac12644/vayl/releases/tag/v0.10.0) diff --git a/docs/changelog/README.md b/docs/changelog/README.md index 54e1dbf..475c842 100644 --- a/docs/changelog/README.md +++ b/docs/changelog/README.md @@ -29,7 +29,8 @@ What changed in each Vayl release, newest first. Upgrade notes are on each relea | Release | Date | Highlights | | -------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------- | -| **v0.9.1** (current) | 22 Oct 2026 | gpt-6 support, server instructions for MCP clients, clearer model errors | +| **v0.10.0** (current) | 22 Oct 2026 | REST routes and generated API reference; memory backends for Google ADK, LlamaIndex and AutoGen | +| v0.9.1 | 22 Oct 2026 | gpt-6 support, server instructions for MCP clients, clearer model errors | | v0.9.0 | 22 Oct 2026 | Python 3.11 minimum; listed in the official MCP Registry | | v0.8.0 | 21 Oct 2026 | FastMCP 4 and MCP SDK v2, Python client HTTP fix, clean client shutdown | | v0.7.0 | 27 Sep 2026 | Tenant isolation for policies, the graph, decisions, receipts, audit and principals; audit fixes | diff --git a/docs/changelog/SUMMARY.md b/docs/changelog/SUMMARY.md index 45eaa43..6035b78 100644 --- a/docs/changelog/SUMMARY.md +++ b/docs/changelog/SUMMARY.md @@ -4,6 +4,7 @@ ## 2026 +* [v0.10.0 — REST API and memory backends](2026/v0.10.0-rest-api-and-memory-backends.md) * [v0.9.1 — gpt-6 and server instructions](2026/v0.9.1-gpt-6-and-server-instructions.md) * [v0.9.0 — Python 3.11 and the MCP Registry](2026/v0.9.0-python-3-11-and-mcp-registry.md) * [v0.8.0 — FastMCP 4 and MCP SDK v2](2026/v0.8.0-fastmcp-4-and-mcp-sdk-v2.md) diff --git a/docs/documentation/getting-started/quickstart.md b/docs/documentation/getting-started/quickstart.md index 7df02fe..b5bbf8e 100644 --- a/docs/documentation/getting-started/quickstart.md +++ b/docs/documentation/getting-started/quickstart.md @@ -29,7 +29,7 @@ vayl-mcp --version ``` ``` -vayl-mcp 0.9.1 +vayl-mcp 0.10.0 ``` Optional extras: diff --git a/docs/documentation/reference/cli.md b/docs/documentation/reference/cli.md index 8993dee..d856eee 100644 --- a/docs/documentation/reference/cli.md +++ b/docs/documentation/reference/cli.md @@ -15,7 +15,7 @@ Installing `vayl-mcp` puts five commands on your `PATH`. Two run the MCP server, | `vayl-demo` | Offline demo of reconciliation. No keys needed. | | `vayl-license` | Vendor-side: generate the signing keypair and mint customer licenses. | -Output below was captured from vayl 0.9.1. +Output below was captured from vayl 0.10.0. ## vayl-mcp @@ -37,7 +37,7 @@ Configuration: environment variables, see https://vayl.gitbook.io/vayl-docs ``` $ vayl-mcp --version -vayl-mcp 0.9.1 +vayl-mcp 0.10.0 ``` `--help` and `--version` answer before the database is opened, so they don't create `vayl.db` in the current directory. On start, the server validates settings such as `LLM_PROVIDER` and `VAYL_LOG_FORMAT` and exits with an error naming a bad value. Logs go to stderr; stdout belongs to the MCP protocol. @@ -62,7 +62,7 @@ Configuration: environment variables, see https://vayl.gitbook.io/vayl-docs ``` $ vayl-server --version -vayl-server 0.9.1 +vayl-server 0.10.0 ``` On start it prints the endpoint (the uvicorn lines go to stderr): diff --git a/docs/documentation/reference/http-endpoints.md b/docs/documentation/reference/http-endpoints.md index 126ca93..2d02680 100644 --- a/docs/documentation/reference/http-endpoints.md +++ b/docs/documentation/reference/http-endpoints.md @@ -58,7 +58,7 @@ Authorization beyond that (capability and scope) happens inside the tool and com ## Call a tool with curl -This session was run against a real `vayl-server` 0.9.1 on a temporary database, with the key redacted. +This session was run against a real `vayl-server` 0.10.0 on a temporary database, with the key redacted. {% stepper %} {% step %} @@ -108,7 +108,7 @@ x-request-id: docs-demo-1 Transfer-Encoding: chunked event: message -data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"logging":{},"prompts":{"listChanged":true},"resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"vayl","version":"0.9.1"},"instructions":"Vayl is persistent, reconciling memory. When the user asks you to remember, note or keep track of something, or states a fact or a change to one (a decision, a preference, a dose, an account setting, 'we switched to X'), call `remember` with one plain sentence: Vayl retires the old value instead of keeping both, which a notes file cannot do. Before answering from what you were told earlier (a project's stack, a customer's plan, a patient's current medication), call `recall`, with include_history=true for 'what was it before?'. Use `forget` when something is no longer true and has no replacement. If recall doesn't know, say so instead of guessing."}} +data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"logging":{},"prompts":{"listChanged":true},"resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"vayl","version":"0.10.0"},"instructions":"Vayl is persistent, reconciling memory. When the user asks you to remember, note or keep track of something, or states a fact or a change to one (a decision, a preference, a dose, an account setting, 'we switched to X'), call `remember` with one plain sentence: Vayl retires the old value instead of keeping both, which a notes file cannot do. Before answering from what you were told earlier (a project's stack, a customer's plan, a patient's current medication), call `recall`, with include_history=true for 'what was it before?'. Use `forget` when something is no longer true and has no replacement. If recall doesn't know, say so instead of guessing."}} ``` `serverInfo.version` is Vayl's version, the same as `vayl-server --version` prints. `instructions` is the guidance Vayl gives the client about when to call its tools; Claude Code shows it to the model. Because the server is stateless, you can call `tools/list` or `tools/call` without initializing first. diff --git a/openapi/base.yaml b/openapi/base.yaml index 45a0b27..49dcbf7 100644 --- a/openapi/base.yaml +++ b/openapi/base.yaml @@ -1,7 +1,7 @@ openapi: 3.1.0 info: title: Vayl HTTP API - version: 0.9.1 + version: 0.10.0 summary: The routes served by vayl-server, the authenticated team transport for Vayl. description: | `vayl-server` serves Vayl's 32 tools two ways, with the same authentication and checks: @@ -108,7 +108,7 @@ paths: '200': description: | A server-sent-events stream. Its `data:` line is the JSON-RPC response. Captured from - vayl-server 0.9.1. + vayl-server 0.10.0. headers: X-Request-ID: $ref: '#/components/headers/RequestId' @@ -123,7 +123,7 @@ paths: data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18", "capabilities":{"logging":{},"prompts":{"listChanged":true}, "resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}}, - "serverInfo":{"name":"vayl","version":"0.9.1"}, + "serverInfo":{"name":"vayl","version":"0.10.0"}, "instructions":"Vayl is persistent, reconciling memory. When the user asks you to remember, note or keep track of something, or states a fact or a change to one (a decision, a preference, a dose, an account setting, 'we switched to X'), call `remember` with one plain sentence: Vayl retires the old value instead of keeping both, which a notes file cannot do. Before answering from what you were told earlier (a project's stack, a customer's plan, a patient's current medication), call `recall`, with include_history=true for 'what was it before?'. Use `forget` when something is no longer true and has no replacement. If recall doesn't know, say so instead of guessing."}} toolsCall: summary: tools/call (license_status) diff --git a/openapi/vayl-server.yaml b/openapi/vayl-server.yaml index eb6a4c7..c0982f2 100644 --- a/openapi/vayl-server.yaml +++ b/openapi/vayl-server.yaml @@ -3,7 +3,7 @@ openapi: 3.1.0 info: title: Vayl HTTP API - version: 0.9.1 + version: 0.10.0 summary: The routes served by vayl-server, the authenticated team transport for Vayl. description: "`vayl-server` serves Vayl's 32 tools two ways, with the same authentication and checks:\n\n- **REST:**\ \ `POST /v1/tools/{name}` with the tool's arguments as a JSON object, returning\n `{\"result\": \"...\"}`.\ @@ -132,7 +132,7 @@ paths: '200': description: 'A server-sent-events stream. Its `data:` line is the JSON-RPC response. Captured from - vayl-server 0.9.1. + vayl-server 0.10.0. ' headers: @@ -146,7 +146,7 @@ paths: initialize: summary: initialize value: 'data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18", "capabilities":{"logging":{},"prompts":{"listChanged":true}, - "resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}}, "serverInfo":{"name":"vayl","version":"0.9.1"}, + "resources":{"subscribe":false,"listChanged":true},"tools":{"listChanged":true}}, "serverInfo":{"name":"vayl","version":"0.10.0"}, "instructions":"Vayl is persistent, reconciling memory. When the user asks you to remember, note or keep track of something, or states a fact or a change to one (a decision, a preference, a dose, an account setting, ''we switched to X''), call `remember` with one plain sentence: diff --git a/pyproject.toml b/pyproject.toml index 213a11b..74409af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "vayl-mcp" -version = "0.9.1" +version = "0.10.0" description = "The reconciling memory layer for AI agents, over MCP: when a fact changes, the old value is retired and kept in history." readme = "README.md" requires-python = ">=3.11" diff --git a/server.json b/server.json index 5fd911d..f9a5179 100644 --- a/server.json +++ b/server.json @@ -8,12 +8,12 @@ "source": "github" }, "websiteUrl": "https://vayl.gitbook.io/vayl-docs", - "version": "0.9.1", + "version": "0.10.0", "packages": [ { "registryType": "pypi", "identifier": "vayl-mcp", - "version": "0.9.1", + "version": "0.10.0", "transport": { "type": "stdio" }, diff --git a/src/vayl/__init__.py b/src/vayl/__init__.py index 86eca67..dff6123 100644 --- a/src/vayl/__init__.py +++ b/src/vayl/__init__.py @@ -1,5 +1,5 @@ """Vayl — reconciling memory for AI agents.""" from vayl.client import Vayl, VaylError -__version__ = "0.9.1" +__version__ = "0.10.0" __all__ = ["Vayl", "VaylError"]