From 3002681c5f92b7c282068e5c9c09637f054b694c Mon Sep 17 00:00:00 2001 From: ivanmilevtues Date: Sat, 26 Sep 2026 21:19:08 +0200 Subject: [PATCH 1/2] fix: update CodeBoarding dependency to 0.14.5 Co-Authored-By: Claude Opus 5.5 --- README.md | 4 ++-- action.yml | 2 +- scripts/action/supported-providers.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index dc391e3..6a15a86 100644 --- a/README.md +++ b/README.md @@ -320,7 +320,7 @@ With the default `github.token`, the repository or organization must allow GitHu | `force_full` | sync | `false` | Ignore the committed baseline for this run. | | `warmstart_retention_days` | review | `1` | Days to keep the reusable analysis. Only the next run reads it. | -The `/codeboarding` command, comment heading, Mermaid direction (`LR`), hosted webview URL, rolling sync branch, commit message, and CodeBoarding 0.14.4 version are intentionally fixed rather than exposed as configuration. +The `/codeboarding` command, comment heading, Mermaid direction (`LR`), hosted webview URL, rolling sync branch, commit message, and CodeBoarding 0.14.5 version are intentionally fixed rather than exposed as configuration. Review mode needs no sync workflow or committed `.codeboarding` directory. If no usable merge-base analysis exists, it runs full analysis there directly, then @@ -379,7 +379,7 @@ Run the local analysis pipeline: ```bash export OPENROUTER_API_KEY=sk-or-... -python -m pip install codeboarding==0.14.4 +python -m pip install codeboarding==0.14.5 tests/run_local.sh --repo /path/to/repo --base main --head feature ``` diff --git a/action.yml b/action.yml index 5e32aa3..c209717 100644 --- a/action.yml +++ b/action.yml @@ -359,7 +359,7 @@ runs: if: steps.guard.outputs.skip != 'true' shell: bash run: | - python -m pip install --disable-pip-version-check 'codeboarding==0.14.4' + python -m pip install --disable-pip-version-check 'codeboarding==0.14.5' # Fail here, with the reason, rather than mid-analysis with a traceback: # pinning a release does not pin what its dependencies resolve to. Run # the console script, not `python -c`, which would put the analyzed diff --git a/scripts/action/supported-providers.json b/scripts/action/supported-providers.json index 4ac1b44..cd2acc7 100644 --- a/scripts/action/supported-providers.json +++ b/scripts/action/supported-providers.json @@ -18,7 +18,7 @@ "a selection env (AWS_DEFAULT_REGION, OLLAMA_API_KEY) therefore cannot select a provider", "on its own, which is why ollama and litellm need their base URL and not just a key." ], - "engine": "0.14.4", + "engine": "0.14.5", "hosted_provider": "openrouter", "providers": { "openrouter": { From d899c84ac6e3b9480bd833489035400752ebf4a9 Mon Sep 17 00:00:00 2001 From: ivanmilevtues Date: Fri, 2 Oct 2026 14:00:25 +0200 Subject: [PATCH 2/2] fix: align Requesty credentials with engine 0.14.5 Expose Requesty's key and optional endpoint in the Action provider contract. Require the key even when an endpoint override is supplied. Amp-Thread-ID: https://ampcode.com/threads/T-01a0fc5b-5916-779e-8d08-921462639fe4 Co-authored-by: Amp --- README.md | 1 + action.yml | 13 ++++++++++++- scripts/action/supported-providers.json | 10 ++++++++++ tests/test_llm_contract.py | 14 ++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a15a86..922b666 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,7 @@ without knowing any precedence rules. | `openai` | OpenAI | `openai_api_key`, `openai_base_url` | `openai_api_key` or `openai_base_url` | | `openrouter` | OpenRouter | `openrouter_api_key` | `openrouter_api_key` | | `orcarouter` | OrcaRouter | `orcarouter_api_key` | `orcarouter_api_key` | +| `requesty` | Requesty | `requesty_api_key`, `requesty_base_url` | `requesty_api_key` | | `vercel` | Vercel AI Gateway | `vercel_api_key`, `vercel_base_url` | `vercel_api_key` or `vercel_base_url` | Each provider has exactly one accepted spelling, and its inputs are named after it, so diff --git a/action.yml b/action.yml index c209717..ab7f483 100644 --- a/action.yml +++ b/action.yml @@ -10,7 +10,7 @@ inputs: required: false default: 'review' llm: - description: 'Required. Where analysis credentials come from: hosted, license, or a provider name (anthropic, aws_bedrock, cerebras, deepseek, glm, google, kimi, litellm, ollama, openai, openrouter, orcarouter, vercel).' + description: 'Required. Where analysis credentials come from: hosted, license, or a provider name (anthropic, aws_bedrock, cerebras, deepseek, glm, google, kimi, litellm, ollama, openai, openrouter, orcarouter, requesty, vercel).' required: true license_key: description: 'CodeBoarding license key. Required by llm: license; optional alongside a provider key.' @@ -104,6 +104,15 @@ inputs: description: 'OrcaRouter API key, used when llm is orcarouter. Sets ORCAROUTER_API_KEY.' required: false default: '' + # Requesty - selected by llm: requesty + requesty_api_key: + description: 'Requesty API key, used when llm is requesty. Sets REQUESTY_API_KEY.' + required: false + default: '' + requesty_base_url: + description: 'Optional Requesty endpoint, used when llm is requesty. Sets REQUESTY_BASE_URL.' + required: false + default: '' # Vercel AI Gateway - selected by llm: vercel vercel_api_key: description: 'Vercel AI Gateway API key, used when llm is vercel. Sets VERCEL_API_KEY.' @@ -278,6 +287,8 @@ runs: CB_IN_OPENAI_BASE_URL: ${{ inputs.openai_base_url }} CB_IN_OPENROUTER_API_KEY: ${{ inputs.openrouter_api_key }} CB_IN_ORCAROUTER_API_KEY: ${{ inputs.orcarouter_api_key }} + CB_IN_REQUESTY_API_KEY: ${{ inputs.requesty_api_key }} + CB_IN_REQUESTY_BASE_URL: ${{ inputs.requesty_base_url }} CB_IN_VERCEL_API_KEY: ${{ inputs.vercel_api_key }} CB_IN_VERCEL_BASE_URL: ${{ inputs.vercel_base_url }} run: "$GITHUB_ACTION_PATH/scripts/action/verify-credentials.sh" diff --git a/scripts/action/supported-providers.json b/scripts/action/supported-providers.json index cd2acc7..e50dad6 100644 --- a/scripts/action/supported-providers.json +++ b/scripts/action/supported-providers.json @@ -39,6 +39,16 @@ "orcarouter_api_key": "ORCAROUTER_API_KEY" } }, + "requesty": { + "label": "Requesty", + "selection_envs": [ + "REQUESTY_API_KEY" + ], + "inputs": { + "requesty_api_key": "REQUESTY_API_KEY", + "requesty_base_url": "REQUESTY_BASE_URL" + } + }, "anthropic": { "label": "Anthropic", "selection_envs": [ diff --git a/tests/test_llm_contract.py b/tests/test_llm_contract.py index 71d5e9a..b96f148 100644 --- a/tests/test_llm_contract.py +++ b/tests/test_llm_contract.py @@ -105,6 +105,20 @@ def test_endpoint_only_providers_resolve_without_a_key(self) -> None: plan = self.resolve(CB_IN_LLM=name, **{f"CB_IN_{name.upper()}_BASE_URL": "http://host:1234"}) self.assertEqual(plan["env"][endpoint], "http://host:1234") + def test_requesty_endpoint_override_still_requires_its_key(self) -> None: + inputs = {"CB_IN_LLM": "requesty", "CB_IN_REQUESTY_BASE_URL": "https://router.eu.requesty.ai/v1"} + error = self.refuse(**inputs) + self.assertEqual(error.code, "missing_provider_key") + self.assertIn("requesty_api_key", error.message) + + plan = self.resolve(**inputs, CB_IN_REQUESTY_API_KEY="test-requesty") + self.assertEqual(plan["tier"], "byok") + self.assertEqual(plan["provider"], "requesty") + self.assertEqual( + plan["env"], + {"REQUESTY_API_KEY": "test-requesty", "REQUESTY_BASE_URL": "https://router.eu.requesty.ai/v1"}, + ) + # -- refused shapes ---------------------------------------------------- def test_an_undeclared_workflow_is_refused_rather_than_defaulted(self) -> None: