@withbuddi/buddi 0.1.0-pre.45 → 0.1.0-pre.46

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 (250) hide show
  1. package/extension/background.js +157 -1
  2. package/extension/manifest.json +5 -2
  3. package/extension/popup.html +4 -0
  4. package/extension/popup.js +18 -0
  5. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  6. package/node_modules/@buddi/cli/dist/mcp/tools.d.ts +3 -8
  7. package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
  8. package/node_modules/@buddi/cli/dist/mcp/tools.js +22 -4
  9. package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
  10. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  11. package/node_modules/@buddi/core/dist/artifacts/orphans.d.ts +6 -4
  12. package/node_modules/@buddi/core/dist/artifacts/orphans.d.ts.map +1 -1
  13. package/node_modules/@buddi/core/dist/artifacts/orphans.js +10 -3
  14. package/node_modules/@buddi/core/dist/artifacts/orphans.js.map +1 -1
  15. package/node_modules/@buddi/core/dist/groups.d.ts +0 -9
  16. package/node_modules/@buddi/core/dist/groups.d.ts.map +1 -1
  17. package/node_modules/@buddi/core/dist/groups.js +13 -1
  18. package/node_modules/@buddi/core/dist/groups.js.map +1 -1
  19. package/node_modules/@buddi/core/dist/pages.d.ts +24 -1
  20. package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
  21. package/node_modules/@buddi/core/dist/pages.js +61 -1
  22. package/node_modules/@buddi/core/dist/pages.js.map +1 -1
  23. package/node_modules/@buddi/core/dist/pending-input.d.ts +13 -2
  24. package/node_modules/@buddi/core/dist/pending-input.d.ts.map +1 -1
  25. package/node_modules/@buddi/core/dist/pending-input.js +57 -12
  26. package/node_modules/@buddi/core/dist/pending-input.js.map +1 -1
  27. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  28. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  29. package/node_modules/@buddi/core/dist/web-settings.d.ts +8 -0
  30. package/node_modules/@buddi/core/dist/web-settings.d.ts.map +1 -1
  31. package/node_modules/@buddi/core/dist/web-settings.js +14 -0
  32. package/node_modules/@buddi/core/dist/web-settings.js.map +1 -1
  33. package/node_modules/@buddi/core/migrations/078_pending_input_files.sql +8 -0
  34. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  35. package/node_modules/@buddi/gateway/dist/browser-host.d.ts.map +1 -1
  36. package/node_modules/@buddi/gateway/dist/browser-host.js +1 -0
  37. package/node_modules/@buddi/gateway/dist/browser-host.js.map +1 -1
  38. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  39. package/node_modules/@buddi/gateway/dist/web/api-routes.js +19 -1
  40. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  41. package/node_modules/@buddi/gateway/dist/web/attention.d.ts +37 -0
  42. package/node_modules/@buddi/gateway/dist/web/attention.d.ts.map +1 -1
  43. package/node_modules/@buddi/gateway/dist/web/attention.js +54 -10
  44. package/node_modules/@buddi/gateway/dist/web/attention.js.map +1 -1
  45. package/node_modules/@buddi/gateway/dist/web/canvas-tabs.d.ts +41 -0
  46. package/node_modules/@buddi/gateway/dist/web/canvas-tabs.d.ts.map +1 -0
  47. package/node_modules/@buddi/gateway/dist/web/canvas-tabs.js +68 -0
  48. package/node_modules/@buddi/gateway/dist/web/canvas-tabs.js.map +1 -0
  49. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +0 -9
  50. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  51. package/node_modules/@buddi/gateway/dist/web/chat.js +33 -19
  52. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  53. package/node_modules/@buddi/gateway/dist/web/extension.d.ts +11 -1
  54. package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
  55. package/node_modules/@buddi/gateway/dist/web/extension.js +51 -0
  56. package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
  57. package/node_modules/@buddi/gateway/dist/web/pages.d.ts.map +1 -1
  58. package/node_modules/@buddi/gateway/dist/web/pages.js +10 -1
  59. package/node_modules/@buddi/gateway/dist/web/pages.js.map +1 -1
  60. package/node_modules/@buddi/gateway/dist/web/server.d.ts +0 -4
  61. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  62. package/node_modules/@buddi/gateway/dist/web/server.js +72 -2
  63. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  64. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  65. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  66. package/node_modules/@buddi/runtime/dist/loop.d.ts +6 -0
  67. package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
  68. package/node_modules/@buddi/runtime/dist/loop.js +25 -10
  69. package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
  70. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  71. package/node_modules/@buddi/tool-artifacts/dist/extract.d.ts +6 -0
  72. package/node_modules/@buddi/tool-artifacts/dist/extract.d.ts.map +1 -1
  73. package/node_modules/@buddi/tool-artifacts/dist/extract.js +6 -0
  74. package/node_modules/@buddi/tool-artifacts/dist/extract.js.map +1 -1
  75. package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.d.ts +1 -0
  76. package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.d.ts.map +1 -1
  77. package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.js +30 -8
  78. package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.js.map +1 -1
  79. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  80. package/node_modules/@buddi/tool-browser/dist/controller.d.ts +25 -0
  81. package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
  82. package/node_modules/@buddi/tool-browser/dist/controller.js +25 -1
  83. package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
  84. package/node_modules/@buddi/tool-browser/dist/downloads.d.ts +138 -0
  85. package/node_modules/@buddi/tool-browser/dist/downloads.d.ts.map +1 -0
  86. package/node_modules/@buddi/tool-browser/dist/downloads.js +529 -0
  87. package/node_modules/@buddi/tool-browser/dist/downloads.js.map +1 -0
  88. package/node_modules/@buddi/tool-browser/dist/driver.d.ts +17 -1
  89. package/node_modules/@buddi/tool-browser/dist/driver.d.ts.map +1 -1
  90. package/node_modules/@buddi/tool-browser/dist/driver.js +48 -0
  91. package/node_modules/@buddi/tool-browser/dist/driver.js.map +1 -1
  92. package/node_modules/@buddi/tool-browser/dist/extension.d.ts +23 -0
  93. package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
  94. package/node_modules/@buddi/tool-browser/dist/extension.js +20 -0
  95. package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
  96. package/node_modules/@buddi/tool-browser/dist/host.d.ts +3 -1
  97. package/node_modules/@buddi/tool-browser/dist/host.d.ts.map +1 -1
  98. package/node_modules/@buddi/tool-browser/dist/host.js +9 -2
  99. package/node_modules/@buddi/tool-browser/dist/host.js.map +1 -1
  100. package/node_modules/@buddi/tool-browser/dist/index.d.ts +7 -3
  101. package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
  102. package/node_modules/@buddi/tool-browser/dist/index.js +5 -3
  103. package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
  104. package/node_modules/@buddi/tool-browser/dist/service.d.ts +28 -0
  105. package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
  106. package/node_modules/@buddi/tool-browser/dist/service.js +58 -1
  107. package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
  108. package/node_modules/@buddi/tool-browser/dist/settings.d.ts +8 -0
  109. package/node_modules/@buddi/tool-browser/dist/settings.d.ts.map +1 -1
  110. package/node_modules/@buddi/tool-browser/dist/settings.js +9 -0
  111. package/node_modules/@buddi/tool-browser/dist/settings.js.map +1 -1
  112. package/node_modules/@buddi/tool-browser/dist/types.d.ts +31 -24
  113. package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
  114. package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
  115. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  116. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  117. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  118. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  119. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  120. package/node_modules/nanoid/README.md +3 -3
  121. package/node_modules/nanoid/index.browser.js +4 -5
  122. package/node_modules/nanoid/index.d.ts +3 -3
  123. package/node_modules/nanoid/index.js +2 -3
  124. package/node_modules/nanoid/nanoid.js +1 -1
  125. package/node_modules/nanoid/package.json +2 -2
  126. package/node_modules/nanoid/url-alphabet/index.js +1 -1
  127. package/package.json +2 -2
  128. package/packages/cli/dist/.tsbuildinfo +1 -1
  129. package/packages/cli/dist/mcp/tools.d.ts +3 -8
  130. package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
  131. package/packages/cli/dist/mcp/tools.js +22 -4
  132. package/packages/cli/dist/mcp/tools.js.map +1 -1
  133. package/packages/core/dist/.tsbuildinfo +1 -1
  134. package/packages/core/dist/artifacts/orphans.d.ts +6 -4
  135. package/packages/core/dist/artifacts/orphans.d.ts.map +1 -1
  136. package/packages/core/dist/artifacts/orphans.js +10 -3
  137. package/packages/core/dist/artifacts/orphans.js.map +1 -1
  138. package/packages/core/dist/groups.d.ts +0 -9
  139. package/packages/core/dist/groups.d.ts.map +1 -1
  140. package/packages/core/dist/groups.js +13 -1
  141. package/packages/core/dist/groups.js.map +1 -1
  142. package/packages/core/dist/pages.d.ts +24 -1
  143. package/packages/core/dist/pages.d.ts.map +1 -1
  144. package/packages/core/dist/pages.js +61 -1
  145. package/packages/core/dist/pages.js.map +1 -1
  146. package/packages/core/dist/pending-input.d.ts +13 -2
  147. package/packages/core/dist/pending-input.d.ts.map +1 -1
  148. package/packages/core/dist/pending-input.js +57 -12
  149. package/packages/core/dist/pending-input.js.map +1 -1
  150. package/packages/core/dist/plugin/version.d.ts +1 -1
  151. package/packages/core/dist/plugin/version.js +1 -1
  152. package/packages/core/dist/web-settings.d.ts +8 -0
  153. package/packages/core/dist/web-settings.d.ts.map +1 -1
  154. package/packages/core/dist/web-settings.js +14 -0
  155. package/packages/core/dist/web-settings.js.map +1 -1
  156. package/packages/core/migrations/078_pending_input_files.sql +8 -0
  157. package/packages/gateway/dist/.tsbuildinfo +1 -1
  158. package/packages/gateway/dist/browser-host.d.ts.map +1 -1
  159. package/packages/gateway/dist/browser-host.js +1 -0
  160. package/packages/gateway/dist/browser-host.js.map +1 -1
  161. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  162. package/packages/gateway/dist/web/api-routes.js +19 -1
  163. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  164. package/packages/gateway/dist/web/attention.d.ts +37 -0
  165. package/packages/gateway/dist/web/attention.d.ts.map +1 -1
  166. package/packages/gateway/dist/web/attention.js +54 -10
  167. package/packages/gateway/dist/web/attention.js.map +1 -1
  168. package/packages/gateway/dist/web/canvas-tabs.d.ts +41 -0
  169. package/packages/gateway/dist/web/canvas-tabs.d.ts.map +1 -0
  170. package/packages/gateway/dist/web/canvas-tabs.js +68 -0
  171. package/packages/gateway/dist/web/canvas-tabs.js.map +1 -0
  172. package/packages/gateway/dist/web/chat.d.ts +0 -9
  173. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  174. package/packages/gateway/dist/web/chat.js +33 -19
  175. package/packages/gateway/dist/web/chat.js.map +1 -1
  176. package/packages/gateway/dist/web/extension.d.ts +11 -1
  177. package/packages/gateway/dist/web/extension.d.ts.map +1 -1
  178. package/packages/gateway/dist/web/extension.js +51 -0
  179. package/packages/gateway/dist/web/extension.js.map +1 -1
  180. package/packages/gateway/dist/web/pages.d.ts.map +1 -1
  181. package/packages/gateway/dist/web/pages.js +10 -1
  182. package/packages/gateway/dist/web/pages.js.map +1 -1
  183. package/packages/gateway/dist/web/server.d.ts +0 -4
  184. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  185. package/packages/gateway/dist/web/server.js +72 -2
  186. package/packages/gateway/dist/web/server.js.map +1 -1
  187. package/packages/install/dist/.tsbuildinfo +1 -1
  188. package/packages/runtime/dist/.tsbuildinfo +1 -1
  189. package/packages/runtime/dist/loop.d.ts +6 -0
  190. package/packages/runtime/dist/loop.d.ts.map +1 -1
  191. package/packages/runtime/dist/loop.js +25 -10
  192. package/packages/runtime/dist/loop.js.map +1 -1
  193. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  194. package/packages/tools/artifacts/dist/extract.d.ts +6 -0
  195. package/packages/tools/artifacts/dist/extract.d.ts.map +1 -1
  196. package/packages/tools/artifacts/dist/extract.js +6 -0
  197. package/packages/tools/artifacts/dist/extract.js.map +1 -1
  198. package/packages/tools/artifacts/dist/tools/artifacts.d.ts +1 -0
  199. package/packages/tools/artifacts/dist/tools/artifacts.d.ts.map +1 -1
  200. package/packages/tools/artifacts/dist/tools/artifacts.js +30 -8
  201. package/packages/tools/artifacts/dist/tools/artifacts.js.map +1 -1
  202. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  203. package/packages/tools/browser/dist/controller.d.ts +25 -0
  204. package/packages/tools/browser/dist/controller.d.ts.map +1 -1
  205. package/packages/tools/browser/dist/controller.js +25 -1
  206. package/packages/tools/browser/dist/controller.js.map +1 -1
  207. package/packages/tools/browser/dist/downloads.d.ts +138 -0
  208. package/packages/tools/browser/dist/downloads.d.ts.map +1 -0
  209. package/packages/tools/browser/dist/downloads.js +529 -0
  210. package/packages/tools/browser/dist/downloads.js.map +1 -0
  211. package/packages/tools/browser/dist/driver.d.ts +17 -1
  212. package/packages/tools/browser/dist/driver.d.ts.map +1 -1
  213. package/packages/tools/browser/dist/driver.js +48 -0
  214. package/packages/tools/browser/dist/driver.js.map +1 -1
  215. package/packages/tools/browser/dist/extension.d.ts +23 -0
  216. package/packages/tools/browser/dist/extension.d.ts.map +1 -1
  217. package/packages/tools/browser/dist/extension.js +20 -0
  218. package/packages/tools/browser/dist/extension.js.map +1 -1
  219. package/packages/tools/browser/dist/host.d.ts +3 -1
  220. package/packages/tools/browser/dist/host.d.ts.map +1 -1
  221. package/packages/tools/browser/dist/host.js +9 -2
  222. package/packages/tools/browser/dist/host.js.map +1 -1
  223. package/packages/tools/browser/dist/index.d.ts +7 -3
  224. package/packages/tools/browser/dist/index.d.ts.map +1 -1
  225. package/packages/tools/browser/dist/index.js +5 -3
  226. package/packages/tools/browser/dist/index.js.map +1 -1
  227. package/packages/tools/browser/dist/service.d.ts +28 -0
  228. package/packages/tools/browser/dist/service.d.ts.map +1 -1
  229. package/packages/tools/browser/dist/service.js +58 -1
  230. package/packages/tools/browser/dist/service.js.map +1 -1
  231. package/packages/tools/browser/dist/settings.d.ts +8 -0
  232. package/packages/tools/browser/dist/settings.d.ts.map +1 -1
  233. package/packages/tools/browser/dist/settings.js +9 -0
  234. package/packages/tools/browser/dist/settings.js.map +1 -1
  235. package/packages/tools/browser/dist/types.d.ts +31 -24
  236. package/packages/tools/browser/dist/types.d.ts.map +1 -1
  237. package/packages/tools/browser/dist/types.js.map +1 -1
  238. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  239. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  240. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  241. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  242. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  243. package/packages/web/dist/assets/index-C2yWZED2.css +1 -0
  244. package/packages/web/dist/assets/index-CIhME8Ui.js +150 -0
  245. package/packages/web/dist/assets/{lottie_light-DxWeiVDC.js → lottie_light-CVXFbeEK.js} +1 -1
  246. package/packages/web/dist/build.json +1 -1
  247. package/packages/web/dist/index.html +2 -2
  248. package/packages/web/dist/precache.json +4 -4
  249. package/packages/web/dist/assets/index-CPFSREcP.css +0 -1
  250. package/packages/web/dist/assets/index-DYUn1V0x.js +0 -150
