Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion LifeOS/install/skills/Interceptor/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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-<v>.pkg` / `Interceptor-Full-<v>.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

Expand Down
20 changes: 12 additions & 8 deletions LifeOS/install/skills/Interceptor/Tools/Capture.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down