Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
9a349ea
Harden /percy/comparison/upload endpoint
Sriram567 Mar 26, 2026
f87d706
Fix misleading error on oversized file upload
Sriram567 Mar 26, 2026
1de5674
add dependencies
Sriram567 Mar 27, 2026
d65c83b
feat: Add /percy/maestro-screenshot relay endpoint
Sriram567 Apr 1, 2026
615bfb5
feat: Extend /percy/maestro-screenshot relay with regions, sync, tile…
Sriram567 Apr 9, 2026
a724039
feat: iOS support in /percy/maestro-screenshot relay
Sriram567 Apr 20, 2026
268a8ac
feat(core): add ADB view-hierarchy resolver for maestro element regions
Sriram567 Apr 21, 2026
37e6ad7
feat(core): resolve maestro element regions via ADB hierarchy
Sriram567 Apr 21, 2026
57d6a44
fix(core): retry uiautomator fallback dump once on SIGKILL (exit 137)
Sriram567 Apr 21, 2026
8fb6591
fix(core): exponential backoff on SIGKILL up to 3.5s budget
Sriram567 Apr 22, 2026
a6942df
feat(core): use `maestro hierarchy` as primary view-tree source
Sriram567 Apr 22, 2026
d097f07
feat(core): extract PNG_MAGIC_BYTES + add IHDR dimension parser (B1)
Sriram567 Apr 22, 2026
1792e37
feat(core): add wda-session-resolver (B2) — reader for realmobile wda…
Sriram567 Apr 22, 2026
d0cae9c
feat(core): add wda-hierarchy iOS element resolver — source-dump path…
Sriram567 Apr 22, 2026
d2eb348
feat(core): integrate wda-hierarchy into /percy/maestro-screenshot re…
Sriram567 Apr 22, 2026
e7b9938
feat(core): WDA-direct iOS regions — 3 fixes for Node 14 + WDA sid + …
Sriram567 Apr 28, 2026
9e2f381
refactor(core): rename adb-hierarchy → maestro-hierarchy + compat shim
Sriram567 Apr 28, 2026
403d89f
feat(core): scaffold iOS branch in maestro-hierarchy + R1 vocabulary …
Sriram567 Apr 28, 2026
1b98ece
feat(core): api.js dispatch behind PERCY_IOS_RESOLVER env switch
Sriram567 Apr 29, 2026
616cdd5
test(core): cross-platform parity test + fix XML-path id alias
Sriram567 Apr 29, 2026
65e54b9
feat(core): vendor iOS Maestro viewHierarchy fixtures from cli-2.0.7 …
Sriram567 May 7, 2026
dbc7b27
feat(core): iOS Maestro HTTP transport for view-hierarchy resolution …
Sriram567 May 7, 2026
7e04893
feat(core): wire iOS resolver-choice cascade in /percy/maestro-screen…
Sriram567 May 7, 2026
35957fc
feat(core): two-slot maestroHierarchyDrift envelope on /percy/healthc…
Sriram567 May 7, 2026
8c34f2d
test(core): integration harnesses for iOS resolver validation (Units …
Sriram567 May 7, 2026
d564692
refactor(core): retire wda-hierarchy + collapse resolver-choice casca…
Sriram567 May 7, 2026
a1bd69d
refactor(core): drop deprecated adb-hierarchy.js shim + dead imports …
Sriram567 May 7, 2026
68e67db
feat(core): vendor maestro_android.proto + add @grpc/grpc-js deps (20…
Sriram567 May 8, 2026
73459be
feat(core): direct gRPC Android resolver with three-class error taxon…
Sriram567 May 8, 2026
135f0ea
feat(core): per-Percy gRPC client cache lifecycle (Unit 5)
Sriram567 May 8, 2026
bf5d1f5
test(core): Android gRPC test coverage for D10 three-class taxonomy +…
Sriram567 May 8, 2026
e8583bd
test(core): concurrent-access merge gate harness for Android gRPC (Un…
Sriram567 May 8, 2026
152ad64
fix(core): relax iOS HTTP content-type check (Maestro upstream omits CT)
Sriram567 May 8, 2026
36f9c56
feat(core): accept optional filePath in /percy/maestro-screenshot relay
Sriram567 May 11, 2026
ccd96f5
feat(core): surface gRPC + iOS HTTP hierarchy fallback transitions on…
Sriram567 May 11, 2026
b24bdfc
docs(core): inline regions end-to-end architecture in api.js relay ha…
Sriram567 May 16, 2026
71a3a5d
docs(core): correct maestro-hierarchy.js comment on gRPC primary purpose
Sriram567 May 16, 2026
545d498
fix(core): drain percy.upload async generator in sync relay routes
Sriram567 May 20, 2026
96c9a60
feat(core): accept ignoreRegions and considerRegions on /percy/maestr…
Sriram567 May 20, 2026
10dbe83
test(core): cli-side algorithm pass-through coverage for regions[]
Sriram567 May 20, 2026
22fddfd
feat(core): gate iOS HTTP hierarchy on PERCY_MAESTRO_GRPC=0 kill switch
Sriram567 May 21, 2026
333a0de
Merge remote-tracking branch 'origin/master' into feat/maestro-ios-ht…
Sriram567 May 21, 2026
c61b7ee
fix(core): restore PNG_MAGIC_BYTES + lint compliance after master merge
Sriram567 May 22, 2026
ed87247
fix(core): suppress semgrep path-traversal false positives in maestro…
Sriram567 May 22, 2026
41d2939
fix(core): use bare nosemgrep comment to suppress maestro relay false…
Sriram567 May 22, 2026
826d473
fix(core): use same-line nosemgrep suppression with explicit rule IDs
Sriram567 May 22, 2026
66070d9
Merge remote-tracking branch 'origin/master' into feat/maestro-ios-ht…
Sriram567 May 22, 2026
1fee160
fix(core): file-level semgrep suppression for path-traversal false po…
Sriram567 May 22, 2026
9960741
feat(core): derive Maestro snapshot tag dims from PNG header in relay
Sriram567 May 23, 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
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,10 @@ packages/logger/test/client.js
packages/sdk-utils/test/client.js
packs
docs/
.claude/

# bstack-ai-harness:begin (managed — do not edit between markers)
bstack-ai-harness.yml
.harness-docs.json
CLAUDE.md
.claude/
# bstack-ai-harness:end
19 changes: 19 additions & 0 deletions .semgrepignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,22 @@ packages/core/src/lock.js
# (the resolve happens *inside* validateArchiveDir itself) so it flags
# every join. Suppress at the file level with this rationale.
packages/core/src/archive.js

# api.js path-traversal guards live at the top of the /percy/maestro-screenshot
# route handler: `name` and `sessionId` are both validated against
# /^[a-zA-Z0-9_-]+$/ (SAFE_ID, line ~322) BEFORE any path.join() runs.
# Traversal sequences (`..`, `/`, `\0`) are rejected with 400 there. The
# fallback walker is also depth-capped at 15 levels. semgrep's
# path-join-resolve-traversal rule cannot follow the regex validation
# chain across the function body, so it flags the joins on lines 445
# and 462. Inline `// nosemgrep` directives (preceding and same-line)
# were not honored by the semgrep CI version in use — suppress at the
# file level with this rationale.
packages/core/src/api.js

# Test files load fixtures from hardcoded subpaths under
# test/fixtures/maestro-{hierarchy,ios-hierarchy}. The fixture filenames
# are static literals in each test; semgrep flags the path.join() used
# in the file-load helper anyway. No user input flows here.
packages/core/test/unit/maestro-hierarchy.test.js
packages/core/test/unit/maestro-hierarchy.parity.test.js
4 changes: 4 additions & 0 deletions packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,19 @@
"@percy/logger": "1.31.15-beta.0",
"@percy/monitoring": "1.31.15-beta.0",
"@percy/webdriver-utils": "1.31.15-beta.0",
"@grpc/grpc-js": "^1.14.3",
"@grpc/proto-loader": "^0.8.0",
"content-disposition": "^0.5.4",
"cross-spawn": "^7.0.3",
"extract-zip": "^2.0.1",
"fast-glob": "^3.2.11",
"fast-xml-parser": "^4.4.1",
"micromatch": "^4.0.8",
"mime-types": "^2.1.34",
"pako": "^2.1.0",
"path-to-regexp": "^6.3.0",
"rimraf": "^3.0.2",
"busboy": "^1.6.0",
"ws": "^8.17.1",
"yaml": "^2.4.1"
},
Expand Down
600 changes: 596 additions & 4 deletions packages/core/src/api.js

Large diffs are not rendered by default.

Loading
Loading