Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
ddfc78c
test: add failing test for CDP video recording all pages
NiceCode666 Apr 8, 2026
eb8f856
refactor: remove CDP ownership guard from _start_page_video_recorder
NiceCode666 Apr 8, 2026
855676e
feat: record all CDP pages in start_video, not just bridgic-owned tabs
NiceCode666 Apr 8, 2026
27e3bd4
docs: update CDP_MODE.md — start_video now records all pages
NiceCode666 Apr 8, 2026
f89f512
refactor: remove _cdp_owned_pages, CDP close() now pure disconnect
NiceCode666 Apr 8, 2026
5d00349
refactor: remove dead _cdp_borrowed variable and update stale comments
NiceCode666 Apr 8, 2026
0816cc1
test: remove _cdp_owned_pages assertions and delete TestBrowserCdpOwn…
NiceCode666 Apr 8, 2026
56d7746
test: remove _cdp_owned_pages from helpers and update CDP borrowed-mo…
NiceCode666 Apr 8, 2026
bf26f67
docs: update CDP_MODE.md — close() is pure disconnect, all tabs visible
NiceCode666 Apr 8, 2026
61ee33c
perf: parallelize page.title() calls in get_all_page_descs with async…
NiceCode666 Apr 8, 2026
fe639b7
refactor: enhance CLI command descriptions and improve wait command f…
NiceCode666 Apr 10, 2026
e2246bf
feat: enhance search command with CDP connection option
NiceCode666 Apr 10, 2026
2d7fb87
fix: improve browser detection in test for CDP URL retrieval
NiceCode666 Apr 10, 2026
e5629f7
feat: add video recording functionality for active tab
NiceCode666 Apr 10, 2026
c3e5cb6
fix: update path handling and add OS-specific skips in tests
NiceCode666 Apr 10, 2026
909a21a
chore: update CI workflow and improve path handling in browser CLI
NiceCode666 Apr 10, 2026
84b00a1
docs: enhance README and CDP_MODE documentation for remote debugging …
NiceCode666 Apr 11, 2026
44ae8cf
fix(cli): address four CLI freeze/hang root causes from daemon.log
NiceCode666 Apr 14, 2026
874dec5
Merge remote-tracking branch 'origin/hotfix/interactive-snapshot-text…
NiceCode666 Apr 14, 2026
526ca31
perf(_snapshot): fix roleIndex rebuild regression on large pages via …
NiceCode666 Apr 14, 2026
8d022dc
feat(snapshot): implement background snapshot pre-warming for improve…
NiceCode666 Apr 14, 2026
457e9c3
Merge branch 'main' into feature/cdp-url-support
NiceCode666 Apr 16, 2026
9d8eb95
fix: harden CLI daemon, CDP detection, snapshot concurrency, and vide…
NiceCode666 Apr 16, 2026
b99b90e
refactor: enhance CDP handling and improve error management
NiceCode666 Apr 16, 2026
8039085
fix: silence false-positive unreachable warning in find_cdp_url
NiceCode666 Apr 16, 2026
4057d0f
refactor: rename cdp_url to cdp for consistency across SDK and CLI
NiceCode666 Apr 16, 2026
6794ee4
test: skip non-executable binary test on Windows
NiceCode666 Apr 16, 2026
ca91e8e
fix: snapshot deadlock, download/video lifecycle, CDP URL redact
NiceCode666 Apr 17, 2026
a9d96ca
fix(dropdown): drop hidden shadow-<select> options for custom comboboxes
NiceCode666 Apr 17, 2026
fb51057
fix: harden config validation, CDP detection, CLI client, downloads a…
NiceCode666 Apr 19, 2026
10f236b
test: isolate Windows unit tests from host state
NiceCode666 Apr 19, 2026
2f6b8ff
test: accept BROWSER_CLOSED in snapshot-during-close race test
NiceCode666 Apr 19, 2026
fe3cb61
test: fall back to default tempdir on Windows in integration fixtures
NiceCode666 Apr 19, 2026
f2c7454
test: stop colliding with Node inspector port in CDP borrowed-mode fi…
NiceCode666 Apr 20, 2026
2cad94c
refactor: update _probe_cdp_alive to use TCP connection for liveness …
NiceCode666 Apr 20, 2026
cdc9ef1
chore: drop unused imports in test_find_cdp_url
NiceCode666 Apr 20, 2026
266ddf3
refactor: enhance _wait_for_chrome to capture Chrome's stderr
NiceCode666 Apr 20, 2026
c753b17
refactor: improve _free_port method to ensure reliable TCP port selec…
NiceCode666 Apr 20, 2026
d040fc2
refactor: remove _free_port method and mock socket connection in tests
NiceCode666 Apr 20, 2026
0f7a368
fix: address PR#21 HIGH-severity review findings
NiceCode666 Apr 20, 2026
25c9d48
feat(skill): config-driven deps installer with version pinning
NiceCode666 Apr 20, 2026
ee5b663
feat: introduce CDP discovery and error handling utilities
NiceCode666 Apr 20, 2026
5341b2a
Merge pull request #25 from bitsky-tech/feat/skill-deps-config
NiceCode666 Apr 20, 2026
97b9229
Merge branch 'main' of github.com:bitsky-tech/bridgic-browser into fe…
NiceCode666 Apr 20, 2026
14412f3
feat: enhance viewport size resolution and browser binary detection
NiceCode666 Apr 20, 2026
67f7457
fix: review follow-ups for CDP/snapshot/click pathways
claude Apr 21, 2026
57220e8
Merge pull request #26 from bitsky-tech/feature/review-followups-pr21
NiceCode666 Apr 21, 2026
ae41645
test: comprehensive coverage for PR #21 CR follow-ups
claude Apr 21, 2026
f95e4f3
Merge pull request #27 from bitsky-tech/feature/test-coverage-pr21-cr
NiceCode666 Apr 21, 2026
4efb2ff
chore: ignore scripts/qa generated artifacts
NiceCode666 Apr 22, 2026
3d83124
fix: CDP auto-reconnect, click fallback budget, eval arrow-fn parity …
NiceCode666 Apr 22, 2026
3915995
test: cover disabled click, CDP close-reattach, go_back ref invalidat…
NiceCode666 Apr 22, 2026
b24b368
test: add 7-variant mode-matrix QA (CLI + SDK diff)
NiceCode666 Apr 22, 2026
0a53968
feat: split user_data_dir into headed/headless subdirs to avoid Singl…
NiceCode666 Apr 22, 2026
e7a71dd
test: add multi-origin storage state restore test
NiceCode666 Apr 22, 2026
c3c9a80
chore: bump version to 0.0.5.dev7
NiceCode666 Apr 22, 2026
5c30c77
feat: support BRIDGIC_HOME env var for multi-instance daemon isolation
NiceCode666 May 9, 2026
b44b4bb
fix: reset _closing flag on _start() and prevent recursion in _is_bro…
NiceCode666 May 9, 2026
1ffd815
fix: six CR follow-up bugs — eval exceptionDetails, go_back/forward N…
NiceCode666 May 9, 2026
3e0526b
docs: add BRIDGIC_HOME multi-instance isolation section to both READMEs
NiceCode666 May 9, 2026
22a3875
docs: unify remaining ~/.bridgic paths to $BRIDGIC_HOME in both READMEs
NiceCode666 May 9, 2026
0c82197
docs: add storage state cross-instance login sharing guide to both RE…
NiceCode666 May 9, 2026
49af155
docs: add SDK usage example for storage state export/import
NiceCode666 May 9, 2026
7d4cbff
fix: go_back/go_forward false positive on same-document navigation
NiceCode666 May 9, 2026
22d3f18
docs(skills): add CDP mode reference + opener API probe test
NiceCode666 May 12, 2026
c166bd2
feat(stealth): mode-aware anti-detection — race-proof workers, UA cle…
NiceCode666 May 12, 2026
8eec54e
feat(cdp): owned-pages tracking — privacy boundary in CDP borrowed mode
NiceCode666 May 12, 2026
7b7c2ca
feat(cdp): evaluate_javascript parity with page.evaluate in CDP mode
NiceCode666 May 13, 2026
01bd228
feat(cdp): silent downloads in CDP-borrowed mode via page-session rou…
NiceCode666 May 13, 2026
2350b6e
test(cdp): lifecycle contract scenarios I11-I15 for owned-page reap
NiceCode666 May 13, 2026
3c14349
chore: bump version to 0.0.5.dev15
NiceCode666 May 13, 2026
1cb0198
fix(cdp): run L3 download-behavior restore before page.close()
NiceCode666 May 18, 2026
7c9ec68
test(cdp): bump node subprocess timeout to 30s for Windows cold-start
NiceCode666 May 18, 2026
a411f57
docs: drop concrete Cloudflare test URL from stealth verification che…
NiceCode666 May 18, 2026
f16d503
test(cdp): skip wrap-js parity tests on Windows; revert timeout bump
NiceCode666 May 18, 2026
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
223 changes: 223 additions & 0 deletions .github/workflows/skill-install-deps-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
name: Skill Install-Deps Check

