Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
b143014
fix(plan-01): bug fixes
hmziqagent Nov 5, 2026
8aef2a3
feat(plan-02): request fidelity
hmziqagent Nov 5, 2026
f5d5e05
refactor(plan-03): engine and crate split
hmziqagent Nov 5, 2026
9945972
fix(plan-01): bug fixes
hmziqagent Nov 6, 2026
c5df177
feat(plan-02): request fidelity
hmziqagent Nov 6, 2026
e954a3b
refactor(plan-03): engine and crate split
hmziqagent Nov 6, 2026
e485de5
feat(plan-04): routing and failover
hmziqagent Nov 6, 2026
af0ca6f
feat(plan-05): one error policy table with x-should-retry per status
hmziqagent Nov 6, 2026
bf016cc
feat(plan-05): key-id prefixed client tokens, one verification
hmziqagent Nov 6, 2026
dd2d8ca
feat(plan-05): per-key policy, concurrency and preflight config
hmziqagent Nov 6, 2026
6a9b9b9
feat(plan-05): one admission step in the engine
hmziqagent Nov 7, 2026
9e1c699
docs(plan-05): document key policies, caps and preflight in the examp…
hmziqagent Nov 7, 2026
838ed89
feat(plan-05): models.dev pricing sync and an explicit unpriced state
hmziqagent Nov 7, 2026
60095ff
docs(plan-05): mark admission and budgets complete
hmziqagent Nov 7, 2026
5ab7270
feat(plan-05): admission and budgets
hmziqagent Nov 7, 2026
d8f87a5
feat(plan-06): retire the dedup window
hmziqagent Nov 7, 2026
bd198bc
feat(plan-06): per-caller single-flight, Idempotency-Key, response cache
hmziqagent Nov 7, 2026
5e43973
feat(plan-06): fixed mutation phases and opt-in prompt-cache hygiene
hmziqagent Nov 7, 2026
ce8c206
docs(plan-06): mark cache and dedup complete
hmziqagent Nov 7, 2026
421e4cf
feat(plan-06): cache and dedup
hmziqagent Nov 7, 2026
38ddc18
feat(plan-07): Host/Origin guard under anonymous auth
hmziqagent Nov 7, 2026
b9782a4
feat(plan-07): refuse cleartext credentials to off-machine hosts
hmziqagent Nov 7, 2026
cc13dfd
feat(plan-07): forbid caching of admin API responses
hmziqagent Nov 7, 2026
d660b63
feat(plan-07): self-loop prevention with an egress hop header
hmziqagent Nov 7, 2026
4c2abaf
feat(plan-07): honour server.log_format at startup
hmziqagent Nov 7, 2026
0a6fa94
feat(plan-07): print config provenance in validate
hmziqagent Nov 7, 2026
1b4aef6
feat(plan-07): export the runtime counters via Prometheus and OTLP
hmziqagent Nov 7, 2026
842a5a3
feat(plan-07): state and elapsed time on /usage/requests rows
hmziqagent Nov 7, 2026
bec14d8
feat(plan-07): doctor command with named fixes per provider
hmziqagent Nov 7, 2026
e0d57f2
feat(plan-07): swappable immutable config snapshots
hmziqagent Nov 7, 2026
57211f2
fix(plan-07): handle the swap-test upstream's serve result
hmziqagent Nov 7, 2026
e2d97c6
feat(plan-07): hot reload of providers with restart-required refusals
hmziqagent Nov 7, 2026
dd3b2dd
docs(plan-07): mark hardening and operations complete
hmziqagent Nov 7, 2026
e4aae2d
test(plan-07): SIGHUP reload end to end against the real binary
hmziqagent Nov 7, 2026
ab2bef7
feat(plan-07): hardening and operations
hmziqagent Nov 7, 2026
dc814b3
feat(plan-08): Responses, Gemini-native and Ollama-native client dial…
hmziqagent Nov 7, 2026
eca0c0d
docs(plan-08): mark client dialects complete
hmziqagent Nov 7, 2026
10fc8e7
test(plan-08): replay real Codex CLI capture through the Responses route
hmziqagent Nov 7, 2026
05c1ca7
feat(plan-08): client dialects
hmziqagent Nov 7, 2026
0756e35
refactor(plan-09): engine admission backend and cooldown traits
hmziqagent Nov 7, 2026
2ecab6e
feat(plan-09): Redis replica store
hmziqagent Nov 7, 2026
4c9c99f
feat(plan-09): Postgres replica store
hmziqagent Nov 7, 2026
ff52bf1
feat(plan-09): replica store config and daemon wiring
hmziqagent Nov 7, 2026
58791ce
test(plan-09): Postgres replica integration tests and shear fixes
hmziqagent Nov 7, 2026
c684059
fix(plan-09): gate Postgres tests and drop unused dev-deps
hmziqagent Nov 7, 2026
cf4dbfc
feat(plan-09): admin surface with key management, web UI and MCP tools
hmziqagent Nov 7, 2026
0d20a38
fix(plan-09): drop unused admin dev-deps
hmziqagent Nov 7, 2026
db6ce24
feat(plan-09): guardrails crate
hmziqagent Nov 7, 2026
81d2985
feat(plan-09): semantic cache crate
hmziqagent Nov 7, 2026
33d33ba
feat(plan-09): MCP gateway crate
hmziqagent Nov 7, 2026
9b55870
refactor(plan-09): split serve state loading
hmziqagent Nov 7, 2026
3afe460
refactor(plan-09): route serve through the state loader
hmziqagent Nov 7, 2026
7d8709c
refactor(plan-09): extract hot-reload start
hmziqagent Nov 7, 2026
3eb5539
feat(plan-09): non-chat endpoint families
hmziqagent Nov 7, 2026
7cbeb8f
docs(plan-09): mark optional crates complete
hmziqagent Nov 7, 2026
c30a0b1
fix(plan-09): keep optional crates out of default-members
hmziqagent Nov 7, 2026
cead7a0
docs(plan-09): note the sdk semantic-cache feature
hmziqagent Nov 7, 2026
5eb8790
test(plan-09): verify the replica stores against real servers
hmziqagent Nov 7, 2026
2560853
test(plan-09): verify the MCP gateway against the official reference …
hmziqagent Nov 7, 2026
30d8039
feat(plan-09): verify the endpoint families against real servers
hmziqagent Nov 7, 2026
c6543ce
feat(plan-09): optional crates
hmziqagent Nov 7, 2026
0fae50b
feat(plan-10): add the shared binding surface crate
hmziqagent Nov 7, 2026
50480cf
test(plan-10): replay the plan-02 contract fixtures through the bridge
hmziqagent Nov 7, 2026
0333efe
feat(plan-10): Python package with a shared contract suite
hmziqagent Nov 7, 2026
80b183c
chore(plan-10): drop the committed test bytecode cache
hmziqagent Nov 7, 2026
b80f74f
feat(plan-10): Node package with the shared contract suite
hmziqagent Nov 7, 2026
33aa5d5
docs(plan-10): complete the language bindings plan
hmziqagent Nov 7, 2026
327c1cc
docs(plan-10): restore the Node wrapper type definitions
hmziqagent Nov 7, 2026
3d66947
feat(plan-10): add Windows x64 artifacts via mingw cross-compilation
hmziqagent Nov 7, 2026
e4864ab
test(plan-10): run-verify the Windows artifacts under wine
hmziqagent Nov 7, 2026
301128b
docs(plan-10): note the Windows wheel's wine run verification in the …
hmziqagent Nov 7, 2026
158c153
docs(plan-10): add macOS artifacts via zig cross-compilation
hmziqagent Nov 8, 2026
5421e7c
feat(plan-10): add the msvc Windows Node binary via cargo-xwin
hmziqagent Nov 8, 2026
22fed13
feat(plan-10): language bindings
hmziqagent Nov 8, 2026
5a8c3bc
docs(plan-11): correct the gap analysis per the research audit
hmziqagent Nov 8, 2026
98fa654
docs(plan-11): correct the compendium per the research audit
hmziqagent Nov 8, 2026
b25b572
docs(plan-11): fix wave 3/4 citations and add demand caveats
hmziqagent Nov 8, 2026
1b868f8
docs(plan-11): date provider notes and add missing current behaviour
hmziqagent Nov 8, 2026
9486b54
docs(plan-11): apply backlog corrections and record plan numbers
hmziqagent Nov 8, 2026
aed1707
docs(plan-11): research housekeeping and audit-pointer cleanup
hmziqagent Nov 8, 2026
56b90d3
docs(plan-11): complete the research corrections plan
hmziqagent Nov 8, 2026
17771c6
docs(plan-11): research corrections
hmziqagent Nov 8, 2026
1ea9fa2
fix: address global audit round 1
hmziqagent Nov 8, 2026
9c235bf
fix: address global audit round 2
hmziqagent Nov 8, 2026
433535d
fix: address global audit round 3
hmziqagent Nov 8, 2026
5cd1b67
test(engine): pin guardrail masking on same-format routes
hmziqagent Nov 8, 2026
ea051dc
fix(app): enforce managed-key policy changes without a restart
hmziqagent Nov 8, 2026
7f0b414
refactor(adapters): drop panicking-form indexing in non-test code
hmziqagent Nov 8, 2026
49a09f7
docs(engine): state the StreamShare full-recording invariant
hmziqagent Nov 8, 2026
3f4e049
fix(app): attribute managed-key reload refusals; refuse key-store wit…
hmziqagent Nov 8, 2026
ebdfb3d
docs(server): state the swap settle invariant truthfully
hmziqagent Nov 8, 2026
8f3cc35
fix(app): throttle invalid-refresh logging and harden the auth test h…
hmziqagent Nov 8, 2026
266d0bb
fix(server): make the managed-key swap atomic; finish the audit's low…
hmziqagent Nov 9, 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
  •  
  •  
  •  
