feat: add safe cross-platform upstream updater (#98)
* feat: add safe upstream update scripts * fix(updater): use portable PowerShell temp path --------- Co-authored-by: Wibias <37517432+Wibias@users.noreply.github.com>
This commit is contained in:
1 parent
266655abcf
commit
916c260fd8
8 files changed
+1710
-2
No files matched your search
@@ -34,7 +34,7 @@ Three things set it apart:
|
||||
2. **Keyless.** The AI coding agent already on your machine is the backbone. No API keys, no second bill, no gatekeeper.
|
||||
3. **Honest about scope.** The [status table](#what-ships-today) marks exactly what's stable, experimental, or roadmap — because red-teaming shouldn't be a priesthood, and it damn sure shouldn't run on vibes.
|
||||
|
||||
**Jump to** → [Quick start](#quick-start) · [What it hunts](#what-it-hunts) · [What ships today](#what-ships-today) · [Benchmarks](#benchmarks) · [Architecture](#architecture) · [Docs](#documentation)
|
||||
**Jump to** → [Quick start](#quick-start) · [Updating](#updating-from-upstream) · [What it hunts](#what-it-hunts) · [What ships today](#what-ships-today) · [Benchmarks](#benchmarks) · [Architecture](#architecture) · [Docs](#documentation)
|
||||
|
||||
## ⚠️ Authorized use only
|
||||
|
||||
@@ -101,6 +101,60 @@ npm run verify-claims # re-derives every headline from committed JSO
|
||||
|
||||
Library/SDK usage, the full HTTP API, and MCP setup live in [docs/](docs/).
|
||||
|
||||
## Updating from upstream
|
||||
|
||||
If you installed from a release tarball or copied the tree instead of tracking `git pull`, use the built-in updater to sync with [github.com/elder-plinius/T3MP3ST](https://github.com/elder-plinius/T3MP3ST) without losing local secrets or bench output. It shows a numbered plan, asks **y/N** before changing anything, then runs `npm install`.
|
||||
|
||||
```bash
|
||||
npm run update # interactive sync from upstream main
|
||||
npm run update:dry # preview only — no git or npm changes
|
||||
npm run update:hard # hard reset to upstream/main (still restores protected paths)
|
||||
```
|
||||
|
||||
Works on Windows (PowerShell), macOS, Linux, and WSL. Requires **git** and **npm** on your PATH.
|
||||
|
||||
### Safety modes
|
||||
|
||||
The updater is destructive **only when explicitly requested**:
|
||||
|
||||
| Command | What it does | Local changes |
|
||||
|---|---|---|
|
||||
| `npm run update` | Default interactive sync | `git merge upstream/main`; protected paths backed up and restored |
|
||||
| `npm run update:dry` | Read-only preview | No git init, fetch, merge, reset, or `npm install`; safe on tarball installs |
|
||||
| `npm run update:hard` | Opt-in hard reset | `git reset --hard upstream/main`; protected paths still restored |
|
||||
|
||||
All non-dry-run modes ask **y/N** before changing anything. Pass `--force` only in trusted automation. On the first-time path (no commits yet), the updater replaces the working tree with the upstream snapshot, but protected paths are backed up first and restored afterward.
|
||||
|
||||
### Protected paths (inside the repo)
|
||||
|
||||
Before replacing files, the updater backs up anything on disk that matches [`scripts/update-protected.txt`](scripts/update-protected.txt), then restores it after sync. **Only paths that exist locally are affected** — if you never created them, nothing happens.
|
||||
|
||||
| Path | Why it's protected |
|
||||
|---|---|
|
||||
| `.env`, `.env.*` | API keys and local env overrides. `!.env.example` is an exception — the template is **not** protected so upstream can update it. |
|
||||
| `.keys.local` | One-off key paste file loaded by bench scripts (e.g. `VENICE_API_KEY`) without touching `.env`. |
|
||||
| `.keys.bounty.json` | HackerOne / Bugcrowd / similar platform credentials. |
|
||||
| `bench/cybench/corpus-stage/` | Large cloned Cybench corpus (not redistributed; expensive to re-download). |
|
||||
| `bench/cybench/service-stage/`, `bench/cybench/challenges/` | Per-run Cybench Docker staging and challenge trees (regenerable, but slow to rebuild). |
|
||||
| `bench/xbow/stage/`, `bench/xbow/challenges/` | XBOW/XBEN challenge staging (large third-party trees). |
|
||||
| `bench/wild-hunt/` | Cold-hunt findings, PoCs, disclosure drafts, and campaign results — pre-coordination vuln material. |
|
||||
| `bench/decomposition-results/` | White-box decomposition run JSON (may contain unreported analysis). |
|
||||
| `bench/refusal-frontier/` | Refusal-boundary probe artifacts (raw model responses). |
|
||||
| `bench/nyu/` | Staged NYU CTF content from `nyu-prep.mjs`. |
|
||||
| `docs/disclosures/` | Generated vendor disclosure packages (`disclosure-gen` output). |
|
||||
| `reports/` | Engagement and hunt reports (persistent output; same tree as Docker volume mounts in deployment setups). |
|
||||
| `evidence/` | PoCs, screenshots, and other finding evidence kept across updates. |
|
||||
|
||||
Add your own patterns in `scripts/update-protected.local.txt` (optional local overlay; same glob syntax as the main manifest).
|
||||
|
||||
### Never touched (outside the repo)
|
||||
|
||||
These live outside the project tree — an update never reads or writes them:
|
||||
|
||||
- `%APPDATA%\t3mp3st-nodejs\Config\config.json` (or the macOS/Linux `conf` store path) — saved by `npm run setup`
|
||||
- War Room browser **localStorage** on the War Room origin
|
||||
- Local agent auth (`~/.codex`, `%LOCALAPPDATA%\hermes`, etc.)
|
||||
|
||||
## What ships today
|
||||
|
||||
The framework is an 8-operator kill chain, and this table won't blow smoke about it. **Recon is a live, tool-backed engine** — and the teeth are already real: 90.1% pass@1 on XBEN, 8/10 held-out post-cutoff CVEs pinned to exact file/line/CWE, and a coordinated-disclosure pipeline that's live enough to have drafts held for vendor coordination right now. What's *not* proven is the swarm. Each downstream operator — Exploiter, Infiltrator, Exfiltrator, Ghost — runs the **same real, tool-backed ReAct loop as recon** (real exploit tools, not stubs), but the headline numbers came from a single agent, not the coordinated 8-operator cell, and end-to-end swarm exploitation is unbenchmarked and still unreliable. The engine is real; the swarm is the part still earning its stripes. Loud where we've earned it, blunt about the rest.
|
||||
|
||||
Reference in new issue
Block a user