@narumitw/pi-inspect 0.0.0-stage → 0.2.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 (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -2
  3. package/dist/app.css +1 -0
  4. package/dist/app.js +128 -0
  5. package/dist/index.html +1 -0
  6. package/docs/REVIEW.md +189 -0
  7. package/docs/VERIFICATION.md +186 -0
  8. package/docs/viewer.md +74 -0
  9. package/package.json +67 -4
  10. package/src/ancestry.ts +32 -0
  11. package/src/collector.ts +143 -0
  12. package/src/context.ts +115 -0
  13. package/src/correlation.ts +27 -0
  14. package/src/entry-index.ts +17 -0
  15. package/src/entry-summary.ts +34 -0
  16. package/src/extension.ts +259 -0
  17. package/src/feed.ts +145 -0
  18. package/src/identity.ts +112 -0
  19. package/src/index.ts +1 -0
  20. package/src/model.ts +117 -0
  21. package/src/native-projection.ts +28 -0
  22. package/src/privacy.ts +136 -0
  23. package/src/projection.ts +374 -0
  24. package/src/server.ts +202 -0
  25. package/src/system-message.ts +117 -0
  26. package/src/web/api.ts +137 -0
  27. package/src/web/app.tsx +570 -0
  28. package/src/web/captured-executions.tsx +177 -0
  29. package/src/web/components.css +261 -0
  30. package/src/web/components.tsx +241 -0
  31. package/src/web/composition.css +554 -0
  32. package/src/web/context-composition.tsx +329 -0
  33. package/src/web/context-inventory.tsx +65 -0
  34. package/src/web/entry-calls.ts +14 -0
  35. package/src/web/format.ts +94 -0
  36. package/src/web/hierarchy.ts +117 -0
  37. package/src/web/history.ts +56 -0
  38. package/src/web/inline-entry.tsx +124 -0
  39. package/src/web/inspector.tsx +386 -0
  40. package/src/web/json-tree.tsx +74 -0
  41. package/src/web/overview.tsx +67 -0
  42. package/src/web/panels.css +267 -0
  43. package/src/web/panes.tsx +123 -0
  44. package/src/web/recorded-content.tsx +49 -0
  45. package/src/web/search.ts +16 -0
  46. package/src/web/session-filters.tsx +100 -0
  47. package/src/web/session.css +114 -0
  48. package/src/web/style.css +332 -0
  49. package/src/web/styles.d.ts +1 -0
  50. package/src/web/timeline.tsx +33 -0
  51. package/src/web/timing.ts +26 -0
  52. package/src/web/trace.css +411 -0
  53. package/src/web/trace.tsx +313 -0
  54. package/src/web/virtual-context.ts +138 -0
@@ -0,0 +1,411 @@
1
+ .overview {
2
+ flex-shrink: 0;
3
+ padding: 0 6px 5px;
4
+ }
5
+ .overview-metrics {
6
+ display: flex;
7
+ justify-content: space-between;
8
+ gap: 12px;
9
+ flex-wrap: wrap;
10
+ }
11
+ .metric {
12
+ display: flex;
13
+ align-items: baseline;
14
+ gap: 6px;
15
+ font-size: 10px;
16
+ color: var(--muted);
17
+ white-space: nowrap;
18
+ }
19
+ .metric strong {
20
+ font-size: 12px;
21
+ color: var(--secondary);
22
+ font-variant-numeric: tabular-nums;
23
+ font-weight: 600;
24
+ }
25
+ .trace-panel {
26
+ flex: 1;
27
+ display: flex;
28
+ flex-direction: column;
29
+ }
30
+ .trace-toolbar {
31
+ display: flex;
32
+ align-items: center;
33
+ padding: 7px 9px 4px;
34
+ gap: 10px;
35
+ flex-wrap: wrap;
36
+ }
37
+ .trace-toolbar .rt-Heading {
38
+ font-size: 14px;
39
+ }
40
+ .trace-toolbar > .rt-Text {
41
+ font-size: 10px;
42
+ color: var(--muted);
43
+ }
44
+ .trace-actions {
45
+ display: flex;
46
+ align-items: center;
47
+ gap: 6px;
48
+ margin-left: auto;
49
+ }
50
+ .trace-actions .rt-Button {
51
+ font-size: 10px;
52
+ color: var(--secondary);
53
+ }
54
+ .trace-hint {
55
+ padding: 0 10px 6px;
56
+ color: var(--muted);
57
+ font-size: 10px;
58
+ border-bottom: 1px solid var(--panel-border);
59
+ }
60
+ .time-axis {
61
+ display: flex;
62
+ justify-content: space-between;
63
+ gap: 6px;
64
+ padding: 4px 10px;
65
+ font:
66
+ 9px / 1.4 Consolas,
67
+ monospace;
68
+ color: var(--muted);
69
+ border-bottom: 1px solid var(--panel-border);
70
+ }
71
+ .trace-scroll {
72
+ overflow: auto;
73
+ flex: 1;
74
+ min-height: 0;
75
+ padding: 5px 8px;
76
+ }
77
+ .trace-tree {
78
+ min-width: 0;
79
+ }
80
+ .trace-item {
81
+ position: relative;
82
+ border-left: 1px solid var(--panel-border);
83
+ }
84
+ .trace-item::before {
85
+ content: "";
86
+ position: absolute;
87
+ left: -1px;
88
+ width: 8px;
89
+ top: 16px;
90
+ border-top: 1px solid var(--panel-border);
91
+ }
92
+ .trace-row {
93
+ display: flex;
94
+ position: relative;
95
+ align-items: center;
96
+ min-height: 34px;
97
+ gap: 7px;
98
+ padding: 3px 7px 3px 4px;
99
+ color: var(--gray-12);
100
+ font-size: 11px;
101
+ border-bottom: 1px solid color-mix(in srgb, var(--panel-border), transparent 55%);
102
+ border-radius: 3px;
103
+ cursor: pointer;
104
+ outline: none;
105
+ }
106
+ .trace-row:hover {
107
+ background: var(--surface-hover);
108
+ }
109
+ .trace-row.expanded {
110
+ background: color-mix(in srgb, var(--panel-raised), transparent 50%);
111
+ }
112
+ .trace-row.selected {
113
+ background: var(--selected-bg);
114
+ box-shadow: inset 2px 0 var(--blue-9);
115
+ }
116
+ .expand-button {
117
+ display: grid;
118
+ place-items: center;
119
+ width: 20px;
120
+ height: 20px;
121
+ border: 0;
122
+ background: transparent;
123
+ color: var(--muted);
124
+ border-radius: 3px;
125
+ flex-shrink: 0;
126
+ padding: 0;
127
+ }
128
+ .expand-button:hover {
129
+ color: var(--gray-12);
130
+ background: var(--surface-hover);
131
+ }
132
+ .trace-event {
133
+ display: flex;
134
+ align-items: center;
135
+ gap: 6px;
136
+ min-width: 0;
137
+ flex: 1;
138
+ }
139
+ .row-title {
140
+ display: flex;
141
+ gap: 7px;
142
+ min-width: 0;
143
+ align-items: baseline;
144
+ white-space: nowrap;
145
+ }
146
+ .row-title strong {
147
+ font-weight: 500;
148
+ flex-shrink: 0;
149
+ }
150
+ .row-title > span {
151
+ max-width: 100%;
152
+ color: var(--secondary);
153
+ text-overflow: ellipsis;
154
+ overflow: hidden;
155
+ min-width: 0;
156
+ }
157
+ .trace-event > code,
158
+ .row-metrics time,
159
+ .call-trigger code {
160
+ font:
161
+ 10px / 1.4 Consolas,
162
+ monospace;
163
+ color: var(--muted);
164
+ white-space: nowrap;
165
+ }
166
+ .ancestor-badge {
167
+ color: var(--muted);
168
+ font-size: 9px;
169
+ }
170
+ .row-metrics {
171
+ display: flex;
172
+ gap: 8px;
173
+ align-items: center;
174
+ flex-shrink: 0;
175
+ font-size: 10px;
176
+ font-variant-numeric: tabular-nums;
177
+ color: var(--secondary);
178
+ }
179
+ .entry-expanded {
180
+ padding: 6px 10px 8px 29px;
181
+ background: color-mix(in srgb, var(--code-bg), transparent 15%);
182
+ border-bottom: 1px solid var(--panel-border);
183
+ }
184
+ .inline-tabs .rt-TabsList {
185
+ flex-wrap: nowrap;
186
+ overflow-x: auto;
187
+ }
188
+ .inline-tabs .rt-TabsTrigger {
189
+ padding: 0 7px;
190
+ font-size: 11px;
191
+ height: 27px;
192
+ white-space: nowrap;
193
+ flex-shrink: 0;
194
+ }
195
+ .inline-tabs .rt-TabsTriggerInner,
196
+ .inline-tabs .rt-TabsTriggerInnerHidden {
197
+ padding: 0;
198
+ }
199
+ .inline-tabs .rt-TabsContent {
200
+ padding-top: 5px;
201
+ }
202
+ .inline-summary {
203
+ display: flex;
204
+ align-items: start;
205
+ gap: 16px;
206
+ }
207
+ .inline-summary .metadata {
208
+ flex: 1;
209
+ }
210
+ .usage-breakdown {
211
+ min-width: 160px;
212
+ width: 35%;
213
+ font-size: 10px;
214
+ color: var(--secondary);
215
+ padding-top: 7px;
216
+ }
217
+ .usage-bar {
218
+ display: flex;
219
+ height: 5px;
220
+ border-radius: 3px;
221
+ overflow: hidden;
222
+ background: var(--panel-raised);
223
+ margin-bottom: 6px;
224
+ }
225
+ .usage-bar span:first-child {
226
+ background: #4b91f7;
227
+ }
228
+ .usage-bar span:last-child {
229
+ background: #a38adc;
230
+ }
231
+ .children-label {
232
+ display: block;
233
+ font-size: 10px;
234
+ color: var(--muted);
235
+ padding-top: 5px;
236
+ }
237
+ .trace-pagination {
238
+ flex-shrink: 0;
239
+ display: flex;
240
+ gap: 8px;
241
+ justify-content: space-between;
242
+ align-items: center;
243
+ padding: 4px 8px;
244
+ border-top: 1px solid var(--panel-border);
245
+ font-size: 9px;
246
+ color: var(--muted);
247
+ flex-wrap: wrap;
248
+ }
249
+ .trace-pagination .rt-Button {
250
+ font-size: 10px;
251
+ }
252
+ .empty-state {
253
+ padding: 12px;
254
+ text-align: center;
255
+ font-size: 11px;
256
+ color: var(--muted);
257
+ }
258
+ .timeline-track {
259
+ position: relative;
260
+ display: block;
261
+ width: 24%;
262
+ min-width: 90px;
263
+ height: 16px;
264
+ border-bottom: 1px solid var(--panel-border);
265
+ flex-shrink: 0;
266
+ }
267
+ .timeline-point {
268
+ position: absolute;
269
+ width: 5px;
270
+ height: 5px;
271
+ margin-left: -2px;
272
+ top: 5px;
273
+ border-radius: 50%;
274
+ background: var(--blue-10);
275
+ }
276
+ .timeline-span {
277
+ position: absolute;
278
+ height: 5px;
279
+ top: 5px;
280
+ background: #72b4c2;
281
+ border-radius: 2px;
282
+ }
283
+ .timing-unavailable {
284
+ color: var(--muted);
285
+ }
286
+ .live-drawer {
287
+ flex-shrink: 0;
288
+ border: 1px solid var(--panel-border);
289
+ border-radius: 4px;
290
+ background: var(--panel-bg);
291
+ min-width: 0;
292
+ overflow: hidden;
293
+ }
294
+ .live-drawer-toggle {
295
+ display: flex;
296
+ align-items: center;
297
+ gap: 8px;
298
+ width: 100%;
299
+ padding: 7px 8px;
300
+ color: var(--secondary);
301
+ border: 0;
302
+ background: transparent;
303
+ text-align: left;
304
+ font-size: 10px;
305
+ }
306
+ .live-drawer-toggle strong {
307
+ font-size: 11px;
308
+ font-weight: 500;
309
+ }
310
+ .drawer-scope {
311
+ margin-left: auto;
312
+ color: var(--muted);
313
+ }
314
+ .live-drawer-body {
315
+ height: min(30vh, 260px);
316
+ min-height: 110px;
317
+ overflow: auto;
318
+ padding: 4px 8px;
319
+ }
320
+ .live-controls {
321
+ display: flex;
322
+ align-items: center;
323
+ gap: 6px;
324
+ margin-bottom: 6px;
325
+ }
326
+ .live-controls > .rt-Text {
327
+ flex: 1;
328
+ font-size: 10px;
329
+ line-height: 14px;
330
+ }
331
+ .live-controls .rt-Button {
332
+ font-size: 10px;
333
+ }
334
+ .live-call-row {
335
+ display: flex;
336
+ align-items: center;
337
+ gap: 5px;
338
+ min-height: 31px;
339
+ border-bottom: 1px solid var(--panel-border);
340
+ }
341
+ .live-call-row.selected {
342
+ background: var(--selected-bg);
343
+ }
344
+ .call-trigger {
345
+ display: flex;
346
+ align-items: center;
347
+ gap: 8px;
348
+ flex: 1;
349
+ min-width: 0;
350
+ color: var(--secondary);
351
+ background: none;
352
+ border: 0;
353
+ padding: 5px 0;
354
+ text-align: left;
355
+ font-size: 11px;
356
+ }
357
+ .call-trigger > strong {
358
+ font-weight: 500;
359
+ overflow: hidden;
360
+ text-overflow: ellipsis;
361
+ white-space: nowrap;
362
+ flex: 1;
363
+ }
364
+ .call-trigger > span:last-child {
365
+ font-variant-numeric: tabular-nums;
366
+ font-size: 10px;
367
+ }
368
+ @media (max-width: 680px) {
369
+ .trace-toolbar > .rt-Text {
370
+ display: none;
371
+ }
372
+ .trace-actions {
373
+ gap: 4px;
374
+ }
375
+ .trace-actions .rt-Button {
376
+ font-size: 9px;
377
+ }
378
+ .trace-hint {
379
+ font-size: 9px;
380
+ }
381
+ .trace-event > code,
382
+ .ancestor-badge {
383
+ display: none;
384
+ }
385
+ .row-title {
386
+ flex-direction: column;
387
+ gap: 0;
388
+ line-height: 14px;
389
+ }
390
+ .row-metrics > span {
391
+ display: none;
392
+ }
393
+ .inline-summary {
394
+ display: block;
395
+ }
396
+ .usage-breakdown {
397
+ width: 100%;
398
+ }
399
+ .drawer-scope {
400
+ display: none;
401
+ }
402
+ .live-controls > .rt-Text {
403
+ display: none;
404
+ }
405
+ .timeline-track {
406
+ min-width: 60px;
407
+ }
408
+ .time-axis span:nth-child(2) {
409
+ display: none;
410
+ }
411
+ }