From 66300087799922526741ab1707b7f21ac092f147 Mon Sep 17 00:00:00 2001 From: Mat Milbury Date: Tue, 14 Apr 2026 09:51:39 +0000 Subject: [PATCH 1/4] fix: strip trailing /mcp from ETERNA_MCP_URL before using as base URL Users often copy the full MCP protocol endpoint URL from their Claude config (e.g. https://mcp.eterna.exchange/mcp) and set it as ETERNA_MCP_URL. REST endpoints like /migrate/link-legacy-key live at the base URL, so appending them to a URL already ending in /mcp produces /mcp/migrate/link-legacy-key which returns 404. Co-Authored-By: Claude Sonnet 4.6 --- src/auth/config.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/auth/config.ts b/src/auth/config.ts index ec5dba0..5db65e3 100644 --- a/src/auth/config.ts +++ b/src/auth/config.ts @@ -27,12 +27,12 @@ export function getAuthIssuer(): string { } export function getMcpEndpoint(): string { - if (process.env.ETERNA_MCP_URL) return process.env.ETERNA_MCP_URL; - // Derive from ETERNA_ENDPOINT so staging users don't need a separate var. - // https://ai-api.eterna.exchange → https://mcp.eterna.exchange - // https://ai-api.staging.eterna.exchange → https://mcp.staging.eterna.exchange - const endpoint = process.env.ETERNA_ENDPOINT ?? DEFAULT_ENDPOINT; - return endpoint.replace("ai-api.", "mcp."); + const raw = process.env.ETERNA_MCP_URL + ?? (process.env.ETERNA_ENDPOINT ?? DEFAULT_ENDPOINT).replace("ai-api.", "mcp."); + // Strip trailing /mcp if present — users sometimes copy the full MCP protocol + // URL from their Claude config (e.g. https://mcp.eterna.exchange/mcp), but + // REST endpoints like /migrate/link-legacy-key live at the base URL. + return raw.replace(/\/mcp$/, ""); } function ensureConfigDir(): void { From f8ffd2d13ef165f59e0b9787afc9c5317d89e885 Mon Sep 17 00:00:00 2001 From: Mat Milbury Date: Tue, 14 Apr 2026 10:01:06 +0000 Subject: [PATCH 2/4] fix: remove unused DEFAULT_MCP_ENDPOINT constant Co-Authored-By: Claude Sonnet 4.6 --- src/auth/config.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/auth/config.ts b/src/auth/config.ts index 5db65e3..69e0c2f 100644 --- a/src/auth/config.ts +++ b/src/auth/config.ts @@ -4,7 +4,6 @@ import * as os from "node:os"; const DEFAULT_ENDPOINT = "https://ai-api.eterna.exchange"; const AUTH_ISSUER = "https://ai-auth.eterna.exchange"; -const DEFAULT_MCP_ENDPOINT = "https://mcp.eterna.exchange"; export interface EternaConfig { endpoint: string; From 29c2b944122fa34e01aa3c5f58b23a7ce85a3dda Mon Sep 17 00:00:00 2001 From: Mat Milbury Date: Tue, 14 Apr 2026 10:33:12 +0000 Subject: [PATCH 3/4] ci: add Release Please workflow for automated releases Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/release-please.yml | 16 ++++++++++++++++ .github/workflows/release.yml | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/release-please.yml diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 0000000..3fa26a7 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,16 @@ +name: Release Please + +on: + push: + branches: [main] + +jobs: + release-please: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - uses: googleapis/release-please-action@v4 + with: + release-type: node diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 65c7a26..66fa58c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ jobs: publish: runs-on: ubuntu-latest permissions: - contents: read + contents: write id-token: write steps: - uses: actions/checkout@v4 From a364fe46d855a4effde5d8ae401b17e4c4e1b663 Mon Sep 17 00:00:00 2001 From: Mat Milbury Date: Tue, 14 Apr 2026 10:40:37 +0000 Subject: [PATCH 4/4] chore: ignore docs/superpowers/ spec files Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6f3dd62..d6a9833 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules/ dist/ *.tgz .env +docs/superpowers/