diff --git a/LifeOS/install/skills/Interceptor/SKILL.md b/LifeOS/install/skills/Interceptor/SKILL.md index 2f8bede2cb..65cddf68c7 100644 --- a/LifeOS/install/skills/Interceptor/SKILL.md +++ b/LifeOS/install/skills/Interceptor/SKILL.md @@ -50,7 +50,7 @@ Interceptor is a Chrome extension that operates through the actual browser UI pl **Repo:** https://github.com/Hacker-Valley-Media/Interceptor **Install:** the signed `Interceptor-Browser-.pkg` / `Interceptor-Full-.pkg` from the upstream releases page, or `interceptor upgrade --full` on an existing install. Building from source is optional — see `Workflows/Update.md`. **Chrome extension:** the signed installer registers it for you. If you build from source instead, `Tools/Pin.sh` copies the built `extension/dist` into `~/.claude/skills/Interceptor/Extension/` — that directory does **not** ship with the skill, `Pin.sh` creates it — and Chrome loads it via "Load unpacked". Provenance is recorded in `Extension/PINNED_FROM.txt` (source path, manifest version, content SHA256, timestamp). Chrome disables unpacked extensions on every manifest bump, so after any source rebuild the copy must be **re-pinned and reloaded**. It does NOT auto-follow upstream. -**Pinned binary:** any `interceptor >= 0.23.16` works with this skill. (Maintainer machine note — does not describe public installs: the maintainer's binary is built from a local branch `local-0.23.16`, upstream tag `v0.23.16` plus a cherry-picked `screenshot --save` fix that honors `--out` and defaults to `~/Downloads`; re-cherry-pick on every upgrade until upstreamed, and build from source rather than `interceptor update` since the self-updater would drop the patch. On a stock install, `screenshot --save` writes to cwd — pass `--out` explicitly.) Upstream is a **three-surface** control plane: **Browser** + **macOS** + **iOS** (drive an owned, Developer-Mode iPhone via an on-device XCUITest runner over WiFi — `interceptor ios *`). **Tab Lifecycle Policy (new in 0.23.3):** named-group reuse is default-on and idle managed groups auto-close after 10 min — see Tab hygiene below. +**Pinned binary:** any `interceptor >= 0.23.16` works with this skill. (Maintainer machine note — does not describe public installs: the maintainer's binary is built from a local branch `local-0.23.16`, upstream tag `v0.23.16` plus a cherry-picked `screenshot --save` fix that honors `--out` and defaults to `~/Downloads`; re-cherry-pick on every upgrade until upstreamed, and build from source rather than `interceptor update` since the self-updater would drop the patch. On a stock install, `screenshot --save` writes to cwd and rejects `--out`; `Tools/Capture.sh` runs it from the output directory and moves the reported `filePath` into place.) Upstream is a **three-surface** control plane: **Browser** + **macOS** + **iOS** (drive an owned, Developer-Mode iPhone via an on-device XCUITest runner over WiFi — `interceptor ios *`). **Tab Lifecycle Policy (new in 0.23.3):** named-group reuse is default-on and idle managed groups auto-close after 10 min — see Tab hygiene below. ### Capabilities Overview — Six Verb Trees diff --git a/LifeOS/install/skills/Interceptor/Tools/Capture.sh b/LifeOS/install/skills/Interceptor/Tools/Capture.sh index a92863b87d..0dca5c479d 100755 --- a/LifeOS/install/skills/Interceptor/Tools/Capture.sh +++ b/LifeOS/install/skills/Interceptor/Tools/Capture.sh @@ -185,9 +185,13 @@ if [ -z "$OUT" ]; then fi mkdir -p "$(dirname "$OUT")" -# Build common flag arrays. -SS_FLAGS=(--context "$CTX" --save --out "$OUT") +# Build common flag arrays. `screenshot` has no --out (that flag belongs to +# `save` and `net`; the CLI rejects it): `--save` writes into the CLI's cwd and +# reports the file as "filePath", so each capture runs from $OUT's directory +# and resolve_saved() moves the daemon-named file onto $OUT. +SS_FLAGS=(--context "$CTX" --save) [ "$FULL" -eq 1 ] && SS_FLAGS+=(--full) +OUT_DIR="$(dirname "$OUT")" # --- helpers --- navigate_if_needed() { @@ -246,10 +250,10 @@ content_ok() { } # interceptor screenshot prints JSON including "filePath" — the path it ACTUALLY -# wrote. The --pixel path (captureVisibleTab) ignores --out and saves to a -# daemon-chosen temp path, so after every capture we reconcile: if $OUT wasn't -# populated, lift the real file from filePath into $OUT. This is what makes the -# working pixel fallback actually satisfy the wrapper's contract. +# wrote (`--save` names the file itself; the --pixel path may use a daemon-chosen +# temp path), so after every capture we reconcile: if $OUT wasn't populated, +# lift the real file from filePath into $OUT. This is what makes both capture +# paths satisfy the wrapper's contract. resolve_saved() { local out_text="$1" fp [ -s "$OUT" ] && return 0 @@ -273,11 +277,11 @@ heal_bridge() { } dom_capture() { - interceptor screenshot "${SS_FLAGS[@]}" 2>&1 + (cd "$OUT_DIR" && interceptor screenshot "${SS_FLAGS[@]}" 2>&1) } pixel_capture() { - interceptor screenshot "${SS_FLAGS[@]}" --pixel 2>&1 + (cd "$OUT_DIR" && interceptor screenshot "${SS_FLAGS[@]}" --pixel 2>&1) } # --- 5/6/7. capture with bounded recovery. DOM-first, then a single classified