@@ -0,0 +1,41 @@
1
+ /**
2
+ * The canvas's tabs, per conversation (docs/dashboard.md, "Canvas").
3
+ *
4
+ * What the owner put away and when each tab was last looked at, so the strip
5
+ * comes back the same — same tabs, same order — after a reload or on another
6
+ * device. Kept in `core.web_settings` under `canvas-tabs:<conversationId>`:
7
+ * one small value per conversation, owned here, replaced whole on each write.
8
+ */
9
+ import { type Queryable } from '@buddi/core';
10
+ /**
11
+ * The `core.web_settings` key for one conversation. Deleting a conversation
12
+ * deletes it too (core's `forgetConversationSettings`).
13
+ */
14
+ export declare function canvasTabsKey(conversationId: string): string;
15
+ /** How many ids either half keeps; a long conversation drops its oldest. */
16
+ export declare const CANVAS_TABS_LIMIT = 200;
17
+ export interface CanvasTabsState {
18
+ /** Tab stamps the owner closed (the call id of the version that was on screen). */
19
+ closed: string[];
20
+ /** When each tab was last looked at, epoch ms, by tab id. The strip's order. */
21
+ touched: Record<string, number>;
22
+ }
23
+ /** A body checked into the stored shape, or the reason it is not one. */
24
+ export declare function parseCanvasTabs(body: unknown): {
25
+ ok: true;
26
+ value: CanvasTabsState;
27
+ } | {
28
+ ok: false;
29
+ error: string;
30
+ };
31
+ /**
32
+ * The stored state, or an empty one: nothing stored is nothing closed. Null
33
+ * when there is no such conversation.
34
+ */
35
+ export declare function readCanvasTabs(db: Queryable, conversationId: string): Promise<CanvasTabsState | null>;
36
+ /**
37
+ * Replace the conversation's state with an already-parsed one. False, and
38
+ * nothing written, when there is no such conversation.
39
+ */
40
+ export declare function writeCanvasTabs(db: Queryable, conversationId: string, state: CanvasTabsState): Promise<boolean>;
41
+ //# sourceMappingURL=canvas-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-tabs.d.ts","sourceRoot":"","sources":["../../src/web/canvas-tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAEjF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAID,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAsBlH;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAM3G;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CASrH"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * The canvas's tabs, per conversation (docs/dashboard.md, "Canvas").
3
+ *
4
+ * What the owner put away and when each tab was last looked at, so the strip
5
+ * comes back the same — same tabs, same order — after a reload or on another
6
+ * device. Kept in `core.web_settings` under `canvas-tabs:<conversationId>`:
7
+ * one small value per conversation, owned here, replaced whole on each write.
8
+ */
9
+ import { CANVAS_TABS_PREFIX, readWebSetting } from '@buddi/core';
10
+ /**
11
+ * The `core.web_settings` key for one conversation. Deleting a conversation
12
+ * deletes it too (core's `forgetConversationSettings`).
13
+ */
14
+ export function canvasTabsKey(conversationId) {
15
+ return `${CANVAS_TABS_PREFIX}${conversationId}`;
16
+ }
17
+ /** How many ids either half keeps; a long conversation drops its oldest. */
18
+ export const CANVAS_TABS_LIMIT = 200;
19
+ const ID = /^[\w:./-]{1,200}$/;
20
+ /** A body checked into the stored shape, or the reason it is not one. */
21
+ export function parseCanvasTabs(body) {
22
+ if (body === null || typeof body !== 'object' || Array.isArray(body))
23
+ return { ok: false, error: 'body must be an object' };
24
+ const record = body;
25
+ const closed = record['closed'] ?? [];
26
+ const touched = record['touched'] ?? {};
27
+ if (!Array.isArray(closed) || !closed.every((id) => typeof id === 'string' && ID.test(id))) {
28
+ return { ok: false, error: '`closed` must be an array of tab ids' };
29
+ }
30
+ if (touched === null || typeof touched !== 'object' || Array.isArray(touched)) {
31
+ return { ok: false, error: '`touched` must be an object' };
32
+ }
33
+ const entries = Object.entries(touched);
34
+ if (!entries.every(([id, at]) => ID.test(id) && typeof at === 'number' && Number.isFinite(at) && at >= 0)) {
35
+ return { ok: false, error: '`touched` must map tab ids to times' };
36
+ }
37
+ return {
38
+ ok: true,
39
+ value: {
40
+ closed: [...new Set(closed)].slice(-CANVAS_TABS_LIMIT),
41
+ touched: Object.fromEntries(entries.sort((a, b) => a[1] - b[1]).slice(-CANVAS_TABS_LIMIT)),
42
+ },
43
+ };
44
+ }
45
+ /**
46
+ * The stored state, or an empty one: nothing stored is nothing closed. Null
47
+ * when there is no such conversation.
48
+ */
49
+ export async function readCanvasTabs(db, conversationId) {
50
+ const { rows } = await db.query('select 1 from core.conversations where id = $1::uuid', [conversationId]);
51
+ if (rows.length === 0)
52
+ return null;
53
+ const stored = await readWebSetting(db, canvasTabsKey(conversationId));
54
+ const parsed = parseCanvasTabs(stored ?? {});
55
+ return parsed.ok ? parsed.value : { closed: [], touched: {} };
56
+ }
57
+ /**
58
+ * Replace the conversation's state with an already-parsed one. False, and
59
+ * nothing written, when there is no such conversation.
60
+ */
61
+ export async function writeCanvasTabs(db, conversationId, state) {
62
+ const { rows } = await db.query(`insert into core.web_settings (key, value, updated_at)
63
+ select $1, $2::jsonb, now() where exists (select 1 from core.conversations where id = $3::uuid)
64
+ on conflict (key) do update set value = excluded.value, updated_at = now()
65
+ returning key`, [canvasTabsKey(conversationId), JSON.stringify(state), conversationId]);
66
+ return rows.length > 0;
67
+ }
68
+ //# sourceMappingURL=canvas-tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-tabs.js","sourceRoot":"","sources":["../../src/web/canvas-tabs.ts"],"names":[],"mappings":"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"}
@@ -447,15 +447,6 @@ export type SendResult = {
447
447
  status: number;
448
448
  error: string;
449
449
  };
