deepline 0.1.310 → 0.1.312
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/bundling-sources/sdk/src/release.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +1 -0
- package/dist/bundling-sources/shared_libs/play-runtime/context.ts +1 -0
- package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +3 -0
- package/dist/bundling-sources/shared_libs/play-runtime/vercel-protection.ts +36 -2
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/viewer/viewer.css +61 -64
- package/package.json +1 -1
|
@@ -157,7 +157,7 @@ export const SDK_RELEASE = {
|
|
|
157
157
|
// 0.1.253 makes play-page browser opening opt-in and retires --no-open.
|
|
158
158
|
// 0.1.254 removes the internal operations tree from the published SDK CLI.
|
|
159
159
|
// Operators use the checkout-local deepline-admin binary instead.
|
|
160
|
-
version: '0.1.
|
|
160
|
+
version: '0.1.312',
|
|
161
161
|
contracts: {
|
|
162
162
|
api: {
|
|
163
163
|
name: 'sdk-http-api',
|
|
@@ -7671,6 +7671,7 @@ export class PlayContextImpl {
|
|
|
7671
7671
|
)
|
|
7672
7672
|
: options?.semanticKey,
|
|
7673
7673
|
staleAfterSeconds: options?.staleAfterSeconds,
|
|
7674
|
+
force: this.#options.cachePolicy?.forceStepRefresh === true,
|
|
7674
7675
|
markSkipped: (output) => {
|
|
7675
7676
|
assertJsonSerializableStepOutput(normalizedKey, output);
|
|
7676
7677
|
},
|
|
@@ -563,11 +563,14 @@ export interface ContextOptions {
|
|
|
563
563
|
durableBoundaries?: boolean;
|
|
564
564
|
/**
|
|
565
565
|
* Run-level cache policy.
|
|
566
|
+
* forceStepRefresh bypasses completed ctx.step receipts while preserving
|
|
567
|
+
* completed provider-call receipts.
|
|
566
568
|
* forceToolRefresh bypasses all ctx.tools.execute receipts.
|
|
567
569
|
* forceFailedToolRefresh reclaims only failed receipts, preserving completed
|
|
568
570
|
* provider-call idempotency while allowing forced repair runs to make progress.
|
|
569
571
|
*/
|
|
570
572
|
cachePolicy?: {
|
|
573
|
+
forceStepRefresh?: boolean;
|
|
571
574
|
forceToolRefresh?: boolean;
|
|
572
575
|
forceFailedToolRefresh?: boolean;
|
|
573
576
|
};
|
|
@@ -2,6 +2,32 @@ type FetchLike = typeof fetch;
|
|
|
2
2
|
|
|
3
3
|
const vercelProtectionCookieCache = new Map<string, Promise<string | null>>();
|
|
4
4
|
|
|
5
|
+
async function awaitWithSignal<T>(
|
|
6
|
+
promise: Promise<T>,
|
|
7
|
+
signal: AbortSignal | undefined,
|
|
8
|
+
): Promise<T> {
|
|
9
|
+
if (!signal) return await promise;
|
|
10
|
+
if (signal.aborted) throw signal.reason;
|
|
11
|
+
return await new Promise<T>((resolve, reject) => {
|
|
12
|
+
const onAbort = () => {
|
|
13
|
+
cleanup();
|
|
14
|
+
reject(signal.reason);
|
|
15
|
+
};
|
|
16
|
+
const cleanup = () => signal.removeEventListener('abort', onAbort);
|
|
17
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
18
|
+
promise.then(
|
|
19
|
+
(value) => {
|
|
20
|
+
cleanup();
|
|
21
|
+
resolve(value);
|
|
22
|
+
},
|
|
23
|
+
(error) => {
|
|
24
|
+
cleanup();
|
|
25
|
+
reject(error);
|
|
26
|
+
},
|
|
27
|
+
);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
5
31
|
export function addVercelProtectionBypassSearchParams(
|
|
6
32
|
url: URL,
|
|
7
33
|
token: string | null | undefined,
|
|
@@ -41,6 +67,7 @@ export async function resolveVercelProtectionBypassCookie(input: {
|
|
|
41
67
|
baseUrl: string | null | undefined;
|
|
42
68
|
token: string | null | undefined;
|
|
43
69
|
fetchImpl?: FetchLike;
|
|
70
|
+
signal?: AbortSignal;
|
|
44
71
|
}): Promise<string | null> {
|
|
45
72
|
const token = input.token?.trim();
|
|
46
73
|
const baseUrl = input.baseUrl?.trim().replace(/\/$/, '');
|
|
@@ -48,7 +75,7 @@ export async function resolveVercelProtectionBypassCookie(input: {
|
|
|
48
75
|
|
|
49
76
|
const cacheKey = `${baseUrl}\n${token}`;
|
|
50
77
|
const cached = vercelProtectionCookieCache.get(cacheKey);
|
|
51
|
-
if (cached) return await cached;
|
|
78
|
+
if (cached) return await awaitWithSignal(cached, input.signal);
|
|
52
79
|
|
|
53
80
|
const promise = (async () => {
|
|
54
81
|
const url = new URL(`${baseUrl}/api/v2/health`);
|
|
@@ -59,13 +86,19 @@ export async function resolveVercelProtectionBypassCookie(input: {
|
|
|
59
86
|
return response ? cookieHeaderFromSetCookie(response.headers) : null;
|
|
60
87
|
})();
|
|
61
88
|
vercelProtectionCookieCache.set(cacheKey, promise);
|
|
62
|
-
|
|
89
|
+
void promise.catch(() => {
|
|
90
|
+
if (vercelProtectionCookieCache.get(cacheKey) === promise) {
|
|
91
|
+
vercelProtectionCookieCache.delete(cacheKey);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
return await awaitWithSignal(promise, input.signal);
|
|
63
95
|
}
|
|
64
96
|
|
|
65
97
|
export async function vercelProtectionBypassHeaders(input: {
|
|
66
98
|
baseUrl: string | null | undefined;
|
|
67
99
|
token: string | null | undefined;
|
|
68
100
|
fetchImpl?: FetchLike;
|
|
101
|
+
signal?: AbortSignal;
|
|
69
102
|
}): Promise<Record<string, string>> {
|
|
70
103
|
const token = input.token?.trim();
|
|
71
104
|
if (!token) return {};
|
|
@@ -73,6 +106,7 @@ export async function vercelProtectionBypassHeaders(input: {
|
|
|
73
106
|
baseUrl: input.baseUrl,
|
|
74
107
|
token,
|
|
75
108
|
fetchImpl: input.fetchImpl,
|
|
109
|
+
signal: input.signal,
|
|
76
110
|
});
|
|
77
111
|
return {
|
|
78
112
|
...vercelProtectionBypassHeader(token),
|
package/dist/cli/index.js
CHANGED
|
@@ -1037,7 +1037,7 @@ var SDK_RELEASE = {
|
|
|
1037
1037
|
// 0.1.253 makes play-page browser opening opt-in and retires --no-open.
|
|
1038
1038
|
// 0.1.254 removes the internal operations tree from the published SDK CLI.
|
|
1039
1039
|
// Operators use the checkout-local deepline-admin binary instead.
|
|
1040
|
-
version: "0.1.
|
|
1040
|
+
version: "0.1.312",
|
|
1041
1041
|
contracts: {
|
|
1042
1042
|
api: {
|
|
1043
1043
|
name: "sdk-http-api",
|
package/dist/cli/index.mjs
CHANGED
|
@@ -1022,7 +1022,7 @@ var SDK_RELEASE = {
|
|
|
1022
1022
|
// 0.1.253 makes play-page browser opening opt-in and retires --no-open.
|
|
1023
1023
|
// 0.1.254 removes the internal operations tree from the published SDK CLI.
|
|
1024
1024
|
// Operators use the checkout-local deepline-admin binary instead.
|
|
1025
|
-
version: "0.1.
|
|
1025
|
+
version: "0.1.312",
|
|
1026
1026
|
contracts: {
|
|
1027
1027
|
api: {
|
|
1028
1028
|
name: "sdk-http-api",
|
package/dist/index.js
CHANGED
|
@@ -760,7 +760,7 @@ var SDK_RELEASE = {
|
|
|
760
760
|
// 0.1.253 makes play-page browser opening opt-in and retires --no-open.
|
|
761
761
|
// 0.1.254 removes the internal operations tree from the published SDK CLI.
|
|
762
762
|
// Operators use the checkout-local deepline-admin binary instead.
|
|
763
|
-
version: "0.1.
|
|
763
|
+
version: "0.1.312",
|
|
764
764
|
contracts: {
|
|
765
765
|
api: {
|
|
766
766
|
name: "sdk-http-api",
|
package/dist/index.mjs
CHANGED
|
@@ -686,7 +686,7 @@ var SDK_RELEASE = {
|
|
|
686
686
|
// 0.1.253 makes play-page browser opening opt-in and retires --no-open.
|
|
687
687
|
// 0.1.254 removes the internal operations tree from the published SDK CLI.
|
|
688
688
|
// Operators use the checkout-local deepline-admin binary instead.
|
|
689
|
-
version: "0.1.
|
|
689
|
+
version: "0.1.312",
|
|
690
690
|
contracts: {
|
|
691
691
|
api: {
|
|
692
692
|
name: "sdk-http-api",
|
package/dist/viewer/viewer.css
CHANGED
|
@@ -1,30 +1,27 @@
|
|
|
1
1
|
|
|
2
2
|
:root {
|
|
3
|
-
--bg:
|
|
4
|
-
--bg-secondary:
|
|
5
|
-
--bg-tertiary:
|
|
6
|
-
--
|
|
7
|
-
--text
|
|
8
|
-
--text-
|
|
9
|
-
--
|
|
10
|
-
--
|
|
11
|
-
--
|
|
12
|
-
--
|
|
13
|
-
--
|
|
14
|
-
--
|
|
15
|
-
--
|
|
3
|
+
--bg: #0d1117;
|
|
4
|
+
--bg-secondary: #161b22;
|
|
5
|
+
--bg-tertiary: #21262d;
|
|
6
|
+
--border: #30363d;
|
|
7
|
+
--text: #e6edf3;
|
|
8
|
+
--text-dim: #8b949e;
|
|
9
|
+
--text-dimmer: #6e7681;
|
|
10
|
+
--green: #3fb950;
|
|
11
|
+
--red: #f85149;
|
|
12
|
+
--yellow: #d29922;
|
|
13
|
+
--blue: #58a6ff;
|
|
14
|
+
--purple: #bc8cff;
|
|
15
|
+
--orange: #f0883e;
|
|
16
|
+
--cyan: #39d2c0;
|
|
16
17
|
}
|
|
17
18
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
18
19
|
body {
|
|
19
20
|
background: var(--bg);
|
|
20
21
|
color: var(--text);
|
|
21
|
-
font-family:
|
|
22
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
22
23
|
font-size: 14px;
|
|
23
24
|
line-height: 1.5;
|
|
24
|
-
letter-spacing: -0.011em;
|
|
25
|
-
-webkit-font-smoothing: antialiased;
|
|
26
|
-
-moz-osx-font-smoothing: grayscale;
|
|
27
|
-
text-rendering: optimizeLegibility;
|
|
28
25
|
}
|
|
29
26
|
.layout { display: flex; height: 100vh; }
|
|
30
27
|
.sidebar {
|
|
@@ -39,7 +36,7 @@ body {
|
|
|
39
36
|
padding: 10px 16px;
|
|
40
37
|
cursor: pointer;
|
|
41
38
|
border-left: 3px solid transparent;
|
|
42
|
-
transition: background
|
|
39
|
+
transition: background 0.15s;
|
|
43
40
|
font-size: 13px;
|
|
44
41
|
}
|
|
45
42
|
.sidebar-item:hover { background: var(--bg-tertiary); }
|
|
@@ -57,7 +54,7 @@ body {
|
|
|
57
54
|
.sidebar-compare kbd {
|
|
58
55
|
background: var(--bg-tertiary);
|
|
59
56
|
border: 1px solid var(--border);
|
|
60
|
-
border-radius:
|
|
57
|
+
border-radius: 3px;
|
|
61
58
|
padding: 0 4px;
|
|
62
59
|
font-size: 10px;
|
|
63
60
|
font-family: inherit;
|
|
@@ -67,7 +64,7 @@ body {
|
|
|
67
64
|
.header {
|
|
68
65
|
background: var(--bg-secondary);
|
|
69
66
|
border: 1px solid var(--border);
|
|
70
|
-
border-radius:
|
|
67
|
+
border-radius: 8px;
|
|
71
68
|
padding: 20px 24px;
|
|
72
69
|
margin-bottom: 20px;
|
|
73
70
|
}
|
|
@@ -102,7 +99,7 @@ body {
|
|
|
102
99
|
gap: 4px;
|
|
103
100
|
background: var(--bg);
|
|
104
101
|
border: 1px solid var(--border);
|
|
105
|
-
border-radius:
|
|
102
|
+
border-radius: 4px;
|
|
106
103
|
padding: 2px 8px;
|
|
107
104
|
font-size: 12px;
|
|
108
105
|
}
|
|
@@ -153,7 +150,7 @@ body {
|
|
|
153
150
|
line-height: 1.6;
|
|
154
151
|
white-space: pre-wrap;
|
|
155
152
|
word-break: break-word;
|
|
156
|
-
background:
|
|
153
|
+
background: rgba(63,185,80,0.04);
|
|
157
154
|
}
|
|
158
155
|
.user-message.collapsed { max-height: 100px; overflow: hidden; position: relative; }
|
|
159
156
|
.user-message.collapsed::after {
|
|
@@ -187,7 +184,7 @@ body {
|
|
|
187
184
|
white-space: pre-wrap;
|
|
188
185
|
word-break: break-word;
|
|
189
186
|
font-style: italic;
|
|
190
|
-
background:
|
|
187
|
+
background: rgba(188,140,255,0.03);
|
|
191
188
|
}
|
|
192
189
|
.thinking.collapsed { max-height: 100px; overflow: hidden; position: relative; }
|
|
193
190
|
.thinking.collapsed::after {
|
|
@@ -234,10 +231,10 @@ body {
|
|
|
234
231
|
align-items: center;
|
|
235
232
|
gap: 12px;
|
|
236
233
|
padding: 6px 12px;
|
|
237
|
-
border-radius:
|
|
234
|
+
border-radius: 6px;
|
|
238
235
|
cursor: pointer;
|
|
239
|
-
transition: background
|
|
240
|
-
font-family:
|
|
236
|
+
transition: background 0.15s;
|
|
237
|
+
font-family: 'SF Mono', 'Fira Code', 'Fira Mono', Menlo, Consolas, monospace;
|
|
241
238
|
font-size: 13px;
|
|
242
239
|
}
|
|
243
240
|
.tool-row:hover { background: var(--bg-secondary); }
|
|
@@ -247,15 +244,15 @@ body {
|
|
|
247
244
|
.tool-status {
|
|
248
245
|
display: inline-block;
|
|
249
246
|
padding: 1px 8px;
|
|
250
|
-
border-radius:
|
|
247
|
+
border-radius: 10px;
|
|
251
248
|
font-size: 11px;
|
|
252
249
|
font-weight: 600;
|
|
253
250
|
min-width: 42px;
|
|
254
251
|
text-align: center;
|
|
255
252
|
}
|
|
256
|
-
.tool-status.ok { background:
|
|
257
|
-
.tool-status.fail { background:
|
|
258
|
-
.tool-status.unknown { background:
|
|
253
|
+
.tool-status.ok { background: rgba(63,185,80,0.15); color: var(--green); }
|
|
254
|
+
.tool-status.fail { background: rgba(248,81,73,0.15); color: var(--red); }
|
|
255
|
+
.tool-status.unknown { background: rgba(139,148,158,0.15); color: var(--text-dim); }
|
|
259
256
|
.tool-name {
|
|
260
257
|
font-weight: 600;
|
|
261
258
|
min-width: 70px;
|
|
@@ -277,22 +274,22 @@ body {
|
|
|
277
274
|
color: var(--text-dimmer);
|
|
278
275
|
background: var(--bg-tertiary);
|
|
279
276
|
border: 1px solid var(--border);
|
|
280
|
-
border-radius:
|
|
277
|
+
border-radius: 4px;
|
|
281
278
|
padding: 0 5px;
|
|
282
279
|
white-space: nowrap;
|
|
283
280
|
}
|
|
284
281
|
.loop-badge {
|
|
285
282
|
color: var(--yellow);
|
|
286
|
-
border-color:
|
|
287
|
-
background:
|
|
283
|
+
border-color: rgba(210,153,34,0.4);
|
|
284
|
+
background: rgba(210,153,34,0.08);
|
|
288
285
|
}
|
|
289
286
|
.repeat-badge {
|
|
290
287
|
margin-left: 6px;
|
|
291
288
|
font-size: 10px;
|
|
292
289
|
color: var(--text-dimmer);
|
|
293
|
-
background:
|
|
294
|
-
border: 1px solid
|
|
295
|
-
border-radius:
|
|
290
|
+
background: rgba(120,120,180,0.08);
|
|
291
|
+
border: 1px solid rgba(120,120,180,0.3);
|
|
292
|
+
border-radius: 4px;
|
|
296
293
|
padding: 0 5px;
|
|
297
294
|
white-space: nowrap;
|
|
298
295
|
cursor: help;
|
|
@@ -322,7 +319,7 @@ body {
|
|
|
322
319
|
margin-left: 48px;
|
|
323
320
|
margin-bottom: 12px;
|
|
324
321
|
border: 1px solid var(--border);
|
|
325
|
-
border-radius:
|
|
322
|
+
border-radius: 6px;
|
|
326
323
|
overflow: hidden;
|
|
327
324
|
}
|
|
328
325
|
.tool-detail.open { display: block; }
|
|
@@ -340,12 +337,12 @@ body {
|
|
|
340
337
|
}
|
|
341
338
|
.tool-detail-section pre {
|
|
342
339
|
background: var(--bg);
|
|
343
|
-
border-radius:
|
|
340
|
+
border-radius: 4px;
|
|
344
341
|
padding: 10px 14px;
|
|
345
342
|
overflow-x: auto;
|
|
346
343
|
font-size: 12px;
|
|
347
344
|
line-height: 1.5;
|
|
348
|
-
font-family:
|
|
345
|
+
font-family: 'SF Mono', 'Fira Code', 'Fira Mono', Menlo, Consolas, monospace;
|
|
349
346
|
white-space: pre-wrap;
|
|
350
347
|
word-break: break-word;
|
|
351
348
|
max-height: 400px;
|
|
@@ -354,13 +351,13 @@ body {
|
|
|
354
351
|
}
|
|
355
352
|
.tool-detail-section pre.error-content {
|
|
356
353
|
border: 1px solid var(--red);
|
|
357
|
-
background:
|
|
354
|
+
background: rgba(248,81,73,0.06);
|
|
358
355
|
}
|
|
359
356
|
.tool-detail-toggle {
|
|
360
357
|
margin-top: 8px;
|
|
361
358
|
background: var(--bg-tertiary);
|
|
362
359
|
border: 1px solid var(--border);
|
|
363
|
-
border-radius:
|
|
360
|
+
border-radius: 4px;
|
|
364
361
|
color: var(--blue);
|
|
365
362
|
cursor: pointer;
|
|
366
363
|
font-size: 12px;
|
|
@@ -372,7 +369,7 @@ body {
|
|
|
372
369
|
.result-card {
|
|
373
370
|
background: var(--bg-secondary);
|
|
374
371
|
border: 1px solid var(--border);
|
|
375
|
-
border-radius:
|
|
372
|
+
border-radius: 8px;
|
|
376
373
|
padding: 20px 24px;
|
|
377
374
|
margin-top: 20px;
|
|
378
375
|
}
|
|
@@ -395,7 +392,7 @@ body {
|
|
|
395
392
|
flex: 1;
|
|
396
393
|
background: var(--bg-secondary);
|
|
397
394
|
border: 1px solid var(--border);
|
|
398
|
-
border-radius:
|
|
395
|
+
border-radius: 6px;
|
|
399
396
|
padding: 8px 12px;
|
|
400
397
|
color: var(--text);
|
|
401
398
|
font-size: 13px;
|
|
@@ -407,7 +404,7 @@ body {
|
|
|
407
404
|
.filter-btn {
|
|
408
405
|
background: var(--bg-secondary);
|
|
409
406
|
border: 1px solid var(--border);
|
|
410
|
-
border-radius:
|
|
407
|
+
border-radius: 6px;
|
|
411
408
|
padding: 8px 12px;
|
|
412
409
|
color: var(--text-dim);
|
|
413
410
|
font-size: 12px;
|
|
@@ -420,7 +417,7 @@ body {
|
|
|
420
417
|
.prompt-card {
|
|
421
418
|
background: var(--bg-secondary);
|
|
422
419
|
border: 1px solid var(--border);
|
|
423
|
-
border-radius:
|
|
420
|
+
border-radius: 8px;
|
|
424
421
|
padding: 16px 20px;
|
|
425
422
|
margin-bottom: 16px;
|
|
426
423
|
}
|
|
@@ -443,11 +440,11 @@ body {
|
|
|
443
440
|
font-size: 11px;
|
|
444
441
|
font-weight: 600;
|
|
445
442
|
padding: 2px 8px;
|
|
446
|
-
border-radius:
|
|
443
|
+
border-radius: 10px;
|
|
447
444
|
vertical-align: middle;
|
|
448
445
|
}
|
|
449
|
-
.timing-badge.exact { background:
|
|
450
|
-
.timing-badge.estimated { background:
|
|
446
|
+
.timing-badge.exact { background: rgba(63,185,80,0.15); color: var(--green); }
|
|
447
|
+
.timing-badge.estimated { background: rgba(210,153,34,0.15); color: var(--yellow); }
|
|
451
448
|
|
|
452
449
|
/* Live badge */
|
|
453
450
|
.live-badge {
|
|
@@ -455,8 +452,8 @@ body {
|
|
|
455
452
|
font-size: 11px;
|
|
456
453
|
font-weight: 700;
|
|
457
454
|
padding: 2px 10px;
|
|
458
|
-
border-radius:
|
|
459
|
-
background:
|
|
455
|
+
border-radius: 10px;
|
|
456
|
+
background: rgba(248,81,73,0.15);
|
|
460
457
|
color: var(--red);
|
|
461
458
|
animation: live-pulse 2s ease-in-out infinite;
|
|
462
459
|
letter-spacing: 0.5px;
|
|
@@ -464,7 +461,7 @@ body {
|
|
|
464
461
|
user-select: none;
|
|
465
462
|
}
|
|
466
463
|
.live-badge.paused {
|
|
467
|
-
background:
|
|
464
|
+
background: rgba(139,148,158,0.15);
|
|
468
465
|
color: var(--text-dim);
|
|
469
466
|
animation: none;
|
|
470
467
|
}
|
|
@@ -476,7 +473,7 @@ body {
|
|
|
476
473
|
.download-btn {
|
|
477
474
|
background: var(--bg-secondary);
|
|
478
475
|
border: 1px solid var(--border);
|
|
479
|
-
border-radius:
|
|
476
|
+
border-radius: 6px;
|
|
480
477
|
padding: 4px 10px;
|
|
481
478
|
color: var(--text-dim);
|
|
482
479
|
font-size: 12px;
|
|
@@ -490,7 +487,7 @@ body {
|
|
|
490
487
|
.file-map-card {
|
|
491
488
|
background: var(--bg-secondary);
|
|
492
489
|
border: 1px solid var(--border);
|
|
493
|
-
border-radius:
|
|
490
|
+
border-radius: 8px;
|
|
494
491
|
margin-bottom: 16px;
|
|
495
492
|
overflow: hidden;
|
|
496
493
|
}
|
|
@@ -503,7 +500,7 @@ body {
|
|
|
503
500
|
font-size: 13px;
|
|
504
501
|
font-weight: 600;
|
|
505
502
|
color: var(--text-dim);
|
|
506
|
-
transition: background
|
|
503
|
+
transition: background 0.15s;
|
|
507
504
|
}
|
|
508
505
|
.file-map-header:hover { background: var(--bg-tertiary); }
|
|
509
506
|
.file-map-toggle {
|
|
@@ -520,7 +517,7 @@ body {
|
|
|
520
517
|
width: 100%;
|
|
521
518
|
border-collapse: collapse;
|
|
522
519
|
font-size: 12px;
|
|
523
|
-
font-family:
|
|
520
|
+
font-family: 'SF Mono', 'Fira Code', Menlo, monospace;
|
|
524
521
|
}
|
|
525
522
|
.file-map-table th {
|
|
526
523
|
background: var(--bg-tertiary);
|
|
@@ -539,13 +536,13 @@ body {
|
|
|
539
536
|
color: var(--text-dim);
|
|
540
537
|
}
|
|
541
538
|
.file-map-table td:first-child { color: var(--text); }
|
|
542
|
-
.file-map-table tr:hover { background:
|
|
539
|
+
.file-map-table tr:hover { background: rgba(88,166,255,0.04); }
|
|
543
540
|
|
|
544
541
|
/* Comparison view */
|
|
545
542
|
.comparison-table-wrap {
|
|
546
543
|
background: var(--bg-secondary);
|
|
547
544
|
border: 1px solid var(--border);
|
|
548
|
-
border-radius:
|
|
545
|
+
border-radius: 8px;
|
|
549
546
|
overflow: hidden;
|
|
550
547
|
}
|
|
551
548
|
.comparison-table {
|
|
@@ -574,7 +571,7 @@ body {
|
|
|
574
571
|
font-weight: 500;
|
|
575
572
|
min-width: 140px;
|
|
576
573
|
}
|
|
577
|
-
.comparison-table tr:hover { background:
|
|
574
|
+
.comparison-table tr:hover { background: rgba(88,166,255,0.04); }
|
|
578
575
|
.compare-dim { color: var(--text-dimmer); font-size: 11px; }
|
|
579
576
|
.compare-best { color: var(--green); font-weight: 600; }
|
|
580
577
|
.compare-worst { color: var(--red); }
|
|
@@ -596,8 +593,8 @@ body {
|
|
|
596
593
|
.md-rendered p { margin-bottom: 8px; }
|
|
597
594
|
.md-rendered strong { color: var(--text); font-weight: 600; }
|
|
598
595
|
.md-rendered code {
|
|
599
|
-
background: var(--bg-tertiary); border-radius:
|
|
600
|
-
font-family:
|
|
596
|
+
background: var(--bg-tertiary); border-radius: 3px; padding: 1px 5px;
|
|
597
|
+
font-family: 'SF Mono', 'Fira Code', Menlo, monospace; font-size: 12px;
|
|
601
598
|
}
|
|
602
599
|
.md-rendered table {
|
|
603
600
|
border-collapse: collapse; margin: 8px 0; width: 100%; font-size: 12px;
|
|
@@ -609,7 +606,7 @@ body {
|
|
|
609
606
|
background: var(--bg-tertiary); color: var(--text-dim); font-weight: 600;
|
|
610
607
|
font-size: 11px; text-transform: uppercase; letter-spacing: 0.3px;
|
|
611
608
|
}
|
|
612
|
-
.md-rendered tr:hover { background:
|
|
609
|
+
.md-rendered tr:hover { background: rgba(88,166,255,0.04); }
|
|
613
610
|
.md-rendered a { color: var(--blue); text-decoration: none; }
|
|
614
611
|
.md-rendered a:hover { text-decoration: underline; }
|
|
615
612
|
.md-rendered h1, .md-rendered h2, .md-rendered h3 {
|
|
@@ -621,9 +618,9 @@ body {
|
|
|
621
618
|
.md-rendered ul, .md-rendered ol { margin: 4px 0 8px 20px; }
|
|
622
619
|
.md-rendered li { margin-bottom: 2px; }
|
|
623
620
|
.md-rendered pre {
|
|
624
|
-
background: var(--bg); border-radius:
|
|
621
|
+
background: var(--bg); border-radius: 4px; padding: 10px 14px;
|
|
625
622
|
font-size: 12px; line-height: 1.5; overflow-x: auto;
|
|
626
|
-
font-family:
|
|
623
|
+
font-family: 'SF Mono', 'Fira Code', Menlo, monospace;
|
|
627
624
|
margin: 8px 0;
|
|
628
625
|
white-space: pre-wrap;
|
|
629
626
|
word-break: break-word;
|