clay-server 5.2.0-beta.3 → 5.2.0-beta.5

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 (339) hide show
  1. package/lib/account-auth-socket.js +1 -0
  2. package/lib/builtin-mates.js +19 -16
  3. package/lib/bundled-skills/clay-agent-browser/SKILL.md +6 -2
  4. package/lib/canonical-clay-record-authority.js +15 -0
  5. package/lib/canonical-clay-scheduling-authority.js +19 -0
  6. package/lib/claude-hook-installer.js +28 -0
  7. package/lib/clay-mate-chat-receipts.js +26 -0
  8. package/lib/clay-mate-chat.js +87 -0
  9. package/lib/clay-mate-knowledge-input.js +26 -0
  10. package/lib/clay-mate-knowledge.js +95 -0
  11. package/lib/clay-mate-lifecycle.js +95 -0
  12. package/lib/clay-product-control-input.js +33 -0
  13. package/lib/clay-product-control-tools.js +51 -0
  14. package/lib/clay-product-control.js +237 -0
  15. package/lib/clay-project-lifecycle.js +154 -0
  16. package/lib/clay-project-record-input.js +44 -0
  17. package/lib/clay-project-records.js +83 -0
  18. package/lib/clay-scheduling-input.js +21 -0
  19. package/lib/clay-scheduling-receipts.js +26 -0
  20. package/lib/clay-scheduling.js +119 -0
  21. package/lib/clay-screen-controls.js +96 -0
  22. package/lib/clay-workspace-controls.js +83 -0
  23. package/lib/clay-workspace-input.js +17 -0
  24. package/lib/clay-workspace-receipts.js +26 -0
  25. package/lib/daemon-project-access.js +11 -0
  26. package/lib/daemon-project-lifecycle-callbacks.js +15 -0
  27. package/lib/daemon-project-lifecycle.js +262 -0
  28. package/lib/daemon-projects.js +1 -1
  29. package/lib/daemon.js +73 -221
  30. package/lib/issues-service.js +29 -15
  31. package/lib/knowledge-db-import.js +5 -4
  32. package/lib/knowledge-db-service.js +9 -6
  33. package/lib/knowledge-document-index.js +2 -1
  34. package/lib/knowledge-file-store.js +7 -1
  35. package/lib/knowledge-product-operations.js +46 -0
  36. package/lib/mate-avatar-catalog.js +12 -0
  37. package/lib/mate-avatar-migration.js +41 -0
  38. package/lib/mate-creation-mcp-server.js +2 -0
  39. package/lib/mate-knowledge-canonical-access.js +10 -0
  40. package/lib/mate-knowledge-service.js +7 -4
  41. package/lib/mate-lifecycle-service.js +94 -0
  42. package/lib/mate-message-delivery.js +43 -0
  43. package/lib/mate-ready-creation.js +9 -1
  44. package/lib/mate-schedule-input.js +29 -0
  45. package/lib/mate-schedule-lifecycle.js +151 -0
  46. package/lib/mate-scheduling.js +103 -0
  47. package/lib/mates.js +18 -6
  48. package/lib/mcp-agent-tools.js +117 -0
  49. package/lib/mcp-connection-store.js +119 -15
  50. package/lib/mcp-import-credentials.js +31 -0
  51. package/lib/mcp-local-transport.js +13 -0
  52. package/lib/mcp-oauth.js +8 -6
  53. package/lib/mcp-query-bridge.js +30 -0
  54. package/lib/mcp-remote-connections.js +74 -20
  55. package/lib/mcp-source-adapters.js +91 -0
  56. package/lib/mcp-source-context.js +42 -0
  57. package/lib/mcp-source-discovery.js +169 -0
  58. package/lib/mcp-source-plugins.js +68 -0
  59. package/lib/mcp-source-restrictions.js +47 -0
  60. package/lib/mcp-tool-policy.js +34 -0
  61. package/lib/notes-checklist.js +50 -0
  62. package/lib/notes.js +49 -3
  63. package/lib/os-users.js +20 -5
  64. package/lib/project-admin-overview.js +51 -0
  65. package/lib/project-ask-user.js +8 -4
  66. package/lib/project-debate.js +1 -0
  67. package/lib/project-delegated-follow-up.js +2 -1
  68. package/lib/project-directory-claim.js +65 -0
  69. package/lib/project-file-operations.js +61 -0
  70. package/lib/project-filesystem.js +13 -87
  71. package/lib/project-full-access.js +23 -2
  72. package/lib/project-knowledge.js +32 -18
  73. package/lib/project-lifecycle-operations.js +98 -0
  74. package/lib/project-lifecycle-process-witness.js +32 -0
  75. package/lib/project-lifecycle-runtime.js +50 -0
  76. package/lib/project-linux-access.js +22 -0
  77. package/lib/project-logs-canonical-clay.js +27 -0
  78. package/lib/project-logs-clay-query.js +16 -0
  79. package/lib/project-logs-schema.js +4 -2
  80. package/lib/project-logs-service.js +8 -7
  81. package/lib/project-logs.js +1 -0
  82. package/lib/project-loop.js +1 -0
  83. package/lib/project-mate-chat-control.js +55 -0
  84. package/lib/project-mate-creation-proposal.js +18 -3
  85. package/lib/project-mate-interaction.js +8 -0
  86. package/lib/project-mcp.js +54 -16
  87. package/lib/project-models.js +14 -31
  88. package/lib/project-notifications.js +74 -16
  89. package/lib/project-ownership.js +77 -0
  90. package/lib/project-pair-result-delivery.js +14 -3
  91. package/lib/project-pending-message-queue.js +1 -0
  92. package/lib/project-product-control.js +87 -0
  93. package/lib/project-product-session-queue.js +46 -0
  94. package/lib/project-push-access.js +28 -0
  95. package/lib/project-scheduled-message-queue.js +30 -0
  96. package/lib/project-scheduled-messages.js +63 -64
  97. package/lib/project-scheduled-task-control.js +83 -0
  98. package/lib/project-scheduled-tasks.js +13 -2
  99. package/lib/project-scheduling-access.js +10 -0
  100. package/lib/project-session-actions.js +65 -0
  101. package/lib/project-session-delete.js +8 -1
  102. package/lib/project-session-document.js +8 -3
  103. package/lib/project-session-github.js +63 -19
  104. package/lib/project-session-history-actions.js +165 -0
  105. package/lib/project-session-linear.js +14 -6
  106. package/lib/project-session-notes.js +7 -3
  107. package/lib/project-session-runtime-actions.js +63 -0
  108. package/lib/project-session-vendor.js +54 -0
  109. package/lib/project-sessions.js +68 -241
  110. package/lib/project-shared-browser.js +56 -12
  111. package/lib/project-user-message.js +30 -1
  112. package/lib/project-workspace-operations.js +126 -0
  113. package/lib/project-workspace-query.js +9 -2
  114. package/lib/project.js +144 -37
  115. package/lib/public/app.js +5 -0
  116. package/lib/public/appearance-bootstrap.js +14 -0
  117. package/lib/public/css/clay-tool-activity.css +51 -0
  118. package/lib/public/css/clay-workspace.css +29 -0
  119. package/lib/public/css/home-debate-planning.css +2 -0
  120. package/lib/public/css/home-mate-creation.css +5 -0
  121. package/lib/public/css/mate-avatar-gallery.css +12 -0
  122. package/lib/public/css/mate-conversation.css +10 -5
  123. package/lib/public/css/overlays.css +4 -2
  124. package/lib/public/css/project-admin-overview.css +13 -0
  125. package/lib/public/css/session-folders.css +11 -0
  126. package/lib/public/css/session-github.css +46 -1
  127. package/lib/public/css/shared-browser.css +35 -1
  128. package/lib/public/css/sticky-notes.css +61 -1
  129. package/lib/public/index.html +11 -5
  130. package/lib/public/mate-avatars/B01.png +0 -0
  131. package/lib/public/mate-avatars/B02.png +0 -0
  132. package/lib/public/mate-avatars/B03.png +0 -0
  133. package/lib/public/mate-avatars/B04.png +0 -0
  134. package/lib/public/mate-avatars/B05.png +0 -0
  135. package/lib/public/mate-avatars/B06.png +0 -0
  136. package/lib/public/mate-avatars/B07.png +0 -0
  137. package/lib/public/mate-avatars/B08.png +0 -0
  138. package/lib/public/mate-avatars/B09.png +0 -0
  139. package/lib/public/mate-avatars/B10.png +0 -0
  140. package/lib/public/mate-avatars/B11.png +0 -0
  141. package/lib/public/mate-avatars/B12.png +0 -0
  142. package/lib/public/mate-avatars/B13.png +0 -0
  143. package/lib/public/mate-avatars/B14.png +0 -0
  144. package/lib/public/mate-avatars/B15.png +0 -0
  145. package/lib/public/mate-avatars/B16.png +0 -0
  146. package/lib/public/mate-avatars/B17.png +0 -0
  147. package/lib/public/mate-avatars/B18.png +0 -0
  148. package/lib/public/mate-avatars/B19.png +0 -0
  149. package/lib/public/mate-avatars/B20.png +0 -0
  150. package/lib/public/mate-avatars/B21.png +0 -0
  151. package/lib/public/mate-avatars/B22.png +0 -0
  152. package/lib/public/mate-avatars/B23.png +0 -0
  153. package/lib/public/mate-avatars/B24.png +0 -0
  154. package/lib/public/mate-avatars/B25.png +0 -0
  155. package/lib/public/mate-avatars/B26.png +0 -0
  156. package/lib/public/mate-avatars/B27.png +0 -0
  157. package/lib/public/mate-avatars/B28.png +0 -0
  158. package/lib/public/mate-avatars/B29.png +0 -0
  159. package/lib/public/mate-avatars/B30.png +0 -0
  160. package/lib/public/mate-avatars/B31.png +0 -0
  161. package/lib/public/mate-avatars/B32.png +0 -0
  162. package/lib/public/mate-avatars/B33.png +0 -0
  163. package/lib/public/mate-avatars/B34.png +0 -0
  164. package/lib/public/mate-avatars/B35.png +0 -0
  165. package/lib/public/mate-avatars/B36.png +0 -0
  166. package/lib/public/mate-avatars/B37.png +0 -0
  167. package/lib/public/mate-avatars/B38.png +0 -0
  168. package/lib/public/mate-avatars/B39.png +0 -0
  169. package/lib/public/mate-avatars/B40.png +0 -0
  170. package/lib/public/mate-avatars/B41.png +0 -0
  171. package/lib/public/mate-avatars/B42.png +0 -0
  172. package/lib/public/mate-avatars/B43.png +0 -0
  173. package/lib/public/mate-avatars/B44.png +0 -0
  174. package/lib/public/mate-avatars/B45.png +0 -0
  175. package/lib/public/mate-avatars/B46.png +0 -0
  176. package/lib/public/mate-avatars/B47.png +0 -0
  177. package/lib/public/mate-avatars/B48.png +0 -0
  178. package/lib/public/mate-avatars/C01.png +0 -0
  179. package/lib/public/mate-avatars/C02.png +0 -0
  180. package/lib/public/mate-avatars/C03.png +0 -0
  181. package/lib/public/mate-avatars/C04.png +0 -0
  182. package/lib/public/mate-avatars/C05.png +0 -0
  183. package/lib/public/mate-avatars/C06.png +0 -0
  184. package/lib/public/mate-avatars/C07.png +0 -0
  185. package/lib/public/mate-avatars/C08.png +0 -0
  186. package/lib/public/mate-avatars/C09.png +0 -0
  187. package/lib/public/mate-avatars/C10.png +0 -0
  188. package/lib/public/mate-avatars/C11.png +0 -0
  189. package/lib/public/mate-avatars/C12.png +0 -0
  190. package/lib/public/mate-avatars/C13.png +0 -0
  191. package/lib/public/mate-avatars/C14.png +0 -0
  192. package/lib/public/mate-avatars/C15.png +0 -0
  193. package/lib/public/mate-avatars/C16.png +0 -0
  194. package/lib/public/mate-avatars/C17.png +0 -0
  195. package/lib/public/mate-avatars/C18.png +0 -0
  196. package/lib/public/mate-avatars/C19.png +0 -0
  197. package/lib/public/mate-avatars/C20.png +0 -0
  198. package/lib/public/mate-avatars/C21.png +0 -0
  199. package/lib/public/mate-avatars/C22.png +0 -0
  200. package/lib/public/mate-avatars/C23.png +0 -0
  201. package/lib/public/mate-avatars/C24.png +0 -0
  202. package/lib/public/mate-avatars/C25.png +0 -0
  203. package/lib/public/mate-avatars/C26.png +0 -0
  204. package/lib/public/mate-avatars/C27.png +0 -0
  205. package/lib/public/mate-avatars/C28.png +0 -0
  206. package/lib/public/mate-avatars/C29.png +0 -0
  207. package/lib/public/mate-avatars/C30.png +0 -0
  208. package/lib/public/mate-avatars/C31.png +0 -0
  209. package/lib/public/mate-avatars/C32.png +0 -0
  210. package/lib/public/mate-avatars/C33.png +0 -0
  211. package/lib/public/mate-avatars/C34.png +0 -0
  212. package/lib/public/mate-avatars/C35.png +0 -0
  213. package/lib/public/mate-avatars/C36.png +0 -0
  214. package/lib/public/mate-avatars/C37.png +0 -0
  215. package/lib/public/mate-avatars/C38.png +0 -0
  216. package/lib/public/mate-avatars/C39.png +0 -0
  217. package/lib/public/mate-avatars/C40.png +0 -0
  218. package/lib/public/mate-avatars/C41.png +0 -0
  219. package/lib/public/mate-avatars/C42.png +0 -0
  220. package/lib/public/mate-avatars/C43.png +0 -0
  221. package/lib/public/mate-avatars/C44.png +0 -0
  222. package/lib/public/mate-avatars/C45.png +0 -0
  223. package/lib/public/mate-avatars/C46.png +0 -0
  224. package/lib/public/mate-avatars/C47.png +0 -0
  225. package/lib/public/mate-avatars/C48.png +0 -0
  226. package/lib/public/mate-avatars/catalog.json +482 -0
  227. package/lib/public/mate-avatars/lead-clay.png +0 -0
  228. package/lib/public/modules/admin-settings-projects.js +6 -2
  229. package/lib/public/modules/app-connection.js +8 -1
  230. package/lib/public/modules/app-message-router.js +4 -0
  231. package/lib/public/modules/app-messages.js +31 -5
  232. package/lib/public/modules/app-projects.js +5 -0
  233. package/lib/public/modules/app-rendering.js +1 -1
  234. package/lib/public/modules/avatar.js +15 -41
  235. package/lib/public/modules/chat-render-runtime.js +10 -1
  236. package/lib/public/modules/clay-browser-links.js +47 -0
  237. package/lib/public/modules/clay-log-links.js +1 -1
  238. package/lib/public/modules/clay-owner-navigation.js +27 -0
  239. package/lib/public/modules/clay-tool-activity.js +140 -0
  240. package/lib/public/modules/clay-tool-presentation.js +338 -0
  241. package/lib/public/modules/command-palette.js +2 -2
  242. package/lib/public/modules/debate.js +1 -0
  243. package/lib/public/modules/default-ai.js +11 -3
  244. package/lib/public/modules/history-replay-batch.js +5 -1
  245. package/lib/public/modules/home-debate-live.js +2 -0
  246. package/lib/public/modules/home-debate-planning.js +7 -7
  247. package/lib/public/modules/home-mate-avatar-editor.js +127 -208
  248. package/lib/public/modules/home-mate-chat.js +8 -6
  249. package/lib/public/modules/home-mate-creation.js +73 -1
  250. package/lib/public/modules/home-mate-settings.js +19 -12
  251. package/lib/public/modules/markdown.js +4 -0
  252. package/lib/public/modules/mate-avatar-catalog.js +97 -0
  253. package/lib/public/modules/mate-management.js +40 -7
  254. package/lib/public/modules/mcp-connection-view.js +31 -13
  255. package/lib/public/modules/mcp-discovery-view.js +31 -0
  256. package/lib/public/modules/mcp-ui.js +23 -4
  257. package/lib/public/modules/mention.js +3 -0
  258. package/lib/public/modules/pane-browser-bridge.js +20 -0
  259. package/lib/public/modules/personal-settings-dialog.js +7 -1
  260. package/lib/public/modules/profile.js +1 -238
  261. package/lib/public/modules/project-access-recovery.js +17 -0
  262. package/lib/public/modules/project-admin-overview.js +21 -0
  263. package/lib/public/modules/project-mate-navigation.js +99 -14
  264. package/lib/public/modules/search-clay-chat.js +16 -2
  265. package/lib/public/modules/session-folder-layout.js +1 -1
  266. package/lib/public/modules/session-folder-view-menu.js +9 -0
  267. package/lib/public/modules/session-github.js +85 -14
  268. package/lib/public/modules/session-work-primary.js +51 -0
  269. package/lib/public/modules/shared-browser-settings.js +112 -0
  270. package/lib/public/modules/shared-browser-tabs.js +13 -3
  271. package/lib/public/modules/shared-browser.js +27 -6
  272. package/lib/public/modules/sidebar-session-folders-ui.js +1 -1
  273. package/lib/public/modules/split-view.js +2 -0
  274. package/lib/public/modules/sticky-note-markdown.js +72 -6
  275. package/lib/public/modules/sticky-notes-actions.js +30 -0
  276. package/lib/public/modules/sticky-notes-browser.js +9 -2
  277. package/lib/public/modules/sticky-notes-card.js +23 -7
  278. package/lib/public/modules/sticky-notes-checklist.js +71 -0
  279. package/lib/public/modules/sticky-notes-editor.js +108 -44
  280. package/lib/public/modules/sticky-notes-shared.js +50 -2
  281. package/lib/public/modules/sticky-notes-state.js +66 -0
  282. package/lib/public/modules/sticky-notes.js +34 -51
  283. package/lib/public/modules/theme.js +8 -1
  284. package/lib/public/modules/thinking-lifecycle.js +33 -3
  285. package/lib/public/modules/thinking-view.js +23 -1
  286. package/lib/public/modules/tools.js +36 -7
  287. package/lib/public/modules/user-settings-appearance.js +10 -3
  288. package/lib/public/modules/user-settings-editors.js +1 -1
  289. package/lib/public/modules/user-settings-layout.js +11 -2
  290. package/lib/public/modules/user-settings-preferences.js +6 -2
  291. package/lib/public/modules/user-settings-profile.js +12 -2
  292. package/lib/public/modules/user-settings.js +3 -2
  293. package/lib/public/style.css +3 -0
  294. package/lib/public/sw.js +3 -1
  295. package/lib/scheduled-task-records.js +3 -1
  296. package/lib/scheduler.js +2 -0
  297. package/lib/sdk-bridge.js +228 -23
  298. package/lib/sdk-message-processor.js +2 -0
  299. package/lib/sdk-response-recovery.js +155 -0
  300. package/lib/server-admin.js +63 -16
  301. package/lib/server-appearance-settings.js +13 -1
  302. package/lib/server-dm.js +2 -1
  303. package/lib/server-global-ws.js +10 -20
  304. package/lib/server-home-chat-events.js +18 -4
  305. package/lib/server-home-chat.js +12 -16
  306. package/lib/server-home-mate-creation.js +1 -0
  307. package/lib/server-home-mcp-consent.js +14 -0
  308. package/lib/server-mates.js +25 -62
  309. package/lib/server-owner-ui.js +77 -0
  310. package/lib/server-path-access.js +38 -0
  311. package/lib/server-project-removal.js +22 -0
  312. package/lib/server-settings.js +4 -1
  313. package/lib/server.js +144 -41
  314. package/lib/session-config-transition.js +45 -0
  315. package/lib/session-folders.js +7 -2
  316. package/lib/session-github.js +9 -2
  317. package/lib/session-visibility.js +5 -2
  318. package/lib/session-work-primary.js +50 -0
  319. package/lib/sessions.js +13 -0
  320. package/lib/shared-browser-cookie-sync.js +32 -0
  321. package/lib/shared-browser-cookies.js +79 -0
  322. package/lib/shared-browser-runtime.js +25 -9
  323. package/lib/shared-browser-storage-sync.js +43 -0
  324. package/lib/shared-browser-storage.js +101 -0
  325. package/lib/shared-browser-tools.js +2 -1
  326. package/lib/shared-browser-worker.js +46 -10
  327. package/lib/terminal-manager.js +52 -0
  328. package/lib/users-permissions.js +2 -8
  329. package/lib/users.js +4 -0
  330. package/lib/workspace-query-access.js +4 -1
  331. package/lib/ws-schema.js +8 -2
  332. package/lib/yoke/acp-agent-profiles.js +2 -2
  333. package/lib/yoke/adapters/claude.js +47 -8
  334. package/lib/yoke/adapters/codex.js +52 -111
  335. package/lib/yoke/claude-worker-startup.js +28 -0
  336. package/lib/yoke/codex-idle-recovery.js +81 -1
  337. package/lib/yoke/codex-recovery-admission.js +164 -0
  338. package/lib/yoke/session-tool-transport.js +3 -0
  339. 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
