clay-server 5.2.0-beta.2 → 5.2.0-beta.4

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 (205) hide show
  1. package/lib/builtin-mates.js +2 -2
  2. package/lib/bundled-skills/clay-agent-browser/SKILL.md +6 -2
  3. package/lib/dm-digest-cursor.js +120 -0
  4. package/lib/knowledge-db-import-validation.js +46 -0
  5. package/lib/knowledge-db-import.js +98 -0
  6. package/lib/knowledge-db-service.js +18 -30
  7. package/lib/knowledge-db-storage-nedb-maintenance.js +99 -0
  8. package/lib/knowledge-db-storage-nedb.js +66 -0
  9. package/lib/knowledge-db-storage.js +72 -0
  10. package/lib/knowledge-db-validation.js +0 -0
  11. package/lib/knowledge-file-store.js +7 -1
  12. package/lib/mate-avatar-catalog.js +12 -0
  13. package/lib/mate-avatar-migration.js +41 -0
  14. package/lib/mate-knowledge-mate-bound.js +53 -0
  15. package/lib/mate-knowledge-mcp-server.js +55 -8
  16. package/lib/mate-knowledge-service.js +9 -30
  17. package/lib/mate-knowledge-text-tools.js +106 -0
  18. package/lib/mates.js +14 -3
  19. package/lib/mcp-agent-tools.js +117 -0
  20. package/lib/mcp-connection-store.js +119 -15
  21. package/lib/mcp-import-credentials.js +31 -0
  22. package/lib/mcp-local-transport.js +13 -0
  23. package/lib/mcp-oauth.js +8 -6
  24. package/lib/mcp-query-bridge.js +30 -0
  25. package/lib/mcp-remote-connections.js +74 -20
  26. package/lib/mcp-source-adapters.js +91 -0
  27. package/lib/mcp-source-context.js +42 -0
  28. package/lib/mcp-source-discovery.js +169 -0
  29. package/lib/mcp-source-plugins.js +68 -0
  30. package/lib/mcp-source-restrictions.js +47 -0
  31. package/lib/mcp-tool-policy.js +34 -0
  32. package/lib/project-ask-user.js +6 -4
  33. package/lib/project-debate.js +1 -0
  34. package/lib/project-mate-interaction.js +40 -62
  35. package/lib/project-mcp.js +54 -16
  36. package/lib/project-session-document.js +8 -3
  37. package/lib/project-session-github.js +16 -7
  38. package/lib/project-session-linear.js +14 -6
  39. package/lib/project-session-notes.js +7 -3
  40. package/lib/project-sessions.js +6 -2
  41. package/lib/project-shared-browser.js +56 -12
  42. package/lib/project.js +49 -34
  43. package/lib/public/app.js +5 -0
  44. package/lib/public/appearance-bootstrap.js +14 -0
  45. package/lib/public/css/clay-workspace.css +29 -0
  46. package/lib/public/css/home-debate-planning.css +2 -0
  47. package/lib/public/css/mate-avatar-gallery.css +12 -0
  48. package/lib/public/css/mate-conversation.css +10 -5
  49. package/lib/public/css/session-github.css +43 -1
  50. package/lib/public/css/shared-browser.css +35 -1
  51. package/lib/public/index.html +10 -4
  52. package/lib/public/mate-avatars/B01.png +0 -0
  53. package/lib/public/mate-avatars/B02.png +0 -0
  54. package/lib/public/mate-avatars/B03.png +0 -0
  55. package/lib/public/mate-avatars/B04.png +0 -0
  56. package/lib/public/mate-avatars/B05.png +0 -0
  57. package/lib/public/mate-avatars/B06.png +0 -0
  58. package/lib/public/mate-avatars/B07.png +0 -0
  59. package/lib/public/mate-avatars/B08.png +0 -0
  60. package/lib/public/mate-avatars/B09.png +0 -0
  61. package/lib/public/mate-avatars/B10.png +0 -0
  62. package/lib/public/mate-avatars/B11.png +0 -0
  63. package/lib/public/mate-avatars/B12.png +0 -0
  64. package/lib/public/mate-avatars/B13.png +0 -0
  65. package/lib/public/mate-avatars/B14.png +0 -0
  66. package/lib/public/mate-avatars/B15.png +0 -0
  67. package/lib/public/mate-avatars/B16.png +0 -0
  68. package/lib/public/mate-avatars/B17.png +0 -0
  69. package/lib/public/mate-avatars/B18.png +0 -0
  70. package/lib/public/mate-avatars/B19.png +0 -0
  71. package/lib/public/mate-avatars/B20.png +0 -0
  72. package/lib/public/mate-avatars/B21.png +0 -0
  73. package/lib/public/mate-avatars/B22.png +0 -0
  74. package/lib/public/mate-avatars/B23.png +0 -0
  75. package/lib/public/mate-avatars/B24.png +0 -0
  76. package/lib/public/mate-avatars/B25.png +0 -0
  77. package/lib/public/mate-avatars/B26.png +0 -0
  78. package/lib/public/mate-avatars/B27.png +0 -0
  79. package/lib/public/mate-avatars/B28.png +0 -0
  80. package/lib/public/mate-avatars/B29.png +0 -0
  81. package/lib/public/mate-avatars/B30.png +0 -0
  82. package/lib/public/mate-avatars/B31.png +0 -0
  83. package/lib/public/mate-avatars/B32.png +0 -0
  84. package/lib/public/mate-avatars/B33.png +0 -0
  85. package/lib/public/mate-avatars/B34.png +0 -0
  86. package/lib/public/mate-avatars/B35.png +0 -0
  87. package/lib/public/mate-avatars/B36.png +0 -0
  88. package/lib/public/mate-avatars/B37.png +0 -0
  89. package/lib/public/mate-avatars/B38.png +0 -0
  90. package/lib/public/mate-avatars/B39.png +0 -0
  91. package/lib/public/mate-avatars/B40.png +0 -0
  92. package/lib/public/mate-avatars/B41.png +0 -0
  93. package/lib/public/mate-avatars/B42.png +0 -0
  94. package/lib/public/mate-avatars/B43.png +0 -0
  95. package/lib/public/mate-avatars/B44.png +0 -0
  96. package/lib/public/mate-avatars/B45.png +0 -0
  97. package/lib/public/mate-avatars/B46.png +0 -0
  98. package/lib/public/mate-avatars/B47.png +0 -0
  99. package/lib/public/mate-avatars/B48.png +0 -0
  100. package/lib/public/mate-avatars/C01.png +0 -0
  101. package/lib/public/mate-avatars/C02.png +0 -0
  102. package/lib/public/mate-avatars/C03.png +0 -0
  103. package/lib/public/mate-avatars/C04.png +0 -0
  104. package/lib/public/mate-avatars/C05.png +0 -0
  105. package/lib/public/mate-avatars/C06.png +0 -0
  106. package/lib/public/mate-avatars/C07.png +0 -0
  107. package/lib/public/mate-avatars/C08.png +0 -0
  108. package/lib/public/mate-avatars/C09.png +0 -0
  109. package/lib/public/mate-avatars/C10.png +0 -0
  110. package/lib/public/mate-avatars/C11.png +0 -0
  111. package/lib/public/mate-avatars/C12.png +0 -0
  112. package/lib/public/mate-avatars/C13.png +0 -0
  113. package/lib/public/mate-avatars/C14.png +0 -0
  114. package/lib/public/mate-avatars/C15.png +0 -0
  115. package/lib/public/mate-avatars/C16.png +0 -0
  116. package/lib/public/mate-avatars/C17.png +0 -0
  117. package/lib/public/mate-avatars/C18.png +0 -0
  118. package/lib/public/mate-avatars/C19.png +0 -0
  119. package/lib/public/mate-avatars/C20.png +0 -0
  120. package/lib/public/mate-avatars/C21.png +0 -0
  121. package/lib/public/mate-avatars/C22.png +0 -0
  122. package/lib/public/mate-avatars/C23.png +0 -0
  123. package/lib/public/mate-avatars/C24.png +0 -0
  124. package/lib/public/mate-avatars/C25.png +0 -0
  125. package/lib/public/mate-avatars/C26.png +0 -0
  126. package/lib/public/mate-avatars/C27.png +0 -0
  127. package/lib/public/mate-avatars/C28.png +0 -0
  128. package/lib/public/mate-avatars/C29.png +0 -0
  129. package/lib/public/mate-avatars/C30.png +0 -0
  130. package/lib/public/mate-avatars/C31.png +0 -0
  131. package/lib/public/mate-avatars/C32.png +0 -0
  132. package/lib/public/mate-avatars/C33.png +0 -0
  133. package/lib/public/mate-avatars/C34.png +0 -0
  134. package/lib/public/mate-avatars/C35.png +0 -0
  135. package/lib/public/mate-avatars/C36.png +0 -0
  136. package/lib/public/mate-avatars/C37.png +0 -0
  137. package/lib/public/mate-avatars/C38.png +0 -0
  138. package/lib/public/mate-avatars/C39.png +0 -0
  139. package/lib/public/mate-avatars/C40.png +0 -0
  140. package/lib/public/mate-avatars/C41.png +0 -0
  141. package/lib/public/mate-avatars/C42.png +0 -0
  142. package/lib/public/mate-avatars/C43.png +0 -0
  143. package/lib/public/mate-avatars/C44.png +0 -0
  144. package/lib/public/mate-avatars/C45.png +0 -0
  145. package/lib/public/mate-avatars/C46.png +0 -0
  146. package/lib/public/mate-avatars/C47.png +0 -0
  147. package/lib/public/mate-avatars/C48.png +0 -0
  148. package/lib/public/mate-avatars/catalog.json +482 -0
  149. package/lib/public/mate-avatars/lead-clay.png +0 -0
  150. package/lib/public/modules/app-message-router.js +4 -0
  151. package/lib/public/modules/app-messages.js +13 -2
  152. package/lib/public/modules/app-rendering.js +1 -1
  153. package/lib/public/modules/avatar.js +15 -41
  154. package/lib/public/modules/chat-render-runtime.js +10 -1
  155. package/lib/public/modules/clay-browser-links.js +47 -0
  156. package/lib/public/modules/clay-log-links.js +1 -1
  157. package/lib/public/modules/command-palette.js +1 -1
  158. package/lib/public/modules/debate.js +1 -0
  159. package/lib/public/modules/history-replay-batch.js +5 -1
  160. package/lib/public/modules/home-debate-live.js +2 -0
  161. package/lib/public/modules/home-debate-planning.js +7 -7
  162. package/lib/public/modules/home-mate-avatar-editor.js +127 -208
  163. package/lib/public/modules/home-mate-chat.js +6 -6
  164. package/lib/public/modules/home-mate-settings.js +19 -12
  165. package/lib/public/modules/markdown.js +4 -0
  166. package/lib/public/modules/mate-avatar-catalog.js +97 -0
  167. package/lib/public/modules/mate-management.js +40 -7
  168. package/lib/public/modules/mcp-connection-view.js +31 -13
  169. package/lib/public/modules/mcp-discovery-view.js +31 -0
  170. package/lib/public/modules/mcp-ui.js +23 -4
  171. package/lib/public/modules/mention.js +3 -0
  172. package/lib/public/modules/pane-browser-bridge.js +20 -0
  173. package/lib/public/modules/profile.js +1 -238
  174. package/lib/public/modules/project-mate-navigation.js +99 -14
  175. package/lib/public/modules/search-clay-chat.js +16 -2
  176. package/lib/public/modules/session-github.js +23 -9
  177. package/lib/public/modules/session-work-primary.js +51 -0
  178. package/lib/public/modules/shared-browser-settings.js +112 -0
  179. package/lib/public/modules/shared-browser-tabs.js +13 -3
  180. package/lib/public/modules/shared-browser.js +27 -6
  181. package/lib/public/modules/split-view.js +2 -0
  182. package/lib/public/modules/theme.js +8 -1
  183. package/lib/public/modules/tools.js +2 -1
  184. package/lib/public/style.css +1 -0
  185. package/lib/public/sw.js +3 -1
  186. package/lib/sdk-bridge.js +9 -3
  187. package/lib/server-appearance-settings.js +13 -1
  188. package/lib/server-dm.js +1 -0
  189. package/lib/server-home-chat-events.js +14 -4
  190. package/lib/server-home-chat.js +10 -2
  191. package/lib/server-home-mcp-consent.js +14 -0
  192. package/lib/server-mates.js +6 -1
  193. package/lib/server-settings.js +4 -1
  194. package/lib/server.js +45 -12
  195. package/lib/session-work-primary.js +50 -0
  196. package/lib/sessions.js +3 -0
  197. package/lib/shared-browser-cookie-sync.js +32 -0
  198. package/lib/shared-browser-cookies.js +79 -0
  199. package/lib/shared-browser-runtime.js +25 -9
  200. package/lib/shared-browser-storage-sync.js +43 -0
  201. package/lib/shared-browser-storage.js +101 -0
  202. package/lib/shared-browser-tools.js +2 -1
  203. package/lib/shared-browser-worker.js +46 -10
  204. package/lib/yoke/acp-agent-profiles.js +2 -2
  205. package/package.json +5 -1
