@triedotdev/mcp 1.0.169 → 1.0.170

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 (145) hide show
  1. package/README.md +54 -545
  2. package/dist/chunk-2YXOBNKW.js +619 -0
  3. package/dist/chunk-2YXOBNKW.js.map +1 -0
  4. package/dist/chunk-QR64Y5TI.js +363 -0
  5. package/dist/chunk-QR64Y5TI.js.map +1 -0
  6. package/dist/cli/main.d.ts +0 -15
  7. package/dist/cli/main.js +356 -3098
  8. package/dist/cli/main.js.map +1 -1
  9. package/dist/index.js +2 -34
  10. package/dist/index.js.map +1 -1
  11. package/dist/server/mcp-server.js +2 -34
  12. package/package.json +8 -31
  13. package/dist/autonomy-config-FSERX3O3.js +0 -30
  14. package/dist/autonomy-config-FSERX3O3.js.map +0 -1
  15. package/dist/chat-store-JNGNTDSN.js +0 -15
  16. package/dist/chat-store-JNGNTDSN.js.map +0 -1
  17. package/dist/chunk-2HF65EHQ.js +0 -311
  18. package/dist/chunk-2HF65EHQ.js.map +0 -1
  19. package/dist/chunk-3XR6WVAW.js +0 -4011
  20. package/dist/chunk-3XR6WVAW.js.map +0 -1
  21. package/dist/chunk-43X6JBEM.js +0 -36
  22. package/dist/chunk-43X6JBEM.js.map +0 -1
  23. package/dist/chunk-6NLHFIYA.js +0 -344
  24. package/dist/chunk-6NLHFIYA.js.map +0 -1
  25. package/dist/chunk-7IO4YUI3.js +0 -1827
  26. package/dist/chunk-7IO4YUI3.js.map +0 -1
  27. package/dist/chunk-AHD2CBQ7.js +0 -846
  28. package/dist/chunk-AHD2CBQ7.js.map +0 -1
  29. package/dist/chunk-BUTOP5EB.js +0 -931
  30. package/dist/chunk-BUTOP5EB.js.map +0 -1
  31. package/dist/chunk-DGUM43GV.js +0 -11
  32. package/dist/chunk-DGUM43GV.js.map +0 -1
  33. package/dist/chunk-EFWVF6TI.js +0 -267
  34. package/dist/chunk-EFWVF6TI.js.map +0 -1
  35. package/dist/chunk-F6WFNUAY.js +0 -216
  36. package/dist/chunk-F6WFNUAY.js.map +0 -1
  37. package/dist/chunk-FBNURWRY.js +0 -662
  38. package/dist/chunk-FBNURWRY.js.map +0 -1
  39. package/dist/chunk-FQ45QP5A.js +0 -361
  40. package/dist/chunk-FQ45QP5A.js.map +0 -1
  41. package/dist/chunk-FVRO5RN3.js +0 -1306
  42. package/dist/chunk-FVRO5RN3.js.map +0 -1
  43. package/dist/chunk-G2TGF6TR.js +0 -573
  44. package/dist/chunk-G2TGF6TR.js.map +0 -1
  45. package/dist/chunk-G3I7SZLW.js +0 -354
  46. package/dist/chunk-G3I7SZLW.js.map +0 -1
  47. package/dist/chunk-GTKYBOXL.js +0 -700
  48. package/dist/chunk-GTKYBOXL.js.map +0 -1
  49. package/dist/chunk-HVCDY3AK.js +0 -850
  50. package/dist/chunk-HVCDY3AK.js.map +0 -1
  51. package/dist/chunk-I2O5OYQT.js +0 -727
  52. package/dist/chunk-I2O5OYQT.js.map +0 -1
  53. package/dist/chunk-JVMBCWKS.js +0 -348
  54. package/dist/chunk-JVMBCWKS.js.map +0 -1
  55. package/dist/chunk-KCUOWRPX.js +0 -816
  56. package/dist/chunk-KCUOWRPX.js.map +0 -1
  57. package/dist/chunk-KDHN2ZQE.js +0 -313
  58. package/dist/chunk-KDHN2ZQE.js.map +0 -1
  59. package/dist/chunk-ME2OERF5.js +0 -345
  60. package/dist/chunk-ME2OERF5.js.map +0 -1
  61. package/dist/chunk-OBQ74FOU.js +0 -27
  62. package/dist/chunk-OBQ74FOU.js.map +0 -1
  63. package/dist/chunk-Q5EKA5YA.js +0 -254
  64. package/dist/chunk-Q5EKA5YA.js.map +0 -1
  65. package/dist/chunk-Q63FFI6D.js +0 -132
  66. package/dist/chunk-Q63FFI6D.js.map +0 -1
  67. package/dist/chunk-SASNMSB5.js +0 -12597
  68. package/dist/chunk-SASNMSB5.js.map +0 -1
  69. package/dist/chunk-T63OHG4Q.js +0 -440
  70. package/dist/chunk-T63OHG4Q.js.map +0 -1
  71. package/dist/chunk-TN5WEKWI.js +0 -173
  72. package/dist/chunk-TN5WEKWI.js.map +0 -1
  73. package/dist/chunk-VUL52BQL.js +0 -402
  74. package/dist/chunk-VUL52BQL.js.map +0 -1
  75. package/dist/chunk-VVITXIHN.js +0 -189
  76. package/dist/chunk-VVITXIHN.js.map +0 -1
  77. package/dist/chunk-WCN7S3EI.js +0 -14
  78. package/dist/chunk-WCN7S3EI.js.map +0 -1
  79. package/dist/chunk-XPZZFPBZ.js +0 -491
  80. package/dist/chunk-XPZZFPBZ.js.map +0 -1
  81. package/dist/chunk-ZJF5FTBX.js +0 -1396
  82. package/dist/chunk-ZJF5FTBX.js.map +0 -1
  83. package/dist/chunk-ZV2K6M7T.js +0 -74
  84. package/dist/chunk-ZV2K6M7T.js.map +0 -1
  85. package/dist/cli/create-agent.d.ts +0 -1
  86. package/dist/cli/create-agent.js +0 -1050
  87. package/dist/cli/create-agent.js.map +0 -1
  88. package/dist/cli/yolo-daemon.d.ts +0 -1
  89. package/dist/cli/yolo-daemon.js +0 -421
  90. package/dist/cli/yolo-daemon.js.map +0 -1
  91. package/dist/client-NJPZE5JT.js +0 -28
  92. package/dist/client-NJPZE5JT.js.map +0 -1
  93. package/dist/codebase-index-VAPF32XX.js +0 -12
  94. package/dist/codebase-index-VAPF32XX.js.map +0 -1
  95. package/dist/fast-analyzer-3GCCZMLK.js +0 -216
  96. package/dist/fast-analyzer-3GCCZMLK.js.map +0 -1
  97. package/dist/git-EO5SRFMN.js +0 -28
  98. package/dist/git-EO5SRFMN.js.map +0 -1
  99. package/dist/github-ingester-ZOKK6GRS.js +0 -11
  100. package/dist/github-ingester-ZOKK6GRS.js.map +0 -1
  101. package/dist/goal-manager-QUKX2W6C.js +0 -25
  102. package/dist/goal-manager-QUKX2W6C.js.map +0 -1
  103. package/dist/goal-validator-2SFSKKVU.js +0 -24
  104. package/dist/goal-validator-2SFSKKVU.js.map +0 -1
  105. package/dist/graph-B3NA4S7I.js +0 -10
  106. package/dist/graph-B3NA4S7I.js.map +0 -1
  107. package/dist/hypothesis-KCPBR652.js +0 -23
  108. package/dist/hypothesis-KCPBR652.js.map +0 -1
  109. package/dist/incident-index-EFNUSGWL.js +0 -11
  110. package/dist/incident-index-EFNUSGWL.js.map +0 -1
  111. package/dist/insight-store-EC4PLSAW.js +0 -22
  112. package/dist/insight-store-EC4PLSAW.js.map +0 -1
  113. package/dist/issue-store-YAXTNRRY.js +0 -36
  114. package/dist/issue-store-YAXTNRRY.js.map +0 -1
  115. package/dist/ledger-TWZTGDFA.js +0 -58
  116. package/dist/ledger-TWZTGDFA.js.map +0 -1
  117. package/dist/linear-ingester-XXPAZZRW.js +0 -11
  118. package/dist/linear-ingester-XXPAZZRW.js.map +0 -1
  119. package/dist/output-manager-RVJ37XKA.js +0 -13
  120. package/dist/output-manager-RVJ37XKA.js.map +0 -1
  121. package/dist/parse-goal-violation-SACGFG3C.js +0 -8
  122. package/dist/parse-goal-violation-SACGFG3C.js.map +0 -1
  123. package/dist/pattern-discovery-F7LU5K6E.js +0 -8
  124. package/dist/pattern-discovery-F7LU5K6E.js.map +0 -1
  125. package/dist/progress-SRQ2V3BP.js +0 -18
  126. package/dist/progress-SRQ2V3BP.js.map +0 -1
  127. package/dist/project-state-AHPA77SM.js +0 -28
  128. package/dist/project-state-AHPA77SM.js.map +0 -1
  129. package/dist/sync-M2FSWPBC.js +0 -12
  130. package/dist/sync-M2FSWPBC.js.map +0 -1
  131. package/dist/terminal-spawn-5YXDMUCF.js +0 -157
  132. package/dist/terminal-spawn-5YXDMUCF.js.map +0 -1
  133. package/dist/tiered-storage-DYNC5CQ6.js +0 -13
  134. package/dist/tiered-storage-DYNC5CQ6.js.map +0 -1
  135. package/dist/trie-agent-I3HAHY2G.js +0 -26
  136. package/dist/trie-agent-I3HAHY2G.js.map +0 -1
  137. package/dist/ui/chat.html +0 -1014
  138. package/dist/ui/goals.html +0 -967
  139. package/dist/ui/hypotheses.html +0 -1011
  140. package/dist/ui/ledger.html +0 -954
  141. package/dist/ui/nudges.html +0 -995
  142. package/dist/vibe-code-signatures-5ZULYP3D.js +0 -987
  143. package/dist/vibe-code-signatures-5ZULYP3D.js.map +0 -1
  144. package/dist/vulnerability-signatures-2URZSXAQ.js +0 -983
  145. package/dist/vulnerability-signatures-2URZSXAQ.js.map +0 -1
