<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>mizore / notes</title>
    <link>https://mizore.blog/en/</link>
    <link xmlns="http://www.w3.org/2005/Atom" href="https://mizore.blog/en/feed.xml" rel="self" type="application/rss+xml"></link>
    <description>Notes on code, tools, and keeping things simple.</description>
    <language>en</language>
    <lastBuildDate>Sun, 25 Oct 2026 00:00:00 +0000</lastBuildDate>
    <item>
      <title>gdirect: Direct Google Drive Access from the Terminal — How It Works and Setup Guide</title>
      <link>https://mizore.blog/en/posts/gdirect/</link>
      <description>&lt;p&gt;Pulling tens of gigabytes of datasets or backups from Google Drive over a proxy usually burns through expensive data quotas and bottlenecks on proxy node bandwidth; downloading in a browser often drops partway through and forces you to start over. To solve this, I wrote &lt;a href=&#34;https://github.com/mizorewww/gdirect&#34;&gt;gdirect&lt;/a&gt;: a terminal tool for browsing, downloading, uploading, and mounting Google Drive.&lt;/p&gt;&#xA;&lt;p&gt;This post is organized into three parts: &lt;strong&gt;a quick TL;DR on how it &amp;quot;disguises&amp;quot; connections to reach Google directly&lt;/strong&gt;, &lt;strong&gt;a ready-to-use installation and 10-minute illustrated setup guide&lt;/strong&gt;, and finally &lt;strong&gt;a technical deep dive into the underlying source code&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr-how-do-we-connect-directly-without-a-proxy&#34;&gt;TL;DR: How Do We Connect Directly Without a Proxy?&lt;/h2&gt;&#xA;&lt;p&gt;On networks in mainland China, Google Drive&#39;s domains (&lt;code&gt;drive.google.com&lt;/code&gt;, &lt;code&gt;www.googleapis.com&lt;/code&gt;, &lt;code&gt;drive.usercontent.google.com&lt;/code&gt;) are blocked. At the same time, to keep basic services like Chrome updates, Android connectivity checks, and Google Fonts working in mainland China, Google maintains a pool of directly reachable edge servers inside domestic carrier backbones (China Telecom, Unicom, and Mobile)—the domestic IPs (such as Guangzhou Telecom&#39;s &lt;code&gt;183.56.143.147&lt;/code&gt;) behind the domains categorized under &lt;strong&gt;&lt;code&gt;google-cn&lt;/code&gt;&lt;/strong&gt; in routing rulesets like &lt;a href=&#34;https://github.com/DustinWin/ruleset_geodata&#34;&gt;DustinWin/ruleset_geodata&lt;/a&gt; (&lt;code&gt;dl.google.com&lt;/code&gt;, &lt;code&gt;g.cn&lt;/code&gt;, &lt;code&gt;fonts.googleapis.com&lt;/code&gt;, etc.).&lt;/p&gt;&#xA;&lt;p&gt;Here is the key insight: &lt;strong&gt;those domestic &lt;code&gt;google-cn&lt;/code&gt; edge nodes run the exact same unified reverse proxy—Google Front End (GFE)—connected over Google&#39;s private backbone to the global Drive backends, and they present valid official TLS certificates for &lt;code&gt;*.googleapis.com&lt;/code&gt; and &lt;code&gt;*.googleusercontent.com&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;gdirect&lt;/code&gt; takes advantage of this by &lt;strong&gt;&amp;quot;borrowing a domestic &lt;code&gt;google-cn&lt;/code&gt; IP at the transport layer while sending authentic Google Drive requests (domains and certificate checks) at the application layer&amp;quot;&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Point underlying TCP sockets at domestic &lt;code&gt;google-cn&lt;/code&gt; node IPs&lt;/strong&gt;: Bypassing poisoned system DNS, &lt;code&gt;gdirect&lt;/code&gt; starts from a built-in seed IP (&lt;code&gt;183.56.143.147&lt;/code&gt;) and candidate pool, connecting directly to port 443. Candidates that pass live probes (verifying an official Google TLS certificate + a valid Drive v3 API response) are cached in local SQLite. During socket creation (via Rust&#39;s &lt;code&gt;reqwest::resolve&lt;/code&gt; and a custom &lt;code&gt;getaddrinfo&lt;/code&gt; hook in patched C++ &lt;code&gt;libaria2&lt;/code&gt;), even across multiple cross-domain HTTP 302 redirects mid-download, every target IP is pinned to that domestic &lt;code&gt;google-cn&lt;/code&gt; node—so the physical packet path stays inside domestic carrier backbones and never crosses the firewall.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Keep real Google Drive hostnames and strict TLS verification at the upper layers&lt;/strong&gt;: Once connected to the domestic &lt;code&gt;google-cn&lt;/code&gt; IP, application-layer requests still address standard &lt;code&gt;https://www.googleapis.com&lt;/code&gt; (API and chunked uploads) and &lt;code&gt;https://drive.usercontent.google.com&lt;/code&gt; / &lt;code&gt;https://*.googleusercontent.com&lt;/code&gt; (file downloads). The domestic GFE node routes the request by hostname over Google&#39;s internal backbone to fetch your Drive data, while the client strictly verifies TLS certificates against the real Google hostnames as usual (and if an ISP middlebox resets connections on cleartext SNI, &lt;code&gt;--sni&lt;/code&gt; / &lt;code&gt;--no-sni&lt;/code&gt; can rewrite or strip the TLS SNI extension).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Separate the control plane from the data plane&lt;/strong&gt;: Login and token refreshes (&lt;code&gt;accounts.google.com&lt;/code&gt;, &lt;code&gt;oauth2.googleapis.com&lt;/code&gt;), which take only a few kilobytes, go through the normal system network (your proxy) so authentication always works; bandwidth-heavy directory listing, multi-connection concurrent downloads, and 32 MiB resumable uploads all go straight through the domestic &lt;code&gt;google-cn&lt;/code&gt; IP—saturating your local broadband without spending a single byte of proxy traffic.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Traffic Type&lt;/th&gt;&#xA;&lt;th&gt;Commands / Domains&lt;/th&gt;&#xA;&lt;th&gt;Route&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Drive API, downloads, uploads&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;browse&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;download&lt;/code&gt;, &lt;code&gt;upload&lt;/code&gt; (&lt;code&gt;www.googleapis.com&lt;/code&gt;, &lt;code&gt;drive.usercontent.google.com&lt;/code&gt;, &lt;code&gt;*.googleusercontent.com&lt;/code&gt;)&lt;/td&gt;&#xA;&lt;td&gt;Scanned domestic &lt;code&gt;google-cn&lt;/code&gt; IP. Hostnames and TLS certificate verification remain unchanged; &lt;code&gt;--sni&lt;/code&gt; / &lt;code&gt;--no-sni&lt;/code&gt; can rewrite or strip TLS SNI&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Login &amp;amp; token refresh&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;login&lt;/code&gt; and automatic token refresh (&lt;code&gt;accounts.google.com&lt;/code&gt;, &lt;code&gt;oauth2.googleapis.com&lt;/code&gt;)&lt;/td&gt;&#xA;&lt;td&gt;System network (uses system DNS and your proxy)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Disk mount&lt;/td&gt;&#xA;&lt;td&gt;&lt;code&gt;mount&lt;/code&gt; (invokes &lt;code&gt;rclone&lt;/code&gt; under the hood)&lt;/td&gt;&#xA;&lt;td&gt;System network&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Important Note for Users in Mainland China:&lt;/strong&gt;&#xA;Even if your proxy client already sets &lt;code&gt;google-cn&lt;/code&gt; from &lt;a href=&#34;https://github.com/DustinWin/ruleset_geodata&#34;&gt;DustinWin/ruleset_geodata&lt;/a&gt; to &lt;code&gt;DIRECT&lt;/code&gt;, running &lt;code&gt;gdirect&lt;/code&gt; with your proxy (especially TUN mode) enabled &lt;strong&gt;can still end up routing your downloads through the proxy!&lt;/strong&gt; That&#39;s because although &lt;code&gt;gdirect&lt;/code&gt; connects to a &lt;code&gt;google-cn&lt;/code&gt; IP, its TLS handshake sends Google Drive hostnames (&lt;code&gt;drive.usercontent.google.com&lt;/code&gt;, &lt;code&gt;www.googleapis.com&lt;/code&gt;). In standard rulesets, those domains belong to &lt;code&gt;google&lt;/code&gt; (proxied) rather than &lt;code&gt;google-cn&lt;/code&gt; (direct), so a TUN sniffer will inspect the TLS SNI, match the &lt;code&gt;google&lt;/code&gt; rule, and hijack the connection into your proxy tunnel.&#xA;Make sure to pick one of these two setups (see &lt;a href=&#34;#mainland-china-network-and-proxy-configuration-guide&#34;&gt;Mainland China Network and Proxy Configuration Guide&lt;/a&gt; below for details):&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Add direct rules in your proxy client&lt;/strong&gt;: explicitly route the Drive domains above (or the &lt;code&gt;gdirect&lt;/code&gt; process) to &lt;code&gt;DIRECT&lt;/code&gt; and exclude them from &lt;code&gt;fake-ip&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Quit your proxy or disable TUN during transfers&lt;/strong&gt;: keep your proxy on for the one-time &lt;code&gt;gdirect login&lt;/code&gt;, then quit the proxy (or turn off TUN mode) when running &lt;code&gt;scan&lt;/code&gt; and &lt;code&gt;download&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;p&gt;Prebuilt binaries are provided for &lt;strong&gt;macOS 15+&lt;/strong&gt; (Apple Silicon / Intel), &lt;strong&gt;Linux x86_64&lt;/strong&gt; (glibc 2.35+, e.g. Ubuntu 22.04+, Debian 12+, Fedora, Arch), and &lt;strong&gt;Windows x86_64&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;option-1-one-line-install-script&#34;&gt;Option 1: One-Line Install Script&lt;/h3&gt;&#xA;&lt;p&gt;macOS / Linux:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/mizorewww/gdirect/main/scripts/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;sh&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Windows PowerShell:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;scriptblock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Invoke-RestMethod&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://raw.githubusercontent.com/mizorewww/gdirect/main/scripts/install.ps1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;powershell&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;The installer places &lt;code&gt;gdirect&lt;/code&gt; and its bundled &lt;code&gt;cacert.pem&lt;/code&gt; into &lt;code&gt;~/.local/bin&lt;/code&gt; (&lt;code&gt;%LOCALAPPDATA%\gdirect\bin&lt;/code&gt; on Windows).&lt;/p&gt;&#xA;&lt;p&gt;If you also want to use &lt;code&gt;gdirect mount&lt;/code&gt; to mount Google Drive as a local disk, pass &lt;code&gt;--with-mount&lt;/code&gt; (&lt;code&gt;-WithMount&lt;/code&gt; in PowerShell) to automatically install the mount dependencies (&lt;code&gt;rclone 1.75.2+&lt;/code&gt;, plus &lt;code&gt;fuse3&lt;/code&gt; on Linux or &lt;code&gt;WinFsp&lt;/code&gt; via &lt;code&gt;winget&lt;/code&gt; on Windows):&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/mizorewww/gdirect/main/scripts/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash -s -- --with-mount&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;sh&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;option-2-homebrew-macos--linux&#34;&gt;Option 2: Homebrew (macOS / Linux)&lt;/h3&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;brew tap mizorewww/gdirect https://github.com/mizorewww/gdirect&#xA;brew install mizorewww/gdirect/gdirect&#xA;brew install rclone   &lt;span class=&#34;c1&#34;&gt;# Only needed for `gdirect mount`; Linux also requires `fuse3` from your system package manager&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;sh&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;To upgrade later, run &lt;code&gt;brew update &amp;amp;&amp;amp; brew upgrade gdirect&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;one-time-google-cloud-setup-guide-10-minutes&#34;&gt;One-Time Google Cloud Setup Guide (~10 Minutes)&lt;/h2&gt;&#xA;&lt;p&gt;To avoid rate-limiting (&lt;code&gt;429 Too Many Requests&lt;/code&gt;) or bans caused by everyone sharing a single public OAuth client, &lt;code&gt;gdirect&lt;/code&gt; does not ship a shared client ID. Instead, you create your own &lt;strong&gt;Desktop app&lt;/strong&gt; OAuth client in your personal Google Cloud project. You only need to do this once, and it is completely free.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-create-a-project-and-enable-the-drive-api&#34;&gt;1. Create a Project and Enable the Drive API&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Open the &lt;a href=&#34;https://console.cloud.google.com/&#34;&gt;Google Cloud Console&lt;/a&gt;, click the project picker at the top of the page, and click &lt;strong&gt;New project&lt;/strong&gt; in the top-right corner. Name it anything you like (e.g. &lt;code&gt;gdirect&lt;/code&gt;), leave &lt;strong&gt;Location&lt;/strong&gt; as &lt;strong&gt;No organization&lt;/strong&gt; for a personal account, click &lt;strong&gt;Create&lt;/strong&gt;, and make sure the new project is selected at the top.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/227da6b0853f1e9f1bd3d6804f483597ce7217450ec04377447a2b6c51eb51f6.webp&#34; alt=&#34;Creating a new project in the Google Cloud Console&#34; decoding=&#34;async&#34; fetchpriority=&#34;high&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/25e786a94dff774300f684fbe675525a7f82a90a4f3b8578bdba3ddf1863ec7a.webp 720w, https://mizore.blog/images/227da6b0853f1e9f1bd3d6804f483597ce7217450ec04377447a2b6c51eb51f6.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Open the &lt;a href=&#34;https://console.cloud.google.com/apis/library/drive.googleapis.com&#34;&gt;Google Drive API&lt;/a&gt; page, confirm your new project is selected at the top, and click &lt;strong&gt;Enable&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/b84f0601e820434a99963946f57ff312f6110e50881f0d7c1347e5c6836b9990.webp&#34; alt=&#34;Enabling the Google Drive API&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/d2d2e7c8c0eb550cd9975ae7df86bb2e549b4d5cb69577b9e4f207c38136ac89.webp 720w, https://mizore.blog/images/b84f0601e820434a99963946f57ff312f6110e50881f0d7c1347e5c6836b9990.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once enabled, the page shows the service name &lt;code&gt;drive.googleapis.com&lt;/code&gt; with status &lt;strong&gt;Enabled&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/5fa0e312eeb0c5ce4708715c0655f507d6f1dd8ffc9a1b68e7076f8bcee35ae5.webp&#34; alt=&#34;Confirming that the Google Drive API is enabled&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/5aa003706de18fec8763a7f1f1416adca22b86b1743de5ee1d1c4bd0f9cc63b2.webp 720w, https://mizore.blog/images/5fa0e312eeb0c5ce4708715c0655f507d6f1dd8ffc9a1b68e7076f8bcee35ae5.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;2-configure-the-oauth-app&#34;&gt;2. Configure the OAuth App&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Open &lt;a href=&#34;https://console.cloud.google.com/auth/overview&#34;&gt;Google Auth Platform&lt;/a&gt; and click &lt;strong&gt;Get started&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;App information&lt;/strong&gt;: Enter an app name (e.g. &lt;code&gt;gdirect&lt;/code&gt;, shown on the consent screen), select your email address as the user support email, and click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/af8d860d5859c321ae318dab7d90038bfbe88e59dc1acf358da250843f599fe4.webp&#34; alt=&#34;Entering the OAuth app name and support email&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/868cf435178d0450318cc0d4956be7eb2de154bacb68cdba2595af118853e3e7.webp 720w, https://mizore.blog/images/af8d860d5859c321ae318dab7d90038bfbe88e59dc1acf358da250843f599fe4.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Audience&lt;/strong&gt;: Choose &lt;strong&gt;External&lt;/strong&gt; and click &lt;strong&gt;Next&lt;/strong&gt; (personal accounts cannot choose Internal).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/2d099de3d6f1255b437cbc02c7d2d32abc06f3ae9e4de4afbd07d2244469e395.webp&#34; alt=&#34;Selecting External audience&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/a4a128070612087c09608ca332e65ce1e44ade5851d37de2563181f254d94e8b.webp 720w, https://mizore.blog/images/2d099de3d6f1255b437cbc02c7d2d32abc06f3ae9e4de4afbd07d2244469e395.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Contact information&lt;/strong&gt;: Enter your email address and click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Finish&lt;/strong&gt;: Check the box agreeing to the Google API Services User Data Policy, click &lt;strong&gt;Continue&lt;/strong&gt;, and then click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/1f8b2061017b9ec81fdbf3adb251dc75de414bbc9b3499220dfe593c0abff777.webp&#34; alt=&#34;Agreeing to the user data policy and creating the app&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/01a49b478f3b483adb4d7ce4ca05a48a229302970ff8546ed3b423e7ddd9be42.webp 720w, https://mizore.blog/images/1f8b2061017b9ec81fdbf3adb251dc75de414bbc9b3499220dfe593c0abff777.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;3-add-the-drive-scope&#34;&gt;3. Add the Drive Scope&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Open &lt;strong&gt;Data Access&lt;/strong&gt; in the left sidebar and click &lt;strong&gt;Add or remove scopes&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In the drawer that opens, select &lt;code&gt;.../auth/drive&lt;/code&gt; (&amp;quot;See, edit, create, and delete all of your Google Drive files&amp;quot;). If you don&#39;t see it in the table, paste the URL below into &lt;strong&gt;Manually add scopes&lt;/strong&gt;, click &lt;strong&gt;Add to table&lt;/strong&gt;, and then click &lt;strong&gt;Update&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;https://www.googleapis.com/auth/drive&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/9ec301365079ddf7b5f38239fec7f012ca291d9dc2f5410cd4a1a55205dd653c.webp&#34; alt=&#34;Adding and selecting the auth/drive scope&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/32a60fdf56b7adacce5b4c410c766404bca94ccb029865c830ddb93df091188a.webp 720w, https://mizore.blog/images/9ec301365079ddf7b5f38239fec7f012ca291d9dc2f5410cd4a1a55205dd653c.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: After returning to the Data Access page, make sure to click &lt;strong&gt;Save&lt;/strong&gt; at the bottom of the page. Clicking Update in the drawer alone does not persist the change.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/6cc1c4e76ebd5f981820b1ea892b01e967e8abeef3454594081d06967ce8b71d.webp&#34; alt=&#34;Clicking Save at the bottom of the Data Access page&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/d921003eacdd0301478aa6a5ea63019d50bc9e7310d2528a9bf597665ce1de39.webp 720w, https://mizore.blog/images/6cc1c4e76ebd5f981820b1ea892b01e967e8abeef3454594081d06967ce8b71d.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;4-create-a-desktop-client-and-download-the-json&#34;&gt;4. Create a Desktop Client and Download the JSON&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Open &lt;strong&gt;Clients&lt;/strong&gt; in the left sidebar and click &lt;strong&gt;Create client&lt;/strong&gt;. Set &lt;strong&gt;Application type&lt;/strong&gt; to &lt;strong&gt;Desktop app&lt;/strong&gt; (Web application clients, API keys, and service-account JSONs will not work), give it any name (e.g. &lt;code&gt;gdirect Desktop&lt;/code&gt;), and click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/7245cd5c4fb7c5fb6e2382604ec69cf7559c64ed80ad7c5ad560907940406c17.webp&#34; alt=&#34;Creating a Desktop app OAuth client&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/c2a71a1ebbdc0e129577a8aa2b4a6eeabcfaf85f0dec5be4cc58974d27d8175b.webp 720w, https://mizore.blog/images/7245cd5c4fb7c5fb6e2382604ec69cf7559c64ed80ad7c5ad560907940406c17.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In the dialog that pops up, click &lt;strong&gt;Download JSON&lt;/strong&gt; &lt;strong&gt;before closing the modal&lt;/strong&gt;. Once closed, Google won&#39;t let you download the secret JSON again (if you close it by mistake, just create a new client).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/6ef9a135c4a4fd44828da2070ef67b9953b0147a32b507f9e670179b8659ac1a.webp&#34; alt=&#34;Downloading the client secret JSON file&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/485f1069d4436e8f7a5fac4f24ccbe6f5be31322ea4372f073b1cbf27d642e4f.webp 720w, https://mizore.blog/images/6ef9a135c4a4fd44828da2070ef67b9953b0147a32b507f9e670179b8659ac1a.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;5-allow-your-account-to-sign-in-and-avoid-the-7-day-expiry&#34;&gt;5. Allow Your Account to Sign In (and Avoid the 7-Day Expiry)&lt;/h3&gt;&#xA;&lt;p&gt;Newly created apps start in &lt;strong&gt;Testing&lt;/strong&gt; mode, where only listed test users are allowed to sign in:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Open &lt;strong&gt;Audience&lt;/strong&gt; in the left sidebar, click &lt;strong&gt;Add users&lt;/strong&gt; under &lt;strong&gt;Test users&lt;/strong&gt;, enter the Google account email you want to use with &lt;code&gt;gdirect&lt;/code&gt;, and click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/3dce73deeb5b0257abdb91f13eb51c98d55b87e301b0b905701731dec6dfeba3.webp&#34; alt=&#34;Adding your Google account as a test user&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/599f697dd1e4de390d1093d6e2843b18679aea141211a155d72182222bb59be0.webp 720w, https://mizore.blog/images/3dce73deeb5b0257abdb91f13eb51c98d55b87e301b0b905701731dec6dfeba3.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;While the app stays in Testing mode, refresh tokens expire after &lt;strong&gt;7 days&lt;/strong&gt;, requiring &lt;code&gt;gdirect login --reauth&lt;/code&gt; once a week.&lt;/p&gt;&#xA;&lt;p&gt;If you don&#39;t want to re-authenticate every week, simply click &lt;strong&gt;Publish app&lt;/strong&gt; at the top of the &lt;strong&gt;Audience&lt;/strong&gt; page to switch the status to &lt;strong&gt;In production&lt;/strong&gt;. A personal app used only by you does not need to go through Google&#39;s verification review, and publishing it removes the 7-day token expiration limit.&lt;/p&gt;&#xA;&lt;h3 id=&#34;6-log-in-from-the-terminal&#34;&gt;6. Log In from the Terminal&lt;/h3&gt;&#xA;&lt;p&gt;Run the command below in your terminal, replacing the path with the JSON file you downloaded:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;gdirect login --client-secret ~/Downloads/client_secret.json&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;sh&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Your browser will open automatically (if it doesn&#39;t, copy the URL printed in the terminal and open it in a browser &lt;strong&gt;on the same machine&lt;/strong&gt;, since the OAuth flow redirects back to a temporary localhost port).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Choose your Google account. Google will warn that &amp;quot;Google hasn&#39;t verified this app&amp;quot;—this is completely normal because you just created it yourself:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Testing mode&lt;/strong&gt;: Click &lt;strong&gt;Continue&lt;/strong&gt; (not &amp;quot;Back to safety&amp;quot;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;In production&lt;/strong&gt;: Click &lt;strong&gt;Advanced&lt;/strong&gt; in the bottom-left corner, then click &lt;strong&gt;Go to &lt;!-- raw HTML omitted --&gt; (unsafe)&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/16d0ca2ca0226f0282eaddc0e7523496d63c8f4f108b2c118226665f6e2a94f1.webp&#34; alt=&#34;Clicking Continue on the unverified app screen&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/c75581419f26c9fc6343c43a9323ff4ff7227a6261dcf0245a0952b202eeb05e.webp 720w, https://mizore.blog/images/16d0ca2ca0226f0282eaddc0e7523496d63c8f4f108b2c118226665f6e2a94f1.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Verify the app name and Google Drive permission scope, then click &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/2990236874548513a7d3cf18e351ff26d82f5fd485d9d39c70efcdfb38c2885d.webp&#34; alt=&#34;Granting Google Drive access on the consent screen&#34; decoding=&#34;async&#34; loading=&#34;lazy&#34; width=&#34;1600&#34; height=&#34;1197&#34; srcset=&#34;https://mizore.blog/images/451c0035c2dd1d54bd2d6fa769390ca0b25378206a7c71a3332a77e5d67675a1.webp 720w, https://mizore.blog/images/2990236874548513a7d3cf18e351ff26d82f5fd485d9d39c70efcdfb38c2885d.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Back in the terminal, once you see &lt;code&gt;Logged in&lt;/code&gt;, you&#39;re all set. You can delete the downloaded JSON file now—the client credentials are saved inside local SQLite, and re-authenticating or switching accounts later only requires &lt;code&gt;gdirect login --reauth&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Headless Server Tip&lt;/strong&gt;: On a remote server without a browser, you can authenticate on your desktop first, or import an existing &lt;code&gt;authorized_user&lt;/code&gt; credentials JSON via &lt;code&gt;gdirect login --credentials &amp;lt;PATH&amp;gt;&lt;/code&gt;. For scripts, you can also pass an access token directly via the &lt;code&gt;GDIRECT_ACCESS_TOKEN&lt;/code&gt; environment variable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;mainland-china-network-and-proxy-configuration-guide&#34;&gt;Mainland China Network and Proxy Configuration Guide&lt;/h2&gt;&#xA;&lt;p&gt;The most common question from users in mainland China is: &lt;strong&gt;My proxy client (sing-box / Mihomo / Clash) already uses &lt;a href=&#34;https://github.com/DustinWin/ruleset_geodata&#34;&gt;DustinWin/ruleset_geodata&lt;/a&gt; and routes &lt;code&gt;google-cn&lt;/code&gt; to &lt;code&gt;DIRECT&lt;/code&gt;—why does &lt;code&gt;gdirect&lt;/code&gt; traffic still get routed through my proxy?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;tracing-the-packet-path-how-does-a-proxy-sniffer-hijack-direct-traffic&#34;&gt;Tracing the Packet Path: How Does a Proxy Sniffer Hijack Direct Traffic?&lt;/h3&gt;&#xA;&lt;p&gt;Even though &lt;code&gt;gdirect&lt;/code&gt; disables HTTP/SOCKS proxy environment variables (&lt;code&gt;no_proxy&lt;/code&gt;) at the application layer, whenever your proxy client is running—especially in &lt;strong&gt;TUN virtual network interface mode&lt;/strong&gt;—every packet on the machine passes through the proxy&#39;s routing engine first. Let&#39;s trace what happens step by step:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;We borrow a &lt;code&gt;google-cn&lt;/code&gt; IP, but send Google Drive hostnames&lt;/strong&gt;:&#xA;At the socket layer, &lt;code&gt;gdirect&lt;/code&gt; replaces the destination IP with a domestic &lt;code&gt;google-cn&lt;/code&gt; edge node (such as &lt;code&gt;183.56.143.147&lt;/code&gt;). However, so that Google&#39;s edge router knows which backend service to reach and local TLS certificate verification succeeds, the TLS handshake (&lt;code&gt;ClientHello&lt;/code&gt; SNI) and HTTP &lt;code&gt;Host&lt;/code&gt; header still carry &lt;code&gt;www.googleapis.com&lt;/code&gt;, &lt;code&gt;drive.usercontent.google.com&lt;/code&gt;, and &lt;code&gt;*.googleusercontent.com&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Those Google Drive domains are NOT in the &lt;code&gt;google-cn&lt;/code&gt; ruleset!&lt;/strong&gt;&#xA;If you inspect &lt;code&gt;google-cn&lt;/code&gt; in &lt;a href=&#34;https://github.com/DustinWin/ruleset_geodata&#34;&gt;DustinWin/ruleset_geodata&lt;/a&gt;, it lists domains that are natively unblocked in mainland China—such as &lt;code&gt;dl.google.com&lt;/code&gt;, &lt;code&gt;g.cn&lt;/code&gt;, &lt;code&gt;gstatic.cn&lt;/code&gt;, &lt;code&gt;fonts.googleapis.com&lt;/code&gt;, and &lt;code&gt;clientservices.googleapis.com&lt;/code&gt;. Meanwhile, &lt;strong&gt;&lt;code&gt;www.googleapis.com&lt;/code&gt;, &lt;code&gt;drive.usercontent.google.com&lt;/code&gt;, &lt;code&gt;drive.google.com&lt;/code&gt;, and &lt;code&gt;*.googleusercontent.com&lt;/code&gt; are not in &lt;code&gt;google-cn&lt;/code&gt;—they all sit in the proxied &lt;code&gt;google&lt;/code&gt; ruleset&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TUN traffic sniffing (&lt;code&gt;sniff&lt;/code&gt;) hijacks the connection by domain&lt;/strong&gt;:&#xA;When &lt;code&gt;gdirect&lt;/code&gt; opens a connection to the domestic IP &lt;code&gt;183.56.143.147:443&lt;/code&gt;, the TUN interface intercepts the packet and uses &lt;code&gt;sniff&lt;/code&gt; (TLS SNI inspection) to see that the SNI hostname is &lt;code&gt;drive.usercontent.google.com&lt;/code&gt; or &lt;code&gt;www.googleapis.com&lt;/code&gt;. The proxy then evaluates its routing rules top-to-bottom using that sniffed domain:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;rule_set: google-cn&lt;/code&gt; (&lt;code&gt;DIRECT&lt;/code&gt;) &lt;span class=&#34;math-inline&#34;&gt;&lt;math display=&#34;inline&#34; style=&#34;font-feature-settings: &#39;dtls&#39; off;&#34; xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;→&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\rightarrow&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt; &lt;strong&gt;Miss&lt;/strong&gt; (the Drive domain isn&#39;t in &lt;code&gt;google-cn&lt;/code&gt;);&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;rule_set: google&lt;/code&gt; (&lt;code&gt;PROXY&lt;/code&gt;) &lt;span class=&#34;math-inline&#34;&gt;&lt;math display=&#34;inline&#34; style=&#34;font-feature-settings: &#39;dtls&#39; off;&#34; xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;→&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\rightarrow&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt; &lt;strong&gt;Match!&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Because domain rules precede IP rules in almost all proxy templates (or when &lt;code&gt;scan&lt;/code&gt; resolves those domains through system DNS and gets handed a &lt;code&gt;198.18.x.x&lt;/code&gt; Fake-IP), &lt;strong&gt;a connection physically destined for a domestic China Telecom IP gets misclassified as blocked Google traffic and shoved right back into your proxy tunnel!&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Once you see why this happens, picking &lt;strong&gt;either one&lt;/strong&gt; of the two approaches below solves it completely:&lt;/p&gt;&#xA;&lt;h3 id=&#34;approach-1-quit-your-proxy-or-turn-off-tun-during-scan-and-downloads&#34;&gt;Approach 1: Quit Your Proxy (or Turn Off TUN) During &lt;code&gt;scan&lt;/code&gt; and Downloads&lt;/h3&gt;&#xA;&lt;p&gt;If you don&#39;t want to touch your proxy client&#39;s routing rules, this is the simplest and cleanest workflow:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Login phase (proxy ON)&lt;/strong&gt;: With your proxy running as usual, run &lt;code&gt;gdirect login --client-secret ...&lt;/code&gt; to finish authorization (opening &lt;code&gt;accounts.google.com&lt;/code&gt; in the browser and exchanging/refreshing tokens against &lt;code&gt;oauth2.googleapis.com&lt;/code&gt; require a proxy).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Scan &amp;amp; transfer phase (quit proxy, or turn off TUN mode)&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Once logged in (&lt;code&gt;gdirect&lt;/code&gt; caches a short-lived &lt;code&gt;access_token&lt;/code&gt; valid for ~1 hour), &lt;strong&gt;quit your proxy client or turn off its TUN mode&lt;/strong&gt; (if you only use System Proxy without TUN, &lt;code&gt;gdirect&lt;/code&gt; ignores system proxy environment variables automatically, though turning off TUN is the most foolproof).&lt;/li&gt;&#xA;&lt;li&gt;Run &lt;code&gt;gdirect scan&lt;/code&gt; to find the fastest domestic &lt;code&gt;google-cn&lt;/code&gt; edge IP over your raw physical broadband.&lt;/li&gt;&#xA;&lt;li&gt;Run &lt;code&gt;gdirect download ...&lt;/code&gt; or &lt;code&gt;gdirect browse&lt;/code&gt; to download at full line speed (if your ISP resets connections on cleartext SNI, pass &lt;code&gt;--no-sni&lt;/code&gt;):&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;gdirect scan&#xA;gdirect download FILE_ID&#xA;&lt;span class=&#34;c1&#34;&gt;# If you hit connection or TLS resets (libaria2 code 1), strip SNI:&lt;/span&gt;&#xA;gdirect download FILE_ID --no-sni&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;sh&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;approach-2-add-direct-rules-in-your-proxy-client-for-drive-domains-or-the-gdirect-process&#34;&gt;Approach 2: Add Direct Rules in Your Proxy Client for Drive Domains (or the &lt;code&gt;gdirect&lt;/code&gt; Process)&lt;/h3&gt;&#xA;&lt;p&gt;If you keep your proxy and TUN mode running 24/7, the fix is straightforward: &lt;strong&gt;since the proxy hijacks traffic after sniffing the Drive hostnames, place a rule before &lt;code&gt;google&lt;/code&gt; that routes the &lt;code&gt;gdirect&lt;/code&gt; process (or those Drive domains) to &lt;code&gt;DIRECT&lt;/code&gt;, just like &lt;code&gt;google-cn&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Domains that must stay on &lt;code&gt;PROXY&lt;/code&gt;&lt;/strong&gt; (used only for login and token refresh):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;accounts.google.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;oauth2.googleapis.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Transfer domains to route to &lt;code&gt;DIRECT&lt;/code&gt; and exclude from &lt;code&gt;fake-ip&lt;/code&gt;&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;drive.usercontent.google.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;*.googleusercontent.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;drive.google.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;www.googleapis.com&lt;/code&gt;, &lt;code&gt;drive.googleapis.com&lt;/code&gt;, &lt;code&gt;content.googleapis.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Unlike &lt;code&gt;gdirect&lt;/code&gt;, a regular web browser visiting &lt;code&gt;www.googleapis.com&lt;/code&gt; does not rewrite the underlying socket IP to a &lt;code&gt;google-cn&lt;/code&gt; node. Routing &lt;code&gt;www.googleapis.com&lt;/code&gt; to &lt;code&gt;DIRECT&lt;/code&gt; globally would break websites in your browser that depend on it. On desktop platforms, matching by &lt;strong&gt;&lt;code&gt;PROCESS-NAME&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;gdirect&lt;/code&gt;) is strongly recommended.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For &lt;strong&gt;Mihomo (Clash)&lt;/strong&gt;, add the following before your &lt;code&gt;GEOSITE,google&lt;/code&gt; rule:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;dns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;  &lt;span class=&#34;nt&#34;&gt;fake-ip-filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;    - &lt;span class=&#34;s2&#34;&gt;&amp;#34;www.googleapis.com&amp;#34;&lt;/span&gt;&#xA;    - &lt;span class=&#34;s2&#34;&gt;&amp;#34;drive.googleapis.com&amp;#34;&lt;/span&gt;&#xA;    - &lt;span class=&#34;s2&#34;&gt;&amp;#34;content.googleapis.com&amp;#34;&lt;/span&gt;&#xA;    - &lt;span class=&#34;s2&#34;&gt;&amp;#34;drive.usercontent.google.com&amp;#34;&lt;/span&gt;&#xA;    - &lt;span class=&#34;s2&#34;&gt;&amp;#34;drive.google.com&amp;#34;&lt;/span&gt;&#xA;    - &lt;span class=&#34;s2&#34;&gt;&amp;#34;+.googleusercontent.com&amp;#34;&lt;/span&gt;&#xA;&#xA;&lt;span class=&#34;nt&#34;&gt;rules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;  &lt;span class=&#34;c&#34;&gt;# 1. Keep OAuth login and token refresh on PROXY&lt;/span&gt;&#xA;  - &lt;span class=&#34;l&#34;&gt;DOMAIN,accounts.google.com,PROXY&lt;/span&gt;&#xA;  - &lt;span class=&#34;l&#34;&gt;DOMAIN,oauth2.googleapis.com,PROXY&lt;/span&gt;&#xA;&#xA;  &lt;span class=&#34;c&#34;&gt;# 2. Recommended: force all other traffic from the gdirect process (scan, API, download, upload) to DIRECT so sniffed domain rules don&amp;#39;t hijack it&lt;/span&gt;&#xA;  - &lt;span class=&#34;l&#34;&gt;PROCESS-NAME,gdirect,DIRECT&lt;/span&gt;&#xA;&#xA;  &lt;span class=&#34;c&#34;&gt;# 3. Or route by domain (place before GEOSITE,google / RULE-SET,google):&lt;/span&gt;&#xA;  - &lt;span class=&#34;l&#34;&gt;DOMAIN,drive.usercontent.google.com,DIRECT&lt;/span&gt;&#xA;  - &lt;span class=&#34;l&#34;&gt;DOMAIN-SUFFIX,googleusercontent.com,DIRECT&lt;/span&gt;&#xA;  - &lt;span class=&#34;l&#34;&gt;DOMAIN,www.googleapis.com,DIRECT&lt;/span&gt;&#xA;  - &lt;span class=&#34;l&#34;&gt;DOMAIN,drive.googleapis.com,DIRECT&lt;/span&gt;&#xA;  - &lt;span class=&#34;l&#34;&gt;DOMAIN,content.googleapis.com,DIRECT&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;yaml&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;If you use &lt;strong&gt;sing-box&lt;/strong&gt;, add an equivalent process-name or domain &lt;code&gt;direct&lt;/code&gt; rule before &lt;code&gt;rule_set: [&amp;quot;google&amp;quot;]&lt;/code&gt; in &lt;code&gt;route.rules&lt;/code&gt; (while keeping &lt;code&gt;oauth2.googleapis.com&lt;/code&gt; proxied) to enjoy zero-proxy-quota full-speed Drive transfers with TUN left on all day.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;daily-usage--troubleshooting-reference&#34;&gt;Daily Usage &amp;amp; Troubleshooting Reference&lt;/h2&gt;&#xA;&lt;h3 id=&#34;common-commands&#34;&gt;Common Commands&lt;/h3&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;gdirect                                   &lt;span class=&#34;c1&#34;&gt;# Same as `gdirect browse`, opens the interactive TUI&lt;/span&gt;&#xA;gdirect browse -o ~/Downloads             &lt;span class=&#34;c1&#34;&gt;# Set download directory (defaults to ./downloads)&lt;/span&gt;&#xA;gdirect ls root --json                    &lt;span class=&#34;c1&#34;&gt;# List directory contents (supports JSON output)&lt;/span&gt;&#xA;gdirect download &amp;lt;FILE_ID_OR_SHARE_URL&amp;gt;   &lt;span class=&#34;c1&#34;&gt;# Download a file; re-run the same command to resume after interruption&lt;/span&gt;&#xA;gdirect download FILE_ID -o file.zip&#xA;gdirect download DOC_ID --export application/pdf -o doc.pdf&#xA;gdirect upload ./file.zip                 &lt;span class=&#34;c1&#34;&gt;# 32 MiB chunked upload with automatic resume&lt;/span&gt;&#xA;gdirect upload ./file.zip --parent FOLDER_ID --name backup.zip&#xA;gdirect mount                             &lt;span class=&#34;c1&#34;&gt;# Mount at ~/GoogleDrive (uses native NFS on macOS, no FUSE needed)&lt;/span&gt;&#xA;gdirect unmount                           &lt;span class=&#34;c1&#34;&gt;# Unmount and clean up temporary exported credentials&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;sh&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Inside the &lt;code&gt;gdirect browse&lt;/code&gt; TUI, you can drive everything from the keyboard:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Key&lt;/th&gt;&#xA;&lt;th&gt;Action&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;j / k&lt;/code&gt;, &lt;code&gt;↑ / ↓&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Move selection up or down&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;Enter&lt;/code&gt;, &lt;code&gt;l / →&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Open folder&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;h / ←&lt;/code&gt;, &lt;code&gt;Backspace&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Go to parent folder&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Queue selected item for download (Google Docs, Sheets, and Slides are exported as PDF)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;+ / -&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Adjust concurrent connections (&lt;code&gt;1–16&lt;/code&gt;) for subsequent downloads and save as default (starts at 8)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Refresh current folder&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;c&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Cancel active download while keeping partial data on disk&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Quit&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;For tricky network environments, &lt;code&gt;download&lt;/code&gt; and &lt;code&gt;browse&lt;/code&gt; also expose transport-layer overrides:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;--ip IP&lt;/code&gt;: Force a specific Google IP, skipping automatic scan results;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;--sni HOST&lt;/code&gt; / &lt;code&gt;--no-sni&lt;/code&gt;: Override the TLS SNI hostname, or omit the SNI extension altogether (certificates are still verified against the real Google hostname);&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-j N&lt;/code&gt;: Set concurrent connections (&lt;code&gt;1–16&lt;/code&gt;) for this command only;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;gdirect scan --ips FILE&lt;/code&gt;: Probe a custom candidate IP list (one public IP per line, &lt;code&gt;#&lt;/code&gt; for comments).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;troubleshooting-quick-reference&#34;&gt;Troubleshooting Quick Reference&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Symptom&lt;/th&gt;&#xA;&lt;th&gt;Fix&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;access_denied&lt;/code&gt; or message that the app is being tested&lt;/td&gt;&#xA;&lt;td&gt;Add your Google account as a Test user, or publish the app (Step 5 of the setup guide)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;redirect_uri_mismatch&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;The downloaded JSON is not from a &lt;strong&gt;Desktop app&lt;/strong&gt; client; recreate it following Step 4&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;Drive API 403 … insufficient permission&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Enable the Google Drive API in the &lt;strong&gt;same project&lt;/strong&gt; as your OAuth client (Step 1), save the Drive scope (click Save at the bottom in Step 3), then run &lt;code&gt;gdirect login --reauth&lt;/code&gt;&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;&lt;code&gt;refresh credential expired or revoked&lt;/code&gt;&lt;/td&gt;&#xA;&lt;td&gt;Run &lt;code&gt;gdirect login --reauth&lt;/code&gt;. If this happens every 7 days, publish the app from Testing to In production (Step 5)&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;technical-deep-dive-how-is-it-implemented-under-the-hood&#34;&gt;Technical Deep Dive: How Is It Implemented Under the Hood?&lt;/h2&gt;&#xA;&lt;p&gt;If you&#39;re curious about how &lt;code&gt;gdirect&lt;/code&gt; combines Rust with a custom-patched &lt;code&gt;libaria2&lt;/code&gt; build to pull this off, here is a walkthrough of the source code.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-candidate-ip-scanning--dual-endpoint-verification&#34;&gt;1. Candidate IP Scanning &amp;amp; Dual-Endpoint Verification&lt;/h3&gt;&#xA;&lt;p&gt;When a transfer command runs without a verified IP from the last 24 hours in local SQLite, &lt;code&gt;src/scan.rs&lt;/code&gt; kicks off a scan. Up to 256 candidates are assembled from three sources:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The built-in bootstrap seed IP &lt;code&gt;183.56.143.147&lt;/code&gt; (from Cealing-Host—always re-probed before use, never blindly trusted);&lt;/li&gt;&#xA;&lt;li&gt;Public IPs returned by system DNS for &lt;code&gt;www.googleapis.com&lt;/code&gt;, &lt;code&gt;drive.usercontent.google.com&lt;/code&gt;, and &lt;code&gt;drive.google.com&lt;/code&gt;;&lt;/li&gt;&#xA;&lt;li&gt;Historical IPs in SQLite that succeeded within the past 7 days (stale entries older than 7 days are pruned before each scan so the pool never grows unbounded).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Before entering the probe pool, &lt;code&gt;public(ip)&lt;/code&gt; filters out private, loopback, link-local, and &lt;code&gt;198.18.0.0/15&lt;/code&gt; (the default Clash / Mihomo &lt;code&gt;fake-ip&lt;/code&gt; range) addresses. Eight worker threads then run &lt;code&gt;probe(ip)&lt;/code&gt; concurrently:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;src/scan.rs&lt;/b&gt;&lt;span&gt;Probing a candidate IP with TLS verification and dual endpoints&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/gdirect/blob/f4b67efb3f96ba061e89ac956b0b0335a481b007/src/scan.rs#L78-L113&#34;&gt;L78–113 · f4b67ef ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;78&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;probe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;: &lt;span class=&#34;nc&#34;&gt;IpAddr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; -&amp;gt; &lt;span class=&#34;nb&#34;&gt;Result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;i64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;79&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;builder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;80&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no_proxy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;81&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reqwest&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;redirect&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;Policy&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;82&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect_timeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Duration&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from_secs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;83&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Duration&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from_secs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;84&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resolve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;www.googleapis.com&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SocketAddr&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;85&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resolve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;drive.usercontent.google.com&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SocketAddr&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;86&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;87&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Instant&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;88&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;89&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://www.googleapis.com/drive/v3/about?fields=user&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;90&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;91&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map_err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;without_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;92&lt;/span&gt;    &lt;span class=&#34;fm&#34;&gt;ensure!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;93&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;reqwest&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;StatusCode&lt;/span&gt;::&lt;span class=&#34;no&#34;&gt;UNAUTHORIZED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;94&lt;/span&gt;        &lt;span class=&#34;s&#34;&gt;&amp;#34;unexpected Drive API status {}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;95&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;96&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;97&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;: &lt;span class=&#34;nc&#34;&gt;serde_json&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;Value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;98&lt;/span&gt;    &lt;span class=&#34;fm&#34;&gt;ensure!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;code&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;401&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;invalid Drive API response&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;99&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://drive.usercontent.google.com/download?id=0B9P1L--7Wd2vU3VUVlFnbTgtS2c&amp;amp;export=download&amp;amp;confirm=t&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map_err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;without_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;100&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;101&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;warning&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;matches!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;102&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;103&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;reqwest&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;StatusCode&lt;/span&gt;::&lt;span class=&#34;no&#34;&gt;FORBIDDEN&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;reqwest&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;StatusCode&lt;/span&gt;::&lt;span class=&#34;no&#34;&gt;NOT_FOUND&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;104&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;105&lt;/span&gt;        &lt;span class=&#34;nb&#34;&gt;Some&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;format!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;HTTP &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{status}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;106&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;107&lt;/span&gt;        &lt;span class=&#34;fm&#34;&gt;ensure!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_success&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Drive download probe HTTP {status}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;108&lt;/span&gt;        &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bytes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Vec&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;109&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;take&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_to_end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;110&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bytes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;spam&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;unexpected content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;into&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;111&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;112&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;Ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;elapsed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_millis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;i64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;113&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Three design choices stand out in this probe:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;.no_proxy()&lt;/code&gt; + &lt;code&gt;.resolve()&lt;/code&gt;&lt;/strong&gt;: Bypasses environment proxy variables and binds &lt;code&gt;www.googleapis.com&lt;/code&gt; and &lt;code&gt;drive.usercontent.google.com&lt;/code&gt; directly to &lt;code&gt;ip:443&lt;/code&gt; inside the HTTP client while enforcing full TLS certificate verification (chain validation + SAN hostname matching), ruling out ISP captive portals or MITM boxes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Credential-less API verification&lt;/strong&gt;: Calls &lt;code&gt;GET /drive/v3/about?fields=user&lt;/code&gt; without any user token. A genuine Google Drive API front end always replies with HTTP &lt;code&gt;401 Unauthorized&lt;/code&gt; and JSON &lt;code&gt;error.code == 401&lt;/code&gt;. This confirms application-layer routing without ever exposing the user&#39;s Bearer token to untrusted candidate IPs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Download path probe&lt;/strong&gt;: Requests a tiny public test file from &lt;code&gt;drive.usercontent.google.com&lt;/code&gt;. If Google rate-limits the public test file with HTTP 403/404, the IP is still accepted with a warning so long as the Drive API check passed, avoiding false negatives when the public test file is throttled.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;How to find more candidate direct IPs for your ISP:&lt;/strong&gt;&#xA;If the built-in seed IP &lt;code&gt;183.56.143.147&lt;/code&gt; has high latency on your regional carrier, pick a few domains from the &lt;code&gt;google-cn&lt;/code&gt; list in &lt;a href=&#34;https://github.com/DustinWin/ruleset_geodata&#34;&gt;DustinWin/ruleset_geodata&lt;/a&gt; (such as &lt;code&gt;dl.google.com&lt;/code&gt;, &lt;code&gt;g.cn&lt;/code&gt;, &lt;code&gt;fonts.googleapis.com&lt;/code&gt;, or &lt;code&gt;gstatic.cn&lt;/code&gt;), resolve them against a domestic DNS server (e.g. &lt;code&gt;dig @223.5.5.5 dl.google.com +short&lt;/code&gt;) to get Google edge IPs on your local ISP, save them one per line in &lt;code&gt;ips.txt&lt;/code&gt;, and run &lt;code&gt;gdirect scan --ips ips.txt&lt;/code&gt;. The scanner will automatically verify their TLS certificates and Drive API routing and pick the fastest node.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;2-custom-libaria2-why-patching-the-c-source-was-necessary&#34;&gt;2. Custom &lt;code&gt;libaria2&lt;/code&gt;: Why Patching the C++ Source Was Necessary&lt;/h3&gt;&#xA;&lt;p&gt;For &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;upload&lt;/code&gt;, Rust&#39;s &lt;code&gt;reqwest&lt;/code&gt; with &lt;code&gt;.resolve()&lt;/code&gt; is all we need. Downloading multi-gigabyte files, however, requires multi-connection segmented concurrency and crash-safe resume, so &lt;code&gt;gdirect&lt;/code&gt; embeds &lt;code&gt;aria2 1.37.0&lt;/code&gt; trimmed down to a static HTTP/HTTPS + OpenSSL 3 library (&lt;code&gt;libaria2&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Here is the catch: &lt;strong&gt;Google Drive download requests routinely go through cross-domain HTTP 302 redirects&lt;/strong&gt; (for instance, from &lt;code&gt;www.googleapis.com&lt;/code&gt; or &lt;code&gt;drive.google.com&lt;/code&gt; to &lt;code&gt;drive.usercontent.google.com&lt;/code&gt; and dynamically generated &lt;code&gt;*.googleusercontent.com&lt;/code&gt; hosts). In stock &lt;code&gt;aria2&lt;/code&gt;, if you only override the initial URL, &lt;code&gt;aria2&lt;/code&gt; falls right back to system DNS as soon as it follows a 302 redirect to a new hostname; and if you rewrite the hostname in the URL to a raw IP literal, TLS certificate verification fails immediately due to hostname mismatch.&lt;/p&gt;&#xA;&lt;p&gt;To solve this cleanly, &lt;code&gt;gdirect&lt;/code&gt; applies a ~90-line patch (&lt;code&gt;vendor/aria2-1.37.0.patch&lt;/code&gt; plus &lt;code&gt;vendor/gdirect_route.h&lt;/code&gt;) when compiling &lt;code&gt;libaria2&lt;/code&gt;, making four targeted changes at the C++ layer:&lt;/p&gt;&#xA;&lt;h4 id=&#34;1-allowlist-of-google-drive-transfer-domains&#34;&gt;(1) Allowlist of Google Drive Transfer Domains&lt;/h4&gt;&#xA;&lt;p&gt;First, &lt;code&gt;vendor/gdirect_route.h&lt;/code&gt; defines the exact set of Google Drive hostnames under &lt;code&gt;gdirect&lt;/code&gt;&#39;s control:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;vendor/gdirect_route.h&lt;/b&gt;&lt;span&gt;Google Drive hostname allowlist&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/gdirect/blob/f4b67efb3f96ba061e89ac956b0b0335a481b007/vendor/gdirect_route.h#L1-L12&#34;&gt;L1–12 · f4b67ef ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// gdirect&amp;#39;s narrow routing hook for the pinned aria2 1.37.0 build.&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#pragma once&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extern&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gdirect_ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extern&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gdirect_sni&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;inline&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;gdirect_host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;suffix&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;.googleusercontent.com&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;drive.google.com&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;drive.usercontent.google.com&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;9&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;www.googleapis.com&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;content.googleapis.com&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;drive.googleapis.com&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;         &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;suffix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compare&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;suffix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;suffix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;suffix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;h4 id=&#34;2-intercepting-getaddrinfo-and-tls-sni-in-socketcorecc&#34;&gt;(2) Intercepting &lt;code&gt;getaddrinfo&lt;/code&gt; and TLS SNI in &lt;code&gt;SocketCore.cc&lt;/code&gt;&lt;/h4&gt;&#xA;&lt;p&gt;Upper-layer HTTP requests keep their original URLs untouched (so both the HTTP &lt;code&gt;Host&lt;/code&gt; header and OpenSSL&#39;s X.509 hostname verification check the real Google domain). Only when &lt;code&gt;SocketCore&lt;/code&gt; calls &lt;code&gt;getaddrinfo&lt;/code&gt; to open a TCP socket does it swap any hostname matching &lt;code&gt;gdirect_host(host)&lt;/code&gt; for the scanned &lt;code&gt;gdirect_ip&lt;/code&gt; with &lt;code&gt;AI_NUMERICHOST&lt;/code&gt; set, bypassing DNS resolution completely. Right above that, it also hooks &lt;code&gt;tlsSession_-&amp;gt;setSNIHostname()&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;vendor/aria2-1.37.0.patch&lt;/b&gt;&lt;span&gt;Hooking TLS SNI and getaddrinfo in SocketCore.cc&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/gdirect/blob/f4b67efb3f96ba061e89ac956b0b0335a481b007/vendor/aria2-1.37.0.patch#L22-L42&#34;&gt;L22–42 · f4b67ef ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -936,7 +941,9 @@&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;     // &amp;#34;localhost&amp;#34; will produce TLS alert with GNUTLS.&#xA;&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;     if (tlsctx-&amp;gt;getSide() == TLS_CLIENT &amp;amp;&amp;amp; !util::isNumericHost(hostname) &amp;amp;&amp;amp;&#xA;&lt;span class=&#34;ln&#34;&gt;25&lt;/span&gt;         hostname.find(&amp;#34;.&amp;#34;) != std::string::npos) {&#xA;&lt;span class=&#34;ln&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;-      rv = tlsSession_-&amp;gt;setSNIHostname(hostname);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+      const char* sni = gdirect_host(hostname) ? gdirect_sni : nullptr;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+      rv = (sni &amp;amp;&amp;amp; !*sni) ? TLS_ERR_OK :&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;29&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+          tlsSession_-&amp;gt;setSNIHostname(sni ? std::string(sni) : hostname);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;30&lt;/span&gt;       if (rv != TLS_ERR_OK) {&#xA;&lt;span class=&#34;ln&#34;&gt;31&lt;/span&gt;         throw DL_ABORT_EX(fmt(EX_SSL_INIT_FAILURE,&#xA;&lt;span class=&#34;ln&#34;&gt;32&lt;/span&gt;                               tlsSession_-&amp;gt;getLastErrorString().c_str()));&#xA;&lt;span class=&#34;ln&#34;&gt;33&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -1450,6 +1457,10 @@&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;34&lt;/span&gt;   hints.ai_flags = getDefaultAIFlags();&#xA;&lt;span class=&#34;ln&#34;&gt;35&lt;/span&gt;   hints.ai_flags |= flags;&#xA;&lt;span class=&#34;ln&#34;&gt;36&lt;/span&gt;   hints.ai_protocol = protocol;&#xA;&lt;span class=&#34;ln&#34;&gt;37&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+  if (host &amp;amp;&amp;amp; gdirect_ip &amp;amp;&amp;amp; *gdirect_ip &amp;amp;&amp;amp; gdirect_host(host)) {&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;38&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+    host = gdirect_ip;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;39&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+    hints.ai_flags |= AI_NUMERICHOST;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+  }&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;41&lt;/span&gt;   return getaddrinfo(host, service, &amp;amp;hints, resPtr);&#xA;&lt;span class=&#34;ln&#34;&gt;42&lt;/span&gt; }&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When &lt;code&gt;gdirect_sni&lt;/code&gt; is &lt;code&gt;nullptr&lt;/code&gt; (the default), the original hostname is sent as SNI;&lt;/li&gt;&#xA;&lt;li&gt;When &lt;code&gt;--sni HOST&lt;/code&gt; is passed, the custom SNI hostname is sent instead;&lt;/li&gt;&#xA;&lt;li&gt;When &lt;code&gt;--no-sni&lt;/code&gt; is passed (&lt;code&gt;gdirect_sni&lt;/code&gt; points to an empty string &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;), it returns &lt;code&gt;TLS_ERR_OK&lt;/code&gt; without calling &lt;code&gt;setSNIHostname&lt;/code&gt;, causing OpenSSL to send a &lt;code&gt;ClientHello&lt;/code&gt; with no SNI extension at all.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;3-stripping-authorization-headers-across-redirects--redirect-allowlisting&#34;&gt;(3) Stripping &lt;code&gt;Authorization&lt;/code&gt; Headers Across Redirects &amp;amp; Redirect Allowlisting&lt;/h4&gt;&#xA;&lt;p&gt;When downloading a private file, the initial request goes to &lt;code&gt;https://www.googleapis.com/drive/v3/files/{id}?alt=media&lt;/code&gt; with &lt;code&gt;Authorization: Bearer &amp;lt;token&amp;gt;&lt;/code&gt;. Once redirected via HTTP 302 to a pre-signed &lt;code&gt;*.googleusercontent.com&lt;/code&gt; URL, forwarding the &lt;code&gt;Authorization&lt;/code&gt; header causes Google&#39;s content servers to reject the request for carrying two sets of credentials—and risks leaking the token across domains. The patch therefore restricts &lt;code&gt;HttpRequest.cc&lt;/code&gt; to emit the &lt;code&gt;Authorization:&lt;/code&gt; header only when &lt;code&gt;getHost() == &amp;quot;www.googleapis.com&amp;quot;&lt;/code&gt;, and enforces in &lt;code&gt;Request.cc&lt;/code&gt; that every redirect target must use &lt;code&gt;https&lt;/code&gt; and match &lt;code&gt;gdirect_host()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;4-removing-the-openssl-3-legacy-provider-dependency&#34;&gt;(4) Removing the OpenSSL 3 Legacy Provider Dependency&lt;/h4&gt;&#xA;&lt;p&gt;Under OpenSSL 3, stock &lt;code&gt;aria2&lt;/code&gt; unconditionally calls &lt;code&gt;OSSL_PROVIDER_load(nullptr, &amp;quot;legacy&amp;quot;)&lt;/code&gt; at startup (for RC4 in BitTorrent encryption), which crashes on systems without the OpenSSL legacy provider module installed. Guarding that call with &lt;code&gt;#ifdef ENABLE_BITTORRENT&lt;/code&gt; makes the HTTP-only static build completely self-contained.&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-overwrite-guards-large-file-virus-scan-confirmation-pages-and-md5-verification&#34;&gt;3. Overwrite Guards, Large-File Virus-Scan Confirmation Pages, and MD5 Verification&lt;/h3&gt;&#xA;&lt;p&gt;On the Rust side (&lt;code&gt;src/download.rs&lt;/code&gt;), three additional safeguards wrap &lt;code&gt;libaria2&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;src/download.rs&lt;/b&gt;&lt;span&gt;Control-file resume check, HTML confirmation-page parsing, and MD5 verification&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/gdirect/blob/f4b67efb3f96ba061e89ac956b0b0335a481b007/src/download.rs#L191-L248&#34;&gt;L191–248 · f4b67ef ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;191&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// Never treat an unrelated existing file as a resumable download.&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;192&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;control&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PathBuf&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;format!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;.aria2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()));&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;193&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;control&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;194&lt;/span&gt;        &lt;span class=&#34;fm&#34;&gt;ensure!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;195&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;matches_md5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_deref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;196&lt;/span&gt;            &lt;span class=&#34;s&#34;&gt;&amp;#34;output already exists; choose another -o path&amp;#34;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;197&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;198&lt;/span&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progress&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;199&lt;/span&gt;            &lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Already downloaded &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;200&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;201&lt;/span&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(());&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;202&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;203&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progress&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;204&lt;/span&gt;        &lt;span class=&#34;fm&#34;&gt;eprintln!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;205&lt;/span&gt;            &lt;span class=&#34;s&#34;&gt;&amp;#34;libaria2 1.37.0 · IP=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; · SNI=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; · certificate verification ON&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;206&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;207&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;208&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unwrap_or_else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;system DNS&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;into&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;209&lt;/span&gt;            &lt;span class=&#34;k&#34;&gt;match&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sni&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_deref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;210&lt;/span&gt;                &lt;span class=&#34;nb&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;original&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;211&lt;/span&gt;                &lt;span class=&#34;nb&#34;&gt;Some&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;none&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;212&lt;/span&gt;                &lt;span class=&#34;nb&#34;&gt;Some&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sni&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sni&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;213&lt;/span&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;214&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;215&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;216&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progress&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progress&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;217&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attempt&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;218&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;download&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_deref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;progress&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_deref_mut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;219&lt;/span&gt;        &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Vec&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;220&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;fs&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;File&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;221&lt;/span&gt;            &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;take&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;222&lt;/span&gt;            &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_to_end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;223&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// Public downloads can return the virus-scan confirmation form with HTTP 200.&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;224&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// Only Drive&amp;#39;s own HTML pages are inspected; other files stay untouched.&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;225&lt;/span&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;html_page&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;226&lt;/span&gt;            &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from_utf8_lossy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;227&lt;/span&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contains&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;download-form&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;228&lt;/span&gt;                &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;next&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;drive&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;confirmation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;229&lt;/span&gt;                &lt;span class=&#34;fm&#34;&gt;ensure!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attempt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Drive confirmation loop&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;230&lt;/span&gt;                &lt;span class=&#34;n&#34;&gt;fs&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;remove_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;231&lt;/span&gt;                &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;232&lt;/span&gt;                &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;233&lt;/span&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;234&lt;/span&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contains&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;accounts.google.com/ServiceLogin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;235&lt;/span&gt;                &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contains&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Google Drive - Quota exceeded&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;236&lt;/span&gt;                &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contains&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Google Drive - Access denied&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;237&lt;/span&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;238&lt;/span&gt;                &lt;span class=&#34;fm&#34;&gt;bail!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;239&lt;/span&gt;                    &lt;span class=&#34;s&#34;&gt;&amp;#34;Drive returned a login/quota error page; saved for inspection at {}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;240&lt;/span&gt;                    &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;241&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;242&lt;/span&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;243&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;244&lt;/span&gt;        &lt;span class=&#34;fm&#34;&gt;ensure!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;245&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;matches_md5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_deref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;246&lt;/span&gt;            &lt;span class=&#34;s&#34;&gt;&amp;#34;MD5 does not match Drive&amp;#39;s checksum; the file is kept at {} for inspection&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;247&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;248&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Safety check for existing files&lt;/strong&gt;: If the output file already exists without a companion &lt;code&gt;.aria2&lt;/code&gt; control file, &lt;code&gt;gdirect&lt;/code&gt; hashes the local file and compares it against Drive&#39;s &lt;code&gt;md5Checksum&lt;/code&gt;—printing &lt;code&gt;Already downloaded&lt;/code&gt; if they match and refusing to overwrite if they don&#39;t.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Unwrapping virus-scan confirmation pages on public large files&lt;/strong&gt;: When downloading a large public shared file without authentication, Google Drive returns an HTTP 200 HTML page containing &lt;code&gt;&amp;lt;form id=&amp;quot;download-form&amp;quot;&amp;gt;&lt;/code&gt;. Only when the file header starts with &lt;code&gt;&amp;lt;!doctype html&lt;/code&gt; or &lt;code&gt;&amp;lt;html&lt;/code&gt; does &lt;code&gt;gdirect&lt;/code&gt; parse that form to extract the &lt;code&gt;confirm&lt;/code&gt; / &lt;code&gt;uuid&lt;/code&gt; parameters and re-download the actual binary, ensuring archives or source files that happen to contain the string &lt;code&gt;download-form&lt;/code&gt; are never touched.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Post-download MD5 verification&lt;/strong&gt;: Once &lt;code&gt;libaria2&lt;/code&gt; finishes, &lt;code&gt;gdirect&lt;/code&gt; streams the completed file through MD5 and verifies it against Drive&#39;s metadata to guarantee that multi-connection chunk reassembly is bit-for-bit exact.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;4-32-mib-resumable-chunked-uploads&#34;&gt;4. 32 MiB Resumable Chunked Uploads&lt;/h3&gt;&#xA;&lt;p&gt;The upload module (&lt;code&gt;src/upload.rs&lt;/code&gt;) implements the Google Drive v3 Resumable Upload protocol. Because cross-border direct links can have higher RTT, tiny chunks waste too much time waiting for per-chunk acknowledgments, so the chunk size is set to &lt;code&gt;32 MiB&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When starting an upload, &lt;code&gt;gdirect&lt;/code&gt; looks up any prior session in local SQLite keyed by &lt;code&gt;(canonical local path, target parent folder ID, remote filename)&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;src/upload.rs&lt;/b&gt;&lt;span&gt;Probing the remote upload session for the last committed byte offset&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/gdirect/blob/f4b67efb3f96ba061e89ac956b0b0335a481b007/src/upload.rs#L85-L105&#34;&gt;L85–105 · f4b67ef ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;85&lt;/span&gt;        &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;saved&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modified&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;modified&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;86&lt;/span&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Some&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;session&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;87&lt;/span&gt;            &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;88&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;89&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;put&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;session_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;90&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bearer_auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;91&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Content-Range&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;format!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;bytes */&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{size}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;92&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Content-Length&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;93&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;94&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map_err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;without_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;95&lt;/span&gt;            &lt;span class=&#34;k&#34;&gt;match&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;96&lt;/span&gt;                &lt;span class=&#34;n&#34;&gt;StatusCode&lt;/span&gt;::&lt;span class=&#34;no&#34;&gt;OK&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StatusCode&lt;/span&gt;::&lt;span class=&#34;no&#34;&gt;CREATED&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;97&lt;/span&gt;                    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;98&lt;/span&gt;                    &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;99&lt;/span&gt;                    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;100&lt;/span&gt;                &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;101&lt;/span&gt;                &lt;span class=&#34;n&#34;&gt;StatusCode&lt;/span&gt;::&lt;span class=&#34;no&#34;&gt;PERMANENT_REDIRECT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;offset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;102&lt;/span&gt;                &lt;span class=&#34;n&#34;&gt;StatusCode&lt;/span&gt;::&lt;span class=&#34;no&#34;&gt;NOT_FOUND&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StatusCode&lt;/span&gt;::&lt;span class=&#34;no&#34;&gt;GONE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;103&lt;/span&gt;                &lt;span class=&#34;n&#34;&gt;_&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;failure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;104&lt;/span&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;105&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;As long as the local file&#39;s size and nanosecond modification timestamp haven&#39;t changed, re-running the upload command after an interruption sends &lt;code&gt;Content-Range: bytes */{size}&lt;/code&gt; to query Google&#39;s committed byte offset from the &lt;code&gt;308 Permanent Redirect&lt;/code&gt; &lt;code&gt;Range&lt;/code&gt; header and resumes right where it left off.&lt;/p&gt;&#xA;&lt;h3 id=&#34;5-localhost-loopback--pkce-oauth-flow&#34;&gt;5. Localhost Loopback + PKCE OAuth Flow&lt;/h3&gt;&#xA;&lt;p&gt;In &lt;code&gt;src/auth.rs&lt;/code&gt;, &lt;code&gt;gdirect login&lt;/code&gt; implements the &lt;strong&gt;OAuth 2.0 Loopback + PKCE (RFC 7636 &lt;code&gt;S256&lt;/code&gt;)&lt;/strong&gt; flow without pulling in heavy external OAuth SDKs:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;src/auth.rs&lt;/b&gt;&lt;span&gt;Ephemeral localhost listener and PKCE authorization URL construction&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/gdirect/blob/f4b67efb3f96ba061e89ac956b0b0335a481b007/src/auth.rs#L194-L213&#34;&gt;L194–213 · f4b67ef ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;194&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;listener&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TcpListener&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;127.0.0.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;195&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;listener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_nonblocking&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;196&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;redirect&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;format!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;197&lt;/span&gt;        &lt;span class=&#34;s&#34;&gt;&amp;#34;http://127.0.0.1:&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/callback&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;198&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;listener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;199&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;200&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;state&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;random_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;201&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verifier&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;random_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;202&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;Url&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://accounts.google.com/o/oauth2/v2/auth&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;203&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query_pairs_mut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extend_pairs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;204&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;client_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;205&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;redirect_uri&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;206&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;response_type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;code&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;207&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;scope&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;SCOPE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;208&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;access_type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;offline&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;209&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;consent select_account&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;210&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;state&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;211&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;code_challenge&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;challenge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;verifier&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;212&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;code_challenge_method&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;S256&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;213&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;It binds an ephemeral non-blocking TCP listener on &lt;code&gt;127.0.0.1:0&lt;/code&gt;, validates the &lt;code&gt;state&lt;/code&gt; parameter on the browser callback to prevent CSRF, and exchanges the authorization code plus &lt;code&gt;code_verifier&lt;/code&gt; against &lt;code&gt;https://oauth2.googleapis.com/token&lt;/code&gt; for a &lt;code&gt;refresh_token&lt;/code&gt;. Both the SQLite database and any temporary &lt;code&gt;rclone&lt;/code&gt; configuration exported for &lt;code&gt;mount&lt;/code&gt; are created with &lt;code&gt;0600&lt;/code&gt; permissions, and temporary mount credentials are automatically wiped on &lt;code&gt;unmount&lt;/code&gt; or mount failure.&lt;/p&gt;&#xA;</description>
      <category>Tech</category>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://mizore.blog/en/posts/gdirect/</guid>
    </item>
    <item>
      <title>Putting Memoh Under the Knife: Specializing an Agent for Cheaper Telegram Group Chats</title>
      <link>https://mizore.blog/en/posts/making-memoh-cheaper-on-telegram/</link>
      <description>&lt;p&gt;A while ago, I deployed &lt;a href=&#34;https://github.com/memohai/memoh&#34;&gt;Memoh&lt;/a&gt; as a few Telegram group-chat bots, mainly to burn through an Ollama subscription I couldn&#39;t possibly use up on my own (some idiot subscribed to a full year of Ollama at once).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/2baf5985a2608e7d7729c6df9ab9a320191edd3be43f59a8f37e8ed387fb0307.webp&#34; alt=&#34;The Memoh bot &amp;quot;Xiaoxue&amp;quot; chatting in a Telegram group and replying with a catgirl sticker&#34; decoding=&#34;async&#34; fetchpriority=&#34;high&#34; width=&#34;1256&#34; height=&#34;874&#34; srcset=&#34;https://mizore.blog/images/ddf84c9704ee90683624988b2e2c49058a8693b40b103bf58f70831278c12e72.webp 720w, https://mizore.blog/images/2baf5985a2608e7d7729c6df9ab9a320191edd3be43f59a8f37e8ed387fb0307.webp 1256w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;After running it for a bit, I noticed that ten minutes of group chat could burn through half of my 5-hour limit, and a single day would eat half of my weekly quota. That got me thinking: in a pure chat scenario, how can I drive down both the number of LLM calls and the token consumption per call? I made a set of targeted changes for group chat, and my total cost dropped to less than a fifth of what it used to be.&lt;/p&gt;&#xA;&lt;p&gt;To be clear, this post isn&#39;t here to nitpick upstream. Memoh is a thoughtfully designed general-purpose agent framework—multi-step tool loops, a rich toolset, and structured message metadata are all reasonable and even necessary for an agent that &amp;quot;gets work done for you.&amp;quot; What I did was &lt;strong&gt;specialize&lt;/strong&gt; it into a chatbot: an agent in a group chat spends most of its life just talking rather than executing tasks, and &amp;quot;talking&amp;quot; inside a general-purpose agent loop has a very unfavorable cost structure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-does-the-money-actually-go&#34;&gt;Where Does the Money Actually Go?&lt;/h2&gt;&#xA;&lt;p&gt;First, here is the breakdown of a real request captured before my optimizations:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Component&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:right&#34;&gt;Size&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:right&#34;&gt;Share&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Messages (conversation history)&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;~157.7 KB&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;68.0%&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Tools (tool schemas)&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;~49.5 KB&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;21.3%&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;System (system prompt)&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;~24.7 KB&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;10.7%&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;A single request is over 200 KB—roughly 50,000 tokens. The catch is what a general-purpose agent&#39;s tool loop does with that payload: &lt;strong&gt;every extra tool call re-reads all 50,000 tokens from scratch&lt;/strong&gt;. And chat scenarios are packed with tool calls: sending a message is one, replying is one, sending a sticker is another, and after sending, a delivery status comes back for the model to read and confirm. Behind a single outgoing group-chat message, the full context is read 2 to 3 times over.&lt;/p&gt;&#xA;&lt;p&gt;So my changes followed three directions: make fewer calls, read less per call, and hit the prompt cache on almost everything already read. Every change below includes the actual code from my fork (&lt;a href=&#34;https://github.com/mizorewww/Memoh&#34;&gt;mizorewww/Memoh&lt;/a&gt;, compared against upstream baseline &lt;code&gt;d0c5c735^&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;change-1-clock-out-right-after-sending&#34;&gt;Change 1: Clock Out Right After Sending&lt;/h2&gt;&#xA;&lt;p&gt;Upstream&#39;s loop works like this: the model decides to send a message → calls &lt;code&gt;send&lt;/code&gt; → the framework returns the delivery status (message ID, platform, target conversation, etc.) as a tool result → the model is invoked a second time, reads the entire context again, says &amp;quot;okay, sent,&amp;quot; and finishes. For a group-chat bot, that final call is almost pure waste: the message has already been delivered to the chat, and there is nothing meaningful left for the model to do except echo a confirmation. With the Doubao model, an even worse failure mode showed up: seeing the success result, the model kept calling &lt;code&gt;send&lt;/code&gt; over and over in an infinite loop.&lt;/p&gt;&#xA;&lt;p&gt;My fix wraps the provider in a decorator (&lt;code&gt;internal/agent/runtime/native/terminal_send.go&lt;/code&gt;). Once &lt;code&gt;send&lt;/code&gt; successfully delivers to the current conversation, the next time the model would be called, the decorator immediately returns &lt;code&gt;FinishReasonStop&lt;/code&gt; locally without making a network request at all:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/runtime/native/terminal_send.go&lt;/b&gt;&lt;span&gt;End the turn locally after successful delivery&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/runtime/native/terminal_send.go#L76-L103&#34;&gt;L76–103 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;76&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;terminalSendProvider&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;77&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Provider&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;78&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;state&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;terminalSendState&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;79&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;80&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;81&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;terminalSendProvider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;DoGenerate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;GenerateParams&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;GenerateResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;82&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;isDelivered&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;83&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;GenerateResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;84&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;FinishReason&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;FinishReasonStop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;85&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;Response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ResponseMetadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;terminalSendResponseID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;86&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;87&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;88&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Provider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;DoGenerate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;89&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;90&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;91&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;terminalSendProvider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;DoStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;GenerateParams&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StreamResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;92&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;isDelivered&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;93&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Provider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;DoStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;94&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;95&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;parts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;chan&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StreamPart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;96&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;parts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;FinishStepPart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;97&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;FinishReason&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;FinishReasonStop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;98&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;Response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ResponseMetadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;terminalSendResponseID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;99&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;100&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;parts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;FinishPart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;FinishReason&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;FinishReasonStop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;101&lt;/span&gt;&#x9;&lt;span class=&#34;nb&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;parts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;102&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StreamResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Stream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;parts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;103&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Of course, the protocol requires every &lt;code&gt;tool_call&lt;/code&gt; to be paired with a &lt;code&gt;tool_result&lt;/code&gt;, so we can&#39;t literally drop the result without leaving a dangling tool call in history. Instead, the result is compressed to the bare minimum: a successful send to the current conversation returns just &lt;code&gt;{&amp;quot;ok&amp;quot;: true}&lt;/code&gt;, only attaching target metadata when sending across conversations; failures return a structured retryable error (&lt;code&gt;error_code&lt;/code&gt; + &lt;code&gt;retryable&lt;/code&gt; + &lt;code&gt;guidance&lt;/code&gt;) so the model has a chance to recover instead of crashing the loop with a Go error:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/tool/message.go&lt;/b&gt;&lt;span&gt;Minimal send result&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/tool/message.go#L311-L324&#34;&gt;L311–324 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;311&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;MessageProvider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;execSend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;session&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;SessionContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;toolCallID&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;312&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;SessionType&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sessionmode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Discuss&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;313&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;sendResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;exec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;SendDirectForTool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;toMessagingSession&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;toolCallID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;314&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;315&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;messageSendErrorResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;316&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;317&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;resp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;ok&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;318&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;IsSameConversation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sendResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Platform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sendResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;319&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;platform&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sendResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Platform&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;320&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;target&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sendResult&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Target&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;321&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;delivered&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;target&amp;#34;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;322&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;323&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;324&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;There is one more layer in history projection. When future turns read the conversation history, successful &lt;code&gt;send&lt;/code&gt; calls are folded into a minimal call/result pair containing only the five audience-visible fields (&lt;code&gt;text&lt;/code&gt;, &lt;code&gt;reply_to&lt;/code&gt;, &lt;code&gt;sticker_id&lt;/code&gt;, &lt;code&gt;attachments&lt;/code&gt;, &lt;code&gt;message&lt;/code&gt;), stripping delivery internals (&lt;code&gt;bot_id&lt;/code&gt;, &lt;code&gt;platform&lt;/code&gt;, &lt;code&gt;message_id&lt;/code&gt;, etc.) from the prompt context. Note that this folding happens only in the projection layer—the persisted canonical history remains untouched for debugging:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/application/service_messages.go&lt;/b&gt;&lt;span&gt;Minimal send call in history projection&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/application/service_messages.go#L232-L246&#34;&gt;L232–246 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;232&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;minimalDiscussSendCall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ToolCallPart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ToolCallPart&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;233&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;normalizeToolInputMap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;234&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;minimal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;235&lt;/span&gt;&#x9;&lt;span class=&#34;c1&#34;&gt;// Current-conversation routing is implicit. Keep only audience-visible&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;236&lt;/span&gt;&#x9;&lt;span class=&#34;c1&#34;&gt;// payload fields and the reply reference needed to understand the exchange.&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;237&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;range&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;reply_to&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;sticker_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;attachments&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;238&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;239&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;minimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;240&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;241&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;242&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ToolCallPart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;243&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;ToolCallID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;TrimSpace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ToolCallID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;244&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;ToolName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;s&#34;&gt;&amp;#34;send&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;245&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;Input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;      &lt;span class=&#34;nx&#34;&gt;minimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;246&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;The result: on pure messaging turns, LLM calls drop from 2 to 1—&lt;strong&gt;an immediate 50% savings&lt;/strong&gt;. Multi-step workflows that search the web or call other tools still work normally; the bot simply treats &lt;code&gt;send&lt;/code&gt; as the terminal action of the turn.&lt;/p&gt;&#xA;&lt;h2 id=&#34;change-2-send-text-reply-and-sticker-in-a-single-call&#34;&gt;Change 2: Send Text, Reply, and Sticker in a Single Call&lt;/h2&gt;&#xA;&lt;p&gt;In group chats, a single response is often both a reply to someone and accompanied by a sticker. Previously, that required multiple tool calls, re-reading the entire context each time. I merged them into a single &lt;code&gt;send&lt;/code&gt; tool signature:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;send(text[optional], reply_to[optional], sticker_id[optional])&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Concretely, this involved two changes. First, upstream already had a top-level &lt;code&gt;reply_to&lt;/code&gt; parameter alongside a redundant nested &lt;code&gt;message.reply{message_id}&lt;/code&gt; object; I removed the nested form, kept only the top-level parameter, and restricted it to message IDs visible in the current turn (returning a retryable error if invisible instead of replying to the wrong message).&lt;/p&gt;&#xA;&lt;p&gt;Second, I had previously written an MCP server for sending stickers, only to realize that invoking an external MCP tool added an extra LLM round-trip every time. I folded the sticker catalog directly into the &lt;code&gt;sticker_id&lt;/code&gt; parameter of &lt;code&gt;send&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/runtime/native/telegram_sticker.go&lt;/b&gt;&lt;span&gt;Turn the sticker MCP into an internal backend of send&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/runtime/native/telegram_sticker.go#L14-L31&#34;&gt;L14–31 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&#x9;&lt;span class=&#34;s&#34;&gt;&amp;#34;github.com/memohai/memoh/internal/delivery&amp;#34;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;telegramStickerSendGuidance&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; For Telegram, normally pair every coherent public message with at least one context-appropriate Sticker by setting `sticker_id` in the same send call; omit it only when the catalog has no suitable Sticker. Choose from the full visual descriptions, not from the original emoji alone, and avoid repetitive duplicates.&amp;#34;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;telegramStickerCatalogSchemaKey&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;x-memoh-sticker-catalog&amp;#34;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;telegramStickerSchemaEntry&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;ID&lt;/span&gt;          &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;`json:&amp;#34;id&amp;#34;`&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;Description&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;`json:&amp;#34;description&amp;#34;`&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;25&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;Emoji&lt;/span&gt;       &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;`json:&amp;#34;emoji&amp;#34;`&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;26&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;Status&lt;/span&gt;      &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;`json:&amp;#34;status&amp;#34;`&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;28&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;29&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// mergeTelegramStickerSendTools converts the Sticker MCP into an internal&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// backend for the first-party send tool. The model sees one send call whose&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// sticker_id enum contains the complete, stable catalog; it never sees a&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Within a single &lt;code&gt;send&lt;/code&gt; call, the bot delivers the text first and then the sticker; if the sticker fails after the text is already sent, it returns partial success and terminates immediately so the model won&#39;t retry and send duplicate text.&lt;/p&gt;&#xA;&lt;p&gt;I also had a vision model pre-generate a concise visual description (under 50 characters) for every sticker, stored alongside the sticker-set metadata in SQLite. Sorted deterministically by ID, these descriptions are embedded into the &lt;code&gt;send&lt;/code&gt; tool schema&#39;s description. Once merged, sending a sticker incurs virtually zero extra LLM cost.&lt;/p&gt;&#xA;&lt;h2 id=&#34;change-3-move-everything-that-changes-to-the-tail-of-the-prefix&#34;&gt;Change 3: Move Everything That Changes to the Tail of the Prefix&lt;/h2&gt;&#xA;&lt;p&gt;This is the key to prompt-cache hit rates. Every provider&#39;s prompt caching mechanism (Anthropic, OpenAI, DeepSeek, Kimi—all of them) works by &lt;strong&gt;prefix matching&lt;/strong&gt;: the prefix of a request must match byte-for-byte, and the first byte that changes invalidates the cache for everything after it.&lt;/p&gt;&#xA;&lt;p&gt;To be fair, upstream&#39;s default behavior isn&#39;t bad across ordinary turns: conversation history is appended at the end, so automatic prefix caches like DeepSeek&#39;s catch most of it. The real leak was a frequently rewritten file buried in the middle of the system prompt: upstream placed &lt;code&gt;MEMORY.md&lt;/code&gt; between &lt;code&gt;AGENTS.md&lt;/code&gt; and &lt;code&gt;PROFILES.md&lt;/code&gt;. Because &lt;code&gt;MEMORY.md&lt;/code&gt; is rewritten constantly by the memory subsystem, every update invalidated the cache for everything following it. My fix was a one-function change:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/runtime/native/fs.go&lt;/b&gt;&lt;span&gt;Move MEMORY.md to the tail of the system prompt&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/runtime/native/fs.go#L66-L71&#34;&gt;L66–71 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;66&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// systemFileLoadOrder keeps the frequently changing memory summary at the&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;67&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// tail of the system prompt. Stable instruction/profile content therefore&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;68&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// remains in the reusable prefix when MEMORY.md changes between turns.&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;69&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;systemFileLoadOrder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;70&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;AGENTS.md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;PROFILES.md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;MEMORY.md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;71&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Changing the load order from &lt;code&gt;AGENTS.md → MEMORY.md → PROFILES.md&lt;/code&gt; to &lt;code&gt;AGENTS.md → PROFILES.md → MEMORY.md&lt;/code&gt; keeps the most stable instructions at the front of the prefix and pushes the most volatile file to the very end of the system prompt. Following the same principle, I cleaned up several other sources of &amp;quot;prefix pollution&amp;quot;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The memory-writing manual (~2.6 KB) is now injected only when a memory provider is actually configured; when set to &lt;code&gt;None&lt;/code&gt;, the entire section is omitted:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/application/service.go&lt;/b&gt;&lt;span&gt;Skip memory instructions when no memory provider is configured&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/application/service.go#L710&#34;&gt;L710 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;710&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;MemoryInstructions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;TrimSpace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;botSettings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;MemoryProviderID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Platform identity now injects only the active platform&#39;s fields, and strips &lt;code&gt;avatar_url&lt;/code&gt; (which contained the bot token) from the injected prompt.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The difference is measurable: under the old &amp;quot;dynamically mutate system prompt&amp;quot; path, a forced-reply call measured just 5.1% cache read (a single measurement of that specific code path, not the everyday baseline). After the fix, two consecutive requests in a live group chat sent 52,259 and 52,633 input tokens, of which 52,096 and 52,480 were served from cache—a &lt;strong&gt;99.7% cache hit rate&lt;/strong&gt;, leaving only ~160 uncached input tokens billed at full price per turn.&lt;/p&gt;&#xA;&lt;h2 id=&#34;change-4-invisible-request-slimming&#34;&gt;Change 4: Invisible Request Slimming&lt;/h2&gt;&#xA;&lt;p&gt;Smaller requests mean cheaper reads on every turn. This part stacks several small reductions together, all exposed as configurable Telegram channel policies stored in bot metadata:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/channelpolicy/policy.go&lt;/b&gt;&lt;span&gt;Four Telegram channel policy keys&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/channelpolicy/policy.go#L21-L24&#34;&gt;L21–24 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TelegramToolCallsEnabledMetadataKey&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;telegram_tool_calls_enabled&amp;#34;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TelegramEnabledToolsMetadataKey&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;telegram_enabled_tools&amp;#34;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TelegramSkillsEnabledMetadataKey&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;telegram_skills_enabled&amp;#34;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TelegramMessageMetadataModeKey&lt;/span&gt;      &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;telegram_message_metadata_mode&amp;#34;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;telegram_tool_calls_enabled&lt;/code&gt; is the master switch for tools, &lt;code&gt;telegram_enabled_tools&lt;/code&gt; is an explicit allowlist (an empty array disables all tools), and &lt;code&gt;telegram_skills_enabled&lt;/code&gt; controls skills. A chat bot doesn&#39;t need shell execution or file editing; on my two production bots I enabled only &lt;code&gt;send&lt;/code&gt;, &lt;strong&gt;turning off 37 tools&lt;/strong&gt;. The crucial detail is &lt;em&gt;when&lt;/em&gt; filtering happens: the allowlist runs before schema generation, so disabled tools don&#39;t contribute a single byte to the request:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/runtime/native/agent.go&lt;/b&gt;&lt;span&gt;Filter tools before schema generation&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/runtime/native/agent.go#L990-L997&#34;&gt;L990–997 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;990&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;991&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filtered&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([]&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;providerTools&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;992&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;range&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;providerTools&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;993&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ChannelPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;AllowsTool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ChannelPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;AllowsBackendTool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;994&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;filtered&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filtered&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;995&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;996&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;997&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;providerTools&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;filtered&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Before optimization, the Tools section accounted for 21.3% of the request (~49.5 KB, roughly 12,000 tokens); now it is almost completely gone. Policy evaluation is fail-closed: if reading the policy fails, it exposes no tools rather than leaking tools that should be disabled.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;telegram_message_metadata_mode&lt;/code&gt; controls how message metadata headers are projected, defaulting to &lt;code&gt;compact&lt;/code&gt; on Telegram. Upstream prepends a full metadata header to every message sent to the model: &lt;code&gt;&amp;lt;message id=&amp;quot;...&amp;quot; sender=&amp;quot;...&amp;quot; t=&amp;quot;...&amp;quot; channel=&amp;quot;telegram&amp;quot; conversation=&amp;quot;...&amp;quot; type=&amp;quot;...&amp;quot; target=&amp;quot;...&amp;quot;&amp;gt;&lt;/code&gt;. The canonical format in SQLite stays unchanged, but the transient projection sent to the LLM strips the per-message repeated timestamp, platform, and conversation name while keeping speaker attribution for group chats:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/turn/user_header.go&lt;/b&gt;&lt;span&gt;Compact message header projection&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/turn/user_header.go#L165-L183&#34;&gt;L165–183 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;165&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ProjectUserMessageHeader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;166&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ToLower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;TrimSpace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;compact&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;HasPrefix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;TrimSpace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;message&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;167&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;168&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;169&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;message&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;170&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;171&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;172&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;173&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;endRel&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:],&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;174&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;endRel&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;175&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;176&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;177&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;endRel&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;178&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;compactOpening&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;projectMessageOpeningTag&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;179&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;180&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;181&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;182&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;compactOpening&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:]&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;183&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;That saves 85–120 characters per message, reduces occurrences of &lt;code&gt;channel=&amp;quot;telegram&amp;quot;&lt;/code&gt; in a request from 148 down to 2, and shrinks a full-history payload from 221.0 KB to 208.7 KB.&lt;/p&gt;&#xA;&lt;h2 id=&#34;change-5-giving-text-only-models-eyes&#34;&gt;Change 5: Giving Text-Only Models &amp;quot;Eyes&amp;quot;&lt;/h2&gt;&#xA;&lt;p&gt;Some of the primary models I run don&#39;t support vision (such as DeepSeek V4 Flash), yet people post images in group chats all day long. I added an auxiliary vision model mechanism: when the primary model declares no vision support and the current turn includes image attachments, a cheap small vision model describes the images first:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/application/auxiliary_vision.go&lt;/b&gt;&lt;span&gt;Trigger only when the primary model lacks vision&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/application/auxiliary_vision.go#L183-L196&#34;&gt;L183–196 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;183&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;describeImagesWithAuxiliaryVision&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;184&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;185&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;req&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ChatRequest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;186&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;primarySupportsVision&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;187&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;attachments&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;gatewayAttachment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;188&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;189&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;primarySupportsVision&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;190&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;191&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;192&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;images&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;extractNativeImageParts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;attachmentsToAny&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attachments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;193&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;describeImagePartsWithAuxiliaryVision&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;primarySupportsVision&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;images&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;194&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;195&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;196&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;describeImagePartsWithAuxiliaryVision&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;The generated description is appended as an &lt;code&gt;&amp;lt;auxiliary_vision_description&amp;gt;&lt;/code&gt; block at the &lt;strong&gt;tail of the last user message&lt;/strong&gt;, once again leaving the cached prefix untouched:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;internal/agent/application/auxiliary_vision.go&lt;/b&gt;&lt;span&gt;Append vision descriptions to the tail of the last user message&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/Memoh/blob/ad8012c1a0926822307f56454bd26be9ef9dd2dc/internal/agent/application/auxiliary_vision.go#L454-L467&#34;&gt;L454–467 · ad8012c ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;454&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;appendAuxiliaryVisionToLastUserMessage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;visionContext&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;455&lt;/span&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;visionContext&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;TrimSpace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;visionContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;456&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;visionContext&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;457&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;458&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;459&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;460&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Role&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;MessageRoleUser&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;461&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;462&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;463&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Content&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TextPart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;\n\n&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;visionContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;464&lt;/span&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;465&lt;/span&gt;&#x9;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;466&lt;/span&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sdk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;UserMessage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;visionContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;467&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;bonus-telegram-specific-polish&#34;&gt;Bonus Telegram-Specific Polish&lt;/h2&gt;&#xA;&lt;p&gt;A few additional improvements aimed at making the bot feel more natural in Telegram group chats also helped keep costs predictable:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Continuously refreshing the &lt;code&gt;typing&lt;/code&gt; indicator throughout any turn where the bot is selected to reply, so group members see &amp;quot;is typing…&amp;quot; instead of 30 seconds of dead silence followed by a wall of text;&lt;/li&gt;&#xA;&lt;li&gt;Switching context compaction to a rolling-summary mode whose prompt explicitly forbids repeating raw tool-argument JSON; the context budget takes the smaller of the model&#39;s context window and the bot&#39;s compaction threshold, and truncation boundaries never split a &lt;code&gt;user&lt;/code&gt;/&lt;code&gt;tool&lt;/code&gt; pair mid-exchange.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-much-did-it-actually-save&#34;&gt;How Much Did It Actually Save?&lt;/h2&gt;&#xA;&lt;p&gt;Modeling the savings is straightforward. The input cost of a single LLM call is:&lt;/p&gt;&#xA;&lt;div class=&#34;math&#34; tabindex=&#34;0&#34;&gt;&lt;math display=&#34;block&#34; style=&#34;font-feature-settings: &#39;dtls&#39; off;&#34; xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;c&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;a&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;l&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;l&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mrow&gt;&lt;mo fence=&#34;true&#34; form=&#34;prefix&#34; stretchy=&#34;true&#34;&gt;[&lt;/mo&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;n&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;c&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;a&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;c&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;h&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;e&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;mo fence=&#34;true&#34; form=&#34;postfix&#34; stretchy=&#34;true&#34;&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;n&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mrow&gt;&lt;mo fence=&#34;true&#34; form=&#34;prefix&#34; stretchy=&#34;true&#34;&gt;[&lt;/mo&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mo fence=&#34;true&#34; form=&#34;postfix&#34; stretchy=&#34;true&#34;&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;C_{\mathrm{call}} = T \times \left[(1-h) \times P_{\mathrm{in}} + h \times P_{\mathrm{cache}}\right] = T \times P_{\mathrm{in}} \times \left[(1-h) + h \times r\right]&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/div&gt;&#xA;&lt;p&gt;where &lt;code&gt;T&lt;/code&gt; is the number of input tokens, &lt;code&gt;h&lt;/code&gt; is the cache hit rate, and &lt;code&gt;r = P_cache / P_in&lt;/code&gt; is the ratio of cached-input price to uncached-input price. Multiplying by the number of calls &lt;code&gt;N&lt;/code&gt; per turn separates the before/after ratio into three independent factors:&lt;/p&gt;&#xA;&lt;div class=&#34;math&#34; tabindex=&#34;0&#34;&gt;&lt;math display=&#34;block&#34; style=&#34;font-feature-settings: &#39;dtls&#39; off;&#34; xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;b&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;e&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;f&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;r&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;e&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;a&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;f&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;t&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;e&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;r&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;l&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;d&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;n&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;e&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;w&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;l&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;d&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;n&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;e&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;w&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;l&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;d&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mpadded lspace=&#34;0&#34;&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;n&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;e&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;w&lt;/mi&gt;&lt;/mpadded&gt;&lt;/msub&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\frac{C_{\mathrm{before}}}{C_{\mathrm{after}}} = \frac{N_{\mathrm{old}}}{N_{\mathrm{new}}} \times \frac{T_{\mathrm{old}}}{T_{\mathrm{new}}} \times \frac{f(h_{\mathrm{old}})}{f(h_{\mathrm{new}})}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/div&gt;&#xA;&lt;p&gt;where &lt;span class=&#34;math-inline&#34;&gt;&lt;math display=&#34;inline&#34; style=&#34;font-feature-settings: &#39;dtls&#39; off;&#34; xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo form=&#34;prefix&#34; stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mo form=&#34;postfix&#34; stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;f(h) = (1-h) + h \times r&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;. Each of the three factors is grounded in real measurements:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;N_old / N_new = 2–3&lt;/strong&gt;: pure text turns drop from 2 calls to 1, and reply + sticker turns drop from 3 calls to 1. This is structural—no estimation involved;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;T_old / T_new ≈ 70K / 52K ≈ 1.35&lt;/strong&gt;: stripping the unused tool schemas (49.5 KB), dynamic sticker catalog (18.3 KB), and repeated message headers removes ~20K tokens per request;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;h_new = 99.7%&lt;/strong&gt; is measured in production; I set &lt;code&gt;h_old = 95%&lt;/code&gt; to be generous to upstream&#39;s automatic prefix caching, which works well on ordinary turns and only loses its prefix when &lt;code&gt;MEMORY.md&lt;/code&gt; is rewritten.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Using official provider pricing as of 2026-08-03—DeepSeek V4 Flash at $0.0028/$0.14 = &lt;strong&gt;1/50&lt;/strong&gt;, Claude Sonnet 4.6 at 1/10, Kimi K2.6 at ~1/6, and Doubao seed-1.6 at 1/5—and plugging in conservative numbers (&lt;code&gt;N&lt;/code&gt; ratio = 2, &lt;code&gt;h_old&lt;/code&gt; = 95%):&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Model&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:right&#34;&gt;r&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:right&#34;&gt;f(95%) / f(99.7%)&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:right&#34;&gt;Total Factor 2 × 1.35 × f-ratio&lt;/th&gt;&#xA;&lt;th style=&#34;text-align:right&#34;&gt;Savings&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;DeepSeek V4 Flash&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;1/50&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;3.0&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;≈ 8.1×&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;≈ 88%&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Claude Sonnet 4.6&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;1/10&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;1.4&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;≈ 3.8×&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;≈ 74%&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Kimi K2.6&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;≈1/6&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;1.2&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;≈ 3.3×&lt;/td&gt;&#xA;&lt;td style=&#34;text-align:right&#34;&gt;≈ 70%&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The pattern is obvious: the steeper the cache discount, the more leverage you get from pushing the hit rate to 99.7%—DeepSeek&#39;s 50× cache discount pushes total savings close to 90%. Meanwhile, the call-count factor &lt;code&gt;N&lt;/code&gt; doesn&#39;t depend on caching at all; it&#39;s free money. This matches what I see on my actual billing dashboard: costs dropped to well under 1/5 of what they were, and the conservative formula gives ~1/8 on DeepSeek even before counting the eliminated output tokens.&lt;/p&gt;&#xA;&lt;h2 id=&#34;closing-thoughts&#34;&gt;Closing Thoughts&lt;/h2&gt;&#xA;&lt;p&gt;All I really did was ask one question at every step of the pipeline: &lt;strong&gt;when you put a general-purpose agent framework into a high-frequency group chat, is this read or this LLM call actually necessary?&lt;/strong&gt; Don&#39;t make an extra call just to confirm a sent message, combine text + reply + sticker into a single call, push volatile files to the tail of the prompt prefix, don&#39;t send a single byte of unused tool schemas, and let a cheap small vision model look at images first.&lt;/p&gt;&#xA;&lt;p&gt;Once again, credit goes to upstream for building a solid foundation: the tool loop, history projection, and channel abstractions are cleanly separated. The reason I could pull off this degree of specialization in a little over a week is precisely because those boundaries were well drawn—wrapping the provider for terminal &lt;code&gt;send&lt;/code&gt; without touching the core loop, and filtering tools before schema generation, both plugged cleanly into seams the architecture already had. If your use case is &amp;quot;an agent that does multi-step work,&amp;quot; upstream&#39;s defaults are probably right for you; if, like me, you just want a talkative resident in your Telegram group that won&#39;t burn through your wallet, I hope these notes help.&lt;/p&gt;&#xA;</description>
      <category>Tech</category>
      <pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://mizore.blog/en/posts/making-memoh-cheaper-on-telegram/</guid>
    </item>
    <item>
      <title>New Blog Features: Language Icons, Source Quotes, Tickers, and Charts</title>
      <link>https://mizore.blog/en/posts/blog-git-metadata-and-icons/</link>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;This post was written during the old blog (Next.js + MDX) era. After migrating to the current static site, all of these features happen at build time: TradingView widgets became ticker cards that only load the live chart when you click &amp;quot;Live chart&amp;quot;; ECharts blocks became static SVG charts with hover values; source embeds are pinned commit snippets with line numbers; and language icons became corner language labels on code blocks.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This update pushes the blog&#39;s writing experience another step forward: code blocks are easier to scan, code references link straight to GitHub, and financial posts can embed TradingView charts with a tiny shortcode.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-new&#34;&gt;What&#39;s New&lt;/h2&gt;&#xA;&lt;h3 id=&#34;language-icons-on-code-blocks&#34;&gt;Language Icons on Code Blocks&lt;/h3&gt;&#xA;&lt;p&gt;A language logo and copy button float in the top-right corner of every code block—no title bar, no badge border, and no extra vertical space. When a block has a &lt;code&gt;title&lt;/code&gt; or comes from GitHub, a small path line appears above the code and the GitHub link sits tucked into a small icon in the top-right corner.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;feature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;language icons&amp;#39;&lt;/span&gt;&#xA;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;theme&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;catppuccin&amp;#39;&lt;/span&gt;&#xA;&lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;feature&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;theme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;ts&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;restyled-inline-code&#34;&gt;Restyled Inline Code&lt;/h3&gt;&#xA;&lt;p&gt;Inline code in prose like &lt;code&gt;git log --follow&lt;/code&gt;, &lt;code&gt;$AAPL&lt;/code&gt;, and &lt;code&gt;::tv AAPL&lt;/code&gt; no longer sticks out like a bright patch. In light mode it blends closer to Catppuccin Latte&#39;s paper tone, and in dark mode it settles into a low-luminance Mocha surface.&lt;/p&gt;&#xA;&lt;h3 id=&#34;quoting-github-code-directly&#34;&gt;Quoting GitHub Code Directly&lt;/h3&gt;&#xA;&lt;p&gt;When writing a post, enter:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;::github-code repo=&amp;#34;mizorewww/blog&amp;#34; ref=&amp;#34;c067042276d4b4b384c66c0c61fcd4f6716eb599&amp;#34; path=&amp;#34;contentlayer.config.ts&amp;#34; lines=&amp;#34;251-253&amp;#34; lang=&amp;#34;ts&amp;#34; title=&amp;#34;contentlayer.config.ts&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;md&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;It renders as a code block with Shiki syntax highlighting, a language icon, and a direct link to GitHub:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;contentlayer.config.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/contentlayer.config.ts#L251-L253&#34;&gt;L251–253 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;251&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;githubEmbedPattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sr&#34;&gt;/^::github-(code|diff)\s+(.+)$/&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;252&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tradingViewMiniPattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sr&#34;&gt;/^\$([A-Za-z0-9._:-]+)$/&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;253&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tradingViewAdvancedPattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sr&#34;&gt;/^::(?:tv|tv-advanced|tradingview)\s+(.+)$/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;line-by-line-diff-highlighting-like-github&#34;&gt;Line-by-Line Diff Highlighting Like GitHub&lt;/h3&gt;&#xA;&lt;p&gt;When writing a post, enter:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;::github-diff repo=&amp;#34;mizorewww/blog&amp;#34; ref=&amp;#34;c067042276d4b4b384c66c0c61fcd4f6716eb599&amp;#34; path=&amp;#34;css/prism.css&amp;#34; lines=&amp;#34;1-15&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;md&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Rendered output:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/commit/c067042276d4b4b384c66c0c61fcd4f6716eb599&#34;&gt;Changes to &lt;code&gt;css/prism.css&lt;/code&gt; in c067042&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;gu&#34;&gt;@@ -8,6 +8,44 @@ figure[data-rehype-pretty-code-figure] [data-rehype-pretty-code-title] {&lt;/span&gt;&#xA;   @apply flex items-center justify-between gap-3 border-b border-slate-200 bg-white/70 px-4 py-2 text-xs text-slate-600 dark:border-[#405064] dark:bg-white/[0.035] dark:text-white/65;&#xA; }&#xA; &#xA;&lt;span class=&#34;gi&#34;&gt;+figure[data-rehype-pretty-code-figure] .code-title-main {&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+  @apply inline-flex min-w-0 items-center gap-2;&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+}&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+figure[data-rehype-pretty-code-figure] .code-language-icon {&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+  @apply inline-flex h-5 min-w-5 shrink-0 items-center justify-center rounded-[5px] border border-slate-300 bg-slate-100 px-1 font-sans text-[0.62rem] leading-none font-semibold text-slate-600 dark:border-white/15 dark:bg-white/10 dark:text-white/70;&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+}&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+figure[data-rehype-pretty-code-figure] .code-language-icon[data-code-language=&amp;#39;ts&amp;#39;],&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+figure[data-rehype-pretty-code-figure] .code-language-icon[data-code-language=&amp;#39;tsx&amp;#39;] {&lt;/span&gt;&#xA;&lt;span class=&#34;gi&#34;&gt;+  @apply border-sky-200 bg-sky-50 text-sky-700 dark:border-sky-400/25 dark:bg-sky-400/10 dark:text-sky-200;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;diff&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;single-line-tickers-become-mini-charts&#34;&gt;Single-Line Tickers Become Mini Charts&lt;/h3&gt;&#xA;&lt;p&gt;Put a ticker on its own line:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;$AAPL&#xA;$BINANCE:BTCUSDT.P&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;md&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;On the old site, each of these lines turned into a Mini Chart. The current static site doesn&#39;t load TradingView scripts upfront—instead, it renders a ticker card linking to TradingView:&lt;/p&gt;&#xA;&lt;div class=&#34;ticker&#34; data-symbol=&#34;NASDAQ:AAPL&#34; data-interval=&#34;&#34; data-height=&#34;&#34;&gt;&lt;span&gt;&lt;b&gt;NASDAQ:AAPL&lt;/b&gt;&lt;span class=&#34;ticker-label&#34;&gt;Apple Inc.&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;ticker-go&#34;&gt;&lt;button type=&#34;button&#34;&gt;Live chart&lt;/button&gt;&lt;a href=&#34;https://www.tradingview.com/symbols/NASDAQ-AAPL/&#34;&gt;TradingView ↗&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;ticker&#34; data-symbol=&#34;BINANCE:BTCUSDT.P&#34; data-interval=&#34;&#34; data-height=&#34;&#34;&gt;&lt;span&gt;&lt;b&gt;BINANCE:BTCUSDT.P&lt;/b&gt;&lt;span class=&#34;ticker-label&#34;&gt;Bitcoin / USDT Perpetual&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;ticker-go&#34;&gt;&lt;button type=&#34;button&#34;&gt;Live chart&lt;/button&gt;&lt;a href=&#34;https://www.tradingview.com/symbols/BINANCE-BTCUSDT.P/&#34;&gt;TradingView ↗&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&#xA;&lt;h3 id=&#34;shortcode-for-advanced-charts&#34;&gt;Shortcode for Advanced Charts&lt;/h3&gt;&#xA;&lt;p&gt;When writing a post, enter:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;::tv AAPL interval=60 height=460&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;md&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;On the old site this rendered an interactive Advanced Chart; here it is likewise a ticker card.&lt;/p&gt;&#xA;&lt;h3 id=&#34;rendering-echarts-directly-from-code-blocks&#34;&gt;Rendering ECharts Directly from Code Blocks&lt;/h3&gt;&#xA;&lt;p&gt;Use an &lt;code&gt;```echarts&lt;/code&gt; code block whose body is the chart&#39;s option JSON, with &lt;code&gt;title&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; supported in the meta string:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;``&lt;span class=&#34;sb&#34;&gt;`echarts title=&amp;#34;Weekly Visits&amp;#34; height=320&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;  &amp;#34;tooltip&amp;#34;: { &amp;#34;trigger&amp;#34;: &amp;#34;axis&amp;#34; },&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;  &amp;#34;xAxis&amp;#34;: {&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;    &amp;#34;type&amp;#34;: &amp;#34;category&amp;#34;,&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;    &amp;#34;data&amp;#34;: [&amp;#34;Mon&amp;#34;, &amp;#34;Tue&amp;#34;, &amp;#34;Wed&amp;#34;, &amp;#34;Thu&amp;#34;, &amp;#34;Fri&amp;#34;, &amp;#34;Sat&amp;#34;, &amp;#34;Sun&amp;#34;]&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;  },&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;  &amp;#34;yAxis&amp;#34;: { &amp;#34;type&amp;#34;: &amp;#34;value&amp;#34; },&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;  &amp;#34;series&amp;#34;: [&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;    {&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;      &amp;#34;name&amp;#34;: &amp;#34;Visits&amp;#34;,&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;      &amp;#34;type&amp;#34;: &amp;#34;line&amp;#34;,&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;      &amp;#34;smooth&amp;#34;: true,&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;      &amp;#34;areaStyle&amp;#34;: {},&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;      &amp;#34;data&amp;#34;: [120, 200, 150, 80, 70, 110, 130]&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;    }&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;  ]&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;``&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;md&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;On the old site these were two ECharts instances. The current site draws the same data as static SVG at build time; since there is no pie chart type, the second example is represented as a &lt;code&gt;data&lt;/code&gt; table:&lt;/p&gt;&#xA;&lt;figure class=&#34;chart&#34;&gt;&lt;figcaption&gt;&lt;span&gt;Weekly Visits&lt;/span&gt;&lt;/figcaption&gt;&lt;div class=&#34;plot&#34; data-tip=&#34;{&amp;#34;x&amp;#34;:[7.83,22.79,37.75,52.71,67.67,82.63,97.59],&amp;#34;l&amp;#34;:[&amp;#34;Mon&amp;#34;,&amp;#34;Tue&amp;#34;,&amp;#34;Wed&amp;#34;,&amp;#34;Thu&amp;#34;,&amp;#34;Fri&amp;#34;,&amp;#34;Sat&amp;#34;,&amp;#34;Sun&amp;#34;],&amp;#34;s&amp;#34;:[{&amp;#34;n&amp;#34;:&amp;#34;Visits&amp;#34;,&amp;#34;c&amp;#34;:&amp;#34;var(--green)&amp;#34;,&amp;#34;v&amp;#34;:[&amp;#34;120&amp;#34;,&amp;#34;200&amp;#34;,&amp;#34;150&amp;#34;,&amp;#34;80&amp;#34;,&amp;#34;70&amp;#34;,&amp;#34;110&amp;#34;,&amp;#34;130&amp;#34;]}]}&#34; style=&#34;--h:274&#34;&gt;&lt;svg viewBox=&#34;0 0 664 274&#34; preserveAspectRatio=&#34;none&#34; role=&#34;img&#34; aria-label=&#34;Weekly Visits&#34;&gt;&lt;path d=&#34;M52 190H648M52 130H648M52 70H648M52 10H648&#34; fill=&#34;none&#34; style=&#34;stroke:var(--grid)&#34; vector-effect=&#34;non-scaling-stroke&#34;/&gt;&lt;path d=&#34;M52 106L151.3 10L250.7 70L350 154L449.3 166L548.7 118L648 94L648 250L52 250Z&#34; fill-opacity=&#34;0.16&#34; style=&#34;fill:var(--green)&#34; vector-effect=&#34;non-scaling-stroke&#34;/&gt;&lt;path d=&#34;M52 106L151.3 10L250.7 70L350 154L449.3 166L548.7 118L648 94&#34; stroke-width=&#34;1.25&#34; fill=&#34;none&#34; stroke-linejoin=&#34;round&#34; style=&#34;stroke:var(--green)&#34; vector-effect=&#34;non-scaling-stroke&#34;/&gt;&lt;path d=&#34;M52 250H648&#34; fill=&#34;none&#34; style=&#34;stroke:var(--faint)&#34; vector-effect=&#34;non-scaling-stroke&#34;/&gt;&lt;/svg&gt;&lt;span class=&#34;yl&#34; style=&#34;left:0.000%;top:91.241%;width:6.627%&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;yl&#34; style=&#34;left:0.000%;top:69.343%;width:6.627%&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;yl&#34; style=&#34;left:0.000%;top:47.445%;width:6.627%&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;yl&#34; style=&#34;left:0.000%;top:25.547%;width:6.627%&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;yl&#34; style=&#34;left:0.000%;top:3.650%;width:6.627%&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;xl&#34; style=&#34;left:22.791%;top:96.350%&#34;&gt;Tue&lt;/span&gt;&lt;span class=&#34;xl&#34; style=&#34;left:52.711%;top:96.350%&#34;&gt;Thu&lt;/span&gt;&lt;span class=&#34;xl&#34; style=&#34;left:82.631%;top:96.350%&#34;&gt;Sat&lt;/span&gt;&lt;span class=&#34;dl&#34; style=&#34;left:22.791%;top:3.650%;transform:translate(6px,-50%);color:var(--ink)&#34;&gt;200 · Tue&lt;/span&gt;&lt;/div&gt;&lt;/figure&gt;&#xA;&lt;figure class=&#34;data&#34;&gt;&lt;figcaption&gt;Posts by Category&lt;/figcaption&gt;&lt;div class=&#34;data-scroll&#34; tabindex=&#34;0&#34;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th class=&#34;num&#34;&gt;Posts&lt;/th&gt;&lt;th class=&#34;num&#34;&gt;Share&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Tinkering&lt;/td&gt;&lt;td class=&#34;num&#34;&gt;40&lt;/td&gt;&lt;td class=&#34;num bar&#34; style=&#34;--a:0.0%;--b:100.0%&#34;&gt;40%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dev&lt;/td&gt;&lt;td class=&#34;num&#34;&gt;32&lt;/td&gt;&lt;td class=&#34;num bar&#34; style=&#34;--a:0.0%;--b:80.0%&#34;&gt;32%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Notes&lt;/td&gt;&lt;td class=&#34;num&#34;&gt;18&lt;/td&gt;&lt;td class=&#34;num bar&#34; style=&#34;--a:0.0%;--b:45.0%&#34;&gt;18%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Other&lt;/td&gt;&lt;td class=&#34;num&#34;&gt;10&lt;/td&gt;&lt;td class=&#34;num bar&#34; style=&#34;--a:0.0%;--b:25.0%&#34;&gt;10%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&#xA;&lt;p&gt;If the JSON is invalid, it gracefully falls back to a regular code block instead of breaking the build. When you need functions or other options that plain JSON cannot express, you can also pass a JS object directly to the &lt;code&gt;&amp;lt;ECharts&amp;gt;&lt;/code&gt; component. Charts follow the site&#39;s light/dark theme, and the &lt;code&gt;echarts&lt;/code&gt; library is lazy-loaded on demand so it stays out of the initial bundle.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-it-works-under-the-hood&#34;&gt;How It Works Under the Hood&lt;/h2&gt;&#xA;&lt;h3 id=&#34;turning-shortcodes-into-components-in-remark&#34;&gt;Turning Shortcodes into Components in Remark&lt;/h3&gt;&#xA;&lt;p&gt;These regular expressions match the ticker chart syntax. &lt;code&gt;$AAPL&lt;/code&gt; becomes a Mini Chart and &lt;code&gt;::tv AAPL&lt;/code&gt; becomes an Advanced Chart.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;contentlayer.config.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/contentlayer.config.ts#L251-L253&#34;&gt;L251–253 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;251&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;githubEmbedPattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sr&#34;&gt;/^::github-(code|diff)\s+(.+)$/&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;252&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tradingViewMiniPattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sr&#34;&gt;/^\$([A-Za-z0-9._:-]+)$/&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;253&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tradingViewAdvancedPattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sr&#34;&gt;/^::(?:tv|tv-advanced|tradingview)\s+(.+)$/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;The Mini Chart transform is intentionally conservative: it only triggers when an entire paragraph consists of a single ticker, so mentioning &lt;code&gt;$AAPL&lt;/code&gt; in the middle of a sentence won&#39;t drop a giant chart into the paragraph.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;contentlayer.config.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/contentlayer.config.ts#L288-L295&#34;&gt;L288–295 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;288&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createTradingViewMiniNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;MdastNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;289&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isTradingViewTicker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;290&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;291&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;292&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;293&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createMdxFlowNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;TradingViewMiniChart&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;294&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;normalizeTradingViewSymbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;295&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Advanced Chart adds parameter parsing so attributes like &lt;code&gt;height=460&lt;/code&gt; and &lt;code&gt;interval=60&lt;/code&gt; are forwarded as JSX props.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;contentlayer.config.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/contentlayer.config.ts#L298-L313&#34;&gt;L298–313 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;298&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createTradingViewAdvancedNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;source&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;MdastNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;299&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rawSymbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrParts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;trim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/\s+/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;300&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;301&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rawSymbol&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isTradingViewTicker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rawSymbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;302&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;303&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;304&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;305&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;parseEmbedAttributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrParts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;TradingViewAttrs&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;306&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;307&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createMdxFlowNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;TradingViewAdvancedChart&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;308&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;height&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;attrs.height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;309&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;interval&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;attrs.interval&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;310&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;locale&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;attrs.locale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;311&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;normalizeTradingViewSymbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rawSymbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;312&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;timezone&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;attrs.timezone&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;313&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Finally, the plugins are wired into Contentlayer&#39;s remark pipeline. Because shortcodes are transformed before MDX compilation, no string scanning happens in the browser.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;contentlayer.config.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/contentlayer.config.ts#L1063-L1069&#34;&gt;L1063–1069 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;1063&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;makeSource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;1064&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;contentDirPath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;1065&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;documentTypes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Authors&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;1066&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;mdx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;1067&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;cwd&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;process.cwd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;1068&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;remarkPlugins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;remarkGfm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;remarkTradingViewWidgets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;remarkIconShortcodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;remarkGitHubEmbeds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;1069&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;rehypePlugins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;loading-tradingview-only-on-the-client&#34;&gt;Loading TradingView Only on the Client&lt;/h3&gt;&#xA;&lt;p&gt;The official TradingView widget requires injecting an external &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;, so the component stays a client component. On render, it clears the container and inserts the widget mount node and config script; whenever the theme or props change, it rebuilds the widget.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;components/TradingViewWidgets.tsx&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/components/TradingViewWidgets.tsx#L83-L101&#34;&gt;L83–101 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;83&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;useEffect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;84&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;container&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;containerRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;current&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;85&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;86&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;87&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;88&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;89&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;90&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;div class=&amp;#34;tradingview-widget-container__widget&amp;#34;&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;91&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;92&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;script&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;93&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;94&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;scriptSrc&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;95&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;JSON&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;stringify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;96&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendChild&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;97&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;98&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;99&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;100&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;101&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;scriptSrc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Ticker symbols are normalized first. Bare &lt;code&gt;AAPL&lt;/code&gt; defaults to &lt;code&gt;NASDAQ:AAPL&lt;/code&gt;, while an explicit symbol like &lt;code&gt;NYSE:IBM&lt;/code&gt; is left untouched.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;lib/tradingview.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/lib/tradingview.ts#L4-L20&#34;&gt;L4–20 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;normalizeTradingViewSymbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;defaultExchange&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;NASDAQ&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;trim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/^\$/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toUpperCase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;9&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;explicitTradingViewSymbolPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;plainTickerPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;defaultExchange&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;symbol&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;enhancing-code-block-title-bars-in-rehype&#34;&gt;Enhancing Code Block Title Bars in Rehype&lt;/h3&gt;&#xA;&lt;p&gt;Language icons aren&#39;t written by hand in each post; they&#39;re injected across the board during the rehype pass. It locates the &lt;code&gt;figure&lt;/code&gt; generated by Shiki and ensures a title bar exists.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;contentlayer.config.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/contentlayer.config.ts#L850-L868&#34;&gt;L850–868 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;850&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;enhanceCodeTitle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;node&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;HastNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;851&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;852&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tagName&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;figure&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;853&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;properties&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;data-rehype-pretty-code-figure&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;undefined&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;854&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;855&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;856&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;857&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;858&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ensureCodeTitle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;859&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;code&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;findDescendantElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;code&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;860&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sourceUrl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typeof&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;githubSourceUrl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;string&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;githubSourceUrl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;861&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getCodeLanguage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;862&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;titleText&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getNodeText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getLanguageName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;863&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;864&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;children&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createCodeTitleNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;titleText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;865&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;866&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sourceUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;867&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;children&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createCodeSourceLinkNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sourceUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;868&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;The left side of the title bar pairs the language icon with the title text. When no explicit title is provided, it falls back to the language display name—such as &lt;code&gt;TypeScript&lt;/code&gt;, &lt;code&gt;Diff&lt;/code&gt;, or &lt;code&gt;Markdown&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;contentlayer.config.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/contentlayer.config.ts#L787-L799&#34;&gt;L787–799 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;787&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createCodeTitleNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;titleText&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;HastNode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;788&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;789&lt;/span&gt;    &lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;element&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;790&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;tagName&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;span&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;791&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;properties&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;className&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;code-title-main&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;792&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;children&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;793&lt;/span&gt;      &lt;span class=&#34;nx&#34;&gt;createCodeLanguageIconNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;794&lt;/span&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;795&lt;/span&gt;        &lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;element&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;796&lt;/span&gt;        &lt;span class=&#34;nx&#34;&gt;tagName&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;span&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;797&lt;/span&gt;        &lt;span class=&#34;nx&#34;&gt;properties&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;className&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;code-title-text&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;798&lt;/span&gt;        &lt;span class=&#34;nx&#34;&gt;children&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;titleText&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getLanguageName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}],&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;799&lt;/span&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Visually, the logos come straight from &lt;code&gt;simple-icons&lt;/code&gt; brand icons, tree-shaken on demand so they don&#39;t bloat first-load JavaScript; languages without a brand icon fall back to a short text badge.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;css/prism.css&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/css/prism.css#L11-L17&#34;&gt;L11–17 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;figure&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;data-rehype-pretty-code-figure&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;code-title-main&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;  @apply inline-flex min-w-0 items-center gap-2&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;figure&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;data-rehype-pretty-code-figure&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;code-language-icon&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;  @apply inline-flex h-5 min-w-5 shrink-0 items-center justify-center rounded-[5px] border border-slate-300 bg-slate-100 px-1 font-sans text-[0.62rem] leading-none font-semibold text-slate-600 &lt;span class=&#34;n&#34;&gt;dark&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;white&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dark&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg-white&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dark&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;white&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;70&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;keeping-inline-code-from-stealing-attention&#34;&gt;Keeping Inline Code from Stealing Attention&lt;/h3&gt;&#xA;&lt;p&gt;Inline code now uses a low-contrast, subtly bordered token style. It&#39;s still unmistakably code, without popping out of the paragraph like a button.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;css/tailwind.css&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/css/tailwind.css#L110-L124&#34;&gt;L110–124 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;110&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;111&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;color-mix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;oklab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slate&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;72&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;transparent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;112&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;113&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;linear-gradient&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;114&lt;/span&gt;    &lt;span class=&#34;kc&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;bottom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;115&lt;/span&gt;    &lt;span class=&#34;nf&#34;&gt;color-mix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;oklab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;white&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;92&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slate&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;116&lt;/span&gt;    &lt;span class=&#34;nf&#34;&gt;color-mix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;oklab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slate&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;88&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;white&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;117&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;118&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;box-shadow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;inset&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;color-mix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;oklab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slate&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;transparent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;119&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#4c4f69&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;120&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.08&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.34&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;121&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.86&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;em&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;122&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;font-weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;500&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;123&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.75&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;124&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;word-break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;break-word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;github-code-and-diffs-still-go-through-shiki&#34;&gt;GitHub Code and Diffs Still Go Through Shiki&lt;/h3&gt;&#xA;&lt;p&gt;At build time, &lt;code&gt;::github-code&lt;/code&gt; and &lt;code&gt;::github-diff&lt;/code&gt; fetch the real source file or diff and emit a standard code AST node. That means they don&#39;t need a custom renderer—Shiki highlights them just like any other code block.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;contentlayer.config.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/contentlayer.config.ts#L543-L552&#34;&gt;L543–552 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;543&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;kind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;code&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;544&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;selectCodeLines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getGitHubFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;545&lt;/span&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;546&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;547&lt;/span&gt;    &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;normalizeGitHubRepo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lines&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`#L&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lines&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;548&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;549&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createCodeNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lang&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;550&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;showLineNumbers&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;551&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;sourceUrl&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;getGitHubCodeUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;552&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Diffs follow the exact same path, except the data source is a patch and the language defaults to &lt;code&gt;diff&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;figcaption&gt;&lt;span class=&#34;code-path&#34;&gt;&lt;b&gt;contentlayer.config.ts&lt;/b&gt;&lt;/span&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;a href=&#34;https://github.com/mizorewww/blog/blob/c067042276d4b4b384c66c0c61fcd4f6716eb599/contentlayer.config.ts#L555-L563&#34;&gt;L555–563 · c067042 ↗&lt;/a&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;ln&#34;&gt;555&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;selectCodeLines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getGitHubDiff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;556&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;557&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;558&lt;/span&gt;  &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;normalizeGitHubRepo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;base&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;head&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;559&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;560&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;createCodeNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;No diff matched this query.&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lang&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;diff&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;561&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;showLineNumbers&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;562&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;sourceUrl&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;getGitHubDiffUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;span class=&#34;ln&#34;&gt;563&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&#xA;&lt;p&gt;That&#39;s why GitHub embeds get the Shiki color theme, language icon, copy button, GitHub link, and diff line backgrounds all at once.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-mental-model-for-writing-posts&#34;&gt;The Mental Model for Writing Posts&lt;/h2&gt;&#xA;&lt;p&gt;For normal posts, you just write Markdown. When you want an icon, write &lt;code&gt;:icon-code:&lt;/code&gt;; for a market ticker, write &lt;code&gt;$AAPL&lt;/code&gt; or &lt;code&gt;::tv AAPL&lt;/code&gt;; for a data chart, write an &lt;code&gt;```echarts&lt;/code&gt; block; to quote source code, write &lt;code&gt;::github-code&lt;/code&gt;; and to quote a commit diff, write &lt;code&gt;::github-diff&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The build step turns these shortcodes into stable MDX components or Shiki code blocks, while the runtime only handles interactivity and external widgets. The authoring syntax stays brief, and the rendered page stays predictable.&lt;/p&gt;&#xA;</description>
      <category>Tinkering</category>
      <pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://mizore.blog/en/posts/blog-git-metadata-and-icons/</guid>
    </item>
    <item>
      <title>Fixing Obsidian Web Clipper Not Working on KDE Plasma Wayland</title>
      <link>https://mizore.blog/en/posts/kde-plasma-obsidian-web-clipper/</link>
      <description>&lt;p&gt;While using Obsidian on Plasma Wayland, I noticed that whenever Obsidian was already open, clicking &lt;strong&gt;Add to Obsidian&lt;/strong&gt; in Chrome&#39;s &lt;strong&gt;Obsidian Web Clipper&lt;/strong&gt; extension created a completely blank note.&lt;/p&gt;&#xA;&lt;p&gt;The content would only show up properly if I closed Obsidian completely before clipping from Web Clipper.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cause&#34;&gt;Cause&lt;/h2&gt;&#xA;&lt;p&gt;This isn&#39;t because Web Clipper failed to capture the page—it&#39;s because KDE prevented the already-running Obsidian instance from properly receiving focus.&lt;/p&gt;&#xA;&lt;p&gt;When Web Clipper hands page content over to Obsidian, Obsidian needs to be raised and focused properly to read the incoming data. Under KDE&#39;s default window management rules, an Obsidian instance running in the background can be blocked from stealing focus, so the clipped content is never written and you end up with an empty note.&lt;/p&gt;&#xA;&lt;h2 id=&#34;analysis&#34;&gt;Analysis&lt;/h2&gt;&#xA;&lt;p&gt;The key symptoms are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Clipping works normally when Obsidian is closed;&lt;/li&gt;&#xA;&lt;li&gt;Clipping produces an empty note when Obsidian is already open;&lt;/li&gt;&#xA;&lt;li&gt;This means the browser extension itself is working fine;&lt;/li&gt;&#xA;&lt;li&gt;The failure happens when Obsidian is already running and KDE prevents it from responding properly to Web Clipper&#39;s activation request.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So this is a window focus and activation permission issue in KDE, not a misconfiguration in your Obsidian vault, templates, or Chrome extension.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&lt;/h2&gt;&#xA;&lt;p&gt;Add a window rule for Obsidian in KDE: open &lt;code&gt;System Settings → Window Management → Window Rules&lt;/code&gt; and configure it as shown below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/639f87fb1000edf73702913b297ee8295880b29d636cd55533af044ea6b0d2c5.webp&#34; alt=&#34;Obsidian window rule configuration in KDE System Settings&#34; decoding=&#34;async&#34; fetchpriority=&#34;high&#34; width=&#34;1600&#34; height=&#34;1167&#34; srcset=&#34;https://mizore.blog/images/605a9074e4b97eb9a9e494b9842199c8879802dcf3e731bd960c1ecd3a66dc58.webp 720w, https://mizore.blog/images/639f87fb1000edf73702913b297ee8295880b29d636cd55533af044ea6b0d2c5.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;</description>
      <category>Tinkering</category>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mizore.blog/en/posts/kde-plasma-obsidian-web-clipper/</guid>
    </item>
    <item>
      <title>Xiaomi Book Pro 14 on Linux</title>
      <link>https://mizore.blog/en/posts/xiaomi-book-pro-14/</link>
      <description>&lt;p&gt;The reason I picked up this Xiaomi Book Pro 14 is quite simple: I already have a MacBook Pro that works great for my daily needs, but there are always things that a Mac either can&#39;t do or does awkwardly. I needed an x86 thin-and-light to handle the tasks that are &amp;quot;best done on x86.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;As someone who can&#39;t stand leaving things stock, the first order of business with a new machine was, naturally, installing Arch Linux. I ran into a few pitfalls along the way and thoroughly dug into the fingerprint feature—something I’d never used before. I’m documenting it all here as a record for myself and a reference for anyone who encounters similar issues.&lt;/p&gt;&#xA;&lt;p&gt;First, here are the specs of my unit:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;SoC:&lt;/strong&gt; Intel Ultra X7 358H&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;RAM:&lt;/strong&gt; 32GB LPDDR5x 9600MT/s (Soldered)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GPU:&lt;/strong&gt; Intel Arc B390&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://mizore.blog/images/b5d09a616b4aa066b319f1f0025d0b697b73dd46c282c049256b89395a24afb6.webp&#34; alt=&#34;Xiaomi Book Pro 14 running Arch Linux, with fastfetch system information in the terminal&#34; decoding=&#34;async&#34; fetchpriority=&#34;high&#34; width=&#34;1600&#34; height=&#34;1200&#34; srcset=&#34;https://mizore.blog/images/7ca7c73067278d7a82fe9e0e1a8ae3a98b66a535ce28bf1b4b2af3bd29ab5c10.webp 720w, https://mizore.blog/images/b5d09a616b4aa066b319f1f0025d0b697b73dd46c282c049256b89395a24afb6.webp 1600w&#34; sizes=&#34;(max-width: 760px) calc(100vw - 64px), 704px&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;problem-1-screen-artifacts&#34;&gt;Problem 1: Screen Artifacts&lt;/h2&gt;&#xA;&lt;p&gt;Right after the installation, the screen was glitching out. After some digging, the culprit turned out to be Intel&#39;s Panel Self Refresh technology.&lt;/p&gt;&#xA;&lt;p&gt;The fix is straightforward—just add this line to your kernel parameters:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;xe.enable_psr=0&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;problem-2-keyboard-not-recognized&#34;&gt;Problem 2: Keyboard Not Recognized&lt;/h2&gt;&#xA;&lt;p&gt;This one was even weirder: the keyboard worked perfectly in the BIOS and GRUB, but became completely unresponsive as soon as the system booted. Getting stuck here during the installation process is incredibly frustrating.&lt;/p&gt;&#xA;&lt;p&gt;The solution, again, is to add kernel parameters:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;i8042.nopnp=1 i8042.dumbkbd=1&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Once the screen and keyboard were sorted out, the system was basically usable. What follows is the part I spent the most time on—the fingerprint reader.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fingerprint-the-main-event&#34;&gt;Fingerprint: The Main Event&lt;/h2&gt;&#xA;&lt;p&gt;Honestly, I&#39;d never used a device with a fingerprint reader before, so I explored this area quite meticulously and hit many snags. It deserves its own write-up.&lt;/p&gt;&#xA;&lt;h3 id=&#34;why-doesnt-sudo-pop-up-a-fingerprint-gui-like-macos&#34;&gt;Why doesn&#39;t &lt;code&gt;sudo&lt;/code&gt; pop up a fingerprint GUI like macOS?&lt;/h3&gt;&#xA;&lt;p&gt;This was the most irritating part of the whole ordeal. On macOS, &lt;code&gt;sudo&lt;/code&gt; can use Touch ID. Why not on Linux?&lt;/p&gt;&#xA;&lt;p&gt;It&#39;s not that &amp;quot;no one thought of it&amp;quot;; it&#39;s that the architectures are fundamentally different.&lt;/p&gt;&#xA;&lt;p&gt;The authentication chain for &lt;code&gt;sudo&lt;/code&gt; looks like this:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;sudo → PAM → Terminal session or askpass&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;The beautiful KDE fingerprint authentication dialog, on the other hand, follows a different path:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;App → Polkit → KDE Polkit Agent → PAM → fprintd&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;That GUI is provided by the Polkit agent. It doesn&#39;t spring forth from PAM itself, nor is it part of &lt;code&gt;sudo&lt;/code&gt;. The PAM module can only participate in the authentication flow; it can&#39;t magically transform a terminal-based &lt;code&gt;sudo&lt;/code&gt; prompt into a KDE-style identity verification pop-up.&lt;/p&gt;&#xA;&lt;p&gt;Using &lt;code&gt;sudo -A&lt;/code&gt; with &lt;code&gt;SUDO_ASKPASS&lt;/code&gt; can indeed pop up a graphical password box, but that&#39;s still on &lt;code&gt;sudo&lt;/code&gt;&#39;s own askpass track, which is separate from the KDE Polkit agent. So, at best, it makes the &amp;quot;enter password&amp;quot; step a GUI, but it can&#39;t bring over the fingerprint experience.&lt;/p&gt;&#xA;&lt;p&gt;macOS can do it because Apple integrated &lt;code&gt;sudo&lt;/code&gt;, PAM, Touch ID, the Secure Enclave, and LocalAuthentication at the system level right from the start. On Linux, these components belong to different projects and thus have no natural path to a unified experience.&lt;/p&gt;&#xA;&lt;h3 id=&#34;a-key-limitation-of-pam_fprintd-the-pam-stack-is-serial&#34;&gt;A Key Limitation of &lt;code&gt;pam_fprintd&lt;/code&gt;: The PAM Stack is Serial&lt;/h3&gt;&#xA;&lt;p&gt;There&#39;s another fundamental limitation with &lt;code&gt;pam_fprintd&lt;/code&gt;: in a standard PAM stack, it and password authentication execute in series.&lt;/p&gt;&#xA;&lt;p&gt;My initial ideal experience was something like this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For a single sudo prompt, it would simultaneously wait for my password and my fingerprint, using whichever was provided first.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;But in reality, this isn&#39;t possible. A login manager can use more complex methods to fire up multiple PAM sessions to simulate concurrency, but a regular &lt;code&gt;sudo&lt;/code&gt; won&#39;t do that.&lt;/p&gt;&#xA;&lt;p&gt;So, the real-world choices are limited to the following experiences:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Option A:&lt;/strong&gt; Fingerprint first, fallback to password on failure.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Option B:&lt;/strong&gt; Password first, fallback to fingerprint if you press Enter with an empty field.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Option C:&lt;/strong&gt; Only use the Polkit GUI, don&#39;t force fingerprint on sudo.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Option D:&lt;/strong&gt; Use a third-party hack module (not recommended—don&#39;t mess around with root authentication).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I eventually settled on Option B, but I tried Option A first. Let me explain why it flopped.&lt;/p&gt;&#xA;&lt;h3 id=&#34;option-a-fingerprint-first-fallback-to-password-post-mortem&#34;&gt;Option A: Fingerprint First, Fallback to Password (Post-Mortem)&lt;/h3&gt;&#xA;&lt;p&gt;My initial, intuitive configuration was this, in &lt;code&gt;/etc/pam.d/sudo&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;#%PAM-1.0&#xA;&#xA;auth        sufficient  pam_fprintd.so max-tries=3 timeout=8&#xA;auth        include     system-auth&#xA;account     include     system-auth&#xA;session     include     system-auth&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Logically, this looks fine: try the fingerprint first. If it succeeds, great; if not, it&#39;ll ask for a password.&lt;/p&gt;&#xA;&lt;p&gt;But in practice, it broke. I deliberately let the fingerprint recognition fail, then typed the correct password, but &lt;code&gt;sudo&lt;/code&gt; still would not let me through. The logs showed entries like this:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;pam_unix(sudo:auth): conversation failed&#xA;pam_unix(sudo:auth): auth could not identify password for [...]&#xA;pam_faillock(sudo:auth): Consecutive login failures ... account temporarily locked&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Meanwhile, &lt;code&gt;fprintd&lt;/code&gt; was also complaining:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;Device was already claimed&#xA;Verification was in progress, stopping it&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;It seems the interaction between &lt;code&gt;sudo&lt;/code&gt;, the terminal PAM conversation, &lt;code&gt;pam_fprintd&lt;/code&gt;, and the subsequent password stack gets into a messy state. After the fingerprint failed, the password fallback didn&#39;t take over cleanly, and it also increased the &lt;code&gt;faillock&lt;/code&gt; failure count, temporarily locking my account.&lt;/p&gt;&#xA;&lt;p&gt;The biggest danger with this kind of problem is that you&#39;re modifying the root privilege escalation entry point. If you bork &lt;code&gt;/etc/pam.d/sudo&lt;/code&gt; and don&#39;t have another root channel, it&#39;s easy to lock yourself out.&lt;/p&gt;&#xA;&lt;p&gt;My recovery method at that time was using a still-functional Polkit:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;pkexec sh -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;cat &amp;gt; /etc/pam.d/sudo &amp;lt;&amp;lt;EOF&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;#%PAM-1.0&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;auth        include     system-auth&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;account     include     system-auth&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;session     include     system-auth&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;EOF&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;faillock --user username --reset&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;systemctl restart fprintd&lt;/span&gt;&#xA;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;I suggest keeping this rollback method in mind: first, revert sudo to Arch&#39;s default password-only path, then clear &lt;code&gt;faillock&lt;/code&gt;, and finally restart &lt;code&gt;fprintd&lt;/code&gt; to release any lingering device claims. It&#39;s a lifesaver in critical moments.&lt;/p&gt;&#xA;&lt;h3 id=&#34;option-b-password-first-empty-enter-for-fingerprint-my-current-setup&#34;&gt;Option B: Password First, Empty Enter for Fingerprint (My Current Setup)&lt;/h3&gt;&#xA;&lt;p&gt;I later switched to a different approach: the system presents a normal sudo password prompt, but if you just press Enter (submitting an empty password), it falls back to fingerprint verification.&lt;/p&gt;&#xA;&lt;p&gt;My current configuration in &lt;code&gt;/etc/pam.d/sudo&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;#%PAM-1.0&#xA;&#xA;# Prompt for password first; an empty password triggers a fingerprint attempt&#xA;auth        sufficient  pam_unix.so try_first_pass likeauth nullok&#xA;&#xA;# Prevent fingerprint prompts in non-tty background sudo processes&#xA;auth        [success=1 default=ignore] pam_succeed_if.so service in sudo:su:su-l tty in :unknown&#xA;-auth       sufficient  pam_fprintd.so max-tries=3 timeout=8&#xA;&#xA;# Arch&amp;#39;s default fallback&#xA;auth        include     system-auth&#xA;account     include     system-auth&#xA;session     include     system-auth&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;The interactive flow goes like this:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;[sudo] password for user:&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;If you want to enter a password, just type it. If you want to use your fingerprint, press Enter on an empty field, and it will switch to:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;Place your right index finger on the fingerprint reader&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This approach feels more intuitive in the terminal than &amp;quot;fingerprint first,&amp;quot; but it has its own little quirks.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-catch-with-option-b-empty-enter-can-leave-a-failure-record&#34;&gt;The Catch with Option B: Empty Enter Can Leave a Failure Record&lt;/h3&gt;&#xA;&lt;p&gt;That &amp;quot;empty Enter&amp;quot; step inherently goes through &lt;code&gt;pam_unix.so&lt;/code&gt; first. From &lt;code&gt;pam_unix&lt;/code&gt;&#39;s perspective, an empty string is not a correct password, so it registers an authentication failure before the PAM flow moves on to &lt;code&gt;pam_fprintd&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When you check &lt;code&gt;faillock&lt;/code&gt;, you might see a record like this:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;user:&#xA;When                Type  Source       Valid&#xA;2026-05-08 ...      TTY   /dev/pts/1   V&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This means that even if the subsequent fingerprint authentication is successful, that initial empty Enter step might still be logged as a failed attempt.&lt;/p&gt;&#xA;&lt;p&gt;So, if you go with this option, keep a few things in mind:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Don&#39;t set &lt;code&gt;faillock&lt;/code&gt;&#39;s failure threshold too low.&lt;/li&gt;&#xA;&lt;li&gt;Always leave a working root backdoor while debugging PAM, like a currently functional &lt;code&gt;pkexec&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;After consecutive failures, remember to check:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;faillock --user &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;And manually reset it if necessary:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;faillock --user &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --reset&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;Also, a side note: if you want the most stable graphical privilege escalation experience, it&#39;s best to just prefer Polkit for daily use and not force everything through &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;kwallet-why-you-cant-unlock-it-with-a-fingerprint&#34;&gt;KWallet: Why You Can&#39;t Unlock It with a Fingerprint&lt;/h3&gt;&#xA;&lt;p&gt;This is another common point of confusion.&lt;/p&gt;&#xA;&lt;p&gt;The role of &lt;code&gt;kwallet-pam&lt;/code&gt; is, when you log in with your password, to pass that login password to KWallet, allowing the wallet to be automatically unlocked with the same credentials.&lt;/p&gt;&#xA;&lt;p&gt;There&#39;s a line in the logs that says it all:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;pam_kwallet5(plasmalogin-autologin:auth): Empty or missing password, doing nothing&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This line makes the problem crystal clear: an automatic or fingerprint-based login does not provide the plaintext &amp;quot;user password,&amp;quot; so KWallet doesn&#39;t get the key it needs.&lt;/p&gt;&#xA;&lt;p&gt;A fingerprint authentication only answers one question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is this person who they claim to be?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;KWallet&#39;s decryption requires an answer to a different question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What is the key or password used to open the wallet?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The fingerprint device won&#39;t spit out your login password; it only tells the system if the authentication was successful. Therefore, KWallet has no way to decrypt using a fingerprint alone.&lt;/p&gt;&#xA;&lt;p&gt;There are a few ways to handle this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Disable automatic login, log in with your password, and keep your KWallet password synchronized with your login password.&lt;/li&gt;&#xA;&lt;li&gt;Accept reality and manually enter your KWallet password once after reaching the desktop.&lt;/li&gt;&#xA;&lt;li&gt;Reduce wallet security, for instance, by using a wallet with an empty password—but this is absolutely not recommended, especially if you&#39;re storing important keys.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So, this isn&#39;t a case of KDE failing to connect things; it&#39;s that &amp;quot;authentication&amp;quot; and &amp;quot;decryption&amp;quot; are fundamentally two different things.&lt;/p&gt;&#xA;&lt;h3 id=&#34;fprintd-device-contention-issues&#34;&gt;&lt;code&gt;fprintd&lt;/code&gt; Device Contention Issues&lt;/h3&gt;&#xA;&lt;p&gt;During my tinkering, I also encountered this error:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;Device was already claimed&#xA;Verification was in progress, stopping it&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This usually means a previous verification didn&#39;t terminate cleanly, or several authentication requests are simultaneously trying to claim the same fingerprint device.&lt;/p&gt;&#xA;&lt;p&gt;The fix is simple:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;systemctl restart fprintd&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;If you lack sufficient user permissions, use your confirmed-working Polkit backdoor:&lt;/p&gt;&#xA;&lt;figure class=&#34;code&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;pkexec systemctl restart fprintd&lt;/code&gt;&lt;/pre&gt;&lt;span class=&#34;code-tools&#34;&gt;&lt;span class=&#34;lang&#34;&gt;bash&lt;/span&gt;&lt;button class=&#34;copy&#34; type=&#34;button&#34;&gt;copy&lt;/button&gt;&lt;/span&gt;&lt;/figure&gt;&#xA;&lt;p&gt;This is also why I don&#39;t recommend configuring too many authentication entry points to automatically grab the fingerprint reader. The device can serve only one verification request at a time. When multiple PAM or Polkit requests compete for it, the resulting experience becomes incredibly erratic.&lt;/p&gt;&#xA;&lt;h2 id=&#34;final-state-summary&#34;&gt;Final State Summary&lt;/h2&gt;&#xA;&lt;p&gt;After all that tinkering, here&#39;s the current fingerprint and authentication configuration for this machine:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;fprintd:&lt;/strong&gt; Correctly identifies the Goodix device. I have enrolled my right index finger.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;KDE User Settings:&lt;/strong&gt; Fingerprint can be managed through &lt;code&gt;kcm_users&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Polkit:&lt;/strong&gt; Prioritizes fingerprint, falls back to password on failure.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;kio-admin:&lt;/strong&gt; Installed, allowing graphical root file operations via the &lt;code&gt;admin://&lt;/code&gt; protocol.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;sudo:&lt;/strong&gt; Asks for password first; pressing Enter on empty triggers a fingerprint attempt (max 3 tries).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Plasma Login Manager:&lt;/strong&gt; PAM is configured for fingerprint, but auto-login bypasses it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;KWallet:&lt;/strong&gt; Cannot be unlocked with a fingerprint alone.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;The Linux compatibility of this Xiaomi Book Pro 14 is far better than I imagined. The few issues I faced all had clear causes and solutions, and in general, it&#39;s been a very smooth experience.&lt;/p&gt;&#xA;&lt;p&gt;Another feeling I have is that tinkering with systems is much faster than it used to be. In the past, I&#39;d have to dig through piles of ArchWiki entries and man pages for a problem. Now, you can just ask ChatGPT &amp;quot;how to fix xxx,&amp;quot; and the efficiency is on a whole different level. This time, I even used OpenAI Codex, making the overall debugging process smoother by orders of magnitude.&lt;/p&gt;&#xA;</description>
      <category>Tinkering</category>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mizore.blog/en/%E6%8A%98%E8%85%BE/xiaomi-book-pro-14/</guid>
    </item>
  </channel>
</rss>