@triedotdev/mcp 1.0.123 → 1.0.124
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-QIS2VDJL.js → chunk-7J4ZOOAD.js} +50 -13
- package/dist/{chunk-QIS2VDJL.js.map → chunk-7J4ZOOAD.js.map} +1 -1
- package/dist/{chunk-F4ZIAHTZ.js → chunk-A4EDTN6R.js} +2 -2
- package/dist/{chunk-B46FDUKR.js → chunk-D2CGMX7K.js} +4 -4
- package/dist/{chunk-CKT2A33R.js → chunk-W2DEBKZ2.js} +2 -2
- package/dist/{chunk-WRGSH5RT.js → chunk-WMI44VIC.js} +2 -2
- package/dist/{chunk-WRGSH5RT.js.map → chunk-WMI44VIC.js.map} +1 -1
- package/dist/cli/main.js +2 -2
- package/dist/cli/yolo-daemon.js +5 -5
- package/dist/{client-PMKE26IV.js → client-EWP4SIG3.js} +2 -2
- package/dist/{goal-validator-XYA364W3.js → goal-validator-CKFKJ46J.js} +2 -2
- package/dist/{guardian-agent-PTC6G37Q.js → guardian-agent-5QVLDPKB.js} +5 -5
- package/dist/{hypothesis-WWDONGPU.js → hypothesis-HFYZNIMZ.js} +2 -2
- package/dist/index.js +147 -27
- package/dist/index.js.map +1 -1
- package/dist/ui/chat.html +821 -0
- package/dist/ui/goals.html +724 -0
- package/dist/ui/hypotheses.html +768 -0
- package/dist/ui/ledger.html +711 -0
- package/dist/ui/nudges.html +752 -0
- package/package.json +1 -1
- package/dist/ui/memory-viewer.html +0 -773
- package/dist/ui/pr-review.html +0 -742
- package/dist/ui/scan-dashboard.html +0 -741
- package/dist/ui/visual-qa.html +0 -762
- /package/dist/{chunk-F4ZIAHTZ.js.map → chunk-A4EDTN6R.js.map} +0 -0
- /package/dist/{chunk-B46FDUKR.js.map → chunk-D2CGMX7K.js.map} +0 -0
- /package/dist/{chunk-CKT2A33R.js.map → chunk-W2DEBKZ2.js.map} +0 -0
- /package/dist/{client-PMKE26IV.js.map → client-EWP4SIG3.js.map} +0 -0
- /package/dist/{goal-validator-XYA364W3.js.map → goal-validator-CKFKJ46J.js.map} +0 -0
- /package/dist/{guardian-agent-PTC6G37Q.js.map → guardian-agent-5QVLDPKB.js.map} +0 -0
- /package/dist/{hypothesis-WWDONGPU.js.map → hypothesis-HFYZNIMZ.js.map} +0 -0
|
@@ -0,0 +1,821 @@
|
|
|
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.0">
|
|
6
|
+
<title>AI Chat - Trie</title>
|
|
7
|
+
<style>
|
|
8
|
+
/* MCP Apps Shared Styles for Trie */
|
|
9
|
+
:root {
|
|
10
|
+
--trie-bg: #0d1117;
|
|
11
|
+
--trie-surface: #161b22;
|
|
12
|
+
--trie-border: #30363d;
|
|
13
|
+
--trie-text: #e6edf3;
|
|
14
|
+
--trie-text-muted: #8b949e;
|
|
15
|
+
--trie-primary: #58a6ff;
|
|
16
|
+
--trie-success: #3fb950;
|
|
17
|
+
--trie-warning: #d29922;
|
|
18
|
+
--trie-error: #f85149;
|
|
19
|
+
--trie-critical: #ff7b72;
|
|
20
|
+
--trie-info: #58a6ff;
|
|
21
|
+
--radius: 6px;
|
|
22
|
+
--font-mono: 'SF Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
|
|
23
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
* {
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
margin: 0;
|
|
29
|
+
padding: 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
body {
|
|
33
|
+
font-family: var(--font-sans);
|
|
34
|
+
font-size: 14px;
|
|
35
|
+
line-height: 1.5;
|
|
36
|
+
color: var(--trie-text);
|
|
37
|
+
background: var(--trie-bg);
|
|
38
|
+
padding: 16px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Typography */
|
|
42
|
+
h1, h2, h3, h4 {
|
|
43
|
+
font-weight: 600;
|
|
44
|
+
margin-bottom: 8px;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
h1 { font-size: 24px; }
|
|
48
|
+
h2 { font-size: 20px; }
|
|
49
|
+
h3 { font-size: 16px; }
|
|
50
|
+
h4 { font-size: 14px; }
|
|
51
|
+
|
|
52
|
+
.text-muted { color: var(--trie-text-muted); }
|
|
53
|
+
.text-error { color: var(--trie-error); }
|
|
54
|
+
.text-warning { color: var(--trie-warning); }
|
|
55
|
+
.text-success { color: var(--trie-success); }
|
|
56
|
+
.text-info { color: var(--trie-info); }
|
|
57
|
+
|
|
58
|
+
/* Layout */
|
|
59
|
+
.container {
|
|
60
|
+
max-width: 1200px;
|
|
61
|
+
margin: 0 auto;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.flex { display: flex; }
|
|
65
|
+
.flex-col { flex-direction: column; }
|
|
66
|
+
.flex-wrap { flex-wrap: wrap; }
|
|
67
|
+
.items-center { align-items: center; }
|
|
68
|
+
.justify-between { justify-content: space-between; }
|
|
69
|
+
.gap-2 { gap: 8px; }
|
|
70
|
+
.gap-4 { gap: 16px; }
|
|
71
|
+
|
|
72
|
+
/* Cards */
|
|
73
|
+
.card {
|
|
74
|
+
background: var(--trie-surface);
|
|
75
|
+
border: 1px solid var(--trie-border);
|
|
76
|
+
border-radius: var(--radius);
|
|
77
|
+
padding: 16px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.card-header {
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
justify-content: space-between;
|
|
84
|
+
margin-bottom: 12px;
|
|
85
|
+
padding-bottom: 12px;
|
|
86
|
+
border-bottom: 1px solid var(--trie-border);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Buttons */
|
|
90
|
+
.btn {
|
|
91
|
+
display: inline-flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
gap: 6px;
|
|
94
|
+
padding: 6px 12px;
|
|
95
|
+
font-size: 14px;
|
|
96
|
+
font-weight: 500;
|
|
97
|
+
border-radius: var(--radius);
|
|
98
|
+
border: 1px solid var(--trie-border);
|
|
99
|
+
background: var(--trie-surface);
|
|
100
|
+
color: var(--trie-text);
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
transition: all 0.15s ease;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.btn:hover {
|
|
106
|
+
background: var(--trie-border);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.btn-primary {
|
|
110
|
+
background: var(--trie-primary);
|
|
111
|
+
border-color: var(--trie-primary);
|
|
112
|
+
color: #fff;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.btn-primary:hover {
|
|
116
|
+
opacity: 0.9;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.btn-success {
|
|
120
|
+
background: var(--trie-success);
|
|
121
|
+
border-color: var(--trie-success);
|
|
122
|
+
color: #fff;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.btn-danger {
|
|
126
|
+
background: var(--trie-error);
|
|
127
|
+
border-color: var(--trie-error);
|
|
128
|
+
color: #fff;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.btn-sm {
|
|
132
|
+
padding: 4px 8px;
|
|
133
|
+
font-size: 12px;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.btn-icon {
|
|
137
|
+
padding: 6px;
|
|
138
|
+
min-width: 32px;
|
|
139
|
+
justify-content: center;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* Inputs */
|
|
143
|
+
.input {
|
|
144
|
+
padding: 8px 12px;
|
|
145
|
+
font-size: 14px;
|
|
146
|
+
border: 1px solid var(--trie-border);
|
|
147
|
+
border-radius: var(--radius);
|
|
148
|
+
background: var(--trie-bg);
|
|
149
|
+
color: var(--trie-text);
|
|
150
|
+
width: 100%;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.input:focus {
|
|
154
|
+
outline: none;
|
|
155
|
+
border-color: var(--trie-primary);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.select {
|
|
159
|
+
padding: 8px 12px;
|
|
160
|
+
font-size: 14px;
|
|
161
|
+
border: 1px solid var(--trie-border);
|
|
162
|
+
border-radius: var(--radius);
|
|
163
|
+
background: var(--trie-surface);
|
|
164
|
+
color: var(--trie-text);
|
|
165
|
+
cursor: pointer;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* Badges */
|
|
169
|
+
.badge {
|
|
170
|
+
display: inline-flex;
|
|
171
|
+
align-items: center;
|
|
172
|
+
padding: 2px 8px;
|
|
173
|
+
font-size: 12px;
|
|
174
|
+
font-weight: 500;
|
|
175
|
+
border-radius: 12px;
|
|
176
|
+
background: var(--trie-border);
|
|
177
|
+
color: var(--trie-text);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.badge-critical {
|
|
181
|
+
background: rgba(255, 123, 114, 0.2);
|
|
182
|
+
color: var(--trie-critical);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.badge-high {
|
|
186
|
+
background: rgba(248, 81, 73, 0.2);
|
|
187
|
+
color: var(--trie-error);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.badge-medium {
|
|
191
|
+
background: rgba(210, 153, 34, 0.2);
|
|
192
|
+
color: var(--trie-warning);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.badge-low {
|
|
196
|
+
background: rgba(63, 185, 80, 0.2);
|
|
197
|
+
color: var(--trie-success);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.badge-info {
|
|
201
|
+
background: rgba(88, 166, 255, 0.2);
|
|
202
|
+
color: var(--trie-info);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/* Tables */
|
|
206
|
+
.table {
|
|
207
|
+
width: 100%;
|
|
208
|
+
border-collapse: collapse;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.table th,
|
|
212
|
+
.table td {
|
|
213
|
+
padding: 12px;
|
|
214
|
+
text-align: left;
|
|
215
|
+
border-bottom: 1px solid var(--trie-border);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.table th {
|
|
219
|
+
font-weight: 600;
|
|
220
|
+
color: var(--trie-text-muted);
|
|
221
|
+
font-size: 12px;
|
|
222
|
+
text-transform: uppercase;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.table tr:hover {
|
|
226
|
+
background: rgba(255, 255, 255, 0.02);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/* Lists */
|
|
230
|
+
.list {
|
|
231
|
+
list-style: none;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.list-item {
|
|
235
|
+
padding: 12px;
|
|
236
|
+
border-bottom: 1px solid var(--trie-border);
|
|
237
|
+
cursor: pointer;
|
|
238
|
+
transition: background 0.15s ease;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.list-item:hover {
|
|
242
|
+
background: rgba(255, 255, 255, 0.02);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.list-item:last-child {
|
|
246
|
+
border-bottom: none;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* Issue Item */
|
|
250
|
+
.issue-item {
|
|
251
|
+
display: flex;
|
|
252
|
+
gap: 12px;
|
|
253
|
+
padding: 12px;
|
|
254
|
+
border: 1px solid var(--trie-border);
|
|
255
|
+
border-radius: var(--radius);
|
|
256
|
+
margin-bottom: 8px;
|
|
257
|
+
cursor: pointer;
|
|
258
|
+
transition: all 0.15s ease;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.issue-item:hover {
|
|
262
|
+
border-color: var(--trie-primary);
|
|
263
|
+
background: rgba(88, 166, 255, 0.05);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.issue-item.expanded {
|
|
267
|
+
border-color: var(--trie-primary);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.issue-severity {
|
|
271
|
+
width: 4px;
|
|
272
|
+
border-radius: 2px;
|
|
273
|
+
flex-shrink: 0;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.issue-severity.critical { background: var(--trie-critical); }
|
|
277
|
+
.issue-severity.high { background: var(--trie-error); }
|
|
278
|
+
.issue-severity.medium { background: var(--trie-warning); }
|
|
279
|
+
.issue-severity.low { background: var(--trie-success); }
|
|
280
|
+
.issue-severity.info { background: var(--trie-info); }
|
|
281
|
+
|
|
282
|
+
.issue-content {
|
|
283
|
+
flex: 1;
|
|
284
|
+
min-width: 0;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.issue-title {
|
|
288
|
+
font-weight: 500;
|
|
289
|
+
margin-bottom: 4px;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.issue-meta {
|
|
293
|
+
font-size: 12px;
|
|
294
|
+
color: var(--trie-text-muted);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.issue-details {
|
|
298
|
+
margin-top: 12px;
|
|
299
|
+
padding-top: 12px;
|
|
300
|
+
border-top: 1px solid var(--trie-border);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.issue-actions {
|
|
304
|
+
display: flex;
|
|
305
|
+
gap: 8px;
|
|
306
|
+
margin-top: 12px;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/* Code blocks */
|
|
310
|
+
.code-block {
|
|
311
|
+
font-family: var(--font-mono);
|
|
312
|
+
font-size: 12px;
|
|
313
|
+
background: var(--trie-bg);
|
|
314
|
+
border: 1px solid var(--trie-border);
|
|
315
|
+
border-radius: var(--radius);
|
|
316
|
+
padding: 12px;
|
|
317
|
+
overflow-x: auto;
|
|
318
|
+
white-space: pre;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.code-inline {
|
|
322
|
+
font-family: var(--font-mono);
|
|
323
|
+
font-size: 12px;
|
|
324
|
+
background: rgba(110, 118, 129, 0.2);
|
|
325
|
+
padding: 2px 6px;
|
|
326
|
+
border-radius: 4px;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/* File path */
|
|
330
|
+
.file-path {
|
|
331
|
+
font-family: var(--font-mono);
|
|
332
|
+
font-size: 12px;
|
|
333
|
+
color: var(--trie-primary);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/* Tabs */
|
|
337
|
+
.tabs {
|
|
338
|
+
display: flex;
|
|
339
|
+
border-bottom: 1px solid var(--trie-border);
|
|
340
|
+
margin-bottom: 16px;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.tab {
|
|
344
|
+
padding: 8px 16px;
|
|
345
|
+
font-size: 14px;
|
|
346
|
+
color: var(--trie-text-muted);
|
|
347
|
+
cursor: pointer;
|
|
348
|
+
border-bottom: 2px solid transparent;
|
|
349
|
+
margin-bottom: -1px;
|
|
350
|
+
transition: all 0.15s ease;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.tab:hover {
|
|
354
|
+
color: var(--trie-text);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.tab.active {
|
|
358
|
+
color: var(--trie-primary);
|
|
359
|
+
border-bottom-color: var(--trie-primary);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/* Stats */
|
|
363
|
+
.stats {
|
|
364
|
+
display: grid;
|
|
365
|
+
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
|
366
|
+
gap: 16px;
|
|
367
|
+
margin-bottom: 24px;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.stat {
|
|
371
|
+
text-align: center;
|
|
372
|
+
padding: 16px;
|
|
373
|
+
background: var(--trie-surface);
|
|
374
|
+
border: 1px solid var(--trie-border);
|
|
375
|
+
border-radius: var(--radius);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.stat-value {
|
|
379
|
+
font-size: 32px;
|
|
380
|
+
font-weight: 700;
|
|
381
|
+
line-height: 1;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.stat-label {
|
|
385
|
+
font-size: 12px;
|
|
386
|
+
color: var(--trie-text-muted);
|
|
387
|
+
margin-top: 4px;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/* Filters */
|
|
391
|
+
.filters {
|
|
392
|
+
display: flex;
|
|
393
|
+
flex-wrap: wrap;
|
|
394
|
+
gap: 12px;
|
|
395
|
+
margin-bottom: 16px;
|
|
396
|
+
padding: 12px;
|
|
397
|
+
background: var(--trie-surface);
|
|
398
|
+
border: 1px solid var(--trie-border);
|
|
399
|
+
border-radius: var(--radius);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.filter-group {
|
|
403
|
+
display: flex;
|
|
404
|
+
align-items: center;
|
|
405
|
+
gap: 8px;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.filter-label {
|
|
409
|
+
font-size: 12px;
|
|
410
|
+
color: var(--trie-text-muted);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/* Screenshot Grid */
|
|
414
|
+
.screenshot-grid {
|
|
415
|
+
display: grid;
|
|
416
|
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
417
|
+
gap: 16px;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.screenshot-card {
|
|
421
|
+
border: 1px solid var(--trie-border);
|
|
422
|
+
border-radius: var(--radius);
|
|
423
|
+
overflow: hidden;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.screenshot-card img {
|
|
427
|
+
width: 100%;
|
|
428
|
+
height: auto;
|
|
429
|
+
display: block;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.screenshot-card-footer {
|
|
433
|
+
padding: 12px;
|
|
434
|
+
background: var(--trie-surface);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/* Diff view */
|
|
438
|
+
.diff-container {
|
|
439
|
+
font-family: var(--font-mono);
|
|
440
|
+
font-size: 12px;
|
|
441
|
+
border: 1px solid var(--trie-border);
|
|
442
|
+
border-radius: var(--radius);
|
|
443
|
+
overflow: hidden;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.diff-header {
|
|
447
|
+
padding: 8px 12px;
|
|
448
|
+
background: var(--trie-surface);
|
|
449
|
+
border-bottom: 1px solid var(--trie-border);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.diff-line {
|
|
453
|
+
display: flex;
|
|
454
|
+
padding: 0 12px;
|
|
455
|
+
min-height: 24px;
|
|
456
|
+
line-height: 24px;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.diff-line-number {
|
|
460
|
+
width: 50px;
|
|
461
|
+
color: var(--trie-text-muted);
|
|
462
|
+
user-select: none;
|
|
463
|
+
text-align: right;
|
|
464
|
+
padding-right: 12px;
|
|
465
|
+
flex-shrink: 0;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.diff-line-content {
|
|
469
|
+
flex: 1;
|
|
470
|
+
white-space: pre;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
.diff-line.added {
|
|
474
|
+
background: rgba(63, 185, 80, 0.15);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
.diff-line.removed {
|
|
478
|
+
background: rgba(248, 81, 73, 0.15);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
.diff-line.added .diff-line-content::before {
|
|
482
|
+
content: '+';
|
|
483
|
+
color: var(--trie-success);
|
|
484
|
+
margin-right: 8px;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
.diff-line.removed .diff-line-content::before {
|
|
488
|
+
content: '-';
|
|
489
|
+
color: var(--trie-error);
|
|
490
|
+
margin-right: 8px;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/* File tree */
|
|
494
|
+
.file-tree {
|
|
495
|
+
font-family: var(--font-mono);
|
|
496
|
+
font-size: 12px;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.file-tree-item {
|
|
500
|
+
display: flex;
|
|
501
|
+
align-items: center;
|
|
502
|
+
gap: 8px;
|
|
503
|
+
padding: 6px 12px;
|
|
504
|
+
cursor: pointer;
|
|
505
|
+
border-radius: var(--radius);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
.file-tree-item:hover {
|
|
509
|
+
background: rgba(255, 255, 255, 0.05);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
.file-tree-item.selected {
|
|
513
|
+
background: rgba(88, 166, 255, 0.1);
|
|
514
|
+
color: var(--trie-primary);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
.file-tree-icon {
|
|
518
|
+
width: 16px;
|
|
519
|
+
height: 16px;
|
|
520
|
+
opacity: 0.7;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/* Loading */
|
|
524
|
+
.loading {
|
|
525
|
+
display: flex;
|
|
526
|
+
align-items: center;
|
|
527
|
+
justify-content: center;
|
|
528
|
+
padding: 48px;
|
|
529
|
+
color: var(--trie-text-muted);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
.spinner {
|
|
533
|
+
width: 24px;
|
|
534
|
+
height: 24px;
|
|
535
|
+
border: 2px solid var(--trie-border);
|
|
536
|
+
border-top-color: var(--trie-primary);
|
|
537
|
+
border-radius: 50%;
|
|
538
|
+
animation: spin 0.8s linear infinite;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
@keyframes spin {
|
|
542
|
+
to { transform: rotate(360deg); }
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/* Empty state */
|
|
546
|
+
.empty-state {
|
|
547
|
+
text-align: center;
|
|
548
|
+
padding: 48px;
|
|
549
|
+
color: var(--trie-text-muted);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
.empty-state-icon {
|
|
553
|
+
font-size: 48px;
|
|
554
|
+
margin-bottom: 16px;
|
|
555
|
+
opacity: 0.5;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/* Scrollbar */
|
|
559
|
+
::-webkit-scrollbar {
|
|
560
|
+
width: 8px;
|
|
561
|
+
height: 8px;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
::-webkit-scrollbar-track {
|
|
565
|
+
background: transparent;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
::-webkit-scrollbar-thumb {
|
|
569
|
+
background: var(--trie-border);
|
|
570
|
+
border-radius: 4px;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
::-webkit-scrollbar-thumb:hover {
|
|
574
|
+
background: var(--trie-text-muted);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/* Utilities */
|
|
578
|
+
.hidden { display: none !important; }
|
|
579
|
+
.mt-2 { margin-top: 8px; }
|
|
580
|
+
.mt-4 { margin-top: 16px; }
|
|
581
|
+
.mb-2 { margin-bottom: 8px; }
|
|
582
|
+
.mb-4 { margin-bottom: 16px; }
|
|
583
|
+
.p-2 { padding: 8px; }
|
|
584
|
+
.p-4 { padding: 16px; }
|
|
585
|
+
.truncate {
|
|
586
|
+
overflow: hidden;
|
|
587
|
+
text-overflow: ellipsis;
|
|
588
|
+
white-space: nowrap;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/* Tree View Styles */
|
|
592
|
+
.tree-section {
|
|
593
|
+
margin-bottom: 12px;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
.tree-section-header {
|
|
597
|
+
user-select: none;
|
|
598
|
+
transition: background 0.15s ease;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
.tree-section-header:hover {
|
|
602
|
+
background: rgba(255, 255, 255, 0.05) !important;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
.tree-item {
|
|
606
|
+
transition: background 0.15s ease;
|
|
607
|
+
margin-bottom: 2px;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
.tree-item:hover {
|
|
611
|
+
background: rgba(255, 255, 255, 0.05) !important;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
/* Memory Tree specific */
|
|
615
|
+
.memory-tree {
|
|
616
|
+
font-family: var(--font-mono);
|
|
617
|
+
font-size: 12px;
|
|
618
|
+
line-height: 1.6;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
.memory-tree-indent {
|
|
622
|
+
display: inline-block;
|
|
623
|
+
width: 24px;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
.memory-tree-bar {
|
|
627
|
+
display: inline-flex;
|
|
628
|
+
align-items: center;
|
|
629
|
+
height: 16px;
|
|
630
|
+
margin-left: 8px;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
.memory-tree-bar-filled {
|
|
634
|
+
height: 8px;
|
|
635
|
+
background: var(--trie-primary);
|
|
636
|
+
border-radius: 4px;
|
|
637
|
+
transition: width 0.3s ease;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
.memory-tree-bar-empty {
|
|
641
|
+
height: 8px;
|
|
642
|
+
background: var(--trie-border);
|
|
643
|
+
border-radius: 4px;
|
|
644
|
+
flex: 1;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
</style>
|
|
648
|
+
</head>
|
|
649
|
+
<body>
|
|
650
|
+
<div id="app" class="container"></div>
|
|
651
|
+
<script type="module">
|
|
652
|
+
var g=Object.defineProperty;var m=(i,e,t)=>e in i?g(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var o=(i,e,t)=>m(i,typeof e!="symbol"?e+"":e,t);function u(i,e,t){let s=document.createElement(i);if(e)for(let[n,a]of Object.entries(e))n==="className"?s.className=String(a):typeof a=="boolean"?a&&s.setAttribute(n,""):s.setAttribute(n,String(a));if(t)for(let n of t)typeof n=="string"?s.appendChild(document.createTextNode(n)):s.appendChild(n);return s}var r=u;function h(i,e){i.innerHTML="",i.appendChild(r("div",{className:"error-state"},[r("div",{className:"error-icon"},["\u26A0\uFE0F"]),r("p",{className:"error-message"},[e])]))}function c(i){document.addEventListener("DOMContentLoaded",()=>{let e=document.getElementById("app");if(!e){console.error("App container not found");return}try{new i(e)}catch(t){h(e,`Failed to initialize app: ${t}`)}})}var l=class{constructor(e){o(this,"container");o(this,"messages",[]);o(this,"isLoading",!1);o(this,"inputElement",null);this.container=e,this.init()}async init(){await this.loadChatHistory(),this.render(),this.setupEventListeners()}async loadChatHistory(){try{this.messages=[{id:"msg-1",role:"assistant",content:`Hello! I'm Trie, your code guardian assistant. I can help you with:
|
|
653
|
+
|
|
654
|
+
\u2022 Analyzing your codebase for quality issues
|
|
655
|
+
\u2022 Checking goal violations and nudges
|
|
656
|
+
\u2022 Recording decisions and incidents
|
|
657
|
+
\u2022 Managing hypotheses and blockers
|
|
658
|
+
\u2022 Running AI-powered scans
|
|
659
|
+
|
|
660
|
+
Ask me about your code, goals, or any issues you're facing!`,timestamp:Date.now()-3e5}]}catch(e){console.error("Failed to load chat history:",e)}}render(){let e=`
|
|
661
|
+
<div class="app-header">
|
|
662
|
+
<h1>AI Chat</h1>
|
|
663
|
+
<p>Chat with Trie about your codebase, goals, and development workflow</p>
|
|
664
|
+
</div>
|
|
665
|
+
|
|
666
|
+
<div class="chat-container">
|
|
667
|
+
<div class="messages-container" id="messagesContainer">
|
|
668
|
+
${this.messages.map(t=>this.renderMessage(t)).join("")}
|
|
669
|
+
${this.isLoading?this.renderTypingIndicator():""}
|
|
670
|
+
</div>
|
|
671
|
+
|
|
672
|
+
<div class="chat-input-container">
|
|
673
|
+
<div class="input-wrapper">
|
|
674
|
+
<textarea
|
|
675
|
+
id="chatInput"
|
|
676
|
+
class="chat-input"
|
|
677
|
+
placeholder="Ask about your codebase, goals, or development workflow..."
|
|
678
|
+
rows="3"
|
|
679
|
+
${this.isLoading?"disabled":""}
|
|
680
|
+
></textarea>
|
|
681
|
+
<button
|
|
682
|
+
id="sendButton"
|
|
683
|
+
class="send-button"
|
|
684
|
+
${this.isLoading?"disabled":""}
|
|
685
|
+
onclick="sendMessage()"
|
|
686
|
+
>
|
|
687
|
+
Send
|
|
688
|
+
</button>
|
|
689
|
+
</div>
|
|
690
|
+
<div class="input-help">
|
|
691
|
+
Press Ctrl+Enter to send \u2022 Try: "scan for emojis" or "check my goals"
|
|
692
|
+
</div>
|
|
693
|
+
</div>
|
|
694
|
+
</div>
|
|
695
|
+
`;this.container.innerHTML=e,this.inputElement=this.container.querySelector("#chatInput"),this.scrollToBottom()}renderMessage(e){let t=e.role==="user",s=new Date(e.timestamp).toLocaleTimeString();return`
|
|
696
|
+
<div class="message ${t?"user-message":"assistant-message"}">
|
|
697
|
+
<div class="message-header">
|
|
698
|
+
<span class="message-author">${t?"You":"Trie"}</span>
|
|
699
|
+
<span class="message-timestamp">${s}</span>
|
|
700
|
+
</div>
|
|
701
|
+
|
|
702
|
+
${e.toolCalls?this.renderToolCalls(e.toolCalls):""}
|
|
703
|
+
|
|
704
|
+
<div class="message-content">
|
|
705
|
+
${this.formatMessageContent(e.content)}
|
|
706
|
+
</div>
|
|
707
|
+
|
|
708
|
+
${e.pendingFix?this.renderPendingFix(e.pendingFix):""}
|
|
709
|
+
</div>
|
|
710
|
+
`}renderToolCalls(e){return`
|
|
711
|
+
<div class="tool-calls">
|
|
712
|
+
${e.map(t=>`
|
|
713
|
+
<div class="tool-call">
|
|
714
|
+
<span class="tool-name">[${t.name}]</span>
|
|
715
|
+
<span class="tool-input">${this.formatToolInput(t.input)}</span>
|
|
716
|
+
</div>
|
|
717
|
+
`).join("")}
|
|
718
|
+
</div>
|
|
719
|
+
`}renderPendingFix(e){return`
|
|
720
|
+
<div class="pending-fix">
|
|
721
|
+
<div class="fix-header">
|
|
722
|
+
<strong>\u{1F527} Fix Proposal</strong>
|
|
723
|
+
</div>
|
|
724
|
+
<div class="fix-details">
|
|
725
|
+
<p><strong>\u{1F4C1} File:</strong> <code>${e.file}</code></p>
|
|
726
|
+
<p><strong>\u{1F3AF} Goal:</strong> ${e.goal}</p>
|
|
727
|
+
<p><strong>\u26A0\uFE0F Violation:</strong> ${e.violation}</p>
|
|
728
|
+
${e.suggestedFix?`<p><strong>\u{1F4A1} Suggested Fix:</strong> ${e.suggestedFix}</p>`:""}
|
|
729
|
+
</div>
|
|
730
|
+
<div class="fix-actions">
|
|
731
|
+
<button class="btn btn-primary" onclick="acceptFix('${e.file}')">
|
|
732
|
+
Accept Fix
|
|
733
|
+
</button>
|
|
734
|
+
<button class="btn" onclick="declineFix()">
|
|
735
|
+
Decline
|
|
736
|
+
</button>
|
|
737
|
+
</div>
|
|
738
|
+
</div>
|
|
739
|
+
`}renderTypingIndicator(){return`
|
|
740
|
+
<div class="message assistant-message typing">
|
|
741
|
+
<div class="message-header">
|
|
742
|
+
<span class="message-author">Trie</span>
|
|
743
|
+
</div>
|
|
744
|
+
<div class="message-content">
|
|
745
|
+
<div class="typing-indicator">
|
|
746
|
+
<span></span>
|
|
747
|
+
<span></span>
|
|
748
|
+
<span></span>
|
|
749
|
+
</div>
|
|
750
|
+
</div>
|
|
751
|
+
</div>
|
|
752
|
+
`}formatMessageContent(e){return e.replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>").replace(/\*(.*?)\*/g,"<em>$1</em>").replace(/`(.*?)`/g,"<code>$1</code>").replace(/```([\s\S]*?)```/g,"<pre><code>$1</code></pre>").replace(/\n/g,"<br>")}formatToolInput(e){let t=[];for(let[s,n]of Object.entries(e))s!=="directory"&&(Array.isArray(n)?t.push(`${s}: [${n.join(", ")}]`):t.push(`${s}: ${String(n)}`));return t.join(", ")}scrollToBottom(){setTimeout(()=>{let e=this.container.querySelector("#messagesContainer");e&&(e.scrollTop=e.scrollHeight)},100)}async sendMessage(){if(!this.inputElement||this.isLoading)return;let e=this.inputElement.value.trim();if(!e)return;let t={id:`msg-${Date.now()}-user`,role:"user",content:e,timestamp:Date.now()};this.messages.push(t),this.inputElement.value="",this.isLoading=!0,this.render();try{await this.simulateAIResponse(e)}catch(s){this.addErrorMessage(`Failed to get response: ${s}`)}finally{this.isLoading=!1,this.render()}}async simulateAIResponse(e){await new Promise(p=>setTimeout(p,1500));let t="",s,n,a=e.toLowerCase();a.includes("emoji")||a.includes("scan")?(s=[{name:"trie_scan_for_goal_violations",input:{goalId:"emoji-goal"}}],t=`I found 2 emoji violations in your codebase:
|
|
753
|
+
|
|
754
|
+
\u26A0\uFE0F src/components/Button.tsx
|
|
755
|
+
Goal "Eliminate emoji usage" violated: Found \u{1F680} emoji in comment
|
|
756
|
+
|
|
757
|
+
\u26A0\uFE0F src/utils/helpers.ts
|
|
758
|
+
Goal "Eliminate emoji usage" violated: Found \u2728 emoji in console.log
|
|
759
|
+
|
|
760
|
+
These violations have been recorded and will appear in the Nudges tab.`,n={file:"src/components/Button.tsx",goal:"Eliminate emoji usage",violation:"Found \u{1F680} emoji in comment",suggestedFix:"Remove emoji and use descriptive text",directory:"/current/workspace"}):a.includes("goal")||a.includes("progress")?(s=[{name:"trie_get_goals",input:{status:"active"}}],t=`Here are your active goals:
|
|
761
|
+
|
|
762
|
+
\u{1F3AF} **Eliminate all emoji usage from codebase**
|
|
763
|
+
Progress: 87% (13\u21922 remaining)
|
|
764
|
+
Category: quality
|
|
765
|
+
|
|
766
|
+
\u{1F3AF} **Increase test coverage to 85%**
|
|
767
|
+
Progress: 85% (72%\u219285% target)
|
|
768
|
+
Category: coverage
|
|
769
|
+
|
|
770
|
+
Both goals are making good progress! The emoji goal is almost complete.`):a.includes("decision")||a.includes("ledger")?(s=[{name:"trie_get_decisions",input:{limit:5}}],t=`Recent decisions from your ledger:
|
|
771
|
+
|
|
772
|
+
\u{1F4DD} **Switch to TypeScript for new components** (2 days ago)
|
|
773
|
+
Context: Increasing type safety needs
|
|
774
|
+
Outcome: success
|
|
775
|
+
|
|
776
|
+
\u{1F4DD} **Implement goal-based validation system** (1 day ago)
|
|
777
|
+
Context: Need systematic way to track code quality
|
|
778
|
+
Outcome: active
|
|
779
|
+
|
|
780
|
+
You can view the full decision ledger for more context and reasoning.`):a.includes("help")||a.includes("what can you do")?t=`I can help you with many aspects of code quality and development:
|
|
781
|
+
|
|
782
|
+
**Quality Analysis:**
|
|
783
|
+
\u2022 Run AI-powered scans for goal violations
|
|
784
|
+
\u2022 Check for emojis, TODOs, complexity issues
|
|
785
|
+
\u2022 Analyze code patterns and anti-patterns
|
|
786
|
+
|
|
787
|
+
**Goal Management:**
|
|
788
|
+
\u2022 Track progress on quality goals
|
|
789
|
+
\u2022 Set up new goals and targets
|
|
790
|
+
\u2022 Check goal violations across your codebase
|
|
791
|
+
|
|
792
|
+
**Decision Tracking:**
|
|
793
|
+
\u2022 Record architectural and coding decisions
|
|
794
|
+
\u2022 Query past decisions and their outcomes
|
|
795
|
+
\u2022 Track blockers and technical debt
|
|
796
|
+
|
|
797
|
+
**Hypotheses:**
|
|
798
|
+
\u2022 Test development theories with evidence
|
|
799
|
+
\u2022 Track confidence levels and validation
|
|
800
|
+
\u2022 Manage experiment outcomes
|
|
801
|
+
|
|
802
|
+
Just ask me about any of these topics or say things like:
|
|
803
|
+
\u2022 "scan for emojis"
|
|
804
|
+
\u2022 "check my goals"
|
|
805
|
+
\u2022 "show recent decisions"
|
|
806
|
+
\u2022 "what blockers do we have?"`:t=`I understand you're asking about: "${e}"
|
|
807
|
+
|
|
808
|
+
I can help you with code quality analysis, goal tracking, decision recording, and hypothesis management.
|
|
809
|
+
|
|
810
|
+
Some things you can try:
|
|
811
|
+
\u2022 "scan my code for issues"
|
|
812
|
+
\u2022 "check goal violations"
|
|
813
|
+
\u2022 "show me recent decisions"
|
|
814
|
+
\u2022 "what blockers do we have?"
|
|
815
|
+
\u2022 "help" - for more detailed information
|
|
816
|
+
|
|
817
|
+
What would you like to explore?`;let d={id:`msg-${Date.now()}-assistant`,role:"assistant",content:t,timestamp:Date.now(),toolCalls:s,pendingFix:n};this.messages.push(d)}addErrorMessage(e){let t={id:`msg-${Date.now()}-error`,role:"assistant",content:`\u274C ${e}`,timestamp:Date.now()};this.messages.push(t)}setupEventListeners(){this.inputElement&&(this.inputElement.addEventListener("keydown",e=>{e.key==="Enter"&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),this.sendMessage())}),this.inputElement.addEventListener("input",()=>{this.inputElement&&(this.inputElement.style.height="auto",this.inputElement.style.height=Math.min(this.inputElement.scrollHeight,120)+"px")})),window.sendMessage=()=>{this.sendMessage()},window.acceptFix=e=>{console.log("Accepting fix for:",e),this.addSystemMessage(`\u2713 Fix accepted for ${e}. Claude Code will be spawned to apply the fix.`)},window.declineFix=()=>{this.addSystemMessage("Fix declined. Let me know if you need anything else!")}}addSystemMessage(e){let t={id:`msg-${Date.now()}-system`,role:"assistant",content:e,timestamp:Date.now()};this.messages.push(t),this.render()}};c(l);
|
|
818
|
+
|
|
819
|
+
</script>
|
|
820
|
+
</body>
|
|
821
|
+
</html>
|