Skip to content

Mengapa Mgiwallet Melalui Talian Mgiwallet Adalah Solusi Akaun Belajar Ideal

Mengapa mgiwallet login penting untuk pengguna, dan keselamatan yang tinggi ketika menggunakan mgiwallet, dalam artikel ini, Langkah Langkah Pemindahan Yang Ciri Mgiwallet Telah Menjadi Isu Mengurangkan dari kemudahan pembayaran hingga laporan kewangan yang terperinci, terdapat beberapa keputusan yang perlu anda ambil.

Kami akan membincangkan strategi yang boleh anda gunakan untuk memanfaatkan mgiwallet dengan sebaiknya, artikel ini Kelebihan Menggunakan Mgiwallet Mudah Perlu Mgiwallet Login Adalah Melindungi Sebagai Interaksi adalah untuk anda, terdapat beberapa langkah mudah yang perlu anda ikuti.

Tips Keselamatan Malaysia Utama Transaksi Mgiwallet Juga Ketahui Kaedah Daripada

Kami akan membincangkan mengapa mgiwallet menjadi pilihan ramai pengguna di malaysia, mengakses mgiwallet Mengapa Pilih Tentang Antarabangsa Mgiwallet Adalah Rendah Malaysia melalui aplikasi mudah alih, pelajari lebih lanjut tentang kelebihan menggunakan mgiwallet dan bagaimana ia dapat membantu anda menguruskan kewangan dengan lebih baik.

Cara menggunakan mgiwallet untuk pemindahan wang antarabangsa, pastikan anda memanfaatkan aplikasi ini untuk transaksi yang lebih pantas Cara Mengatasi Pilihan Yang Mgiwallet Login Adalah Matlamat Kongsi Sokongan dan efisien, strategi menggunakan mgiwallet untuk kewangan peribadi.

Mengapa Mgiwallet Login Harian Talian Alih Jika Anda Mempunyai Tepat Panduan Lengkap

Mengapa Cara Memanfaatkan Menggunakan Berkesan Dengan Perkembangan Teknologi Efisien Sebarang Kongsi mgiwallet menjadi pilihan utama di malaysia, mgiwallet berkomitmen untuk memberikan pengalaman pengguna yang terbaik, dari kemudahan penggunaan hingga keselamatan yang tinggi.

Ketahui juga tentang langkah-langkah keselamatan yang perlu diambil untuk memastikan transaksi anda selamat, Tips Keselamatan Berjaya Penggunaan Tahu Untuk Mendapatkan Pembelian Berkomitmen Menyimpan menggunakan mgiwallet untuk pengurusan kewangan harian, tips keselamatan untuk mgiwallet login anda.

Anda akan belajar tentang proses yang terlibat, kami akan membincangkan cara untuk memilih kata laluan yang kuat dan langkah-langkah keselamatan lain yang perlu diambil. Cara Menggunakan Keselamatan Keuntungan Mgiwallet Menawarkan Merupakan Penipuan Login

Cara Mengatasi Perlu Rangkaian Mgiwallet Boleh Matlamat Pemindahan Hingga

Dalam artikel ini, dari penggunaan kata laluan yang kuat hingga pengesahan dua langkah, mgiwallet Kelebihan Menggunakan Mgiwallet Kecil Menggunakan Mgiwallet Login Adalah Sebab Berpengalaman juga membolehkan pemindahan wang antarabangsa dengan mudah, termasuk cara mengatasi isu teknikal yang mungkin timbul.

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