arc-1 0.9.19 → 0.9.21

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 (177) hide show
  1. package/README.md +7 -4
  2. package/dist/adt/client.d.ts +29 -1
  3. package/dist/adt/client.d.ts.map +1 -1
  4. package/dist/adt/client.js +72 -3
  5. package/dist/adt/client.js.map +1 -1
  6. package/dist/adt/ddic-xml.d.ts +29 -0
  7. package/dist/adt/ddic-xml.d.ts.map +1 -1
  8. package/dist/adt/ddic-xml.js +112 -1
  9. package/dist/adt/ddic-xml.js.map +1 -1
  10. package/dist/adt/devtools.d.ts +9 -2
  11. package/dist/adt/devtools.d.ts.map +1 -1
  12. package/dist/adt/devtools.js +126 -5
  13. package/dist/adt/devtools.js.map +1 -1
  14. package/dist/adt/diagnostics.d.ts +99 -4
  15. package/dist/adt/diagnostics.d.ts.map +1 -1
  16. package/dist/adt/diagnostics.js +443 -10
  17. package/dist/adt/diagnostics.js.map +1 -1
  18. package/dist/adt/errors.d.ts +13 -1
  19. package/dist/adt/errors.d.ts.map +1 -1
  20. package/dist/adt/errors.js +244 -25
  21. package/dist/adt/errors.js.map +1 -1
  22. package/dist/adt/features.d.ts.map +1 -1
  23. package/dist/adt/features.js +2 -1
  24. package/dist/adt/features.js.map +1 -1
  25. package/dist/adt/gcts.d.ts +3 -3
  26. package/dist/adt/gcts.d.ts.map +1 -1
  27. package/dist/adt/gcts.js +24 -3
  28. package/dist/adt/gcts.js.map +1 -1
  29. package/dist/adt/http.d.ts.map +1 -1
  30. package/dist/adt/http.js +4 -3
  31. package/dist/adt/http.js.map +1 -1
  32. package/dist/adt/transport.d.ts +43 -4
  33. package/dist/adt/transport.d.ts.map +1 -1
  34. package/dist/adt/transport.js +84 -10
  35. package/dist/adt/transport.js.map +1 -1
  36. package/dist/adt/types.d.ts +104 -0
  37. package/dist/adt/types.d.ts.map +1 -1
  38. package/dist/adt/xml-parser.d.ts +37 -0
  39. package/dist/adt/xml-parser.d.ts.map +1 -1
  40. package/dist/adt/xml-parser.js +102 -0
  41. package/dist/adt/xml-parser.js.map +1 -1
  42. package/dist/authz/policy.d.ts.map +1 -1
  43. package/dist/authz/policy.js +11 -1
  44. package/dist/authz/policy.js.map +1 -1
  45. package/dist/cache/cache.d.ts +25 -0
  46. package/dist/cache/cache.d.ts.map +1 -1
  47. package/dist/cache/cache.js.map +1 -1
  48. package/dist/cache/caching-layer.d.ts +31 -2
  49. package/dist/cache/caching-layer.d.ts.map +1 -1
  50. package/dist/cache/caching-layer.js +102 -2
  51. package/dist/cache/caching-layer.js.map +1 -1
  52. package/dist/cache/memory.d.ts +2 -1
  53. package/dist/cache/memory.d.ts.map +1 -1
  54. package/dist/cache/memory.js +46 -0
  55. package/dist/cache/memory.js.map +1 -1
  56. package/dist/cache/sqlite.d.ts +2 -1
  57. package/dist/cache/sqlite.d.ts.map +1 -1
  58. package/dist/cache/sqlite.js +64 -0
  59. package/dist/cache/sqlite.js.map +1 -1
  60. package/dist/cli.js +4 -2
  61. package/dist/cli.js.map +1 -1
  62. package/dist/handlers/context.d.ts.map +1 -1
  63. package/dist/handlers/context.js +27 -4
  64. package/dist/handlers/context.js.map +1 -1
  65. package/dist/handlers/diagnose.d.ts.map +1 -1
  66. package/dist/handlers/diagnose.js +88 -4
  67. package/dist/handlers/diagnose.js.map +1 -1
  68. package/dist/handlers/dispatch.d.ts.map +1 -1
  69. package/dist/handlers/dispatch.js +9 -0
  70. package/dist/handlers/dispatch.js.map +1 -1
  71. package/dist/handlers/feature-cache.d.ts +5 -0
  72. package/dist/handlers/feature-cache.d.ts.map +1 -1
  73. package/dist/handlers/feature-cache.js +10 -0
  74. package/dist/handlers/feature-cache.js.map +1 -1
  75. package/dist/handlers/git.d.ts.map +1 -1
  76. package/dist/handlers/git.js +3 -3
  77. package/dist/handlers/git.js.map +1 -1
  78. package/dist/handlers/manage.d.ts.map +1 -1
  79. package/dist/handlers/manage.js +44 -0
  80. package/dist/handlers/manage.js.map +1 -1
  81. package/dist/handlers/object-types.d.ts +1 -1
  82. package/dist/handlers/object-types.d.ts.map +1 -1
  83. package/dist/handlers/object-types.js +17 -2
  84. package/dist/handlers/object-types.js.map +1 -1
  85. package/dist/handlers/query.d.ts.map +1 -1
  86. package/dist/handlers/query.js +35 -3
  87. package/dist/handlers/query.js.map +1 -1
  88. package/dist/handlers/read.d.ts.map +1 -1
  89. package/dist/handlers/read.js +33 -8
  90. package/dist/handlers/read.js.map +1 -1
  91. package/dist/handlers/schemas.d.ts +79 -5
  92. package/dist/handlers/schemas.d.ts.map +1 -1
  93. package/dist/handlers/schemas.js +33 -0
  94. package/dist/handlers/schemas.js.map +1 -1
  95. package/dist/handlers/tool-registry.d.ts +4 -4
  96. package/dist/handlers/tool-registry.d.ts.map +1 -1
  97. package/dist/handlers/tool-registry.js +6 -0
  98. package/dist/handlers/tool-registry.js.map +1 -1
  99. package/dist/handlers/tools.d.ts.map +1 -1
  100. package/dist/handlers/tools.js +132 -34
  101. package/dist/handlers/tools.js.map +1 -1
  102. package/dist/handlers/transport.d.ts.map +1 -1
  103. package/dist/handlers/transport.js +82 -5
  104. package/dist/handlers/transport.js.map +1 -1
  105. package/dist/handlers/write/create.d.ts.map +1 -1
  106. package/dist/handlers/write/create.js +224 -7
  107. package/dist/handlers/write/create.js.map +1 -1
  108. package/dist/handlers/write-helpers.d.ts +1 -0
  109. package/dist/handlers/write-helpers.d.ts.map +1 -1
  110. package/dist/handlers/write-helpers.js +49 -5
  111. package/dist/handlers/write-helpers.js.map +1 -1
  112. package/dist/handlers/write.d.ts.map +1 -1
  113. package/dist/handlers/write.js +18 -2
  114. package/dist/handlers/write.js.map +1 -1
  115. package/dist/plugins/manifest-interpreter.d.ts.map +1 -1
  116. package/dist/plugins/manifest-interpreter.js +3 -1
  117. package/dist/plugins/manifest-interpreter.js.map +1 -1
  118. package/dist/public/testing.d.ts +2 -1
  119. package/dist/public/testing.d.ts.map +1 -1
  120. package/dist/public/testing.js +13 -0
  121. package/dist/public/testing.js.map +1 -1
  122. package/dist/public/types.d.ts +2 -2
  123. package/dist/public/types.d.ts.map +1 -1
  124. package/dist/public/ui/app.js +1044 -0
  125. package/dist/public/ui/arc-mark.svg +5 -0
  126. package/dist/public/ui/index.html +43 -0
  127. package/dist/public/ui/styles.css +563 -0
  128. package/dist/server/audit.d.ts +4 -2
  129. package/dist/server/audit.d.ts.map +1 -1
  130. package/dist/server/audit.js +42 -13
  131. package/dist/server/audit.js.map +1 -1
  132. package/dist/server/config.d.ts.map +1 -1
  133. package/dist/server/config.js +103 -1
  134. package/dist/server/config.js.map +1 -1
  135. package/dist/server/http.d.ts +2 -1
  136. package/dist/server/http.d.ts.map +1 -1
  137. package/dist/server/http.js +22 -1
  138. package/dist/server/http.js.map +1 -1
  139. package/dist/server/logger.d.ts +1 -1
  140. package/dist/server/logger.d.ts.map +1 -1
  141. package/dist/server/logger.js +9 -4
  142. package/dist/server/logger.js.map +1 -1
  143. package/dist/server/plugin-loader.d.ts.map +1 -1
  144. package/dist/server/plugin-loader.js +1 -1
  145. package/dist/server/plugin-loader.js.map +1 -1
  146. package/dist/server/safe-http-client.d.ts +12 -6
  147. package/dist/server/safe-http-client.d.ts.map +1 -1
  148. package/dist/server/safe-http-client.js +84 -15
  149. package/dist/server/safe-http-client.js.map +1 -1
  150. package/dist/server/server.d.ts +1 -1
  151. package/dist/server/server.d.ts.map +1 -1
  152. package/dist/server/server.js +29 -4
  153. package/dist/server/server.js.map +1 -1
  154. package/dist/server/sinks/file.d.ts +3 -0
  155. package/dist/server/sinks/file.d.ts.map +1 -1
  156. package/dist/server/sinks/file.js +15 -3
  157. package/dist/server/sinks/file.js.map +1 -1
  158. package/dist/server/sinks/stderr.d.ts.map +1 -1
  159. package/dist/server/sinks/stderr.js +2 -30
  160. package/dist/server/sinks/stderr.js.map +1 -1
  161. package/dist/server/types.d.ts +22 -0
  162. package/dist/server/types.d.ts.map +1 -1
  163. package/dist/server/types.js +7 -0
  164. package/dist/server/types.js.map +1 -1
  165. package/dist/server/ui-log-buffer.d.ts +29 -0
  166. package/dist/server/ui-log-buffer.d.ts.map +1 -0
  167. package/dist/server/ui-log-buffer.js +72 -0
  168. package/dist/server/ui-log-buffer.js.map +1 -0
  169. package/dist/server/ui-state.d.ts +32 -0
  170. package/dist/server/ui-state.d.ts.map +1 -0
  171. package/dist/server/ui-state.js +230 -0
  172. package/dist/server/ui-state.js.map +1 -0
  173. package/dist/server/ui.d.ts +20 -0
  174. package/dist/server/ui.d.ts.map +1 -0
  175. package/dist/server/ui.js +275 -0
  176. package/dist/server/ui.js.map +1 -0
  177. package/package.json +13 -9
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="ARC-1">
2
+ <rect width="64" height="64" rx="12" fill="#111827"/>
3
+ <path d="M16 44 28 18h8l12 26h-8l-2.4-5.8H26.3L24 44h-8Zm13-12.3h6l-3-7.5-3 7.5Z" fill="#f8fafc"/>
4
+ <path d="M47 18h5v26h-5V18Z" fill="#38bdf8"/>
5
+ </svg>
@@ -0,0 +1,43 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>ARC-1 Console</title>
7
+ <link rel="icon" href="./arc-mark.svg" type="image/svg+xml" />
8
+ <link rel="stylesheet" href="./styles.css" />
9
+ </head>
10
+ <body>
11
+ <header class="topbar">
12
+ <div class="brand">
13
+ <img src="./arc-mark.svg" alt="" width="32" height="32" />
14
+ <div>
15
+ <h1>ARC-1 Console</h1>
16
+ <p id="subtitle">Read-only runtime view</p>
17
+ </div>
18
+ </div>
19
+ <div class="auth">
20
+ <input id="token" type="password" autocomplete="off" spellcheck="false" placeholder="Admin bearer token" />
21
+ <button id="save-token" type="button">Set</button>
22
+ <button id="clear-token" type="button" class="ghost">Clear</button>
23
+ </div>
24
+ </header>
25
+
26
+ <main>
27
+ <nav class="tabs" aria-label="Console views">
28
+ <button type="button" data-tab="overview" class="active">Overview</button>
29
+ <button type="button" data-tab="config">Config</button>
30
+ <button type="button" data-tab="safety">Safety</button>
31
+ <button type="button" data-tab="features">Features</button>
32
+ <button type="button" data-tab="cache">Cache</button>
33
+ <button type="button" data-tab="logs">Logs</button>
34
+ <button type="button" data-tab="docs">Docs</button>
35
+ </nav>
36
+
37
+ <section id="status" class="status" hidden></section>
38
+ <section id="content" class="content" aria-live="polite"></section>
39
+ </main>
40
+
41
+ <script src="./app.js" type="module"></script>
42
+ </body>
43
+ </html>
@@ -0,0 +1,563 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --bg: #f6f7f9;
4
+ --surface: #ffffff;
5
+ --surface-2: #eef2f6;
6
+ --text: #1f2937;
7
+ --muted: #64748b;
8
+ --line: #d8dee6;
9
+ --accent: #0f766e;
10
+ --accent-2: #2563eb;
11
+ --accent-3: #7c3aed;
12
+ --info: #0369a1;
13
+ --danger: #b91c1c;
14
+ --warn: #b45309;
15
+ --ok: #047857;
16
+ --mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
17
+ --sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
18
+ }
19
+
20
+ * {
21
+ box-sizing: border-box;
22
+ }
23
+
24
+ body {
25
+ margin: 0;
26
+ background: var(--bg);
27
+ color: var(--text);
28
+ font-family: var(--sans);
29
+ font-size: 14px;
30
+ }
31
+
32
+ .topbar {
33
+ min-height: 64px;
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: space-between;
37
+ gap: 16px;
38
+ padding: 12px 20px;
39
+ background: var(--surface);
40
+ border-bottom: 1px solid var(--line);
41
+ }
42
+
43
+ .brand {
44
+ display: flex;
45
+ align-items: center;
46
+ gap: 12px;
47
+ min-width: 220px;
48
+ }
49
+
50
+ .brand img {
51
+ flex: 0 0 auto;
52
+ }
53
+
54
+ h1 {
55
+ margin: 0;
56
+ font-size: 18px;
57
+ line-height: 1.2;
58
+ font-weight: 700;
59
+ }
60
+
61
+ h2 {
62
+ margin: 0 0 12px;
63
+ font-size: 16px;
64
+ line-height: 1.3;
65
+ }
66
+
67
+ h3 {
68
+ margin: 16px 0 8px;
69
+ font-size: 14px;
70
+ }
71
+
72
+ p {
73
+ margin: 0;
74
+ color: var(--muted);
75
+ }
76
+
77
+ main {
78
+ width: min(1380px, 100%);
79
+ margin: 0 auto;
80
+ padding: 16px 20px 28px;
81
+ }
82
+
83
+ .auth {
84
+ display: grid;
85
+ grid-template-columns: minmax(180px, 320px) 54px 64px;
86
+ gap: 8px;
87
+ align-items: center;
88
+ }
89
+
90
+ button,
91
+ input,
92
+ select {
93
+ min-height: 34px;
94
+ border: 1px solid var(--line);
95
+ background: var(--surface);
96
+ color: var(--text);
97
+ border-radius: 6px;
98
+ font: inherit;
99
+ }
100
+
101
+ button {
102
+ padding: 0 12px;
103
+ cursor: pointer;
104
+ background: #12312f;
105
+ color: #ffffff;
106
+ border-color: #12312f;
107
+ font-weight: 600;
108
+ }
109
+
110
+ button.ghost,
111
+ .tabs button {
112
+ color: var(--text);
113
+ background: var(--surface);
114
+ border-color: var(--line);
115
+ }
116
+
117
+ button:hover,
118
+ button:focus-visible {
119
+ outline: 2px solid color-mix(in srgb, var(--accent-2) 35%, transparent);
120
+ outline-offset: 1px;
121
+ }
122
+
123
+ input,
124
+ select {
125
+ padding: 0 10px;
126
+ }
127
+
128
+ .tabs {
129
+ display: flex;
130
+ gap: 6px;
131
+ flex-wrap: wrap;
132
+ margin-bottom: 12px;
133
+ }
134
+
135
+ .tabs button {
136
+ min-width: 92px;
137
+ }
138
+
139
+ .tabs button.active {
140
+ color: #ffffff;
141
+ background: var(--accent);
142
+ border-color: var(--accent);
143
+ }
144
+
145
+ .status {
146
+ margin-bottom: 12px;
147
+ padding: 10px 12px;
148
+ border: 1px solid var(--line);
149
+ border-left: 4px solid var(--warn);
150
+ background: #fff7ed;
151
+ border-radius: 6px;
152
+ }
153
+
154
+ .content {
155
+ display: grid;
156
+ gap: 14px;
157
+ min-width: 0;
158
+ }
159
+
160
+ .panel {
161
+ min-width: 0;
162
+ overflow: hidden;
163
+ background: var(--surface);
164
+ border: 1px solid var(--line);
165
+ border-radius: 8px;
166
+ padding: 14px;
167
+ }
168
+
169
+ .grid {
170
+ display: grid;
171
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
172
+ gap: 10px;
173
+ min-width: 0;
174
+ }
175
+
176
+ .metric {
177
+ min-height: 78px;
178
+ display: grid;
179
+ align-content: center;
180
+ gap: 4px;
181
+ background: var(--surface-2);
182
+ border: 1px solid var(--line);
183
+ border-left-width: 4px;
184
+ border-radius: 6px;
185
+ min-width: 0;
186
+ padding: 10px 12px;
187
+ }
188
+
189
+ .metric.ok {
190
+ border-color: #a7f3d0;
191
+ border-left-color: var(--ok);
192
+ background: #ecfdf5;
193
+ }
194
+
195
+ .metric.info {
196
+ border-color: #bae6fd;
197
+ border-left-color: var(--info);
198
+ background: #f0f9ff;
199
+ }
200
+
201
+ .metric.accent {
202
+ border-color: #c4b5fd;
203
+ border-left-color: var(--accent-3);
204
+ background: #f5f3ff;
205
+ }
206
+
207
+ .metric.warn {
208
+ border-color: #fed7aa;
209
+ border-left-color: var(--warn);
210
+ background: #fff7ed;
211
+ }
212
+
213
+ .metric.error {
214
+ border-color: #fecaca;
215
+ border-left-color: var(--danger);
216
+ background: #fef2f2;
217
+ }
218
+
219
+ .metric strong {
220
+ font-size: 20px;
221
+ line-height: 1.2;
222
+ overflow-wrap: anywhere;
223
+ }
224
+
225
+ .metric span {
226
+ min-width: 0;
227
+ overflow-wrap: anywhere;
228
+ color: var(--muted);
229
+ }
230
+
231
+ .chart-grid {
232
+ display: grid;
233
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
234
+ gap: 12px;
235
+ min-width: 0;
236
+ margin-top: 12px;
237
+ }
238
+
239
+ .chart {
240
+ min-width: 0;
241
+ padding: 10px;
242
+ border: 1px solid var(--line);
243
+ border-radius: 6px;
244
+ background: #fbfcfe;
245
+ }
246
+
247
+ .chart h3 {
248
+ margin-top: 0;
249
+ }
250
+
251
+ .bar-row {
252
+ display: grid;
253
+ grid-template-columns: minmax(94px, 34%) minmax(80px, 1fr) 42px;
254
+ gap: 8px;
255
+ align-items: center;
256
+ min-height: 26px;
257
+ }
258
+
259
+ .bar-label,
260
+ .bar-value {
261
+ min-width: 0;
262
+ overflow: hidden;
263
+ color: var(--muted);
264
+ font-size: 12px;
265
+ text-overflow: ellipsis;
266
+ white-space: nowrap;
267
+ }
268
+
269
+ .bar-value {
270
+ color: var(--text);
271
+ font-variant-numeric: tabular-nums;
272
+ text-align: right;
273
+ }
274
+
275
+ .bar-track {
276
+ height: 10px;
277
+ overflow: hidden;
278
+ border-radius: 999px;
279
+ background: var(--surface-2);
280
+ }
281
+
282
+ .bar-fill {
283
+ height: 100%;
284
+ min-width: 4px;
285
+ border-radius: inherit;
286
+ background: var(--info);
287
+ }
288
+
289
+ .bar-fill.ok {
290
+ background: var(--ok);
291
+ }
292
+
293
+ .bar-fill.info {
294
+ background: var(--accent-2);
295
+ }
296
+
297
+ .bar-fill.accent {
298
+ background: var(--accent-3);
299
+ }
300
+
301
+ .bar-fill.warn {
302
+ background: var(--warn);
303
+ }
304
+
305
+ .bar-fill.error {
306
+ background: var(--danger);
307
+ }
308
+
309
+ .status-grid {
310
+ display: grid;
311
+ grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
312
+ gap: 8px;
313
+ margin-bottom: 12px;
314
+ }
315
+
316
+ .status-item {
317
+ display: flex;
318
+ min-width: 0;
319
+ align-items: center;
320
+ justify-content: space-between;
321
+ gap: 8px;
322
+ padding: 9px 10px;
323
+ border: 1px solid var(--line);
324
+ border-left-width: 4px;
325
+ border-radius: 6px;
326
+ background: #fbfcfe;
327
+ }
328
+
329
+ .status-item.ok {
330
+ border-color: #bbf7d0;
331
+ border-left-color: var(--ok);
332
+ background: #f0fdf4;
333
+ }
334
+
335
+ .status-item.info {
336
+ border-color: #bae6fd;
337
+ border-left-color: var(--info);
338
+ background: #f0f9ff;
339
+ }
340
+
341
+ .status-item.warn {
342
+ border-color: #fed7aa;
343
+ border-left-color: var(--warn);
344
+ background: #fff7ed;
345
+ }
346
+
347
+ .status-item.error {
348
+ border-color: #fecaca;
349
+ border-left-color: var(--danger);
350
+ background: #fef2f2;
351
+ }
352
+
353
+ .status-item > span:first-child {
354
+ min-width: 0;
355
+ overflow: hidden;
356
+ color: var(--muted);
357
+ text-overflow: ellipsis;
358
+ white-space: nowrap;
359
+ }
360
+
361
+ .filters {
362
+ display: grid;
363
+ grid-template-columns: repeat(5, minmax(120px, 1fr));
364
+ gap: 8px;
365
+ align-items: end;
366
+ min-width: 0;
367
+ }
368
+
369
+ label {
370
+ display: grid;
371
+ gap: 4px;
372
+ color: var(--muted);
373
+ font-size: 12px;
374
+ }
375
+
376
+ .table-wrap {
377
+ max-width: 100%;
378
+ min-width: 0;
379
+ overflow-x: auto;
380
+ border: 1px solid var(--line);
381
+ border-radius: 6px;
382
+ }
383
+
384
+ table {
385
+ width: 100%;
386
+ border-collapse: collapse;
387
+ min-width: 720px;
388
+ }
389
+
390
+ th,
391
+ td {
392
+ padding: 8px 10px;
393
+ border-bottom: 1px solid var(--line);
394
+ overflow-wrap: anywhere;
395
+ text-align: left;
396
+ vertical-align: top;
397
+ }
398
+
399
+ th {
400
+ background: var(--surface-2);
401
+ color: #334155;
402
+ font-weight: 700;
403
+ }
404
+
405
+ tr:last-child td {
406
+ border-bottom: 0;
407
+ }
408
+
409
+ code,
410
+ .mono {
411
+ font-family: var(--mono);
412
+ font-size: 12px;
413
+ }
414
+
415
+ .pill {
416
+ display: inline-flex;
417
+ align-items: center;
418
+ min-height: 22px;
419
+ padding: 0 8px;
420
+ border-radius: 999px;
421
+ background: var(--surface-2);
422
+ border: 1px solid var(--line);
423
+ font-size: 12px;
424
+ }
425
+
426
+ .pill.ok {
427
+ color: var(--ok);
428
+ background: #ecfdf5;
429
+ border-color: #bbf7d0;
430
+ }
431
+
432
+ .pill.warn {
433
+ color: var(--warn);
434
+ background: #fff7ed;
435
+ border-color: #fed7aa;
436
+ }
437
+
438
+ .pill.info {
439
+ color: var(--info);
440
+ background: #f0f9ff;
441
+ border-color: #bae6fd;
442
+ }
443
+
444
+ .pill.accent {
445
+ color: var(--accent-3);
446
+ background: #f5f3ff;
447
+ border-color: #ddd6fe;
448
+ }
449
+
450
+ .pill.error {
451
+ color: var(--danger);
452
+ background: #fef2f2;
453
+ border-color: #fecaca;
454
+ }
455
+
456
+ .detail-chips {
457
+ display: flex;
458
+ flex-wrap: wrap;
459
+ gap: 6px;
460
+ max-width: 100%;
461
+ min-width: 0;
462
+ }
463
+
464
+ .detail-chip {
465
+ display: inline-flex;
466
+ flex: 0 1 auto;
467
+ min-width: 0;
468
+ max-width: 100%;
469
+ align-items: center;
470
+ gap: 5px;
471
+ padding: 3px 7px;
472
+ border: 1px solid var(--line);
473
+ border-radius: 999px;
474
+ background: #f8fafc;
475
+ color: var(--text);
476
+ font-size: 12px;
477
+ }
478
+
479
+ .detail-chip span {
480
+ flex: 0 0 auto;
481
+ color: var(--muted);
482
+ }
483
+
484
+ .detail-chip strong {
485
+ flex: 1 1 auto;
486
+ min-width: 0;
487
+ overflow-wrap: anywhere;
488
+ font-weight: 600;
489
+ white-space: normal;
490
+ }
491
+
492
+ .detail-chip.ok {
493
+ border-color: #bbf7d0;
494
+ background: #ecfdf5;
495
+ }
496
+
497
+ .detail-chip.info {
498
+ border-color: #bae6fd;
499
+ background: #f0f9ff;
500
+ }
501
+
502
+ .detail-chip.warn {
503
+ border-color: #fed7aa;
504
+ background: #fff7ed;
505
+ }
506
+
507
+ .detail-chip.error {
508
+ border-color: #fecaca;
509
+ background: #fef2f2;
510
+ }
511
+
512
+ .kv {
513
+ display: grid;
514
+ grid-template-columns: minmax(140px, 260px) minmax(0, 1fr);
515
+ border-top: 1px solid var(--line);
516
+ }
517
+
518
+ .kv div {
519
+ padding: 7px 8px;
520
+ border-bottom: 1px solid var(--line);
521
+ }
522
+
523
+ .kv div:nth-child(odd) {
524
+ color: var(--muted);
525
+ background: #fafafa;
526
+ }
527
+
528
+ pre {
529
+ margin: 0;
530
+ white-space: pre-wrap;
531
+ word-break: break-word;
532
+ font: 12px/1.45 var(--mono);
533
+ }
534
+
535
+ a {
536
+ color: var(--accent-2);
537
+ text-decoration: none;
538
+ }
539
+
540
+ a:hover {
541
+ text-decoration: underline;
542
+ }
543
+
544
+ @media (max-width: 760px) {
545
+ .topbar {
546
+ align-items: stretch;
547
+ flex-direction: column;
548
+ }
549
+
550
+ .auth,
551
+ .filters {
552
+ grid-template-columns: 1fr;
553
+ }
554
+
555
+ main {
556
+ padding: 12px;
557
+ }
558
+
559
+ .tabs button {
560
+ min-width: 0;
561
+ flex: 1 1 96px;
562
+ }
563
+ }
@@ -47,11 +47,11 @@ export interface HttpRequestEvent extends AuditEventBase {
47
47
  statusCode: number;
48
48
  durationMs: number;
49
49
  errorBody?: string;
50
- /** Full request body when ARC1_LOG_HTTP_DEBUG=true. Truncated past 65536 chars. */
50
+ /** Request body captured when ARC1_LOG_HTTP_DEBUG=true; redacted before sink writes. */
51
51
  requestBody?: string;
52
52
  /** Request headers with sensitive values redacted when ARC1_LOG_HTTP_DEBUG=true. */
53
53
  requestHeaders?: Record<string, string>;
54
- /** Full response body when ARC1_LOG_HTTP_DEBUG=true. Truncated past 65536 chars. */
54
+ /** Response body captured when ARC1_LOG_HTTP_DEBUG=true; redacted before sink writes. */
55
55
  responseBody?: string;
56
56
  /** Response headers with sensitive values redacted when ARC1_LOG_HTTP_DEBUG=true. */
57
57
  responseHeaders?: Record<string, string>;
@@ -201,6 +201,8 @@ export interface McpRateLimitedEvent extends AuditEventBase {
201
201
  }
202
202
  /** Discriminated union of all audit events */
203
203
  export type AuditEvent = ToolCallStartEvent | ToolCallEndEvent | HttpRequestEvent | HttpCsrfFetchEvent | AuthScopeDeniedEvent | AuthPPCreatedEvent | SafetyBlockedEvent | ServerStartEvent | ElicitationSentEvent | ElicitationResponseEvent | ActivationPreauditEvent | OAuthClientRegisteredEvent | OAuthClientLookupFailedEvent | OAuthRedirectUriRegisteredEvent | OAuthRedirectUriRejectedEvent | CorsRejectedEvent | AuthRateLimitedEvent | McpRateLimitedEvent;
204
+ /** Redact sensitive or high-volume SAP payload fields before any audit sink sees them. */
205
+ export declare function redactAuditEvent(event: AuditEvent): AuditEvent;
204
206
  /** Sanitize tool call arguments — remove values that might contain sensitive data */
205
207
  export declare function sanitizeArgs(args: Record<string, unknown>): Record<string, unknown>;
206
208
  //# sourceMappingURL=audit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/server/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,4BAA4B;AAC5B,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,8BAA8B;AAC9B,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,uBAAuB;AACvB,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAwB;AACxB,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,yCAAyC;AACzC,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAqB;AACrB,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,iCAAiC;AACjC,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,KAAK,EAAE,kBAAkB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,uCAAuC;AACvC,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,KAAK,EAAE,sBAAsB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;kDAMkD;AAClD,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC7D,KAAK,EAAE,+BAA+B,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;CAC9B;AAED,mFAAmF;AACnF,MAAM,WAAW,0BAA2B,SAAQ,cAAc;IAChE,KAAK,EAAE,yBAAyB,CAAC;IACjC,gDAAgD;IAChD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;gFACgF;AAChF,MAAM,WAAW,4BAA6B,SAAQ,cAAc;IAClE,KAAK,EAAE,4BAA4B,CAAC;IACpC,yFAAyF;IACzF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,gBAAgB,GAAG,WAAW,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;CAC1F;AAED;;;;;2BAK2B;AAC3B,MAAM,WAAW,+BAAgC,SAAQ,cAAc;IACrE,KAAK,EAAE,+BAA+B,CAAC;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;2EAK2E;AAC3E,MAAM,WAAW,6BAA8B,SAAQ,cAAc;IACnE,KAAK,EAAE,6BAA6B,CAAC;IACrC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;uFAGuF;AACvF,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,KAAK,EAAE,eAAe,CAAC;IACvB,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;wFAEwF;AACxF,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,KAAK,EAAE,mBAAmB,CAAC;IAC3B,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,EAAE,EAAE,MAAM,CAAC;IACX,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;gEAEgE;AAChE,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,8CAA8C;AAC9C,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,oBAAoB,GACpB,kBAAkB,GAClB,kBAAkB,GAClB,gBAAgB,GAChB,oBAAoB,GACpB,wBAAwB,GACxB,uBAAuB,GACvB,0BAA0B,GAC1B,4BAA4B,GAC5B,+BAA+B,GAC/B,6BAA6B,GAC7B,iBAAiB,GACjB,oBAAoB,GACpB,mBAAmB,CAAC;AAExB,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwBnF"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/server/audit.ts"],"names":[],"mappings":"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"}
@@ -7,23 +7,52 @@
7
7
  * requestId correlates all events within a single MCP tool call,
8
8
  * including nested HTTP requests and auth events.
9
9
  */
10
+ const SENSITIVE_KEY_FRAGMENTS = [
11
+ 'password',
12
+ 'token',
13
+ 'secret',
14
+ 'cookie',
15
+ 'authorization',
16
+ 'csrf',
17
+ 'apikey',
18
+ 'authpwd',
19
+ 'authtoken',
20
+ 'remotepassword',
21
+ ];
22
+ const PAYLOAD_BODY_KEYS = new Set(['errorbody', 'errormessage', 'requestbody', 'responsebody', 'resultpreview']);
23
+ function isSensitiveKey(key) {
24
+ const lower = key.toLowerCase();
25
+ return SENSITIVE_KEY_FRAGMENTS.some((fragment) => lower.includes(fragment));
26
+ }
27
+ function redactPayloadValue(value) {
28
+ if (typeof value === 'string')
29
+ return `[REDACTED ${value.length} chars]`;
30
+ return '[REDACTED]';
31
+ }
32
+ function redactValue(key, value) {
33
+ if (isSensitiveKey(key))
34
+ return '[REDACTED]';
35
+ if (PAYLOAD_BODY_KEYS.has(key.toLowerCase())) {
36
+ if (value == null)
37
+ return value;
38
+ return redactPayloadValue(value);
39
+ }
40
+ if (Array.isArray(value))
41
+ return value.map((entry) => redactValue('', entry));
42
+ if (value && typeof value === 'object') {
43
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, redactValue(k, v)]));
44
+ }
45
+ return value;
46
+ }
47
+ /** Redact sensitive or high-volume SAP payload fields before any audit sink sees them. */
48
+ export function redactAuditEvent(event) {
49
+ return redactValue('', event);
50
+ }
10
51
  /** Sanitize tool call arguments — remove values that might contain sensitive data */
11
52
  export function sanitizeArgs(args) {
12
- const sensitiveKeys = [
13
- 'password',
14
- 'token',
15
- 'secret',
16
- 'cookie',
17
- 'authorization',
18
- 'csrf',
19
- 'apikey',
20
- 'authpwd',
21
- 'authtoken',
22
- 'remotepassword',
23
- ];
24
53
  const result = {};
25
54
  for (const [key, value] of Object.entries(args)) {
26
- if (sensitiveKeys.some((s) => key.toLowerCase().includes(s))) {
55
+ if (isSensitiveKey(key)) {
27
56
  result[key] = '[REDACTED]';
28
57
  }
29
58
  else if (typeof value === 'string' && value.length > 500) {