@shield-agent/kya 0.15.0 → 0.18.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 (56) hide show
  1. package/.mcp.json +1 -1
  2. package/README.md +6 -4
  3. package/amp/settings.example.json +1 -1
  4. package/assets/activity-receipt.png +0 -0
  5. package/assets/report-activity.png +0 -0
  6. package/assets/report-certify.png +0 -0
  7. package/assets/report-changes.png +0 -0
  8. package/assets/report-gateway-backends.png +0 -0
  9. package/assets/report-gateway-listeners.png +0 -0
  10. package/assets/report-gateway-playground.png +0 -0
  11. package/assets/report-gateway-policies.png +0 -0
  12. package/assets/report-gateway-routes.png +0 -0
  13. package/assets/report-gateway.png +0 -0
  14. package/assets/report-overview.png +0 -0
  15. package/claude/claude_desktop_config.example.json +1 -1
  16. package/cline/cline_mcp_settings.example.json +1 -1
  17. package/copilot/mcp-config.example.json +1 -1
  18. package/dist/receipt/enrich.d.ts +1 -0
  19. package/dist/receipt/enrich.d.ts.map +1 -1
  20. package/dist/receipt/enrich.js +1 -0
  21. package/dist/receipt/enrich.js.map +1 -1
  22. package/dist/receipt/gate-card.d.ts +2 -0
  23. package/dist/receipt/gate-card.d.ts.map +1 -1
  24. package/dist/receipt/gate-card.js +1 -1
  25. package/dist/receipt/gate-card.js.map +1 -1
  26. package/dist/receipt/gate-page.d.ts +86 -0
  27. package/dist/receipt/gate-page.d.ts.map +1 -0
  28. package/dist/receipt/gate-page.js +175 -0
  29. package/dist/receipt/gate-page.js.map +1 -0
  30. package/dist/receipt/live-server.d.ts +8 -0
  31. package/dist/receipt/live-server.d.ts.map +1 -1
  32. package/dist/receipt/live-server.js +180 -2
  33. package/dist/receipt/live-server.js.map +1 -1
  34. package/dist/receipt/receipt-css.d.ts +6 -5
  35. package/dist/receipt/receipt-css.d.ts.map +1 -1
  36. package/dist/receipt/receipt-css.js +330 -80
  37. package/dist/receipt/receipt-css.js.map +1 -1
  38. package/dist/receipt/render-receipt.d.ts +19 -2
  39. package/dist/receipt/render-receipt.d.ts.map +1 -1
  40. package/dist/receipt/render-receipt.js +758 -135
  41. package/dist/receipt/render-receipt.js.map +1 -1
  42. package/droid/README.md +1 -1
  43. package/droid/mcp.example.json +1 -1
  44. package/gemini/settings.example.json +1 -1
  45. package/grok/README.md +1 -1
  46. package/kilo/kilo.example.json +1 -1
  47. package/kimi/mcp.example.json +1 -1
  48. package/kiro/mcp.example.json +1 -1
  49. package/manifest.json +1 -1
  50. package/mastracode/mcp.example.json +1 -1
  51. package/mcp.json +1 -1
  52. package/openai/codex.config.example.toml +1 -1
  53. package/opencode/opencode.example.json +1 -1
  54. package/package.json +1 -1
  55. package/qwen/settings.example.json +1 -1
  56. package/server.json +2 -2
@@ -4,12 +4,13 @@
4
4
  * The page must stay fully offline/standalone: system font stacks only, no
5
5
  * external URLs of any kind. Colors come from the --bg/--fg/--mute/--line/
6
6
  * --card base tokens plus the --ok/--warn/--bad tone family; dark is the
7
- * default and light rides on prefers-color-scheme, with translucency done via
8
- * color-mix so both schemes share one rule set.
7
+ * default and light rides on prefers-color-scheme or an explicit
8
+ * html[data-theme="light"] attribute, with translucency done via color-mix so
9
+ * both schemes share one rule set.
9
10
  *
