Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
306e8ff
fix(lint): resolve multiple linting issues in internal packages
KooshaPari Feb 16, 2026
da93b19
feat: comprehensive test coverage and fixes for CLIProxyAPI Plus
KooshaPari Feb 19, 2026
bc8a7af
refactor(config): registry-based premade provider injection
KooshaPari Feb 19, 2026
47fc0c5
Merge packaging work from myfork/main and resolve conflicts
KooshaPari Feb 19, 2026
072d823
refactor(config): switch to data-driven codegen for dedicated provide…
KooshaPari Feb 20, 2026
5939514
chore: rename repository to cliproxyapi-plusplus
KooshaPari Feb 20, 2026
6d1226e
refactor(pkg): update internal config imports to pkg/llmproxy/config
KooshaPari Feb 20, 2026
19a6bba
refactor: update imports to point to pkg/llmproxy
KooshaPari Feb 20, 2026
69d3be4
refactor: global import updates to pkg/llmproxy
KooshaPari Feb 20, 2026
47ba29c
Merge upstream main and finalize cliproxyapi++ rebranding and CI/CD
KooshaPari Feb 20, 2026
0c209e4
chore: rebranding to cliproxyapi++ (throwback to notepad++)
KooshaPari Feb 20, 2026
0bdf80c
docs: deep-dive optimization of READMEs and final branding updates
KooshaPari Feb 20, 2026
b0bf6a4
docs: add ++ feature reference, docsets, and pages workflow
KooshaPari Feb 20, 2026
cb0657a
ci: enable github pages setup in vitepress workflow
KooshaPari Feb 20, 2026
cf7e24d
tmp
KooshaPari Feb 20, 2026
23176bb
tmp
KooshaPari Feb 21, 2026
0ac77bc
docs: expand provider-first docs and README
KooshaPari Feb 21, 2026
c2ae1da
Merge remote-tracking branch 'origin/main' into align-origin-main
KooshaPari Feb 21, 2026
f1d65e9
wip: snapshot local CLIProxyAPIPlus working state
KooshaPari Feb 22, 2026
33cbcd6
chore: snapshot current local working state
KooshaPari Feb 22, 2026
20220bd
merge: align with origin/main
KooshaPari Feb 22, 2026
2ee789f
fix(responses): prevent JSON tree corruption from literal control cha…
garetneda-gif Feb 21, 2026
3f57f19
chore: checkpoint current worktree before 7-lane bug wave
KooshaPari Feb 22, 2026
80b4653
fix: resolve build/test failures and improve CI
KooshaPari Feb 22, 2026
7a7bd54
chore: preserve current cliproxy work state
KooshaPari Feb 22, 2026
9d756a0
chore: remove generated fragmented docs and logs
KooshaPari Feb 22, 2026
1267f0f
feat: preserve ongoing cliproxy work
KooshaPari Feb 22, 2026
b73ba7b
chore: checkpoint tui edits before branch consolidation
KooshaPari Feb 22, 2026
08839c9
chore: checkpoint pending tracked edits before main consolidation
KooshaPari Feb 22, 2026
b7ec72e
docs: assign issue lanes for first 30 CPB items
KooshaPari Feb 22, 2026
74fb556
merge: consolidate myfork/main into local main (ours on conflicts)
KooshaPari Feb 22, 2026
1d3e36f
chore: align cli proxy main and stage issue wave lanes
KooshaPari Feb 22, 2026
a618a4a
test(api): relax claude-cli smoke assertion for /v1/models
KooshaPari Feb 22, 2026
5efb3c9
feat(tui): add fa locale support and parity tests
KooshaPari Feb 22, 2026
c55e16b
fix(codex): support variant fallback for reasoning effort
KooshaPari Feb 22, 2026
fe0c64b
fix(codex): map responses variant to reasoning effort
KooshaPari Feb 22, 2026
846a803
fix(codex): parse variant as codex thinking fallback
KooshaPari Feb 22, 2026
44ba22a
wave(lane1): codex variant fallback + lane report
KooshaPari Feb 22, 2026
310c57a
wave(lane2): copilot/kiro alias fixes + lane report
KooshaPari Feb 22, 2026
bbc7e74
wave(lane3): nullable schema + mgmt/fs fixes + lane report
KooshaPari Feb 22, 2026
219fd8e
wave(lane4): kiro token fallback + amp model route + lane report
KooshaPari Feb 22, 2026
f952115
wave(lane5): dedupe kiro tool_calls + lane report
KooshaPari Feb 22, 2026
9bc0d6a
wave(lane6): kiro refresh hardening + docs + lane report
KooshaPari Feb 22, 2026
e7c20e4
fix(kiro): accept Bash cmd alias to prevent amp truncation loops (#210)
KooshaPari Feb 22, 2026
1c95963
wave(lane7): config/routing/auth diagnostics + lane report
KooshaPari Feb 22, 2026
35df9d6
merge: workstream-cpb-1
KooshaPari Feb 22, 2026
94c086e
fix(registry): normalize github-copilot context windows to 128k (#241)
KooshaPari Feb 22, 2026
823999b
merge: workstream-cpb-2
KooshaPari Feb 22, 2026
191422b
merge: workstream-cpb-3
KooshaPari Feb 22, 2026
c22acef
merge: workstream-cpb-4
KooshaPari Feb 22, 2026
04e8c6a
merge: workstream-cpb-5
KooshaPari Feb 22, 2026
fbb47a0
merge: workstream-cpb-6
KooshaPari Feb 22, 2026
bc90fce
merge: workstream-cpb-7
KooshaPari Feb 22, 2026
06618f8
feat(tui): add Farsi locale parity with Mandarin/English
KooshaPari Feb 22, 2026
bc0369d
feat(tui): add Farsi locale parity with Mandarin/English
KooshaPari Feb 22, 2026
d1d83ce
feat(tui): add Farsi locale parity with Mandarin/English
KooshaPari Feb 22, 2026
322381d
feat(amp): add kiro-compatible amp auth flow and tests (#232)
KooshaPari Feb 22, 2026
9b25e95
fix(gemini): sanitize nullable tool schema types in responses transla…
KooshaPari Feb 22, 2026
24cef45
Merge branch 'workstream-cpb-1'
KooshaPari Feb 22, 2026
e019ee0
Merge branch 'workstream-cpb-2'
KooshaPari Feb 22, 2026
9dacfcd
Merge branch 'workstream-cpb-3'
KooshaPari Feb 22, 2026
7485103
Merge branch 'workstream-cpb-4'
KooshaPari Feb 22, 2026
e1aa44d
Merge branch 'workstream-cpb-5'
KooshaPari Feb 22, 2026
e3c7419
Merge branch 'workstream-cpb-6'
KooshaPari Feb 22, 2026
9559f14
Merge branch 'workstream-cpb-7'
KooshaPari Feb 22, 2026
306bc80
test(auth/kiro): avoid roundTripper helper redeclaration
KooshaPari Feb 22, 2026
fad61c3
docs(planning): add GH-35 integration summary
KooshaPari Feb 22, 2026
068d40f
docs: stage CPB-0001..0035 lane manifest and lane-1 execution
KooshaPari Feb 22, 2026
3c91336
chore(main): checkpoint current local state before integration merge
KooshaPari Feb 22, 2026
3bedab3
merge: wave-gh35-integration
KooshaPari Feb 22, 2026
648e849
fix(docs): resolve dead link to agents page in planning docs
KooshaPari Feb 22, 2026
cddcbeb
docs(validation): audit open upstream items against implemented state
KooshaPari Feb 22, 2026
027d6a8
wave(v2-l1): cpb-0036..0045 triage + docs quick wins
KooshaPari Feb 22, 2026
95c55d3
wave(v2-l2): cpb-0046..0055 triage + openai compat endpoint
KooshaPari Feb 22, 2026
59297e9
wave(v2-l3): cpb-0056..0065 triage + kiro/config hardening
KooshaPari Feb 22, 2026
d58eb82
wave(v2-l4): cpb-0066..0075 triage + docs/test quick wins
KooshaPari Feb 22, 2026
14d95b6
wave(v2-l5): cpb-0076..0085 triage + compact/translator coverage
KooshaPari Feb 22, 2026
6d4a8a8
wave(v2-l6): cpb-0086..0095 triage + log/codex hardening
KooshaPari Feb 22, 2026
276134d
wave(v2-l7): cpb-0096..0105 triage + docs/runtime checks
KooshaPari Feb 22, 2026
624bbe4
chore(main): checkpoint wave-v2 working state before branch merges
KooshaPari Feb 22, 2026
2e5c7ae
merge: workstream-cpbv2-1
KooshaPari Feb 22, 2026
e656f53
merge: workstream-cpbv2-2
KooshaPari Feb 22, 2026
9d79248
merge: workstream-cpbv2-3
KooshaPari Feb 22, 2026
85686ca
fix(merge): remove conflict markers from cpbv2-3 docs
KooshaPari Feb 22, 2026
13cdb7c
merge: workstream-cpbv2-4
KooshaPari Feb 22, 2026
253b06c
merge: workstream-cpbv2-5
KooshaPari Feb 22, 2026
46d7f33
merge: workstream-cpbv2-6
KooshaPari Feb 22, 2026
394a4a8
merge: workstream-cpbv2-7
KooshaPari Feb 22, 2026
4892d8d
docs(troubleshooting): normalize API key placeholder examples
KooshaPari Feb 22, 2026
f227350
chore(main): checkpoint pre-wave-v3 state
KooshaPari Feb 22, 2026
9ef2290
wave(v3-l3): cpb-0126..0135 triage + thinking diagnostics
KooshaPari Feb 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
33 changes: 15 additions & 18 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,41 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
about: Report a bug in cliproxyapi++
title: '[BUG] '
labels: 'bug'
assignees: ''

---

**Is it a request payload issue?**
[ ] Yes, this is a request payload issue. I am using a client/cURL to send a request payload, but I received an unexpected error.
[ ] No, it's another issue.
[ ] Yes, this is a request payload issue. I am using a client/cURL to send a request payload, but I received an unexpected error.
[ ] No, it's another issue.

**If it's a request payload issue, you MUST know**
Our team doesn't have any GODs or ORACLEs or MIND READERs. Please make sure to attach the request log or curl payload.
To help us diagnose the problem, please provide as much detail as possible, including request logs or `curl` payloads.

**Describe the bug**
A clear and concise description of what the bug is.

**CLI Type**
What type of CLI account do you use? (gemini-cli, gemini, codex, claude code or openai-compatibility)

**Model Name**
What model are you using? (example: gemini-2.5-pro, claude-sonnet-4-20250514, gpt-5, etc.)
**cliproxyapi++ Configuration**
What provider and model are you using? (e.g. Kiro, Claude, Gemini)

**LLM Client**
What LLM Client are you using? (example: roo-code, cline, claude code, etc.)
What LLM Client are you using? (e.g. Roo Code, Claude Code, Cursor, etc.)

**Environment Information**
- **cliproxyapi++ Version**: (e.g., v6.0.0-++.1)
- **Deployment Method**: (e.g., Docker, Binary)
- **OS**: (e.g. macOS, Ubuntu 22.04)

**Request Information**
The best way is to paste the cURL command of the HTTP request here.
Alternatively, you can set `request-log: true` in the `config.yaml` file and then upload the detailed log file.
Please provide the `curl` command or the logs from `config.yaml` with `request-log: true`.

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**OS Type**
- OS: [e.g. macOS]
- Version [e.g. 15.6.0]

**Additional context**
Add any other context about the problem here.
42 changes: 42 additions & 0 deletions .github/policies/approved-external-endpoints.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Approved external endpoint hosts.
# Matching is exact host or subdomain of an entry.

accounts.google.com
aiplatform.googleapis.com
ampcode.com
api.anthropic.com
api.api.githubcopilot.com
api.deepseek.com
api.fireworks.ai
api.github.com
api.groq.com
api.kilo.ai
api.kimi.com
api.minimax.chat
api.minimax.io
api.mistral.ai
api.novita.ai
api.openai.com
api.roocode.com
api.siliconflow.cn
api.together.xyz
apis.iflow.cn
auth.openai.com
chat.qwen.ai
chatgpt.com
claude.ai
cloudcode-pa.googleapis.com
cloudresourcemanager.googleapis.com
generativelanguage.googleapis.com
github.com
golang.org
iflow.cn
integrate.api.nvidia.com
oauth2.googleapis.com
openrouter.ai
platform.iflow.cn
platform.openai.com
portal.qwen.ai
raw.githubusercontent.com
serviceusage.googleapis.com
www.googleapis.com
13 changes: 13 additions & 0 deletions .github/release-required-checks.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# workflow_file|job_name
pr-test-build.yml|go-ci
pr-test-build.yml|quality-ci
pr-test-build.yml|quality-staged-check
pr-test-build.yml|fmt-check
pr-test-build.yml|golangci-lint
pr-test-build.yml|route-lifecycle
pr-test-build.yml|test-smoke
pr-test-build.yml|pre-release-config-compat-smoke
pr-test-build.yml|distributed-critical-paths
pr-test-build.yml|changelog-scope-classifier
pr-test-build.yml|docs-build
pr-test-build.yml|ci-summary
14 changes: 14 additions & 0 deletions .github/required-checks.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# workflow_file|job_name
pr-test-build.yml|go-ci
pr-test-build.yml|quality-ci
pr-test-build.yml|quality-staged-check
pr-test-build.yml|fmt-check
pr-test-build.yml|golangci-lint
pr-test-build.yml|route-lifecycle
pr-test-build.yml|test-smoke
pr-test-build.yml|pre-release-config-compat-smoke
pr-test-build.yml|distributed-critical-paths
pr-test-build.yml|changelog-scope-classifier
pr-test-build.yml|docs-build
pr-test-build.yml|ci-summary
pr-path-guard.yml|ensure-no-translator-changes
67 changes: 67 additions & 0 deletions .github/scripts/check-approved-external-endpoints.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/usr/bin/env bash
set -euo pipefail

policy_file=".github/policies/approved-external-endpoints.txt"
if [[ ! -f "${policy_file}" ]]; then
echo "Missing policy file: ${policy_file}"
exit 1
fi

mapfile -t approved_hosts < <(grep -Ev '^\s*#|^\s*$' "${policy_file}" | tr '[:upper:]' '[:lower:]')
if [[ "${#approved_hosts[@]}" -eq 0 ]]; then
echo "No approved hosts in policy file"
exit 1
fi

matches_policy() {
local host="$1"
local approved
for approved in "${approved_hosts[@]}"; do
if [[ "${host}" == "${approved}" || "${host}" == *."${approved}" ]]; then
return 0
fi
done
return 1
}

mapfile -t discovered_hosts < <(
rg -No --hidden \
--glob '!docs/**' \
--glob '!**/*_test.go' \
--glob '!**/node_modules/**' \
--glob '!**/*.png' \
--glob '!**/*.jpg' \
--glob '!**/*.jpeg' \
--glob '!**/*.gif' \
--glob '!**/*.svg' \
--glob '!**/*.webp' \
'https?://[^"\047 )\]]+' \
cmd pkg sdk scripts .github/workflows config.example.yaml README.md README_CN.md 2>/dev/null \
| awk -F'://' '{print $2}' \
| cut -d/ -f1 \
| cut -d: -f1 \
| tr '[:upper:]' '[:lower:]' \
| sort -u
)

unknown=()
for host in "${discovered_hosts[@]}"; do
[[ -z "${host}" ]] && continue
[[ "${host}" == *"%"* ]] && continue
[[ "${host}" == *"{"* ]] && continue
[[ "${host}" == "localhost" || "${host}" == "127.0.0.1" || "${host}" == "0.0.0.0" ]] && continue
[[ "${host}" == "example.com" || "${host}" == "www.example.com" ]] && continue
[[ "${host}" == "proxy.com" || "${host}" == "proxy.local" ]] && continue
[[ "${host}" == "api.example.com" ]] && continue
if ! matches_policy "${host}"; then
unknown+=("${host}")
fi
done

if [[ "${#unknown[@]}" -ne 0 ]]; then
echo "Found external hosts not in ${policy_file}:"
printf ' - %s\n' "${unknown[@]}"
exit 1
fi

echo "external endpoint policy check passed"
19 changes: 19 additions & 0 deletions .github/scripts/check-distributed-critical-paths.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -euo pipefail

echo "[distributed-critical-paths] validating filesystem-sensitive paths"
go test -count=1 -run '^(TestMultiSourceSecret_FileHandling|TestMultiSourceSecret_CacheBehavior|TestMultiSourceSecret_Concurrency|TestAmpModule_OnConfigUpdated_CacheInvalidation)$' ./pkg/llmproxy/api/modules/amp

echo "[distributed-critical-paths] validating ops endpoint route registration"
go test -count=1 -run '^TestRegisterManagementRoutes$' ./pkg/llmproxy/api/modules/amp

echo "[distributed-critical-paths] validating compute/cache-sensitive paths"
go test -count=1 -run '^(TestEnsureCacheControl|TestCacheControlOrder|TestCountOpenAIChatTokens|TestCountClaudeChatTokens)$' ./pkg/llmproxy/runtime/executor

echo "[distributed-critical-paths] validating queue telemetry to provider metrics path"
go test -count=1 -run '^TestBuildProviderMetricsFromSnapshot_FailoverAndQueueTelemetry$' ./pkg/llmproxy/usage

echo "[distributed-critical-paths] validating signature cache primitives"
go test -count=1 -run '^(TestCacheSignature_BasicStorageAndRetrieval|TestCacheSignature_ExpirationLogic)$' ./pkg/llmproxy/cache

echo "[distributed-critical-paths] all targeted checks passed"
53 changes: 53 additions & 0 deletions .github/scripts/check-docs-secret-samples.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
set -euo pipefail

patterns=(
'sk-[A-Za-z0-9]{20,}'
'ghp_[A-Za-z0-9]{20,}'
'AKIA[0-9A-Z]{16}'
'AIza[0-9A-Za-z_-]{20,}'
'-----BEGIN (RSA|OPENSSH|EC|DSA|PRIVATE) KEY-----'
)

allowed_context='\$\{|\{\{.*\}\}|<[^>]+>|\[REDACTED|your[_-]?|example|dummy|sample|placeholder'

tmp_hits="$(mktemp)"
trap 'rm -f "${tmp_hits}"' EXIT

for pattern in "${patterns[@]}"; do
rg -n --pcre2 --hidden \
--glob '!docs/node_modules/**' \
--glob '!**/*.min.*' \
--glob '!**/*.svg' \
--glob '!**/*.png' \
--glob '!**/*.jpg' \
--glob '!**/*.jpeg' \
--glob '!**/*.gif' \
--glob '!**/*.webp' \
--glob '!**/*.pdf' \
--glob '!**/*.lock' \
--glob '!**/*.snap' \
-e "${pattern}" docs README.md README_CN.md examples >> "${tmp_hits}" || true
done

if [[ ! -s "${tmp_hits}" ]]; then
echo "docs secret sample check passed"
exit 0
fi

violations=0
while IFS= read -r hit; do
line_content="${hit#*:*:}"
if printf '%s' "${line_content}" | rg -qi "${allowed_context}"; then
continue
fi
echo "Potential secret detected: ${hit}"
violations=1
done < "${tmp_hits}"

if [[ "${violations}" -ne 0 ]]; then
echo "Secret sample check failed. Replace with placeholders or redact."
exit 1
fi

echo "docs secret sample check passed"
31 changes: 31 additions & 0 deletions .github/scripts/check-workflow-token-permissions.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env bash
set -euo pipefail

violations=0
allowed_write_keys='security-events|id-token|pages'

for workflow in .github/workflows/*.yml .github/workflows/*.yaml; do
[[ -f "${workflow}" ]] || continue

if rg -n '^permissions:\s*write-all\s*$' "${workflow}" >/dev/null; then
echo "${workflow}: uses permissions: write-all"
violations=1
fi

if rg -n '^on:' "${workflow}" >/dev/null && rg -n 'pull_request:' "${workflow}" >/dev/null; then
while IFS= read -r line; do
key="$(printf '%s' "${line}" | sed -E 's/^[0-9]+:\s*([a-zA-Z-]+):\s*write\s*$/\1/')"
if [[ "${key}" != "${line}" ]] && ! printf '%s' "${key}" | grep -Eq "^(${allowed_write_keys})$"; then
echo "${workflow}: pull_request workflow grants '${key}: write'"
violations=1
fi
done < <(rg -n '^\s*[a-zA-Z-]+:\s*write\s*$' "${workflow}")
fi
done

if [[ "${violations}" -ne 0 ]]; then
echo "workflow token permission check failed"
exit 1
fi

echo "workflow token permission check passed"
Loading