koneck 2.26.0 → 2.28.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.
Files changed (63) hide show
  1. package/dist/doctor.d.ts +27 -0
  2. package/dist/doctor.d.ts.map +1 -1
  3. package/dist/doctor.js +70 -9
  4. package/dist/doctor.js.map +1 -1
  5. package/dist/engine.d.ts.map +1 -1
  6. package/dist/engine.js +4 -1
  7. package/dist/engine.js.map +1 -1
  8. package/dist/ink-chat.d.ts +12 -3
  9. package/dist/ink-chat.d.ts.map +1 -1
  10. package/dist/ink-chat.js +246 -30
  11. package/dist/ink-chat.js.map +1 -1
  12. package/dist/quality-gate.d.ts +5 -1
  13. package/dist/quality-gate.d.ts.map +1 -1
  14. package/dist/quality-gate.js +8 -6
  15. package/dist/quality-gate.js.map +1 -1
  16. package/dist/session.d.ts +10 -1
  17. package/dist/session.d.ts.map +1 -1
  18. package/dist/session.js +12 -1
  19. package/dist/session.js.map +1 -1
  20. package/dist/web/api.d.ts.map +1 -1
  21. package/dist/web/api.js +122 -27
  22. package/dist/web/api.js.map +1 -1
  23. package/dist/web/changes.d.ts +55 -0
  24. package/dist/web/changes.d.ts.map +1 -0
  25. package/dist/web/changes.js +215 -0
  26. package/dist/web/changes.js.map +1 -0
  27. package/dist/web/files.d.ts +43 -0
  28. package/dist/web/files.d.ts.map +1 -0
  29. package/dist/web/files.js +131 -0
  30. package/dist/web/files.js.map +1 -0
  31. package/dist/web/history.d.ts +61 -0
  32. package/dist/web/history.d.ts.map +1 -0
  33. package/dist/web/history.js +197 -0
  34. package/dist/web/history.js.map +1 -0
  35. package/dist/web/mark.d.ts +15 -0
  36. package/dist/web/mark.d.ts.map +1 -0
  37. package/dist/web/mark.js +15 -0
  38. package/dist/web/mark.js.map +1 -0
  39. package/dist/web/search.d.ts +45 -0
  40. package/dist/web/search.d.ts.map +1 -0
  41. package/dist/web/search.js +147 -0
  42. package/dist/web/search.js.map +1 -0
  43. package/dist/web/sessions.d.ts +8 -0
  44. package/dist/web/sessions.d.ts.map +1 -1
  45. package/dist/web/sessions.js +9 -0
  46. package/dist/web/sessions.js.map +1 -1
  47. package/dist/web/ui-client.d.ts +14 -0
  48. package/dist/web/ui-client.d.ts.map +1 -0
  49. package/dist/web/ui-client.js +0 -0
  50. package/dist/web/ui-client.js.map +1 -0
  51. package/dist/web/ui-css.d.ts +15 -0
  52. package/dist/web/ui-css.d.ts.map +1 -0
  53. package/dist/web/ui-css.js +329 -0
  54. package/dist/web/ui-css.js.map +1 -0
  55. package/dist/web/ui.d.ts +6 -9
  56. package/dist/web/ui.d.ts.map +1 -1
  57. package/dist/web/ui.js +100 -541
  58. package/dist/web/ui.js.map +1 -1
  59. package/dist/workspace-trust.d.ts +8 -0
  60. package/dist/workspace-trust.d.ts.map +1 -1
  61. package/dist/workspace-trust.js +11 -0
  62. package/dist/workspace-trust.js.map +1 -1
  63. package/package.json +1 -1