10
- * Tab switching is pure CSS: nav links point at #overview/#changes/#certify/
11
- * #activity/#system and :target shows the matching zone. The hide rules are
12
- * gated behind
11
+ * Zone switching is pure CSS: nav links point at
12
+ * #overview/#activity/#changes/#certify/#gateway/#system and :target shows the
13
+ * matching zone. The hide rules are gated behind
13
14
  * `@supports selector(body:has(*))`, so a browser without :has() simply shows
14
15
  * every zone stacked — degraded, but nothing is ever hidden unreachable.
15
16
  */
@@ -17,6 +18,7 @@ export function receiptCss() {
17
18
  return `
18
19
  :root {
19
20
  color-scheme: dark;
21
+ --sidebar-width: 15rem;
20
22
  --bg: #0a0c10;
21
23
  --fg: #eef2f7;
22
24
  --mute: #8b95a8;
@@ -28,8 +30,21 @@ export function receiptCss() {
28
30
  --rail: #2a3344;
29
31
  --day: #6b7280;
30
32
  }
33
+ :root[data-theme="light"] {
34
+ color-scheme: light;
35
+ --bg: #f3f5f8;
36
+ --fg: #0f172a;
37
+ --mute: #64748b;
38
+ --line: #e2e8f0;
39
+ --card: #ffffff;
40
+ --ok: #059669;
41
+ --bad: #dc2626;
42
+ --warn: #d97706;
43
+ --rail: #cbd5e1;
44
+ --day: #64748b;
45
+ }
31
46
  @media (prefers-color-scheme: light) {
32
- :root {
47
+ :root:not([data-theme]) {
33
48
  color-scheme: light;
34
49
  --bg: #f3f5f8;
35
50
  --fg: #0f172a;
@@ -51,20 +66,102 @@ export function receiptCss() {
51
66
  color: var(--fg);
52
67
  line-height: 1.4;
53
68
  }
54
- main { max-width: 74rem; margin: 0 auto; padding: 1.35rem 1.25rem 3.5rem; }
55
- /* Sticky top zone: header + tab nav stay pinned as one unit, so a fragment
56
- jump to a zone never strands the nav behind the header. */
57
- .topstick {
58
- position: sticky; top: 0; z-index: 6;
59
- background: color-mix(in srgb, var(--bg) 88%, transparent);
60
- -webkit-backdrop-filter: blur(10px);
61
- backdrop-filter: blur(10px);
69
+ /* Fixed left sidebar: brand, vertical nav, footer actions. */
70
+ .sidebar {
71
+ position: fixed; top: 0; left: 0; bottom: 0;
72
+ width: var(--sidebar-width);
73
+ display: flex; flex-direction: column;
74
+ background: var(--card);
75
+ border-right: 1px solid var(--line);
76
+ z-index: 10;
77
+ }
78
+ .sidebar-header {
79
+ padding: 1.1rem 1.25rem;
62
80
  border-bottom: 1px solid var(--line);
63
- margin-bottom: 1rem;
64
81
  }
65
- header.bar {
66
- padding: 0.85rem 0 0.4rem;
82
+ .brand {
83
+ display: inline-flex; align-items: center; gap: 0.55rem;
84
+ font-weight: 800; font-size: 1.1rem; letter-spacing: -0.02em;
85
+ }
86
+ .mark {
87
+ display: inline-flex; align-items: center; justify-content: center;
88
+ width: 1.6rem; height: 1.6rem; border-radius: 6px;
89
+ background: var(--fg); color: var(--card);
90
+ font-size: 1rem; line-height: 1;
91
+ }
92
+ .wordmark { color: var(--fg); }
93
+ .sidebar-nav {
94
+ flex: 1 1 auto; overflow-y: auto;
95
+ padding: 0.75rem; display: flex; flex-direction: column; gap: 0.15rem;
96
+ }
97
+ .nav-link {
98
+ display: flex; align-items: center; justify-content: space-between;
99
+ gap: 0.5rem;
100
+ padding: 0.55rem 0.75rem;
101
+ font-size: 0.82rem; font-weight: 600; color: var(--mute);
102
+ text-decoration: none; border-radius: 8px;
103
+ border: 1px solid transparent;
104
+ }
105
+ .nav-link:hover { color: var(--fg); background: color-mix(in srgb, var(--bg) 55%, var(--card)); }
106
+ .nav-link:focus-visible {
107
+ outline: 2px solid var(--ok);
108
+ outline-offset: 2px;
109
+ color: var(--fg);
110
+ }
111
+ .nav-label { display: inline-flex; align-items: center; gap: 0.4rem; }
112
+ .nav-group { display: flex; flex-direction: column; gap: 0.05rem; margin-top: 0.35rem; }
113
+ .nav-group-label {
114
+ display: inline-flex; align-items: center; gap: 0.4rem;
115
+ padding: 0.45rem 0.75rem 0.25rem;
116
+ font-size: 0.72rem; font-weight: 700; letter-spacing: 0.06em;
117
+ text-transform: uppercase; color: var(--day);
118
+ }
119
+ .nav-sub { margin-left: 0.75rem; font-size: 0.78rem; font-weight: 500; }
120
+ .nav-count {
121
+ font-size: 0.72rem; font-variant-numeric: tabular-nums; font-weight: 650;
122
+ color: var(--mute); background: color-mix(in srgb, var(--bg) 55%, var(--card));
123
+ border: 1px solid var(--line); border-radius: 999px;
124
+ padding: 0.08rem 0.45rem;
125
+ }
126
+ .status-dot {
127
+ width: 0.45rem; height: 0.45rem; border-radius: 50%;
128
+ background: var(--ok);
129
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--ok) 22%, transparent);
130
+ }
131
+ .sidebar-footer {
132
+ padding: 0.9rem 1.25rem;
133
+ border-top: 1px solid var(--line);
134
+ display: flex; align-items: center; justify-content: space-between; gap: 0.75rem;
135
+ }
136
+ .theme-toggle {
137
+ font-family: inherit; font-size: 0.75rem; font-weight: 600;
138
+ color: var(--fg); background: var(--bg);
139
+ border: 1px solid var(--line); border-radius: 8px;
140
+ padding: 0.35rem 0.7rem; cursor: pointer;
141
+ appearance: none; -webkit-appearance: none;
142
+ }
143
+ .theme-toggle:hover { border-color: var(--mute); }
144
+ .theme-toggle:focus-visible {
145
+ outline: 2px solid var(--ok);
146
+ outline-offset: 2px;
147
+ }
148
+ .sidebar-footer a {
149
+ font-size: 0.75rem; font-weight: 600; color: var(--mute);
150
+ text-decoration: none;
67
151
  }
152
+ .sidebar-footer a:hover { color: var(--fg); }
153
+ .sidebar-footer a:focus-visible {
154
+ outline: 2px solid var(--ok);
155
+ outline-offset: 2px;
156
+ color: var(--fg);
157
+ }
158
+ main {
159
+ margin-left: var(--sidebar-width);
160
+ max-width: 74rem;
161
+ margin-right: auto;
162
+ padding: 1.35rem 1.25rem 3.5rem;
163
+ }
164
+ .page-header { margin-bottom: 1.25rem; }
68
165
  .title-row {
69
166
  display: flex; align-items: baseline; justify-content: space-between;
70
167
  gap: 0.75rem; flex-wrap: wrap;
@@ -95,14 +192,48 @@ export function receiptCss() {
95
192
  @media (prefers-reduced-motion: reduce) {
96
193
  .live::before { animation: none; }
97
194
  }
98
- /* Hero KPI grid: Certify spans two columns on wide layouts, 4→2→1. Every
99
- hero card is a direct .panel child — one chrome, no wrapper special-cases. */
100
195
  .hero {
101
- display: grid; grid-template-columns: repeat(4, 1fr);
102
- gap: 1rem; margin-bottom: 1.25rem; align-items: stretch;
196
+ display: flex;
197
+ flex-direction: column;
198
+ gap: 1rem;
199
+ margin-bottom: 1.25rem;
200
+ }
201
+ .hero > .panel { margin-bottom: 0; }
202
+ .hero-tiles {
203
+ display: grid;
204
+ grid-template-columns: repeat(4, 1fr);
205
+ gap: 1rem;
206
+ }
207
+ .hero-tiles > .panel { margin-bottom: 0; height: 100%; }
208
+ @media (max-width: 1100px) {
209
+ .hero-tiles { grid-template-columns: repeat(2, 1fr); }
210
+ }
211
+ @media (max-width: 900px) {
212
+ .sidebar {
213
+ position: sticky; top: 0;
214
+ width: 100%; height: auto; flex-direction: row; flex-wrap: wrap;
215
+ border-right: none; border-bottom: 1px solid var(--line);
216
+ }
217
+ .sidebar-header {
218
+ border-bottom: none; border-right: 1px solid var(--line);
219
+ padding: 0.75rem 1rem;
220
+ }
221
+ .sidebar-nav {
222
+ flex-direction: row; flex-wrap: wrap; overflow-x: auto;
223
+ flex: 1 1 auto; padding: 0.6rem;
224
+ }
225
+ .sidebar-footer {
226
+ border-top: none; border-left: 1px solid var(--line);
227
+ padding: 0.75rem 1rem;
228
+ }
229
+ main { margin-left: 0; padding-top: 1rem; }
230
+ }
231
+ @media (max-width: 720px) {
232
+ main { padding: 1.1rem 0.85rem 3rem; }
233
+ }
234
+ @media (max-width: 480px) {
235
+ .hero-tiles { grid-template-columns: 1fr; }
103
236
  }
104
- .hero > .panel { margin-bottom: 0; height: 100%; }
105
- .hero-certify { grid-column: span 2; min-width: 0; }
106
237
  /* Result-tone accent: inset bar so the border box never shifts. */
107
238
  .hero-certify.pass {
108
239
  border-color: color-mix(in srgb, var(--ok) 40%, var(--line));
@@ -114,33 +245,16 @@ export function receiptCss() {
114
245
  }
115
246
  /* Hero result pill reads larger than inline status pills. */
116
247
  .hero-certify .pill { font-size: 0.82rem; padding: 0.22rem 0.75rem; }
117
- /* Status legend + attested summary: small muted single lines under the
118
- count tiles; allowed to wrap on narrow viewports. */
248
+ /* Status legend + attested summary: small muted single lines under the count tiles. */
119
249
  .hero-certify .legend, .hero-certify .att-line {
120
250
  margin: 0.3rem 0 0; font-size: 0.72rem; color: var(--mute);
121
251
  overflow-wrap: break-word;
122
252
  }
123
- /* Evidence one-liner sits beneath its gap row (the row is a flex-wrap). */
253
+ /* Evidence one-liner sits beneath its gap row. */
124
254
  .hero-certify .rows .gap-ev {
125
255
  flex-basis: 100%; color: var(--mute); font-size: 0.74rem;
126
256
  overflow-wrap: break-word;
127
257
  }
128
- /* Gateway quickstart: compact numbered steps under the not-set-up line. */
129
- .gate .steps {
130
- margin: 0.4rem 0 0; padding-left: 1.25rem;
131
- font-size: 0.78rem; color: var(--mute);
132
- display: flex; flex-direction: column; gap: 0.15rem;
133
- }
134
- @media (max-width: 1100px) {
135
- .hero { grid-template-columns: repeat(2, 1fr); }
136
- }
137
- @media (max-width: 720px) {
138
- main { padding: 1.1rem 0.85rem 3rem; }
139
- }
140
- @media (max-width: 480px) {
141
- .hero { grid-template-columns: 1fr; }
142
- .hero-certify { grid-column: span 1; }
143
- }
144
258
  .kpi-row { display: flex; flex-wrap: wrap; gap: 0.8rem 1.2rem; }
145
259
  .kpi { display: flex; flex-direction: column; gap: 0.1rem; min-width: 2.8rem; }
146
260
  .kpi-num {
@@ -187,51 +301,42 @@ export function receiptCss() {
187
301
  .sev.high { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 40%, transparent); }
188
302
  .sev.medium { color: var(--day); }
189
303
  .sev.low { color: var(--mute); }
190
- /* Tabs: pure-CSS :target switching, no JS. Without :has() support the hide
191
- rules never apply and every zone stays visible (degraded but complete). */
192
- .tabs {
193
- display: flex; gap: 0.25rem; flex-wrap: wrap;
194
- }
195
- .tab {
196
- padding: 0.45rem 0.85rem; margin-bottom: -1px;
197
- font-size: 0.8rem; font-weight: 600; color: var(--mute);
198
- text-decoration: none;
199
- border: 1px solid transparent; border-bottom: none;
200
- border-radius: 8px 8px 0 0;
201
- }
202
- .tab:hover { color: var(--fg); }
203
- .tab:focus-visible {
204
- outline: 2px solid var(--ok);
205
- outline-offset: 2px;
206
- color: var(--fg);
207
- }
208
- /* Narrow screens: tabs stop wrapping and scroll horizontally instead.
209
- Padding keeps the focus outline (2px + 2px offset) inside the scrollport. */
210
- @media (max-width: 480px) {
211
- .tabs {
212
- flex-wrap: nowrap; overflow-x: auto;
213
- scrollbar-width: thin;
214
- padding: 4px;
215
- }
216
- .tab { flex: none; }
217
- }
304
+ /* Sidebar nav: pure-CSS :target switching, no JS. Without :has() support
305
+ the hide rules never apply and every zone stays visible (degraded but complete). */
218
306
  .zone { scroll-margin-top: 6.4rem; }
219
307
  .zone-empty { margin: 0.25rem 0 0.5rem; }
220
308
  @supports selector(body:has(*)) {
221
- #changes, #activity, #certify, #system { display: none; }
222
- #overview:target, #changes:target, #activity:target, #certify:target, #system:target { display: block; }
223
- body:has(#changes:target) #overview,
309
+ #activity, #changes, #certify,
310
+ #gateway-home, #gateway-listeners, #gateway-routes, #gateway-backends, #gateway-policies, #gateway-playground,
311
+ #system { display: none; }
312
+ #overview:target,
313
+ #activity:target, #changes:target, #certify:target,
314
+ #gateway-home:target, #gateway-listeners:target, #gateway-routes:target, #gateway-backends:target, #gateway-policies:target, #gateway-playground:target,
315
+ #system:target { display: block; }
224
316
  body:has(#activity:target) #overview,
317
+ body:has(#changes:target) #overview,
225
318
  body:has(#certify:target) #overview,
319
+ body:has(#gateway-home:target) #overview,
320
+ body:has(#gateway-listeners:target) #overview,
321
+ body:has(#gateway-routes:target) #overview,
322
+ body:has(#gateway-backends:target) #overview,
323
+ body:has(#gateway-policies:target) #overview,
324
+ body:has(#gateway-playground:target) #overview,
226
325
  body:has(#system:target) #overview { display: none; }
227
- body:not(:has(.zone:target)) .tab[href="#overview"],
228
- body:has(#overview:target) .tab[href="#overview"],
229
- body:has(#changes:target) .tab[href="#changes"],
230
- body:has(#certify:target) .tab[href="#certify"],
231
- body:has(#activity:target) .tab[href="#activity"],
232
- body:has(#system:target) .tab[href="#system"] {
326
+ body:not(:has(.zone:target)) .nav-link[href="#overview"],
327
+ body:has(#overview:target) .nav-link[href="#overview"],
328
+ body:has(#activity:target) .nav-link[href="#activity"],
329
+ body:has(#changes:target) .nav-link[href="#changes"],
330
+ body:has(#certify:target) .nav-link[href="#certify"],
331
+ body:has(#system:target) .nav-link[href="#system"],
332
+ body:has(#gateway-home:target) .nav-link[href="#gateway-home"],
333
+ body:has(#gateway-listeners:target) .nav-link[href="#gateway-listeners"],
334
+ body:has(#gateway-routes:target) .nav-link[href="#gateway-routes"],
335
+ body:has(#gateway-backends:target) .nav-link[href="#gateway-backends"],
336
+ body:has(#gateway-policies:target) .nav-link[href="#gateway-policies"],
337
+ body:has(#gateway-playground:target) .nav-link[href="#gateway-playground"] {
233
338
  color: var(--fg);
234
- background: var(--card);
339
+ background: var(--bg);
235
340
  border-color: var(--line);
236
341
  }
237
342
  }
@@ -597,6 +702,151 @@ export function receiptCss() {
597
702
  font-size: 0.72rem; color: var(--mute);
598
703
  background: var(--card); border: 1px solid var(--line);
599
704
  border-radius: 6px; padding: 0.18rem 0.4rem;
705
+ }
706
+ /* Gateway zone dashboard */
707
+ .gate-zone { display: flex; flex-direction: column; gap: 1rem; }
708
+ .gate-zone h2 { margin: 0 0 0.15rem; }
709
+ .gate-zone > .sub,
710
+ .page-sub {
711
+ margin: 0 0 0.9rem; color: var(--mute); font-size: 0.82rem;
712
+ }
713
+ .page-title {
714
+ margin: 0 0 0.15rem; font-size: 1.1rem; font-weight: 600;
715
+ letter-spacing: -0.02em;
716
+ }
717
+ .gate-status-header {
718
+ display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.55rem;
719
+ }
720
+ .gate-status-title {
721
+ font-size: 1.25rem; font-weight: 600; letter-spacing: -0.025em;
722
+ }
723
+ .gate-status-meta {
724
+ display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0.45rem;
725
+ color: var(--mute); font-size: 0.84rem;
726
+ }
727
+ .gate-status-meta .pill { font-size: 0.68rem; }
728
+ .stat-cards {
729
+ display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem;
730
+ margin-bottom: 1rem;
731
+ }
732
+ .stat-card {
733
+ background: var(--card); border: 1px solid var(--line);
734
+ border-radius: 12px; padding: 0.7rem 0.9rem;
735
+ display: flex; flex-direction: column; gap: 0.35rem;
736
+ }
737
+ .stat-card .lab {
738
+ font-size: 0.66rem; font-weight: 700; letter-spacing: 0.07em;
739
+ text-transform: uppercase; color: var(--mute);
740
+ }
741
+ .stat-card .num {
742
+ font-size: 1.6rem; font-weight: 700; line-height: 1.15;
743
+ font-variant-numeric: tabular-nums; letter-spacing: -0.02em;
744
+ color: var(--fg);
745
+ }
746
+ .stat-card .num.bad { color: var(--bad); }
747
+ .stat-card .val { display: flex; flex-wrap: wrap; gap: 0.35rem; align-items: center; }
748
+ .card-grid {
749
+ display: grid; grid-template-columns: repeat(2, 1fr); gap: 1rem;
750
+ margin-bottom: 1rem;
751
+ }
752
+ .card {
753
+ background: var(--card); border: 1px solid var(--line);
754
+ border-radius: 12px; padding: 0.7rem 0.9rem 0.8rem;
755
+ }
756
+ .card h3 {
757
+ margin: 0 0 0.55rem; font-size: 0.72rem; font-weight: 700;
758
+ letter-spacing: 0.07em; text-transform: uppercase; color: var(--day);
759
+ }
760
+ .card h3 .mute { text-transform: none; letter-spacing: 0.02em; font-weight: 600; }
761
+ .card .sub {
762
+ margin: 0.6rem 0 0.3rem; font-size: 0.66rem; font-weight: 700;
763
+ letter-spacing: 0.06em; text-transform: uppercase; color: var(--mute);
764
+ }
765
+ .card .line { margin: 0.25rem 0; font-size: 0.82rem; word-break: break-word; }
766
+ .card pre {
767
+ background: color-mix(in srgb, var(--bg) 55%, var(--card));
768
+ border: 1px solid var(--line); border-radius: 8px;
769
+ padding: 0.45rem 0.55rem; margin: 0.3rem 0 0.6rem;
770
+ font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace;
771
+ font-size: 0.74rem; white-space: pre-wrap; word-break: break-word;
772
+ color: var(--fg);
773
+ }
774
+ .card details { margin: 0.25rem 0; }
775
+ .card details summary {
776
+ font-size: 0.8rem; cursor: pointer; color: var(--fg);
777
+ list-style: none;
778
+ }
779
+ .card details summary::-webkit-details-marker { display: none; }
780
+ .targets-table { margin-top: 0.35rem; }
781
+ .chip.bad {
782
+ color: var(--bad); border-color: color-mix(in srgb, var(--bad) 40%, transparent);
783
+ background: color-mix(in srgb, var(--bad) 10%, var(--card));
784
+ }
785
+ .playground-form {
786
+ display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: stretch;
787
+ margin: 0.5rem 0;
788
+ }
789
+ .playground-form select,
790
+ .playground-form input {
791
+ font-family: inherit; font-size: 0.8rem; color: var(--fg); background: var(--bg);
792
+ border: 1px solid var(--line); border-radius: 8px; padding: 0.35rem 0.55rem;
793
+ appearance: none; -webkit-appearance: none;
794
+ }
795
+ .playground-form select { min-width: 8rem; }
796
+ .playground-form input { flex: 1 1 10rem; min-width: 8rem; }
797
+ .quick-actions {
798
+ display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center;
799
+ margin: 0.5rem 0;
800
+ }
801
+ .sr-only {
802
+ position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
803
+ overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
804
+ }
805
+ @media (max-width: 900px) {
806
+ .stat-cards { grid-template-columns: repeat(2, 1fr); }
807
+ .card-grid { grid-template-columns: 1fr; }
808
+ }
809
+ @media (max-width: 480px) {
810
+ .stat-cards { grid-template-columns: 1fr; }
811
+ }
812
+ /* Gateway interactive result areas (playground + doctor/quick actions). */
813
+ .gate-result {
814
+ margin-top: 0.5rem;
815
+ padding: 0.45rem 0.6rem;
816
+ font-size: 0.8rem;
817
+ background: color-mix(in srgb, var(--bg) 55%, var(--card));
818
+ border: 1px solid var(--line);
819
+ border-radius: 8px;
820
+ word-break: break-word;
821
+ }
822
+ .gate-result p { margin: 0.15rem 0; }
823
+ .gate-result pre {
824
+ margin: 0;
825
+ white-space: pre-wrap;
826
+ word-break: break-word;
827
+ font-family: "IBM Plex Mono", ui-monospace, Menlo, monospace;
828
+ font-size: 0.74rem;
829
+ }
830
+ .gate-result.error {
831
+ background: color-mix(in srgb, var(--bad) 10%, var(--card));
832
+ border-color: color-mix(in srgb, var(--bad) 35%, var(--line));
833
+ }
834
+ button[disabled], .stat[disabled] {
835
+ opacity: 0.55;
836
+ cursor: not-allowed;
837
+ }
838
+ .pagination-bar {
839
+ display: flex;
840
+ flex-wrap: wrap;
841
+ align-items: center;
842
+ justify-content: center;
843
+ gap: 0.4rem;
844
+ margin-top: 0.9rem;
845
+ }
846
+ .pagination-bar .stat.active {
847
+ color: var(--fg);
848
+ border-color: color-mix(in srgb, var(--ok) 55%, var(--line));
849
+ background: color-mix(in srgb, var(--ok) 12%, var(--card));
600
850
  }`;
601
851
  }
