Commit Graph

6 Commits

Author SHA1 Message Date
Julius Brussee 5e3d6b8c27 feat(learn): add multi-source outcome tracking
Upgrade `caveman learn` from a Claude/Codex setup linter into a broader local optimizer. It now scans Gemini, opencode, and opt-in aider history, uses catalog-backed context windows and measured turn-1 prefix evidence, adds new behavioral detectors, and ranks grouped portfolio moves without mixing historical totals into forward rates.

The CLI/proxy/TUI now support `learn applied`, `learn simulate`, `--repo`, per-repo reporting, and confirmed longitudinal fix verdicts (`improved`, `unchanged`, `regressed`, `insufficient_data`). Docs, the embedded `caveman-learn` skill, and tests were updated to cover the new learn v2 behavior and planning artifacts.
2026-08-17 16:59:35 +02:00
Julius Brussee 35b213d85f fix(ssrf): name the allowlist escape hatch in self-hosted block errors
A caveman-proxy pointed at a local relay (a self-hosted gateway, vLLM, Ollama,
LM Studio) is blocked at 127.0.0.1 with a message that states the range and
stops there. Self-hosted mode has always allowed exactly this via
CAVE_SSRF_ALLOWLIST, but a fail-closed guard that does not name its own escape
hatch reads as "unsupported" rather than "not opted in" — #841 concluded the
proxy could not forward to a custom upstream at all.

Self-hosted blocks now name the setting and a concrete entry to add. Managed
mode is deliberately unchanged: the allowlist is a no-op there by contract, so
advertising it would send an operator after a setting that cannot help.

The suggested entry has to round-trip. ValidateHost pre-flights with an empty
port, so JoinHostPort would emit a trailing-colon token like "127.0.0.1:" that
matches only the port-less stage — an operator following it literally would
relax pre-flight, get blocked again at dial time by a second message naming a
different token, and leave a stale weakening entry behind. The bare address
form is used when no port is known. The tests parse the suggestion back out of
the error and require it to actually unblock the destination, at both
pre-flight and dial time, so they cannot certify broken advice.

Refs #841 — the proxy's upstream is configured via compat/providers base_url;
this only makes the guard self-documenting.
2026-08-15 16:51:52 +02:00
Julius Brussee 613d7f0402 Merge origin/main into main 2026-08-13 02:28:47 +02:00
Julius Brussee 83e4db389d fix(proxy): allow local TUN fake IPs
Permit mihomo's synthetic IPv4 and IPv6 pools only in self-hosted SSRF mode so provider traffic reaches the local TUN. Managed mode and metadata-sensitive ranges remain blocked.\n\nRefs #827
2026-08-13 02:04:49 +02:00
Julius Brussee d4ef06be1c chore: scrub private-repo references from public tree (#832)
Removes ADR citations (decision records live in the private repo;
links were broken here) while keeping every described invariant
inline, and fixes generator headers / doc titles that leaked the
private monorepo layout (public/cli, cloud/web). Comments and docs
only — no behavior change.


Claude-Session: https://claude.ai/code/session_01DLNTYJU8vMEdDWpV7e7k7Z

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 01:41:38 +02:00
Julius Brussee 82864c8f4c feat: ship Caveman 2.0.0 — engine, proxy, SDKs, unified CLI
Single-commit port of the Caveman 2 tree onto the original repo history
(candidate caveman-2@88878a4 applied over main@3098342). No unrelated-history
merge; original history untouched.

Preserved v1 surfaces:
- skills/caveman/SKILL.md byte-for-byte, plus plugin mirror and caveman.skill zip
- legacy CI (Node 18/20/22 installer + Python 3.11 suites) alongside engine-ci
- cli/install.js compatibility shim forwarding to bin/install.js
- .codex/config.toml ships both hooks and codex_hooks for older Codex (#617)
- README Trendshift + Skills.sh badges and local star-history asset
- v1.10.0-pinned curl installs; benchmarks/tmp-starcharts ignore rules

Fixed for public same-repo release:
- SECURITY.md vulnerability reporting points at this repository
- release-binaries.yml publishes to this repo via job-scoped GITHUB_TOKEN
  (cross-repo PAT removed); binary-release environment still gates signing
- packages/cli/PUBLISHING.md rewritten for packages/ layout and same-repo flow
- profile-contract and provider-catalog lanes skip lane-scope gates on
  initial import so the launch PR can gate on their real validation steps
- ANNOUNCEMENT.md network claim corrected: compression is local; requests
  still go to the provider you configured

Caveman 2 stays opt-in: bin-v1.0.0 binaries and @caveman-ai/cli publish
separately after this lands and soaks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BLvb5QniwYjmcawyssQNw9
2026-08-11 16:46:10 +02:00