@@ -0,0 +1,329 @@
1
+ /**
2
+ * The stylesheet, and the three themes.
3
+ *
4
+ * Every colour is a token defined once on `:root`, so a theme is a list of token values rather
5
+ * than a second stylesheet. Three states, which is what "light, dark and system" actually needs:
6
+ * an explicit choice writes `data-theme` on the root and wins; with nothing written, the browser's
7
+ * own preference decides.
8
+ *
9
+ * Contrast was asked for specifically — "font visible well in dark theme". The dark palette's body
10
+ * text is #e6f1f5 on #0d1418, which is about 14:1, and the muted tone is #93aab5 at about 7:1;
11
+ * both clear WCAG AA for body text with room to spare. The first version used #7f9aa6 for anything
12
+ * secondary, which measures 4.6:1 — passable on paper and genuinely hard to read on a dim screen.
13
+ */
14
+ export function css(markUrl) {
15
+ return `
16
+ :root{
17
+ /* light, and the default when nothing has been chosen */
18
+ --bg:#f7f9fa; --panel:#ffffff; --panel-2:#eef2f4; --line:#d5dee2; --line-2:#c3d0d6;
19
+ --ink:#0f1c22; --muted:#4a606b; --dim:#6b8390;
20
+ --cyan:#0d7f92; --cyan-ink:#ffffff; --amber:#8a5a00; --green:#0f7a4a; --red:#b4232a;
21
+ --violet:#6d4bc4;
22
+ --add-bg:#e4f6ea; --add-ink:#0d5c37; --del-bg:#fdeaea; --del-ink:#8f1c22;
23
+ --shadow:0 1px 2px rgba(15,28,34,.07), 0 8px 24px rgba(15,28,34,.05);
24
+ --radius:10px; --mono:ui-monospace,'SF Mono',Menlo,Consolas,'DejaVu Sans Mono',monospace;
25
+ --mark:url("${markUrl}");
26
+ }
27
+ @media (prefers-color-scheme: dark){
28
+ :root:not([data-theme="light"]){
29
+ --bg:#0d1418; --panel:#131e24; --panel-2:#1a2932; --line:#24363f; --line-2:#2f454f;
30
+ --ink:#e6f1f5; --muted:#93aab5; --dim:#6f8894;
31
+ --cyan:#4dd6e8; --cyan-ink:#04181c; --amber:#e8b04d; --green:#57d99a; --red:#ef767b;
32
+ --violet:#b39cfb;
33
+ --add-bg:#0f2a1e; --add-ink:#7ee0a7; --del-bg:#2b1416; --del-ink:#f4a3a6;
34
+ --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.3);
35
+ }
36
+ }
37
+ :root[data-theme="dark"]{
38
+ --bg:#0d1418; --panel:#131e24; --panel-2:#1a2932; --line:#24363f; --line-2:#2f454f;
39
+ --ink:#e6f1f5; --muted:#93aab5; --dim:#6f8894;
40
+ --cyan:#4dd6e8; --cyan-ink:#04181c; --amber:#e8b04d; --green:#57d99a; --red:#ef767b;
41
+ --violet:#b39cfb;
42
+ --add-bg:#0f2a1e; --add-ink:#7ee0a7; --del-bg:#2b1416; --del-ink:#f4a3a6;
43
+ --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.3);
44
+ }
45
+
46
+ *{box-sizing:border-box}
47
+ html,body{height:100%}
48
+ body{margin:0;background:var(--bg);color:var(--ink);
49
+ font:14px/1.55 ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,'Helvetica Neue',sans-serif;
50
+ display:flex;overflow:hidden;-webkit-font-smoothing:antialiased}
51
+ button,input,textarea,select{font:inherit;color:inherit}
52
+ button{background:none;border:0;cursor:pointer}
53
+ ::-webkit-scrollbar{width:10px;height:10px}
54
+ ::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:10px;border:2px solid var(--bg)}
55
+ ::-webkit-scrollbar-track{background:transparent}
56
+ :focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
57
+
58
+ /* The mark, in whatever colour it inherits. */
59
+ .mark{display:block;background:currentColor;
60
+ -webkit-mask:var(--mark) center/contain no-repeat;mask:var(--mark) center/contain no-repeat}
61
+
62
+ /* ── sidebar ─────────────────────────────────────────────── */
63
+ aside{width:272px;flex:0 0 272px;background:var(--panel);border-right:1px solid var(--line);
64
+ display:flex;flex-direction:column;min-height:0}
65
+ aside.hide{display:none}
66
+ .brand{display:flex;align-items:center;gap:10px;padding:15px 15px 12px}
67
+ .brand .mark{width:26px;height:25px;color:var(--cyan)}
68
+ .brand b{font-size:13px;letter-spacing:.15em;font-weight:600}
69
+ .brand .tag{font-size:9px;letter-spacing:.12em;color:var(--dim);
70
+ border:1px solid var(--line);border-radius:4px;padding:2px 5px}
71
+ .newbtn{margin:0 12px 12px;padding:9px;border:1px solid var(--line);background:var(--panel-2);
72
+ border-radius:var(--radius);display:flex;align-items:center;justify-content:center;gap:7px;
73
+ transition:border-color .14s,color .14s;font-weight:500}
74
+ .newbtn:hover{border-color:var(--cyan);color:var(--cyan)}
75
+ .shead{padding:9px 15px 5px;font-size:10px;letter-spacing:.12em;color:var(--dim);
76
+ text-transform:uppercase;display:flex;justify-content:space-between;align-items:center}
77
+ .slist{overflow-y:auto;flex:1;min-height:0;padding:0 8px 10px}
78
+ .srow{padding:8px 10px;border-radius:8px;margin-bottom:2px;border:1px solid transparent;
79
+ cursor:pointer;width:100%;text-align:left;display:block}
80
+ .srow:hover{background:var(--panel-2)}
81
+ .srow.on{background:var(--panel-2);border-color:var(--line-2)}
82
+ .srow .t{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
83
+ .srow .m{font-size:10.5px;color:var(--dim);margin-top:2px;display:flex;gap:7px;align-items:center;
84
+ white-space:nowrap;overflow:hidden}
85
+ .dot{width:6px;height:6px;border-radius:50%;background:var(--green);flex:0 0 6px}
86
+ .dot.busy{background:var(--amber);animation:pulse 1.1s infinite}
87
+ .dot.past{background:var(--dim)}
88
+ @keyframes pulse{50%{opacity:.3}}
89
+ .foot{border-top:1px solid var(--line);padding:9px 12px;font-size:10.5px;color:var(--dim);
90
+ display:flex;justify-content:space-between;align-items:center;gap:8px}
91
+ .themebtn{border:1px solid var(--line);border-radius:7px;padding:3px 8px;font-size:10.5px;
92
+ color:var(--muted)}
93
+ .themebtn:hover{border-color:var(--cyan);color:var(--cyan)}
94
+
95
+ /* ── main ────────────────────────────────────────────────── */
96
+ main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}
97
+ header{height:47px;flex:0 0 47px;border-bottom:1px solid var(--line);display:flex;
98
+ align-items:center;gap:8px;padding:0 14px;background:var(--panel);font-size:12px}
99
+ .iconbtn{width:28px;height:28px;border-radius:7px;border:1px solid transparent;color:var(--muted);
100
+ display:grid;place-items:center;font-size:15px}
101
+ .iconbtn:hover{background:var(--panel-2);color:var(--ink)}
102
+ .tabs{display:flex;gap:2px;background:var(--panel-2);border-radius:8px;padding:2px}
103
+ .tab{padding:4px 12px;border-radius:6px;font-size:12px;color:var(--muted)}
104
+ .tab.on{background:var(--panel);color:var(--ink);box-shadow:var(--shadow)}
105
+ .tab .n{color:var(--dim);margin-left:5px;font-variant-numeric:tabular-nums}
106
+ .pill{border:1px solid var(--line);background:var(--panel-2);border-radius:999px;
107
+ padding:4px 11px;color:var(--muted);display:flex;gap:6px;align-items:center;max-width:230px}
108
+ .pill:hover{border-color:var(--cyan);color:var(--ink)}
109
+ .pill b{color:var(--ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
110
+ .spacer{flex:1}
111
+ .stat{color:var(--dim);font-variant-numeric:tabular-nums;white-space:nowrap}
112
+ .stat b{color:var(--muted);font-weight:500}
113
+ .stopbtn{border:1px solid var(--red);color:var(--red);border-radius:999px;padding:4px 11px}
114
+
115
+ .view{flex:1;overflow-y:auto;min-height:0}
116
+ .view[hidden]{display:none}
117
+ .wrap{max-width:840px;margin:0 auto;padding:24px}
118
+ .hero{text-align:center;padding:12vh 0 0;color:var(--muted)}
119
+ .hero .mark{width:64px;height:63px;color:var(--cyan);margin:0 auto 14px}
120
+ .hero h1{font-size:22px;margin:0;color:var(--ink);font-weight:600}
121
+ .hero p{font-size:13px;margin:8px 0 0}
122
+ .hero .ex{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:18px}
123
+ .hero .ex button{border:1px solid var(--line);border-radius:999px;padding:5px 13px;
124
+ font-size:12px;color:var(--muted);background:var(--panel)}
125
+ .hero .ex button:hover{border-color:var(--cyan);color:var(--cyan)}
126
+
127
+ /* ── transcript ──────────────────────────────────────────── */
128
+ .msg{margin-bottom:18px}
129
+ .you{background:var(--panel-2);border:1px solid var(--line);border-radius:var(--radius);
130
+ padding:11px 14px;white-space:pre-wrap;word-break:break-word}
131
+ .who{display:flex;align-items:center;gap:7px;font-size:10.5px;letter-spacing:.11em;
132
+ color:var(--dim);text-transform:uppercase;margin-bottom:7px}
133
+ .who .mark{width:13px;height:13px;color:var(--cyan)}
134
+ .reply{white-space:pre-wrap;word-break:break-word}
135
+ .reply code{background:var(--panel-2);border:1px solid var(--line);border-radius:4px;
136
+ padding:1px 5px;font-family:var(--mono);font-size:12.5px}
137
+ .reply pre{background:var(--panel);border:1px solid var(--line);border-radius:8px;
138
+ padding:12px 14px;overflow-x:auto;margin:10px 0;white-space:pre}
139
+ .reply pre code{background:none;border:0;padding:0;font-size:12.5px;line-height:1.5}
140
+ .reply h3{font-size:14.5px;margin:16px 0 6px}
141
+ .reply strong{font-weight:600}
142
+ .reply table{border-collapse:collapse;margin:10px 0;font-size:12.5px;display:block;overflow-x:auto}
143
+ .reply th,.reply td{border:1px solid var(--line);padding:5px 9px;text-align:left}
144
+ .reply th{background:var(--panel-2);color:var(--muted);font-weight:600}
145
+
146
+ .tool{border:1px solid var(--line);border-left:3px solid var(--dim);border-radius:8px;
147
+ background:var(--panel);margin:8px 0;overflow:hidden}
148
+ .tool.ok{border-left-color:var(--green)} .tool.bad{border-left-color:var(--red)}
149
+ .tool.run{border-left-color:var(--amber)}
150
+ .tool .th{display:flex;align-items:center;gap:9px;padding:8px 12px;font-size:12.5px;width:100%;
151
+ text-align:left}
152
+ .tool .th:hover{background:var(--panel-2)}
153
+ .tool .nm{font-family:var(--mono);color:var(--cyan);font-size:12px}
154
+ .tool .dt{color:var(--muted);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
155
+ font-family:var(--mono);font-size:11.5px}
156
+ .tool .ms{color:var(--dim);font-variant-numeric:tabular-nums;font-size:11px}
157
+ .tool .body{border-top:1px solid var(--line);padding:9px 12px;font-family:var(--mono);
158
+ font-size:11.5px;color:var(--muted);white-space:pre-wrap;max-height:320px;overflow:auto}
159
+ .think{border:1px solid var(--line);border-left:3px solid var(--violet);border-radius:8px;
160
+ padding:9px 12px;margin:8px 0;color:var(--violet);font-size:12.5px;white-space:pre-wrap;
161
+ max-height:210px;overflow:auto;background:var(--panel)}
162
+ .notice{border:1px solid var(--line);border-left:3px solid var(--amber);border-radius:8px;
163
+ padding:10px 13px;margin:9px 0;font-size:12.5px;color:var(--muted);white-space:pre-wrap;
164
+ background:var(--panel)}
165
+ .notice.info{border-left-color:var(--cyan)}
166
+ .err{border:1px solid var(--red);border-left:3px solid var(--red);border-radius:8px;
167
+ padding:10px 13px;margin:9px 0;font-size:12.5px;color:var(--red);white-space:pre-wrap;
168
+ background:var(--panel)}
169
+
170
+ .plan{border:1px solid var(--line);border-radius:8px;background:var(--panel);margin:9px 0;
171
+ padding:11px 13px;font-size:12.5px}
172
+ .plan h4{margin:0 0 8px;font-size:10.5px;letter-spacing:.11em;color:var(--dim);
173
+ text-transform:uppercase;display:flex;justify-content:space-between}
174
+ .step{display:flex;gap:9px;padding:2px 0;color:var(--muted)}
175
+ .step .bx{width:14px;color:var(--dim);flex:0 0 14px;text-align:center;font-family:var(--mono)}
176
+ .step.done{color:var(--dim);text-decoration:line-through} .step.done .bx{color:var(--green)}
177
+ .step.doing{color:var(--ink);font-weight:500} .step.doing .bx{color:var(--amber)}
178
+ .step.blocked .bx{color:var(--red)}
179
+
180
+ .ask{border:1px solid var(--amber);border-radius:var(--radius);background:var(--panel);
181
+ padding:12px 14px;margin:11px 0;box-shadow:var(--shadow)}
182
+ .ask .q{font-size:13px;margin-bottom:5px;font-weight:500}
183
+ .ask .a{font-family:var(--mono);font-size:11.5px;color:var(--muted);margin-bottom:11px;
184
+ white-space:pre-wrap;max-height:140px;overflow:auto;background:var(--panel-2);
185
+ border-radius:6px;padding:7px 9px}
186
+ .ask .btns{display:flex;gap:8px}
187
+ .ask .btns button{padding:6px 15px;border-radius:7px;border:1px solid var(--line)}
188
+ .ask .yes{border-color:var(--green);color:var(--green)}
189
+ .ask .no{border-color:var(--red);color:var(--red)}
190
+
191
+ .busy{display:flex;align-items:center;gap:10px;color:var(--amber);font-size:12.5px;margin:8px 0}
192
+ .sp{width:11px;height:11px;border:2px solid var(--amber);border-right-color:transparent;
193
+ border-radius:50%;animation:spin .8s linear infinite}
194
+ @keyframes spin{to{transform:rotate(360deg)}}
195
+
196
+ /* ── changes ─────────────────────────────────────────────── */
197
+ .chead{display:flex;align-items:center;gap:14px;margin-bottom:14px;font-size:12.5px;
198
+ color:var(--muted);flex-wrap:wrap}
199
+ .chead .plus{color:var(--green);font-variant-numeric:tabular-nums}
200
+ .chead .minus{color:var(--red);font-variant-numeric:tabular-nums}
201
+ .file{border:1px solid var(--line);border-radius:8px;background:var(--panel);margin-bottom:10px;
202
+ overflow:hidden}
203
+ .file .fh{display:flex;align-items:center;gap:10px;padding:9px 12px;width:100%;text-align:left;
204
+ font-size:12.5px}
205
+ .file .fh:hover{background:var(--panel-2)}
206
+ .file .kind{font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;padding:2px 6px;
207
+ border-radius:4px;border:1px solid var(--line);color:var(--muted);flex:0 0 auto}
208
+ .file .kind.added{color:var(--green);border-color:var(--green)}
209
+ .file .kind.deleted{color:var(--red);border-color:var(--red)}
210
+ .file .fp{font-family:var(--mono);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
211
+ direction:rtl;text-align:left}
212
+ .file .cnt{font-size:11px;font-variant-numeric:tabular-nums;flex:0 0 auto}
213
+ .diff{border-top:1px solid var(--line);font-family:var(--mono);font-size:11.5px;line-height:1.45;
214
+ overflow-x:auto;max-height:520px;overflow-y:auto}
215
+ .diff div{padding:0 12px;white-space:pre}
216
+ .diff .a{background:var(--add-bg);color:var(--add-ink)}
217
+ .diff .d{background:var(--del-bg);color:var(--del-ink)}
218
+ .diff .c{color:var(--muted)}
219
+ .diff .h{color:var(--dim);background:var(--panel-2);padding:2px 12px}
220
+
221
+ /* ── timing ──────────────────────────────────────────────── */
222
+ .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px;
223
+ margin-bottom:18px}
224
+ .card{border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:11px 13px}
225
+ .card .k{font-size:10px;letter-spacing:.11em;color:var(--dim);text-transform:uppercase}
226
+ .card .v{font-size:19px;margin-top:3px;font-variant-numeric:tabular-nums;font-weight:600}
227
+ .card .s{font-size:11px;color:var(--muted);margin-top:2px}
228
+ .bars{border:1px solid var(--line);border-radius:8px;background:var(--panel);overflow:hidden}
229
+ .brow{display:flex;align-items:center;gap:10px;padding:6px 12px;font-size:12px;
230
+ border-bottom:1px solid var(--line)}
231
+ .brow:last-child{border-bottom:0}
232
+ .brow .lbl{width:118px;flex:0 0 118px;color:var(--muted);font-family:var(--mono);font-size:11px;
233
+ overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
234
+ .brow .track{flex:1;height:15px;background:var(--panel-2);border-radius:4px;overflow:hidden;
235
+ display:flex;min-width:60px}
236
+ .brow .seg{height:100%}
237
+ .brow .seg.wait{background:var(--violet);opacity:.55}
238
+ .brow .seg.gen{background:var(--cyan)}
239
+ .brow .seg.tool{background:var(--amber)}
240
+ .brow .val{width:74px;flex:0 0 74px;text-align:right;color:var(--dim);
241
+ font-variant-numeric:tabular-nums;font-size:11px}
242
+ .legend{display:flex;gap:16px;margin:10px 0 0;font-size:11px;color:var(--muted)}
243
+ .legend i{width:9px;height:9px;border-radius:2px;display:inline-block;margin-right:5px}
244
+ .empty{text-align:center;padding:12vh 0;color:var(--dim);font-size:13px}
245
+
246
+ /* ── file tree ───────────────────────────────────────────── */
247
+ .split{display:flex;height:100%;min-height:0}
248
+ .tree{width:300px;flex:0 0 300px;border-right:1px solid var(--line);overflow-y:auto;padding:8px 0}
249
+ .tnode{display:flex;align-items:center;gap:6px;padding:3px 12px;width:100%;text-align:left;
250
+ font-size:12.5px;font-family:var(--mono);color:var(--muted);white-space:nowrap}
251
+ .tnode:hover{background:var(--panel-2);color:var(--ink)}
252
+ .tnode.on{background:var(--panel-2);color:var(--cyan)}
253
+ .tnode .ic{width:13px;flex:0 0 13px;color:var(--dim);text-align:center}
254
+ .tnode.d .ic{color:var(--cyan)}
255
+ .tnode .sz{margin-left:auto;font-size:10.5px;color:var(--dim)}
256
+ .fileview{flex:1;min-width:0;overflow:auto;display:flex;flex-direction:column}
257
+ .fvhead{position:sticky;top:0;background:var(--panel);border-bottom:1px solid var(--line);
258
+ padding:8px 14px;font-family:var(--mono);font-size:12px;display:flex;gap:12px;align-items:center}
259
+ .fvhead .fsz{color:var(--dim);font-size:11px}
260
+ .code{display:flex;font-family:var(--mono);font-size:12.5px;line-height:1.5}
261
+ .code .gut{flex:0 0 auto;padding:10px 10px 10px 14px;text-align:right;color:var(--dim);
262
+ background:var(--panel);border-right:1px solid var(--line);user-select:none;
263
+ font-variant-numeric:tabular-nums}
264
+ .code .src{flex:1;padding:10px 14px;white-space:pre;overflow-x:auto;min-width:0}
265
+
266
+ /* ── search ──────────────────────────────────────────────── */
267
+ .searchbar{display:flex;gap:9px;margin-bottom:16px}
268
+ .searchbar input{flex:1;padding:9px 12px;border-radius:var(--radius);border:1px solid var(--line);
269
+ background:var(--panel-2);font-size:13.5px}
270
+ .searchbar input:focus{outline:0;border-color:var(--cyan)}
271
+ .searchbar button{padding:9px 18px;border-radius:var(--radius);border:1px solid var(--line);
272
+ background:var(--panel-2)}
273
+ .searchbar button:hover{border-color:var(--cyan);color:var(--cyan)}
274
+ .smeta{font-size:11.5px;color:var(--dim);margin-bottom:12px}
275
+ .hit{border:1px solid var(--line);border-radius:8px;background:var(--panel);margin-bottom:8px;
276
+ padding:9px 12px;width:100%;text-align:left;display:block}
277
+ .hit:hover{border-color:var(--cyan)}
278
+ .hit .hh{display:flex;gap:9px;align-items:center;font-size:10.5px;color:var(--dim);
279
+ margin-bottom:5px}
280
+ .hit .role{border:1px solid var(--line);border-radius:4px;padding:1px 5px;letter-spacing:.06em;
281
+ text-transform:uppercase;font-size:9.5px}
282
+ .hit .role.user{color:var(--cyan);border-color:var(--cyan)}
283
+ .hit .role.assistant{color:var(--green);border-color:var(--green)}
284
+ .hit .role.tool{color:var(--amber);border-color:var(--amber)}
285
+ .hit .tk{font-size:12.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;
286
+ white-space:nowrap;flex:1}
287
+ .hit .sn{font-size:12.5px;font-family:var(--mono);color:var(--ink);word-break:break-word}
288
+ .hit .sn mark{background:var(--cyan);color:var(--cyan-ink);border-radius:2px;padding:0 1px}
289
+
290
+ /* ── composer ────────────────────────────────────────────── */
291
+ footer{flex:0 0 auto;border-top:1px solid var(--line);background:var(--panel);padding:11px 0 13px}
292
+ footer[hidden]{display:none}
293
+ .cbox{max-width:840px;margin:0 auto;padding:0 24px}
294
+ .cin{display:flex;align-items:flex-end;gap:10px;border:1px solid var(--line);
295
+ background:var(--panel-2);border-radius:var(--radius);padding:9px 11px;transition:border-color .14s}
296
+ .cin:focus-within{border-color:var(--cyan)}
297
+ textarea{flex:1;background:none;border:0;outline:0;resize:none;max-height:200px;
298
+ line-height:1.5;font-size:14px}
299
+ textarea::placeholder{color:var(--dim)}
300
+ .send{width:31px;height:31px;flex:0 0 31px;border-radius:50%;
301
+ background:var(--cyan);color:var(--cyan-ink);font-size:15px;display:grid;place-items:center}
302
+ .send:disabled{background:var(--line);color:var(--dim);cursor:not-allowed}
303
+ .chint{display:flex;gap:13px;margin-top:7px;font-size:10.5px;color:var(--dim)}
304
+ .chint kbd{border:1px solid var(--line);border-radius:4px;padding:0 4px;font-family:var(--mono)}
305
+ .readonly{max-width:840px;margin:0 auto;padding:0 24px;font-size:12px;color:var(--dim);
306
+ display:flex;gap:9px;align-items:center}
307
+
308
+ dialog{border:1px solid var(--line);background:var(--panel);color:var(--ink);
309
+ border-radius:var(--radius);padding:0;max-width:450px;width:92%;box-shadow:var(--shadow)}
310
+ dialog::backdrop{background:rgba(0,0,0,.5)}
311
+ .dlg{padding:18px}
312
+ .dlg h3{margin:0 0 5px;font-size:15px}
313
+ .dlg p{margin:0 0 14px;color:var(--muted);font-size:12.5px}
314
+ .dlg label{display:block;font-size:10.5px;letter-spacing:.09em;color:var(--dim);
315
+ text-transform:uppercase;margin:0 0 4px}
316
+ .dlg input,.dlg select{width:100%;padding:8px 10px;border-radius:8px;border:1px solid var(--line);
317
+ background:var(--panel-2);margin-bottom:11px}
318
+ .dlg .row{display:flex;gap:8px;justify-content:flex-end}
319
+ .dlg .row button{padding:7px 15px;border-radius:8px;border:1px solid var(--line)}
320
+ .dlg .go{border-color:var(--cyan);color:var(--cyan)}
321
+
322
+ @media (max-width:820px){
323
+ aside{position:absolute;z-index:5;height:100%;box-shadow:var(--shadow)}
324
+ .wrap,.cbox{padding-left:16px;padding-right:16px}
325
+ .tree{width:180px;flex:0 0 180px}
326
+ }
327
+ `;
328
+ }
329
+ //# sourceMappingURL=ui-css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-css.js","sourceRoot":"","sources":["../../src/web/ui-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,GAAG,CAAC,OAAe;IACjC,OAAO;;;;;;;;;;gBAUO,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8StB,CAAC;AACF,CAAC"}
package/dist/web/ui.d.ts CHANGED
@@ -1,14 +1,11 @@
1
1
  /**
2
- * The single page, as a string.
2
+ * The page, assembled.
3
3
  *
4
- * No build step and no dependencies: one HTML document with its styles and script inline, served
5
- * from memory. A web UI that needs bundling is a web UI that rots and KONECK is installed with
6
- * `npm i -g koneck`, so anything requiring a second toolchain would be broken for most people on
7
- * the day they first tried it.
8
- *
9
- * Nothing is fetched from the network either. A page that pulls a font or a script from a CDN does
10
- * not work on a machine that is offline, which is the machine most likely to be running a local
11
- * model in the first place.
4
+ * One HTML document with its styles and script inline, served from memory. No build step and
5
+ * nothing fetched from the network: KONECK is installed with `npm i -g koneck`, so anything needing
6
+ * a second toolchain would be broken for most people on the day they first tried it — and a page
7
+ * that pulls a font from a CDN does not work on the machine most likely to be running a local
8
+ * model, which is one that is offline.
12
9
  */
13
10
  export declare function page(): string;
14
11
  //# sourceMappingURL=ui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,wBAAgB,IAAI,IAAI,MAAM,CAsN7B"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,wBAAgB,IAAI,IAAI,MAAM,CAmI7B"}