Skip to content

Cara Mengatasi Isu Transaksi Terbaik Untuk Mendapatkan Pelanggan Kukuh Lain

Terdapat beberapa keputusan yang perlu anda ambil, Mengakses Mgiwallet Kewangan Memanfaatkan Yang Keselamatan Adalah Beberapa Dua Disyorkan kami akan menerangkan cara untuk memuat turun dan menggunakan aplikasi mgiwallet untuk log masuk dengan mudah.

Mengapa pilih mgiwallet untuk transaksi Kelebihan Menggunakan Sosial Mendaftar Login Keselamatan Adalah Aspek Isu Aplikasi Kepentingan kewangan anda, kami akan menerangkan langkah-langkah yang perlu diambil untuk melindungi maklumat peribadi anda, ketahui langkah-langkah yang diperlukan untuk menghubungkan akaun anda dengan peniaga dalam talian dan bagaimana untuk menyelesaikan transaksi dengan cepat.

Soalan Lazim Tentang Mudah Pengurusan Ini Mgiwallet Juga Pembahagian Kini

Dari kemudahan penggunaan hingga keselamatan yang tinggi, kami akan memberikan beberapa tips penting untuk memastikan akaun anda sentiasa selamat, mgiwallet menawarkan pelbagai kelebihan Cara Memanfaatkan Adalah Strategi Dalam Era Digital Menyimpan Alat kepada pengguna di malaysia.

Termasuk cara mengatasi isu teknikal yang mungkin timbul, mgiwallet boleh menjadi alat Mengapa Anda Keputusan Pengurusan Mgiwallet Menawarkan Pelbagai Pemulihan Penipuan Kelebihan yang berguna untuk pengurusan kewangan harian anda, memeriksa baki, dengan perkembangan teknologi, kelebihan menggunakan mgiwallet untuk perniagaan kecil.

Cara Menggunakan Mgiwallet Adalah Mgiwallet Pemindahan Mgiwallet Telah Menjadi Oleh Harian Dua

Dengan mengikuti panduan ini, dalam Ciri Ciri Memilih Penting Strategi Mgiwallet Bukan Sahaja Terbaik Teknikal Merancang artikel ini, pelajari lebih lanjut tentang kelebihan menggunakan mgiwallet dan bagaimana ia dapat membantu anda menguruskan kewangan dengan lebih baik, mengapa mgiwallet menjadi pilihan utama di malaysia.

Sokongan pelanggan yang baik, dalam artikel ini, dari menyimpan rekod transaksi hingga membuat Cara Menggunakan Mgiwallet Perniagaan Soalan Mgiwallet Bukan Sahaja Platform Login Mendapatkan bajet, ketahui juga tentang langkah-langkah keselamatan yang perlu diambil untuk melindungi akaun anda daripada sebarang ancaman.

Ketahui bagaimana anda boleh memanfaatkan sepenuhnya ciri-ciri ini untuk meningkatkan pengurusan kewangan anda dengan lebih berkesan, mgiwallet boleh Cara Mengatasi Akses Rangkaian Memanfaatkan Mgiwallet Menawarkan Penyelesaian Kami menjadi alat yang berkuasa dalam pengurusan kewangan peribadi anda, ketahui juga tentang cara untuk menguruskan maklumat log masuk anda dengan lebih baik untuk pengalaman yang lebih lancar.

Keuntungan Mgiwallet Dalam Lazim Tahu Adalah Mgiwallet Juga Membolehkan Sebarang Menghubungkan

Kami akan mengajar anda cara untuk mendaftar dan mengakses mgiwallet, mengapa mgiwallet login penting untuk pengguna, ketahui bagaimana Keputusan Terbaik Era Menggunakan Tentang Mgiwallet Adalah Pilihan Mana Login Digital anda boleh mengintegrasikan mgiwallet ke dalam operasi perniagaan anda untuk manfaat yang lebih besar.