# Validates that every skill's install-deps.sh can successfully bootstrap a
# fresh project environment from its deps*.ini config. Gates PRs targeting
# main so broken skill installers can't land on the release line.
#
# Matrix is discovered dynamically by scanning skills/*/scripts/deps*.ini —
# adding a new skill or provider config requires no workflow change.
#
# Filename convention:
# deps.ini → single-config skill (no provider arg)
# deps.<provider>.ini → multi-provider skill, passes <provider> as arg 2
#
# Main-branch policy: every [package] in deps.ini MUST declare
# `source = "default"` (public PyPI). Private-index references are a dev-only
# convenience and are rejected here — they have no business on main.
# install-deps.sh itself still supports private indexes via BRIDGIC_DEV_INDEX
# for local/dev flows; this workflow just refuses to let them ship.

on:
pull_request:
branches:
- main
paths:
- 'skills/**'
- '.github/workflows/skill-install-deps-check.yml'
workflow_dispatch:

jobs:
discover:
name: Discover skill configs
runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.build.outputs.matrix }}
count: ${{ steps.build.outputs.count }}
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Build matrix from skills/*/scripts/deps*.ini
id: build
shell: bash
run: |
set -euo pipefail
shopt -s nullglob

entries=()
for script in skills/*/scripts/install-deps.sh; do
skill_dir="$(dirname "$(dirname "$script")")"
skill_name="$(basename "$skill_dir")"
script_dir="$(dirname "$script")"