79 changes: 77 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,26 @@ jobs:

- name: Lint inheritance
run: |
for f in $(find . -name Cargo.toml -not -path './target/*' -not -path './ref/*' -not -path './Cargo.toml'); do
# bindings/{node,python} are standalone workspace roots packaged by
# napi/maturin; they cannot inherit the root workspace's lints.
for f in $(find . -name Cargo.toml -not -path './target/*' -not -path './ref/*' -not -path './bindings/node/Cargo.toml' -not -path './bindings/python/Cargo.toml' -not -path './Cargo.toml'); do
grep -q 'workspace = true' "$f" || { echo "Missing [lints] workspace = true in $f"; exit 1; }
done

- name: Test
run: cargo test --workspace --all-features

# The SDK's documented server-less embedding configuration
# (`--no-default-features`): its test targets must compile there too.
- name: SDK without default features
run: cargo test -p llm-proxy-sdk --no-default-features --locked

- name: Locked build
run: cargo build --locked

# Replaces the rustc `unused_crate_dependencies` lint, which cannot
# distinguish a genuinely unused dependency from one that a sibling
# compilation target of the same crate uses. cargo-shear analyses the
# compilation target of that crate uses. cargo-shear analyses the
# whole workspace and does not have that false-positive mode.
unused-deps:
runs-on: ubuntu-latest
Expand All @@ -46,3 +53,71 @@ jobs:
# rustc 1.98, above the 1.96.1 toolchain pinned above. Bump both together.
- run: cargo install cargo-shear --locked --version 1.13.0
- run: cargo shear