package/dist/ui/chat.html DELETED
@@ -1,1014 +0,0 @@
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
- /* Chat App Styles */
648
- .chat-container {
649
- display: flex;
650
- flex-direction: column;
651
- height: calc(100vh - 120px);
652
- max-height: 800px;
653
- margin-top: 16px;
654
- }
655
-
656
- .messages-container {
657
- flex: 1;
658
- overflow-y: auto;
659
- padding: 16px;
660
- border: 1px solid var(--trie-border);
661
- border-radius: var(--radius) var(--radius) 0 0;
662
- background: var(--trie-surface);
663
- min-height: 400px;
664
- }
665
-
666
- .message {
667
- margin-bottom: 16px;
668
- padding: 12px 16px;
669
- border-radius: var(--radius);
670
- background: var(--trie-bg);
671
- border: 1px solid var(--trie-border);
672
- }
673
-
674
- .message.user-message {
675
- margin-left: 20%;
676
- background: rgba(88, 166, 255, 0.1);
677
- border-color: rgba(88, 166, 255, 0.3);
678
- }
679
-
680
- .message.assistant-message {
681
- margin-right: 20%;
682
- }
683
-
684
- .message-header {
685
- display: flex;
686
- justify-content: space-between;
687
- margin-bottom: 8px;
688
- font-size: 12px;
689
- color: var(--trie-text-muted);
690
- }
691
-
692
- .message-author {
693
- font-weight: 600;
694
- }
695
-
696
- .message-content {
697
- line-height: 1.6;
698
- white-space: pre-wrap;
699
- word-wrap: break-word;
700
- }
701
-
702
- .message-content pre {
703
- background: var(--trie-surface);
704
- border: 1px solid var(--trie-border);
705
- border-radius: var(--radius);
706
- padding: 12px;
707
- margin: 8px 0;
708
- overflow-x: auto;
709
- font-family: var(--font-mono);
710
- font-size: 12px;
711
- }
712
-
713
- .message-content code {
714
- font-family: var(--font-mono);
715
- font-size: 12px;
716
- background: rgba(110, 118, 129, 0.2);
717
- padding: 2px 6px;
718
- border-radius: 4px;
719
- }
720
-
721
- .message-content pre code {
722
- background: none;
723
- padding: 0;
724
- }
725
-
726
- .typing-indicator {
727
- display: flex;
728
- gap: 4px;
729
- align-items: center;
730
- }
731
-
732
- .typing-indicator span {
733
- width: 8px;
734
- height: 8px;
735
- border-radius: 50%;
736
- background: var(--trie-text-muted);
737
- animation: typing 1.4s infinite ease-in-out;
738
- }
739
-
740
- .typing-indicator span:nth-child(1) { animation-delay: 0s; }
741
- .typing-indicator span:nth-child(2) { animation-delay: 0.2s; }
742
- .typing-indicator span:nth-child(3) { animation-delay: 0.4s; }
743
-
744
- @keyframes typing {
745
- 0%, 80%, 100% {
746
- opacity: 0.3;
747
- transform: scale(0.8);
748
- }
749
- 40% {
750
- opacity: 1;
751
- transform: scale(1);
752
- }
753
- }
754
-
755
- .tool-calls {
756
- margin-bottom: 12px;
757
- padding: 12px;
758
- background: var(--trie-surface);
759
- border: 1px solid var(--trie-border);
760
- border-radius: var(--radius);
761
- font-family: var(--font-mono);
762
- font-size: 12px;
763
- }
764
-
765
- .tool-call {
766
- display: flex;
767
- gap: 8px;
768
- margin-bottom: 4px;
769
- }
770
-
771
- .tool-call:last-child {
772
- margin-bottom: 0;
773
- }
774
-
775
- .tool-name {
776
- color: var(--trie-primary);
777
- font-weight: 600;
778
- }
779
-
780
- .tool-input {
781
- color: var(--trie-text-muted);
782
- }
783
-
784
- .pending-fix {
785
- margin-top: 12px;
786
- padding: 16px;
787
- background: rgba(210, 153, 34, 0.1);
788
- border: 1px solid rgba(210, 153, 34, 0.3);
789
- border-radius: var(--radius);
790
- }
791
-
792
- .fix-header {
793
- margin-bottom: 12px;
794
- color: var(--trie-warning);
795
- }
796
-
797
- .fix-details p {
798
- margin-bottom: 8px;
799
- font-size: 14px;
800
- }
801
-
802
- .fix-actions {
803
- display: flex;
804
- gap: 8px;
805
- margin-top: 12px;
806
- }
807
-
808
- .chat-input-container {
809
- background: var(--trie-surface);
810
- border: 1px solid var(--trie-border);
811
- border-top: none;
812
- border-radius: 0 0 var(--radius) var(--radius);
813
- padding: 16px;
814
- flex-shrink: 0;
815
- }
816
-
817
- .input-wrapper {
818
- display: flex;
819
- gap: 12px;
820
- align-items: flex-end;
821
- }
822
-
823
- .chat-input {
824
- flex: 1;
825
- min-height: 60px;
826
- max-height: 120px;
827
- padding: 12px;
828
- font-size: 14px;
829
- line-height: 1.5;
830
- border: 1px solid var(--trie-border);
831
- border-radius: var(--radius);
832
- background: var(--trie-bg);
833
- color: var(--trie-text);
834
- resize: none;
835
- font-family: var(--font-sans);
836
- }
837
-
838
- .chat-input:focus {
839
- outline: none;
840
- border-color: var(--trie-primary);
841
- }
842
-
843
- .chat-input::placeholder {
844
- color: var(--trie-text-muted);
845
- }
846
-
847
- .send-button {
848
- padding: 12px 24px;
849
- font-size: 14px;
850
- font-weight: 600;
851
- border: none;
852
- border-radius: var(--radius);
853
- background: var(--trie-primary);
854
- color: #fff;
855
- cursor: pointer;
856
- transition: all 0.15s ease;
857
- flex-shrink: 0;
858
- height: fit-content;
859
- }
860
-
861
- .send-button:hover:not(:disabled) {
862
- background: rgba(88, 166, 255, 0.9);
863
- }
864
-
865
- .send-button:disabled {
866
- opacity: 0.5;
867
- cursor: not-allowed;
868
- }
869
-
870
- .input-help {
871
- margin-top: 8px;
872
- font-size: 12px;
873
- color: var(--trie-text-muted);
874
- text-align: center;
875
- }
876
-
877
- .app-header {
878
- margin-bottom: 0;
879
- }
880
-
881
- .app-header h1 {
882
- margin-bottom: 4px;
883
- }
884
-
885
- .app-header p {
886
- color: var(--trie-text-muted);
887
- margin-bottom: 0;
888
- }
889
-
890
- </style>
891
- </head>
892
- <body>
893
- <div id="app" class="container"></div>
894
- <script type="module">
895
- var u=Object.defineProperty;var m=(i,e,t)=>e in i?u(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 h(i,e,t){let s=document.createElement(i);if(e)for(let[n,r]of Object.entries(e))n==="className"?s.className=String(r):typeof r=="boolean"?r&&s.setAttribute(n,""):s.setAttribute(n,String(r));if(t)for(let n of t)typeof n=="string"?s.appendChild(document.createTextNode(n)):s.appendChild(n);return s}var l=h;function v(i,e){i.innerHTML="",i.appendChild(l("div",{className:"error-state"},[l("div",{className:"error-icon"},["\u26A0\uFE0F"]),l("p",{className:"error-message"},[e])]))}function g(i){document.addEventListener("DOMContentLoaded",()=>{let e=document.getElementById("app");if(!e){console.error("App container not found");return}try{new i(e)}catch(t){v(e,`Failed to initialize app: ${t}`)}})}var c=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 quality assistant. I can help you with:
896
-
897
- \u2022 Analyzing your codebase for quality issues
898
- \u2022 Checking goal violations and nudges
899
- \u2022 Recording decisions and incidents
900
- \u2022 Managing hypotheses and blockers
901
- \u2022 Running AI-powered scans
902
-
903
- 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=`
904
- <div class="app-header">
905
- <h1>AI Chat</h1>
906
- <p>Chat with Trie about your codebase, goals, and development workflow</p>
907
- </div>
908
-
909
- <div class="chat-container">
910
- <div class="messages-container" id="messagesContainer">
911
- ${this.messages.map(t=>this.renderMessage(t)).join("")}
912
- ${this.isLoading?this.renderTypingIndicator():""}
913
- </div>
914
-
915
- <div class="chat-input-container">
916
- <div class="input-wrapper">
917
- <textarea
918
- id="chatInput"
919
- class="chat-input"
920
- placeholder="Ask about your codebase, goals, or development workflow..."
921
- rows="3"
922
- ${this.isLoading?"disabled":""}
923
- ></textarea>
924
- <button
925
- id="sendButton"
926
- class="send-button"
927
- ${this.isLoading?"disabled":""}
928
- onclick="sendMessage()"
929
- >
930
- Send
931
- </button>
932
- </div>
933
- <div class="input-help">
934
- Press Ctrl+Enter to send \u2022 Try: "scan for emojis" or "check my goals"
935
- </div>
936
- </div>
937
- </div>
938
- `;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`
939
- <div class="message ${t?"user-message":"assistant-message"}">
940
- <div class="message-header">
941
- <span class="message-author">${t?"You":"Trie"}</span>
942
- <span class="message-timestamp">${s}</span>
943
- </div>
944
-
945
- ${e.toolCalls?this.renderToolCalls(e.toolCalls):""}
946
-
947
- <div class="message-content">
948
- ${this.formatMessageContent(e.content)}
949
- </div>
950
-
951
- ${e.pendingFix?this.renderPendingFix(e.pendingFix):""}
952
- </div>
953
- `}renderToolCalls(e){return`
954
- <div class="tool-calls">
955
- ${e.map(t=>`
956
- <div class="tool-call">
957
- <span class="tool-name">[${t.name}]</span>
958
- <span class="tool-input">${this.formatToolInput(t.input)}</span>
959
- </div>
960
- `).join("")}
961
- </div>
962
- `}renderPendingFix(e){return`
963
- <div class="pending-fix">
964
- <div class="fix-header">
965
- <strong>\u{1F527} Fix Proposal</strong>
966
- </div>
967
- <div class="fix-details">
968
- <p><strong>\u{1F4C1} File:</strong> <code>${e.file}</code></p>
969
- <p><strong>\u{1F3AF} Goal:</strong> ${e.goal}</p>
970
- <p><strong>\u26A0\uFE0F Violation:</strong> ${e.violation}</p>
971
- ${e.suggestedFix?`<p><strong>\u{1F4A1} Suggested Fix:</strong> ${e.suggestedFix}</p>`:""}
972
- </div>
973
- <div class="fix-actions">
974
- <button class="btn btn-primary" onclick="acceptFix('${e.file}')">
975
- Accept Fix
976
- </button>
977
- <button class="btn" onclick="declineFix()">
978
- Decline
979
- </button>
980
- </div>
981
- </div>
982
- `}renderTypingIndicator(){return`
983
- <div class="message assistant-message typing">
984
- <div class="message-header">
985
- <span class="message-author">Trie</span>
986
- </div>
987
- <div class="message-content">
988
- <div class="typing-indicator">
989
- <span></span>
990
- <span></span>
991
- <span></span>
992
- </div>
993
- </div>
994
- </div>
995
- `}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.generateAIResponse(e)}catch(s){this.addErrorMessage(`Failed to get response: ${s}`)}finally{this.isLoading=!1,this.render()}}async generateAIResponse(e){try{let t=await this.buildContext(),s="",n,r,a=e.toLowerCase();a.includes("emoji")||a.includes("scan")?(n=[{name:"trie_scan_for_goal_violations",input:{}}],s=await this.executeChatTool("trie_scan_for_goal_violations",{})):a.includes("goal")||a.includes("progress")?s=t.goals||"No active goals found. You can add goals in the Goals view.":a.includes("decision")||a.includes("governance")||a.includes("ledger")?(n=[{name:"trie_get_governance",input:{limit:5}}],s=await this.executeChatTool("trie_get_governance",{limit:5})):a.includes("blocker")||a.includes("block")?(n=[{name:"trie_get_blockers",input:{limit:3}}],s=await this.executeChatTool("trie_get_blockers",{limit:3})):s=`I can help you with your codebase. Here's your current situation:
996
-
997
- ${t.goals||"No active goals configured."}
998
-
999
- ${t.nudges||"No recent goal violations."}
1000
-
1001
- Try asking me to:
1002
- \u2022 "scan for emoji violations"
1003
- \u2022 "show my goals"
1004
- \u2022 "what governance have we recorded"
1005
- \u2022 "what's blocking us"`;let p={id:`msg-${Date.now()}-assistant`,role:"assistant",content:s,timestamp:Date.now(),...n&&n.length>0?{toolCalls:n}:{},...r?{pendingFix:r}:{}};this.messages.push(p)}catch(t){this.addErrorMessage(`Failed to generate response: ${t}`)}}async buildContext(){let e={};return e.goals="Browser preview mode - goals would be loaded via MCP",e.nudges="Browser preview mode - nudges would be loaded via MCP",e.governance="Browser preview mode - governance would be loaded via MCP",e}async executeChatTool(e,t){switch(e){case"trie_scan_for_goal_violations":return"Found 3 emoji violations in chat interface. Use `trie fix` to apply auto-fixes.";case"trie_get_decisions":case"trie_get_governance":return`Recent governance:
1006
- \u2022 Decided to implement chat UI with Claude Code styling
1007
- \u2022 Fixed scrolling issue in message container
1008
- \u2022 Added proper CSS for chat layout`;case"trie_get_blockers":return`Active blockers:
1009
- \u2022 Node.js dependencies preventing browser bundle
1010
- \u2022 Need MCP client for full functionality`;default:return`Browser preview mode - ${e} would execute via MCP`}}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()}};g(c);
1011
-
1012
- </script>
1013
- </body>
1014
- </html>