configs=("$script_dir"/deps*.ini)
if [ ${#configs[@]} -eq 0 ]; then
echo "::warning::skill '$skill_name' has install-deps.sh but no deps*.ini — skipped"
continue
fi

for cfg in "${configs[@]}"; do
cfg_name="$(basename "$cfg")"
if [ "$cfg_name" = "deps.ini" ]; then
provider=""
else
# strip leading "deps." and trailing ".ini"
provider="${cfg_name#deps.}"
provider="${provider%.ini}"
fi
entries+=("{\"skill\":\"$skill_name\",\"provider\":\"$provider\",\"config\":\"$cfg_name\"}")
done
done

count=${#entries[@]}
if [ "$count" -eq 0 ]; then
echo "::warning::no skill deps configs discovered"
matrix='{"include":[]}'
else
joined="$(IFS=,; echo "${entries[*]}")"
matrix="{\"include\":[${joined}]}"
fi

echo "Discovered $count config(s):"
printf ' %s\n' "${entries[@]}"
echo "matrix=$matrix" >> "$GITHUB_OUTPUT"
echo "count=$count" >> "$GITHUB_OUTPUT"

validate:
name: Validate ${{ matrix.skill }} / ${{ matrix.config }}
needs: discover
if: ${{ needs.discover.outputs.count != '0' }}
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.discover.outputs.matrix) }}
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: "latest"
enable-cache: true

