mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-09-30 12:39:42 +02:00
Point any Codeman-supported harness (Claude, opencode, Codex, Gemini, Pi, Grok, DeepSeek, OMP) at a custom OpenAI-compatible endpoint instead of its native cloud backend, for a given session. Covers local hardware (llama.cpp, Ollama, vLLM, DGX Spark, Strix Halo) and cloud (Azure AI Foundry, OpenRouter). Off by default (customModelEndpointsEnabled, synced, default OFF). - Registry: capabilities.customModelInjection per CLI entry (env / configContentEnv / configDir / unsupported kinds) - Pure injection builder (custom-model-injection.ts) turning an endpoint + model id into the real env vars / config content per CLI - Endpoint store + CRUD routes (custom-model-hosts.ts, custom-model-routes.ts), discovery via GET /v1/models, SSRF-guarded - Session integration: Session.setCustomModel()/restartCli() (POST /api/sessions/:id/custom-model), reusing the existing respawn-pane -k primitive to restart the CLI process with new env - Multi-user hardening: every new redirect-capable env var added to its CLI's privilegedEnvKeys, closing a pre-existing gap where several were already reachable via the generic envOverrides field's prefix allowlist - Standalone scripts/test-local-llm-harnesses.mjs: spawns real CLI binaries against a real endpoint outside the web UI, independent of tmux/sessions - Mock-server contract tests (test/fixtures/mock-openai-server.ts) replaying every CLI's injected values through a real HTTP shape Real end-to-end validation against a live llama-swap server (inside a codeman/agent:llm-test Docker image with all 9 CLI binaries) found and fixed three real bugs before they shipped: - Codex's config.toml schema was wrong ([model].default table instead of a top-level model string + [model_providers.custom]); fixing it then surfaced a genuine, documented protocol incompatibility (Codex only speaks the Responses API since Feb 2026, which llama.cpp/llama-swap don't implement) - Claude Code's async session-title-generation call validates ANTHROPIC_DEFAULT_HAIKU_MODEL against its own internal model list and hangs the whole -p invocation on an unrecognized name; documented for chunk 6, worked around in the standalone script only (--bare is NOT safe for a real interactive session, which needs hooks) - The discovery route's authStyle: 'both' option (send both Authorization and api-key headers) reliably hung a real server; removed the option entirely rather than just changing the default Status: draft. Chunk 6 (frontend toolbar/settings UI) not yet built — see PR.md and deployment_plan.md for the full chunk breakdown and confidence table. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017HqNWfmtBU2KN29SvSVWB3
112 lines
2.7 KiB
Plaintext
112 lines
2.7 KiB
Plaintext
# Claude Code local files
|
|
.agents/
|
|
skills-lock.json
|
|
|
|
|
|
# In-session decision scratchpad (context-survival mechanism, not a deliverable)
|
|
DECISIONS.md
|
|
# Written by install.sh into end-user clones when setup finishes
|
|
.install-complete
|
|
|
|
# Dependencies
|
|
node_modules/
|
|
|
|
# Build output
|
|
dist/
|
|
|
|
# Vendored frontend deps (generated from node_modules by postinstall/build)
|
|
src/web/public/vendor/
|
|
|
|
# Test coverage
|
|
coverage/
|
|
|
|
# E2E test screenshots (keep baselines, ignore current/diffs)
|
|
test/e2e/screenshots/current/
|
|
test/e2e/screenshots/diffs/
|
|
|
|
# Mobile visual regression failure artifacts
|
|
test/mobile/snapshots/*.actual.png
|
|
test/mobile/snapshots/*.diff.png
|
|
|
|
# Logs
|
|
*.log
|
|
npm-debug.log*
|
|
|
|
# OS files
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Editor directories
|
|
.idea/
|
|
.vscode/
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
|
|
# Environment files
|
|
.env
|
|
.env.local
|
|
.env.*.local
|
|
|
|
# State files (local to each machine)
|
|
.claude/ralph-loop.local.md
|
|
|
|
# Temporary files
|
|
*.tmp
|
|
*.temp
|
|
|
|
# Generated output
|
|
out/
|
|
screenshots-echo-diag/
|
|
screenshots-readme/
|
|
screenshots-readme-real/
|
|
screenshots-real/
|
|
scripts/remotion/out/
|
|
|
|
# Local UI/README capture scratch (screenshot runs, design mockups). Not build
|
|
# output, but never meant for git — an unqualified `git add -A` during a COM has
|
|
# swept dirs like these into a release before.
|
|
design-explorations/
|
|
|
|
# Artifacts that should not be tracked
|
|
test-results/
|
|
tmp/
|
|
# Machine-local working files (never meant for git). ANCHORED so only the root
|
|
# dir matches.
|
|
/pr/
|
|
# Root `public` (a symlink to scripts/remotion/public — local artifact). ANCHORED
|
|
# with a leading slash so it does NOT also match src/web/public (a bare `public`
|
|
# would swallow the whole web UI source dir and silently un-stage any new asset
|
|
# added there). No trailing slash so it still matches the symlink, not just dirs.
|
|
/public
|
|
|
|
# Opt-in gesture overlay runtime assets: large MediaPipe wasm + model (~27 MB)
|
|
# fetched at build/install by scripts/fetch-gesture-assets.mjs, kept out of git.
|
|
# (The gesture bundle itself, gesture-codeman.js, IS tracked — built from
|
|
# packages/gesture-control source by `npm run build:gesture`.)
|
|
src/web/public/gesture/wasm/
|
|
src/web/public/gesture/*.task
|
|
|
|
# Gesture-control workspace package build outputs (source is tracked; the
|
|
# Codeman bundle is emitted to src/web/public/gesture/gesture-codeman.js instead).
|
|
packages/gesture-control/dist/
|
|
packages/gesture-control/dist-codeman/
|
|
packages/gesture-control/.vite/
|
|
|
|
# Claude Code plan tracking
|
|
plan.json
|
|
|
|
.claude/
|
|
media-assets/
|
|
commands
|
|
todo.md
|
|
@fix_plan.md
|
|
readme-preview.mjs
|
|
|
|
# Uploaded images land here under each session working dir (runtime artifact)
|
|
.claude-images/
|
|
|
|
# Local-LLM harness smoke-test config (real IPs/keys) — see the .example.json
|
|
# alongside it in scripts/, which IS tracked as the template.
|
|
scripts/local-llm-test.config.json
|