@@ -0,0 +1,482 @@
1
+ [
2
+ {
3
+ "id": "B01",
4
+ "family": "B",
5
+ "name": "Indigo Cyclops"
6
+ },
7
+ {
8
+ "id": "B02",
9
+ "family": "B",
10
+ "name": "Coral Sentinel"
11
+ },
12
+ {
13
+ "id": "B03",
14
+ "family": "B",
15
+ "name": "Golden Visor"
16
+ },
17
+ {
18
+ "id": "B04",
19
+ "family": "B",
20
+ "name": "Mint Wide Eyes"
21
+ },
22
+ {
23
+ "id": "B05",
24
+ "family": "B",
25
+ "name": "Ivory Grin"
26
+ },
27
+ {
28
+ "id": "B06",
29
+ "family": "B",
30
+ "name": "Blue Teardrop"
31
+ },
32
+ {
33
+ "id": "B07",
34
+ "family": "B",
35
+ "name": "Peach Orbit"
36
+ },
37
+ {
38
+ "id": "B08",
39
+ "family": "B",
40
+ "name": "Lilac Sleeper"
41
+ },
42
+ {
43
+ "id": "B09",
44
+ "family": "B",
45
+ "name": "Coral Prism"
46
+ },
47
+ {
48
+ "id": "B10",
49
+ "family": "B",
50
+ "name": "Mint Spring"
51
+ },
52
+ {
53
+ "id": "B11",
54
+ "family": "B",
55
+ "name": "Golden Pebbles"
56
+ },
57
+ {
58
+ "id": "B12",
59
+ "family": "B",
60
+ "name": "Periwinkle Orbit"
61
+ },
62
+ {
63
+ "id": "B13",
64
+ "family": "B",
65
+ "name": "Coral Horizon"
66
+ },
67
+ {
68
+ "id": "B14",
69
+ "family": "B",
70
+ "name": "Indigo Stack"
71
+ },
72
+ {
73
+ "id": "B15",
74
+ "family": "B",
75
+ "name": "Mint Button Box"
76
+ },
77
+ {
78
+ "id": "B16",
79
+ "family": "B",
80
+ "name": "Golden Curve"
81
+ },
82
+ {
83
+ "id": "B17",
84
+ "family": "B",
85
+ "name": "Loop Listener"
86
+ },
87
+ {
88
+ "id": "B18",
89
+ "family": "B",
90
+ "name": "Blue Twin Antenna"
91
+ },
92
+ {
93
+ "id": "B19",
94
+ "family": "B",
95
+ "name": "Lilac Daydream"
96
+ },
97
+ {
98
+ "id": "B20",
99
+ "family": "B",
100
+ "name": "Coral Toothsome"
101
+ },
102
+ {
103
+ "id": "B21",
104
+ "family": "B",
105
+ "name": "Ivory Satellite"
106
+ },
107
+ {
108
+ "id": "B22",
109
+ "family": "B",
110
+ "name": "Mint Coil"
111
+ },
112
+ {
113
+ "id": "B23",
114
+ "family": "B",
115
+ "name": "Golden Wonder"
116
+ },
117
+ {
118
+ "id": "B24",
119
+ "family": "B",
120
+ "name": "Slate Smile"
121
+ },
122
+ {
123
+ "id": "B25",
124
+ "family": "B",
125
+ "name": "Lilac Shield"
126
+ },
127
+ {
128
+ "id": "B26",
129
+ "family": "B",
130
+ "name": "Mint Diamond"
131
+ },
132
+ {
133
+ "id": "B27",
134
+ "family": "B",
135
+ "name": "Coral Pebble"
136
+ },
137
+ {
138
+ "id": "B28",
139
+ "family": "B",
140
+ "name": "Golden Horns"
141
+ },
142
+ {
143
+ "id": "B29",
144
+ "family": "B",
145
+ "name": "Blue Trio"
146
+ },
147
+ {
148
+ "id": "B30",
149
+ "family": "B",
150
+ "name": "Ivory Tower"
151
+ },
152
+ {
153
+ "id": "B31",
154
+ "family": "B",
155
+ "name": "Charcoal Grin"
156
+ },
157
+ {
158
+ "id": "B32",
159
+ "family": "B",
160
+ "name": "Teal Cheer"
161
+ },
162
+ {
163
+ "id": "B33",
164
+ "family": "B",
165
+ "name": "Rose Satellite"
166
+ },
167
+ {
168
+ "id": "B34",
169
+ "family": "B",
170
+ "name": "Blue Spool"
171
+ },
172
+ {
173
+ "id": "B35",
174
+ "family": "B",
175
+ "name": "Golden Band"
176
+ },
177
+ {
178
+ "id": "B36",
179
+ "family": "B",
180
+ "name": "Mint Beacon"
181
+ },
182
+ {
183
+ "id": "B37",
184
+ "family": "B",
185
+ "name": "Charcoal Crescent"
186
+ },
187
+ {
188
+ "id": "B38",
189
+ "family": "B",
190
+ "name": "Coral Cyclops"
191
+ },
192
+ {
193
+ "id": "B39",
194
+ "family": "B",
195
+ "name": "Blue Scout"
196
+ },
197
+ {
198
+ "id": "B40",
199
+ "family": "B",
200
+ "name": "Ivory Navigator"
201
+ },
202
+ {
203
+ "id": "B41",
204
+ "family": "B",
205
+ "name": "Golden Porthole"
206
+ },
207
+ {
208
+ "id": "B42",
209
+ "family": "B",
210
+ "name": "Lilac Windup"
211
+ },
212
+ {
213
+ "id": "B43",
214
+ "family": "B",
215
+ "name": "Mint Receiver"
216
+ },
217
+ {
218
+ "id": "B44",
219
+ "family": "B",
220
+ "name": "Coral Stack"
221
+ },
222
+ {
223
+ "id": "B45",
224
+ "family": "B",
225
+ "name": "Indigo Porthole"
226
+ },
227
+ {
228
+ "id": "B46",
229
+ "family": "B",
230
+ "name": "Stone Sprout"
231
+ },
232
+ {
233
+ "id": "B47",
234
+ "family": "B",
235
+ "name": "Mint Sunbeam"
236
+ },
237
+ {
238
+ "id": "B48",
239
+ "family": "B",
240
+ "name": "Golden Cubby"
241
+ },
242
+ {
243
+ "id": "C01",
244
+ "family": "C",
245
+ "name": "Violet Smile"
246
+ },
247
+ {
248
+ "id": "C02",
249
+ "family": "C",
250
+ "name": "Apricot Joy"
251
+ },
252
+ {
253
+ "id": "C03",
254
+ "family": "C",
255
+ "name": "Sage Curious"
256
+ },
257
+ {
258
+ "id": "C04",
259
+ "family": "C",
260
+ "name": "Golden Wink"
261
+ },
262
+ {
263
+ "id": "C05",
264
+ "family": "C",
265
+ "name": "Blue Sideglance"
266
+ },
267
+ {
268
+ "id": "C06",
269
+ "family": "C",
270
+ "name": "Charcoal Wonder"
271
+ },
272
+ {
273
+ "id": "C07",
274
+ "family": "C",
275
+ "name": "Lilac Specs"
276
+ },
277
+ {
278
+ "id": "C08",
279
+ "family": "C",
280
+ "name": "Coral Giggle"
281
+ },
282
+ {
283
+ "id": "C09",
284
+ "family": "C",
285
+ "name": "Mint Blush"
286
+ },
287
+ {
288
+ "id": "C10",
289
+ "family": "C",
290
+ "name": "Golden Button"
291
+ },
292
+ {
293
+ "id": "C11",
294
+ "family": "C",
295
+ "name": "Sky Smile"
296
+ },
297
+ {
298
+ "id": "C12",
299
+ "family": "C",
300
+ "name": "Plum Joy"
301
+ },
302
+ {
303
+ "id": "C13",
304
+ "family": "C",
305
+ "name": "Teal Diamond"
306
+ },
307
+ {
308
+ "id": "C14",
309
+ "family": "C",
310
+ "name": "Peach Dimple"
311
+ },
312
+ {
313
+ "id": "C15",
314
+ "family": "C",
315
+ "name": "Indigo Delight"
316
+ },
317
+ {
318
+ "id": "C16",
319
+ "family": "C",
320
+ "name": "Sage Sprout"
321
+ },
322
+ {
323
+ "id": "C17",
324
+ "family": "C",
325
+ "name": "Golden Specs"
326
+ },
327
+ {
328
+ "id": "C18",
329
+ "family": "C",
330
+ "name": "Lilac Stargaze"
331
+ },
332
+ {
333
+ "id": "C19",
334
+ "family": "C",
335
+ "name": "Blue Curiosity"
336
+ },
337
+ {
338
+ "id": "C20",
339
+ "family": "C",
340
+ "name": "Coral Heart"
341
+ },
342
+ {
343
+ "id": "C21",
344
+ "family": "C",
345
+ "name": "Mint Bud"
346
+ },
347
+ {
348
+ "id": "C22",
349
+ "family": "C",
350
+ "name": "Ivory Surprise"
351
+ },
352
+ {
353
+ "id": "C23",
354
+ "family": "C",
355
+ "name": "Rose Wink"
356
+ },
357
+ {
358
+ "id": "C24",
359
+ "family": "C",
360
+ "name": "Sky Giggle"
361
+ },
362
+ {
363
+ "id": "C25",
364
+ "family": "C",
365
+ "name": "Ivory Dreamer"
366
+ },
367
+ {
368
+ "id": "C26",
369
+ "family": "C",
370
+ "name": "Mint Loop"
371
+ },
372
+ {
373
+ "id": "C27",
374
+ "family": "C",
375
+ "name": "Violet Glasses"
376
+ },
377
+ {
378
+ "id": "C28",
379
+ "family": "C",
380
+ "name": "Coral Sunshine"
381
+ },
382
+ {
383
+ "id": "C29",
384
+ "family": "C",
385
+ "name": "Slate Sideglance"
386
+ },
387
+ {
388
+ "id": "C30",
389
+ "family": "C",
390
+ "name": "Golden Dimple"
391
+ },
392
+ {
393
+ "id": "C31",
394
+ "family": "C",
395
+ "name": "Teal Listener"
396
+ },
397
+ {
398
+ "id": "C32",
399
+ "family": "C",
400
+ "name": "Peach Cheer"
401
+ },
402
+ {
403
+ "id": "C33",
404
+ "family": "C",
405
+ "name": "Indigo Blush"
406
+ },
407
+ {
408
+ "id": "C34",
409
+ "family": "C",
410
+ "name": "Sage Daydream"
411
+ },
412
+ {
413
+ "id": "C35",
414
+ "family": "C",
415
+ "name": "Rose Wonder"
416
+ },
417
+ {
418
+ "id": "C36",
419
+ "family": "C",
420
+ "name": "Sky Blush"
421
+ },
422
+ {
423
+ "id": "C37",
424
+ "family": "C",
425
+ "name": "Peach Heart"
426
+ },
427
+ {
428
+ "id": "C38",
429
+ "family": "C",
430
+ "name": "Blue Button"
431
+ },
432
+ {
433
+ "id": "C39",
434
+ "family": "C",
435
+ "name": "Lilac Wink"
436
+ },
437
+ {
438
+ "id": "C40",
439
+ "family": "C",
440
+ "name": "Mint Dish"
441
+ },
442
+ {
443
+ "id": "C41",
444
+ "family": "C",
445
+ "name": "Ivory Wonder"
446
+ },
447
+ {
448
+ "id": "C42",
449
+ "family": "C",
450
+ "name": "Violet Cheer"
451
+ },
452
+ {
453
+ "id": "C43",
454
+ "family": "C",
455
+ "name": "Rose Specs"
456
+ },
457
+ {
458
+ "id": "C44",
459
+ "family": "C",
460
+ "name": "Teal Delight"
461
+ },
462
+ {
463
+ "id": "C45",
464
+ "family": "C",
465
+ "name": "Golden Diamond"
466
+ },
467
+ {
468
+ "id": "C46",
469
+ "family": "C",
470
+ "name": "Lilac Surprise"
471
+ },
472
+ {
473
+ "id": "C47",
474
+ "family": "C",
475
+ "name": "Sage Listener"
476
+ },
477
+ {
478
+ "id": "C48",
479
+ "family": "C",
480
+ "name": "Coral Crown"
481
+ }
482
+ ]
@@ -58,6 +58,10 @@ export function handleHomeProtocolMessage(msg) {
58
58
  handleHomeDebateTranscript(msg);
59
59
  return true;
60
60
  }
