返回 CodeWhale
index.html
根目录 / crates / tui / src / runtime_web / index.html
1 <!doctype html>
2 <html lang="en">
3 <head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <meta name="codewhale-web-request" content="">
7 <meta name="color-scheme" content="dark">
8 <meta name="theme-color" content="#020711">
9 <title>Codewhale</title>
10 <link rel="icon" href="data:,">
11 <link rel="stylesheet" href="/assets/codewhale-web.css">
12 <script type="module" src="/assets/codewhale-web.js"></script>
13 </head>
14 <body>
15 <div class="shell" id="app-shell">
16 <aside class="rail" id="thread-rail" aria-label="Threads" tabindex="-1">
17 <div class="rail-brand">
18 <img class="brand-mark" src="/assets/codewhale-192.png" alt="">
19 <div>
20 <p class="brand-name">Codewhale</p>
21 <p class="brand-context">Local runtime</p>
22 </div>
23 <button class="quiet-button rail-close" id="rail-close" type="button" aria-label="Close threads">Close</button>
24 </div>
25
26 <button class="primary-button new-thread" id="new-thread" type="button">
27 New thread
28 </button>
29
30 <label class="search-field">
31 <span class="sr-only">Search threads</span>
32 <input id="thread-search" type="search" autocomplete="off" placeholder="Search threads">
33 </label>
34
35 <nav class="thread-list" id="thread-list" aria-label="Live threads"></nav>
36
37 <!-- Read-only peek for a selected saved session. Bounded and redacted
38 server-side by GET /v1/sessions/{id}?peek=true; this pane never
39 receives a full transcript and never offers a composer. -->
40 <!-- (rendered into #session-peek in the main column) -->
41
42 <!-- Saved sessions come from GET /v1/sessions/summary, the same
43 projection the terminal's session rail renders. Resuming one goes
44 through POST /v1/sessions/{id}/resume-thread, so the dashboard
45 never gets a second session backend. -->
46 <section class="saved-sessions" id="saved-sessions" hidden>
47 <h2 class="rail-section-title" id="saved-sessions-title">Saved sessions</h2>
48 <nav class="thread-list" id="session-list" aria-labelledby="saved-sessions-title"></nav>
49 </section>
50
51 <div class="rail-footer">
52 <span class="connection-dot" id="connection-dot" aria-hidden="true"></span>
53 <span class="connection-copy">
54 <span id="connection-label">Connecting to local runtime…</span>
55 <span class="runtime-provenance" id="runtime-provenance">version unknown · source unknown</span>
56 </span>
57 </div>
58 </aside>
59
60 <button class="rail-scrim" id="rail-scrim" type="button" aria-label="Close threads" tabindex="-1" hidden></button>
61
62 <main class="session">
63 <header class="session-header">
64 <div class="session-heading">
65 <button class="quiet-button rail-open" id="rail-open" type="button" aria-controls="thread-rail" aria-expanded="false">Threads</button>
66 <div class="title-stack">
67 <p class="eyebrow" id="session-kicker">Local runtime</p>
68 <h1 id="session-title">Choose a thread</h1>
69 </div>
70 </div>
71 <div class="header-actions">
72 <button class="quiet-button" id="rename-thread" type="button" disabled>Rename</button>
73 <button class="quiet-button danger" id="archive-thread" type="button" disabled>Archive</button>
74 </div>
75 <div class="session-facts" id="session-facts" aria-label="Session details"></div>
76 </header>
77
78 <div class="status-banner" id="status-banner" role="status" aria-live="polite" hidden></div>
79
80 <section class="session-peek" id="session-peek" aria-label="Saved session preview" hidden></section>
81
82 <section class="transcript" id="transcript" role="log" aria-label="Conversation" aria-live="polite" aria-relevant="additions" aria-atomic="false">
83 <div class="empty-state">
84 <img class="empty-mark" src="/assets/codewhale-192.png" alt="">
85 <h2>Your local agent, in the browser.</h2>
86 <p>Create a thread or choose one from the rail. This client uses the same Runtime as the terminal.</p>
87 </div>
88 </section>
89
90 <section class="attention" id="attention" role="region" aria-label="Items requiring attention" aria-live="assertive" aria-relevant="additions" aria-atomic="false" hidden></section>
91
92 <footer class="composer-wrap">
93 <form class="composer" id="composer">
94 <label class="sr-only" for="composer-input">Message Codewhale</label>
95 <textarea id="composer-input" rows="1" placeholder="Ask Codewhale to work in this repository…" disabled></textarea>
96 <div class="composer-bar">
97 <span class="composer-hint">Enter send · Shift+Enter newline</span>
98 <div class="composer-actions">
99 <button class="quiet-button" id="interrupt-turn" type="button" hidden>Stop</button>
100 <button class="send-button" id="send-message" type="submit" disabled>Send</button>
101 </div>
102 </div>
103 </form>
104 </footer>
105 </main>
106 </div>
107
108 <dialog class="rename-dialog new-thread-dialog" id="new-thread-dialog" tabindex="-1" aria-labelledby="new-thread-title" aria-describedby="new-thread-help">
109 <form id="new-thread-form">
110 <p class="eyebrow">New thread</p>
111 <h2 id="new-thread-title">Choose a provider and model</h2>
112 <p class="dialog-copy" id="new-thread-help">This choice applies only to the new thread. It does not change your Runtime defaults.</p>
113
114 <label class="dialog-field">
115 <span class="dialog-label">Provider</span>
116 <select id="new-thread-provider" required disabled></select>
117 </label>
118
119 <label class="dialog-field" id="new-thread-model-select-field">
120 <span class="dialog-label">Model</span>
121 <select id="new-thread-model" required disabled></select>
122 </label>
123
124 <label class="dialog-field" id="new-thread-model-input-field" hidden>
125 <span class="dialog-label">Model</span>
126 <input id="new-thread-model-input" type="text" autocomplete="off" spellcheck="false" required disabled>
127 </label>
128
129 <p class="model-capability" id="new-thread-capability" data-state="unknown" aria-live="polite"></p>
130 <p class="dialog-status" id="new-thread-status" role="status" aria-live="polite"></p>
131
132 <div class="dialog-actions">
133 <button class="quiet-button" id="new-thread-cancel" type="button" autofocus>Cancel</button>
134 <button class="primary-button" id="new-thread-create" type="submit" disabled>Create thread</button>
135 </div>
136 </form>
137 </dialog>
138
139 <dialog class="rename-dialog" id="rename-dialog">
140 <form method="dialog" id="rename-form">
141 <p class="eyebrow">Thread title</p>
142 <h2>Rename this thread</h2>
143 <label>
144 <span class="sr-only">New thread title</span>
145 <input id="rename-input" type="text" maxlength="160" required autocomplete="off">
146 </label>
147 <div class="dialog-actions">
148 <button class="quiet-button" value="cancel" type="submit">Cancel</button>
149 <button class="primary-button" value="save" type="submit">Save title</button>
150 </div>
151 </form>
152 </dialog>
153
154 <noscript>Codewhale web requires JavaScript to connect to the local Runtime API.</noscript>
155 </body>
156 </html>
157
157 lines HTML