Skip to main content

Provider Mux & Launcher — Remaining Work

49 open items ordered by dependency. Items earlier in the list unblock items later.


Tier 0: Cleanup & Fixes (no dependencies, unblocks everything)

These are quick fixes that remove confusion and unblock correct work downstream.

#TaskFilesDepends on
1Remove dead OllamaManager class and its tests — OllamaServerManager is the real implementationproviders/ollama_mgr.py, tests/test_ollama_mgr.py
2Remove stale re-exports in launch.ts (isNativelySupported, getRequiredProxyTransport imported but only re-exported, never used in resolution)packages/cli/src/commands/launch.ts:22-24
3Remove a2a from TransportId type and config validator (no implementation, misleads users)packages/core/src/provider-config.ts, packages/amux-proxy/src/amux_proxy/config.py
4Update spec: docs/provider-mux.md §2 lists translate.py and health.py as separate files — they're inline in transport endpoints and server.py. Update spec to matchdocs/provider-mux.md
5Update spec: docs/amux-provider-config.md §8.2 says "single-use bearer token" — it's session-scoped. Fix wordingdocs/amux-provider-config.md
6Delete or populate empty tests/conftest.py (contains only import pytest)packages/amux-proxy/tests/conftest.py
7Fix /v1/count_tokens to return HTTP 400/500 on error instead of {"count": -1, "error": "..."} with 200packages/amux-proxy/src/amux_proxy/server.py
8Fix ollama list string matching — parse line-by-line and check first column instead of includes()packages/cli/src/commands/launch.ts
9Fix default proxyMode — should be 'never' when no --with-proxy* flag is given, with clear error when proxy is neededpackages/cli/src/commands/launch.ts
10Add --resume validation — check adapter.capabilities.canResume, error for unsupported harnessespackages/cli/src/commands/launch.ts
11Migrate FastAPI @app.on_event("startup"/"shutdown") to lifespan context manager (deprecated API)packages/amux-proxy/src/amux_proxy/server.py

Tier 1: Core Infrastructure (unblocks most feature work)

#TaskFilesDepends on
12Fix Python env: CI workflow must use isolated venv (python -m venv or uv) to avoid pydantic v1/v2 conflict.github/workflows/amux-proxy-ci.yml
13ProviderConfig.paramsRecord<string, unknown> — support rich LiteLLM config (RPM/TPM, custom headers, retry policies, aws_bedrock_runtime_endpoint, vertex_credentials)packages/core/src/provider-config.ts, provider-resolver.ts, all translators
14Add --provider-arg key=value repeatable CLI flag — flows arbitrary key-value pairs into ProviderConfig.paramspackages/cli/src/commands/launch.ts13
15Dynamic provider detection — pass provider/model string to LiteLLM directly via custom provider instead of maintaining static ProviderId union. Keep named providers for defaults but let unknown prefixes pass throughpackages/core/src/provider-config.ts, provider-resolver.ts13
16Transport-level redundancy detection — if harness's native transport matches provider's API format, skip proxy even when provider isn't in the native support matrixpackages/core/src/provider-support-matrix.ts, packages/cli/src/commands/launch.ts
17Proxy installation pre-check — --with-proxy-if-needed should verify amux-proxy is installed before attempting spawn, with pip install amux-proxy guidancepackages/cli/src/commands/launch.ts
18PTY allocation for interactive mode — use node-pty for TUI harnesses (Claude, Codex, Gemini)packages/cli/src/commands/launch.ts
19JSON schema file for providers.json — create schema, reference from specpackages/core/schemas/amux-providers.schema.json, docs/amux-provider-config.md

Tier 2: Transport Endpoints (unblocks cloud-provider fidelity)

#TaskFilesDepends on
20Passthrough transport — forward requests in provider's native format (no translation). Add passthrough to TransportId. URL pattern: PROXY/anthropic/v1/messagesapi.anthropic.com/v1/messagespackages/amux-proxy/src/amux_proxy/transports/passthrough.py, packages/core/src/provider-config.ts
21Bedrock Converse native endpoint — POST /converse mapping to Bedrock's Converse API. Avoids double-translation. Supports guardrails, document blockspackages/amux-proxy/src/amux_proxy/transports/bedrock_converse.py
22Vertex AI native endpoint — Vertex-specific generateContent with grounding, safety settings, cached content. Differs from public Gemini format for Claude-on-Vertexpackages/amux-proxy/src/amux_proxy/transports/vertex_native.py
23Azure AI Foundry endpoint — distinct from Azure OpenAI. Foundry-specific features via LiteLLM azure_ai providerpackages/amux-proxy/src/amux_proxy/transports/azure_foundry.py
24Add passthrough, bedrock-converse, vertex-native, azure-foundry to --transport CLI option and TransportId typepackages/core/src/provider-config.ts, packages/cli/src/commands/launch.ts20, 21, 22, 23

Tier 3: Provider Coverage (unblocks broader model access)

#TaskFilesDepends on
25LM Studio as first-class local provider — 'lmstudio', apiBase: 'http://localhost:1234', OpenAI-compatiblepackages/core/src/provider-config.ts15
26vLLM as first-class local provider — 'vllm', configurable endpoint, OpenAI-compatiblepackages/core/src/provider-config.ts15
27Additional cloud providers — nvidia-nim, databricks, cloudflare, replicate, anyscale, huggingface, perplexity, cohere with proper defaultspackages/core/src/provider-config.ts15

