diff --git a/package-lock.json b/package-lock.json index d7982a5..b9cf470 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3070,7 +3070,7 @@ }, "packages/autogen": { "name": "@codespar/autogen", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3079,12 +3079,12 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/camel": { "name": "@codespar/camel", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3093,12 +3093,12 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/claude": { "name": "@codespar/claude", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3107,15 +3107,15 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/cli": { "name": "@codespar/cli", - "version": "0.5.5", + "version": "0.6.0", "license": "MIT", "dependencies": { - "@codespar/sdk": "^0.10.1", + "@codespar/sdk": "^0.11.0", "commander": "^13.0.0" }, "bin": { @@ -3131,7 +3131,7 @@ }, "packages/core": { "name": "@codespar/sdk", - "version": "0.10.11", + "version": "0.11.0", "license": "MIT", "dependencies": { "@codespar/types": "^0.10.1", @@ -3148,7 +3148,7 @@ }, "packages/crewai": { "name": "@codespar/crewai", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3157,12 +3157,12 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/google-genai": { "name": "@codespar/google-genai", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3171,12 +3171,12 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/hermes": { "name": "@codespar/hermes", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3185,12 +3185,12 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/langchain": { "name": "@codespar/langchain", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3200,13 +3200,13 @@ "zod": "^3.23.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0", + "@codespar/sdk": "^0.10.0 || ^0.11.0", "zod": ">=3.0.0" } }, "packages/letta": { "name": "@codespar/letta", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3215,12 +3215,12 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/llama-index": { "name": "@codespar/llama-index", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3229,7 +3229,7 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/managed-agents-adapter": { @@ -3251,7 +3251,7 @@ }, "packages/mastra": { "name": "@codespar/mastra", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3260,15 +3260,15 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/mcp": { "name": "@codespar/mcp", - "version": "0.5.2", + "version": "0.5.3", "license": "MIT", "dependencies": { - "@codespar/sdk": "^0.10.1", + "@codespar/sdk": "^0.10.1 || ^0.11.0", "@modelcontextprotocol/sdk": "^1.29.0" }, "bin": { @@ -3281,12 +3281,12 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.1" + "@codespar/sdk": "^0.10.1 || ^0.11.0" } }, "packages/openai": { "name": "@codespar/openai", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3295,12 +3295,12 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" } }, "packages/types": { "name": "@codespar/types", - "version": "0.10.14", + "version": "0.10.15", "license": "MIT", "devDependencies": { "@types/node": "^25.6.0", @@ -3313,7 +3313,7 @@ }, "packages/vercel": { "name": "@codespar/vercel", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "devDependencies": { "@codespar/sdk": "*", @@ -3322,7 +3322,7 @@ "vitest": "^3.1.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0", + "@codespar/sdk": "^0.10.0 || ^0.11.0", "ai": ">=3.0.0" } } diff --git a/packages/autogen/package.json b/packages/autogen/package.json index 0cd6c86..0916f6a 100644 --- a/packages/autogen/package.json +++ b/packages/autogen/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/autogen", - "version": "0.4.0", + "version": "0.4.1", "description": "Microsoft AutoGen adapter for CodeSpar — convert session tools to AutoGen function tool format", "type": "module", "main": "./dist/index.js", @@ -38,7 +38,7 @@ "directory": "packages/autogen" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/camel/package.json b/packages/camel/package.json index bc7a096..bbdb088 100644 --- a/packages/camel/package.json +++ b/packages/camel/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/camel", - "version": "0.4.0", + "version": "0.4.1", "description": "CAMEL-AI adapter for CodeSpar — convert session tools to CAMEL function format", "type": "module", "main": "./dist/index.js", @@ -38,7 +38,7 @@ "directory": "packages/camel" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/claude/package.json b/packages/claude/package.json index 691110c..421ff1a 100644 --- a/packages/claude/package.json +++ b/packages/claude/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/claude", - "version": "0.4.0", + "version": "0.4.1", "description": "Claude Agent SDK adapter for CodeSpar — convert MCP tools to Claude tool format", "type": "module", "main": "./dist/index.js", @@ -37,7 +37,7 @@ "directory": "packages/claude" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index b6e2aaf..56ecb9f 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,20 @@ # @codespar/cli — changelog +## 0.6.0 — 2026-07-05 + +Offline V3 mandate verification from the terminal. See +[codespar/codespar-core#114](https://github.com/codespar/codespar-core/pull/114). + +### Added + +- `codespar mandate verify ` — decodes a V3 presentation token, + reconstructs the canonical signing string, and verifies the agent and + issuer Ed25519 signatures. Pure-offline mode with `--agent-pubkey` / + `--issuer-pubkey` (no network, no API key); default network mode + resolves public keys via the agent's did:web document + (id.codespar.dev), still with no API key. `--json` supported; the + exit code tracks signature verification. + ## 0.4.0 — 2026-05-04 Sugar commands wrapping the SDK 0.9.0 typed meta-tool methods. None diff --git a/packages/cli/package.json b/packages/cli/package.json index 9d9d9aa..dd20732 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/cli", - "version": "0.5.5", + "version": "0.6.0", "description": "CodeSpar CLI. The agentic OS for money movement in Latin America, from your terminal: authenticate, browse servers, mint mandates, execute tools, manage sessions, stream logs.", "type": "module", "bin": { @@ -46,7 +46,7 @@ "node": ">=20" }, "dependencies": { - "@codespar/sdk": "^0.10.1", + "@codespar/sdk": "^0.11.0", "commander": "^13.0.0" }, "devDependencies": { diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index be93478..9e97ea1 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,14 @@ # @codespar/sdk — CHANGELOG +## 0.11.0 + +Offline V3 mandate verification lands on the SDK as a dedicated subpath. See [codespar/codespar-core#114](https://github.com/codespar/codespar-core/pull/114). + +### Added + +- `@codespar/sdk/mandate` subpath export: `verifyMandateToken(token, { agentPublicKey, issuerPublicKey })`, `decodeMandateToken`, `reconstructSigningString`, and `verifyEd25519`. Verifies the V3 dual Ed25519 signatures (agent + platform issuer) with `node:crypto` only — no API call, no credential. Lives on a subpath (like `./testing`) so `node:crypto` stays out of the edge-safe main graph; the zero-runtime-dependency rule holds (`node:crypto` is a builtin). +- The canonical signing string is byte-locked against the platform's frozen fixture in tests; the same fixture guards the CLI and Python implementations, so any codec drift fails all of them loudly. + ## 0.10.0 The hosted test-mode SDK surface lands across `@codespar/sdk`, `@codespar/types`, and the `codespar` Python package. See [codespar/codespar-core#54](https://github.com/codespar/codespar-core/pull/54). diff --git a/packages/core/package.json b/packages/core/package.json index cd13438..b06ac54 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/sdk", - "version": "0.10.11", + "version": "0.11.0", "description": "Commerce SDK for AI agents — sessions, managed auth, Complete Loop orchestration for Latin American APIs", "type": "module", "main": "./dist/index.js", diff --git a/packages/crewai/package.json b/packages/crewai/package.json index 68c1674..4b32897 100644 --- a/packages/crewai/package.json +++ b/packages/crewai/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/crewai", - "version": "0.4.0", + "version": "0.4.1", "description": "CrewAI adapter for CodeSpar — convert session tools to CrewAI tool format", "type": "module", "main": "./dist/index.js", @@ -37,7 +37,7 @@ "directory": "packages/crewai" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/google-genai/package.json b/packages/google-genai/package.json index 726d463..e4c50bd 100644 --- a/packages/google-genai/package.json +++ b/packages/google-genai/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/google-genai", - "version": "0.4.0", + "version": "0.4.1", "description": "Google Gemini/GenAI adapter for CodeSpar — convert session tools to Gemini FunctionDeclaration format", "type": "module", "main": "./dist/index.js", @@ -38,7 +38,7 @@ "directory": "packages/google-genai" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/hermes/package.json b/packages/hermes/package.json index b8a4f05..c8c896e 100644 --- a/packages/hermes/package.json +++ b/packages/hermes/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/hermes", - "version": "0.4.0", + "version": "0.4.1", "description": "Hermes Agent adapter for CodeSpar — convert session tools to Hermes MCP/plugin tool format", "type": "module", "main": "./dist/index.js", @@ -39,7 +39,7 @@ "directory": "packages/hermes" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/langchain/package.json b/packages/langchain/package.json index ae095f0..c517aaf 100644 --- a/packages/langchain/package.json +++ b/packages/langchain/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/langchain", - "version": "0.4.0", + "version": "0.4.1", "description": "LangChain.js adapter for CodeSpar — convert session tools to LangChain StructuredTool format", "type": "module", "main": "./dist/index.js", @@ -37,7 +37,7 @@ "directory": "packages/langchain" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0", + "@codespar/sdk": "^0.10.0 || ^0.11.0", "zod": ">=3.0.0" }, "devDependencies": { diff --git a/packages/letta/package.json b/packages/letta/package.json index 19d92ee..136c2ab 100644 --- a/packages/letta/package.json +++ b/packages/letta/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/letta", - "version": "0.4.0", + "version": "0.4.1", "description": "Letta (MemGPT) adapter for CodeSpar — convert session tools to Letta tool format", "type": "module", "main": "./dist/index.js", @@ -37,7 +37,7 @@ "directory": "packages/letta" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/llama-index/package.json b/packages/llama-index/package.json index 3f27379..748b5ae 100644 --- a/packages/llama-index/package.json +++ b/packages/llama-index/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/llama-index", - "version": "0.4.0", + "version": "0.4.1", "description": "LlamaIndex.TS adapter for CodeSpar — convert session tools to LlamaIndex FunctionTool format", "type": "module", "main": "./dist/index.js", @@ -38,7 +38,7 @@ "directory": "packages/llama-index" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/mastra/package.json b/packages/mastra/package.json index e392db5..d4a2d7e 100644 --- a/packages/mastra/package.json +++ b/packages/mastra/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/mastra", - "version": "0.4.0", + "version": "0.4.1", "description": "Mastra adapter for CodeSpar — convert session tools to Mastra tool format", "type": "module", "main": "./dist/index.js", @@ -37,7 +37,7 @@ "directory": "packages/mastra" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 65ec6cc..403e82a 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/mcp", - "version": "0.5.2", + "version": "0.5.3", "description": "MCP server for CodeSpar — give Claude, Codex, Cursor & ChatGPT a commerce agent (pay, charge, wallet, mandates, Pomelo card) over MCP", "type": "module", "main": "./dist/index.js", @@ -40,11 +40,11 @@ "directory": "packages/mcp" }, "dependencies": { - "@codespar/sdk": "^0.10.1", + "@codespar/sdk": "^0.10.1 || ^0.11.0", "@modelcontextprotocol/sdk": "^1.29.0" }, "peerDependencies": { - "@codespar/sdk": "^0.10.1" + "@codespar/sdk": "^0.10.1 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/openai/package.json b/packages/openai/package.json index a830181..d3acaaa 100644 --- a/packages/openai/package.json +++ b/packages/openai/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/openai", - "version": "0.4.0", + "version": "0.4.1", "description": "OpenAI Agents SDK adapter for CodeSpar — convert MCP tools to OpenAI function calling format", "type": "module", "main": "./dist/index.js", @@ -36,7 +36,7 @@ "directory": "packages/openai" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0" + "@codespar/sdk": "^0.10.0 || ^0.11.0" }, "devDependencies": { "@codespar/sdk": "*", diff --git a/packages/python/CHANGELOG.md b/packages/python/CHANGELOG.md index 47230eb..6aac563 100644 --- a/packages/python/CHANGELOG.md +++ b/packages/python/CHANGELOG.md @@ -1,5 +1,22 @@ # codespar (Python SDK) — CHANGELOG +## 0.11.0 + +Offline V3 mandate verification lands as the `codespar.mandate` +submodule, in parity with `@codespar/sdk/mandate` and the CLI. See +[codespar/codespar-core#114](https://github.com/codespar/codespar-core/pull/114). + +### Added + +- `codespar.mandate`: `decode_mandate_token` and + `reconstruct_signing_string` are pure stdlib; `verify_ed25519` and + `verify_mandate_token` verify the V3 dual Ed25519 signatures and + lazily import `cryptography`, raising a clear install hint when it is + absent. New optional extra: `pip install codespar[verify]`. The base + package keeps its single runtime dependency (httpx). +- The canonical signing string is byte-locked against the platform's + frozen fixture, shared with the TS SDK and CLI tests. + ## 0.10.0 The hosted test-mode SDK surface lands across the `codespar` Python diff --git a/packages/python/pyproject.toml b/packages/python/pyproject.toml index b33f64e..7f97b5d 100644 --- a/packages/python/pyproject.toml +++ b/packages/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "codespar" -version = "0.10.2" +version = "0.11.0" description = "Python SDK for CodeSpar — commerce infrastructure for AI agents in Latin America." readme = "README.md" requires-python = ">=3.10" diff --git a/packages/vercel/package.json b/packages/vercel/package.json index 6365496..a5307af 100644 --- a/packages/vercel/package.json +++ b/packages/vercel/package.json @@ -1,6 +1,6 @@ { "name": "@codespar/vercel", - "version": "0.4.0", + "version": "0.4.1", "description": "Vercel AI SDK adapter for CodeSpar — convert MCP tools to Vercel AI tool format", "type": "module", "main": "./dist/index.js", @@ -36,7 +36,7 @@ "directory": "packages/vercel" }, "peerDependencies": { - "@codespar/sdk": "^0.10.0", + "@codespar/sdk": "^0.10.0 || ^0.11.0", "ai": ">=3.0.0" }, "devDependencies": {