Files
openclaw/extensions/browser/chrome-extension/sidepanel.html
Peter Steinberger ec8f6e5e03 feat(browser): add secure per-tab copilot panel (#109817)
* feat(browser): add copilot security contracts

* fix(gateway): expose verified client identity to handlers

* feat(browser): add secure per-tab copilot panel

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* refactor(browser): separate copilot gateway hint custody

* fix(browser): preserve legacy pairing parse shape

* fix(browser): harden copilot lifecycle custody

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): enforce copilot lifecycle boundaries

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* style(browser): format copilot sources

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): preserve copilot consent revocation

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* refactor(browser): split copilot custody owners

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(browser): normalize websocket array buffers

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* chore(protocol): regenerate Swift gateway models

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* refactor(browser): model copilot runtime entrypoints

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): honor extension build boundaries

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(gateway): assert targeted chat delivery

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(gateway): cover targeted delivery calls

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): declare copilot build dependencies

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(ci): clear browser copilot gate failures

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(ci): cover copilot lint exclusion

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): gate copilot on relay custody

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(browser): bound copilot relay frames

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

---------

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>
2026-07-18 01:00:23 +01:00

58 lines
2.0 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>OpenClaw Copilot</title>
<link rel="stylesheet" href="sidepanel.css" />
</head>
<body>
<header class="topbar">
<div class="mark" aria-hidden="true">OC</div>
<div class="identity">
<div class="eyebrow">TAB COPILOT</div>
<div id="tab-title" class="tab-title">Resolving tab…</div>
</div>
<div id="status-dot" class="status-dot" title="Connecting"></div>
</header>
<div class="scope-strip">
<span class="scope-icon" aria-hidden="true"></span>
<span id="tab-origin">This panel is bound to one Chrome tab</span>
</div>
<main id="conversation" aria-live="polite">
<section id="gate" class="gate" data-testid="denial-card">
<div class="gate-kicker">SECURE BINDING</div>
<h1 id="gate-title">Preparing this tab</h1>
<p id="gate-detail">Chrome is proving which tab owns this panel.</p>
<code id="request-id" class="request-id hidden"></code>
<button id="gate-action" class="primary hidden" type="button">Share this tab</button>
</section>
<section id="messages" class="messages hidden" aria-label="Conversation"></section>
</main>
<footer class="composer-shell">
<div id="session-note" class="session-note">No session until this tab is shared.</div>
<div class="composer">
<textarea
id="message-input"
rows="1"
maxlength="12000"
placeholder="Ask about this tab…"
aria-label="Message"
disabled
></textarea>
<button id="send-button" class="send" type="button" aria-label="Send message" disabled>
<span aria-hidden="true"></span>
</button>
</div>
<div class="binding-note">
Page text stays out of prompts. Browser actions stay on this tab.
</div>
</footer>
<script src="sidepanel.js" type="module"></script>
</body>
</html>