@triedotdev/mcp 1.0.168 → 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 (149) hide show
  1. package/README.md +54 -500
  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 -3100
  8. package/dist/cli/main.js.map +1 -1
  9. package/dist/index.js +2 -36
  10. package/dist/index.js.map +1 -1
  11. package/dist/server/mcp-server.js +2 -36
  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-43X6JBEM.js +0 -36
  20. package/dist/chunk-43X6JBEM.js.map +0 -1
  21. package/dist/chunk-4MXH2ZPT.js +0 -1827
  22. package/dist/chunk-4MXH2ZPT.js.map +0 -1
  23. package/dist/chunk-575YT2SD.js +0 -737
  24. package/dist/chunk-575YT2SD.js.map +0 -1
  25. package/dist/chunk-5BRRRTN6.js +0 -354
  26. package/dist/chunk-5BRRRTN6.js.map +0 -1
  27. package/dist/chunk-6NLHFIYA.js +0 -344
  28. package/dist/chunk-6NLHFIYA.js.map +0 -1
  29. package/dist/chunk-7WITSO22.js +0 -824
  30. package/dist/chunk-7WITSO22.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-FQ45QP5A.js +0 -361
  38. package/dist/chunk-FQ45QP5A.js.map +0 -1
  39. package/dist/chunk-G2TGF6TR.js +0 -573
  40. package/dist/chunk-G2TGF6TR.js.map +0 -1
  41. package/dist/chunk-GTKYBOXL.js +0 -700
  42. package/dist/chunk-GTKYBOXL.js.map +0 -1
  43. package/dist/chunk-HVCDY3AK.js +0 -850
  44. package/dist/chunk-HVCDY3AK.js.map +0 -1
  45. package/dist/chunk-JVMBCWKS.js +0 -348
  46. package/dist/chunk-JVMBCWKS.js.map +0 -1
  47. package/dist/chunk-KDHN2ZQE.js +0 -313
  48. package/dist/chunk-KDHN2ZQE.js.map +0 -1
  49. package/dist/chunk-LQIMKE3P.js +0 -12524
  50. package/dist/chunk-LQIMKE3P.js.map +0 -1
  51. package/dist/chunk-ME2OERF5.js +0 -345
  52. package/dist/chunk-ME2OERF5.js.map +0 -1
  53. package/dist/chunk-MRHKX5M5.js +0 -662
  54. package/dist/chunk-MRHKX5M5.js.map +0 -1
  55. package/dist/chunk-OBQ74FOU.js +0 -27
  56. package/dist/chunk-OBQ74FOU.js.map +0 -1
  57. package/dist/chunk-OMR4YCBS.js +0 -987
  58. package/dist/chunk-OMR4YCBS.js.map +0 -1
  59. package/dist/chunk-Q5EKA5YA.js +0 -254
  60. package/dist/chunk-Q5EKA5YA.js.map +0 -1
  61. package/dist/chunk-Q63FFI6D.js +0 -132
  62. package/dist/chunk-Q63FFI6D.js.map +0 -1
  63. package/dist/chunk-SY6KQG44.js +0 -983
  64. package/dist/chunk-SY6KQG44.js.map +0 -1
  65. package/dist/chunk-T63OHG4Q.js +0 -440
  66. package/dist/chunk-T63OHG4Q.js.map +0 -1
  67. package/dist/chunk-TN5WEKWI.js +0 -173
  68. package/dist/chunk-TN5WEKWI.js.map +0 -1
  69. package/dist/chunk-VUL52BQL.js +0 -402
  70. package/dist/chunk-VUL52BQL.js.map +0 -1
  71. package/dist/chunk-VVITXIHN.js +0 -189
  72. package/dist/chunk-VVITXIHN.js.map +0 -1
  73. package/dist/chunk-WCN7S3EI.js +0 -14
  74. package/dist/chunk-WCN7S3EI.js.map +0 -1
  75. package/dist/chunk-XE6KQRKZ.js +0 -816
  76. package/dist/chunk-XE6KQRKZ.js.map +0 -1
  77. package/dist/chunk-XPZZFPBZ.js +0 -491
  78. package/dist/chunk-XPZZFPBZ.js.map +0 -1
  79. package/dist/chunk-XTFWT2XM.js +0 -727
  80. package/dist/chunk-XTFWT2XM.js.map +0 -1
  81. package/dist/chunk-YDHUCDHM.js +0 -4011
  82. package/dist/chunk-YDHUCDHM.js.map +0 -1
  83. package/dist/chunk-YZ6Y2H3P.js +0 -1289
  84. package/dist/chunk-YZ6Y2H3P.js.map +0 -1
  85. package/dist/chunk-ZJF5FTBX.js +0 -1396
  86. package/dist/chunk-ZJF5FTBX.js.map +0 -1
  87. package/dist/chunk-ZV2K6M7T.js +0 -74
  88. package/dist/chunk-ZV2K6M7T.js.map +0 -1
  89. package/dist/cli/create-agent.d.ts +0 -1
  90. package/dist/cli/create-agent.js +0 -1050
  91. package/dist/cli/create-agent.js.map +0 -1
  92. package/dist/cli/yolo-daemon.d.ts +0 -1
  93. package/dist/cli/yolo-daemon.js +0 -423
  94. package/dist/cli/yolo-daemon.js.map +0 -1
  95. package/dist/client-NJPZE5JT.js +0 -28
  96. package/dist/client-NJPZE5JT.js.map +0 -1
  97. package/dist/codebase-index-VAPF32XX.js +0 -12
  98. package/dist/codebase-index-VAPF32XX.js.map +0 -1
  99. package/dist/fast-analyzer-XXYMOXRK.js +0 -216
  100. package/dist/fast-analyzer-XXYMOXRK.js.map +0 -1
  101. package/dist/git-EO5SRFMN.js +0 -28
  102. package/dist/git-EO5SRFMN.js.map +0 -1
  103. package/dist/github-ingester-ZOKK6GRS.js +0 -11
  104. package/dist/github-ingester-ZOKK6GRS.js.map +0 -1
  105. package/dist/goal-manager-YOB7VWK7.js +0 -25
  106. package/dist/goal-manager-YOB7VWK7.js.map +0 -1
  107. package/dist/goal-validator-ULKIBDPX.js +0 -24
  108. package/dist/goal-validator-ULKIBDPX.js.map +0 -1
  109. package/dist/graph-B3NA4S7I.js +0 -10
  110. package/dist/graph-B3NA4S7I.js.map +0 -1
  111. package/dist/hypothesis-7BFFT5JY.js +0 -23
  112. package/dist/hypothesis-7BFFT5JY.js.map +0 -1
  113. package/dist/incident-index-EFNUSGWL.js +0 -11
  114. package/dist/incident-index-EFNUSGWL.js.map +0 -1
  115. package/dist/insight-store-EC4PLSAW.js +0 -22
  116. package/dist/insight-store-EC4PLSAW.js.map +0 -1
  117. package/dist/issue-store-ZIRP23EP.js +0 -36
  118. package/dist/issue-store-ZIRP23EP.js.map +0 -1
  119. package/dist/ledger-TWZTGDFA.js +0 -58
  120. package/dist/ledger-TWZTGDFA.js.map +0 -1
  121. package/dist/linear-ingester-XXPAZZRW.js +0 -11
  122. package/dist/linear-ingester-XXPAZZRW.js.map +0 -1
  123. package/dist/output-manager-RVJ37XKA.js +0 -13
  124. package/dist/output-manager-RVJ37XKA.js.map +0 -1
  125. package/dist/parse-goal-violation-SACGFG3C.js +0 -8
  126. package/dist/parse-goal-violation-SACGFG3C.js.map +0 -1
  127. package/dist/pattern-discovery-F7LU5K6E.js +0 -8
  128. package/dist/pattern-discovery-F7LU5K6E.js.map +0 -1
  129. package/dist/progress-SRQ2V3BP.js +0 -18
  130. package/dist/progress-SRQ2V3BP.js.map +0 -1
  131. package/dist/project-state-AHPA77SM.js +0 -28
  132. package/dist/project-state-AHPA77SM.js.map +0 -1
  133. package/dist/sync-M2FSWPBC.js +0 -12
  134. package/dist/sync-M2FSWPBC.js.map +0 -1
  135. package/dist/terminal-spawn-5YXDMUCF.js +0 -157
  136. package/dist/terminal-spawn-5YXDMUCF.js.map +0 -1
  137. package/dist/tiered-storage-Z3YCR465.js +0 -12
  138. package/dist/tiered-storage-Z3YCR465.js.map +0 -1
  139. package/dist/trie-agent-3YDPEGHJ.js +0 -28
  140. package/dist/trie-agent-3YDPEGHJ.js.map +0 -1
  141. package/dist/ui/chat.html +0 -1014
  142. package/dist/ui/goals.html +0 -967
  143. package/dist/ui/hypotheses.html +0 -1011
  144. package/dist/ui/ledger.html +0 -954
  145. package/dist/ui/nudges.html +0 -995
  146. package/dist/vibe-code-signatures-F6URTBW3.js +0 -16
  147. package/dist/vibe-code-signatures-F6URTBW3.js.map +0 -1
  148. package/dist/vulnerability-signatures-T7SKHORW.js +0 -18
  149. package/dist/vulnerability-signatures-T7SKHORW.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>