clay-server 5.1.1-beta.1 → 5.2.0-beta.10

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 (588) hide show
  1. package/lib/account-auth-policy.js +21 -0
  2. package/lib/account-auth-socket.js +30 -0
  3. package/lib/account-auth-throttle.js +44 -0
  4. package/lib/account-auth-transport.js +48 -0
  5. package/lib/account-login-page.js +28 -0
  6. package/lib/account-passkey-challenges.js +31 -0
  7. package/lib/account-passkey-page.js +89 -0
  8. package/lib/account-passkey-policy.js +39 -0
  9. package/lib/account-password-page.js +69 -0
  10. package/lib/account-passwords.js +36 -0
  11. package/lib/account-remembered.js +77 -0
  12. package/lib/account-session-page.js +51 -0
  13. package/lib/account-session-store.js +82 -0
  14. package/lib/builtin-mates.js +19 -16
  15. package/lib/bundled-skills/clay-agent-browser/SKILL.md +6 -2
  16. package/lib/canonical-clay-record-authority.js +15 -0
  17. package/lib/canonical-clay-scheduling-authority.js +19 -0
  18. package/lib/claude-hook-installer.js +1 -239
  19. package/lib/claude-jsonl-watcher.js +1 -204
  20. package/lib/clay-control-presentation-binding.js +96 -0
  21. package/lib/clay-control-presentation.js +128 -0
  22. package/lib/clay-control-target-projection.js +26 -0
  23. package/lib/clay-mate-chat-receipts.js +26 -0
  24. package/lib/clay-mate-chat.js +88 -0
  25. package/lib/clay-mate-knowledge-input.js +26 -0
  26. package/lib/clay-mate-knowledge.js +95 -0
  27. package/lib/clay-mate-lifecycle.js +95 -0
  28. package/lib/clay-product-control-input.js +33 -0
  29. package/lib/clay-product-control-tools.js +51 -0
  30. package/lib/clay-product-control.js +247 -0
  31. package/lib/clay-project-lifecycle.js +154 -0
  32. package/lib/clay-project-record-input.js +44 -0
  33. package/lib/clay-project-records.js +84 -0
  34. package/lib/clay-scheduling-input.js +21 -0
  35. package/lib/clay-scheduling-receipts.js +26 -0
  36. package/lib/clay-scheduling.js +119 -0
  37. package/lib/clay-screen-controls.js +104 -0
  38. package/lib/clay-skill-install.js +1 -33
  39. package/lib/clay-workspace-controls.js +84 -0
  40. package/lib/clay-workspace-input.js +17 -0
  41. package/lib/clay-workspace-receipts.js +26 -0
  42. package/lib/cli-sessions.js +1 -300
  43. package/lib/codex-defaults.js +1 -28
  44. package/lib/context-usage.js +3 -2
  45. package/lib/contextual-screen-snapshot.js +38 -0
  46. package/lib/daemon-project-access.js +11 -0
  47. package/lib/daemon-project-lifecycle-callbacks.js +15 -0
  48. package/lib/daemon-project-lifecycle.js +262 -0
  49. package/lib/daemon-projects.js +1 -1
  50. package/lib/daemon.js +80 -276
  51. package/lib/default-ai-runtime.js +4 -8
  52. package/lib/dm-digest-cursor.js +120 -0
  53. package/lib/email-mcp-server.js +1 -1
  54. package/lib/issues-service.js +29 -15
  55. package/lib/kiro-defaults.js +1 -22
  56. package/lib/knowledge-db-import-validation.js +46 -0
  57. package/lib/knowledge-db-import.js +99 -0
  58. package/lib/knowledge-db-service.js +24 -33
  59. package/lib/knowledge-db-storage-nedb-maintenance.js +99 -0
  60. package/lib/knowledge-db-storage-nedb.js +66 -0
  61. package/lib/knowledge-db-storage.js +72 -0
  62. package/lib/knowledge-db-validation.js +0 -0
  63. package/lib/knowledge-document-index.js +2 -1
  64. package/lib/knowledge-file-store.js +7 -1
  65. package/lib/knowledge-product-operations.js +46 -0
  66. package/lib/mate-avatar-catalog.js +12 -0
  67. package/lib/mate-avatar-migration.js +41 -0
  68. package/lib/mate-context-service.js +138 -0
  69. package/lib/mate-context-tools.js +21 -0
  70. package/lib/mate-creation-mcp-server.js +2 -0
  71. package/lib/mate-knowledge-canonical-access.js +10 -0
  72. package/lib/mate-knowledge-mate-bound.js +53 -0
  73. package/lib/mate-knowledge-mcp-server.js +55 -8
  74. package/lib/mate-knowledge-service.js +16 -34
  75. package/lib/mate-knowledge-text-tools.js +106 -0
  76. package/lib/mate-lifecycle-service.js +94 -0
  77. package/lib/mate-message-delivery.js +43 -0
  78. package/lib/mate-ready-creation.js +9 -1
  79. package/lib/mate-schedule-input.js +29 -0
  80. package/lib/mate-schedule-lifecycle.js +151 -0
  81. package/lib/mate-scheduling.js +103 -0
  82. package/lib/mates.js +18 -6
  83. package/lib/mcp-agent-tools.js +117 -0
  84. package/lib/mcp-connection-store.js +119 -15
  85. package/lib/mcp-import-credentials.js +31 -0
  86. package/lib/mcp-local-transport.js +13 -0
  87. package/lib/mcp-oauth.js +8 -6
  88. package/lib/mcp-proxy.js +2 -32
  89. package/lib/mcp-query-bridge.js +30 -0
  90. package/lib/mcp-remote-connections.js +74 -20
  91. package/lib/mcp-source-adapters.js +1 -0
  92. package/lib/mcp-source-context.js +1 -0
  93. package/lib/mcp-source-discovery.js +1 -0
  94. package/lib/mcp-source-plugins.js +1 -0
  95. package/lib/mcp-source-restrictions.js +1 -0
  96. package/lib/mcp-tool-policy.js +9 -0
  97. package/lib/migrate-single-user.js +3 -23
  98. package/lib/notes-checklist.js +50 -0
  99. package/lib/notes.js +49 -3
  100. package/lib/os-user-diagnostics.js +2 -4
  101. package/lib/os-users.js +24 -70
  102. package/lib/pane-pending-interactions.js +20 -0
  103. package/lib/pane-session-activation.js +114 -0
  104. package/lib/pane-session-transport.js +26 -0
  105. package/lib/project-admin-overview.js +51 -0
  106. package/lib/project-ask-user.js +8 -4
  107. package/lib/project-connection.js +14 -10
  108. package/lib/project-control-git-view.js +12 -0
  109. package/lib/project-debate.js +1 -0
  110. package/lib/project-delegated-follow-up.js +2 -1
  111. package/lib/project-directory-claim.js +65 -0
  112. package/lib/project-file-operations.js +61 -0
  113. package/lib/project-filesystem.js +15 -85
  114. package/lib/project-full-access.js +23 -2
  115. package/lib/project-http.js +7 -4
  116. package/lib/project-knowledge.js +32 -18
  117. package/lib/project-lifecycle-operations.js +98 -0
  118. package/lib/project-lifecycle-process-witness.js +32 -0
  119. package/lib/project-lifecycle-runtime.js +50 -0
  120. package/lib/project-linux-access.js +22 -0
  121. package/lib/project-logs-canonical-clay.js +27 -0
  122. package/lib/project-logs-clay-query.js +16 -0
  123. package/lib/project-logs-schema.js +4 -2
  124. package/lib/project-logs-service.js +8 -7
  125. package/lib/project-logs.js +1 -0
  126. package/lib/project-loop.js +1 -0
  127. package/lib/project-mate-chat-control.js +55 -0
  128. package/lib/project-mate-creation-proposal.js +18 -3
  129. package/lib/project-mate-interaction.js +40 -62
  130. package/lib/project-mcp.js +54 -16
  131. package/lib/project-models.js +14 -31
  132. package/lib/project-notifications.js +76 -17
  133. package/lib/project-ownership.js +77 -0
  134. package/lib/project-pair-result-delivery.js +14 -3
  135. package/lib/project-pair-usage.js +12 -13
  136. package/lib/project-pending-message-queue.js +4 -1
  137. package/lib/project-product-control.js +89 -0
  138. package/lib/project-product-session-queue.js +46 -0
  139. package/lib/project-push-access.js +28 -0
  140. package/lib/project-scheduled-message-queue.js +30 -0
  141. package/lib/project-scheduled-messages.js +67 -68
  142. package/lib/project-scheduled-task-control.js +83 -0
  143. package/lib/project-scheduled-tasks.js +13 -2
  144. package/lib/project-scheduling-access.js +10 -0
  145. package/lib/project-server-settings.js +1 -0
  146. package/lib/project-session-actions.js +65 -0
  147. package/lib/project-session-delete.js +8 -1
  148. package/lib/project-session-document.js +27 -7
  149. package/lib/project-session-github.js +63 -19
  150. package/lib/project-session-history-actions.js +167 -0
  151. package/lib/project-session-linear.js +14 -6
  152. package/lib/project-session-notes.js +7 -3
  153. package/lib/project-session-pair.js +1 -1
  154. package/lib/project-session-runtime-actions.js +64 -0
  155. package/lib/project-session-spawn.js +2 -3
  156. package/lib/project-session-vendor.js +55 -0
  157. package/lib/project-sessions.js +103 -272
  158. package/lib/project-shared-browser.js +78 -17
  159. package/lib/project-studio-presentation.js +58 -0
  160. package/lib/project-user-knowledge.js +2 -1
  161. package/lib/project-user-message.js +67 -1
  162. package/lib/project-vendor-login.js +6 -36
  163. package/lib/project-workspace-operations.js +126 -0
  164. package/lib/project-workspace-query.js +19 -2
  165. package/lib/project.js +178 -45
  166. package/lib/public/app.js +46 -0
  167. package/lib/public/appearance-bootstrap.js +16 -0
  168. package/lib/public/auth/account-login.css +98 -0
  169. package/lib/public/auth/account-login.js +104 -0
  170. package/lib/public/css/clay-tool-activity.css +51 -0
  171. package/lib/public/css/clay-workspace.css +29 -0
  172. package/lib/public/css/command-palette.css +12 -33
  173. package/lib/public/css/contextual-clay.css +240 -0
  174. package/lib/public/css/home-debate-planning.css +2 -0
  175. package/lib/public/css/home-mate-creation.css +5 -0
  176. package/lib/public/css/input.css +6 -0
  177. package/lib/public/css/mate-avatar-gallery.css +12 -0
  178. package/lib/public/css/mate-conversation.css +10 -5
  179. package/lib/public/css/messages.css +6 -2
  180. package/lib/public/css/overlays.css +4 -2
  181. package/lib/public/css/project-admin-overview.css +13 -0
  182. package/lib/public/css/session-folders.css +11 -0
  183. package/lib/public/css/session-github.css +46 -1
  184. package/lib/public/css/shared-browser.css +35 -1
  185. package/lib/public/css/sticky-notes.css +87 -1
  186. package/lib/public/css/user-settings-sessions.css +42 -0
  187. package/lib/public/index.html +28 -10
  188. package/lib/public/mate-avatars/B01.png +0 -0
  189. package/lib/public/mate-avatars/B02.png +0 -0
  190. package/lib/public/mate-avatars/B03.png +0 -0
  191. package/lib/public/mate-avatars/B04.png +0 -0
  192. package/lib/public/mate-avatars/B05.png +0 -0
  193. package/lib/public/mate-avatars/B06.png +0 -0
  194. package/lib/public/mate-avatars/B07.png +0 -0
  195. package/lib/public/mate-avatars/B08.png +0 -0
  196. package/lib/public/mate-avatars/B09.png +0 -0
  197. package/lib/public/mate-avatars/B10.png +0 -0
  198. package/lib/public/mate-avatars/B11.png +0 -0
  199. package/lib/public/mate-avatars/B12.png +0 -0
  200. package/lib/public/mate-avatars/B13.png +0 -0
  201. package/lib/public/mate-avatars/B14.png +0 -0
  202. package/lib/public/mate-avatars/B15.png +0 -0
  203. package/lib/public/mate-avatars/B16.png +0 -0
  204. package/lib/public/mate-avatars/B17.png +0 -0
  205. package/lib/public/mate-avatars/B18.png +0 -0
  206. package/lib/public/mate-avatars/B19.png +0 -0
  207. package/lib/public/mate-avatars/B20.png +0 -0
  208. package/lib/public/mate-avatars/B21.png +0 -0
  209. package/lib/public/mate-avatars/B22.png +0 -0
  210. package/lib/public/mate-avatars/B23.png +0 -0
  211. package/lib/public/mate-avatars/B24.png +0 -0
  212. package/lib/public/mate-avatars/B25.png +0 -0
  213. package/lib/public/mate-avatars/B26.png +0 -0
  214. package/lib/public/mate-avatars/B27.png +0 -0
  215. package/lib/public/mate-avatars/B28.png +0 -0
  216. package/lib/public/mate-avatars/B29.png +0 -0
  217. package/lib/public/mate-avatars/B30.png +0 -0
  218. package/lib/public/mate-avatars/B31.png +0 -0
  219. package/lib/public/mate-avatars/B32.png +0 -0
  220. package/lib/public/mate-avatars/B33.png +0 -0
  221. package/lib/public/mate-avatars/B34.png +0 -0
  222. package/lib/public/mate-avatars/B35.png +0 -0
  223. package/lib/public/mate-avatars/B36.png +0 -0
  224. package/lib/public/mate-avatars/B37.png +0 -0
  225. package/lib/public/mate-avatars/B38.png +0 -0
  226. package/lib/public/mate-avatars/B39.png +0 -0
  227. package/lib/public/mate-avatars/B40.png +0 -0
  228. package/lib/public/mate-avatars/B41.png +0 -0
  229. package/lib/public/mate-avatars/B42.png +0 -0
  230. package/lib/public/mate-avatars/B43.png +0 -0
  231. package/lib/public/mate-avatars/B44.png +0 -0
  232. package/lib/public/mate-avatars/B45.png +0 -0
  233. package/lib/public/mate-avatars/B46.png +0 -0
  234. package/lib/public/mate-avatars/B47.png +0 -0
  235. package/lib/public/mate-avatars/B48.png +0 -0
  236. package/lib/public/mate-avatars/C01.png +0 -0
  237. package/lib/public/mate-avatars/C02.png +0 -0
  238. package/lib/public/mate-avatars/C03.png +0 -0
  239. package/lib/public/mate-avatars/C04.png +0 -0
  240. package/lib/public/mate-avatars/C05.png +0 -0
  241. package/lib/public/mate-avatars/C06.png +0 -0
  242. package/lib/public/mate-avatars/C07.png +0 -0
  243. package/lib/public/mate-avatars/C08.png +0 -0
  244. package/lib/public/mate-avatars/C09.png +0 -0
  245. package/lib/public/mate-avatars/C10.png +0 -0
  246. package/lib/public/mate-avatars/C11.png +0 -0
  247. package/lib/public/mate-avatars/C12.png +0 -0
  248. package/lib/public/mate-avatars/C13.png +0 -0
  249. package/lib/public/mate-avatars/C14.png +0 -0
  250. package/lib/public/mate-avatars/C15.png +0 -0
  251. package/lib/public/mate-avatars/C16.png +0 -0
  252. package/lib/public/mate-avatars/C17.png +0 -0
  253. package/lib/public/mate-avatars/C18.png +0 -0
  254. package/lib/public/mate-avatars/C19.png +0 -0
  255. package/lib/public/mate-avatars/C20.png +0 -0
  256. package/lib/public/mate-avatars/C21.png +0 -0
  257. package/lib/public/mate-avatars/C22.png +0 -0
  258. package/lib/public/mate-avatars/C23.png +0 -0
  259. package/lib/public/mate-avatars/C24.png +0 -0
  260. package/lib/public/mate-avatars/C25.png +0 -0
  261. package/lib/public/mate-avatars/C26.png +0 -0
  262. package/lib/public/mate-avatars/C27.png +0 -0
  263. package/lib/public/mate-avatars/C28.png +0 -0
  264. package/lib/public/mate-avatars/C29.png +0 -0
  265. package/lib/public/mate-avatars/C30.png +0 -0
  266. package/lib/public/mate-avatars/C31.png +0 -0
  267. package/lib/public/mate-avatars/C32.png +0 -0
  268. package/lib/public/mate-avatars/C33.png +0 -0
  269. package/lib/public/mate-avatars/C34.png +0 -0
  270. package/lib/public/mate-avatars/C35.png +0 -0
  271. package/lib/public/mate-avatars/C36.png +0 -0
  272. package/lib/public/mate-avatars/C37.png +0 -0
  273. package/lib/public/mate-avatars/C38.png +0 -0
  274. package/lib/public/mate-avatars/C39.png +0 -0
  275. package/lib/public/mate-avatars/C40.png +0 -0
  276. package/lib/public/mate-avatars/C41.png +0 -0
  277. package/lib/public/mate-avatars/C42.png +0 -0
  278. package/lib/public/mate-avatars/C43.png +0 -0
  279. package/lib/public/mate-avatars/C44.png +0 -0
  280. package/lib/public/mate-avatars/C45.png +0 -0
  281. package/lib/public/mate-avatars/C46.png +0 -0
  282. package/lib/public/mate-avatars/C47.png +0 -0
  283. package/lib/public/mate-avatars/C48.png +0 -0
  284. package/lib/public/mate-avatars/catalog.json +482 -0
  285. package/lib/public/mate-avatars/lead-clay.png +0 -0
  286. package/lib/public/modules/account-auth-settings.js +71 -0
  287. package/lib/public/modules/account-transport-settings.js +51 -0
  288. package/lib/public/modules/admin-settings-projects.js +6 -2
  289. package/lib/public/modules/app-connection.js +11 -1
  290. package/lib/public/modules/app-favicon.js +18 -9
  291. package/lib/public/modules/app-header.js +7 -4
  292. package/lib/public/modules/app-loop-ui.js +2 -0
  293. package/lib/public/modules/app-message-router.js +22 -1
  294. package/lib/public/modules/app-messages.js +119 -17
  295. package/lib/public/modules/app-misc.js +3 -1
  296. package/lib/public/modules/app-notifications.js +11 -5
  297. package/lib/public/modules/app-panels.js +61 -123
  298. package/lib/public/modules/app-projects.js +13 -0
  299. package/lib/public/modules/app-rate-limit.js +7 -27
  300. package/lib/public/modules/app-rendering.js +4 -3
  301. package/lib/public/modules/avatar.js +15 -41
  302. package/lib/public/modules/chat-render-runtime.js +20 -0
  303. package/lib/public/modules/clay-browser-links.js +47 -0
  304. package/lib/public/modules/clay-control-activity.js +214 -0
  305. package/lib/public/modules/clay-control-copy.js +36 -0
  306. package/lib/public/modules/clay-control-detail-targets.js +44 -0
  307. package/lib/public/modules/clay-control-object-targets.js +52 -0
  308. package/lib/public/modules/clay-control-target-visibility.js +12 -0
  309. package/lib/public/modules/clay-control-targets.js +44 -0
  310. package/lib/public/modules/clay-log-links.js +23 -0
  311. package/lib/public/modules/clay-navigation-render.js +52 -0
  312. package/lib/public/modules/clay-owner-navigation.js +33 -0
  313. package/lib/public/modules/clay-session-links.js +31 -0
  314. package/lib/public/modules/clay-studio-bridge.js +20 -0
  315. package/lib/public/modules/clay-studio-document.js +67 -0
  316. package/lib/public/modules/clay-studio-render.js +146 -0
  317. package/lib/public/modules/clay-tool-activity.js +140 -0
  318. package/lib/public/modules/clay-tool-presentation.js +342 -0
  319. package/lib/public/modules/command-palette.js +162 -40
  320. package/lib/public/modules/contextual-ask-session.js +26 -0
  321. package/lib/public/modules/contextual-clay-geometry.js +155 -0
  322. package/lib/public/modules/contextual-clay-session.js +130 -0
  323. package/lib/public/modules/contextual-clay-workspace.js +169 -0
  324. package/lib/public/modules/contextual-clay.js +250 -0
  325. package/lib/public/modules/contextual-composer.js +91 -0
  326. package/lib/public/modules/contextual-mate-context.js +117 -0
  327. package/lib/public/modules/contextual-mate-hint.js +40 -0
  328. package/lib/public/modules/contextual-mate-identity.js +23 -0
  329. package/lib/public/modules/contextual-mate-sessions.js +134 -0
  330. package/lib/public/modules/contextual-search.js +137 -0
  331. package/lib/public/modules/contextual-session-citations.js +58 -0
  332. package/lib/public/modules/debate.js +1 -0
  333. package/lib/public/modules/default-ai.js +11 -3
  334. package/lib/public/modules/elicitation-form.js +5 -0
  335. package/lib/public/modules/filebrowser.js +20 -1
  336. package/lib/public/modules/generation-stop.js +8 -5
  337. package/lib/public/modules/git-panel.js +3 -1
  338. package/lib/public/modules/history-replay-batch.js +13 -1
  339. package/lib/public/modules/home-debate-live.js +2 -0
  340. package/lib/public/modules/home-debate-planning.js +7 -7
  341. package/lib/public/modules/home-mate-avatar-editor.js +127 -208
  342. package/lib/public/modules/home-mate-chat.js +8 -6
  343. package/lib/public/modules/home-mate-creation.js +73 -1
  344. package/lib/public/modules/home-mate-settings.js +19 -12
  345. package/lib/public/modules/icon-strip-tooltip.js +2 -1
  346. package/lib/public/modules/input.js +88 -10
  347. package/lib/public/modules/issues-render.js +3 -2
  348. package/lib/public/modules/knowledge-db-workbench.js +4 -4
  349. package/lib/public/modules/markdown.js +6 -34
  350. package/lib/public/modules/mate-avatar-catalog.js +97 -0
  351. package/lib/public/modules/mate-knowledge-workbench.js +1 -1
  352. package/lib/public/modules/mate-management.js +40 -7
  353. package/lib/public/modules/mcp-connection-view.js +31 -13
  354. package/lib/public/modules/mcp-discovery-view.js +31 -0
  355. package/lib/public/modules/mcp-ui.js +23 -4
  356. package/lib/public/modules/mention.js +3 -0
  357. package/lib/public/modules/message-delivery.js +20 -2
  358. package/lib/public/modules/model-picker.js +2 -0
  359. package/lib/public/modules/pane-activation.js +214 -0
  360. package/lib/public/modules/pane-binding.js +82 -0
  361. package/lib/public/modules/pane-bridge.js +7 -4
  362. package/lib/public/modules/pane-browser-bridge.js +22 -0
  363. package/lib/public/modules/pane-file-bridge.js +4 -0
  364. package/lib/public/modules/pane-issue-bridge.js +4 -1
  365. package/lib/public/modules/passkey-browser.js +69 -0
  366. package/lib/public/modules/passkey-server-settings.js +57 -0
  367. package/lib/public/modules/pending-message-queue.js +1 -0
  368. package/lib/public/modules/permission-control.js +5 -4
  369. package/lib/public/modules/personal-settings-dialog.js +7 -1
  370. package/lib/public/modules/product-review.js +26 -0
  371. package/lib/public/modules/profile.js +1 -238
  372. package/lib/public/modules/project-access-recovery.js +17 -0
  373. package/lib/public/modules/project-admin-overview.js +21 -0
  374. package/lib/public/modules/project-chat-identity.js +13 -4
  375. package/lib/public/modules/project-logs-render.js +6 -2
  376. package/lib/public/modules/project-mate-navigation.js +144 -22
  377. package/lib/public/modules/rewind.js +5 -0
  378. package/lib/public/modules/scheduled-tasks.js +2 -0
  379. package/lib/public/modules/scheduler.js +2 -0
  380. package/lib/public/modules/search-clay-chat.js +5 -440
  381. package/lib/public/modules/server-settings-controls.js +10 -0
  382. package/lib/public/modules/server-settings.js +7 -2
  383. package/lib/public/modules/session-actions.js +5 -2
  384. package/lib/public/modules/session-context-menu.js +5 -0
  385. package/lib/public/modules/session-create-form.js +10 -10
  386. package/lib/public/modules/session-folder-layout.js +1 -1
  387. package/lib/public/modules/session-folder-view-menu.js +9 -0
  388. package/lib/public/modules/session-github.js +85 -14
  389. package/lib/public/modules/session-rich-drafts.js +21 -0
  390. package/lib/public/modules/session-switch-defer.js +67 -0
  391. package/lib/public/modules/session-work-primary.js +51 -0
  392. package/lib/public/modules/settings-defaults.js +27 -28
  393. package/lib/public/modules/shared-browser-settings.js +112 -0
  394. package/lib/public/modules/shared-browser-tabs.js +13 -3
  395. package/lib/public/modules/shared-browser.js +29 -6
  396. package/lib/public/modules/sidebar-mobile.js +4 -3
  397. package/lib/public/modules/sidebar-projects.js +1 -0
  398. package/lib/public/modules/sidebar-session-folders-ui.js +1 -1
  399. package/lib/public/modules/sidebar-sessions.js +1 -0
  400. package/lib/public/modules/split-group-restore.js +68 -0
  401. package/lib/public/modules/split-pair-ui.js +1 -0
  402. package/lib/public/modules/split-pane-reconciler.js +15 -0
  403. package/lib/public/modules/split-pane-renderer.js +87 -6
  404. package/lib/public/modules/split-session-boundary.js +1 -1
  405. package/lib/public/modules/split-view.js +60 -68
  406. package/lib/public/modules/sticky-note-markdown.js +72 -6
  407. package/lib/public/modules/sticky-notes-actions.js +30 -0
  408. package/lib/public/modules/sticky-notes-browser.js +9 -2
  409. package/lib/public/modules/sticky-notes-card.js +23 -7
  410. package/lib/public/modules/sticky-notes-checklist.js +116 -0
  411. package/lib/public/modules/sticky-notes-editor.js +108 -44
  412. package/lib/public/modules/sticky-notes-shared.js +50 -2
  413. package/lib/public/modules/sticky-notes-state.js +66 -0
  414. package/lib/public/modules/sticky-notes.js +34 -51
  415. package/lib/public/modules/stt-controller.js +4 -1
  416. package/lib/public/modules/stt-recording.js +1 -1
  417. package/lib/public/modules/stt.js +7 -2
  418. package/lib/public/modules/terminal.js +9 -0
  419. package/lib/public/modules/theme.js +8 -1
  420. package/lib/public/modules/thinking-lifecycle.js +33 -3
  421. package/lib/public/modules/thinking-view.js +23 -1
  422. package/lib/public/modules/tools.js +60 -11
  423. package/lib/public/modules/tui-grab.js +1 -2
  424. package/lib/public/modules/user-settings-account.js +14 -1
  425. package/lib/public/modules/user-settings-appearance.js +10 -3
  426. package/lib/public/modules/user-settings-editors.js +1 -1
  427. package/lib/public/modules/user-settings-layout.js +11 -2
  428. package/lib/public/modules/user-settings-preferences.js +6 -2
  429. package/lib/public/modules/user-settings-profile.js +12 -2
  430. package/lib/public/modules/user-settings-sessions.js +120 -0
  431. package/lib/public/modules/user-settings.js +6 -2
  432. package/lib/public/modules/vendor-login-browser.js +5 -3
  433. package/lib/public/modules/vendor-login.js +2 -2
  434. package/lib/public/modules/vendor-priority.js +15 -1
  435. package/lib/public/modules/wireframe-workbench.js +5 -2
  436. package/lib/public/modules/you-activity.js +3 -1
  437. package/lib/public/modules/you.js +91 -6
  438. package/lib/public/muse-avatar.svg +4 -0
  439. package/lib/public/style.css +6 -0
  440. package/lib/public/sw.js +3 -1
  441. package/lib/safe-bash-commands.js +3 -45
  442. package/lib/scheduled-task-records.js +3 -1
  443. package/lib/scheduler.js +2 -0
  444. package/lib/sdk-bridge.js +342 -401
  445. package/lib/sdk-foreground-admission.js +16 -0
  446. package/lib/sdk-mcp-descriptors.js +2 -37
  447. package/lib/sdk-message-processor.js +52 -17
  448. package/lib/sdk-quota-snapshot.js +1 -1
  449. package/lib/sdk-response-recovery.js +1 -0
  450. package/lib/sdk-worker.js +2 -677
  451. package/lib/server-account-passkeys.js +186 -0
  452. package/lib/server-account-passwords.js +127 -0
  453. package/lib/server-account-security.js +53 -0
  454. package/lib/server-admin.js +63 -16
  455. package/lib/server-appearance-settings.js +13 -1
  456. package/lib/server-auth.js +107 -79
  457. package/lib/server-contextual-clay-settings.js +40 -0
  458. package/lib/server-contextual-mate-sessions.js +70 -0
  459. package/lib/server-dm.js +2 -1
  460. package/lib/server-global-ws.js +10 -20
  461. package/lib/server-home-chat-events.js +18 -4
  462. package/lib/server-home-chat.js +22 -20
  463. package/lib/server-home-clay-entry.js +23 -4
  464. package/lib/server-home-clay-session-links.js +29 -9
  465. package/lib/server-home-mate-creation.js +1 -0
  466. package/lib/server-home-mcp-consent.js +14 -0
  467. package/lib/server-mates.js +25 -62
  468. package/lib/server-owner-ui.js +118 -0
  469. package/lib/server-path-access.js +38 -0
  470. package/lib/server-project-removal.js +22 -0
  471. package/lib/server-settings.js +8 -2
  472. package/lib/server.js +165 -43
  473. package/lib/session-config-transition.js +45 -0
  474. package/lib/session-folders.js +7 -2
  475. package/lib/session-fork-history.js +21 -0
  476. package/lib/session-github.js +9 -2
  477. package/lib/session-hygiene.js +3 -35
  478. package/lib/session-permission-mode.js +4 -3
  479. package/lib/session-skill-scope.js +11 -0
  480. package/lib/session-visibility.js +5 -2
  481. package/lib/session-work-primary.js +50 -0
  482. package/lib/sessions.js +64 -99
  483. package/lib/shared-browser-cookie-sync.js +32 -0
  484. package/lib/shared-browser-cookies.js +79 -0
  485. package/lib/shared-browser-runtime.js +25 -9
  486. package/lib/shared-browser-storage-sync.js +43 -0
  487. package/lib/shared-browser-storage.js +101 -0
  488. package/lib/shared-browser-tools.js +2 -1
  489. package/lib/shared-browser-worker.js +46 -10
  490. package/lib/terminal-manager.js +65 -6
  491. package/lib/tool-llm.js +1 -1
  492. package/lib/tui-transcript-index.js +1 -132
  493. package/lib/user-knowledge-service.js +23 -1
  494. package/lib/users-auth.js +38 -3
  495. package/lib/users-contextual-clay-preferences.js +31 -0
  496. package/lib/users-create.js +97 -0
  497. package/lib/users-permissions.js +2 -8
  498. package/lib/users-server-pin.js +37 -0
  499. package/lib/users.js +18 -84
  500. package/lib/vendor-login-browser.js +1 -11
  501. package/lib/workspace-assignment-service.js +25 -0
  502. package/lib/workspace-query-access.js +4 -1
  503. package/lib/workspace-query-mcp-server.js +1 -1
  504. package/lib/workspace-query-service.js +13 -2
  505. package/lib/ws-request.js +1 -0
  506. package/lib/ws-schema.js +18 -2
  507. package/lib/yoke/acp-agent-profiles.js +7 -5
  508. package/lib/yoke/adapters/antigravity.js +3 -14
  509. package/lib/yoke/adapters/claude-query-contract.js +9 -0
  510. package/lib/yoke/adapters/claude.js +54 -50
  511. package/lib/yoke/adapters/codex-query-contract.js +24 -0
  512. package/lib/yoke/adapters/codex.js +53 -111
  513. package/lib/yoke/adapters/kiro.js +3 -1
  514. package/lib/yoke/adapters/muse-query-contract.js +7 -0
  515. package/lib/yoke/adapters/muse.js +122 -0
  516. package/lib/yoke/auth-events.js +17 -0
  517. package/lib/yoke/claude-hook-installer.js +271 -0
  518. package/lib/yoke/claude-jsonl-watcher.js +204 -0
  519. package/lib/yoke/claude-maintenance.js +55 -0
  520. package/lib/yoke/claude-permission-patterns.js +53 -0
  521. package/lib/yoke/claude-response-recovery.js +155 -0
  522. package/lib/yoke/claude-transcript-hygiene.js +34 -0
  523. package/lib/yoke/claude-worker-startup.js +28 -0
  524. package/lib/yoke/clay-skill-install.js +33 -0
  525. package/lib/yoke/cli-sessions.js +300 -0
  526. package/lib/yoke/codex-app-server.js +7 -12
  527. package/lib/yoke/codex-idle-recovery.js +81 -1
  528. package/lib/yoke/codex-recovery-admission.js +164 -0
  529. package/lib/yoke/configuration.js +13 -0
  530. package/lib/yoke/discovery.js +70 -0
  531. package/lib/yoke/errors.js +8 -0
  532. package/lib/yoke/host-environment.js +7 -0
  533. package/lib/yoke/index.js +9 -51
  534. package/lib/yoke/interface.js +116 -0
  535. package/lib/yoke/kiro-acp-server.js +5 -5
  536. package/lib/yoke/legacy-sessions.js +89 -0
  537. package/lib/yoke/login-protocol.js +25 -0
  538. package/lib/yoke/maintenance.js +12 -0
  539. package/lib/yoke/mcp-proxy.js +32 -0
  540. package/lib/yoke/mcp-source-adapters.js +91 -0
  541. package/lib/yoke/mcp-source-context.js +42 -0
  542. package/lib/yoke/mcp-source-discovery.js +169 -0
  543. package/lib/yoke/mcp-source-plugins.js +68 -0
  544. package/lib/yoke/mcp-source-restrictions.js +47 -0
  545. package/lib/yoke/mcp-tool-policy-normalize.js +28 -0
  546. package/lib/yoke/model-preferences.js +6 -0
  547. package/lib/yoke/muse-artifacts.js +36 -0
  548. package/lib/yoke/muse-controls.js +50 -0
  549. package/lib/yoke/muse-input.js +64 -0
  550. package/lib/yoke/muse-items.js +157 -0
  551. package/lib/yoke/muse-policy.js +52 -0
  552. package/lib/yoke/muse-query.js +428 -0
  553. package/lib/yoke/muse-runtime.js +211 -0
  554. package/lib/yoke/muse-services.js +79 -0
  555. package/lib/yoke/muse-skills.js +79 -0
  556. package/lib/yoke/muse-turns.js +71 -0
  557. package/lib/yoke/options/acp.js +2 -0
  558. package/lib/yoke/options/antigravity.js +2 -0
  559. package/lib/yoke/options/claude.js +21 -0
  560. package/lib/yoke/options/codex-defaults.js +29 -0
  561. package/lib/yoke/options/codex-settings.js +21 -0
  562. package/lib/yoke/options/codex.js +6 -0
  563. package/lib/yoke/options/kiro-defaults.js +22 -0
  564. package/lib/yoke/options/kiro.js +5 -0
  565. package/lib/yoke/options/muse.js +5 -0
  566. package/lib/yoke/provider-contract.js +5 -0
  567. package/lib/yoke/providers/antigravity-executable.js +8 -0
  568. package/lib/yoke/providers/claude-executable.js +40 -0
  569. package/lib/yoke/providers/claude-model-descriptions.js +14 -0
  570. package/lib/yoke/providers/claude-process.js +97 -0
  571. package/lib/yoke/providers/claude-provision.js +75 -0
  572. package/lib/yoke/providers/codex-errors.js +8 -0
  573. package/lib/yoke/providers/muse-executable.js +17 -0
  574. package/lib/yoke/provisioning.js +6 -0
  575. package/lib/yoke/query-options.js +10 -0
  576. package/lib/yoke/response-recovery.js +41 -0
  577. package/lib/yoke/sdk-mcp-descriptors.js +37 -0
  578. package/lib/yoke/sdk-server-factory.js +7 -0
  579. package/lib/yoke/session-history.js +8 -0
  580. package/lib/yoke/session-tool-transport.js +34 -13
  581. package/lib/yoke/settings.js +23 -0
  582. package/lib/yoke/source-locations.js +4 -0
  583. package/lib/yoke/title-query.js +18 -7
  584. package/lib/yoke/tui-transcript-index.js +132 -0
  585. package/lib/yoke/usage.js +48 -0
  586. package/lib/yoke/user-input.js +13 -0
  587. package/lib/yoke/vendor-registry.js +81 -1
  588. package/package.json +11 -4
