koneck 2.108.0 → 2.110.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +4 -3
- package/dist/chat.js.map +1 -1
- package/dist/skills.d.ts +21 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +39 -0
- package/dist/skills.js.map +1 -0
- package/dist/tools.d.ts +21 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +98 -6
- package/dist/tools.js.map +1 -1
- package/dist/web/api.d.ts.map +1 -1
- package/dist/web/api.js +40 -0
- package/dist/web/api.js.map +1 -1
- package/dist/web/sessions.d.ts +13 -0
- package/dist/web/sessions.d.ts.map +1 -1
- package/dist/web/sessions.js +16 -0
- package/dist/web/sessions.js.map +1 -1
- package/dist/web/ui-client.d.ts.map +1 -1
- package/dist/web/ui-client.js +153 -1
- package/dist/web/ui-client.js.map +1 -1
- package/dist/web/ui-css.d.ts.map +1 -1
- package/dist/web/ui-css.js +12 -0
- package/dist/web/ui-css.js.map +1 -1
- package/package.json +1 -1
package/dist/web/ui-client.js
CHANGED
|
@@ -132,6 +132,67 @@ const ago = (t) => {
|
|
|
132
132
|
};
|
|
133
133
|
|
|
134
134
|
/** Enough markdown to read a reply. Everything is escaped before a tag is inserted. */
|
|
135
|
+
/*
|
|
136
|
+
* Draws any mermaid diagrams in freshly-rendered content — ERDs, flowcharts, sequence and class
|
|
137
|
+
* diagrams, the lot — and never fails if it cannot.
|
|
138
|
+
*
|
|
139
|
+
* mermaid is large and needed only when a diagram appears, so it is fetched the first time one does
|
|
140
|
+
* and not before. It is fetched from a CDN, which means a machine with no internet — the ordinary
|
|
141
|
+
* case for someone running a local model — cannot load it. That is fine: the block already holds
|
|
142
|
+
* its own source as text, so offline it reads as a clean diagram spec rather than breaking. Online,
|
|
143
|
+
* the same block becomes a picture. Either way the information is there.
|
|
144
|
+
*/
|
|
145
|
+
let mermaidState = 'cold'; // cold | loading | ready | unavailable
|
|
146
|
+
const mermaidWaiters = [];
|
|
147
|
+
|
|
148
|
+
function loadMermaid() {
|
|
149
|
+
if (mermaidState === 'ready' || mermaidState === 'unavailable') return Promise.resolve();
|
|
150
|
+
if (mermaidState === 'loading') return new Promise(r => mermaidWaiters.push(r));
|
|
151
|
+
mermaidState = 'loading';
|
|
152
|
+
return new Promise(resolve => {
|
|
153
|
+
const done = (ok) => {
|
|
154
|
+
mermaidState = ok ? 'ready' : 'unavailable';
|
|
155
|
+
if (ok && window.mermaid) {
|
|
156
|
+
const dark = matchMedia('(prefers-color-scheme: dark)').matches
|
|
157
|
+
|| document.documentElement.dataset.theme === 'dark';
|
|
158
|
+
try { window.mermaid.initialize({ startOnLoad: false, securityLevel: 'strict',
|
|
159
|
+
theme: dark ? 'dark' : 'default' }); } catch (e) {}
|
|
160
|
+
}
|
|
161
|
+
resolve();
|
|
162
|
+
while (mermaidWaiters.length) mermaidWaiters.shift()();
|
|
163
|
+
};
|
|
164
|
+
const sc = document.createElement('script');
|
|
165
|
+
sc.src = 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js';
|
|
166
|
+
sc.onload = () => done(true);
|
|
167
|
+
sc.onerror = () => done(false); // offline, or the CDN is unreachable: source stays visible
|
|
168
|
+
document.head.appendChild(sc);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
async function drawDiagrams(container) {
|
|
173
|
+
const blocks = [...container.querySelectorAll('pre.mermaid:not([data-drawn])')];
|
|
174
|
+
if (blocks.length === 0) return;
|
|
175
|
+
await loadMermaid();
|
|
176
|
+
if (mermaidState !== 'ready' || !window.mermaid) {
|
|
177
|
+
// Left as source, but labelled, so it does not look like a code block that failed to run.
|
|
178
|
+
for (const b of blocks) { b.dataset.drawn = 'source'; b.classList.add('mermaid-source'); }
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
for (const b of blocks) {
|
|
182
|
+
b.dataset.drawn = '1';
|
|
183
|
+
try {
|
|
184
|
+
const id = 'mm' + Math.random().toString(36).slice(2);
|
|
185
|
+
const { svg } = await window.mermaid.render(id, b.dataset.src || b.textContent);
|
|
186
|
+
b.innerHTML = svg;
|
|
187
|
+
b.classList.add('mermaid-drawn');
|
|
188
|
+
} catch (e) {
|
|
189
|
+
// A diagram the model wrote wrong must not blank the reply: show the source and the reason.
|
|
190
|
+
b.classList.add('mermaid-source');
|
|
191
|
+
b.dataset.drawn = 'error';
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
135
196
|
function md(src) {
|
|
136
197
|
const blocks = [];
|
|
137
198
|
// Built from a code point: a literal backtick would end the template this whole script lives in.
|
|
@@ -143,7 +204,14 @@ function md(src) {
|
|
|
143
204
|
const HOLE = String.fromCharCode(0xE000);
|
|
144
205
|
const FENCE = new RegExp(T + T + T + '([a-zA-Z0-9_+-]*)\n([\\s\\S]*?)' + T + T + T, 'g');
|
|
145
206
|
let text = src.replace(FENCE, function (m, lang, code) {
|
|
146
|
-
|
|
207
|
+
const body = code.replace(/\n$/, '');
|
|
208
|
+
if (/^mermaid$/i.test(lang)) {
|
|
209
|
+
// A diagram, not code. The raw source is kept as the block's text so it renders as a picture
|
|
210
|
+
// when mermaid loads and reads cleanly as a spec when it does not — see drawDiagrams.
|
|
211
|
+
blocks.push('<pre class="mermaid" data-src="' + esc(body) + '">' + esc(body) + '</pre>');
|
|
212
|
+
} else {
|
|
213
|
+
blocks.push('<pre><code>' + esc(body) + '</code></pre>');
|
|
214
|
+
}
|
|
147
215
|
return HOLE + (blocks.length - 1) + HOLE;
|
|
148
216
|
});
|
|
149
217
|
text = esc(text);
|
|
@@ -608,6 +676,7 @@ function onEvent(e) {
|
|
|
608
676
|
body.dataset.raw = joinChunk(body.dataset.raw, e.text);
|
|
609
677
|
const was = atBottom();
|
|
610
678
|
body.innerHTML = md(body.dataset.raw);
|
|
679
|
+
drawDiagrams(body);
|
|
611
680
|
stick(was);
|
|
612
681
|
setBusy(true, 'writing');
|
|
613
682
|
break;
|
|
@@ -2440,6 +2509,7 @@ async function sendAside(question) {
|
|
|
2440
2509
|
return;
|
|
2441
2510
|
}
|
|
2442
2511
|
body.innerHTML = md(out.answer);
|
|
2512
|
+
drawDiagrams(body);
|
|
2443
2513
|
const foot = el('div', 'af', ms(out.ms) + (out.tools.length ? ' · ' + out.tools.join(', ') : ''));
|
|
2444
2514
|
box.appendChild(foot);
|
|
2445
2515
|
}
|
|
@@ -2508,8 +2578,89 @@ const COMMANDS = [
|
|
|
2508
2578
|
{ k: 'MCP', d: 'the integrations this workspace declares', g: 'view',
|
|
2509
2579
|
run: () => setView('settings') },
|
|
2510
2580
|
{ k: 'Stop', d: 'abort the running turn', g: 'action', run: () => $('stop').click() },
|
|
2581
|
+
|
|
2582
|
+
/*
|
|
2583
|
+
* Commands the terminal had and the web did not.
|
|
2584
|
+
*
|
|
2585
|
+
* /report, /cost, /tokens and /compact were reachable from a prompt and nowhere in the browser —
|
|
2586
|
+
* a web user simply could not get to them. Wired here rather than as new panels: each is one
|
|
2587
|
+
* glance or one action, which is what a palette entry is for.
|
|
2588
|
+
*/
|
|
2589
|
+
{ k: 'Diagnostic report', d: 'where the time and tokens went — no code, safe to send', g: 'view',
|
|
2590
|
+
run: () => void showReport() },
|
|
2591
|
+
{ k: 'Cost & tokens', d: 'what this session has spent so far', g: 'view',
|
|
2592
|
+
run: () => void showSpend() },
|
|
2593
|
+
{ k: 'Compact now', d: 'summarise the conversation so far to free the window', g: 'action',
|
|
2594
|
+
run: () => void compactNow() },
|
|
2595
|
+
|
|
2596
|
+
/*
|
|
2597
|
+
* The analysis skills the terminal had: architecture, performance and security reviews.
|
|
2598
|
+
*
|
|
2599
|
+
* Each is a canned prompt sent through the ordinary path, so it streams and can be stopped like
|
|
2600
|
+
* any turn — the same words the terminal's /architect, /performance and /security send, kept in
|
|
2601
|
+
* sync by living in one module the server exposes. They ask for findings with file:line, and the
|
|
2602
|
+
* architecture one asks for a mermaid diagram, which the panel now draws.
|
|
2603
|
+
*/
|
|
2604
|
+
{ k: 'Architecture review', d: 'coupling, god objects, a dependency diagram', g: 'skill',
|
|
2605
|
+
run: () => void runSkill('architect') },
|
|
2606
|
+
{ k: 'Performance audit', d: 'N+1 queries, leaks, blocking I/O, missing indexes', g: 'skill',
|
|
2607
|
+
run: () => void runSkill('performance') },
|
|
2608
|
+
{ k: 'Security audit', d: 'OWASP Top 10, injection, secrets, traversal', g: 'skill',
|
|
2609
|
+
run: () => void runSkill('security') },
|
|
2511
2610
|
];
|
|
2512
2611
|
|
|
2612
|
+
/** Runs one of the analysis skills as a normal message, fetched from the server so it never drifts. */
|
|
2613
|
+
async function runSkill(key) {
|
|
2614
|
+
if (state.busy) { add(el('div', 'notice', 'Wait for the current turn to finish.')); return; }
|
|
2615
|
+
let prompt;
|
|
2616
|
+
try { prompt = (await api('/api/skill?name=' + encodeURIComponent(key))).prompt; }
|
|
2617
|
+
catch (e) { add(el('div', 'err', e.message)); return; }
|
|
2618
|
+
if (prompt) await send(prompt);
|
|
2619
|
+
}
|
|
2620
|
+
|
|
2621
|
+
/** The diagnostic report, shown where it can be read and copied before anybody sends it. */
|
|
2622
|
+
async function showReport() {
|
|
2623
|
+
if (!state.session) { add(el('div', 'notice', 'Nothing has run yet.')); return; }
|
|
2624
|
+
let out;
|
|
2625
|
+
try { out = await api('/api/report?session=' + encodeURIComponent(state.session)); }
|
|
2626
|
+
catch (e) { add(el('div', 'err', e.message)); return; }
|
|
2627
|
+
// A notice carries it into the transcript, monospace and whole, with the line that says what is
|
|
2628
|
+
// and is not in it — so somebody deciding whether to send it does not have to read JSON.
|
|
2629
|
+
const box = el('div', 'notice info'); box.textContent = out.text; add(box);
|
|
2630
|
+
}
|
|
2631
|
+
|
|
2632
|
+
/** What the session has spent, the way the terminal's /cost and /tokens show it. */
|
|
2633
|
+
async function showSpend() {
|
|
2634
|
+
if (!state.session) { add(el('div', 'notice', 'Nothing has run yet.')); return; }
|
|
2635
|
+
let s;
|
|
2636
|
+
try { s = await api('/api/spend?session=' + encodeURIComponent(state.session)); }
|
|
2637
|
+
catch (e) { add(el('div', 'err', e.message)); return; }
|
|
2638
|
+
const money = s.cost
|
|
2639
|
+
? 'about $' + s.cost.total.toFixed(s.cost.total < 1 ? 4 : 2)
|
|
2640
|
+
+ ' (input $' + s.cost.input.toFixed(4) + ' + output $' + s.cost.output.toFixed(4) + ')'
|
|
2641
|
+
: 'no price list for ' + s.model + ', so no cost figure';
|
|
2642
|
+
const box = el('div', 'notice info');
|
|
2643
|
+
box.textContent = s.turns + ' turns · ' + Number(s.totalTokens).toLocaleString() + ' tokens ('
|
|
2644
|
+
+ Number(s.promptTokens).toLocaleString() + ' in / '
|
|
2645
|
+
+ Number(s.completionTokens).toLocaleString() + ' out)\n' + money;
|
|
2646
|
+
add(box);
|
|
2647
|
+
}
|
|
2648
|
+
|
|
2649
|
+
/*
|
|
2650
|
+
* Compaction, which in the terminal is a special message rather than a switch.
|
|
2651
|
+
*
|
|
2652
|
+
* The same request /compact sends: summarise everything so far, thoroughly, to replace the full
|
|
2653
|
+
* history. It goes through the ordinary send path, so it streams and can be stopped like any turn.
|
|
2654
|
+
*/
|
|
2655
|
+
async function compactNow() {
|
|
2656
|
+
if (!state.session) { add(el('div', 'notice', 'Nothing has run yet.')); return; }
|
|
2657
|
+
if (state.busy) { add(el('div', 'notice', 'Wait for the current turn to finish, then compact.')); return; }
|
|
2658
|
+
await send(
|
|
2659
|
+
'Summarise our entire conversation so far into a concise briefing. Cover: what was asked, '
|
|
2660
|
+
+ 'what was done, key decisions, and the current state of the files. This will replace the '
|
|
2661
|
+
+ 'full history, so be thorough.');
|
|
2662
|
+
}
|
|
2663
|
+
|
|
2513
2664
|
let pIndex = 0;
|
|
2514
2665
|
function paletteMatches() {
|
|
2515
2666
|
const q = $('pq').value.trim().toLowerCase();
|
|
@@ -2843,6 +2994,7 @@ function renderPastEntries(entries) {
|
|
|
2843
2994
|
settleReasoning();
|
|
2844
2995
|
const body = el('div', 'reply');
|
|
2845
2996
|
body.innerHTML = md(entry.text);
|
|
2997
|
+
drawDiagrams(body);
|
|
2846
2998
|
box.appendChild(who); box.appendChild(body);
|
|
2847
2999
|
stream().appendChild(box);
|
|
2848
3000
|
} else if (entry.kind === 'tool') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-client.js","sourceRoot":"","sources":["../../src/web/ui-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"ui-client.js","sourceRoot":"","sources":["../../src/web/ui-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0/MlB,CAAC;AACF,CAAC"}
|
package/dist/web/ui-css.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-css.d.ts","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AA8CA,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"ui-css.d.ts","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AA8CA,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAugD3C"}
|
package/dist/web/ui-css.js
CHANGED
|
@@ -219,6 +219,18 @@ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:fle
|
|
|
219
219
|
.reply li > p{margin:0}
|
|
220
220
|
.reply code{background:var(--panel-2);border:1px solid var(--line);border-radius:4px;
|
|
221
221
|
padding:1px 5px;font-family:var(--mono);font-size:calc(var(--ui) * 0.8929)}
|
|
222
|
+
/*
|
|
223
|
+
* A rendered diagram sits on a light card so its own colours read; its source, when it could not be
|
|
224
|
+
* drawn, keeps the code look but with a quiet label so nobody mistakes a diagram spec for broken
|
|
225
|
+
* output. The picture is centred and never wider than the column.
|
|
226
|
+
*/
|
|
227
|
+
.reply pre.mermaid-drawn,.think pre.mermaid-drawn{background:var(--panel-2);border:1px solid var(--line);
|
|
228
|
+
border-radius:10px;padding:14px;text-align:center;overflow-x:auto}
|
|
229
|
+
.reply pre.mermaid-drawn svg,.think pre.mermaid-drawn svg{max-width:100%;height:auto}
|
|
230
|
+
.reply pre.mermaid-source::before,.think pre.mermaid-source::before{content:'diagram source \\2014 not rendered here';
|
|
231
|
+
display:block;font-size:calc(var(--ui) * 0.75);letter-spacing:.06em;color:var(--dim);
|
|
232
|
+
text-transform:uppercase;margin-bottom:6px}
|
|
233
|
+
pre.mermaid:not([data-drawn]){opacity:.6}
|
|
222
234
|
.reply pre{background:var(--panel);border:1px solid var(--line);border-radius:8px;
|
|
223
235
|
padding:12px 14px;overflow-x:auto;margin:10px 0;white-space:pre}
|
|
224
236
|
.reply pre code{background:none;border:0;padding:0;font-size:calc(var(--ui) * 0.8929);line-height:1.5}
|
package/dist/web/ui-css.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-css.js","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH;;;;;;;;;;;;GAYG;AACH,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;CAkBZ,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAe;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;gBAyBO,OAAO;;;oCAGa,IAAI;;2BAEb,IAAI
|
|
1
|
+
{"version":3,"file":"ui-css.js","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH;;;;;;;;;;;;GAYG;AACH,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;CAkBZ,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAe;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;gBAyBO,OAAO;;;oCAGa,IAAI;;2BAEb,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAu+C9B,CAAC;AACF,CAAC"}
|