+ ]
@@ -16,7 +16,7 @@ export function loadProjectsTab(body) {
16
16
 
17
17
  var accessPromises = projectList.map(function (p) {
18
18
  return apiGet("/api/admin/projects/" + p.slug + "/access").then(function (access) {
19
- return { slug: p.slug, title: p.title || p.project || p.slug, projectOwnerId: p.projectOwnerId || null, visibility: access.visibility || "public", allowedUsers: access.allowedUsers || [] };
19
+ return { slug: p.slug, title: p.title || p.project || p.slug, projectOwnerId: p.projectOwnerId || null, visibility: access.visibility || "public", allowedUsers: access.allowedUsers || [], readOnly: access.contentAccess === false || p.projectOwnerId !== store.get("myUserId") };
20
20
  });
21
21
  });
22
22
 
@@ -39,9 +39,13 @@ function renderProjectsTab(body, projectAccessList, allUsers) {
39
39
  html += '<div class="admin-project-slug">' + escapeHtml(p.slug) + '</div>';
40
40
  html += '</div>';
41
41
  html += '<div class="admin-project-controls">';
42
+ if (p.readOnly) {
43
+ html += '<span class="admin-project-access-readonly">Administrative metadata only</span></div></div>';
44
+ continue;
45
+ }
42
46
  // Owner select
43
47
  html += '<select aria-label="Project owner" class="admin-owner-select" data-slug="' + escapeHtml(p.slug) + '">';
44
- html += '<option value=""' + (!p.projectOwnerId ? ' selected' : '') + '>No owner</option>';
48
+ if (!p.projectOwnerId) html += '<option value="" selected disabled>Ownership needs recovery</option>';
45
49
  for (var u = 0; u < allUsers.length; u++) {
46
50
  var user = allUsers[u];
47
51
  var sel = p.projectOwnerId === user.id ? ' selected' : '';
@@ -1,3 +1,4 @@
1
+ import { leaveRevokedProject, reconnectDestination } from './project-access-recovery.js';
1
2
  // app-connection.js - WebSocket connection, reconnect, status
2
3
  // Extracted from app.js (PR-22)
3
4
 
@@ -355,6 +356,7 @@ export function connect() {
355
356
  console.log("[clay] WebSocket reconnected after " + (Date.now() - disconnectedAt) + "ms");
356
357
  }
357
358
  disconnectedAt = 0;
359
+ newWs.send(JSON.stringify({ type: "clay_ui_ready", version: 1 }));
358
360
  setStatus("connected");
359
361
  startHeartbeat(newWs, attemptEpoch);
360
362
  lifecycle.clearRetry();
@@ -460,7 +462,12 @@ export function scheduleReconnect(reason) {
460
462
  location.reload();
461
463
  return;
462
464
  }
463
- connect();
465
+ return res.json().then(function (info) {
466
+ if (!lifecycle.canProceed(authEpoch)) return;
467
+ var destination = reconnectDestination(info, store.get('currentSlug'));
468
+ if (destination) { leaveRevokedProject(destination); return; }
469
+ connect();
470
+ });
464
471
  }).catch(function () {
465
472
  var authFinished = lifecycle.finishAuth(authEpoch, authToken);
466
473
  if (authFinished && lifecycle.canProceed(authEpoch)) connect();
@@ -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" || msg.type === "home_mate_question" || msg.type === "home_mate_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;
@@ -1,3 +1,5 @@
1
+ import { handleOwnerNavigation } from './clay-owner-navigation.js';
2
+ import { leaveRevokedProject } from './project-access-recovery.js';
1
3
  import { handlePersonalSettingsMessage } from './user-settings-preferences.js';
2
4
  import { handleServerUpdate } from './server-settings-controls.js';
3
5
  import { handleYouMessage } from './you.js';
@@ -8,7 +10,8 @@ import { refreshProjectAssistantIdentities } from './project-chat-identity.js';
8
10
  import { handleLinearResult } from './linear-panel.js';
9
11
  import { handleSharedBrowserMessage } from './shared-browser.js';
10
12
  import { openWireframe } from './wireframe-workbench.js';
11
- import { syncGithubSessions } from './session-github.js';
13
+ import { handlePrimaryWorkResult } from './session-work-primary.js';
14
+ import { syncGithubSessions, applyGithubPersonalReviewStatus } from './session-github.js';
12
15
  import { handleIssuesMessageInContext as handleIssuesMessage } from './issues-context.js';
13
16
  // app-messages.js - WebSocket message router
14
17
  // Extracted from app.js (PR-23)
@@ -65,7 +68,7 @@ import { handleTuiTranscriptState } from './tui-grab.js';
65
68
  import { tuiModalHandleTermOutput, tuiModalHandleTermResized, tuiModalHandleTermExited, tuiModalHandleTermClosed } from './tui-attention.js';
66
69
  import { updateTerminalList, handleContextSourcesState, updateEmailAccountList, updateEmailUnreadCounts, handleEmailTestResult, handleEmailAddResult, handleEmailRemoveResult } from './context-sources.js';
67
70
  import { refreshEmailSettings } from './user-settings.js';
68
- import { handleNotesList, handleNoteCreated, handleNoteUpdated, handleNoteDeleted, handleNoteWritten } from './sticky-notes.js';
71
+ import { handleNotesList, handleNoteCreated, handleNoteUpdated, handleNoteUpdateResult, handleNoteDeleted, handleNoteWritten } from './sticky-notes.js';
69
72
  import { handleNoteDeleteResult } from './sticky-notes-browser.js';
70
73
  import { handleProjectLogsState, handleProjectLogEntry, handleProjectLogCommented, handleProjectLogCommentReviewed, handleProjectLogDeleted, handleProjectLogUpdated, handleProjectLogsError, handleScheduledTaskResultsState, handleScheduledTaskResultCreated, handleScheduledTaskResultSession } from './project-logs.js';
71
74
  import { handleSkillInstalled, handleSkillUninstalled } from './skills.js';
@@ -118,6 +121,7 @@ var connectOverlay = document.getElementById("connect-overlay");
118
121
  initMessageDeliveryUi();
119
122
 
120
123
  export function processMessage(msg) {
124
+ if (handleOwnerNavigation(msg)) return;
121
125
  if (["update_available", "up_to_date", "update_started", "update_check_failed"].indexOf(msg.type) !== -1) handleServerUpdate(msg);
122
126
  if (/^(set_pin|set_keep_awake|set_inherit_groups|set_image_retention|set_update_channel|restart_server|shutdown_server)_result$/.test(msg.type)) handleServerSettingResult(msg);
123
127
  if (handleProjectDebateMessage(msg)) return;
@@ -145,7 +149,7 @@ export function processMessage(msg) {
145
149
  return;
146
150
  }
147
151
  if (msg.type === "access_revoked") {
148
- window.location.assign("/");
152
+ leaveRevokedProject("/");
149
153
  return;
150
154
  }
151
155
  // Preserve original timestamp from history replay
@@ -204,7 +208,7 @@ export function processMessage(msg) {
204
208
  if (readyMatch) {
205
209
  var newName = readyMatch[1].trim();
206
210
  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 } });
211
+ 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
212
  if (getWs() && getWs().readyState === 1) {
209
213
  getWs().send(JSON.stringify({
210
214
  type: "mate_update",
@@ -224,7 +228,8 @@ export function processMessage(msg) {
224
228
  }
225
229
  }
226
230
 
227
- store.set({ currentHistoryIndex: Number.isSafeInteger(msg._historyIndex) && msg._historyIndex >= 0 ? msg._historyIndex : null });
231
+ store.set({ currentHistoryIndex: Number.isSafeInteger(msg._historyIndex) && msg._historyIndex >= 0 ? msg._historyIndex : null,
232
+ currentHistoryIndexes: Array.isArray(msg._historyIndexes) ? msg._historyIndexes : null });
228
233
  switch (msg.type) {
229
234
  case "message_ack":
230
235
  var acknowledgedEntry = acknowledgeMessage(msg.clientMessageId);
@@ -773,6 +778,9 @@ export function processMessage(msg) {
773
778
  handlePaletteSessionSwitch();
774
779
  maybeRestoreSplitGroup();
775
780
  break;
781
+ case "session_github_status":
782
+ applyGithubPersonalReviewStatus(msg);
783
+ break;
776
784
 
777
785
  case "split_groups":
778
786
  applyProjectSplitGroups(msg.groups || []);
@@ -858,6 +866,9 @@ export function processMessage(msg) {
858
866
  handleRemoteSelection(msg);
859
867
  break;
860
868
 
869
+ case "session_work_primary_result":
870
+ handlePrimaryWorkResult(msg);
871
+ break;
861
872
  case "linear_result":
862
873
  handleLinearResult(msg);
863
874
  break;
@@ -1274,6 +1285,16 @@ export function processMessage(msg) {
1274
1285
  renderGeneratedImage(msg);
1275
1286
  break;
1276
1287
 
1288
+ case 'mate_schedule_question_expired':
1289
+ markAskUserAnswered(msg.toolId, { 0: msg.error || 'This schedule review expired.' });
1290
+ stopUrgentBlink();
1291
+ break;
1292
+
1293
+ case 'mcp_import_consent_expired':
1294
+ markAskUserAnswered(msg.toolId, { 0: msg.error || 'No import was approved.' });
1295
+ stopUrgentBlink();
1296
+ break;
1297
+
1277
1298
  case "ask_user_answered":
1278
1299
  markAskUserAnswered(msg.toolId, msg.answers);
1279
1300
  stopUrgentBlink();
@@ -1745,6 +1766,10 @@ export function processMessage(msg) {
1745
1766
  handleNoteUpdated(msg);
1746
1767
  break;
1747
1768
 
1769
+ case "note_update_result":
1770
+ handleNoteUpdateResult(msg);
1771
+ break;
1772
+
1748
1773
  case "note_written":
1749
1774
  showToast((msg.byTitle || "Agent") + ' left a note: "' + (msg.preview || "") + '"');
1750
1775
  handleNoteWritten(msg);
@@ -1959,6 +1984,7 @@ export function processMessage(msg) {
1959
1984
  // Sync dmTargetUser so subsequent renders use fresh data
1960
1985
  var mp2 = msg.mate.profile || {};
1961
1986
  store.get('dmTargetUser').displayName = mp2.displayName || msg.mate.name || store.get('dmTargetUser').displayName;
1987
+ store.get('dmTargetUser').avatarCatalogId = mp2.avatarCatalogId || '';
1962
1988
  store.get('dmTargetUser').avatarStyle = mp2.avatarStyle || store.get('dmTargetUser').avatarStyle;
1963
1989
  store.get('dmTargetUser').avatarSeed = mp2.avatarSeed || store.get('dmTargetUser').avatarSeed;
1964
1990
  store.get('dmTargetUser').avatarColor = mp2.avatarColor || store.get('dmTargetUser').avatarColor;
@@ -389,6 +389,11 @@ export function resetClientState() {
389
389
 
390
390
  export function switchProject(slug) {
391
391
  if (!slug) return;
392
+ var target = cachedProjects.find(function (project) { return project.slug === slug; });
393
+ if (target && target.contentAccess === false && target.administrativeAccess === true) {
394
+ window.location.assign("/p/" + encodeURIComponent(slug) + "/");
395
+ return;
396
+ }
392
397
  document.cookie = "clay_last_project=" + encodeURIComponent(slug) + "; Path=/; SameSite=Strict; Max-Age=31536000";
393
398
  var st = store.snap();
394
399
  var ws = getWs();
@@ -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 });