Tier 4: Harness Translation Completeness (unblocks full harness coverage)

#TaskFilesDepends on
28Claude translator: add CLAUDE_CODE_AUTO_COMPACT_WINDOW for Ollama context window config (from ollama/cmd/launch/claude.go)packages/adapters/src/translations/claude-translation.ts
29Codex translator: add version check (minimum v0.81.0) and config.toml profile generation (from ollama/cmd/launch/codex.go)packages/adapters/src/translations/codex-translation.ts
30OpenCode translator: merge generated config with existing opencode.json (preserve agents, tools, permissions); add state management for ~/.local/state/opencode/model.json (from ollama/cmd/launch/opencode.go)packages/adapters/src/translations/opencode-translation.ts
31OpenCode prompt injection — appendHarnessSessionArgs() has no OpenCode path for -p prompt delivery. Research OpenCode's non-interactive APIpackages/cli/src/commands/launch.ts
32Translators for remaining harnesses: Copilot, Cursor, Pi, OMP, OpenClaw, Hermes, Droid, Amp, Qwen — detect native provider support where possiblepackages/adapters/src/translations/

Tier 5: Launch Orchestration (unblocks full original request flow)

#TaskFilesDepends on
33End-to-end Ollama lifecycle — amux launch claude ollama --model qwen3:32b should: check Ollama running → start if needed → check model pulled → pull if needed → launch proxy → launch harness. Wire OllamaManager (model pull) into the flow alongside OllamaServerManager (server lifecycle)packages/cli/src/commands/launch.ts, packages/amux-proxy/1, 8
34Full auth validation — STS check for Bedrock, ADC check for Vertex, key format validation. Error before spawning instead of letting harness failpackages/cli/src/commands/launch.ts14
35LiteLLM Router for multi-deployment fallback — support AMUX_PROXY_ROUTER_CONFIG env var for litellm.Router with fallback chains (primary Bedrock → fallback Anthropic)packages/amux-proxy/src/amux_proxy/server.py13

Tier 6: Test Coverage (unblocks confidence for all above)

#TaskFilesDepends on
36Python transport endpoint tests — unit tests for all 4 transports (Anthropic, OpenAI Chat, OpenAI Responses, Google): request parsing, response formatting, streaming, error handlingpackages/amux-proxy/tests/test_anthropic_transport.py, test_openai_chat.py, test_openai_responses.py, test_google.py12
37Python CLI tests — missing args validation, config construction, --versionpackages/amux-proxy/tests/test_cli.py12
38Python server tests — transport router mounting, /v1/count_tokens, /v1/models, Ollama lifecycle hookspackages/amux-proxy/tests/test_server.py12
39Integration tests with real LiteLLM — at least one test calling a real provider (Ollama local or Groq with test key)packages/amux-proxy/tests/test_integration.py12, 36
40TypeScript launch e2e with mock harness — test full spawn + proxy lifecycle + cleanup + signal forwarding using harness-mockpackages/cli/tests/launch-e2e.test.ts9, 17

Tier 7: CI/CD & Packaging (unblocks distribution)

#TaskFilesDepends on
41PyPI trusted publisher — configure PyPI project with GitHub repo as trusted publisherPyPI admin, .github/workflows/amux-proxy-publish.yml12
42GHCR Docker registry — create repo, configure packages: write permissionGitHub repo settings
43amux-proxy version sync — strategy for coordinating Python version with TS changesets (manual tag? script?)packages/amux-proxy/pyproject.toml, __init__.py

Tier 8: Docs (can run anytime)

#TaskFilesDepends on
44Update docs/provider-mux.md §2 package structure to match reality (no translate.py, no health.py, add errors.py, providers/ollama_server.py)docs/provider-mux.md4
45Update docs/amux-provider-config.md §8.2 bearer token wordingdocs/amux-provider-config.md5
46Create JSON schema file for providers.jsonpackages/core/schemas/ or docs/schemas/19

Tier 9: Future Enhancements (nice-to-have, no blockers)

#TaskFilesDepends on
47Response caching — AMUX_PROXY_CACHE=true with SQLite/file cache for repeated dev promptspackages/amux-proxy/
48Cost tracking — aggregate LiteLLM cost data, expose via /metricspackages/amux-proxy/
49--observe mode — tee harness output to stdout (raw) + internal parser (cost/session tracking) without transforming outputpackages/cli/src/commands/launch.ts

Summary

TierDescriptionCount
0Cleanup & fixes11
1Core infrastructure8
2Cloud transport endpoints5
3Provider coverage3
4Harness translation completeness5
5Launch orchestration3
6Test coverage5
7CI/CD & packaging3
8Docs3
9Future3
Total49

Dependency highlights:

  • Tier 0 is all independent — can parallelize freely
  • #13 (rich params) unblocks #14 (CLI args), #15 (dynamic providers), #35 (Router)
  • #12 (CI env fix) unblocks all Python test work (#36-39, #41)
  • #15 (dynamic detection) unblocks #25-27 (new providers)
  • Transport endpoints (#20-23) are independent of each other
  • Harness translators (#28-32) are independent of each other
  • #33 (Ollama e2e) depends on #1 (dead code cleanup) and #8 (string matching fix)