|
| 1 | +--- |
| 2 | +icon: material/history |
| 3 | +hide: |
| 4 | + - toc |
| 5 | +--- |
| 6 | + |
| 7 | +# Changelog |
| 8 | + |
| 9 | +All notable changes to Nexus are documented here. This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +<div class="changelog-release" markdown> |
| 14 | + |
| 15 | +## Unreleased <span class="changelog-date">2026-05-14</span> |
| 16 | + |
| 17 | +<div class="changelog-meta" markdown> |
| 18 | +<div class="changelog-contributors"> |
| 19 | +<a href="https://github.com/sangalo20" title="Sangalo Mwenyinyo"><img src="https://github.com/sangalo20.png?size=32" alt="sangalo20"></a> |
| 20 | +<a href="https://github.com/ekizito96" title="Muyukani Ephraim Kizito"><img src="https://github.com/ekizito96.png?size=32" alt="ekizito96"></a> |
| 21 | +</div> |
| 22 | +<a class="changelog-release-link" href="https://github.com/Prescott-Data/nexus-framework/commits/main" target="_blank" rel="noopener noreferrer">View commits on GitHub →</a> |
| 23 | +</div> |
| 24 | + |
| 25 | +**Added** |
| 26 | + |
| 27 | +- **Python SDK** (`nexus-sdk-python`): full-feature-parity Python client — `get_token_by_connection_id`, `resolve_token`, `request_connection`, `check_connection`. Zero external dependencies. |
| 28 | +- **TypeScript SDK** (`@dromos/nexus-sdk`): evolved from `nexus-mcp-adapter`. MCP token resolution, in-memory caching, authenticated transport, and `resolveToken` for stateless MCP clients. Built to `dist/`, ESM imports hardened. |
| 29 | +- **Go SDK MCP integration**: `ResolveToken` endpoint for stateless MCP clients — workspace and provider-scoped token resolution with TTL caching. |
| 30 | +- **Multi-strategy credential support** across all three SDKs: handles `oauth2`, `api_key`, `basic_auth`, `aws_sigv4`, `query_param`, and `hmac_payload` strategies without caller-side branching. |
| 31 | +- **Automated release workflow**: GitHub Actions CI/CD pipeline, bumped `VERSION` to `0.2.3`. |
| 32 | +- **Agent auth proposal** (`AGENT_AUTH_PROPOSAL.md`): full design document for agent identity, OBO sessions, scoped session TTLs, and custom scope enforcement. |
| 33 | +- **SDK documentation**: comprehensive reference pages for Go, TypeScript, and Python SDKs including install, method signatures, MCP integration examples, and error handling. |
| 34 | + |
| 35 | +**Fixed** |
| 36 | + |
| 37 | +- TypeScript SDK: `Bearer` token type normalized to RFC 6750 capitalization (was `bearer`). |
| 38 | +- TypeScript SDK: package entry pointed at compiled `dist/`, not `.ts` source. |
| 39 | +- Gateway: `resolve` route wired; ESM import errors resolved in adapter. |
| 40 | +- Adapter/Gateway: token TTL hardened, stdio safety improved, error handling tightened. |
| 41 | +- MCP adapter smoke test added against live Gateway. |
| 42 | + |
| 43 | +</div> |
| 44 | + |
| 45 | +--- |
| 46 | + |
| 47 | +<div class="changelog-release" markdown> |
| 48 | + |
| 49 | +## 0.2.0 <span class="changelog-date">2026-05-05</span> |
| 50 | + |
| 51 | +<div class="changelog-meta" markdown> |
| 52 | +<div class="changelog-contributors"> |
| 53 | +<a href="https://github.com/sangalo20" title="Sangalo Mwenyinyo"><img src="https://github.com/sangalo20.png?size=32" alt="sangalo20"></a> |
| 54 | +<a href="https://github.com/Abdullahi254" title="Abdullahi Mohamud"><img src="https://github.com/Abdullahi254.png?size=32" alt="Abdullahi254"></a> |
| 55 | +</div> |
| 56 | +<a class="changelog-release-link" href="https://github.com/Prescott-Data/nexus-framework/releases/tag/v0.2.0" target="_blank" rel="noopener noreferrer">View release on GitHub →</a> |
| 57 | +</div> |
| 58 | + |
| 59 | +**Added** |
| 60 | + |
| 61 | +- **Security-as-Code CLI** (`nexus-cli`): Terraform-style `plan → confirm → apply` workflow for declarative provider management via YAML manifest. PATCH-based reconciliation (no accidental overwrites), concurrent profile fetching with bounded worker pool, field-level diff output with secret masking, fail-fast on unresolved env vars, non-zero exit on partial apply failure. |
| 62 | +- **Audit subsystem** (`audit.Service`): structured event logging to `audit_events` table with IP validation, User-Agent capture, and `audit.Logger` interface for test mocking. Events: `provider.created`, `provider.updated`, `provider.deleted`, `connection.created`, `token.retrieved`, `token.refresh_fatal`. |
| 63 | +- **`GET /audit` endpoint**: queryable audit log with `event_type`, `resource_id`, `since`, `until`, `limit`, and `offset` filters. |
| 64 | +- **Credential redaction**: `PATCH` audit payloads redact `client_secret` and `client_id` before writing to the audit log. |
| 65 | +- **Provider `category` field**: `category` added to provider profiles with migration. Gateway `MetadataResponse` patched to include `category` in the OpenAPI-generated response. |
| 66 | +- **`capture-schema` and `capture-credential` endpoints**: Gateway proxies for static credential capture flow, enabling API key and basic auth connections without OAuth redirects. |
| 67 | + |
| 68 | +**Fixed** |
| 69 | + |
| 70 | +- Gateway: manually patched `MetadataResponse` to include `category` field, avoiding `oapi-codegen` version mismatch. |
| 71 | +- Documentation: all examples standardized to `localhost:8090` — internal Azure URLs removed. |
| 72 | +- OpenAPI: `description` and `category` added to `MetadataResponse` and `ProviderProfile` schemas; gateway broker client regenerated. |
| 73 | + |
| 74 | +</div> |
| 75 | + |
| 76 | +--- |
| 77 | + |
| 78 | +<div class="changelog-release" markdown> |
| 79 | + |
| 80 | +## 0.1.5 <span class="changelog-date">2026-04-13</span> |
| 81 | + |
| 82 | +<div class="changelog-meta" markdown> |
| 83 | +<div class="changelog-contributors"> |
| 84 | +<a href="https://github.com/sangalo20" title="Sangalo Mwenyinyo"><img src="https://github.com/sangalo20.png?size=32" alt="sangalo20"></a> |
| 85 | +<a href="https://github.com/ashioyajotham" title="Victor Ashioya"><img src="https://github.com/ashioyajotham.png?size=32" alt="ashioyajotham"></a> |
| 86 | +</div> |
| 87 | +<a class="changelog-release-link" href="https://github.com/Prescott-Data/nexus-framework/releases/tag/v0.1.5" target="_blank" rel="noopener noreferrer">View release on GitHub →</a> |
| 88 | +</div> |
| 89 | + |
| 90 | +**Changed** |
| 91 | + |
| 92 | +- Bridge: replaced `goto Retry` with `for`-loop in `MaintainGRPCConnection` — cleaner control flow, no goto jumps. ([@ashioyajotham](https://github.com/ashioyajotham)) |
| 93 | +- Broker: replaced streaming `json.Encoder` with marshal-then-write pattern — eliminates partial-write race on slow connections. ([@ashioyajotham](https://github.com/ashioyajotham)) |
| 94 | +- Security documentation hardened: shared secrets, key rotation, and deployment guidance expanded. |
| 95 | + |
| 96 | +**Fixed** |
| 97 | + |
| 98 | +- Broker: handle SQL `NULL` values for non-OAuth2 provider profiles — `api_key` and `basic_auth` providers no longer cause null pointer panics in the profile store. |
| 99 | + |
| 100 | +</div> |
| 101 | + |
| 102 | +--- |
| 103 | + |
| 104 | +<div class="changelog-release" markdown> |
| 105 | + |
| 106 | +## 0.1.4 <span class="changelog-date">2026-04-01</span> |
| 107 | + |
| 108 | +<div class="changelog-meta" markdown> |
| 109 | +<div class="changelog-contributors"> |
| 110 | +<a href="https://github.com/sangalo20" title="Sangalo Mwenyinyo"><img src="https://github.com/sangalo20.png?size=32" alt="sangalo20"></a> |
| 111 | +</div> |
| 112 | +<a class="changelog-release-link" href="https://github.com/Prescott-Data/nexus-framework/releases/tag/v0.1.4" target="_blank" rel="noopener noreferrer">View release on GitHub →</a> |
| 113 | +</div> |
| 114 | + |
| 115 | +**Added** |
| 116 | + |
| 117 | +- Broker: `skip_scope_on_auth` provider parameter — bypasses strict scope validation on the authorization URL for providers that reject scope in the initial redirect (Salesforce). |
| 118 | + |
| 119 | +</div> |
| 120 | + |
| 121 | +--- |
| 122 | + |
| 123 | +<div class="changelog-release" markdown> |
| 124 | + |
| 125 | +## 0.1.3 <span class="changelog-date">2026-04-01</span> |
| 126 | + |
| 127 | +<div class="changelog-meta" markdown> |
| 128 | +<div class="changelog-contributors"> |
| 129 | +<a href="https://github.com/sangalo20" title="Sangalo Mwenyinyo"><img src="https://github.com/sangalo20.png?size=32" alt="sangalo20"></a> |
| 130 | +<a href="https://github.com/ashioyajotham" title="Victor Ashioya"><img src="https://github.com/ashioyajotham.png?size=32" alt="ashioyajotham"></a> |
| 131 | +</div> |
| 132 | +<a class="changelog-release-link" href="https://github.com/Prescott-Data/nexus-framework/releases/tag/v0.1.3" target="_blank" rel="noopener noreferrer">View release on GitHub →</a> |
| 133 | +</div> |
| 134 | + |
| 135 | +**Added** |
| 136 | + |
| 137 | +- Broker: validate `api_key` and `basic_auth` credentials before storing — rejects malformed or empty credentials at capture time rather than at retrieval. |
| 138 | + |
| 139 | +**Fixed** |
| 140 | + |
| 141 | +- Broker: enforce one token row per connection via upsert — eliminates duplicate token rows on reconnect. ([@ashioyajotham](https://github.com/ashioyajotham)) |
| 142 | +- Security: `ENCRYPTION_KEY` and `STATE_KEY` are now required at startup — Broker and Gateway fatal-exit with a clear message if either is absent. ([@ashioyajotham](https://github.com/ashioyajotham)) |
| 143 | +- Tests: `TestMain` used for binary lifecycle management; assertions refined. |
| 144 | +- Gateway: `gofmt` formatting applied to main files. |
| 145 | + |
| 146 | +</div> |
| 147 | + |
| 148 | +--- |
| 149 | + |
| 150 | +<div class="changelog-release" markdown> |
| 151 | + |
| 152 | +## 0.1.2 <span class="changelog-date">2026-04-01</span> |
| 153 | + |
| 154 | +<div class="changelog-meta" markdown> |
| 155 | +<div class="changelog-contributors"> |
| 156 | +<a href="https://github.com/sangalo20" title="Sangalo Mwenyinyo"><img src="https://github.com/sangalo20.png?size=32" alt="sangalo20"></a> |
| 157 | +</div> |
| 158 | +<a class="changelog-release-link" href="https://github.com/Prescott-Data/nexus-framework/releases/tag/v0.1.2" target="_blank" rel="noopener noreferrer">View release on GitHub →</a> |
| 159 | +</div> |
| 160 | + |
| 161 | +**Fixed** |
| 162 | + |
| 163 | +- Docker: corrected image names to `nexus-broker` and `nexus-gateway` — was using incorrect names that broke `docker pull` and Compose service references. |
| 164 | + |
| 165 | +</div> |
| 166 | + |
| 167 | +--- |
| 168 | + |
| 169 | +<div class="changelog-release" markdown> |
| 170 | + |
| 171 | +## 0.1.1 <span class="changelog-date">2026-04-01</span> |
| 172 | + |
| 173 | +<div class="changelog-meta" markdown> |
| 174 | +<div class="changelog-contributors"> |
| 175 | +<a href="https://github.com/sangalo20" title="Sangalo Mwenyinyo"><img src="https://github.com/sangalo20.png?size=32" alt="sangalo20"></a> |
| 176 | +<a href="https://github.com/Abdullahi254" title="Abdullahi Mohamud"><img src="https://github.com/Abdullahi254.png?size=32" alt="Abdullahi254"></a> |
| 177 | +</div> |
| 178 | +<a class="changelog-release-link" href="https://github.com/Prescott-Data/nexus-framework/releases/tag/v0.1.1" target="_blank" rel="noopener noreferrer">View release on GitHub →</a> |
| 179 | +</div> |
| 180 | + |
| 181 | +**Added** |
| 182 | + |
| 183 | +- Docker Hub publishing GitHub Actions workflow. |
| 184 | +- Gateway: `capture-schema` and `capture-credential` proxy endpoints for static credential flows. ([@Abdullahi254](https://github.com/Abdullahi254)) |
| 185 | +- Open-core refactor: internal packages made public to support the OSS consumption model. |
| 186 | + |
| 187 | +**Fixed** |
| 188 | + |
| 189 | +- Go module paths updated to `github.com/Prescott-Data/nexus-framework` throughout. |
| 190 | +- Broken database migration corrected. |
| 191 | + |
| 192 | +</div> |
| 193 | + |
| 194 | +--- |
| 195 | + |
| 196 | +<div class="changelog-release" markdown> |
| 197 | + |
| 198 | +## 0.1.0 <span class="changelog-date">2026-02-19</span> |
| 199 | + |
| 200 | +<div class="changelog-meta" markdown> |
| 201 | +<div class="changelog-contributors"> |
| 202 | +<a href="https://github.com/sangalo20" title="Sangalo Mwenyinyo"><img src="https://github.com/sangalo20.png?size=32" alt="sangalo20"></a> |
| 203 | +</div> |
| 204 | +<a class="changelog-release-link" href="https://github.com/Prescott-Data/nexus-framework/releases/tag/v0.1.0" target="_blank" rel="noopener noreferrer">View release on GitHub →</a> |
| 205 | +</div> |
| 206 | + |
| 207 | +Initial public release. |
| 208 | + |
| 209 | +**Added** |
| 210 | + |
| 211 | +- **Nexus Broker**: OAuth 2.0 and OIDC connection management — token storage (AES-GCM 256-bit at rest), background refresh loop, OIDC discovery with JWKS caching, nonce/id_token verification, Prometheus metrics. |
| 212 | +- **Nexus Gateway**: public-facing API for agents and backends. Versioned at `/v1`. gRPC-first communication to Broker with REST fallback. |
| 213 | +- **Nexus Bridge**: Go library for embedding in agent processes — `MaintainWebSocket` and `MaintainGRPCConnection` with automatic credential injection, token refresh, exponential backoff reconnection, and Prometheus metrics. |
| 214 | +- **Go SDK** (`nexus-sdk`): zero-dependency HTTP client for the Gateway API. |
| 215 | +- **Provider support**: Google (OIDC discovery), Azure AD (common tenant), GitHub, Salesforce, and arbitrary OAuth2 providers with manual endpoint configuration. |
| 216 | +- **Security guardrails**: IP allowlisting (`ALLOWED_CIDRS`), allowed return domain validation, API key enforcement. |
| 217 | +- **Docker Compose**: single `make up` command runs Broker, Gateway, PostgreSQL, and Redis. |
| 218 | +- **Bitbucket Pipelines**: initial CI/CD configuration. |
| 219 | + |
| 220 | +</div> |
0 commit comments