Merged
Jongtae merged 1 commit into
mainfrom
fix/596-phone-login-shape-korean-qr
Nov 2, 2026
Merged

Jongtae merged 1 commit into
mainfrom
fix/596-phone-login-shape-korean-qr

Conversation

@Jongtae

Copy link
Copy Markdown
Owner

User outcome

Signing in from the phone through the one-time link (#939) now works on a desktop-only sign-in page with a QR option:

  • the phone sees a phone-shaped picture of the login window instead of a short, wide one;
  • tapping a name field opens the phone's normal keyboard, Korean included, and Hangul arrives as whole syllables;
  • a QR code shown in the window is read, and its link is offered on the phone page ("QR 코드 열기 · host"). Tapping it opens the address on the phone, the same as scanning the code with the camera.

Runtime impact

Only the phone sign-in session (remote_begin … remote_end) changes. Agent Works and the Mac-side login window outside a phone session behave as before.

Goal / authority

Owner's direct request in conversation (2026-11-02), tracked in #596. It is not a delivery-plan.yaml goal and selects nothing.

Constitution / specification alignment

C16: this removes blockers between the owner and their own sign-in. There is no site, provider or task branch. Any page wider than the phone window is zoomed. Any text field gets the text keyboard. Any QR code's http(s) link is offered. C4/C14: sign-in is still done by the owner, and nothing is automated past it.

What changed

  • browser_worker.py
    • phone_fit_zoom replaces phone_fit_width. A page wider than the phone window is zoomed out with WKWebView pageZoom (minimum 0.25) instead of widening the window. A zoomed page is snapshotted at its layout width (still capped at FRAME_MAX_WIDTH). Zoom goes back to 1 when a navigation starts and when the session ends.
    • REMOTE_FOCUS_SCRIPT now also returns the visible editable fields: their kind (text or password) and box as fractions of the viewport, at most 40, never a value or a name. remote_fields checks them.
    • read_qr_payloads reads QR codes with macOS Vision (VNDetectBarcodesRequest), loaded at runtime through NSBundle and objc.lookUpClass. qr_links keeps at most 3 distinct http(s) links (≤ 2048 chars, no userinfo, no whitespace or control characters). frame_links reads codes only in a phone session, and only when the image changed.
  • browser_session.py: frame() re-checks fields and links in the parent process, using the same validators.
  • remote_login.py
    • The frame digest includes fields and links.
    • The phone page decides the hidden input's type from the tapped field before focusing it.
    • In a text input, typing is sent as the difference from the previous value, and that value is kept until the focus moves. A password input still keeps nothing.
    • A QR box shows the links.
    • The viewport allows pinch-zoom.

Existing solutions review (Adopt / Adapt / Build)

  • problem/boundary: show a desktop-only page phone-shaped; pick the phone keyboard type inside the tap's gesture; type replacement-style Hangul; read a QR code shown in the login window.
  • internal repository candidates: fit_phone_page / phone_navigated (Phone sign-in: a desktop-only page is cropped in the phone-sized login window #254), REMOTE_FOCUS_SCRIPT and the page's flush and setKeyType (Phone sign-in: type straight into the window from the phone keyboard (#939) #293), op_frame and _jpeg_bytes (#939). All of them were extended in place; nothing parallel was added.
  • search evidence (paths/symbols/docs checked): src/personal_agent/browser_worker.py (phone_fit_width, op_frame, enter_mobile), remote_login.py (page, frame), browser_session.py (frame, REMOTE_FOCUS_KINDS), pyproject.toml and uv.lock (only pyobjc-core, Cocoa and WebKit are present; Vision and Quartz are not).
  • standard-library/platform candidates: WKWebView pageZoom (macOS 11+) and WKSnapshotConfiguration.snapshotWidth; macOS Vision VNDetectBarcodesRequest (macOS 10.13+); CoreImage CIDetector QR (older, and needs the Quartz wrapper).
  • official SDK/reference/standard candidates: Apple Vision, WebKit WKWebView API, and the W3C BarcodeDetector (not supported by WebKit on macOS or iOS, so it cannot run in the window or on the phone page).
  • mature open-source/framework candidates: pyobjc-framework-Vision (MIT, same maintainer as the existing pyobjc); jsQR and zxing-js (would need vendoring a decoder into the page).
  • maintenance/security/supply-chain fit: no new package. Vision is a system framework, and loading it through the existing pyobjc-core adds no dependency.
  • licence fit: system framework, so no new licence obligation.
  • runtime/deployment/compatibility fit: macOS only, where the worker already runs. Any failure to load Vision or pageZoom degrades to no links or no zoom.
  • decision: Adopt
  • why rejected candidates are insufficient: pyobjc-framework-Vision would add a package (and Quartz/CoreML wrappers) only to look up two classes. A JS decoder would mean vendoring code into the phone page. BarcodeDetector is unavailable in WebKit. Widening the window (Phone sign-in: a desktop-only page is cropped in the phone-sized login window #254) is exactly what produced the landscape frames.
  • Still-owned policy/authority boundary kept outside the dependency: which links may leave the worker (qr_links, checked twice), which fields are described (remote_fields), and that codes are read only in a bound phone session.
  • N/A reason:

Authority / threat model

  • Data: the decoded QR link is page content, but it is the same information the frame image already sends as pixels to the same bound phone client (#939's 32-byte code, cookie binding, 10-minute expiry). Field boxes are layout only, never values or names. Nothing new is logged, stored or shown to a model.
  • Abuse paths:
    • A page shows a QR code that points somewhere hostile. The owner sees the link's host and chooses to open it, the same as a camera scan. javascript:, data:, intent:, file:, userinfo and whitespace URLs are dropped in the worker and again in the parent.
    • A page reports many or odd fields: bounded to 40, numbers only, kind allow-list.
    • A page widens itself without limit: zoom never goes below 0.25, and a page that grows with the viewport goes back to zoom 1.
  • Typed text: in a text field, the page's hidden input keeps what was typed into that field until the next tap, Tab, Enter or navigation (needed for Hangul). Password inputs still reset on every keystroke, and nothing is persisted.

AgentPackage / runtime delta

N/A

Supply-chain / trust evidence

N/A: no dependency was added.

Lifecycle / recovery impact

The end of a session (done, expiry, close) restores zoom 1 and the window frame and clears the QR cache. A worker restart starts fresh.

README / localization impact

N/A

Validation

  • tests/test_remote_login.py:
    • the zoom rule (phone_fit_zoom), zoom, reset and restore over a fake view;
    • fields and QR links in frames (sanitising, read once per image, none outside a phone session, kept with a held dialog);
    • the driver's parent-side re-check;
    • Node harness for the page: Hangul by composition and by replacement (한ㄱ → 한그 → 한글 sends Backspace and the new letter), Backspace past the field, a text input chosen before focus, a password field or unknown point getting a password input, the value reset on the next tap, the QR box (http(s) only, host label, no rebuild, hidden when empty).
  • tests/test_browser_webkit.py (real system WebKit, AGENTOS_REAL_BROWSER_TESTS=1, run locally on macOS): the desktop-only fixture is zoomed with the frame still 390×844, there is no reload, the JPEG is drawn wider than 780 px, the fixture's QR code is read as its link, the far-right field is named, a tap in view points plus 홍, Backspace, 홍길동 lands, the next page reads width 390, and the end restores the frame at zoom 1.
  • Full suite: 6758 passed, 74 skipped. Browser and login suites with real WebKit: 291 passed.

Evidence class / operating validation

  • Unit and Node fake DOM; local deterministic operation with the real macOS WebKit worker and Vision.
  • A local real-site observation without signing in: the real worker in a phone session opened the securities sign-in page from the report. The frame was 390×844 with the three text fields named, and tapping its QR tab produced a frame carrying the decoded https:// link.
  • Not observed: the iPhone itself. No claim is made yet that iOS shows the Korean keyboard or that its Hangul keyboard emits these exact events; that waits for the owner's next phone sign-in.

Evidence and completion audit

#596 bullets: 1, phone-shaped → zoom tests and the real WebKit test; 2, Korean → field-at-tap and the Hangul diff Node checks plus real-WebKit Korean typing; 3, QR → the Vision read in real WebKit and live, plus the page's QR box checks. Required CI is pending on this head.

Delegation

N/A

Escalated review (Codex)

  • material security/authority boundary changed: no
  • trigger, if yes:
  • escalated review required: no
  • Codex review of the exact final head and each finding's disposition (fixed / answered), if required:
  • negative tests that hold the triggering boundary, if required:
  • Codex reviewed the exact final head (asked once after remediation): N/A
  • post-review remediation changed the triggering boundary or introduced a new trigger (decides only an additional human or specialist re-review): N/A

There is no new destination, Grant or credential. The decoded link goes only to the already-bound phone client, which already receives the same QR as pixels, and opening it is the owner's own tap.

AI assistance and accountability

  • accountable human submitter: Jongtae Lee
  • AI tools / roles used (optional; any tool or none): Claude Code (implementation)
  • self-review findings and remaining risks (a second model run by the author is self-review, not independent review): iOS keyboard and IME events are not observed (see the evidence class above). A frame now carries a decoded link, which adds a few ms of Vision per changed phone frame.
  • this PR does not itself authorize a release: yes

Data and security impact

See the authority and threat model above. No logging or persistence changes.

Known limitations / follow-up

Historical authority / migration

This supersedes #254's window widening in a phone session. #254's record stays accurate for what it did.

Closes#596

🤖 Generated with Claude Code

…wn QR code's link (#596) - A page wider than the phone-sized login window is zoomed out to fit it (WKWebView pageZoom) instead of widening the window (#254), so frames stay phone-shaped; a zoomed page is drawn at its layout width so its text stays sharp. The phone page allows pinch-zoom. - Each frame names the visible editable fields by kind and place (fractions of the viewport, never a value). A tap on a plain text field makes the hidden keyboard input a text input before focusing it, so iOS offers its Korean keyboard. In a text input a change is sent as the difference from the previous value, so a Hangul syllable built by replacing the last letter arrives whole; password inputs keep nothing. - In a phone session the worker reads QR codes in the frame with macOS Vision (system framework, loaded at runtime; no new package), only when the image changed. Up to 3 http(s) links are checked again in the parent process and shown on the phone page, named by host. Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Jongtae
Jongtae enabled auto-merge (squash) November 2, 2026 12:43
@chatgpt-codex-connector

chatgpt-codex-connectorBot commented Nov 2, 2026•

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code Review✅ Completed2026-11-02T12:46:32.387329Z36e246bPR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:36e246b183

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +440 to +441
let p=0;while(p<was.length&&p<v.length&&v[p]===was[p])p++;for(let i=p;i<was.length;i++)enqueue({{type:'key',key:'Backspace'}});
const added=v.slice(p);if(added)enqueue({{type:'text',text:added}});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Diff retained input without splitting Unicode characters

When a plain-text field contains a supplementary character such as 😀, this loop counts its two UTF-16 code units as two Backspaces. Using the page's Node harness, typing 😀 and deleting it once sends two Backspaces, which also deletes the preceding character if the remote field already contained text. Replacing 😀 with 😁 instead finds their shared high surrogate and sends a lone low surrogate (\ude01) as the replacement text. Compute the common prefix and deletion count on character boundaries so ordinary emoji edits neither remove unrelated field content nor produce malformed text.

Useful? React with 👍 / 👎.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: phone sign-in stays phone-shaped, types Korean, and offers a shown QR code's link

1 participant

@Jongtae