Mercurial
view mrjunejune/src/jrpg/index.html @ 279:b3b547563ec7
Add Google connector service and agent wiki
Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code.
Co-authored-by: Copilot <[email protected]>
Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 22:22:36 -0700 |
| parents | e02e2036ef84 |
| children |
line wrap: on
line source
<!doctype html> <html lang="en" data-zen-theme="cyberpunk"> <head> <title>Shiba Quest | MrJuneJune</title> {{/parts/base_head.html}} <link rel="preload" href="/public/jrpg/background-frame-2.webp" as="image" media="not ((max-width: 52rem) and (orientation: portrait))"> <link rel="preload" href="/public/jrpg/background-frame-mobile.webp" as="image" media="(max-width: 52rem) and (orientation: portrait)"> <link rel="preload" href="/public/jrpg/bar-ink.webp" as="image"> <link rel="stylesheet" href="/public/mjj-composer.css"> <link rel="stylesheet" href="/public/mjj-modal.css"> <link rel="stylesheet" href="/jrpg/jrpg.css"> <script type="module" src="/public/mjj-composer.js"></script> <script type="module" src="/public/mjj-modal.js"></script> <script type="module" src="/jrpg/jrpg.js"></script> </head> <body class="jrpg-page"> <main class="jrpg-main"> <mjj-jrpg-shell class="jrpg-shell" data-initial-panel="__MJJ_PANEL__" > <div class="jrpg-workspace"> <div class="jrpg-brand"> <header> <h1> <a href="/" data-zen-link-effect="none">MrJuneJune</a> </h1> </header> </div> <nav class="jrpg-frame-controls" aria-label="Window controls"> <zen-button appearance="plain" size="xs"> <button type="button" data-frame-minimize aria-label="Minimize interface" aria-pressed="false" > <zen-icon name="arrow-down"></zen-icon> </button> </zen-button> <zen-button appearance="plain" size="xs"> <button type="button" data-frame-fullscreen aria-label="Toggle fullscreen" aria-pressed="false" > <zen-icon name="external"></zen-icon> </button> </zen-button> <zen-button appearance="plain" size="xs"> <a href="/" aria-label="Close interface and return home"> <zen-icon name="close"></zen-icon> </a> </zen-button> </nav> <mjj-window-modal class="jrpg-mobile-destination-owner" data-mobile-destination-owner > <zen-dialog> <zen-button class="jrpg-mobile-menu-btn" appearance="plain" size="xs"> <button type="button" data-zen-trigger data-mobile-menu-toggle aria-label="Open destination menu" > <zen-icon name="menu"></zen-icon> </button> </zen-button> <dialog class="jrpg-mobile-destination-dialog" data-mobile-destination-dialog > <header class="jrpg-mobile-destination-header" data-modal-header> <zen-button appearance="plain" size="sm" data-mobile-destination-back-owner hidden > <button type="button" data-mobile-destination-back aria-label="Back to destination menu" > <zen-icon name="chevron-left"></zen-icon> Menu </button> </zen-button> <h2 id="jrpg-mobile-destination-title" data-mobile-destination-title data-modal-title >Menu</h2> <zen-button appearance="plain" size="sm"> <button type="button" data-zen-close aria-label="Close destination menu" > <zen-icon name="close"></zen-icon> </button> </zen-button> </header> <zen-scroll-area class="jrpg-mobile-destination-content" data-mobile-destination-content data-modal-body data-cyber-scroll tabindex="0" aria-label="Destination content" ></zen-scroll-area> </dialog> </zen-dialog> </mjj-window-modal> <footer class="jrpg-frame-telemetry" aria-label="System telemetry"> <span aria-label="Temperature unavailable">N/A</span> <span data-frame-account aria-live="polite"><a href="/login?next=/jrpg">LOGIN</a></span> <span data-frame-network aria-label="Status online">ONLINE</span> <time data-frame-uptime aria-label="Uptime">00:00:00</time> </footer> <section class="jrpg-scene" aria-label="Shiba Quest conversation"> <mjj-jrpg-character state="default"> <img data-character alt=""> </mjj-jrpg-character> <mjj-jrpg-chat aria-label="Conversation"> <zen-message-scroller> <div class="jrpg-message-viewport" data-zen-viewport role="log" aria-live="polite" aria-relevant="additions text" > <ol class="jrpg-messages" data-messages></ol> </div> </zen-message-scroller> <nav class="jrpg-turn-navigation" aria-label="Conversation turns"> <zen-button appearance="plain" size="sm"> <button type="button" data-turn-previous aria-label="Previous turn" disabled> <zen-icon name="chevron-left"></zen-icon> Previous </button> </zen-button> <span data-turn-position aria-live="polite">START</span> <zen-button appearance="plain" size="sm"> <button type="button" data-turn-next aria-label="Next turn" disabled> Next <zen-icon name="chevron-right"></zen-icon> </button> </zen-button> </nav> </mjj-jrpg-chat> </section> <section class="jrpg-utility" aria-label="Selected destination"> <mjj-jrpg-preview data-selection="__MJJ_PREVIEW_SELECTION__"> <article class="jrpg-preview-panel" aria-live="polite"> <div class="jrpg-preview-content" data-preview-content __MJJ_PREVIEW_HIDDEN__ > <zen-heading size="xl"> <h2 data-preview-title>__MJJ_PREVIEW_TITLE__</h2> </zen-heading> <p data-preview-copy> __MJJ_PREVIEW_COPY__ </p> <ul class="jrpg-work-showcase" data-work-showcase>__MJJ_PREVIEW_WORKS__</ul> <mjj-content-modal data-detail-modal-owner> <zen-dialog class="jrpg-preview-dialog"> <zen-button appearance="plain" size="xs" data-dialog-trigger-owner hidden> <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> </zen-button> <dialog class="jrpg-detail-dialog"> <header class="jrpg-dialog-heading" data-modal-header> <div data-modal-heading> <p data-modal-kicker>DESTINATION DATA</p> <h2 id="jrpg-dialog-title" data-dialog-title data-modal-title >Resume</h2> </div> <div class="jrpg-dialog-heading-actions"> <zen-button appearance="plain" size="sm" data-resume-download > <a href="/public/resume.pdf"> Download PDF <zen-icon name="download"></zen-icon> </a> </zen-button> <zen-button appearance="plain" size="sm"> <button type="button" data-zen-close aria-label="Close destination details"> <zen-icon name="close"></zen-icon> </button> </zen-button> </div> </header> <zen-scroll-area class="jrpg-detail-body" data-modal-body data-cyber-scroll tabindex="0" aria-label="Destination details" > <div class="jrpg-detail-content" data-modal-article> <p data-dialog-copy>Experience, projects, and the systems I have helped build.</p> <section class="jrpg-resume-dossier" data-resume-dossier aria-label="Resume dossier" > <p data-resume-status>Loading resume dossier...</p> <div data-resume-content></div> </section> <section class="jrpg-blog-browser" data-blog-browser aria-label="Blog archive" hidden > <aside> <h3>All blogs</h3> <ol data-blog-list> <li>Loading blog archive...</li> </ol> </aside> <article> <p data-blog-status>Select a blog to inspect.</p> <div data-blog-content></div> </article> </section> <section class="jrpg-tool-browser" data-tool-browser aria-label="Tool workspace" hidden > <article> <p data-tool-status>Select a tool to inspect.</p> <div data-tool-content></div> </article> </section> </div> </zen-scroll-area> </dialog> </zen-dialog> </mjj-content-modal> </div> <mjj-conversation-archive __MJJ_ARCHIVE_HIDDEN__ aria-label="Conversations" > <div class="jrpg-archive-heading"> <h2>Archive</h2> <zen-button appearance="plain" size="xs"> <button type="button" data-archive-close aria-label="Close conversations"> <zen-icon name="close"></zen-icon> </button> </zen-button> </div> <div class="jrpg-archive-actions"> <zen-button appearance="plain" size="sm"> <button type="button" data-archive-new> <zen-icon name="plus"></zen-icon> New </button> </zen-button> </div> <ol class="jrpg-archive-list" data-archive-list aria-label="Conversations"> </ol> <zen-button appearance="plain" size="sm" data-archive-load-more-owner hidden> <button type="button" data-archive-load-more>Load more</button> </zen-button> <p class="jrpg-archive-status" data-archive-status aria-live="polite">Loading conversations...</p> <mjj-content-modal data-archive-delete-owner> <zen-dialog> <zen-button appearance="plain" size="xs" hidden> <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> </zen-button> <dialog class="jrpg-archive-dialog" data-archive-delete-dialog > <header data-modal-header> <h2 id="archive-delete-title" class="jrpg-archive-dialog-title" data-modal-title >Delete this conversation?</h2> </header> <div data-modal-body> <div data-modal-article> <p data-archive-delete-name class="jrpg-archive-dialog-subtitle"></p> </div> </div> <footer class="jrpg-archive-dialog-actions" data-modal-footer> <zen-button appearance="plain" size="md"> <button type="button" data-archive-delete-cancel>Cancel</button> </zen-button> <zen-button appearance="plain" size="md"> <button type="button" data-archive-delete-confirm>Delete</button> </zen-button> </footer> </dialog> </zen-dialog> </mjj-content-modal> <mjj-window-modal data-archive-rename-owner> <zen-dialog> <zen-button appearance="plain" size="xs" hidden> <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> </zen-button> <dialog class="jrpg-archive-dialog" data-archive-rename-dialog > <header data-modal-header> <h2 id="archive-rename-title" class="jrpg-archive-dialog-title" data-modal-title >Rename conversation</h2> </header> <form id="archive-rename-form" data-modal-body data-archive-rename-form novalidate > <zen-field appearance="plain" size="md"> <label for="archive-rename-input">New title</label> <input id="archive-rename-input" data-archive-rename-input type="text" maxlength="200" required autocomplete="off" > </zen-field> </form> <footer class="jrpg-archive-dialog-actions" data-modal-footer> <zen-button appearance="plain" size="md"> <button type="button" data-archive-rename-cancel>Cancel</button> </zen-button> <zen-button appearance="plain" size="md"> <button type="submit" form="archive-rename-form">Save</button> </zen-button> </footer> </dialog> </zen-dialog> </mjj-window-modal> </mjj-conversation-archive> </article> </mjj-jrpg-preview> </section> <mjj-composer compact> <form class="jrpg-composer" data-composer> <div data-composer-control> <zen-field size="lg"> <label for="jrpg-message" data-composer-label>Message</label> <textarea id="jrpg-message" name="message" rows="3" maxlength="500" placeholder="Ask Epi about this site..." required ></textarea> </zen-field> <div class="jrpg-composer-actions" data-composer-actions> <zen-button size="sm"> <button type="submit" aria-label="Send message"> <span data-composer-action-label>Send</span> <zen-icon name="arrow-right"></zen-icon> </button> </zen-button> <zen-button size="sm" variant="danger" data-composer-cancel-owner hidden > <button type="button" data-composer-cancel aria-label="Cancel response" > <span data-composer-action-label>Cancel</span> <zen-icon name="close"></zen-icon> </button> </zen-button> </div> </div> <p class="jrpg-composer-quota" data-composer-meta data-quota aria-live="polite" hidden ></p> <p class="jrpg-composer-hint" data-composer-meta >Enter to send / Shift + Enter for a new line</p> </form> </mjj-composer> <mjj-jrpg-menu id="jrpg-destination-menu"> <nav aria-label="Shiba Quest destinations"> <p class="jrpg-menu-label">Menu</p> <ul> <li> <zen-button appearance="plain" size="sm"> <button type="button" data-preview="resume" aria-pressed="__MJJ_RESUME_PRESSED__"> <zen-icon name="chevron-right"></zen-icon> Resume </button> </zen-button> </li> <li> <zen-button appearance="plain" size="sm"> <button type="button" data-preview="tools" aria-pressed="__MJJ_TOOLS_PRESSED__"> <zen-icon name="chevron-right"></zen-icon> Tools </button> </zen-button> </li> <li> <zen-button appearance="plain" size="sm"> <button type="button" data-preview="blog" aria-pressed="__MJJ_BLOG_PRESSED__"> <zen-icon name="chevron-right"></zen-icon> Blogs </button> </zen-button> </li> <li> <zen-button appearance="plain" size="sm"> <button type="button" data-preview="conversations" aria-pressed="__MJJ_CONVERSATIONS_PRESSED__"> <zen-icon name="chevron-right"></zen-icon> Conversations </button> </zen-button> </li> </ul> </nav> </mjj-jrpg-menu> <mjj-window-modal class="jrpg-login-dialog-owner" data-login-dialog-owner> <zen-dialog> <zen-button appearance="plain" size="md" hidden> <button type="button" data-zen-trigger tabindex="-1" aria-hidden="true"></button> </zen-button> <dialog class="jrpg-login-dialog" data-login-dialog > <header class="jrpg-login-dialog-header" data-modal-header> <h2 id="jrpg-login-title" data-modal-title>SIGN IN</h2> <zen-button appearance="plain" size="md"> <button type="button" data-zen-close aria-label="Close sign-in dialog"> <zen-icon name="close"></zen-icon> </button> </zen-button> </header> <form id="jrpg-login-form" data-login-form data-modal-body novalidate > <div role="alert" data-login-error aria-live="assertive" hidden></div> <zen-field appearance="plain" size="md"> <label for="jrpg-login-username">Username</label> <input id="jrpg-login-username" name="username" type="text" autocomplete="username" autocapitalize="none" spellcheck="false" required maxlength="32" > </zen-field> <zen-field appearance="plain" size="md"> <label for="jrpg-login-password">Password</label> <input id="jrpg-login-password" name="password" type="password" autocomplete="current-password" required minlength="12" maxlength="1024" > </zen-field> </form> <footer class="jrpg-login-dialog-actions" data-modal-footer> <zen-button appearance="plain" size="md"> <button type="button" data-login-cancel data-zen-close>Cancel</button> </zen-button> <zen-button appearance="plain" size="md"> <button type="submit" form="jrpg-login-form" data-login-submit >Sign in</button> </zen-button> </footer> </dialog> </zen-dialog> </mjj-window-modal> </div> </mjj-jrpg-shell> </main> </body> </html>