clearotron 0.3.0-beta.3 → 0.3.0-beta.4
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/INSTALL.md +13 -6
- package/bin/connect.mjs +68 -25
- package/bin/disconnect.mjs +16 -11
- package/build-info.json +2 -2
- package/driver/CHANGELOG.md +16 -0
- package/driver/package.json +1 -1
- package/driver/suite-census.json +6 -6
- package/mcp-server/CHANGELOG.md +4 -0
- package/mcp-server/package.json +1 -1
- package/package.json +1 -1
- package/portal-ui/dist/assets/{index-CsCuPshD.css → index-Cv-E_agg.css} +199 -86
- package/portal-ui/dist/assets/{index-C1gpdkyH.js → index-DWYCsOCJ.js} +500 -375
- package/portal-ui/dist/index.html +2 -2
- package/portal-ui/package.json +1 -1
- package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/shared/connect-clients.mjs +282 -321
- package/shared/names-in-force.mjs +1 -0
- package/shared/stdio-connect.mjs +63 -0
|
@@ -2205,127 +2205,249 @@ input.filter {
|
|
|
2205
2205
|
}
|
|
2206
2206
|
|
|
2207
2207
|
|
|
2208
|
-
|
|
2208
|
+
/* ── WHAT YOU CAN DO ─────────────────────────────────────────────────────────────────────────────── */
|
|
2209
|
+
.ai-can { margin-top: 20px; max-width: 860px; }
|
|
2209
2210
|
|
|
2210
|
-
|
|
2211
|
-
.ai-where { margin: 0 0 14px; max-width: var(--screen-measure); }
|
|
2211
|
+
.ai-screen .ai-can h2 { font-size: 14.5px; margin: 0 0 3px; }
|
|
2212
2212
|
|
|
2213
|
-
.ai-
|
|
2213
|
+
.ai-can-list {
|
|
2214
|
+
list-style: none;
|
|
2215
|
+
margin: 8px 0 0;
|
|
2216
|
+
padding: 0;
|
|
2217
|
+
display: grid;
|
|
2218
|
+
grid-template-columns: 1fr 1fr;
|
|
2219
|
+
gap: 8px 28px;
|
|
2220
|
+
}
|
|
2214
2221
|
|
|
2215
|
-
|
|
2222
|
+
@media (max-width: 700px) { .ai-can-list { grid-template-columns: 1fr; } }
|
|
2216
2223
|
|
|
2217
|
-
.ai-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2224
|
+
.ai-can-list li { display: flex; gap: 9px; font-size: 14px; line-height: 1.5; color: var(--text-body); }
|
|
2225
|
+
|
|
2226
|
+
.ai-can-list li svg { margin-top: 3px; color: var(--accent-quiet); }
|
|
2227
|
+
|
|
2228
|
+
.ai-can-foot {
|
|
2229
|
+
margin: 13px 0 0;
|
|
2230
|
+
padding-top: 11px;
|
|
2231
|
+
border-top: 1px solid var(--border-hairline);
|
|
2232
|
+
font-size: 13.5px;
|
|
2223
2233
|
color: var(--text-muted);
|
|
2224
|
-
cursor: pointer;
|
|
2225
2234
|
}
|
|
2226
2235
|
|
|
2227
|
-
.ai-
|
|
2228
|
-
|
|
2229
|
-
.ai-seg-btn[data-on] { background: var(--surface-sunken); color: var(--text-strong); }
|
|
2236
|
+
.ai-can-foot strong { color: var(--text-strong); }
|
|
2230
2237
|
|
|
2231
|
-
.ai-
|
|
2238
|
+
.ai-connect { margin-top: 34px; }
|
|
2232
2239
|
|
|
2233
|
-
.ai-
|
|
2240
|
+
.ai-screen .ai-connect-head { margin: 0 0 12px; }
|
|
2234
2241
|
|
|
2235
|
-
|
|
2242
|
+
/* ── THE WHERE-CHOICE ─────────────────────────────────────────────────────────────────────────────
|
|
2243
|
+
ONE control, the same size before and after a pick. Selection is shown the way every other choice in
|
|
2244
|
+
the portal shows it — accent wash, accent border, filled radio — and never a second colour. */
|
|
2245
|
+
.where-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
|
|
2236
2246
|
|
|
2237
|
-
|
|
2238
|
-
.ai-dests {
|
|
2239
|
-
display: flex;
|
|
2240
|
-
flex-direction: column;
|
|
2241
|
-
gap: 8px;
|
|
2242
|
-
max-width: var(--screen-measure);
|
|
2243
|
-
}
|
|
2247
|
+
@media (max-width: 640px) { .where-grid { grid-template-columns: 1fr; } }
|
|
2244
2248
|
|
|
2245
|
-
|
|
2246
|
-
heights"; more importantly a row that resizes when it is pressed moves its neighbours, which is the
|
|
2247
|
-
reflow this rebuild exists to end. */
|
|
2248
|
-
.ai-dest {
|
|
2249
|
+
.where-card {
|
|
2249
2250
|
display: flex;
|
|
2250
2251
|
align-items: center;
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
padding: 8px 14px;
|
|
2256
|
-
border: 1px solid var(--border-hairline);
|
|
2257
|
-
border-radius: 8px;
|
|
2252
|
+
gap: 12px;
|
|
2253
|
+
padding: 18px;
|
|
2254
|
+
border: 1px solid var(--border-strong);
|
|
2255
|
+
border-radius: 12px;
|
|
2258
2256
|
background: var(--surface-raised);
|
|
2259
2257
|
font: inherit;
|
|
2258
|
+
font-size: 16px;
|
|
2259
|
+
font-weight: 700;
|
|
2260
|
+
line-height: 1.35;
|
|
2261
|
+
color: var(--text-strong);
|
|
2260
2262
|
text-align: left;
|
|
2261
2263
|
cursor: pointer;
|
|
2262
2264
|
}
|
|
2263
2265
|
|
|
2264
|
-
.
|
|
2266
|
+
.where-card:hover { border-color: var(--accent-ink); }
|
|
2265
2267
|
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2268
|
+
.where-card[aria-pressed='true'],
|
|
2269
|
+
.where-card[aria-pressed='true']:hover { border-color: var(--accent); background: var(--accent-wash); }
|
|
2270
|
+
|
|
2271
|
+
.ai-none { margin: 22px 0 0; max-width: 860px; border-left-color: var(--tone-medium); }
|
|
2272
|
+
|
|
2273
|
+
.ai-none p { margin: 6px 0 0; color: var(--text-muted); font-size: 13.5px; line-height: 1.55; }
|
|
2274
|
+
|
|
2275
|
+
/* ── THE APP LIST AND THE PANEL BESIDE IT ─────────────────────────────────────────────────────── */
|
|
2276
|
+
.ai-connect-grid {
|
|
2277
|
+
display: grid;
|
|
2278
|
+
grid-template-columns: minmax(260px, 360px) minmax(0, 1fr);
|
|
2279
|
+
gap: 20px;
|
|
2280
|
+
margin-top: 22px;
|
|
2281
|
+
align-items: start;
|
|
2272
2282
|
}
|
|
2273
2283
|
|
|
2274
|
-
|
|
2284
|
+
@media (max-width: 860px) { .ai-connect-grid { grid-template-columns: 1fr; } }
|
|
2285
|
+
|
|
2286
|
+
.ai-apps { display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }
|
|
2287
|
+
|
|
2288
|
+
/* The New Clearance picker's radio-row, centred because these rows carry a name and at most one line. */
|
|
2289
|
+
.ai-app { width: 100%; align-items: center; font: inherit; }
|
|
2275
2290
|
|
|
2276
|
-
.ai-
|
|
2291
|
+
.ai-app-label { min-width: 0; }
|
|
2277
2292
|
|
|
2278
|
-
.ai-
|
|
2293
|
+
.ai-app-name { display: block; font-size: 14px; font-weight: 700; color: var(--text-strong); }
|
|
2279
2294
|
|
|
2280
|
-
.ai-
|
|
2295
|
+
.ai-app-sub { display: block; margin-top: 1px; font-size: 12px; line-height: 1.5; color: var(--text-muted); }
|
|
2296
|
+
|
|
2297
|
+
.ai-app-go { margin-left: auto; display: inline-flex; color: var(--text-accent); opacity: 0; }
|
|
2298
|
+
|
|
2299
|
+
.pick-row-on .ai-app-go { opacity: 1; }
|
|
2300
|
+
|
|
2301
|
+
/* ── THE RESERVED SLOT ──────────────────────────────────────────────────────────────────────────────
|
|
2302
|
+
A MINIMUM HEIGHT WHETHER OR NOT ANYTHING IS IN IT, and the page raises it to the tallest panel this
|
|
2303
|
+
card can show — so neither picking an app nor pressing Copy moves anything around it. */
|
|
2304
|
+
.ai-slot { position: relative; min-height: 180px; }
|
|
2305
|
+
|
|
2306
|
+
/* The hidden copy of every panel the slot's height is taken from. Laid out at the slot's own width, never
|
|
2307
|
+
seen, never reached by a pointer or a keyboard. */
|
|
2308
|
+
.ai-probe {
|
|
2309
|
+
position: absolute;
|
|
2310
|
+
top: 0;
|
|
2311
|
+
left: 0;
|
|
2312
|
+
right: 0;
|
|
2313
|
+
display: grid;
|
|
2314
|
+
align-items: start;
|
|
2315
|
+
visibility: hidden;
|
|
2316
|
+
pointer-events: none;
|
|
2317
|
+
}
|
|
2281
2318
|
|
|
2282
|
-
/*
|
|
2283
|
-
|
|
2284
|
-
.ai-dest-say { display: grid; font-size: 13px; }
|
|
2319
|
+
/* Stacked in one cell, so the copy is as tall as its tallest panel and never taller than the slot. */
|
|
2320
|
+
.ai-probe > * { grid-area: 1 / 1; }
|
|
2285
2321
|
|
|
2286
|
-
.
|
|
2322
|
+
.steps-panel {
|
|
2323
|
+
border: 1px solid var(--border-strong);
|
|
2324
|
+
border-left: 3px solid var(--accent);
|
|
2325
|
+
border-radius: 12px;
|
|
2326
|
+
background: var(--surface-raised);
|
|
2327
|
+
padding: 18px 20px 20px;
|
|
2328
|
+
}
|
|
2287
2329
|
|
|
2288
|
-
.ai-
|
|
2330
|
+
.ai-slot > .steps-panel { min-height: inherit; }
|
|
2289
2331
|
|
|
2290
|
-
.
|
|
2332
|
+
.steps-panel-empty {
|
|
2333
|
+
border-left-color: var(--border-strong);
|
|
2334
|
+
display: flex;
|
|
2335
|
+
align-items: center;
|
|
2336
|
+
justify-content: center;
|
|
2337
|
+
}
|
|
2291
2338
|
|
|
2292
|
-
.
|
|
2339
|
+
.steps-empty { display: flex; align-items: center; gap: 9px; color: var(--text-faint); font-size: 14px; }
|
|
2293
2340
|
|
|
2294
|
-
.ai-
|
|
2341
|
+
.ai-screen .steps-name { margin: 3px 0 0; font-size: 18px; font-weight: 700; color: var(--text-strong); }
|
|
2295
2342
|
|
|
2296
|
-
/* ── THE
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2343
|
+
/* ── THE NUMBERED STEPS ─────────────────────────────────────────────────────────────────────────── */
|
|
2344
|
+
ol.steps {
|
|
2345
|
+
list-style: none;
|
|
2346
|
+
counter-reset: step;
|
|
2300
2347
|
margin: 16px 0 0;
|
|
2301
|
-
|
|
2302
|
-
|
|
2348
|
+
padding: 0;
|
|
2349
|
+
display: flex;
|
|
2350
|
+
flex-direction: column;
|
|
2351
|
+
gap: 16px;
|
|
2303
2352
|
}
|
|
2304
2353
|
|
|
2305
|
-
.
|
|
2354
|
+
ol.steps > li {
|
|
2355
|
+
counter-increment: step;
|
|
2356
|
+
display: grid;
|
|
2357
|
+
grid-template-columns: 24px minmax(0, 1fr);
|
|
2358
|
+
gap: 11px;
|
|
2359
|
+
}
|
|
2306
2360
|
|
|
2307
|
-
.
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2361
|
+
ol.steps > li::before {
|
|
2362
|
+
content: counter(step);
|
|
2363
|
+
width: 23px;
|
|
2364
|
+
height: 23px;
|
|
2365
|
+
margin-top: -1px;
|
|
2366
|
+
display: flex;
|
|
2367
|
+
align-items: center;
|
|
2368
|
+
justify-content: center;
|
|
2369
|
+
border-radius: 50%;
|
|
2311
2370
|
background: var(--surface-sunken);
|
|
2371
|
+
border: 1px solid var(--border-hairline);
|
|
2372
|
+
font-family: var(--font-mono);
|
|
2373
|
+
font-size: 11px;
|
|
2374
|
+
font-weight: 600;
|
|
2375
|
+
color: var(--text-muted);
|
|
2312
2376
|
}
|
|
2313
2377
|
|
|
2314
|
-
.
|
|
2378
|
+
.step-text { font-size: 14px; line-height: 1.55; color: var(--text-body); }
|
|
2379
|
+
|
|
2380
|
+
.step-text b { color: var(--text-strong); }
|
|
2381
|
+
|
|
2382
|
+
.step-hint { margin-top: 4px; font-size: 12.5px; line-height: 1.5; color: var(--text-muted); }
|
|
2315
2383
|
|
|
2316
|
-
.ai-
|
|
2384
|
+
.ai-code {
|
|
2385
|
+
padding: 1px 5px;
|
|
2386
|
+
border: 1px solid var(--border-hairline);
|
|
2387
|
+
border-radius: 4px;
|
|
2388
|
+
background: var(--surface-sunken);
|
|
2389
|
+
font-family: var(--font-mono);
|
|
2390
|
+
font-size: 12px;
|
|
2391
|
+
color: var(--text-strong);
|
|
2392
|
+
overflow-wrap: anywhere;
|
|
2393
|
+
}
|
|
2317
2394
|
|
|
2318
|
-
.
|
|
2395
|
+
.codeblock {
|
|
2396
|
+
margin-top: 8px;
|
|
2397
|
+
display: flex;
|
|
2398
|
+
align-items: flex-start;
|
|
2399
|
+
gap: 10px;
|
|
2400
|
+
padding: 10px 10px 10px 13px;
|
|
2401
|
+
border: 1px solid var(--border-hairline);
|
|
2402
|
+
border-radius: 10px;
|
|
2403
|
+
background: var(--surface-sunken);
|
|
2404
|
+
}
|
|
2405
|
+
|
|
2406
|
+
.codeblock pre {
|
|
2407
|
+
flex: 1;
|
|
2408
|
+
min-width: 0;
|
|
2319
2409
|
margin: 0;
|
|
2320
|
-
padding-
|
|
2321
|
-
|
|
2322
|
-
|
|
2410
|
+
padding-top: 3px;
|
|
2411
|
+
overflow-x: auto;
|
|
2412
|
+
font-family: var(--font-mono);
|
|
2413
|
+
font-size: 12px;
|
|
2414
|
+
line-height: 1.6;
|
|
2415
|
+
color: var(--text-strong);
|
|
2323
2416
|
}
|
|
2324
2417
|
|
|
2325
|
-
.
|
|
2418
|
+
.codeblock .btn-ghost { padding: 6px 12px; white-space: nowrap; }
|
|
2419
|
+
|
|
2420
|
+
.secret-btn { margin-top: 8px; }
|
|
2421
|
+
|
|
2422
|
+
/* THE PRESSED CONTROL IS THE CONFIRMATION: solid accent on the button pressed, never a muted caption. */
|
|
2423
|
+
.is-copied,
|
|
2424
|
+
.is-copied:hover,
|
|
2425
|
+
.btn-primary.is-copied:hover:not(:disabled) { background: var(--accent); border-color: var(--accent); color: var(--text-on-accent); }
|
|
2426
|
+
|
|
2427
|
+
.landed {
|
|
2428
|
+
margin-top: 10px;
|
|
2429
|
+
padding: 10px 13px;
|
|
2430
|
+
border: 1px solid var(--border-hairline);
|
|
2431
|
+
border-radius: 10px;
|
|
2432
|
+
background: var(--surface-sunken);
|
|
2433
|
+
}
|
|
2434
|
+
|
|
2435
|
+
.landed-label {
|
|
2436
|
+
font-size: 10px;
|
|
2437
|
+
font-weight: 700;
|
|
2438
|
+
letter-spacing: 0.13em;
|
|
2439
|
+
text-transform: uppercase;
|
|
2440
|
+
color: var(--text-faint);
|
|
2441
|
+
}
|
|
2442
|
+
|
|
2443
|
+
.landed .mono { font-size: 12px; color: var(--text-strong); overflow-wrap: anywhere; }
|
|
2444
|
+
|
|
2445
|
+
.landed .mono + .mono { margin-top: 2px; }
|
|
2326
2446
|
|
|
2327
2447
|
.ai-said { margin: 0 0 6px; color: var(--text-muted); }
|
|
2328
2448
|
|
|
2449
|
+
.ai-failed { margin: 10px 0 0; }
|
|
2450
|
+
|
|
2329
2451
|
.ai-pre {
|
|
2330
2452
|
margin: 0;
|
|
2331
2453
|
padding: 10px;
|
|
@@ -2335,21 +2457,12 @@ input.filter {
|
|
|
2335
2457
|
font-size: 13px;
|
|
2336
2458
|
}
|
|
2337
2459
|
|
|
2338
|
-
/* The help a person needs,
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
.ai-help > summary {
|
|
2342
|
-
cursor: pointer;
|
|
2343
|
-
color: var(--text-muted);
|
|
2344
|
-
font-size: 13px;
|
|
2345
|
-
font-style: italic;
|
|
2346
|
-
}
|
|
2347
|
-
|
|
2348
|
-
.ai-help-body { margin: 10px 0 0; color: var(--text-muted); line-height: 1.65; }
|
|
2460
|
+
/* The help a person needs, as a quiet notice. The link opens the document where a reader's own AI can
|
|
2461
|
+
read it too. */
|
|
2462
|
+
.ai-help { margin-top: 30px; max-width: 860px; }
|
|
2349
2463
|
|
|
2350
|
-
.ai-help
|
|
2464
|
+
.ai-help p { margin: 6px 0 0; color: var(--text-muted); font-size: 13.5px; line-height: 1.55; }
|
|
2351
2465
|
|
|
2352
|
-
.ai-help-doc { font-size: 13px; }
|
|
2353
2466
|
|
|
2354
2467
|
/* ── Give someone access: the points on the tree a new person can be given ─────────────────────────────
|
|
2355
2468
|
One row per point. A BUTTON, because choosing a point is an action and a keyboard has to reach it; the
|