- name: Enforce main-branch policy — deps.ini must be public-PyPI only
env:
SKILL: ${{ matrix.skill }}
CONFIG: ${{ matrix.config }}
shell: bash
run: |
set -euo pipefail
cfg="$GITHUB_WORKSPACE/skills/${SKILL}/scripts/${CONFIG}"
# Emit one line per non-default source declaration: <section> -> <value>
violations="$(awk '
function trim(s) { gsub(/^[[:space:]]+|[[:space:]]+$/, "", s); return s }
/^[[:space:]]*[#;]/ { next }
/^[[:space:]]*$/ { next }
/^[[:space:]]*\[.*\][[:space:]]*$/ {
line = $0
sub(/^[[:space:]]*\[/, "", line); sub(/\][[:space:]]*$/, "", line)
section = trim(line); next
}
/^[[:space:]]*source[[:space:]]*=/ {
eq = index($0, "=")
val = trim(substr($0, eq + 1))
sub(/^"/, "", val); sub(/"$/, "", val)
if (val != "default") print section " -> " val
}
' "$cfg")"
if [ -n "$violations" ]; then
echo "::error::$CONFIG declares non-default (private-index) sources — not allowed on main:"
echo "$violations" | sed 's/^/ /'
echo ""
echo "Switch every package to source = \"default\" (public PyPI) before merging to main."
exit 1
fi
echo "OK: $CONFIG references public PyPI only"

- name: Run install-deps.sh in scratch project dir
env:
SKILL: ${{ matrix.skill }}
PROVIDER: ${{ matrix.provider }}
CONFIG: ${{ matrix.config }}
shell: bash
run: |
set -euo pipefail

script="$GITHUB_WORKSPACE/skills/${SKILL}/scripts/install-deps.sh"
if [ ! -x "$script" ] && [ ! -f "$script" ]; then
echo "::error::install-deps.sh not found at $script"
exit 1
fi

scratch="$(mktemp -d -t bridgic-skill-check.XXXXXX)"
echo "Skill: $SKILL"
echo "Config: $CONFIG"
echo "Provider: ${PROVIDER:-<none>}"
echo "Scratch dir: $scratch"
echo "Script: $script"
echo ""

log="$(mktemp)"
set +e
if [ -n "$PROVIDER" ]; then
bash "$script" "$scratch" "$PROVIDER" 2>&1 | tee "$log"
else
bash "$script" "$scratch" 2>&1 | tee "$log"
fi
status=${PIPESTATUS[0]}
set -e

if [ "$status" -ne 0 ]; then
echo "::error::install-deps.sh exited with status $status for $SKILL / $CONFIG"
exit "$status"
fi

# Belt-and-suspenders: script uses `set -e` + structured fail marker,
# but also assert the success marker made it to stdout so a future
# silent-success regression can't sneak past.
if ! grep -qE '^=== DEPS_READY' "$log"; then
echo "::error::DEPS_READY marker missing from install-deps.sh output"
exit 1
fi

echo ""
echo "OK: $SKILL / $CONFIG bootstrapped cleanly"

summary:
name: Check Summary
needs: [discover, validate]
runs-on: ubuntu-22.04
if: always()
steps:
- name: Aggregate results
run: |
discover_result="${{ needs.discover.result }}"
validate_result="${{ needs.validate.result }}"
count="${{ needs.discover.outputs.count }}"

echo "discover: $discover_result"
echo "validate: $validate_result"
echo "configs discovered: $count"

if [ "$discover_result" != "success" ]; then
echo "::error::discover job did not succeed"
exit 1
fi

if [ "$count" = "0" ]; then
echo "No skill configs to validate — treating as pass"
exit 0
fi

if [ "$validate_result" != "success" ]; then
echo "::error::one or more skill install-deps checks failed"
exit 1
fi

echo "All skill install-deps checks passed"
Loading
Loading