450
- /**
451
- * Why a file cannot ride along mid-run.
452
- *
453
- * A turn's attachments are hydrated and capped when the run is built; there is
454
- * no honest way to add one to a request that has already been sent. So it is
455
- * refused in a sentence rather than queued into a surprise, and the owner
456
- * sends it the moment the answer lands.
457
- */
458
- export declare const FILES_DURING_RUN = "Send files once the agent has answered.";
459
450
  /**
460
451
  * The web surface's run queue.
461
452
  *
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/web/chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/web/chat.ts"],"names":[],"mappings":"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"}
@@ -277,6 +277,7 @@ idleFor = () => IDLE_TIMEOUT_MS) {
277
277
  // on at the end, by its own id, marked for what it is.
278
278
  waitingPendingInput(pool, conversationId).catch(() => []),
279
279
  ]);
280
+ const waitingFiles = await artifactsById(pool, [...new Set(waiting.flatMap((row) => row.attachmentIds))]);
280
281
  const vitals = await readVitals(pool, conversationId);
281
282
  // The size limit is this conversation's model's, not a constant: the header
282
283
  // must not promise 80k to a thread that has 400k, or the reverse.
@@ -323,7 +324,10 @@ idleFor = () => IDLE_TIMEOUT_MS) {
323
324
  id: row.id,
324
325
  role: 'user',
325
326
  at: row.receivedAt.toISOString(),
326
- blocks: [{ type: 'text', text: row.text }],
327
+ blocks: [
328
+ ...(row.text.trim() === '' ? [] : [{ type: 'text', text: row.text }]),
329
+ ...row.attachmentIds.map((artifactId) => toChatBlock({ type: 'artifact_ref', artifactId }, toolNames, waitingFiles, approvals)),
330
+ ],
327
331
  speaker: OWNER_INTERJECTION_SPEAKER,
328
332
  }))],
329
333
  ...(await runsOf(pool, conversationId)),
@@ -758,7 +762,18 @@ class LivePendingInput {
758
762
  return [];
759
763
  try {
760
764
  const rows = await leasePendingInput(this.pool, this.conversationId, this.runId);
761
- return rows.map((row) => ({ id: row.id, text: row.text }));
765
+ // Files queued with a line are hydrated now, when the run takes it: the
766
+ // ids were stored with the row, the references are read here, and the
767
+ // loop turns them into bytes for the step it is about to send.
768
+ const ids = [...new Set(rows.flatMap((row) => row.attachmentIds))];
769
+ const files = await artifactsById(this.pool, ids);
770
+ return rows.map((row) => {
771
+ const attachments = row.attachmentIds.flatMap((id) => {
772
+ const file = files.get(id);
773
+ return file ? [{ artifactId: file.id, mime: file.mime, kind: file.kind, filename: file.filename, sizeBytes: file.sizeBytes }] : [];
774
+ });
775
+ return { id: row.id, text: row.text, ...(attachments.length > 0 ? { attachments } : {}) };
776
+ });
762
777
  }
763
778
  catch (err) {
764
779
  // A queue that cannot be read must not fail the turn the owner is
@@ -786,15 +801,6 @@ class LivePendingInput {
786
801
  }
787
802
  }
788
803
  }
789
- /**
790
- * Why a file cannot ride along mid-run.
791
- *
792
- * A turn's attachments are hydrated and capped when the run is built; there is
793
- * no honest way to add one to a request that has already been sent. So it is
794
- * refused in a sentence rather than queued into a surprise, and the owner
795
- * sends it the moment the answer lands.
796
- */
797
- export const FILES_DURING_RUN = 'Send files once the agent has answered.';
798
804
  /**
799
805
  * The web surface's run queue.
800
806
  *
@@ -849,12 +855,13 @@ export class WebChat {
849
855
  return { ok: false, status: 409, error: unavailableMessage(agent) };
850
856
  }
851
857
  const text = request.text.trim();
852
- if (text === '')
858
+ const attachmentIds = request.attachmentIds ?? [];
859
+ // Files alone are a message: the words are optional when something rides.
860
+ if (text === '' && attachmentIds.length === 0)
853
861
  return { ok: false, status: 400, error: '`text` must not be empty' };
854
862
  if (text.length > MAX_CHAT_MESSAGE_CHARS) {
855
863
  return { ok: false, status: 413, error: `a message may be at most ${MAX_CHAT_MESSAGE_CHARS} characters` };
856
864
  }
857
- const attachmentIds = request.attachmentIds ?? [];
858
865
  if (attachmentIds.length > MAX_ATTACHMENTS_PER_MESSAGE) {
859
866
  return {
860
867
  ok: false,
@@ -898,10 +905,16 @@ export class WebChat {
898
905
  */