61
+ if (msg.type === "home_mcp_import_question" || msg.type === "home_mcp_import_question_resolved") {
62
+ if (!handleSearchClayMessage(msg)) handleHomeDebateTranscript(msg);
63
+ return true;
64
+ }
61
65
  if (msg.type === "home_debate_question" || msg.type === "home_debate_question_resolved" || msg.type === "home_debate_event") {
62
66
  handleHomeDebateTranscript(msg);
63
67
  return true;
@@ -8,6 +8,7 @@ import { refreshProjectAssistantIdentities } from './project-chat-identity.js';
8
8
  import { handleLinearResult } from './linear-panel.js';
9
9
  import { handleSharedBrowserMessage } from './shared-browser.js';
10
10
  import { openWireframe } from './wireframe-workbench.js';
11
+ import { handlePrimaryWorkResult } from './session-work-primary.js';
11
12
  import { syncGithubSessions } from './session-github.js';
12
13
  import { handleIssuesMessageInContext as handleIssuesMessage } from './issues-context.js';
13
14
  // app-messages.js - WebSocket message router
@@ -204,7 +205,7 @@ export function processMessage(msg) {
204
205
  if (readyMatch) {
205
206
  var newName = readyMatch[1].trim();
206
207
  store.get('dmTargetUser').displayName = newName;
207
- updateMateSidebarProfile({ profile: { displayName: newName, avatarColor: store.get('dmTargetUser').avatarColor, avatarStyle: store.get('dmTargetUser').avatarStyle, avatarSeed: store.get('dmTargetUser').avatarSeed } });
208
+ updateMateSidebarProfile({ profile: { displayName: newName, avatarCatalogId: store.get('dmTargetUser').avatarCatalogId, avatarColor: store.get('dmTargetUser').avatarColor, avatarStyle: store.get('dmTargetUser').avatarStyle, avatarSeed: store.get('dmTargetUser').avatarSeed } });
208
209
  if (getWs() && getWs().readyState === 1) {
209
210
  getWs().send(JSON.stringify({
210
211
  type: "mate_update",
@@ -224,7 +225,8 @@ export function processMessage(msg) {
224
225
  }
225
226
  }
226
227
 
227
- store.set({ currentHistoryIndex: Number.isSafeInteger(msg._historyIndex) && msg._historyIndex >= 0 ? msg._historyIndex : null });
228
+ store.set({ currentHistoryIndex: Number.isSafeInteger(msg._historyIndex) && msg._historyIndex >= 0 ? msg._historyIndex : null,
229
+ currentHistoryIndexes: Array.isArray(msg._historyIndexes) ? msg._historyIndexes : null });
228
230
  switch (msg.type) {
229
231
  case "message_ack":
230
232
  var acknowledgedEntry = acknowledgeMessage(msg.clientMessageId);
@@ -858,6 +860,9 @@ export function processMessage(msg) {
858
860
  handleRemoteSelection(msg);
859
861
  break;
860
862
 
863
+ case "session_work_primary_result":
864
+ handlePrimaryWorkResult(msg);
865
+ break;
861
866
  case "linear_result":
862
867
  handleLinearResult(msg);
863
868
  break;
@@ -1274,6 +1279,11 @@ export function processMessage(msg) {
1274
1279
  renderGeneratedImage(msg);
1275
1280
  break;
1276
1281
 
1282
+ case 'mcp_import_consent_expired':
1283
+ markAskUserAnswered(msg.toolId, { 0: msg.error || 'No import was approved.' });
1284
+ stopUrgentBlink();
1285
+ break;
1286
+
1277
1287
  case "ask_user_answered":
1278
1288
  markAskUserAnswered(msg.toolId, msg.answers);
1279
1289
  stopUrgentBlink();
@@ -1959,6 +1969,7 @@ export function processMessage(msg) {
1959
1969
  // Sync dmTargetUser so subsequent renders use fresh data
1960
1970
  var mp2 = msg.mate.profile || {};
1961
1971
  store.get('dmTargetUser').displayName = mp2.displayName || msg.mate.name || store.get('dmTargetUser').displayName;
1972
+ store.get('dmTargetUser').avatarCatalogId = mp2.avatarCatalogId || '';
1962
1973
  store.get('dmTargetUser').avatarStyle = mp2.avatarStyle || store.get('dmTargetUser').avatarStyle;
1963
1974
  store.get('dmTargetUser').avatarSeed = mp2.avatarSeed || store.get('dmTargetUser').avatarSeed;
1964
1975
  store.get('dmTargetUser').avatarColor = mp2.avatarColor || store.get('dmTargetUser').avatarColor;
@@ -45,7 +45,7 @@ export function addCopyHandler(msgEl, rawText) {
45
45
 
46
46
  export function appendDelta(text) {
47
47
  var assistantEl = ensureAssistantBlock();
48
- if (store.get('replayingHistory')) addHistoryIndex(assistantEl, store.get('currentHistoryIndex'));
48
+ if (store.get('replayingHistory')) addHistoryIndex(assistantEl, store.get('currentHistoryIndexes') || store.get('currentHistoryIndex'));
49
49
  streamBuffer += text;
50
50
  if (store.get('replayingHistory')) {
51
51
  store.set({ currentFullText: store.get('currentFullText') + streamBuffer });
@@ -1,37 +1,11 @@
1
1
  // Centralized local avatar URL builder for people and Mates.
2
- import { imprintDataUrl, mateMarkDataUrl } from './avatar-imprint.js';
3
-
4
- var mateMarkCache = new Map();
5
-
6
- // Historical DiceBear 9.x choices, now generated by Clay's local server.
7
- export var MATE_AVATAR_STYLES = [
8
- { id: 'thumbs', name: 'Thumbs' },
9
- { id: 'bottts', name: 'Bots' },
10
- { id: 'pixel-art', name: 'Pixel' },
11
- { id: 'adventurer', name: 'Adventurer' },
12
- { id: 'micah', name: 'Micah' },
13
- { id: 'fun-emoji', name: 'Emoji' },
14
- { id: 'icons', name: 'Icons' },
15
- ];
2
+ import { imprintDataUrl } from './avatar-imprint.js';
16
3
 
17
4
  export function avatarUrl(style, seed, size) {
18
5
  // Legacy user styles remain part of the seed identity, never the artwork.
19
6
  return imprintDataUrl({ style: style || 'imprint', seed: seed || 'anonymous', size: size || 64 });
20
7
  }
21
8
 
22
- export function mateStyleAvatarUrl(style, seed, size) {
23
- var normalizedStyle = style || 'imprint';
24
- var normalizedSeed = seed || 'anonymous';
25
- var normalizedSize = size || 64;
26
- var isHistorical = MATE_AVATAR_STYLES.some(function (entry) { return entry.id === normalizedStyle; });
27
- if (isHistorical) {
28
- return '/api/generated-avatar?style=' + encodeURIComponent(normalizedStyle)
29
- + '&seed=' + encodeURIComponent(normalizedSeed)
30
- + '&size=' + encodeURIComponent(normalizedSize);
31
- }
32
- return imprintDataUrl({ style: normalizedStyle, seed: normalizedSeed, size: normalizedSize });
33
- }
34
-
35
9
  // Use the same bounded account identity for fresh fallbacks across every surface.
36
10
  export function userAvatarSeed(user) {
37
11
  var profile = user && user.profile ? user.profile : user;
@@ -48,24 +22,24 @@ export function userAvatarUrl(user, size) {
48
22
  return avatarUrl(style, userAvatarSeed(user), size);
49
23
  }
50
24
 
51
- export function mateMarkUrl(seed, size) {
52
- var cacheKey = [seed || 'mate', size || 64].join('|');
53
- if (mateMarkCache.has(cacheKey)) return mateMarkCache.get(cacheKey);
54
- var url = mateMarkDataUrl({ seed: seed || 'mate', size: size || 64 });
55
- if (mateMarkCache.size >= 256) mateMarkCache.delete(mateMarkCache.keys().next().value);
56
- mateMarkCache.set(cacheKey, url);
57
- return url;
25
+ function mappedMateAvatarId(mate) {
26
+ var p = mate.profile || mate;
27
+ var key = JSON.stringify([mate.id || '', p.avatarStyle || 'imprint', p.avatarSeed || mate.id || p.displayName || mate.name || 'Mate']);
28
+ var hash = 2166136261;
29
+ for (var i = 0; i < key.length; i++) hash = Math.imul(hash ^ key.charCodeAt(i), 16777619) >>> 0;
30
+ var index = hash % 96;
31
+ return (index < 48 ? 'B' : 'C') + String(index % 48 + 1).padStart(2, '0');
32
+ }
33
+
34
+ export function mateCatalogAvatarUrl(id) {
35
+ if (id === 'lead-clay') return '/mate-avatars/lead-clay.png?v=4';
36
+ return typeof id === 'string' && /^[BC](0[1-9]|[1-3][0-9]|4[0-8])$/.test(id) ? '/mate-avatars/' + id + '.png?v=4' : '';
58
37
  }
59
38
 
60
39
  // Build avatar URL for a mate object, preferring custom avatar if set.
61
40
  export function mateAvatarUrl(mate, size) {
62
- if (!mate) return mateMarkUrl('mate', size);
41
+ if (!mate) return mateCatalogAvatarUrl('B01');
63
42
  var p = mate.profile || mate;
64
43
  if (p.avatarCustom || mate.avatarCustom) return p.avatarCustom || mate.avatarCustom;
65
- var identity = p.displayName || mate.name || mate.displayName || 'Mate';
66
- var style = p.avatarStyle || mate.avatarStyle || 'imprint';
67
- if (style !== 'imprint' && style !== 'initial') {
68
- return mateStyleAvatarUrl(style, p.avatarSeed || mate.avatarSeed || mate.id || identity, size);
69
- }
70
- return mateMarkUrl(identity, size);
44
+ return mateCatalogAvatarUrl(p.avatarCatalogId) || mateCatalogAvatarUrl(mate.builtinKey === 'clay' ? 'lead-clay' : mappedMateAvatarId(mate));
71
45
  }
@@ -155,13 +155,22 @@ export function setIsUserScrolledUp(value) { isUserScrolledUp = value; }
155
155
 
156
156
  export function addToMessages(element) {
157
157
  var messagesEl = getMessagesEl();
158
- addHistoryIndex(element, store.get('currentHistoryIndex'));
158
+ addHistoryIndex(element, store.get('currentHistoryIndexes') || store.get('currentHistoryIndex'));
159
159
  if (prependAnchor) messagesEl.insertBefore(element, prependAnchor);
160
160
  else messagesEl.appendChild(element);
161
161
  keepActiveThinkingAtTail();
162
162
  }
163
163
 
164
164
  export function addHistoryIndex(element, historyIndex) {
165
+ if (Array.isArray(historyIndex)) {
166
+ if (!element) return;
167
+ var indexes = new Set((element.dataset.historyIndexes || "").split(",").filter(Boolean));
168
+ for (var i = 0; i < historyIndex.length; i++) {
169
+ if (Number.isSafeInteger(historyIndex[i]) && historyIndex[i] >= 0) indexes.add(String(historyIndex[i]));
170
+ }
171
+ element.dataset.historyIndexes = Array.from(indexes).join(",");
172
+ return;
173
+ }
165
174
  if (!element || !Number.isSafeInteger(historyIndex) || historyIndex < 0) return;
166
175
  var existing = element.dataset.historyIndexes || "";
167
176
  if (existing.split(",").indexOf(String(historyIndex)) !== -1) return;