Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
1439d62
test: resolve typescript strictness complaints in unit tests
diegosouzapw Apr 18, 2026
0988a3e
Update Claude Code obfuscation to version 2.1.114 (#1403)
nikolay-popov-ideogram Apr 18, 2026
b0abd77
fix(claude-code): scope obfuscation to cli clients and fix tests
diegosouzapw Apr 18, 2026
aa79445
docs(workflows): enforce PR merge instead of manual close
diegosouzapw Apr 18, 2026
f0a75df
docs(changelog): update 3.6.9 notes with missing PR 1403 and fixes
diegosouzapw Apr 18, 2026
6a61438
docs(workflows): update generate-release to use full changelog for PR…
diegosouzapw Apr 18, 2026
224abbd
fix(tsc): silence baseUrl deprecation warnings for TS 5.5+
diegosouzapw Apr 18, 2026
99fe898
fix(chatcore): apply proactive compression before provider translatio…
oyi77 Apr 19, 2026
0370145
docs(changelog): add PR 1406
diegosouzapw Apr 19, 2026
bc12d99
Makes text visible in dark-mode (#1409)
tim-massey Apr 19, 2026
fd0731e
docs(changelog): add PR 1409
diegosouzapw Apr 19, 2026
e40753d
chore: save local work
diegosouzapw Apr 19, 2026
eb0b1a8
chore(release): sync version references to 3.6.9
diegosouzapw Apr 19, 2026
a6e6845
fix(codex): prevent proactive token refresh consumption and strip bac…
diegosouzapw Apr 19, 2026
fbaf378
ci: shard long-running suites and relax timeouts
diegosouzapw Apr 19, 2026
cb95daf
ci: allow manual CI dispatch for release branches
diegosouzapw Apr 19, 2026
33119e7
feat(skills): provider-aware marketplace UX, scored AUTO injection, a…
oyi77 Apr 19, 2026
a03840c
fix/400 for GeminiCLI(add "ref" in GEMINI_UNSUPPORTED_SCHEMA_KEYS)
dail45 Apr 19, 2026
fc87ff1
feat(cc-compatible): align request shape with Claude CLI
rdself Apr 19, 2026
2a9e274
fix(cc-compatible): add Claude CLI system skeleton for OpenAI input
rdself Apr 19, 2026
b93ea57
preserve reasoning when translating chat to responses (#1414)
rdself Apr 19, 2026
5fd9bd8
fix(skills): optimize AUTO scoring and include Responses input contex…
oyi77 Apr 19, 2026
d8acd07
chore: sync with release/v3.6.9
diegosouzapw Apr 19, 2026
1d344e6
Merge pull request #1416 from dail45/fix/gemini-cli-ref-400-error-for…
diegosouzapw Apr 19, 2026
13a838f
chore: fix TS errors and update review-prs workflow
diegosouzapw Apr 19, 2026
7aa7abe
chore: sync with release/v3.6.9
diegosouzapw Apr 19, 2026
7443585
Merge pull request #1419 from rdself/coder/cc-compatible-claude-cli-p…
diegosouzapw Apr 19, 2026
a2db4a9
fix(api): stop sending unsupported Gemini and Codex parameters
diegosouzapw Apr 19, 2026
6947e71
fix(core): stabilization fixes for token refresh, usage translation, …
diegosouzapw Apr 19, 2026
a7fb057
fix(auth): reload fresh token state and unify expiry persistence
diegosouzapw Apr 19, 2026
b91a8e2
fix: resolve SSRF environment static evaluation bug (#1427)
diegosouzapw Apr 19, 2026
3c369e4
test: resolve remaining strict type errors in test files
diegosouzapw Apr 19, 2026
40b7974
test: fix provider service assertion for anthropic-compatible header
diegosouzapw Apr 19, 2026
6057318
fix(codex): respect openaiStoreEnabled setting during native passthro…
diegosouzapw Apr 19, 2026
9eb679e
fix(codex): fix token refresh unrecoverable detection for expired tokens
diegosouzapw Apr 19, 2026
32b14b0
fix(ci): restore release v3.6.9 build and flaky tests
diegosouzapw Apr 19, 2026
5719a4e
fix(cc-compatible): trim default OpenAI system skeleton (#1433)
rdself Apr 19, 2026
db48b1b
fix: prevent masked API keys from being written to CLI tool configs (…
diegosouzapw Apr 19, 2026
f0094f2
feat: mark Qwen provider as deprecated and add deprecation warning to…
diegosouzapw Apr 19, 2026
420e7a2
docs(changelog): comprehensive v3.6.9 update with all 59 commits sinc…
diegosouzapw Apr 19, 2026
437881b
test(ci): align qwen guide settings assertions
diegosouzapw Apr 19, 2026
d2d013f
fix(security): resolve CodeQL alert 163 for incomplete URL sanitizati…
diegosouzapw Apr 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 19 additions & 11 deletions .agents/workflows/generate-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,21 +159,29 @@ git push origin release/v2.x.y

### 9. Open PR to main

### 9. Open PR to main

// turbo

```bash
gh pr create \
--repo diegosouzapw/OmniRoute \
--base main \
--head release/v2.x.y \
--title "chore(release): v2.x.y — summary" \
--body "## 🚀 Release v2.x.y
VERSION=$(node -p "require('./package.json').version")

### Changes
...
# Extract the exact changelog entry for this version from the root CHANGELOG.md
awk "/^## \\[$VERSION\\]/{flag=1; print; next} /^---/{if(flag) {flag=0; exit}} flag" CHANGELOG.md > /tmp/changelog_body.txt

### Tests
- X/X tests pass
# Append test status and next steps
echo "" >> /tmp/changelog_body.txt
echo "### Tests" >> /tmp/changelog_body.txt
echo "- All tests pass" >> /tmp/changelog_body.txt
echo "" >> /tmp/changelog_body.txt
echo "### ⚠️ After merging: run Phase 2 steps to tag, publish, and deploy." >> /tmp/changelog_body.txt

### ⚠️ After merging: run Phase 2 steps to tag, publish, and deploy."
gh pr create \
--repo diegosouzapw/OmniRoute \
--base main \
--head release/v$VERSION \
--title "Release v$VERSION" \
--body-file /tmp/changelog_body.txt
```

### 10. 🛑 STOP — Notify User & Await PR Confirmation
Expand Down
75 changes: 38 additions & 37 deletions .agents/workflows/resolve-issues.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: Fetch all open GitHub issues, analyze bugs, resolve what's possible

## Overview

This workflow fetches all open issues from the project's GitHub repository, classifies them, analyzes bugs, resolves what can be fixed, and triages issues with insufficient information. **All fixes are committed on the current release branch** (`release/vX.Y.Z`). It does NOT merge or release automatically — the release branch is later merged via PR to main.
This workflow fetches all open issues from the project's GitHub repository, classifies them, analyzes bugs, proposes a resolution plan, waits for user validation, and ONLY THEN implements the fixes, commits, and closes the issues on the current release branch (`release/vX.Y.Z`). It does NOT merge or release automatically — the release branch is later merged via PR to main.

> **BRANCH RULE**: All work MUST happen on the current `release/vX.Y.Z` branch. Never create separate `fix/` branches. If no release branch exists yet, create one first using `/generate-release` Phase 1 steps 1–5.

Expand Down Expand Up @@ -96,26 +96,25 @@ Verify the issue contains enough to act on:

For each bug, classify into one of 5 actions:

| Disposition | When to Apply | Action |
| ---------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| **✅ CLOSE — Already Fixed** | Owner responded with fix + no user follow-up, OR community confirmed fix | Close with comment citing which version fixed it |
| **✅ CLOSE — Duplicate** | Bot flagged >85% similarity + user provides no new info | Close referencing the original issue |
| **✅ CLOSE — Stale** | We requested logs/info > 7 days ago with no reply | Close thanking the user, invite to reopen if needed |
| **📝 RESPOND — Needs Info** | Issue is real but missing critical reproduction details | Comment asking for specifics per `/issue-triage` |
| **📝 RESPOND — User Config** | Error is caused by unsupported env (Node version, wrong model path, missing API enablement) | Comment explaining the user-side fix |
| **🔧 FIX — Code Change** | Root cause is confirmed in the codebase | Research, implement, test, commit on release branch |
| Disposition | When to Apply | Action |
| ---------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
| **✅ CLOSE — Already Fixed** | Owner responded with fix + no user follow-up, OR community confirmed fix | Close with comment citing which version fixed it |
| **✅ CLOSE — Duplicate** | Bot flagged >85% similarity + user provides no new info | Close referencing the original issue |
| **✅ CLOSE — Stale** | We requested logs/info > 7 days ago with no reply | Close thanking the user, invite to reopen if needed |
| **📝 RESPOND — Needs Info** | Issue is real but missing critical reproduction details | Comment asking for specifics per `/issue-triage` |
| **📝 RESPOND — User Config** | Error is caused by unsupported env (Node version, wrong model path, missing API enablement) | Comment explaining the user-side fix |
| **🔧 FIX — Code Change** | Root cause is confirmed in the codebase | Research, propose solution in report, wait for approval |

#### 5d. For "FIX — Code Change" Issues

Before coding, perform deep source analysis:
Before coding, perform deep source analysis to formulate a plan:

1. **Search the codebase** — `grep_search` for error strings, relevant function names, affected files
2. **Search the web** — for upstream API changes, SDK updates, or breaking changes that explain the bug
3. **Read the full source file** — don't rely on grep snippets; understand the surrounding logic
4. **Verify the root cause** — confirm the bug is reproducible based on the code, not just a user misconfiguration
5. **Implement the fix** — follow existing code patterns and conventions
6. **Run tests** — `node --import tsx/esm --test tests/unit/*.test.mjs` (must pass 100%)
7. **Commit** — `fix: <description> (#<issue_number>)`
5. **Formulate a proposed solution** — detail the exact files and lines you will change and how you will solve it.
6. **DO NOT modify the codebase yet** — wait for user approval on your report first.

#### 5e. For "RESPOND" Issues

Expand All @@ -130,33 +129,35 @@ Post a substantive comment that:

### 6. Generate Report & Wait for Validation

Present a summary report to the user. For any bugs that have been fixed, you MUST explicitly explain to the user the version that the fix was applied to (e.g., `release/vX.Y.Z`) and point out that it will be included in the next release.
Present a summary report to the user detailing your proposed actions. For any bugs that need fixing, explicitly explain your proposed solution (files to change and logic) and point out that it will be implemented on the release branch (`release/vX.Y.Z`) after approval.

| Issue | Title | Status | Action / Version |
| ----- | ----- | ------------- | ---------------------------------- |
| #N | Title | ✅ Closed | Already fixed / duplicate |
| #N | Title | 🔧 Fixed | Code fix applied in release/vX.Y.Z |
| #N | Title | 📝 Responded | Guidance comment posted |
| #N | Title | ❓ Needs Info | Triage comment posted |
| #N | Title | ⏭️ Skipped | Feature request / not a bug |
| Issue | Title | Status | Proposed Action / Version |
| ----- | ----- | ------------- | ----------------------------------------- |
| #N | Title | ✅ Close | Already fixed / duplicate (explain why) |
| #N | Title | 🔧 Propose | Explanation of the code fix to be applied |
| #N | Title | 📝 Respond | Guidance comment to be posted |
| #N | Title | ❓ Needs Info | Triage comment to be posted |
| #N | Title | ⏭️ Skip | Feature request / not a bug |

> **⚠️ IMPORTANT**: Do NOT commit, push, or close issues at this step.
> Wait for the user to review the changes and respond with **OK** before proceeding.
> **⚠️ IMPORTANT**: Do NOT implement code changes, commit, push, or close issues at this step.
> Wait for the user to review the proposed fixes and respond with **OK** before proceeding.

- If the user says **OK** or approves → Proceed to step 7
- If the user requests changes → Apply the requested adjustments first, then present the report again
- If the user rejects → Revert the changes and stop

### 7. Commit, Push & Close Issues (only after user approval)

After the user validates and gives the OK to commit:

1. **Update CHANGELOG.md** with all new bug fix entries.
2. **Commit** each fix individually on the release branch with message format: `fix: <description> (#<issue_number>)`.
3. **Push** the release branch: `git push origin release/vX.Y.Z`.
4. **Close resolved issues immediately**. For each issue that was marked as Fixed, run:
`gh issue close <NUMBER> --repo <owner>/<repo> --comment "Fixed in release/vX.Y.Z. The fix will be included in the next release."`
5. Likewise, close `Duplicate` or `Needs Info` issues as needed with relevant comments.
6. If the project runs automatic releases or needs a PR, proceed to run `/generate-release` workflow Phase 1 steps 7–10 (tests → commit → push → open PR to main → wait for user).
- If the user requests changes → Adjust the proposed solution and present the report again
- If the user rejects → Revert any accidental changes and stop

### 7. Implement Fixes, Run Tests & Commit (only after user approval)

After the user validates and gives the OK:

1. **Implement the fixes** — modify the codebase according to the approved plan.
2. **Run tests** — `npm run test:all` (or the specific test file) to ensure 100% pass.
3. **Update CHANGELOG.md** with all new bug fix entries.
4. **Commit** each fix individually on the release branch with message format: `fix: <description> (#<issue_number>)`.
5. **Push** the release branch: `git push origin release/vX.Y.Z`.
6. **Close resolved issues immediately**. For each issue that was marked as Fixed, run:
`gh issue close <NUMBER> --repo <owner>/<repo> --comment "Thank you for reporting! This issue has been fixed and will be included in the next release (vX.Y.Z)."`
7. Likewise, close `Duplicate` issues referencing the original, close `Needs Info` if stale, and post the required comments.
8. If the project runs automatic releases or needs a PR, proceed to run `/generate-release` workflow Phase 1 steps 7–10 (tests → commit → push → open PR to main → wait for user).

If NO fixes were committed, skip closing and source control steps and just conclude the workflow.
36 changes: 16 additions & 20 deletions .agents/workflows/review-prs.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,9 @@ Perform a **global impact assessment** to verify whether the PR changes are comp

### 7. Pre-Merge Fixes & CI Green-Lighting (if approved)

> **⚠️ Fixes should be pushed back to the PR branch before merging.** We want the PR itself to be green and fully valid before it integrates.
> **⚠️ Fixes and Conflict Resolutions MUST be pushed back to the PR branch before merging.** We want the PR itself to be green and fully valid before it integrates.

- **Sync latest fixes:** Merge the current `release` branch into the PR branch so the PR inherits any latest CI or integration test fixes (preventing false-positive failures).
- **Sync latest fixes & Resolve Conflicts:** Merge the current `release` branch into the PR branch. If there are merge conflicts, you MUST resolve them inside the author's PR branch. NEVER resolve conflicts by closing their PR and doing the work in a separate branch, as this steals credit from the original author.
- **Implement improvements:** Apply the required fixes identified in the analysis directly on the PR branch (e.g., adding missing API routes, fixing SSRF, applying comments from other agents).
- **Pushing changes to PR branches:**

Expand Down Expand Up @@ -193,34 +193,30 @@ Perform a **global impact assessment** to verify whether the PR changes are comp

### 8. Merge into Release Branch

### 8. Merge into Release Branch (NEVER SILENTLY CLOSE!)
### 8. Merge into Release Branch (NEVER CLOSE!)

> **⚠️ CRITICAL**: NEVER use `gh pr close` for a PR whose idea or code was accepted, even if you had to rewrite it manually. Closing a PR in a contributor's face after taking their idea is unacceptable.
> ALWAYS ensure the contributor gets proper credit.
> **⚠️ CRITICAL**: NEVER use `gh pr close` for a PR whose idea or code was accepted. Closing a PR in a contributor's face after taking their idea—or closing it just because it had conflicts—is unacceptable.
> You MUST ALWAYS resolve conflicts and apply fixes on the author's PR branch, and then merge the PR using GitHub so the contributor gets the official "Merged" badge and proper credit on their profile.

If the PR is green and can be merged directly:
Even if the PR had severe conflicts or required significant architectural adjustments, you MUST:

- Merge the PR into the release branch using the GitHub CLI.
```bash
# Merge the PR (base is already set to release/vX.Y.Z from step 3.5)
gh pr merge <NUMBER> --repo <owner>/<repo> --squash --body "Integrated into release/vX.Y.Z"
```

If the PR had severe conflicts or you had to implement the feature manually on our branch instead:
1. Resolve any conflicts and apply the fixes directly to their PR branch (as detailed in step 7).
2. Once the PR branch is green, conflict-free, and correct, merge it into the release branch using the GitHub CLI.

- You MUST still post a comment giving them full credit before closing it.
- Explain that their idea was great, that it was integrated in a specific commit (mention the commit hash), and that due to merge conflicts or architectural adjustments, it was integrated manually.
- Add their name as a Co-authored-by in the manual commit if possible.
```bash
# Merge the PR (base is already set to release/vX.Y.Z from step 3.5)
gh pr merge <NUMBER> --repo <owner>/<repo> --squash --body "Integrated into release/vX.Y.Z"
```

In ALL accepted cases (merged directly or implemented manually):
In ALL cases:

- Post a **thank-you comment** on the PR via the GitHub API.
- Post a **thank-you comment** on the PR via the GitHub API before or immediately after merging.
- The message should:
- Thank the author by name/username for their contribution.
- Explain what was adjusted or improved (if anything).
- Explain what was adjusted or improved (if we pushed fixes to their branch).
- Note it will be included in the upcoming release.
- Be friendly, professional, and encouraging.
- Example: _"Thanks @author for this great contribution! 🎉 The [feature/fix] has been integrated into the release/vX.Y.Z branch and will be part of the next release. We appreciate your effort!"_
- Example: _"Thanks @author for this great contribution! 🎉 We've added a few small adjustments to your branch to align with our latest architecture, and it's now officially merged into the release/vX.Y.Z branch. It will be part of the next release. We appreciate your effort!"_

### 9. Sync Local Release Branch

Expand Down
41 changes: 27 additions & 14 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
pull_request:
branches: [main]
types: [opened, synchronize, reopened, ready_for_review]
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand Down Expand Up @@ -111,7 +112,7 @@ jobs:
uses: trufflesecurity/trufflehog@main
with:
path: ./
base: ${{ github.event.repository.default_branch }}
base: ${{ github.event.before || github.event.repository.default_branch }}
head: HEAD
extra_args: --only-verified

Expand Down Expand Up @@ -168,10 +169,14 @@ jobs:
- run: npm run check:pack-artifact

test-unit:
name: Unit Tests
name: Unit Tests (${{ matrix.shard }}/2)
runs-on: ubuntu-latest
timeout-minutes: 15
needs: build
strategy:
fail-fast: false
matrix:
shard: [1, 2]
env:
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
API_KEY_SECRET: ci-test-api-key-secret-long
Expand All @@ -184,13 +189,17 @@ jobs:
cache: npm
- run: npm ci
- run: npm run check:node-runtime
- run: npm run test:unit
- run: node --import tsx/esm --test --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/unit/*.test.ts

node-24-compat:
name: Node 24 Compatibility
name: Node 24 Compatibility (${{ matrix.shard }}/2)
runs-on: ubuntu-latest
timeout-minutes: 15
needs: build
strategy:
fail-fast: false
matrix:
shard: [1, 2]
env:
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
API_KEY_SECRET: ci-test-api-key-secret-long
Expand All @@ -204,12 +213,12 @@ jobs:
- run: npm ci
- run: npm run check:node-runtime
- run: npm run build
- run: npm run test:unit
- run: node --import tsx/esm --test --test-concurrency=1 --test-shard=${{ matrix.shard }}/2 tests/unit/*.test.ts

test-coverage:
name: Coverage
runs-on: ubuntu-latest
timeout-minutes: 15
timeout-minutes: 30
needs: build
env:
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
Expand Down Expand Up @@ -359,14 +368,14 @@ jobs:
}

test-e2e:
name: E2E Tests (${{ matrix.shard }}/4)
name: E2E Tests (${{ matrix.shard }}/6)
runs-on: ubuntu-latest
timeout-minutes: 15
timeout-minutes: 20
needs: build
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
shard: [1, 2, 3, 4, 5, 6]
env:
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
API_KEY_SECRET: ci-test-api-key-secret-long
Expand All @@ -381,18 +390,22 @@ jobs:
- run: npm run check:node-runtime
- run: npx playwright install --with-deps chromium
- run: npm run build
- run: npx playwright test tests/e2e/*.spec.ts --shard=${{ matrix.shard }}/4
- run: npx playwright test tests/e2e/*.spec.ts --shard=${{ matrix.shard }}/6

test-integration:
name: Integration Tests
name: Integration Tests (${{ matrix.shard }}/2)
runs-on: ubuntu-latest
timeout-minutes: 10
timeout-minutes: 15
needs: build
strategy:
fail-fast: false
matrix:
shard: [1, 2]
env:
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
API_KEY_SECRET: ci-test-api-key-secret-long
INITIAL_PASSWORD: ci-test-password-for-integration
DATA_DIR: /tmp/omniroute-ci
DATA_DIR: /tmp/omniroute-ci-${{ matrix.shard }}
DISABLE_SQLITE_AUTO_BACKUP: "true"
steps:
- uses: actions/checkout@v6
Expand All @@ -402,7 +415,7 @@ jobs:
cache: npm
- run: npm ci
- run: npm run check:node-runtime
- run: npm run test:integration
- run: node --import tsx/esm --test --test-shard=${{ matrix.shard }}/2 tests/integration/*.test.ts

test-security:
name: Security Tests
Expand Down
Loading
Loading