602
852
  //# sourceMappingURL=receipt-css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"receipt-css.js","sourceRoot":"","sources":["../../src/receipt/receipt-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAukBL,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"receipt-css.js","sourceRoot":"","sources":["../../src/receipt/receipt-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAg0BL,CAAA;AACJ,CAAC"}
@@ -2,7 +2,9 @@ import { type TrailEvent } from "../trail.js";
2
2
  import type { KyaFileConfig } from "../config.js";
3
3
  import { type CertifyCard, type OrrCard, type SandboxCard, type WiredHostRow } from "./enrich.js";
4
4
  import { type ShowbackReport } from "../showback/cost-per-task.js";
5
- import { type GateCard } from "./gate-card.js";
5
+ import { type GatePage } from "./gate-page.js";
6
+ export declare const PAGE_SIZE = 50;
7
+ export declare function clampPage(page: number, total: number): number;
6
8
  export interface ReceiptModel {
7
9
  readonly title: string;
8
10
  readonly rangeLabel: string;
@@ -20,6 +22,8 @@ export interface ReceiptModel {
20
22
  readonly live?: boolean;
21
23
  /** Loopback SSE token — set only by the live server, never in static renders. */
22
24
  readonly liveToken?: string;
25
+ /** Page number for the Activity feed (1-based). */
26
+ readonly page: number;
23
27
  /** Local identity from .kya/config.json (inert text; never a link). */
24
28
  readonly identity?: KyaFileConfig;
25
29
  /** Sandbox state + configured KYA_SANDBOX backend. */
@@ -27,7 +31,7 @@ export interface ReceiptModel {
27
31
  /** Per-host wiring status across the connect registry. */
28
32
  readonly wiredHosts?: readonly WiredHostRow[];
29
33
  /** Local gateway state + per-server activity in the window. */
30
- readonly gate?: GateCard;
34
+ readonly gate?: GatePage;
31
35
  /** Slim ORR card from orr-report/report.json. */
32
36
  readonly orr?: OrrCard;
33
37
  /** Live Agent Trust Baseline card, recomputed on every model load. */
@@ -84,7 +88,20 @@ export declare function loadReceiptModel(input: {
84
88
  readonly days: number;
85
89
  readonly live?: boolean;
86
90
  readonly liveToken?: string;
91
+ readonly page?: number;
87
92
  }): ReceiptModel;
93
+ export declare function gatewayHeroCard(page: GatePage | undefined, _nowMs: number): string;
94
+ export interface FeedFilters {
95
+ readonly [group: string]: readonly string[];
96
+ }
97
+ export interface FeedPageResult {
98
+ readonly feedHtml: string;
99
+ readonly paginationHtml: string;
100
+ readonly total: number;
101
+ readonly page: number;
102
+ readonly pages: number;
103
+ }
104
+ export declare function renderFeedPage(events: readonly TrailEvent[], filters: FeedFilters, page: number, nowMs: number, live: boolean): FeedPageResult;
88
105
  export declare function renderReceiptHtml(model: ReceiptModel): string;
89
106
  export declare function renderReceiptMarkdown(model: ReceiptModel): string;
90
107
  //# sourceMappingURL=render-receipt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-receipt.d.ts","sourceRoot":"","sources":["../../src/receipt/render-receipt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-receipt.d.ts","sourceRoot":"","sources":["../../src/receipt/render-receipt.ts"],"names":[],"mappings":"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"}