Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
358 commits
Select commit Hold shift + click to select a range
6684a8a
Merge pull request #54 from junghwan-oss/fix/39-typing-readback-verif…
junghwan-oss Apr 20, 2026
c41a1c3
feat: add pasteboard typing backend for app_type_element (#39 Tier 2)
junghwan-oss Apr 20, 2026
2310eca
Merge pull request #76 from junghwan-oss/feat/issue-39-pasteboard-bac…
junghwan-oss Apr 20, 2026
4dedbe0
Merge pull request #55 from junghwan-oss/fix/issue-40-swift-refactor
junghwan-oss Apr 20, 2026
ab7226d
Merge pull request #60 from junghwan-oss/fix/issue-40-wrapper-tests
junghwan-oss Apr 20, 2026
630d87b
chore(release): 0.6.0 — ax-bridge recursive scored content-root (#40)
junghwan-oss Apr 20, 2026
235830f
Merge pull request #63 from junghwan-oss/fix/issue-40-release-prep
junghwan-oss Apr 20, 2026
135937c
Merge pull request #64 from junghwan-oss/feat/issue41-swift-chrome-on…
junghwan-oss Apr 20, 2026
7eb384b
Merge pull request #65 from junghwan-oss/feat/issue41-wrapper-single-…
junghwan-oss Apr 20, 2026
c2cffdf
Merge pull request #68 from junghwan-oss/feature/issue-42-cli-help-re…
junghwan-oss Apr 20, 2026
f5d3c4f
Merge pull request #51 from junghwan-oss/feature/issue-43-labels-corpus
junghwan-oss Apr 20, 2026
ec03dc4
Merge pull request #59 from junghwan-oss/feature/issue-43-detection
junghwan-oss Apr 20, 2026
061c353
Merge pull request #71 from junghwan-oss/feature/issue-43-ax-scan
junghwan-oss Apr 20, 2026
01b08b5
Merge pull request #75 from junghwan-oss/feature/issue-43-permission-…
junghwan-oss Apr 20, 2026
ac1917f
feat(sim-hid-bridge): add TRANSITIONAL_STATE_TIMEOUT classification (…
junghwan-oss Apr 20, 2026
05533a1
Merge pull request #52 from junghwan-oss/feat/46-transitional-state-t…
junghwan-oss Apr 20, 2026
29b3f84
test(sim-hid-bridge): flutter_spinner fixture + TRANSITIONAL_STATE_TI…
junghwan-oss Apr 20, 2026
3e54017
Merge pull request #53 from junghwan-oss/feat/46-transitional-live-fi…
junghwan-oss Apr 20, 2026
54e3f44
fix(ax-bridge): invoke main unconditionally so CLI help prints
junghwan-oss Apr 20, 2026
b2445dc
Prevent develop CI from regressing on ax-bridge imports and slow sent…
shaun0927 Apr 22, 2026
026c7a7
fix(540): admit pointer-service to audit-log backendKind allow-list
shaun0927 Apr 23, 2026
13a721c
docs(recipe): fix Flutter simulator build mode and clarify 0.4.9 pin …
shaun0927 Apr 23, 2026
dc8a995
fix(webview): deregister WebKitClient when listTargets fails in app_w…
shaun0927 Apr 23, 2026
c84f229
feat(ax-bridge): add self-healing recovery wrapper (#643)
shaun0927 Apr 23, 2026
3181e2b
fix(webkit): resolve redirect stubs per-entry in listTargets (#648)
shaun0927 Apr 23, 2026
67bd97b
feat(app-notes-paste-and-tap-url): reviewer-equivalent Universal Link…
shaun0927 Apr 23, 2026
d1ef698
docs(pointer-service): align Phase-1 swipe comment with runtime (#649)
shaun0927 Apr 23, 2026
7e5ca23
feat(device-network): scaffold device_network_set/get tools (#640)
shaun0927 Apr 23, 2026
8ffb546
feat(app-open-url,app-deeplink): opt-in captureLogs window (#641 T4)
shaun0927 Apr 23, 2026
c58f0bc
fix(app-screenshot-native): retry transient surface timeout, drop inf…
shaun0927 Apr 23, 2026
b2c4d52
feat(app-handle-alert): Tier 2.5 keyboard fallback for system dialogs…
shaun0927 Apr 23, 2026
e544807
fix(screenshot-reporter): validate OSF_SCREENSHOT_DIR against safe ro…
shaun0927 Apr 23, 2026
dd9c945
feat(ax-bridge): wire recovery wrapper into app-tree + shared helper …
shaun0927 Apr 23, 2026
d9f4adc
feat(device-network): add NetworkBlocker mechanism abstraction (#640)
shaun0927 Apr 23, 2026
5004179
fix(pasteboard): verify paste applied and surface PASTE_NOT_APPLIED (…
shaun0927 Apr 23, 2026
695eda8
test(ax-bridge): fail-once fixture exercise for recovery wrapper (#643)
shaun0927 Apr 23, 2026
2639516
docs(recipes): universal link channels in the iOS simulator (#641 T2)
shaun0927 Apr 23, 2026
3c0cb15
feat(app-type-element): add perKeyDelayMs for segmented OTP-style fie…
shaun0927 Apr 23, 2026
1b68a2b
fix(app-tree): retry on DEVICE_CONTENT_ROOT_EMPTY after alert dismiss…
shaun0927 Apr 23, 2026
2ad7e13
fix(app-handle-alert): normalize Unicode whitespace in label matching…
shaun0927 Apr 23, 2026
d15b206
feat(app-type-element): attach TEXT_INPUT_LAYOUT_MISMATCH on non-Lati…
shaun0927 Apr 23, 2026
594c595
feat(app-handle-alert): annotate non-ASCII whitespace in visibleButto…
shaun0927 Apr 23, 2026
8b8e0ce
fix(app-handle-alert): emit NBSP variants of multi-word labels in App…
shaun0927 Apr 23, 2026
f2f4236
feat(app-tap): add foreground-probe and tap-bounds helpers (#644)
shaun0927 Apr 23, 2026
4ff986f
feat(app-tap): add safety layer for system alert coordinate taps (#644)
shaun0927 Apr 23, 2026
51c8b65
fix(webview): scope listTargets cleanup to WebKit connection only
shaun0927 Apr 23, 2026
ea572a8
fix(ax-bridge): surface reactivate-returned-false as error stage
shaun0927 Apr 23, 2026
ce89850
fix(app-type-element): redact PII in TEXT_INPUT_LAYOUT_MISMATCH hint …
shaun0927 Apr 23, 2026
6cc56d1
test(app-handle-alert): opt out of Tier 2.5 keyboard fallback in lega…
shaun0927 Apr 23, 2026
c8c0da8
fix(screenshot-reporter tests): scope no-require-imports disable to t…
shaun0927 Apr 23, 2026
9d1b83f
test(app-type-element): update mockTypeText expectations for delayMs arg
shaun0927 Apr 23, 2026
6530cd6
fix(app-notes-paste-and-tap-url): prefer exact URL match and drop sin…
shaun0927 Apr 23, 2026
49f6a79
docs(pointer-service): document actual runtime error type for Phase-1…
shaun0927 Apr 23, 2026
26e8ac9
fix(device-network): validate UDID and reject ambiguous device defaul…
shaun0927 Apr 23, 2026
479910b
fix(app-handle-alert): strip NBSP annotation before corpus lookup in …
shaun0927 Apr 23, 2026
0722c94
fix(capture-logs-window): anchor silence and max-duration on capture …
shaun0927 Apr 23, 2026
9f56400
test(app-type-element): bump file-scoped jest timeout to 30s
shaun0927 Apr 23, 2026
6932939
test(app-type-element): bump per-file Jest timeout to 20 s for CI sta…
shaun0927 Apr 23, 2026
3f8ba09
test(app-type-element): bump per-file Jest timeout to 20 s for CI sta…
shaun0927 Apr 23, 2026
1bc1b8a
test(app-type-element): bump per-file Jest timeout to 20 s for CI sta…
shaun0927 Apr 23, 2026
ea312a7
feat(device-network): implement pfctl host-wide network blocker (#640)
shaun0927 Apr 23, 2026
04807ca
feat(device-network): crash-safe cleanup + startup reconciliation (#640)
shaun0927 Apr 23, 2026
47d1434
feat(device-network): NLC surface finalisation + host setup docs (#640)
shaun0927 Apr 23, 2026
089d05e
Merge remote-tracking branch 'origin/fix/540-audit-log-pointer-servic…
shaun0927 Apr 23, 2026
b4dcafc
Merge remote-tracking branch 'origin/docs/flutter-iap-ko-kr-recipe-fi…
shaun0927 Apr 23, 2026
fcd61d8
Merge remote-tracking branch 'origin/fix/webview-connect-client-leak'…
shaun0927 Apr 23, 2026
93cdd93
Merge remote-tracking branch 'origin/fix/648-mixed-redirect-inline' i…
shaun0927 Apr 23, 2026
42c2260
Merge remote-tracking branch 'origin/fix/643-ax-bridge-recovery' into…
shaun0927 Apr 23, 2026
93a7219
Merge remote-tracking branch 'origin/fix/643-ax-bridge-recovery-integ…
shaun0927 Apr 23, 2026
3b43e5d
Merge remote-tracking branch 'origin/fix/643-ax-bridge-recovery-fixtu…
shaun0927 Apr 23, 2026
21ea18f
Merge remote-tracking branch 'origin/feat/641-t1-notes-paste-tap' int…
shaun0927 Apr 23, 2026
b20ccaf
Merge remote-tracking branch 'origin/fix/649-pointer-service-swipe-co…
shaun0927 Apr 23, 2026
27fb3f4
Merge remote-tracking branch 'origin/feat/640-device-network-pr1-scaf…
shaun0927 Apr 23, 2026
e069886
Merge remote-tracking branch 'origin/feat/641-t4-capture-logs' into i…
shaun0927 Apr 23, 2026
fc38a6f
Merge remote-tracking branch 'origin/fix/651-screenshot-retry' into i…
shaun0927 Apr 23, 2026
4c73127
Merge remote-tracking branch 'origin/fix/651-keyboard-fallback' into …
shaun0927 Apr 23, 2026
55babe6
Merge remote-tracking branch 'origin/fix/650-osf-screenshot-dir-guard…
shaun0927 Apr 23, 2026
4be2a38
Merge remote-tracking branch 'origin/feat/639-pr-a-perkey-delay' into…
shaun0927 Apr 23, 2026
60b5349
Merge remote-tracking branch 'origin/feat/639-pr-b-alert-hardening' i…
shaun0927 Apr 23, 2026
d80fa48
Merge remote-tracking branch 'origin/fix/642-normalize-label' into in…
shaun0927 Apr 23, 2026
077d167
Merge remote-tracking branch 'origin/feat/639-pr-d-layout-mismatch' i…
shaun0927 Apr 23, 2026
dd1f924
Merge remote-tracking branch 'origin/fix/642-diagnostic-nbsp' into in…
shaun0927 Apr 23, 2026
8bfe6f4
Merge remote-tracking branch 'origin/fix/642-applescript-nbsp-variant…
shaun0927 Apr 23, 2026
1bf97f6
Merge remote-tracking branch 'origin/feat/644-app-tap-helpers' into i…
shaun0927 Apr 23, 2026
6c9a0c0
Merge remote-tracking branch 'origin/feat/644-app-tap-safety-integrat…
shaun0927 Apr 23, 2026
10cbb14
Merge remote-tracking branch 'origin/feat/640-device-network-pr2-mech…
shaun0927 Apr 23, 2026
b6e078b
Merge remote-tracking branch 'origin/feat/640-device-network-pr3-pfct…
shaun0927 Apr 23, 2026
8ec572c
Merge remote-tracking branch 'origin/feat/640-device-network-pr4-clea…
shaun0927 Apr 23, 2026
021c0cf
Merge remote-tracking branch 'origin/feat/640-device-network-pr5-nlc-…
shaun0927 Apr 23, 2026
52ab140
Merge remote-tracking branch 'origin/feat/639-pr-c-paste-verify' into…
shaun0927 Apr 23, 2026
108c9c7
Merge remote-tracking branch 'origin/docs/641-t2-ul-channels' into in…
shaun0927 Apr 23, 2026
15fdb6c
fix(device-network): declare getHandler in reference-counting revert …
shaun0927 Apr 27, 2026
a1f445c
feat(app-type-element): emit TEXT_INPUT_DROPPED on Latin readback mis…
shaun0927 Apr 27, 2026
c632618
docs(recipes): contributor note on transient simctl errors (#651)
shaun0927 Apr 27, 2026
d5bd743
feat(app-handle-alert): dismissAllVisible loop + axRecovered field (#…
shaun0927 Apr 27, 2026
7de81f7
docs: add app_notes_paste_and_tap_url, device_network, captureLogs en…
shaun0927 Apr 27, 2026
0d0c06c
feat(localized-button-matcher): extension seam for app-specific label…
shaun0927 Apr 27, 2026
f9ba456
feat(ax-bridge): bound AX messaging at 1.5s per element (#660)
shaun0927 Apr 27, 2026
ed1849c
docs(adr): Safari Smart App Banner spike — No-Go (#667)
shaun0927 Apr 27, 2026
253c7b5
fix(localized-button-matcher): order dismiss ahead of paste-allow (#639)
shaun0927 Apr 27, 2026
391edcb
fix(app-handle-alert): bound axRecovered + verify stacked dismissal (…
shaun0927 Apr 27, 2026
31f25df
fix(app-type-element): redact + classify TEXT_INPUT mismatch codes (#…
shaun0927 Apr 27, 2026
2c1728b
Merge pull request #679 from shaun0927/autopilot/fix-640-ts-bug
shaun0927 Apr 27, 2026
d307a31
Merge pull request #681 from shaun0927/docs/651-transient-timeout-note
shaun0927 Apr 27, 2026
6b56031
Merge pull request #683 from shaun0927/autopilot/docs-639-640-641
shaun0927 Apr 27, 2026
5cc6101
Merge pull request #686 from shaun0927/feat/660-b-ax-timeout
shaun0927 Apr 27, 2026
8160fee
Merge pull request #680 from shaun0927/autopilot/fix-639-text-dropped
shaun0927 Apr 27, 2026
a84bce9
Merge pull request #687 from shaun0927/spike/667-smart-banner
shaun0927 Apr 27, 2026
adab06d
Merge pull request #682 from shaun0927/autopilot/fix-639-dismissall
shaun0927 Apr 27, 2026
769c5da
Merge pull request #684 from shaun0927/autopilot/fix-639-localized-ma…
shaun0927 Apr 27, 2026
cf641a9
feat(ax-bridge): --debug flag emits machine-readable stderr (#660)
shaun0927 Apr 27, 2026
d5c0cfc
fix(ax-bridge): restrict bare-flag coercion to debug/verbose (#660)
shaun0927 Apr 27, 2026
530577d
Merge pull request #685 from shaun0927/feat/660-a-debug-flag
shaun0927 Apr 27, 2026
4ca175f
fix(device-network): seed bootedFixture for runtime suite (#640)
shaun0927 Apr 27, 2026
6052513
Merge pull request #688 from shaun0927/fix/640-test-fixture-booted-udids
shaun0927 Apr 27, 2026
e6254d5
build(cli): chmod +x dist/cli/index.js after webpack bundle
shaun0927 Apr 27, 2026
92834ac
Merge pull request #689 from shaun0927/fix/postbuild-chmod-cli
shaun0927 Apr 27, 2026
c905083
Rescue coordinate taps with AX button press (#690)
shaun0927 Apr 28, 2026
da06083
feat(ax-bridge): walker candidate diagnostics on --debug (#660) (#691)
shaun0927 Apr 29, 2026
5bc29a3
test(integration): gated ko-KR push-permission live suite (#660) (#692)
shaun0927 Apr 29, 2026
96063c2
fix(ax-bridge-wrapper): surface structured ErrorJSON from STDOUT (#69…
shaun0927 Apr 29, 2026
8921bc2
feat(ax-bridge): emit deviceContentMacOSPt on dump root (#693 WU3-pre…
shaun0927 Apr 29, 2026
1ae7f1d
fix(security): harden http mcp transport defaults
hermes-agent May 7, 2026
7878253
chore: retrigger checks after develop retarget
hermes-agent May 7, 2026
aff30cf
fix(security): harden HTTP auth comparison
hermes-agent May 7, 2026
29f3132
ci: probe Flutter VM service over HTTP
hermes-agent May 7, 2026
5e85f84
ci: warm up Flutter VM service via JSON-RPC
hermes-agent May 7, 2026
b1b2e45
ci: probe Flutter VM service over websocket
hermes-agent May 7, 2026
b24115a
ci: fix Flutter VM websocket probe workflow syntax
hermes-agent May 7, 2026
111891e
ci: export Flutter VM service HTTP URL
hermes-agent May 7, 2026
88f2546
fix(security): tighten HTTP /mcp auth and insecure-mode posture
omosupport May 7, 2026
d0307d1
fix(security): gate high-risk tools in http mode
hermes-agent May 7, 2026
30a4eaa
fix(security): hide blocked HTTP high-risk tools
hermes-agent May 7, 2026
0bdc3a2
fix(security): expand HTTP high-risk tool gate to JS+VM bypass surfaces
omosupport May 7, 2026
435dcde
feat(tap): scale AX frame coords from macOS-pt to iOS-pt (#693 WU3)
shaun0927 May 7, 2026
074716e
test(coord): regression coverage for macOS-pt → iOS-pt conversion (#6…
shaun0927 May 7, 2026
9a7a5d7
perf(webkit): add evaluateValue helper + screenshot fast path (#702 a/2)
shaun0927 May 7, 2026
4ad909f
refactor(dom-input): centralize script builders for webkit + native i…
shaun0927 May 7, 2026
aa595e1
perf(cli): lazy-load command implementations to speed startup (#700 a/2)
shaun0927 May 7, 2026
2b6688b
perf(webkit): batch navigation state read + dedupe domain enables (#7…
shaun0927 May 7, 2026
b92f6cd
refactor(input): split backends and resolver into focused modules (#7…
shaun0927 May 7, 2026
78bcebc
refactor(webkit): extract error classes into dedicated module (#706 1/5)
shaun0927 May 7, 2026
897478b
refactor(input): consolidate remaining backends into src/input/ (#707 b)
shaun0927 May 7, 2026
f5b0492
refactor(webkit): extract protocol transport (#706 2/5)
shaun0927 May 7, 2026
eb2d833
refactor(webkit): extract target session manager (#706 3/5)
shaun0927 May 7, 2026
5004964
refactor(webkit): extract browser command implementations (#706 4/5)
shaun0927 May 7, 2026
dd5f3a4
refactor(simulator): extract errors and device catalog modules (#708 …
shaun0927 May 7, 2026
db278c3
refactor(types): typed DTOs + fixture builders for WebKit RDP boundar…
shaun0927 May 7, 2026
f5522a8
refactor(lint): enforce no-explicit-any for migrated webkit-rdp paths…
shaun0927 May 7, 2026
23ba357
fix(dom-input): apply gemini bot feedback (#726)
shaun0927 May 7, 2026
d80c69c
fix(lint): order migrated-path override after tests glob (#710 b)
shaun0927 May 7, 2026
a9fccd5
fix(webkit): address review feedback on browser-commands
shaun0927 May 7, 2026
cd47636
test(security): pin cookie value redaction in HTTP audit log
shaun0927 May 7, 2026
595ce51
fix(webkit): resolve circular dep, remove unimplemented timeoutMs, un…
shaun0927 May 7, 2026
b026761
test(coord): apply review feedback on regression coverage
shaun0927 May 7, 2026
b7cb2a5
fix(webkit): use RFC 6265 domain matching for getCookies filter
shaun0927 May 7, 2026
597831b
fix(dom-input): apply gemini bot iteration-2 feedback (#726)
shaun0927 May 7, 2026
d935982
refactor(simulator): harden simctl JSON parsing and fuzzy resolver
shaun0927 May 7, 2026
039d11b
refactor(types): tighten RDP guards and restore console.type fallback
shaun0927 May 7, 2026
7f09fe5
refactor(simulator): extract lifecycle module (#708 2/4)
shaun0927 May 7, 2026
38b603c
fix(security): gate mock_geolocation as HTTP high-risk and reject non…
shaun0927 May 7, 2026
59b19c2
refactor(webkit): apply review feedback to error class extraction
shaun0927 May 7, 2026
40e6c04
refactor(input): apply review feedback to backend consolidation
shaun0927 May 7, 2026
3bbf26e
refactor(webkit): apply review feedback to protocol transport
shaun0927 May 7, 2026
dfb7118
refactor(cli): destructure lazy imports + fix bench median
shaun0927 May 7, 2026
7cfe51a
fix(webkit): cleanup enabledDomainsPerTarget on RPC failure
shaun0927 May 7, 2026
3d87184
fix(input): address review feedback on resolver split
shaun0927 May 7, 2026
6f629b8
fix(webkit): address second-round review on browser-commands
shaun0927 May 7, 2026
91a1b11
fix(webkit): route throwing protocol-event handler through transport:…
shaun0927 May 7, 2026
d81e61a
fix(webkit): keep clearCookies effective on document.cookie fallback
shaun0927 May 7, 2026
55becfe
refactor(webkit): extract typed event adapters and finalize facade (#…
shaun0927 May 7, 2026
a7c78e1
fix(webkit): address review feedback on EventBridge
shaun0927 May 7, 2026
c44d260
fix(webkit): use direct host.emit in EventBridge transport forwarding
shaun0927 May 7, 2026
8756246
fix(dom-input): apply gemini iteration-4 feedback (#726)
shaun0927 May 7, 2026
45ef297
refactor(simulator): keep shutdown best-effort after nuclear erase
shaun0927 May 7, 2026
3009414
refactor(simulator): extract app manager module (#708 3/4)
shaun0927 May 7, 2026
755cfc5
fix(simulator): tighten bundleId regex and centralize not-installed d…
shaun0927 May 7, 2026
94ade8b
fix(simulator): strip all trailing bracket groups in launchctl labels…
shaun0927 May 7, 2026
69567a6
refactor(simulator): extract UI controller and finalize facade (#708 …
shaun0927 May 7, 2026
269c0c3
fix(simulator): hoist promisify and route simctl rotate through deps.…
shaun0927 May 7, 2026
95dd837
fix(dom-input): guard appendChar before keyboard dispatch (#726)
shaun0927 May 7, 2026
b57d2f3
fix(dom-input): always fire key events, conditional value write (#726)
shaun0927 May 7, 2026
0136b2e
fix(dom-input): always dispatch input event (#726)
shaun0927 May 7, 2026
a182cc4
fix(security): harden auth profile persistence (#716)
shaun0927 May 8, 2026
1c6f83e
fix(security): harden audit log persistence (#717)
shaun0927 May 8, 2026
2ccd237
ci: separate runtime and dev dependency audits (#718)
shaun0927 May 8, 2026
5e9446a
perf(socket-finder): cache web inspector discovery with staged backof…
shaun0927 May 8, 2026
2f68a43
feat(tap): scale AX frame coords from macOS-pt to iOS-pt (#693 WU3) (…
shaun0927 May 8, 2026
81f83ce
docs(recipes): coord-space conversion + flutter semantics gap (#693 W…
shaun0927 May 8, 2026
4465fe8
perf(native-input): reduce process spawns via batching capability (#7…
shaun0927 May 8, 2026
3f31f92
perf(simulator): bootstatus-aware polling with shared state cache (#7…
shaun0927 May 8, 2026
9bd2d1b
perf(proxy): split process readiness from target readiness (#701) (#727)
shaun0927 May 8, 2026
008fcb6
perf(tools): lazy-load MCP handler implementations behind static sche…
shaun0927 May 8, 2026
b1a652c
fix(security): gate high-risk tools in http mode (#715)
shaun0927 May 8, 2026
2ca9a4f
perf(webkit): batch navigation state read + dedupe domain enables (#7…
shaun0927 May 8, 2026
ca984fa
refactor(input): consolidate sim-hid + pointer-service + flutter-vm b…
shaun0927 May 8, 2026
70d4e3e
refactor(webkit): extract typed events and finalize facade (#706 5/5)…
shaun0927 May 8, 2026
227c9a4
refactor(webkit): extract protocol transport (#706 2/5) (#734)
shaun0927 May 8, 2026
8d9fee7
refactor(simulator): extract UI controller and finalize facade (#708 …
shaun0927 May 8, 2026
f8b495f
refactor(simulator): extract lifecycle module (#708 2/4) (#740)
shaun0927 May 8, 2026
7ee6aa7
refactor(lint): enforce no-explicit-any for migrated paths (#710 b) (…
shaun0927 May 8, 2026
9ca8e45
refactor(webkit): extract browser command implementations (#706 4/5) …
shaun0927 May 8, 2026
006a125
refactor(simulator): extract app manager module (#708 3/4) (#742)
shaun0927 May 8, 2026
de04d0b
Merge develop into test/693-wu4-coord-regression
hermes-agent May 8, 2026
dd68382
test(coord): regression coverage for macOS-pt → iOS-pt conversion (#6…
shaun0927 May 8, 2026
43e470e
Merge develop into harden/http-mcp-transport-697
hermes-agent May 8, 2026
63468a6
fix(security): harden HTTP MCP transport defaults (#714)
shaun0927 May 8, 2026
3970329
Merge refactor/706b-protocol-transport into refactor/706c-target-session
hermes-agent May 8, 2026
27bd4f3
refactor(webkit): extract target session manager (#706 3/5) (#735)
shaun0927 May 8, 2026
df81cf6
Merge remote-tracking branch 'origin/refactor/706b-protocol-transport…
hermes-agent May 8, 2026
88c62cc
Merge remote-tracking branch 'origin/refactor/708b-lifecycle' into he…
hermes-agent May 8, 2026
36604b2
perf(webkit): add evaluateValue helper + screenshot fast path (#702 a…
shaun0927 May 8, 2026
f9052a0
perf(cli): lazy-load command implementations (#700 a/2) (#729)
shaun0927 May 8, 2026
f14f981
Merge develop into refactor/709-dom-input-scripts
hermes-agent May 8, 2026
1d2bf30
fix(dom-input): always dispatch input event (#726)
shaun0927 May 8, 2026
3dbb75e
Merge develop into refactor/710a-protocol-typing
hermes-agent May 8, 2026
08806fc
refactor(protocol): introduce typed WebKit RDP guards (#710 1/2) (#739)
shaun0927 May 8, 2026
31836f6
Merge develop into refactor/707a-input-resolver
shaun0927 May 8, 2026
50ae2b8
Merge develop into refactor/706a-errors
shaun0927 May 8, 2026
9aa4686
fix: port develop additions into src/input/* and fix post-merge test …
shaun0927 May 8, 2026
77bfa68
Merge develop into refactor/708a-errors-catalog
shaun0927 May 8, 2026
3e6510a
fix(tests): pass httpInsecure + httpHighRiskTools to auth verificatio…
shaun0927 May 8, 2026
86a1920
fix(tests, audit): align with develop's HTTP transport hardening
shaun0927 May 8, 2026
a831782
fix(tests, audit): align with develop's HTTP transport hardening
shaun0927 May 8, 2026
f346491
fix(test): assert flutter-evaluate audit on redacted len=N format
shaun0927 May 8, 2026
f66aa3f
Preserve audit secrecy while landing simulator decomposition
shaun0927 May 12, 2026
bdcda4e
Preserve behavior contracts flagged by review
shaun0927 May 12, 2026
538d7f1
Preserve audit secrecy while keeping input tiers lazy
shaun0927 May 12, 2026
08bc02f
Merge PR #738: simulator decomposition
shaun0927 May 12, 2026
1d9abf4
Keep PR #732 mergeable with current develop
shaun0927 May 12, 2026
be8e909
Merge develop to restore PR mergeability
shaun0927 May 12, 2026
c412d23
refactor(webkit): split WebKitClient internals while preserving facad…
shaun0927 May 12, 2026
5ff7327
Merge pull request #731 from shaun0927/refactor/707a-input-resolver
shaun0927 May 12, 2026
7997034
Explain why lightweight traces fit OpenSafari reliability
shaun0927 May 13, 2026
4403800
Keep login acceleration as a safe validation recipe
shaun0927 May 13, 2026
4464b6e
Make native waits explain stability failures
shaun0927 May 13, 2026
ed945c1
Make Flutter memory validation budgeted and repeatable
shaun0927 May 13, 2026
2ce07da
Scope network interception to MCP sessions
shaun0927 May 14, 2026
a5f2758
Stop spinning while waiting for zombie cleanup locks
shaun0927 May 14, 2026
75b1883
Keep boot diagnostics reliable when WebKit is late
shaun0927 May 14, 2026
19f106f
Preserve XHR restore semantics for session intercepts
shaun0927 May 16, 2026
cda4ded
Merge pull request #753 from shaun0927/fix/752-session-network-intercept
shaun0927 May 16, 2026
bd5333c
Merge pull request #755 from shaun0927/fix/754-zombie-lock-sleep
shaun0927 May 16, 2026
a9aea65
Merge pull request #757 from shaun0927/fix/756-device-boot-webkit-retry
shaun0927 May 16, 2026
38a0cfc
Keep proxy lifecycle stable under parallel startup
shaun0927 May 16, 2026
e581d43
Keep Flutter VM resolution stable under parallel input
shaun0927 May 16, 2026
68df917
fix(pasteboard): skip readback for AXSecureTextField + honor verify:f…
shaun0927 May 17, 2026
d0e37d9
chore(release): v0.6.1
shaun0927 May 17, 2026
e2ac93f
Merge origin/main into release/0.6.1
shaun0927 May 17, 2026
fabe0ab
fix(network-intercept): scope interceptor by device + validate action…
shaun0927 May 17, 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
17 changes: 17 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,20 @@ jobs:
test -f dist/index.js
test -f dist/cli/index.js
node dist/cli/index.js --help

dependency-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
# `--force` is required on Linux because package.json restricts `os` to darwin;
# plain `npm ci` would exit with EBADPLATFORM. Matches the lint/build jobs above.
- run: npm ci --force
- name: Runtime dependency audit (blocking)
run: npm run audit:prod
- name: Dev dependency hygiene audit (warning only)
continue-on-error: true
run: npm run audit:all
129 changes: 113 additions & 16 deletions .github/workflows/headless-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,18 @@ jobs:
- name: Open Safari on smoke target URL
run: |
set -euo pipefail
xcrun simctl openurl "$SIMULATOR_UDID" https://example.com
for attempt in $(seq 1 3); do
if xcrun simctl openurl "$SIMULATOR_UDID" https://example.com; then
break
fi
if [ "$attempt" = "3" ]; then
echo "::error::simctl openurl failed after ${attempt} attempts"
exit 1
fi
echo "::warning::simctl openurl attempt ${attempt} failed; retrying after simulator settles"
xcrun simctl bootstatus "$SIMULATOR_UDID" -b 2>/dev/null || true
sleep 10
done
for i in $(seq 1 30); do
COUNT=$(curl --silent "http://localhost:$OPENSAFARI_PROXY_PORT/json" 2>/dev/null \
| node -e 'const t = JSON.parse(require("fs").readFileSync(0,"utf8")); process.stdout.write(String(Array.isArray(t) ? t.length : 0));' 2>/dev/null || echo "0")
Expand Down Expand Up @@ -360,7 +371,7 @@ jobs:
# Wait for `flutter run` to write the resolved VM service URI.
# `--vmservice-out-file` only appears once the engine has actually
# bound the port and DDS is ready to accept clients.
for i in $(seq 1 120); do
for i in $(seq 1 180); do
if [ -s "$VM_SERVICE_FILE" ]; then
echo "VM service file written after ${i}s: $(cat "$VM_SERVICE_FILE")"
break
Expand All @@ -383,14 +394,30 @@ jobs:
fi
# Trim trailing newline / whitespace; --vmservice-out-file writes
# the URL with a trailing newline.
VM_SERVICE_URL=$(cat "$VM_SERVICE_FILE" | tr -d '\n\r ' )
# Ensure trailing slash so downstream HTTP probes resolve correctly.
VM_SERVICE_RAW_URL=$(cat "$VM_SERVICE_FILE" | tr -d '\n\r ' )
# `flutter run --vmservice-out-file` writes a websocket URL on recent
# Flutter releases. Runtime code expects OPENSAFARI_VM_SERVICE_URL to
# be the HTTP observatory URL and converts it back to /ws internally.
VM_SERVICE_WS_URL="$VM_SERVICE_RAW_URL"
case "$VM_SERVICE_WS_URL" in
*/ws/) ;;
*/ws) VM_SERVICE_WS_URL="${VM_SERVICE_WS_URL}/" ;;
*/) VM_SERVICE_WS_URL="${VM_SERVICE_WS_URL}ws/" ;;
*) VM_SERVICE_WS_URL="${VM_SERVICE_WS_URL}/ws/" ;;
esac
VM_SERVICE_URL="$VM_SERVICE_WS_URL"
case "$VM_SERVICE_URL" in
*/) ;;
*) VM_SERVICE_URL="${VM_SERVICE_URL}/" ;;
ws://*) VM_SERVICE_URL="http://${VM_SERVICE_URL#ws://}" ;;
wss://*) VM_SERVICE_URL="https://${VM_SERVICE_URL#wss://}" ;;
esac
case "$VM_SERVICE_URL" in
*/ws/) VM_SERVICE_URL="${VM_SERVICE_URL%/ws/}/" ;;
*/ws) VM_SERVICE_URL="${VM_SERVICE_URL%/ws}/" ;;
esac
echo "OPENSAFARI_VM_SERVICE_URL=$VM_SERVICE_URL" >> "$GITHUB_ENV"
echo "Discovered VM Service URL: $VM_SERVICE_URL"
echo "OPENSAFARI_VM_SERVICE_WS_URL=$VM_SERVICE_WS_URL" >> "$GITHUB_ENV"
echo "Discovered VM Service HTTP URL: $VM_SERVICE_URL"
echo "Discovered VM Service websocket URL: $VM_SERVICE_WS_URL"

- name: Wait for DDS frontend compiler warmup
run: |
Expand All @@ -399,21 +426,91 @@ jobs:
echo "::error::No VM Service URL exported — cannot warm up DDS"
exit 1
fi
echo "Probing VM Service at $OPENSAFARI_VM_SERVICE_URL ..."
# The DDS HTTP endpoint becomes responsive a few seconds after the
# URL is written. Wait for *any* 200 response before letting jest
# connect — `compileExpression` (the call probeEvaluateCompile
# uses) requires the frontend compiler to have completed its
# initial compile pass, which the warmup sleep covers.
VM_SERVICE_PROBE_URL="${OPENSAFARI_VM_SERVICE_WS_URL:-$OPENSAFARI_VM_SERVICE_URL}"
echo "Probing VM Service at $VM_SERVICE_PROBE_URL ..."
# Dart VM service JSON-RPC traffic is served over the VM service
# websocket path. Some CI runners reject HTTP JSON-RPC probes with
# 405 even after the service is ready, so validate the downstream
# client path directly.
for i in $(seq 1 30); do
if curl --silent --max-time 2 --output /dev/null --write-out '%{http_code}' "${OPENSAFARI_VM_SERVICE_URL}" | grep -q '^200$'; then
echo "DDS HTTP endpoint responsive (attempt $i)"
if node <<'NODE'
const WebSocket = require('ws');

const rawUrl = process.env.OPENSAFARI_VM_SERVICE_WS_URL || process.env.OPENSAFARI_VM_SERVICE_URL;
if (!rawUrl) {
console.error('OPENSAFARI_VM_SERVICE_URL is empty');
process.exit(1);
}

const url = new URL(rawUrl);
if (url.protocol === 'http:') url.protocol = 'ws:';
if (url.protocol === 'https:') url.protocol = 'wss:';
if (url.protocol !== 'ws:' && url.protocol !== 'wss:') {
console.error(`Unsupported VM service protocol: ${url.protocol}`);
process.exit(1);
}
if (url.pathname.endsWith('/ws')) {
url.pathname = `${url.pathname}/`;
} else if (!url.pathname.endsWith('/ws/')) {
url.pathname = url.pathname.replace(/\/?$/, '/ws/');
}

const ws = new WebSocket(url);
const timer = setTimeout(() => {
console.error(`Timed out waiting for getVM response from ${url.href}`);
ws.terminate();
process.exit(1);
}, 2000);

ws.on('open', () => {
ws.send(JSON.stringify({ jsonrpc: '2.0', id: 'warmup', method: 'getVM' }));
});

ws.on('message', (data) => {
let message;
try {
message = JSON.parse(data.toString());
} catch (error) {
console.error(`Invalid VM service JSON: ${error.message}`);
return;
}

if (message.id !== 'warmup') return;

clearTimeout(timer);
ws.close();
if (message.error) {
console.error(`getVM returned error: ${JSON.stringify(message.error)}`);
process.exit(1);
}

const vmType = message.result && message.result.type;
if (vmType !== 'VM') {
console.error(`getVM returned unexpected result type: ${vmType || 'missing'}`);
process.exit(1);
}

console.log(`VM service websocket getVM accepted at ${url.href}`);
process.exit(0);
});

ws.on('error', (error) => {
clearTimeout(timer);
console.error(`VM service websocket error: ${error.message}`);
process.exit(1);
});
NODE
then
echo "DDS VM service websocket responsive (attempt $i)"
sleep 8
exit 0
fi
if [ "$i" -eq 1 ] || [ $((i % 5)) -eq 0 ]; then
echo "DDS VM service websocket not ready (attempt $i)"
fi
sleep 2
done
echo "::error::DDS HTTP endpoint did not respond within warmup window"
echo "::error::DDS VM service websocket did not accept getVM within warmup window"
exit 1

- name: Run Flutter VM headless input live test
Expand Down
75 changes: 75 additions & 0 deletions .github/workflows/issue-10-healthy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Depends on `npm run verify:issue-10-healthy` added in PR for issue #47 part 1.
# Merge PR#1 before triggering this workflow.

name: Issue #10 healthy-path verification

on:
workflow_dispatch:
inputs:
device_id:
description: 'Simulator UDID to target'
required: false
default: '3BEF4E9A-069A-4419-AC62-AB889348EF12'
flutter_bundle_id:
description: 'Bundle ID of the Flutter fixture app'
required: false
default: 'com.example.osftest'

jobs:
verify:
runs-on: macos-latest

steps:
- uses: actions/checkout@v4

- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '26.4'

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Build
run: npm run build

- name: Boot simulator
run: |
xcrun simctl boot "${{ inputs.device_id }}" || true
xcrun simctl bootstatus "${{ inputs.device_id }}" -b

- name: Install fixture app
run: |
# TODO: install fixture ${{ inputs.flutter_bundle_id }} — see tests/integration/fixtures/flutter_sample
# Real fixture build/install pipeline is out of scope for this PR.
# The verify:issue-10-healthy script performs a preflight check and
# will fail cleanly with a descriptive error if the app is not installed.
echo "TODO: install fixture ${{ inputs.flutter_bundle_id }} — see tests/integration/fixtures/flutter_sample"

- name: Run healthy-path verification
run: |
set -o pipefail
npm run verify:issue-10-healthy 2>&1 | tee verify-issue-10-healthy.log
env:
OSF_DEVICE_ID: ${{ inputs.device_id }}
OSF_FLUTTER_BUNDLE_ID: ${{ inputs.flutter_bundle_id }}

- name: Append output to job summary
if: always()
run: |
echo '## verify:issue-10-healthy output' >> "$GITHUB_STEP_SUMMARY"
echo '```' >> "$GITHUB_STEP_SUMMARY"
cat verify-issue-10-healthy.log >> "$GITHUB_STEP_SUMMARY" 2>/dev/null || echo '(no output captured)' >> "$GITHUB_STEP_SUMMARY"
echo '```' >> "$GITHUB_STEP_SUMMARY"

- name: Upload verification report
if: always()
uses: actions/upload-artifact@v4
with:
name: issue-10-healthy-report
path: scripts/.verify-issue-10-healthy.report.json
if-no-files-found: warn
Loading
Loading