Tera Pilot v2.3.4
v2.3.4 — Security hardening, data-integrity fixes, offline licensing, GUI polish
Security hardening (offensive-testing driven)
Five real vulnerabilities were found and fixed this cycle (details in SECURITY_TEST_REPORT.md):
- git sandbox:
!-aliases and exec-capable config keys (core.fsmonitor,core.editor,diff.*.textconv,filter.*.clean/.smudge, …) could execute arbitrary shell — including when a malicious repo ships them in its own.git/config/.git/hooks. Neutralized at runtime for every agent git call. - CORS:
localhost.evil.comused to be echoed as an allowed origin (string-prefix check), exposingapi_token— now matches exact loopback hosts only. - Encrypted prompts: fail closed without
cryptography; insecure XOR fallback removed. - npm scripts:
npm runaliases (test,exec,start, …) execute arbitrarypackage.jsonscripts — all blocked; auto-detected test/lint commands require approval. - web_fetch: loopback targets refused (local API token can't be exfiltrated).
- Constant-time token comparison (API + daemon), request body size caps,
/api/context/pin|unpin→ POST, daemon closes SSE streams for finished tasks.
Covered by 96 security tests + 36 sandbox/command tests (full suite: 448 tests).
Data integrity & reliability
- Command pipes drained while child runs — large test/lint output no longer hits a spurious 60 s timeout with zero captured output.
- GUI Undo actually works (shared checkpoint manager); rewind restores the latest backup at-or-before the target checkpoint.
- Learning-loop entries get unique
LEARN-YYYYMMDD-NNNids after dismissal. - SSE streams close right after
done— no more "success reported as timeout" (eval runs dropped from ~300 s hangs to ~25 s). repetition_guard(repetition-dominated response detection) andthink_scrubber(streaming reasoning-block scrubber) ported from hermes-agent (MIT).
Offline licensing (zero-telemetry Pro gating)
- Ed25519-signed license keys verified entirely offline — no network calls during checks (test-enforced).
tera-pilot license activate|status|deactivate. See LICENSING.md.
M1/M2/M3 completion
- Second Opinion / Cost Router / Spend Dashboard gating enforced identically across TUI / Web UI / HTTP daemon / CLI; fixed wiring bugs that made
/api/second_opinion/runand/api/cost/*always error; 10 integration tests.
GUI & TUI
- Smart auto-scroll with "Jump to latest" pill; Settings always opens the full modal; About shows the real backend version.
- Open project end-to-end: macOS directory picker no longer crashes the backend, picker failures fall back to manual entry with a working Browse button, project context index built lazily (50k files / 5 s), file tree refreshes after switch,
Cmd+Obinding,/cd ~in the TUI.
Eval harness
- Retries "another agent request is already running" collisions with backoff.
- A run whose tests passed (agent actually ran) is no longer masked by a terminal driver
error. - First analyzed batch (2026-08-19): eval/REPORT_2026-08-19.md — 12/27 meaningful runs verified, 8/9 tasks solved at least once. Raw run logs are not versioned.
Docs
- README.md and TERA_PILOT_PRODUCT_READINESS.md updated for the release; GROQ_EVAL_REPORT.md added.
Version: 2.3.4 in package.json, pyproject.toml, tera_pilot/__init__.py, agent/__init__.py, auto_updater.py, web APP_VERSION.