899
906
  const live = this.#running.get(conversationId);
900
907
  if (live && live.interjections.open) {
901
- // Files are hydrated and capped when the run is built; there is no
902
- // honest way to add one to a request already in flight.
903
- if (attachmentIds.length > 0)
904
- return { ok: false, status: 409, error: FILES_DURING_RUN };
908
+ // Files queue with the words, by id. They are hydrated when the run
909
+ // takes the line between two tool calls — into the very request it
910
+ // sends next — or, if it never does, when the line is promoted into
911
+ // the next turn. Checked to exist now, so a bad id is refused here
912
+ // rather than discovered by a run.
913
+ for (const id of attachmentIds) {
914
+ const row = await getArtifact(this.#deps.pool, id).catch(() => null);
915
+ if (!row)
916
+ return { ok: false, status: 404, error: `no such attachment: ${id}` };
917
+ }
905
918
  // Durable before it is acknowledged, and in a table of its own: a row
906
919
  // in `core.messages` written here would land between a `tool_use` and
907
920
  // its result, which is a transcript no provider will replay.
@@ -909,6 +922,7 @@ export class WebChat {
909
922
  conversationId,
910
923
  runId: live.runId,
911
924
  text,
925
+ attachmentIds,
912
926
  now: this.#deps.now(),
913
927
  });
914
928
  const still = this.#running.get(conversationId);
@@ -1200,11 +1214,11 @@ export class WebChat {
1200
1214
  if (!group)
1201
1215
  return { ok: false, status: 404, error: 'no such group' };
1202
1216
  const text = request.text.trim();
1203
- if (text === '')
1217
+ const attachmentIds = request.attachmentIds ?? [];
1218
+ if (text === '' && attachmentIds.length === 0)
1204
1219
  return { ok: false, status: 400, error: '`text` must not be empty' };
1205
1220
  if (text.length > MAX_CHAT_MESSAGE_CHARS)
1206
1221
  return { ok: false, status: 413, error: `a message may be at most ${MAX_CHAT_MESSAGE_CHARS} characters` };
1207
- const attachmentIds = request.attachmentIds ?? [];
1208
1222
  if (attachmentIds.length > MAX_ATTACHMENTS_PER_MESSAGE)
1209
1223
  return { ok: false, status: 400, error: `at most ${MAX_ATTACHMENTS_PER_MESSAGE} files may ride with one message` };
1210
1224
  const coordinator = this.#deps.catalog.get(group.coordinator);