# The macOS leg of the plan-10 done-when line (`pip install` and `npm
# install` work on each platform with no Rust toolchain): builds the
# universal2 artifacts on a macOS runner, installs the wheel and the
# packed npm tarball (no Rust involved in either install), and runs both
# binding contract suites against them. The Linux artifacts are exercised
# by the same suites locally; Windows via wine (see the package READMEs).
bindings-macos:
runs-on: macos-15
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.96.1
targets: x86_64-apple-darwin,aarch64-apple-darwin
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: actions/setup-python@v5
with:
python-version: "3.13"

- name: Build the universal2 wheel and run the Python suite against the install
working-directory: bindings/python
run: |
python -m venv .venv
.venv/bin/pip install maturin
.venv/bin/maturin build --release --target universal2-apple-darwin -o dist
python -m venv .venv-test
.venv-test/bin/pip install dist/llm_proxy-*.whl pytest
.venv-test/bin/python -m pytest tests -q

- name: Run the Node suite against the darwin-universal binary
working-directory: bindings/node
run: |
npm ci
# Generates binding.js/binding.d.ts and the host arm64 slice.
npx napi build --platform --release --js binding.js --dts binding.d.ts
cargo build --release --target x86_64-apple-darwin
lipo -create -output llm-proxy.darwin-universal.node \
target/release/libllm_proxy_node.dylib \
target/x86_64-apple-darwin/release/libllm_proxy_node.dylib
node --test test/

- name: npm install of the packed tarball loads the binary, no Rust toolchain
working-directory: bindings/node
run: |
npm pack
smoke_dir="${RUNNER_TEMP}/npm-smoke"
mkdir -p "${smoke_dir}"
cd "${smoke_dir}"
npm init -y >/dev/null
npm install "${GITHUB_WORKSPACE}/bindings/node/freeoxide-llm-proxy-0.1.0.tgz"
node -e "
const { Proxy } = require('@freeoxide/llm-proxy');
const proxy = new Proxy({ providers: [{
name: 'x', api_key: 'k', auth_style: 'bearer',
adapters: { a: { protocol: 'anthropic_messages',
endpoint: 'http://127.0.0.1:9/v1/messages' } },
routes: { messages: 'a' },
}] });
const out = proxy.translateRequest(
{ model: 'claude-sonnet-4-5', max_tokens: 8,
messages: [{ role: 'user', content: 'hi' }] },
'anthropic_messages', 'openai_chat_completions');
if (!out || out.model !== 'claude-sonnet-4-5') process.exit(1);
"
5 changes: 3 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# AGENTS.md

`llm-proxy` is a Rust workspace (edition 2024, MSRV 1.85, toolchain pinned to
1.96.1 in `rust-toolchain.toml`): the binary `apps/llm-proxy` plus the
`crates/llm-proxy-{core,protocol,provider,storage,api,server}` libraries.
1.96.1 in `rust-toolchain.toml`): the binary package `apps/llm-proxy` plus the
`crates/llm-proxy-{core,protocol,adapters,transport,engine,storage,api,server,sdk}`
libraries.
Common tasks have `just` recipes — `just fmt`, `just lint`, `just test`,
`just build`, `just run` — which wrap the cargo commands below.

Expand Down
Loading
Loading