package/lib/project.js CHANGED
@@ -46,6 +46,8 @@ var { attachShellCommand } = require("./project-shell-command");
46
46
  var { attachVendorLogin } = require("./project-vendor-login");
47
47
  var { attachConnection } = require("./project-connection");
48
48
  var { attachProjectScheduledMessages } = require("./project-scheduled-messages");
49
+ var { attachMateScheduling } = require("./mate-scheduling");
50
+ var { attachMateScheduleLifecycle } = require("./mate-schedule-lifecycle");
49
51
  var { attachMcp } = require("./project-mcp");
50
52
  var { createSessionSkillCatalog } = require("./yoke/session-skill-catalog");
51
53
  var { attachEmail: attachEmailModule } = require("./project-email");
@@ -229,6 +231,8 @@ function createProjectContext(opts) {
229
231
  var getScheduleCount = opts.getScheduleCount || function () { return 0; };
230
232
  var notifyProcessingChanged = opts.onProcessingChanged || function () {};
231
233
  var _scheduledMessages = null;
234
+ var _mateScheduling = null;
235
+ var _mateLifecycle = null;
232
236
  var _scheduledTasks = null;
233
237
  var _scheduledTaskExecution = null;
234
238
  function onProcessingChanged() {
@@ -348,6 +352,10 @@ function createProjectContext(opts) {
348
352
  function getRuntimeEnvForSession(session) {
349
353
  var linuxUser = (session && session.linuxUser) || getLinuxUserForSession(session);
350
354
  var osUserInfo = getOsUserInfoForLinuxUser(linuxUser);
355
+ return resolveOwnerRuntimeEnv(osUserInfo);
356
+ }
357
+
358
+ function resolveOwnerRuntimeEnv(osUserInfo) {
351
359
  var baseEnv = osUserInfo ? buildUserEnv(osUserInfo) : process.env;
352
360
  var shared = typeof opts.onGetSharedEnv === "function" ? opts.onGetSharedEnv() : null;
353
361
  var projectEnv = typeof opts.onGetProjectEnv === "function" ? opts.onGetProjectEnv(slug) : null;
@@ -451,7 +459,8 @@ function createProjectContext(opts) {
451
459
  if (obj.type === "loop_registry_updated") payload.records = getHubSchedules(userId);
452
460
  else payload.schedules = getHubSchedules(userId);
453
461
  }
454
- ws.send(JSON.stringify(payload));
462
+ payload = require('./pane-session-transport').outbound(ws, payload);
463
+ if (payload) ws.send(JSON.stringify(payload));
455
464
  }
456
465
 
457
466
  function sendToAdmins(obj) {
@@ -543,24 +552,27 @@ function createProjectContext(opts) {
543
552
  || !!(ws._clayUser && ws._clayUser.id === session.userKnowledgeOwnerId);
544
553
  }
545
554
 
546
- function sendToSession(sessionId, obj) {
547
- var data = JSON.stringify(obj);
555
+ function sendToSession(sessionId, obj, onSent) {
556
+ var data = JSON.stringify(obj), delivered = 0;
548
557
  for (var ws of clients) {
549
558
  if (ws.readyState === 1 && canReceiveMate(ws) && canReceiveYou(ws, sessionId) && ws._clayActiveSession === sessionId) {
550
- ws.send(data);
559
+ var panePayload = require('./pane-session-transport').outbound(ws, obj, sessionId);
560
+ if (panePayload) { ws.send(JSON.stringify(panePayload)); delivered++; if (onSent) onSent(ws); }
551
561
  }
552
562
  }
553
563
  homeDebateClients.forEach(function (ws) {
554
564
  if (ws.readyState !== 1) { homeDebateClients.delete(ws); return; }
555
- if (canReceiveMate(ws) && canReceiveYou(ws, sessionId) && !clients.has(ws) && ws._clayHomeDebateSlug === slug && ws._clayActiveSession === sessionId) ws.send(data);
565
+ if (canReceiveMate(ws) && canReceiveYou(ws, sessionId) && !clients.has(ws) && ws._clayHomeDebateSlug === slug && ws._clayActiveSession === sessionId) { ws.send(data); delivered++; if (onSent) onSent(ws); }
556
566
  });
567
+ return delivered;
557
568
  }
558
569
 
559
570
  function sendToSessionOthers(sender, sessionId, obj) {
560
571
  var data = JSON.stringify(obj);
561
572
  for (var ws of clients) {
562
573
  if (ws !== sender && ws.readyState === 1 && canReceiveMate(ws) && canReceiveYou(ws, sessionId) && ws._clayActiveSession === sessionId) {
563
- ws.send(data);
574
+ var panePayload = require('./pane-session-transport').outbound(ws, obj, sessionId);
575
+ if (panePayload) ws.send(JSON.stringify(panePayload));
564
576
  }
565
577
  }
566
578
  }
@@ -646,7 +658,8 @@ function createProjectContext(opts) {
646
658
  var access = opts.getProjectAccess ? opts.getProjectAccess() : { visibility: "public", ownerId: projectOwnerId || null };
647
659
  if (!viewer || (opts.canAccessProjectSlug && !opts.canAccessProjectSlug(viewer.id, slug)) || !usersModule.canAccessSession(viewer.id, session, access)) return;
648
660
  }
649
- ws.send(data);
661
+ var panePayload = ws._clayPaneActivation ? require('./pane-session-transport').outbound(ws, message, session.localId) : message;
662
+ if (panePayload) ws.send(panePayload === message ? data : JSON.stringify(panePayload));
650
663
  });
651
664
  },
652
665
  authorize: function (session, actor) {
@@ -709,7 +722,22 @@ function createProjectContext(opts) {
709
722
 
710
723
  // Personal computer tools use the extension; remote URLs are owner-bound.
711
724
  var _mcp = attachMcp({
712
- sendTo: sendTo, slug: slug, clients: clients,
725
+ sendTo: sendTo, slug: slug, clients: clients, cwd: cwd,
726
+ userInput: function (session) { return _askUser.createHandler(session); },
727
+ runtimeEnvForSession: getRuntimeEnvForSession,
728
+ canDiscoverSession: function (session) { var scope = _requestAccess.fileScope({ _clayUser: session.ownerId && usersModule.findUserById(session.ownerId) }); return !!scope.identity || !scope.projectBound; },
729
+ sessionVendor: function (session) { return session.vendor || sm.defaultVendor || "claude"; },
730
+ runtimeEnv: function (owner, ws) { return resolveOwnerRuntimeEnv(_requestAccess.fileScope(ws).identity); },
731
+ canDiscover: function (ws) { var scope = _requestAccess.fileScope(ws); return !!scope.identity || !scope.projectBound; },
732
+ ownerIdentity: function (owner) {
733
+ if (!osUsers) {
734
+ if (usersModule.isMultiUser() && (usersModule.getAllUsers().length !== 1 || !usersModule.findUserById(owner))) throw new Error('Local MCP requires OS user mapping in a shared installation.');
735
+ return null;
736
+ }
737
+ var user = usersModule.findUserById(owner);
738
+ if (!user || !user.linuxUser) throw new Error('OS user identity is unavailable.');
739
+ return getOsUserInfoForWs({ _clayUser: user });
740
+ },
713
741
  root: require("./config").CONFIG_DIR,
714
742
  isMultiUser: function () { return usersModule.isMultiUser(); },
715
743
  canAccess: function (ws) { return _requestAccess.canAccessProject(ws, slug); },
@@ -768,8 +796,15 @@ function createProjectContext(opts) {
768
796
  }
769
797
  },
770
798
  });
799
+ var _studioPresentation = require('./project-studio-presentation').attachStudioPresentation({
800
+ getPresentation: function (session) { return _workspaceQuery && _workspaceQuery.getPresentation(session); },
801
+ getSessionForWs: getSessionForWs,
802
+ });
771
803
  var _sharedBrowser = attachSharedBrowser({
772
- slug: slug, isMate: isMate, sm: sm, clients: clients, sendTo: sendTo,
804
+ studioPresentation: _studioPresentation,
805
+ sendToSession: sendToSession,
806
+ getPresentation: function (session) { return _workspaceQuery && _workspaceQuery.getPresentation(session); },
807
+ slug: slug, isMate: isMate, ownerId: projectOwnerId, sm: sm, clients: clients, sendTo: sendTo,
773
808
  usersModule: usersModule, requestAccess: _requestAccess, osUsers: osUsers,
774
809
  getSessionForWs: getSessionForWs,
775
810
  getIdentity: function (session) {
@@ -778,8 +813,11 @@ function createProjectContext(opts) {
778
813
  },
779
814
  });
780
815
  var _sessionDocument = attachSessionDocument({
816
+ studioPresentation: _studioPresentation,
817
+ getPresentation: function (session) { return _workspaceQuery && _workspaceQuery.getPresentation(session); },
781
818
  cwd: cwd,
782
819
  isMate: isMate,
820
+ canUseSession: _sessionNotes.canUseSession,
783
821
  sendToSession: sendToSession,
784
822
  FS_MAX_SIZE: FS_MAX_SIZE,
785
823
  getOsUserInfoForSession: function (session) {
@@ -799,6 +837,8 @@ function createProjectContext(opts) {
799
837
  });
800
838
  var _workspaceQuery = attachProjectWorkspaceQuery({
801
839
  service: opts.workspaceQueryService || null,
840
+ controlService: opts.clayProductControl || null,
841
+ contextService: opts.mateContextService || null,
802
842
  sm: sm,
803
843
  projectSlug: slug,
804
844
  getProjectOwnerId: function () { return projectOwnerId; },
@@ -839,7 +879,12 @@ function createProjectContext(opts) {
839
879
  sendTo: sendTo, getClients: function () { return clients; }, startWork: _issueWork,
840
880
  });
841
881
  var _sessionGithub = require("./project-session-github").attachSessionGithub({
842
- cwd: cwd, sm: sm, isMate: isMate, osUsers: osUsers,
882
+ cwd: cwd, sm: sm, isMate: isMate, osUsers: osUsers, projectSlug: slug, sendTo: sendTo,
883
+ userInput: function (session) { return _askUser.createHandler(session); },
884
+ canAccess: function (ws) {
885
+ return !isMate && clients.has(ws) && ws.readyState === 1 && (!usersModule.isMultiUser() ||
886
+ !!(ws._clayUser && usersModule.findUserById(ws._clayUser.id) && opts.canAccessProjectSlug(ws._clayUser.id, slug)));
887
+ },
843
888
  canUse: function (session) {
844
889
  if (session.hidden || session.delegated || session._pairDelegation || session._delegatedBy || require("./session-provenance").isWorker(session)) return false;
845
890
  if (!usersModule.isMultiUser()) return true;
@@ -858,9 +903,10 @@ function createProjectContext(opts) {
858
903
  });
859
904
  var _sessionLinear = require("./project-session-linear").attachSessionLinear({
860
905
  sm: sm, isMate: isMate, storage: opts.linearStorage, projectSlug: slug,
906
+ userInput: function (session) { return _askUser.createHandler(session); },
861
907
  isMultiUser: usersModule.isMultiUser, sendTo: sendTo,
862
908
  canAccess: function (ws) {
863
- return !isMate && clients.has(ws) && ws.readyState === 1 && (!usersModule.isMultiUser() ||
909
+ return clients.has(ws) && ws.readyState === 1 && (!usersModule.isMultiUser() ||
864
910
  !!(ws._clayUser && usersModule.findUserById(ws._clayUser.id) && opts.canAccessProjectSlug(ws._clayUser.id, slug)));
865
911
  },
866
912
  startWork: require('./project-linear-launch').attachLinearLaunch({
@@ -1021,6 +1067,7 @@ function createProjectContext(opts) {
1021
1067
  persistSession: function (session) { return sm.saveSessionFile(session); },
1022
1068
  getVendorModelCatalog: function (ws, vendor) { return _models.getVendorCatalog(ws, vendor); },
1023
1069
  createReadyMate: opts.createReadyMate,
1070
+ isLive: function (session) { return sm.sessions.get(session.localId) === session; },
1024
1071
  });
1025
1072
  var _askUser = attachAskUser({
1026
1073
  record: function (session, event) { sm.sendAndRecord(session, event); },
@@ -1055,14 +1102,12 @@ function createProjectContext(opts) {
1055
1102
  }
1056
1103
  }
1057
1104
 
1058
- // Shared sticky-note memory (main projects only).
1059
- if (!isMate) {
1060
- try {
1061
- var sessionNotesMcpConfig = _sessionNotes.createMcpServer(adapter);
1062
- if (sessionNotesMcpConfig) servers[sessionNotesMcpConfig.name || "clay-notes"] = sessionNotesMcpConfig;
1063
- } catch (e) {
1064
- console.error("[project] Failed to create session notes MCP server:", e.message);
1065
- }
1105
+ // Shared sticky-note memory is available in both owner-private projects and Mates.
1106
+ try {
1107
+ var sessionNotesMcpConfig = _sessionNotes.createMcpServer(adapter);
1108
+ if (sessionNotesMcpConfig) servers[sessionNotesMcpConfig.name || "clay-notes"] = sessionNotesMcpConfig;
1109
+ } catch (e) {
1110
+ console.error("[project] Failed to create session notes MCP server:", e.message);
1066
1111
  }
1067
1112
 
1068
1113
  // Project Logs. Project sessions get the project-scoped set; Mate projects
@@ -1107,13 +1152,11 @@ function createProjectContext(opts) {
1107
1152
  if (sharedBrowserConfig) servers["clay-shared-browser"] = sharedBrowserConfig;
1108
1153
 
1109
1154
  // Explicit agent signal for user-requested Markdown presentation.
1110
- if (!isMate) {
1111
- try {
1112
- var sessionDocumentMcpConfig = _sessionDocument.createMcpServer(adapter);
1113
- if (sessionDocumentMcpConfig) servers[sessionDocumentMcpConfig.name || "clay-documents"] = sessionDocumentMcpConfig;
1114
- } catch (e) {
1115
- console.error("[project] Failed to create session document MCP server:", e.message);
1116
- }
1155
+ try {
1156
+ var sessionDocumentMcpConfig = _sessionDocument.createMcpServer(adapter);
1157
+ if (sessionDocumentMcpConfig) servers[sessionDocumentMcpConfig.name || "clay-documents"] = sessionDocumentMcpConfig;
1158
+ } catch (e) {
1159
+ console.error("[project] Failed to create session document MCP server:", e.message);
1117
1160
  }
1118
1161
 
1119
1162
  // Debate MCP server (available to both mates and main project)
@@ -1383,6 +1426,7 @@ function createProjectContext(opts) {
1383
1426
 
1384
1427
  // --- SDK bridge ---
1385
1428
  sdk = createSDKBridge({
1429
+ isLifecycleExecutionPaused: function () { return !!(opts.getProjectAccess && opts.getProjectAccess().lifecycleExecutionPaused); },
1386
1430
  cwd: cwd,
1387
1431
  slug: slug,
1388
1432
  sessionManager: sm,
@@ -1458,6 +1502,7 @@ function createProjectContext(opts) {
1458
1502
  _sessionGithub.getSystemPrompt(session),
1459
1503
  _sessionLinear.getSystemPrompt(session),
1460
1504
  _scheduledTasks ? _scheduledTasks.getSystemPrompt(session) : "",
1505
+ _mateScheduling ? _mateScheduling.getSystemPrompt(session) : "",
1461
1506
  _mateKnowledge.getSystemPrompt(session),
1462
1507
  _userKnowledge.getSystemPrompt(session),
1463
1508
  _autonomousRun ? _autonomousRun.getSystemPrompt(session) : "",
@@ -1487,6 +1532,7 @@ function createProjectContext(opts) {
1487
1532
  .concat(opts.userKnowledgeService ? _userKnowledge.getDynamicToolDefs(session) : [])
1488
1533
  .concat(_loopInterview ? _loopInterview.getToolDefs(session) : [])
1489
1534
  .concat(_scheduledTasks ? _scheduledTasks.getToolDefs(session) : [])
1535
+ .concat(_mateScheduling ? _mateScheduling.getToolDefs(session) : [])
1490
1536
  .concat(_scheduledTaskExecution ? _scheduledTaskExecution.getToolDefs(session) : [])
1491
1537
  .concat(_autonomousRun ? _autonomousRun.getToolDefs(session) : []);
1492
1538
  },
@@ -1542,6 +1588,8 @@ function createProjectContext(opts) {
1542
1588
 
1543
1589
  _scheduledMessages = attachProjectScheduledMessages({
1544
1590
  scheduler: opts.durableScheduler,
1591
+ mateLifecycle: function () { return _mateLifecycle; },
1592
+ deferRehydrate: isMate,
1545
1593
  slug: slug,
1546
1594
  isMate: isMate,
1547
1595
  osUsers: osUsers,
@@ -1564,6 +1612,32 @@ function createProjectContext(opts) {
1564
1612
  consumePendingMessage: function (session) { return _userMessage && _userMessage.consumePendingMessage(session); },
1565
1613
  });
1566
1614
 
1615
+ var _schedulingAccess = require('./project-scheduling-access').attachSchedulingAccess({ osUsers: osUsers, getLinuxUser: getLinuxUserForSession, resolveLinuxUser: getOsUserInfoForLinuxUser });
1616
+ _mateLifecycle = attachMateScheduleLifecycle({
1617
+ sm: sm, scheduler: opts.durableScheduler, slug: slug,
1618
+ owner: function (session) { return _mateScheduling.owner(session); },
1619
+ authorize: function (session, control) { return control ? _mateScheduling.authorizeControl(session, control) : _mateScheduling.authorize(session); },
1620
+ authorizeRuntime: function (session) { return _mateScheduling.authorizeLifecycle(session); },
1621
+ schedule: function () { return _scheduledMessages.schedule.apply(null, arguments); },
1622
+ queueItem: function (session, job) { return _scheduledMessages.queueItem(session, job); },
1623
+ cancelJob: function (session, job) {
1624
+ return _scheduledMessages.cancel(session, { id: job.ownerId }, null, "cancelled_by_mate", { jobId: job.id, revision: job.payload.revision });
1625
+ },
1626
+ });
1627
+ _mateScheduling = attachMateScheduling({
1628
+ isMate: isMate, isHostAgent: isHostAgent, projectOwnerId: projectOwnerId, slug: slug, mateId: opts.mateId,
1629
+ sm: sm, users: usersModule, lifecycle: _mateLifecycle,
1630
+ authorizeAccess: function (session, ownerId) { _schedulingAccess.ownerIdentity(session); return _scheduledMessages.authorize(session, ownerId); },
1631
+ userInput: function (session) { return _askUser.createHandler(session); },
1632
+ });
1633
+ if (isMate) {
1634
+ sm.sessions.forEach(function (session) {
1635
+ try { _mateLifecycle.reconcile(session); }
1636
+ catch (error) { console.error("[mate-schedules] Recovery failed:", error.message); }
1637
+ });
1638
+ _scheduledMessages.rehydrate();
1639
+ }
1640
+
1567
1641
  // --- Loop engine (delegated to project-loop.js) ---
1568
1642
  // --- Notification center (global singleton from server.js) ---
1569
1643
  var _notifications = opts.notificationsModule || null;
@@ -1645,6 +1719,7 @@ function createProjectContext(opts) {
1645
1719
  cwd: cwd,
1646
1720
  projectSlug: slug,
1647
1721
  projectTitle: title || project,
1722
+ validateOwnerIdentity: _schedulingAccess.ownerIdentity,
1648
1723
  isMate: isMate,
1649
1724
  sm: sm,
1650
1725
  sdk: sdk,
@@ -1743,8 +1818,8 @@ function createProjectContext(opts) {
1743
1818
  }
1744
1819
 
1745
1820
  // --- Schedule / cancel a message (used by WS handler and auto-continue) ---
1746
- function scheduleMessage(session, text, resetsAt, actorUser, targetWs, attachments, requestId, transportAccountId) {
1747
- return _scheduledMessages ? _scheduledMessages.schedule(session, text, resetsAt, actorUser, targetWs, attachments, requestId, transportAccountId) : null;
1821
+ function scheduleMessage(session, text, resetsAt, actorUser, targetWs, attachments, requestId, transportAccountId, options) {
1822
+ return _scheduledMessages ? _scheduledMessages.schedule(session, text, resetsAt, actorUser, targetWs, attachments, requestId, transportAccountId, options) : null;
1748
1823
  }
1749
1824
 
1750
1825
  function cancelScheduledMessage(session, actorUser, targetWs, correlation) {
@@ -1756,6 +1831,10 @@ function createProjectContext(opts) {
1756
1831
  }
1757
1832
 
1758
1833
  function handleMessage(ws, msg) {
1834
+ return require('./pane-session-transport').run(ws, msg, dispatchMessage);
1835
+ }
1836
+
1837
+ function dispatchMessage(ws, msg) {
1759
1838
  if (!_requestAccess.permitMessage(ws, msg)) return;
1760
1839
  // --- Keep-alive (delegated to project-connection.js) ---
1761
1840
  // Answered before any routing so a ping can never be forwarded elsewhere.
@@ -1777,8 +1856,10 @@ function createProjectContext(opts) {
1777
1856
  }
1778
1857
  }
1779
1858
 
1859
+ if (_studioPresentation.handleMessage(ws, msg)) return;
1860
+
1780
1861
  // --- DM messages (delegated to server-level handler) ---
1781
- if (msg.type === "home_debate_question_response" || msg.type === "home_debate_control" || msg.type === "home_mate_creation_question_response" || msg.type === "default_ai_get" || msg.type === "default_ai_catalog_get" || msg.type === "default_ai_set" || msg.type === "default_vendor_get" || msg.type === "default_vendor_set" || msg.type === "context_view_get" || msg.type === "context_view_set" || msg.type === "cursor_sharing_get" || msg.type === "cursor_sharing_set") {
1862
+ if (msg.type === "home_mate_question_response" || msg.type === "mate_context_prepare" || msg.type === "clay_ui_ready" || msg.type === "clay_navigation_claim" || msg.type === "clay_navigation_ack" || msg.type === "clay_navigation_rendered" || msg.type === "home_debate_question_response" || msg.type === "home_debate_control" || msg.type === "home_mate_creation_question_response" || msg.type === "default_ai_get" || msg.type === "default_ai_catalog_get" || msg.type === "default_ai_set" || msg.type === "default_vendor_get" || msg.type === "default_vendor_set" || msg.type === "context_view_get" || msg.type === "context_view_set" || msg.type === "cursor_sharing_get" || msg.type === "cursor_sharing_set") {
1782
1863
  if (typeof opts.onDmMessage === "function") opts.onDmMessage(ws, msg, slug);
1783
1864
  return;
1784
1865
  }
@@ -2074,6 +2155,9 @@ function createProjectContext(opts) {
2074
2155
  });
2075
2156
  sm.setSessionHydrator(_sessionSkillCatalog.hydrate);
2076
2157
  var _sessions = attachSessions({
2158
+ splitStore: _splitGroups.store,
2159
+ adapters: adapters,
2160
+ isPendingQueuePaused: function (session) { return _pendingMessageQueue.isPaused(session); },
2077
2161
  cwd: cwd,
2078
2162
  slug: slug,
2079
2163
  isMate: isMate,
@@ -2147,6 +2231,26 @@ function createProjectContext(opts) {
2147
2231
  _notifications: _notifications,
2148
2232
  _projectLogs: _projectLogs,
2149
2233
  });
2234
+ var _productControl = require("./project-product-control").attachProjectProductControl({
2235
+ sm: sm, users: usersModule, clients: clients, slug: slug, isMate: isMate, osUsers: osUsers,
2236
+ getProjectAccess: opts.getProjectAccess || function () { return { visibility: "public", ownerId: projectOwnerId || null }; },
2237
+ userInput: function (session) { return _askUser.createHandler(session); },
2238
+ actions: _sessions.sessionActions, history: _sessions.sessionHistoryActions, selectModel: function (session, model, options) { return _models.selectSessionModel(session, model, null, options); },
2239
+ isDriverOperatedSession: function (session) { return _sessionPair.workerPermission.isDriverOperated(session); },
2240
+ deletePlan: _sessions.deleteProductControlPlan,
2241
+ queue: _pendingMessageQueue,
2242
+ requestQueueDrain: function (session) { if (_userMessage) _userMessage.consumePendingMessage(session); },
2243
+ vendor: _sessions.sessionVendorActions,
2244
+ runtime: _sessions.sessionRuntimeActions,
2245
+ });
2246
+ var _mateChatControl = require('./project-mate-chat-control').attachMateChatControl({
2247
+ sm: sm, sdk: sdk, isMate: isMate, osUsers: osUsers, getLinuxUser: getLinuxUserForSession,
2248
+ users: usersModule, getAccess: opts.getProjectAccess || function () { return { isMate: isMate, ownerId: projectOwnerId || null, visibility: 'private' }; },
2249
+ actions: _sessions.sessionActions, vendor: _sessions.sessionVendorActions,
2250
+ selectModel: function (session, model, options) { return _models.selectSessionModel(session, model, null, options); },
2251
+ });
2252
+
2253
+
2150
2254
 
2151
2255
  var _models = attachModels({
2152
2256
  cwd: cwd,
@@ -2193,6 +2297,7 @@ function createProjectContext(opts) {
2193
2297
  });
2194
2298
  var _delegatedFollowUp = attachDelegatedFollowUp({
2195
2299
  sm: sm,
2300
+ isPendingQueuePaused: function (session) { return _pendingMessageQueue.isPaused(session); },
2196
2301
  getSdk: function () { return sdk; },
2197
2302
  getLinuxUserForSession: getLinuxUserForSession,
2198
2303
  onProcessingChanged: onProcessingChanged,
@@ -2207,6 +2312,12 @@ function createProjectContext(opts) {
2207
2312
 
2208
2313
  // --- User message handler (delegated to project-user-message.js) ---
2209
2314
  var _userMessage = attachUserMessage({
2315
+ isLifecycleExecutionPaused: function () { return !!(opts.getProjectAccess && opts.getProjectAccess().lifecycleExecutionPaused); },
2316
+ resumeLifecycleProject: function (ws) {
2317
+ if (!opts.getProjectAccess || !opts.getProjectAccess().lifecycleExecutionPaused) return true;
2318
+ if (!clients.has(ws) || !ws._clayUser || !opts.resumeLifecycleProject) throw new Error('The current owner must explicitly resume recovered project execution.');
2319
+ return opts.resumeLifecycleProject(ws._clayUser.id);
2320
+ },
2210
2321
  // Exact live pair state decides whether a session is Driver-operated; the
2211
2322
  // handler never infers the role from the message.
2212
2323
  isDriverOperatedSession: function (session) {
@@ -2234,6 +2345,7 @@ function createProjectContext(opts) {
2234
2345
  cwd: cwd,
2235
2346
  slug: slug,
2236
2347
  isMate: isMate,
2348
+ mateId: mateId,
2237
2349
  osUsers: osUsers,
2238
2350
  sm: sm,
2239
2351
  sdk: sdk,
@@ -2329,6 +2441,13 @@ function createProjectContext(opts) {
2329
2441
  FS_MAX_SIZE: FS_VIEWER_MAX_SIZE,
2330
2442
  });
2331
2443
 
2444
+ var _workspaceOperations = require('./project-workspace-operations').attachWorkspaceOperations({
2445
+ cwd: cwd, isMate: isMate, osUsers: osUsers, users: usersModule, tm: tm,
2446
+ getAccess: opts.getProjectAccess || function () { return { ownerId: projectOwnerId || null, visibility: 'private' }; },
2447
+ files: function () { return _filesystem.productOperations; },
2448
+ publishTerminals: function () { send({ type: 'term_list', terminals: tm.list(true) }); },
2449
+ });
2450
+
2332
2451
  // --- MCP bridge handler for Codex and session-bound Kiro tools ---
2333
2452
  // Provides list_tools and call_tool operations over HTTP for mcp-bridge-server.js.
2334
2453
  // The normal Codex bridge excludes local MCP servers it manages natively;
@@ -2336,6 +2455,8 @@ function createProjectContext(opts) {
2336
2455
  function getMcpBridgeHandler(sessionId, sessionOnly, queryGeneration) {
2337
2456
  var boundSession = Number.isInteger(sessionId) ? sm.sessions.get(sessionId) : null;
2338
2457
  var queryToolBridge = createSessionQueryToolBridge({ session: boundSession, sdk: sdk });
2458
+ var externalQueryBridge = require('./mcp-query-bridge').createQueryBridge({ valid: sessionQueryValid,
2459
+ getServers: function () { return _mcp.getMcpServers(boundSession, sessionQueryValid()); } });
2339
2460
  function sessionQueryValid() {
2340
2461
  return !!boundSession
2341
2462
  && Number.isInteger(queryGeneration)
@@ -2460,7 +2581,7 @@ function createProjectContext(opts) {
2460
2581
  }
2461
2582
  }
2462
2583
 
2463
- if (sessionOnly) return Promise.resolve(tools);
2584
+ if (sessionOnly) return Promise.resolve(tools.concat(externalQueryBridge.list()));
2464
2585
 
2465
2586
  // In-app MCP servers (debate, browser, email).
2466
2587
  // Use getLocalMcpServers() so clay-browser is hidden unless the
@@ -2480,7 +2601,7 @@ function createProjectContext(opts) {
2480
2601
  }
2481
2602
 
2482
2603
  // Personal computer and remote URL connections.
2483
- var remoteServers = _mcp.getMcpServers(boundSession);
2604
+ var remoteServers = sessionQueryValid() ? _mcp.getMcpServers(boundSession, sessionQueryValid()) : {};
2484
2605
  if (remoteServers) {
2485
2606
  var remoteNames = Object.keys(remoteServers);
2486
2607
  for (var ri = 0; ri < remoteNames.length; ri++) {
@@ -2578,7 +2699,7 @@ function createProjectContext(opts) {
2578
2699
  if (serverName === "clay-sessions" || serverName === "clay-notes" || serverName === "clay-handoff" || serverName === "clay-documents" || serverName === "clay-shared-browser" || serverName === "clay-debate" || serverName === "clay-mate-creation" || serverName === "clay-workspace" || serverName === "clay-history" || serverName === "clay-github" || serverName === "clay-linear" || serverName === "clay-issues" || serverName === "clay-logs" || serverName === "clay-knowledge" || serverName === "clay-you") {
2579
2700
  return Promise.reject(new Error("Session-bound tool requires a valid Clay session: " + serverName + "/" + toolName));
2580
2701
  }
2581
- if (sessionOnly) return Promise.reject(new Error("Session tool not found: " + serverName + "/" + toolName));
2702
+ if (sessionOnly) return externalQueryBridge.call(serverName, toolName, args);
2582
2703
  // Try in-app servers first (gated by extension connectivity for clay-browser).
2583
2704
  var localMcp = getLocalMcpServers(boundSession);
2584
2705
  if (localMcp && localMcp[serverName]) {
@@ -2590,17 +2711,7 @@ function createProjectContext(opts) {
2590
2711
  }
2591
2712
  }
2592
2713
  }
2593
- // Try remote/local proxy servers
2594
- var remoteServers = _mcp.getMcpServers(boundSession);
2595
- if (remoteServers && remoteServers[serverName]) {
2596
- var rServer = remoteServers[serverName];
2597
- if (rServer.instance && rServer.instance._registeredTools && rServer.instance._registeredTools[toolName]) {
2598
- var rHandler = rServer.instance._registeredTools[toolName].handler;
2599
- if (typeof rHandler === "function") {
2600
- return Promise.resolve(rHandler(args));
2601
- }
2602
- }
2603
- }
2714
+ if (externalQueryBridge.list().some(function (tool) { return tool.server === serverName && tool.name === toolName; })) return externalQueryBridge.call(serverName, toolName, args);
2604
2715
  return Promise.reject(new Error("Tool not found: " + serverName + "/" + toolName));
2605
2716
  },
2606
2717
  };
@@ -2608,6 +2719,8 @@ function createProjectContext(opts) {
2608
2719
 
2609
2720
  // --- HTTP handler (delegated to project-http.js) ---
2610
2721
  var _http = attachHTTP({
2722
+ workspaceOperations: _workspaceOperations,
2723
+ getProjectOwnerId: function () { return projectOwnerId; },
2611
2724
  requestAccess: _requestAccess,
2612
2725
  cwd: cwd,
2613
2726
  slug: slug,
@@ -2766,6 +2879,7 @@ function createProjectContext(opts) {
2766
2879
  return false;
2767
2880
  }));
2768
2881
  } catch (err) {
2882
+ shutdowns.push(Promise.resolve(false));
2769
2883
  console.error("[project] " + vendor + " shutdown threw for " + slug + ":", err && err.message ? err.message : err);
2770
2884
  }
2771
2885
  });
@@ -2788,6 +2902,7 @@ function createProjectContext(opts) {
2788
2902
  }
2789
2903
  });
2790
2904
  var status = {
2905
+ controlRuntimeId: require('./clay-control-target-projection').runtime(sm),
2791
2906
  slug: slug,
2792
2907
  path: cwd,
2793
2908
  project: project,
@@ -2838,7 +2953,7 @@ function createProjectContext(opts) {
2838
2953
 
2839
2954
  function setTitle(newTitle) {
2840
2955
  title = newTitle || null;
2841
- send({ type: "info", cwd: cwd, slug: slug, project: title || project, version: currentVersion, debug: !!debug, osUsers: osUsers, lanHost: lanHost, projectCount: getProjectCount(), projects: getProjectList(), projectOwnerId: projectOwnerId, isMate: isMate, mateId: isMate ? mateId : null, mateDisplayName: isMate ? (opts.mateDisplayName || title || project || "Mate") : "" });
2956
+ send({ type: "info", controlRuntimeId: require("./clay-control-target-projection").runtime(sm), cwd: cwd, slug: slug, project: title || project, version: currentVersion, debug: !!debug, osUsers: osUsers, lanHost: lanHost, projectCount: getProjectCount(), projects: getProjectList(), projectOwnerId: projectOwnerId, isMate: isMate, mateId: isMate ? mateId : null, mateDisplayName: isMate ? (opts.mateDisplayName || title || project || "Mate") : "" });
2842
2957
  }
2843
2958
 
2844
2959
  function setIcon(newIcon) {
@@ -2909,15 +3024,32 @@ function createProjectContext(opts) {
2909
3024
  },
2910
3025
  getYouLinuxUser: getLinuxUserForSession,
2911
3026
  getStatus: getStatus,
3027
+ bindMateSchedule: function (session, intent, id) {
3028
+ return _mateLifecycle.create(session, require("./mate-schedule-input").normalize(intent), id);
3029
+ },
3030
+ cancelMateSchedule: function (session, record) { return _mateLifecycle.cancel(session, record); },
2912
3031
  getSessionManager: function () { return sm; },
2913
3032
  createDelegatedSession: _delegatedSession.createDelegatedSession,
3033
+ refreshEnvironmentRuntime: function () { return sdk.refreshEnvironmentRuntime(); },
3034
+ getWorkspaceProductOperations: function () { return isMate ? null : _workspaceOperations; },
3035
+ getMateChatControl: function () { return isMate ? _mateChatControl : null; },
3036
+ getMateScheduleControl: function () { return isMate ? _mateLifecycle : null; },
3037
+ getScheduledTaskControl: function () { return _scheduledTasks.productControl; },
3038
+ notifyIssueUpdate: _issues.notify,
3039
+ notifyLogUpdate: _projectLogs.broadcastUpdate,
3040
+ requestProductControlReview: _productControl.requestProductControlReview,
3041
+ applyProductSessionAction: _productControl.applyProductSessionAction,
3042
+ inspectProductSessionQueue: _productControl.inspectProductSessionQueue,
3043
+ inspectProductSessionRuntime: _sessions.sessionRuntimeActions.inspect,
3044
+ inspectMateLifecycleRuntime: _sessions.sessionRuntimeActions.inspectLifecycle,
2914
3045
  inspectDelegatedFollowUp: _delegatedFollowUp.inspectDelegatedFollowUp,
2915
3046
  dispatchDelegatedFollowUp: _delegatedFollowUp.dispatchDelegatedFollowUp,
2916
3047
  deliverCapsuleTurn: _capsuleTurn.deliverCapsuleTurn,
2917
3048
  unregisterHomeDebateClient: function (ws) { homeDebateClients.delete(ws); },
2918
3049
  handleHomeDebateProposalResponse: function (ws, msg, session) { return _debateProposal.handleHomeMessage(ws, msg, session); },
2919
3050
  handleHomeMateCreationProposalResponse: function (ws, msg, session) { return _mateCreationProposal.handleHomeMessage(ws, msg, session); },
2920
- handleHomeAskUserResponse: function (msg, session) { return _sessions.respondToAskUser(session, msg); },
3051
+ registerMcpConsentViewer: _mcp.registerConsentViewer,
3052
+ handleHomeAskUserResponse: function (msg, session, ws) { return _sessions.respondToAskUser(session, msg, ws); },
2921
3053
  handleHomePermissionResponse: function (ws, msg, session) { return _sessions.respondToHomePermission(ws, msg, session); },
2922
3054
  stopHomeSession: function (session) { return _sessions.stopHomeSession(session); },
2923
3055
  handleHomeDebateControl: function (ws, msg, session) { return _debate.handleHomeControl(ws, msg, session); },
@@ -2926,6 +3058,7 @@ function createProjectContext(opts) {
2926
3058
  getMemoryState: _memory.readMemoryState,
2927
3059
  listKnowledgeFiles: _knowledge.listKnowledgeFiles,
2928
3060
  getKnowledgeDbService: function () { return _knowledge.databases; },
3061
+ getKnowledgeProductOperations: function () { return _knowledge.productOperations; },
2929
3062
  refreshCapsuleCatalog: _capsuleCatalog.refreshSessions,
2930
3063
  getNotificationsModule: function () { return _notifications; },
2931
3064
  refreshVendorAuth: _vendorLogin.refreshVendorAuth,
package/lib/public/app.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { initStudioBridge } from './modules/clay-studio-bridge.js';
1
2
  import { initSharedBrowser } from './modules/shared-browser.js';
2
3
  import { initGenerationStop } from './modules/generation-stop.js';
3
4
  import { initIssueLinks } from './modules/clay-issue-links.js';
@@ -34,6 +35,7 @@ import { initQrCode, triggerShare } from './modules/qrcode.js';
34
35
  import { initFileBrowser, loadRootDirectory, reopenFileViewer, refreshTree, handleFsList, handleFsRead, handleDirChanged, refreshIfOpen, handleFileChanged, handleFileHistory, handleGitDiff, handleFileAt, getPendingNavigate, closeFileViewer, resetFileBrowser } from './modules/filebrowser.js';
35
36
  import { initGitPanel } from './modules/git-panel.js';
36
37
  import { initWorkerPaneLock } from './modules/worker-pane-lock.js';
38
+ import { initPaneActivation } from './modules/pane-activation.js';
37
39
  import { initAutonomousRun } from './modules/autonomous-run.js';
38
40
  import { initLoopInterview } from './modules/loop-interview.js';
39
41
  import { initTerminal, openTerminal, closeTerminal, resetTerminals, handleTermList, handleTermCreated, handleTermOutput, handleTermResized, handleTermExited, handleTermClosed, sendTerminalCommand } from './modules/terminal.js';
@@ -115,6 +117,7 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
115
117
  if (paneMode) {
116
118
  wsPath += "?pane=1";
117
119
  if (paneSessionId) wsPath += "&session=" + paneSessionId;
120
+ if (bootParams.get("contextual") === "1") wsPath += "&contextual=1";
118
121
  }
119
122
 
120
123
  // --- DOM refs ---
@@ -285,12 +288,24 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
285
288
  mcpConnections: { screen: "list", servers: [], search: "", loaded: false },
286
289
  sharedBrowserOpen: false,
287
290
  sharedBrowserUi: {},
291
+ sharedBrowserSettings: {},
292
+ browserLinksBound: false,
288
293
  // session / routing
289
294
  basePath: basePath,
290
295
  wsPath: wsPath,
291
296
  paneMode: paneMode,
292
297
  paneSessionId: paneSessionId,
293
298
  panePinPending: paneMode && !!paneSessionId,
299
+ paneCommittedBinding: null, panePendingBinding: null, paneReady: false, paneSuspended: false,
300
+ paneActivationGeneration: 0, paneActivationTimer: null, panePointerBinding: null, paneRichDrafts: {},
301
+ sessionRichDrafts: {},
302
+ sessionActionEpoch: 0, composerUploadingCount: 0, deferredSessionSwitch: null,
303
+ paneCallbackBinding: null, paneActionEvents: [], paneHeldKeys: {}, rewindAction: null, handoffAction: null,
304
+ authIdentityLoaded: false,
305
+ splitIdentityBlockedSocket: null,
306
+ splitIdentityHydrated: false,
307
+ paneActivationUnsupported: false,
308
+ paneBindingSessions: [],
294
309
  splitPanes: null,
295
310
  splitGroups: [],
296
311
  sessionFolders: null,
@@ -315,6 +330,9 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
315
330
  historyTotal: 0,
316
331
  replayingHistory: false,
317
332
  historyReplayBatch: null,
333
+ pendingSessionEntryNavigation: null,
334
+ sessionEntryHighlight: null,
335
+ sessionNavigationRequestId: null,
318
336
  projectName: projectName,
319
337
  cwd: "",
320
338
  currentSlug: currentSlug,
@@ -322,9 +340,33 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
322
340
  githubWorkSessions: [],
323
341
  githubWorkProject: null,
324
342
  githubWorkRefresh: null,
343
+ workPrimaryPending: null,
325
344
  activeProjectSlug: null,
326
345
  activeProjectMateId: null,
327
346
  activeProjectMateName: '',
347
+ clayReturnTarget: null,
348
+ contextualPrepared: null,
349
+ contextualSubmitted: {},
350
+ contextualClay: { mode: "closed", mateId: null },
351
+ contextualConversationHistory: null,
352
+ contextualConversationRequest: null,
353
+ clayControlActivity: null,
354
+ clayControlOrder: 0,
355
+ clayControlReceipts: [],
356
+ clayControlForwarded: null,
357
+ controlRuntimeId: null,
358
+ studioDocumentSource: null, studioDocumentView: null,
359
+ clayStudioRelays: {}, clayStudioForwarded: {}, clayStudioSurfaces: {},
360
+ clayControlNotifications: [],
361
+ clayControlFileView: null,
362
+ clayControlTerminalViews: [],
363
+ clayControlGitView: null,
364
+ clayNavigationRendering: null,
365
+ clayControlViewerRef: null,
366
+ contextualSessionReady: false,
367
+ contextualSessionReceived: false,
368
+ contextualSessionUnavailable: false,
369
+ clayReturnPendingProjectSlug: null,
328
370
  activeSessionMateId: null,
329
371
  activeSessionMateName: '',
330
372
  sessionActivatedProjectSlug: null,
@@ -576,6 +618,7 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
576
618
  // rendering
577
619
  currentMsgTs: null,
578
620
  richContextUsage: null,
621
+ contextMeasurement: "unavailable",
579
622
  currentMsgEl: null,
580
623
  currentFullText: "",
581
624
  matePreThinkingEl: null,
@@ -1138,6 +1181,7 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
1138
1181
  if (document.body) document.body.classList.add('is-multi-user');
1139
1182
  }
1140
1183
  if (d.user && d.user.id) { store.set({ myUserId: d.user.id }); requestDefaultVendor(); }
1184
+ store.set({ authIdentityLoaded: true });
1141
1185
  store.set({ permissions: d.permissions || null, projectsAccessLoaded: true });
1142
1186
  if (d.mustChangePin) showForceChangePinOverlay();
1143
1187
  // Single-user mode: clear user strip skeletons immediately (no presence message will arrive)
@@ -1233,7 +1277,9 @@ import { initDebate, handleDebatePreparing, handleDebateStarted, handleDebateRes
1233
1277
  });
1234
1278
  initGitPanel();
1235
1279
  initSharedBrowser();
1280
+ initStudioBridge();
1236
1281
  initWorkerPaneLock();
1282
+ initPaneActivation();
1237
1283
 
1238
1284
  // --- Terminal ---
1239
1285
  initTerminal({
@@ -0,0 +1,16 @@
1
+ (function () {
2
+ var root = document.documentElement;
3
+ var params = new URLSearchParams(window.location.search);
4
+ if (window.parent !== window && params.get('pane') === '1' && params.get('contextual') === '1') root.classList.add('contextual-pane-boot');
5
+ var light = window.matchMedia && window.matchMedia("(prefers-color-scheme: light)").matches;
6
+ var seed = window.__clayAppearanceSeed;
7
+
8
+ function applyMode(mode) {
9
+ if (mode !== "light" && mode !== "dark") return;
10
+ root.classList.toggle("light-theme", mode === "light");
11
+ root.classList.toggle("dark-theme", mode !== "light");
12
+ }
13
+
14
+ var savedMode = seed && seed.configured && (seed.mode === "light" || seed.mode === "dark") ? seed.mode : null;
15
+ applyMode(savedMode || (light ? "light" : "dark"));
16
+ }());