@raybase/core 0.0.1 → 0.3.3

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 (435) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.admin-build/AdminApp.css +2 -0
  3. package/dist/.admin-build/AdminApp.js +77 -0
  4. package/dist/.admin-docs-build/AdminDocsApp.css +2 -0
  5. package/dist/.admin-docs-build/AdminDocsApp.js +45 -0
  6. package/dist/actions.d.ts +347 -0
  7. package/dist/actions.d.ts.map +1 -0
  8. package/dist/actions.js +661 -0
  9. package/dist/actions.js.map +1 -0
  10. package/dist/admin-assets/admin.7738f50720a8ed7b.css +2 -0
  11. package/dist/admin-assets/admin.8678cb61db34dc81.js +77 -0
  12. package/dist/admin-boot.d.ts +94 -0
  13. package/dist/admin-boot.d.ts.map +1 -0
  14. package/dist/admin-boot.js +139 -0
  15. package/dist/admin-boot.js.map +1 -0
  16. package/dist/admin-docs-content.d.ts +95 -0
  17. package/dist/admin-docs-content.d.ts.map +1 -0
  18. package/dist/admin-docs-content.js +463 -0
  19. package/dist/admin-docs-content.js.map +1 -0
  20. package/dist/admin-docs-ui.d.ts +11 -0
  21. package/dist/admin-docs-ui.d.ts.map +1 -0
  22. package/dist/admin-docs-ui.js +23 -0
  23. package/dist/admin-docs-ui.js.map +1 -0
  24. package/dist/admin-kit.d.ts +29 -0
  25. package/dist/admin-kit.js +1557 -0
  26. package/dist/admin-role.d.ts +8 -0
  27. package/dist/admin-role.d.ts.map +1 -0
  28. package/dist/admin-role.js +22 -0
  29. package/dist/admin-role.js.map +1 -0
  30. package/dist/admin-ui.d.ts +3 -0
  31. package/dist/admin-ui.d.ts.map +1 -0
  32. package/dist/admin-ui.js +16 -0
  33. package/dist/admin-ui.js.map +1 -0
  34. package/dist/agent-ai-chat.d.ts +127 -0
  35. package/dist/agent-ai-chat.d.ts.map +1 -0
  36. package/dist/agent-ai-chat.js +5975 -0
  37. package/dist/agent-ai-chat.js.map +1 -0
  38. package/dist/agent-chapter-archive.d.ts +214 -0
  39. package/dist/agent-chapter-archive.d.ts.map +1 -0
  40. package/dist/agent-chapter-archive.js +696 -0
  41. package/dist/agent-chapter-archive.js.map +1 -0
  42. package/dist/agent-chapter-search.d.ts +116 -0
  43. package/dist/agent-chapter-search.d.ts.map +1 -0
  44. package/dist/agent-chapter-search.js +605 -0
  45. package/dist/agent-chapter-search.js.map +1 -0
  46. package/dist/agent-chapter-tools.d.ts +45 -0
  47. package/dist/agent-chapter-tools.d.ts.map +1 -0
  48. package/dist/agent-chapter-tools.js +344 -0
  49. package/dist/agent-chapter-tools.js.map +1 -0
  50. package/dist/agent-chapters.d.ts +228 -0
  51. package/dist/agent-chapters.d.ts.map +1 -0
  52. package/dist/agent-chapters.js +737 -0
  53. package/dist/agent-chapters.js.map +1 -0
  54. package/dist/agent-data-parts.d.ts +167 -0
  55. package/dist/agent-data-parts.d.ts.map +1 -0
  56. package/dist/agent-data-parts.js +68 -0
  57. package/dist/agent-data-parts.js.map +1 -0
  58. package/dist/agent-errors.d.ts +41 -0
  59. package/dist/agent-errors.d.ts.map +1 -0
  60. package/dist/agent-errors.js +191 -0
  61. package/dist/agent-errors.js.map +1 -0
  62. package/dist/agent-follow-up-store.d.ts +273 -0
  63. package/dist/agent-follow-up-store.d.ts.map +1 -0
  64. package/dist/agent-follow-up-store.js +703 -0
  65. package/dist/agent-follow-up-store.js.map +1 -0
  66. package/dist/agent-follow-ups.d.ts +314 -0
  67. package/dist/agent-follow-ups.d.ts.map +1 -0
  68. package/dist/agent-follow-ups.js +840 -0
  69. package/dist/agent-follow-ups.js.map +1 -0
  70. package/dist/agent-memory.d.ts +323 -0
  71. package/dist/agent-memory.d.ts.map +1 -0
  72. package/dist/agent-memory.js +1270 -0
  73. package/dist/agent-memory.js.map +1 -0
  74. package/dist/agent-message-parts.d.ts +58 -0
  75. package/dist/agent-message-parts.d.ts.map +1 -0
  76. package/dist/agent-message-parts.js +163 -0
  77. package/dist/agent-message-parts.js.map +1 -0
  78. package/dist/agent-remote-mcp-credentials.d.ts +154 -0
  79. package/dist/agent-remote-mcp-credentials.d.ts.map +1 -0
  80. package/dist/agent-remote-mcp-credentials.js +287 -0
  81. package/dist/agent-remote-mcp-credentials.js.map +1 -0
  82. package/dist/agent-remote-mcp-crypto.d.ts +32 -0
  83. package/dist/agent-remote-mcp-crypto.d.ts.map +1 -0
  84. package/dist/agent-remote-mcp-crypto.js +101 -0
  85. package/dist/agent-remote-mcp-crypto.js.map +1 -0
  86. package/dist/agent-remote-mcp-install.d.ts +299 -0
  87. package/dist/agent-remote-mcp-install.d.ts.map +1 -0
  88. package/dist/agent-remote-mcp-install.js +785 -0
  89. package/dist/agent-remote-mcp-install.js.map +1 -0
  90. package/dist/agent-remote-mcp-oauth.d.ts +73 -0
  91. package/dist/agent-remote-mcp-oauth.d.ts.map +1 -0
  92. package/dist/agent-remote-mcp-oauth.js +344 -0
  93. package/dist/agent-remote-mcp-oauth.js.map +1 -0
  94. package/dist/agent-remote-mcp-transport.d.ts +46 -0
  95. package/dist/agent-remote-mcp-transport.d.ts.map +1 -0
  96. package/dist/agent-remote-mcp-transport.js +225 -0
  97. package/dist/agent-remote-mcp-transport.js.map +1 -0
  98. package/dist/agent-remote-mcp.d.ts +147 -0
  99. package/dist/agent-remote-mcp.d.ts.map +1 -0
  100. package/dist/agent-remote-mcp.js +681 -0
  101. package/dist/agent-remote-mcp.js.map +1 -0
  102. package/dist/agent-room-redaction.d.ts +66 -0
  103. package/dist/agent-room-redaction.d.ts.map +1 -0
  104. package/dist/agent-room-redaction.js +264 -0
  105. package/dist/agent-room-redaction.js.map +1 -0
  106. package/dist/agent-rooms.d.ts +209 -0
  107. package/dist/agent-rooms.d.ts.map +1 -0
  108. package/dist/agent-rooms.js +244 -0
  109. package/dist/agent-rooms.js.map +1 -0
  110. package/dist/agent-runtime.d.ts +541 -0
  111. package/dist/agent-runtime.d.ts.map +1 -0
  112. package/dist/agent-runtime.js +4260 -0
  113. package/dist/agent-runtime.js.map +1 -0
  114. package/dist/agent-skill-archive.d.ts +20 -0
  115. package/dist/agent-skill-archive.d.ts.map +1 -0
  116. package/dist/agent-skill-archive.js +316 -0
  117. package/dist/agent-skill-archive.js.map +1 -0
  118. package/dist/agent-skill-discovery.d.ts +96 -0
  119. package/dist/agent-skill-discovery.d.ts.map +1 -0
  120. package/dist/agent-skill-discovery.js +464 -0
  121. package/dist/agent-skill-discovery.js.map +1 -0
  122. package/dist/agent-skill-format.d.ts +57 -0
  123. package/dist/agent-skill-format.d.ts.map +1 -0
  124. package/dist/agent-skill-format.js +238 -0
  125. package/dist/agent-skill-format.js.map +1 -0
  126. package/dist/agent-skill-import.d.ts +64 -0
  127. package/dist/agent-skill-import.d.ts.map +1 -0
  128. package/dist/agent-skill-import.js +295 -0
  129. package/dist/agent-skill-import.js.map +1 -0
  130. package/dist/agent-skill-publish.d.ts +51 -0
  131. package/dist/agent-skill-publish.d.ts.map +1 -0
  132. package/dist/agent-skill-publish.js +136 -0
  133. package/dist/agent-skill-publish.js.map +1 -0
  134. package/dist/agent-skill-store.d.ts +252 -0
  135. package/dist/agent-skill-store.d.ts.map +1 -0
  136. package/dist/agent-skill-store.js +514 -0
  137. package/dist/agent-skill-store.js.map +1 -0
  138. package/dist/agent-skills.d.ts +85 -0
  139. package/dist/agent-skills.d.ts.map +1 -0
  140. package/dist/agent-skills.js +291 -0
  141. package/dist/agent-skills.js.map +1 -0
  142. package/dist/agent-transcript-pager.d.ts +77 -0
  143. package/dist/agent-transcript-pager.d.ts.map +1 -0
  144. package/dist/agent-transcript-pager.js +210 -0
  145. package/dist/agent-transcript-pager.js.map +1 -0
  146. package/dist/agent-user-data-parts.d.ts +20 -0
  147. package/dist/agent-user-data-parts.d.ts.map +1 -0
  148. package/dist/agent-user-data-parts.js +161 -0
  149. package/dist/agent-user-data-parts.js.map +1 -0
  150. package/dist/agent-user-transcript.d.ts +46 -0
  151. package/dist/agent-user-transcript.d.ts.map +1 -0
  152. package/dist/agent-user-transcript.js +106 -0
  153. package/dist/agent-user-transcript.js.map +1 -0
  154. package/dist/agent-voice-notes.d.ts +15 -0
  155. package/dist/agent-voice-notes.d.ts.map +1 -0
  156. package/dist/agent-voice-notes.js +17 -0
  157. package/dist/agent-voice-notes.js.map +1 -0
  158. package/dist/agent-wakes.d.ts +213 -0
  159. package/dist/agent-wakes.d.ts.map +1 -0
  160. package/dist/agent-wakes.js +534 -0
  161. package/dist/agent-wakes.js.map +1 -0
  162. package/dist/agent.d.ts +1780 -0
  163. package/dist/agent.d.ts.map +1 -0
  164. package/dist/agent.js +3123 -0
  165. package/dist/agent.js.map +1 -0
  166. package/dist/ai.d.ts +583 -0
  167. package/dist/ai.d.ts.map +1 -0
  168. package/dist/ai.js +1858 -0
  169. package/dist/ai.js.map +1 -0
  170. package/dist/app-manifest.d.ts +255 -0
  171. package/dist/app-manifest.d.ts.map +1 -0
  172. package/dist/app-manifest.js +372 -0
  173. package/dist/app-manifest.js.map +1 -0
  174. package/dist/app-users.d.ts +30 -0
  175. package/dist/app-users.d.ts.map +1 -0
  176. package/dist/app-users.js +91 -0
  177. package/dist/app-users.js.map +1 -0
  178. package/dist/audit-archive.d.ts +85 -0
  179. package/dist/audit-archive.d.ts.map +1 -0
  180. package/dist/audit-archive.js +178 -0
  181. package/dist/audit-archive.js.map +1 -0
  182. package/dist/audit.d.ts +54 -0
  183. package/dist/audit.d.ts.map +1 -0
  184. package/dist/audit.js +95 -0
  185. package/dist/audit.js.map +1 -0
  186. package/dist/auth-logger.d.ts +28 -0
  187. package/dist/auth-logger.d.ts.map +1 -0
  188. package/dist/auth-logger.js +53 -0
  189. package/dist/auth-logger.js.map +1 -0
  190. package/dist/auth-password-secret.d.ts +59 -0
  191. package/dist/auth-password-secret.d.ts.map +1 -0
  192. package/dist/auth-password-secret.js +409 -0
  193. package/dist/auth-password-secret.js.map +1 -0
  194. package/dist/auth-schema.d.ts +120 -0
  195. package/dist/auth-schema.d.ts.map +1 -0
  196. package/dist/auth-schema.js +285 -0
  197. package/dist/auth-schema.js.map +1 -0
  198. package/dist/auth.d.ts +321 -0
  199. package/dist/auth.d.ts.map +1 -0
  200. package/dist/auth.js +1562 -0
  201. package/dist/auth.js.map +1 -0
  202. package/dist/backup-archive.d.ts +257 -0
  203. package/dist/backup-archive.d.ts.map +1 -0
  204. package/dist/backup-archive.js +2068 -0
  205. package/dist/backup-archive.js.map +1 -0
  206. package/dist/backup-crypto.d.ts +313 -0
  207. package/dist/backup-crypto.d.ts.map +1 -0
  208. package/dist/backup-crypto.js +693 -0
  209. package/dist/backup-crypto.js.map +1 -0
  210. package/dist/backup-format.d.ts +200 -0
  211. package/dist/backup-format.d.ts.map +1 -0
  212. package/dist/backup-format.js +1247 -0
  213. package/dist/backup-format.js.map +1 -0
  214. package/dist/cli.d.ts +9 -0
  215. package/dist/cli.d.ts.map +1 -0
  216. package/dist/cli.js +15 -0
  217. package/dist/cli.js.map +1 -0
  218. package/dist/clock.d.ts +35 -0
  219. package/dist/clock.d.ts.map +1 -0
  220. package/dist/clock.js +83 -0
  221. package/dist/clock.js.map +1 -0
  222. package/dist/data-client.d.ts +187 -0
  223. package/dist/data-client.d.ts.map +1 -0
  224. package/dist/data-client.js +590 -0
  225. package/dist/data-client.js.map +1 -0
  226. package/dist/data-secrets.d.ts +164 -0
  227. package/dist/data-secrets.d.ts.map +1 -0
  228. package/dist/data-secrets.js +383 -0
  229. package/dist/data-secrets.js.map +1 -0
  230. package/dist/db.d.ts +453 -0
  231. package/dist/db.d.ts.map +1 -0
  232. package/dist/db.js +324 -0
  233. package/dist/db.js.map +1 -0
  234. package/dist/dev-activity.d.ts +48 -0
  235. package/dist/dev-activity.d.ts.map +1 -0
  236. package/dist/dev-activity.js +50 -0
  237. package/dist/dev-activity.js.map +1 -0
  238. package/dist/do.d.ts +429 -0
  239. package/dist/do.d.ts.map +1 -0
  240. package/dist/do.js +4526 -0
  241. package/dist/do.js.map +1 -0
  242. package/dist/email.d.ts +137 -0
  243. package/dist/email.d.ts.map +1 -0
  244. package/dist/email.js +527 -0
  245. package/dist/email.js.map +1 -0
  246. package/dist/generated/admin-assets.d.ts +16 -0
  247. package/dist/generated/admin-assets.d.ts.map +1 -0
  248. package/dist/generated/admin-assets.js +16 -0
  249. package/dist/generated/admin-assets.js.map +1 -0
  250. package/dist/generated/admin-docs-assets.d.ts +3 -0
  251. package/dist/generated/admin-docs-assets.d.ts.map +1 -0
  252. package/dist/generated/admin-docs-assets.js +3 -0
  253. package/dist/generated/admin-docs-assets.js.map +1 -0
  254. package/dist/handoff-consumer.d.ts +79 -0
  255. package/dist/handoff-consumer.d.ts.map +1 -0
  256. package/dist/handoff-consumer.js +300 -0
  257. package/dist/handoff-consumer.js.map +1 -0
  258. package/dist/handoff.d.ts +70 -0
  259. package/dist/handoff.d.ts.map +1 -0
  260. package/dist/handoff.js +228 -0
  261. package/dist/handoff.js.map +1 -0
  262. package/dist/host-auth.d.ts +47 -0
  263. package/dist/host-auth.d.ts.map +1 -0
  264. package/dist/host-auth.js +59 -0
  265. package/dist/host-auth.js.map +1 -0
  266. package/dist/host-user.d.ts +15 -0
  267. package/dist/host-user.d.ts.map +1 -0
  268. package/dist/host-user.js +23 -0
  269. package/dist/host-user.js.map +1 -0
  270. package/dist/html.d.ts +35 -0
  271. package/dist/html.d.ts.map +1 -0
  272. package/dist/html.js +634 -0
  273. package/dist/html.js.map +1 -0
  274. package/dist/http-error.d.ts +13 -0
  275. package/dist/http-error.d.ts.map +1 -0
  276. package/dist/http-error.js +15 -0
  277. package/dist/http-error.js.map +1 -0
  278. package/dist/imports.d.ts +219 -0
  279. package/dist/imports.d.ts.map +1 -0
  280. package/dist/imports.js +571 -0
  281. package/dist/imports.js.map +1 -0
  282. package/dist/index.d.ts +78 -0
  283. package/dist/index.d.ts.map +1 -0
  284. package/dist/index.js +76 -0
  285. package/dist/index.js.map +1 -0
  286. package/dist/inference-tape.d.ts +64 -0
  287. package/dist/inference-tape.d.ts.map +1 -0
  288. package/dist/inference-tape.js +278 -0
  289. package/dist/inference-tape.js.map +1 -0
  290. package/dist/internal.d.ts +15 -0
  291. package/dist/internal.d.ts.map +1 -0
  292. package/dist/internal.js +48 -0
  293. package/dist/internal.js.map +1 -0
  294. package/dist/jobs.d.ts +796 -0
  295. package/dist/jobs.d.ts.map +1 -0
  296. package/dist/jobs.js +538 -0
  297. package/dist/jobs.js.map +1 -0
  298. package/dist/json-schema.d.ts +91 -0
  299. package/dist/json-schema.d.ts.map +1 -0
  300. package/dist/json-schema.js +884 -0
  301. package/dist/json-schema.js.map +1 -0
  302. package/dist/knowledge.d.ts +33 -0
  303. package/dist/knowledge.d.ts.map +1 -0
  304. package/dist/knowledge.js +348 -0
  305. package/dist/knowledge.js.map +1 -0
  306. package/dist/local-dev-chrome.d.ts +29 -0
  307. package/dist/local-dev-chrome.d.ts.map +1 -0
  308. package/dist/local-dev-chrome.js +514 -0
  309. package/dist/local-dev-chrome.js.map +1 -0
  310. package/dist/local-dev-personas.d.ts +15 -0
  311. package/dist/local-dev-personas.d.ts.map +1 -0
  312. package/dist/local-dev-personas.js +46 -0
  313. package/dist/local-dev-personas.js.map +1 -0
  314. package/dist/mcp.d.ts +567 -0
  315. package/dist/mcp.d.ts.map +1 -0
  316. package/dist/mcp.js +2480 -0
  317. package/dist/mcp.js.map +1 -0
  318. package/dist/modules.d.ts +145 -0
  319. package/dist/modules.d.ts.map +1 -0
  320. package/dist/modules.js +164 -0
  321. package/dist/modules.js.map +1 -0
  322. package/dist/notification-client.d.ts +94 -0
  323. package/dist/notification-client.d.ts.map +1 -0
  324. package/dist/notification-client.js +127 -0
  325. package/dist/notification-client.js.map +1 -0
  326. package/dist/notifications.d.ts +447 -0
  327. package/dist/notifications.d.ts.map +1 -0
  328. package/dist/notifications.js +1625 -0
  329. package/dist/notifications.js.map +1 -0
  330. package/dist/operator-data-query.d.ts +117 -0
  331. package/dist/operator-data-query.d.ts.map +1 -0
  332. package/dist/operator-data-query.js +431 -0
  333. package/dist/operator-data-query.js.map +1 -0
  334. package/dist/operator-mcp.d.ts +63 -0
  335. package/dist/operator-mcp.d.ts.map +1 -0
  336. package/dist/operator-mcp.js +2828 -0
  337. package/dist/operator-mcp.js.map +1 -0
  338. package/dist/outbound-https.d.ts +24 -0
  339. package/dist/outbound-https.d.ts.map +1 -0
  340. package/dist/outbound-https.js +172 -0
  341. package/dist/outbound-https.js.map +1 -0
  342. package/dist/pitr.d.ts +60 -0
  343. package/dist/pitr.d.ts.map +1 -0
  344. package/dist/pitr.js +94 -0
  345. package/dist/pitr.js.map +1 -0
  346. package/dist/platform.d.ts +199 -0
  347. package/dist/platform.d.ts.map +1 -0
  348. package/dist/platform.js +196 -0
  349. package/dist/platform.js.map +1 -0
  350. package/dist/policies.d.ts +115 -0
  351. package/dist/policies.d.ts.map +1 -0
  352. package/dist/policies.js +158 -0
  353. package/dist/policies.js.map +1 -0
  354. package/dist/principal.d.ts +143 -0
  355. package/dist/principal.d.ts.map +1 -0
  356. package/dist/principal.js +174 -0
  357. package/dist/principal.js.map +1 -0
  358. package/dist/realtime.d.ts +280 -0
  359. package/dist/realtime.d.ts.map +1 -0
  360. package/dist/realtime.js +578 -0
  361. package/dist/realtime.js.map +1 -0
  362. package/dist/retrieval.d.ts +263 -0
  363. package/dist/retrieval.d.ts.map +1 -0
  364. package/dist/retrieval.js +602 -0
  365. package/dist/retrieval.js.map +1 -0
  366. package/dist/runtime-error-client.d.ts +10 -0
  367. package/dist/runtime-error-client.d.ts.map +1 -0
  368. package/dist/runtime-error-client.js +70 -0
  369. package/dist/runtime-error-client.js.map +1 -0
  370. package/dist/runtime-errors.d.ts +180 -0
  371. package/dist/runtime-errors.d.ts.map +1 -0
  372. package/dist/runtime-errors.js +572 -0
  373. package/dist/runtime-errors.js.map +1 -0
  374. package/dist/schema.d.ts +434 -0
  375. package/dist/schema.d.ts.map +1 -0
  376. package/dist/schema.js +232 -0
  377. package/dist/schema.js.map +1 -0
  378. package/dist/search.d.ts +216 -0
  379. package/dist/search.d.ts.map +1 -0
  380. package/dist/search.js +785 -0
  381. package/dist/search.js.map +1 -0
  382. package/dist/settings.d.ts +191 -0
  383. package/dist/settings.d.ts.map +1 -0
  384. package/dist/settings.js +478 -0
  385. package/dist/settings.js.map +1 -0
  386. package/dist/sql.d.ts +7 -0
  387. package/dist/sql.d.ts.map +1 -0
  388. package/dist/sql.js +30 -0
  389. package/dist/sql.js.map +1 -0
  390. package/dist/storage-client.d.ts +69 -0
  391. package/dist/storage-client.d.ts.map +1 -0
  392. package/dist/storage-client.js +469 -0
  393. package/dist/storage-client.js.map +1 -0
  394. package/dist/storage.d.ts +21 -0
  395. package/dist/storage.d.ts.map +1 -0
  396. package/dist/storage.js +82 -0
  397. package/dist/storage.js.map +1 -0
  398. package/dist/subject-domains.d.ts +15 -0
  399. package/dist/subject-domains.d.ts.map +1 -0
  400. package/dist/subject-domains.js +38 -0
  401. package/dist/subject-domains.js.map +1 -0
  402. package/dist/support.d.ts +132 -0
  403. package/dist/support.d.ts.map +1 -0
  404. package/dist/support.js +483 -0
  405. package/dist/support.js.map +1 -0
  406. package/dist/system-tables.d.ts +12 -0
  407. package/dist/system-tables.d.ts.map +1 -0
  408. package/dist/system-tables.js +225 -0
  409. package/dist/system-tables.js.map +1 -0
  410. package/dist/test.d.ts +57 -0
  411. package/dist/test.d.ts.map +1 -0
  412. package/dist/test.js +454 -0
  413. package/dist/test.js.map +1 -0
  414. package/dist/vite.d.ts +82 -0
  415. package/dist/vite.d.ts.map +1 -0
  416. package/dist/vite.js +82 -0
  417. package/dist/vite.js.map +1 -0
  418. package/dist/webpush-crypto.d.ts +39 -0
  419. package/dist/webpush-crypto.d.ts.map +1 -0
  420. package/dist/webpush-crypto.js +213 -0
  421. package/dist/webpush-crypto.js.map +1 -0
  422. package/dist/webpush-private.d.ts +11 -0
  423. package/dist/webpush-private.d.ts.map +1 -0
  424. package/dist/webpush-private.js +11 -0
  425. package/dist/webpush-private.js.map +1 -0
  426. package/dist/webpush.d.ts +86 -0
  427. package/dist/webpush.d.ts.map +1 -0
  428. package/dist/webpush.js +375 -0
  429. package/dist/webpush.js.map +1 -0
  430. package/dist/worker.d.ts +185 -0
  431. package/dist/worker.d.ts.map +1 -0
  432. package/dist/worker.js +13021 -0
  433. package/dist/worker.js.map +1 -0
  434. package/package.json +161 -8
  435. package/README.md +0 -3
@@ -0,0 +1,210 @@
1
+ import { normalizeUserTranscriptMessage } from "./agent-user-transcript.js";
2
+ import { readAgentChapterArchive } from "./agent-chapter-archive.js";
3
+ import { q } from "./sql.js";
4
+ /**
5
+ * Backwards paging of a conversation's member-visible transcript into the
6
+ * chapter archive. The live tail is served from hot storage by the
7
+ * conversation Durable Object exactly as before; everything older is read
8
+ * through to the sha256-verified NDJSON objects each closed chapter archived.
9
+ * The archive stays the one canonical copy of old spans — nothing here writes
10
+ * hot storage or rewrites archive objects.
11
+ *
12
+ * Scope follows the in-room chapter tools: a reader who holds conversation
13
+ * access (owner of a direct thread, active room member) pages the whole
14
+ * conversation's chapters. Membership windows are a cross-conversation
15
+ * concern and do not arise on a single conversation's own surface.
16
+ */
17
+ export const agentTranscriptPageDefaultLimit = 50;
18
+ export const agentTranscriptPageMaxLimit = 200;
19
+ /** Bounds R2 reads per page when a conversation has many tiny chapters. */
20
+ export const agentTranscriptPageMaxChapters = 10;
21
+ export function clampAgentTranscriptPageLimit(value) {
22
+ if (value === undefined || !Number.isFinite(value))
23
+ return agentTranscriptPageDefaultLimit;
24
+ return Math.max(1, Math.min(agentTranscriptPageMaxLimit, Math.floor(value)));
25
+ }
26
+ export function encodeAgentTranscriptCursor(cursor) {
27
+ return base64UrlEncode(JSON.stringify(cursor));
28
+ }
29
+ export function decodeAgentTranscriptCursor(value) {
30
+ try {
31
+ const parsed = JSON.parse(base64UrlDecode(value));
32
+ if (parsed.v !== 1)
33
+ return null;
34
+ if (typeof parsed.o !== "number" || !Number.isInteger(parsed.o) || parsed.o < 1)
35
+ return null;
36
+ if (parsed.l !== null && (typeof parsed.l !== "number" || !Number.isInteger(parsed.l) || parsed.l < 0)) {
37
+ return null;
38
+ }
39
+ return { v: 1, o: parsed.o, l: parsed.l };
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ async function loadPagerChapters(control, agentName, conversationId) {
46
+ return control.all(`SELECT "id", "ordinal", "title", "summary", "messageCount", "startedAt", "endedAt",
47
+ "firstMessageId", "lastMessageId", "archiveObjectKey", "archiveSha256",
48
+ "archiveBytes", "archivedAt", "archiveObligationAt"
49
+ FROM ${q("_agent_chapters")}
50
+ WHERE "agentName" = ? AND "conversationId" = ?
51
+ ORDER BY "ordinal" DESC`, [agentName, conversationId]);
52
+ }
53
+ /**
54
+ * Redaction wins over readability: while any chapter purge obligation is
55
+ * pending for this conversation, every chapter serves as a summary marker.
56
+ * Redaction rewrites are rare and drain quickly; briefly over-withholding is
57
+ * the safe side of the seam.
58
+ */
59
+ async function conversationHasPendingChapterPurges(control, conversationId) {
60
+ const row = await control.first(`SELECT "id" FROM ${q("_agent_chapter_purges")} WHERE "conversationId" = ? LIMIT 1`, [conversationId]);
61
+ return Boolean(row);
62
+ }
63
+ /**
64
+ * Chapters cover prefix spans of the conversation while hot rows are its
65
+ * suffix, so a chapter whose boundary ids are all still hot has nothing the
66
+ * screen is missing. The first (newest-first) chapter that reaches past the
67
+ * hot tail is where backwards paging starts; overlap inside that boundary
68
+ * chapter is expected and the client drops duplicate ids on prepend.
69
+ */
70
+ export async function summarizeOlderAgentTranscript(input) {
71
+ const chapters = await loadPagerChapters(input.control, input.agentName, input.conversationId);
72
+ for (const chapter of chapters) {
73
+ if (!chapterHasOlderContent(chapter, input.hotMessageIds))
74
+ continue;
75
+ return {
76
+ hasOlder: true,
77
+ nextCursor: encodeAgentTranscriptCursor({ v: 1, o: chapter.ordinal, l: null })
78
+ };
79
+ }
80
+ return { hasOlder: false, nextCursor: null };
81
+ }
82
+ function chapterHasOlderContent(chapter, hotMessageIds) {
83
+ if (chapter.messageCount === 0)
84
+ return false;
85
+ const fullyHot = Boolean(chapter.firstMessageId
86
+ && chapter.lastMessageId
87
+ && hotMessageIds.has(chapter.firstMessageId)
88
+ && hotMessageIds.has(chapter.lastMessageId));
89
+ return !fullyHot;
90
+ }
91
+ export async function pageArchivedAgentTranscript(input) {
92
+ const limit = clampAgentTranscriptPageLimit(input.limit);
93
+ const chapters = await loadPagerChapters(input.control, input.agentName, input.conversationId);
94
+ const withheld = await conversationHasPendingChapterPurges(input.control, input.conversationId);
95
+ // Collected newest-first while walking backwards; reversed before returning.
96
+ const collected = [];
97
+ const markers = [];
98
+ let itemBudget = limit;
99
+ let chaptersVisited = 0;
100
+ let nextCursor = null;
101
+ for (const chapter of chapters) {
102
+ if (chapter.ordinal > input.cursor.o)
103
+ continue;
104
+ if (itemBudget <= 0 || chaptersVisited >= agentTranscriptPageMaxChapters) {
105
+ nextCursor = { v: 1, o: chapter.ordinal, l: null };
106
+ break;
107
+ }
108
+ if (chapter.messageCount === 0)
109
+ continue;
110
+ chaptersVisited += 1;
111
+ const startLine = chapter.ordinal === input.cursor.o ? input.cursor.l : null;
112
+ if (withheld) {
113
+ markers.push(chapterMarker(chapter, "pending-rewrite"));
114
+ itemBudget -= 1;
115
+ continue;
116
+ }
117
+ if (!chapter.archiveObjectKey || !chapter.archivedAt || chapter.archiveObligationAt) {
118
+ markers.push(chapterMarker(chapter, "summary-only"));
119
+ itemBudget -= 1;
120
+ continue;
121
+ }
122
+ let lines;
123
+ try {
124
+ const ndjson = await readAgentChapterArchive(input.bucket, chapter);
125
+ lines = ndjson ? ndjson.trimEnd().split("\n") : [];
126
+ }
127
+ catch (error) {
128
+ console.warn(`Agent transcript pager could not read chapter ${chapter.id} (${input.agentName}/${input.conversationId})`, error);
129
+ markers.push(chapterMarker(chapter, "unavailable"));
130
+ itemBudget -= 1;
131
+ continue;
132
+ }
133
+ const end = startLine === null ? lines.length : Math.min(startLine, lines.length);
134
+ const take = Math.min(itemBudget, end);
135
+ const begin = end - take;
136
+ for (let index = end - 1; index >= begin; index -= 1) {
137
+ const projected = projectArchiveLine(chapter, lines[index], index, input.defaultUserId);
138
+ if (projected)
139
+ collected.push(projected);
140
+ }
141
+ itemBudget -= take;
142
+ if (begin > 0) {
143
+ nextCursor = { v: 1, o: chapter.ordinal, l: begin };
144
+ break;
145
+ }
146
+ }
147
+ return {
148
+ messages: collected.reverse(),
149
+ markers: markers.reverse(),
150
+ returned: collected.length,
151
+ hasOlder: nextCursor !== null,
152
+ nextCursor: nextCursor ? encodeAgentTranscriptCursor(nextCursor) : null
153
+ };
154
+ }
155
+ function chapterMarker(chapter, reason) {
156
+ return {
157
+ chapterId: chapter.id,
158
+ ordinal: chapter.ordinal,
159
+ title: chapter.title,
160
+ summary: chapter.summary,
161
+ messageCount: chapter.messageCount,
162
+ startedAt: chapter.startedAt,
163
+ endedAt: chapter.endedAt,
164
+ reason
165
+ };
166
+ }
167
+ /**
168
+ * Archive lines are the stored UI message objects (`raybaseArchiveV` stamped
169
+ * since 2026-08; absent means the same version 1 shape), so the projection is
170
+ * the exact one hot rows go through: role filter, hidden-kickoff filter,
171
+ * removal stubs, attachments. Author names are served as stored at write
172
+ * time — historically accurate, and rewritten with the archive on redaction —
173
+ * rather than re-resolved through app hooks.
174
+ */
175
+ function projectArchiveLine(chapter, line, index, defaultUserId) {
176
+ const trimmed = line.trim();
177
+ if (!trimmed)
178
+ return null;
179
+ let parsed;
180
+ try {
181
+ const candidate = JSON.parse(trimmed);
182
+ if (!candidate || typeof candidate !== "object" || Array.isArray(candidate))
183
+ return null;
184
+ parsed = candidate;
185
+ }
186
+ catch {
187
+ console.warn(`Agent transcript pager skipped a malformed archive line in chapter ${chapter.id}`);
188
+ return null;
189
+ }
190
+ const createdAt = typeof parsed.createdAt === "string" && parsed.createdAt.trim()
191
+ ? parsed.createdAt
192
+ : chapter.startedAt;
193
+ const id = typeof parsed.id === "string" && parsed.id.trim() ? parsed.id : `${chapter.id}:${index}`;
194
+ return normalizeUserTranscriptMessage({ id, message: trimmed, created_at: createdAt }, defaultUserId);
195
+ }
196
+ function base64UrlEncode(value) {
197
+ const bytes = new TextEncoder().encode(value);
198
+ let binary = "";
199
+ for (const byte of bytes)
200
+ binary += String.fromCharCode(byte);
201
+ return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
202
+ }
203
+ function base64UrlDecode(value) {
204
+ const normalized = value.replace(/-/g, "+").replace(/_/g, "/");
205
+ const padded = normalized + "=".repeat((4 - (normalized.length % 4)) % 4);
206
+ const binary = atob(padded);
207
+ const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));
208
+ return new TextDecoder().decode(bytes);
209
+ }
210
+ //# sourceMappingURL=agent-transcript-pager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-transcript-pager.js","sourceRoot":"","sources":["../src/agent-transcript-pager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC;AAE7B;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAClD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAmCjD,MAAM,UAAU,6BAA6B,CAAC,KAAyB;IACrE,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,+BAA+B,CAAC;IAC3F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAA6B;IACvE,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAA4B,CAAC;QAC7E,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,OAAO,MAAM,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7F,IAAI,MAAM,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvG,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAkB,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAoBD,KAAK,UAAU,iBAAiB,CAC9B,OAAoB,EACpB,SAAiB,EACjB,cAAsB;IAEtB,OAAO,OAAO,CAAC,GAAG,CAChB;;;YAGQ,CAAC,CAAC,iBAAiB,CAAC;;6BAEH,EACzB,CAAC,SAAS,EAAE,cAAc,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,mCAAmC,CAChD,OAAoB,EACpB,cAAsB;IAEtB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAC7B,oBAAoB,CAAC,CAAC,uBAAuB,CAAC,qCAAqC,EACnF,CAAC,cAAc,CAAC,CACjB,CAAC;IACF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,KAKnD;IACC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/F,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC;YAAE,SAAS;QACpE,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,2BAA2B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;SAC/E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAwB,EAAE,aAAkC;IAC1F,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CACtB,OAAO,CAAC,cAAc;WACnB,OAAO,CAAC,aAAa;WACrB,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;WACzC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAC5C,CAAC;IACF,OAAO,CAAC,QAAQ,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,KAQjD;IACC,MAAM,KAAK,GAAG,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,MAAM,mCAAmC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAChG,6EAA6E;IAC7E,MAAM,SAAS,GAAmC,EAAE,CAAC;IACrD,MAAM,OAAO,GAAmC,EAAE,CAAC;IACnD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,UAAU,GAAiC,IAAI,CAAC;IAEpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAAE,SAAS;QAC/C,IAAI,UAAU,IAAI,CAAC,IAAI,eAAe,IAAI,8BAA8B,EAAE,CAAC;YACzE,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YACnD,MAAM;QACR,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;YAAE,SAAS;QACzC,eAAe,IAAI,CAAC,CAAC;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7E,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;YACxD,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACpF,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;YACrD,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,iDAAiD,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,cAAc,GAAG,EAC1G,KAAK,CACN,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;YACpD,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,GAAG,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;QACzB,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAE,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YACzF,IAAI,SAAS;gBAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QACD,UAAU,IAAI,IAAI,CAAC;QACnB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;YACpD,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,OAAO,EAAE;QAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;QAC1B,QAAQ,EAAE,SAAS,CAAC,MAAM;QAC1B,QAAQ,EAAE,UAAU,KAAK,IAAI;QAC7B,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;KACxE,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,OAAwB,EACxB,MAA8C;IAE9C,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,kBAAkB,CACzB,OAAwB,EACxB,IAAY,EACZ,KAAa,EACb,aAA4B;IAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;QACjD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QACzF,MAAM,GAAG,SAAoC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,sEAAsE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACjG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;QAC/E,CAAC,CAAC,MAAM,CAAC,SAAS;QAClB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACtB,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;IACpG,OAAO,8BAA8B,CACnC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAC/C,aAAa,CACd,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type JsonSchemaObject } from "./json-schema.js";
2
+ export declare const maxAgentUserDataPartsPerMessage = 8;
3
+ export declare const maxAgentUserDataPartBytes: number;
4
+ export declare const maxAgentUserDataBytesPerMessage: number;
5
+ export type RaybaseAgentUserDataPartDefinition = {
6
+ schema: JsonSchemaObject;
7
+ /** UTF-8 byte limit for the canonical JSON value. Required and capped by Core. */
8
+ maxBytes: number;
9
+ };
10
+ export type RaybaseAgentUserDataPartsConfig = Partial<Record<`data-${string}`, RaybaseAgentUserDataPartDefinition>>;
11
+ export declare function isReservedAgentDataPartType(type: string): boolean;
12
+ export declare function isPotentialAgentUserDataPartType(type: unknown): type is string;
13
+ export declare function isAgentUserDataPartType(type: unknown): type is `data-${string}`;
14
+ export declare function validateAgentUserDataPartsConfig(agentName: string, value: RaybaseAgentUserDataPartsConfig | undefined): void;
15
+ export declare function validateAgentUserDataPartValue(definition: RaybaseAgentUserDataPartDefinition, value: unknown, path?: string): {
16
+ value: unknown;
17
+ canonicalJson: string;
18
+ bytes: number;
19
+ };
20
+ //# sourceMappingURL=agent-user-data-parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-user-data-parts.d.ts","sourceRoot":"","sources":["../src/agent-user-data-parts.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,eAAO,MAAM,+BAA+B,IAAI,CAAC;AACjD,eAAO,MAAM,yBAAyB,QAAY,CAAC;AACnD,eAAO,MAAM,+BAA+B,QAAY,CAAC;AAEzD,MAAM,MAAM,kCAAkC,GAAG;IAC/C,MAAM,EAAE,gBAAgB,CAAC;IACzB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,OAAO,CACnD,MAAM,CAAC,QAAQ,MAAM,EAAE,EAAE,kCAAkC,CAAC,CAC7D,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAE9E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,QAAQ,MAAM,EAAE,CAE/E;AAED,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,+BAA+B,GAAG,SAAS,GACjD,IAAI,CA0BN;AAED,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,kCAAkC,EAC9C,KAAK,EAAE,OAAO,EACd,IAAI,SAAc,GACjB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAqB1D"}
@@ -0,0 +1,161 @@
1
+ import { stableJson } from "./internal.js";
2
+ import { validateJsonSchema } from "./json-schema.js";
3
+ export const maxAgentUserDataPartsPerMessage = 8;
4
+ export const maxAgentUserDataPartBytes = 32 * 1024;
5
+ export const maxAgentUserDataBytesPerMessage = 64 * 1024;
6
+ export function isReservedAgentDataPartType(type) {
7
+ return type === "data-voice-note" || type === "data-raybase" || type.startsWith("data-raybase-");
8
+ }
9
+ export function isPotentialAgentUserDataPartType(type) {
10
+ return typeof type === "string" && type.startsWith("data-") && !isReservedAgentDataPartType(type);
11
+ }
12
+ export function isAgentUserDataPartType(type) {
13
+ return isPotentialAgentUserDataPartType(type) && /^data-[a-z0-9][a-z0-9-]*$/.test(type);
14
+ }
15
+ export function validateAgentUserDataPartsConfig(agentName, value) {
16
+ if (value === undefined)
17
+ return;
18
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
19
+ throw new Error(`Raybase agent ${agentName} conversations.messages.userDataParts must be an object`);
20
+ }
21
+ for (const [type, rawDefinition] of Object.entries(value)) {
22
+ const path = `Raybase agent ${agentName} conversations.messages.userDataParts.${type}`;
23
+ if (!isAgentUserDataPartType(type)) {
24
+ throw new Error(`${path} must use a lowercase app-defined data-* type outside Core's reserved namespace`);
25
+ }
26
+ if (!rawDefinition || typeof rawDefinition !== "object" || Array.isArray(rawDefinition)) {
27
+ throw new Error(`${path} must be an object`);
28
+ }
29
+ const definition = rawDefinition;
30
+ const unknownDefinitionKeys = Object.keys(rawDefinition).filter((key) => key !== "schema" && key !== "maxBytes");
31
+ if (unknownDefinitionKeys.length) {
32
+ throw new Error(`${path}.${unknownDefinitionKeys[0]} is unsupported`);
33
+ }
34
+ if (!Number.isInteger(definition.maxBytes) || definition.maxBytes < 1) {
35
+ throw new Error(`${path}.maxBytes must be a positive integer`);
36
+ }
37
+ if (definition.maxBytes > maxAgentUserDataPartBytes) {
38
+ throw new Error(`${path}.maxBytes exceeds the Core hard cap of ${maxAgentUserDataPartBytes} bytes`);
39
+ }
40
+ validateAgentUserDataPartSchema(definition.schema, `${path}.schema`);
41
+ }
42
+ }
43
+ export function validateAgentUserDataPartValue(definition, value, path = "part.data") {
44
+ let canonicalJson;
45
+ try {
46
+ canonicalJson = stableJson(value);
47
+ }
48
+ catch {
49
+ canonicalJson = undefined;
50
+ }
51
+ if (typeof canonicalJson !== "string")
52
+ throw new Error(`${path} must be JSON serializable`);
53
+ const canonicalBytes = new TextEncoder().encode(canonicalJson).byteLength;
54
+ if (canonicalBytes > definition.maxBytes || canonicalBytes > maxAgentUserDataPartBytes) {
55
+ throw new Error(`${path} exceeds its byte limit`);
56
+ }
57
+ const canonicalValue = JSON.parse(canonicalJson);
58
+ const validated = validateJsonSchema(definition.schema, canonicalValue, path);
59
+ const validatedJson = stableJson(validated);
60
+ if (typeof validatedJson !== "string")
61
+ throw new Error(`${path} must be JSON serializable`);
62
+ return {
63
+ value: JSON.parse(validatedJson),
64
+ canonicalJson: validatedJson,
65
+ bytes: new TextEncoder().encode(validatedJson).byteLength
66
+ };
67
+ }
68
+ function validateAgentUserDataPartSchema(schema, path) {
69
+ const allowedTypes = new Set(["object", "array", "string", "number", "integer", "boolean", "null"]);
70
+ if (!schema || typeof schema !== "object" || Array.isArray(schema)) {
71
+ throw new Error(`${path} must be a JSON Schema object`);
72
+ }
73
+ if (typeof schema.type !== "string" || !allowedTypes.has(schema.type)) {
74
+ throw new Error(`${path}.type must be one of object, array, string, number, integer, boolean, or null`);
75
+ }
76
+ const common = new Set(["type", "enum"]);
77
+ const byType = {
78
+ object: new Set(["properties", "required", "additionalProperties"]),
79
+ array: new Set(["items", "minItems", "maxItems"]),
80
+ string: new Set(["minLength", "maxLength"]),
81
+ number: new Set(["minimum", "maximum"]),
82
+ integer: new Set(["minimum", "maximum"]),
83
+ boolean: new Set(),
84
+ null: new Set()
85
+ };
86
+ for (const key of Object.keys(schema)) {
87
+ if (!common.has(key) && !byType[schema.type].has(key)) {
88
+ throw new Error(`${path}.${key} is unsupported for type ${schema.type}`);
89
+ }
90
+ }
91
+ if (schema.enum !== undefined) {
92
+ if (!Array.isArray(schema.enum) || schema.enum.length === 0)
93
+ throw new Error(`${path}.enum must be a non-empty array`);
94
+ const schemaWithoutEnum = { ...schema };
95
+ delete schemaWithoutEnum.enum;
96
+ for (const [index, candidate] of schema.enum.entries()) {
97
+ let serialized;
98
+ try {
99
+ serialized = stableJson(candidate);
100
+ }
101
+ catch {
102
+ serialized = undefined;
103
+ }
104
+ if (typeof serialized !== "string")
105
+ throw new Error(`${path}.enum[${index}] must be JSON serializable`);
106
+ try {
107
+ validateJsonSchema(schemaWithoutEnum, candidate, `${path}.enum[${index}]`);
108
+ }
109
+ catch (error) {
110
+ throw new Error(error instanceof Error ? error.message : `${path}.enum[${index}] is invalid`);
111
+ }
112
+ }
113
+ }
114
+ if (schema.type === "object") {
115
+ if (schema.properties !== undefined && (!schema.properties || typeof schema.properties !== "object" || Array.isArray(schema.properties))) {
116
+ throw new Error(`${path}.properties must be an object`);
117
+ }
118
+ if (schema.required !== undefined && (!Array.isArray(schema.required)
119
+ || schema.required.some((key) => typeof key !== "string")
120
+ || new Set(schema.required).size !== schema.required.length)) {
121
+ throw new Error(`${path}.required must contain unique property names`);
122
+ }
123
+ if (schema.additionalProperties !== undefined && typeof schema.additionalProperties !== "boolean") {
124
+ throw new Error(`${path}.additionalProperties must be a boolean`);
125
+ }
126
+ for (const required of schema.required ?? []) {
127
+ if (!schema.properties?.[required])
128
+ throw new Error(`${path}.required includes undeclared property ${required}`);
129
+ }
130
+ for (const [key, child] of Object.entries(schema.properties ?? {})) {
131
+ validateAgentUserDataPartSchema(child, `${path}.properties.${key}`);
132
+ }
133
+ }
134
+ if (schema.type === "array" && schema.items !== undefined) {
135
+ validateAgentUserDataPartSchema(schema.items, `${path}.items`);
136
+ }
137
+ validateNonNegativeIntegerBound(schema.minLength, `${path}.minLength`);
138
+ validateNonNegativeIntegerBound(schema.maxLength, `${path}.maxLength`);
139
+ validateNonNegativeIntegerBound(schema.minItems, `${path}.minItems`);
140
+ validateNonNegativeIntegerBound(schema.maxItems, `${path}.maxItems`);
141
+ validateBoundOrder(schema.minLength, schema.maxLength, path, "minLength", "maxLength");
142
+ validateBoundOrder(schema.minItems, schema.maxItems, path, "minItems", "maxItems");
143
+ if (schema.minimum !== undefined && (typeof schema.minimum !== "number" || !Number.isFinite(schema.minimum))) {
144
+ throw new Error(`${path}.minimum must be a finite number`);
145
+ }
146
+ if (schema.maximum !== undefined && (typeof schema.maximum !== "number" || !Number.isFinite(schema.maximum))) {
147
+ throw new Error(`${path}.maximum must be a finite number`);
148
+ }
149
+ validateBoundOrder(schema.minimum, schema.maximum, path, "minimum", "maximum");
150
+ }
151
+ function validateNonNegativeIntegerBound(value, path) {
152
+ if (value !== undefined && (!Number.isInteger(value) || value < 0)) {
153
+ throw new Error(`${path} must be a non-negative integer`);
154
+ }
155
+ }
156
+ function validateBoundOrder(minimum, maximum, path, minimumName, maximumName) {
157
+ if (minimum !== undefined && maximum !== undefined && minimum > maximum) {
158
+ throw new Error(`${path}.${minimumName} must not exceed ${maximumName}`);
159
+ }
160
+ }
161
+ //# sourceMappingURL=agent-user-data-parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-user-data-parts.js","sourceRoot":"","sources":["../src/agent-user-data-parts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type RaybaseAgentMessageAttachment } from "./agent-message-parts.js";
2
+ /**
3
+ * The member-facing transcript projection, shared by the conversation Durable
4
+ * Object's hot reads and the worker's archive read-through pager. Pure by
5
+ * design: archive NDJSON lines are the stored UI message objects, so both
6
+ * stores project through exactly this code and the screen cannot diverge by
7
+ * source.
8
+ */
9
+ export type StoredChatMessageRow = {
10
+ id: string;
11
+ message: string;
12
+ created_at: string;
13
+ };
14
+ export declare function normalizeUserTranscriptMessage(row: StoredChatMessageRow, defaultUserId?: string | null): {
15
+ id: string;
16
+ role: "user" | "assistant";
17
+ parts: Array<Record<string, unknown>>;
18
+ /** Derived from the stored parts, before any projection flattens them. */
19
+ attachments: RaybaseAgentMessageAttachment[];
20
+ createdAt: string;
21
+ author: {
22
+ kind: "user" | "agent" | "app";
23
+ userId: string | null;
24
+ name: string | null;
25
+ };
26
+ metadata?: {
27
+ raybase: {
28
+ editedAt?: string;
29
+ removed?: boolean;
30
+ removedAt?: string;
31
+ reactions?: Record<string, string>;
32
+ /** Absent on messages committed before turn identity was stamped. */
33
+ runId?: string;
34
+ };
35
+ };
36
+ } | null;
37
+ export declare function transcriptMessageAuthor(message: Record<string, unknown>, defaultUserId?: string | null): {
38
+ kind: "user" | "agent" | "app";
39
+ userId: string | null;
40
+ name: string | null;
41
+ };
42
+ export declare function isHiddenEntryKickoffRecord(message: Record<string, unknown>): boolean;
43
+ export declare function userTranscriptParts(parts: unknown[], role: "user" | "assistant"): Array<Record<string, unknown>>;
44
+ export declare function storedMessageRunId(message: Record<string, unknown>): string | null;
45
+ export declare function parseStoredMessage(value: string): Record<string, unknown>;
46
+ //# sourceMappingURL=agent-user-transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-user-transcript.d.ts","sourceRoot":"","sources":["../src/agent-user-transcript.ts"],"names":[],"mappings":"AACA,OAAO,EAQL,KAAK,6BAA6B,EACnC,MAAM,0BAA0B,CAAC;AAElC;;;;;;GAMG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,oBAAoB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IACxG,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtC,0EAA0E;IAC1E,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;QAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACrB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE;YACP,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACnC,qEAAqE;YACrE,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;CACH,GAAG,IAAI,CA2BP;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAC5B;IAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAahF;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAIpF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAIhH;AA0CD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAGlF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzE"}
@@ -0,0 +1,106 @@
1
+ import { raybaseAgentDataPartTypes } from "./agent-data-parts.js";
2
+ import { agentFilePlaceholder, agentMessageAttachments, asAgentFilePart, asAgentUserDataPart, asAgentVoiceNoteData, raybaseFileReferenceId, raybaseVoiceNoteDataPartType } from "./agent-message-parts.js";
3
+ export function normalizeUserTranscriptMessage(row, defaultUserId) {
4
+ const parsed = parseStoredMessage(row.message);
5
+ if (parsed.role !== "user" && parsed.role !== "assistant")
6
+ return null;
7
+ if (isHiddenEntryKickoffRecord(parsed))
8
+ return null;
9
+ const parts = Array.isArray(parsed.parts) ? userTranscriptParts(parsed.parts, parsed.role) : [];
10
+ const raybase = asRecord(asRecord(parsed.metadata).raybase);
11
+ const reactions = Object.fromEntries(Object.entries(asRecord(raybase.reactions))
12
+ .filter((entry) => typeof entry[1] === "string"));
13
+ const runId = storedMessageRunId(parsed);
14
+ const projectedRaybase = {
15
+ ...(typeof raybase.editedAt === "string" ? { editedAt: raybase.editedAt } : {}),
16
+ ...(raybase.removed === true ? { removed: true } : {}),
17
+ ...(typeof raybase.removedAt === "string" ? { removedAt: raybase.removedAt } : {}),
18
+ ...(Object.keys(reactions).length ? { reactions } : {}),
19
+ ...(runId ? { runId } : {})
20
+ };
21
+ return {
22
+ id: String(parsed.id ?? row.id),
23
+ role: parsed.role,
24
+ parts,
25
+ attachments: agentMessageAttachments(parsed.parts),
26
+ createdAt: row.created_at,
27
+ author: transcriptMessageAuthor(parsed, defaultUserId),
28
+ ...(Object.keys(projectedRaybase).length ? { metadata: { raybase: projectedRaybase } } : {})
29
+ };
30
+ }
31
+ export function transcriptMessageAuthor(message, defaultUserId) {
32
+ const metadata = asRecord(message.metadata);
33
+ const author = asRecord(asRecord(metadata.raybase).author);
34
+ const kind = author.kind === "user" || author.kind === "agent" || author.kind === "app"
35
+ ? author.kind
36
+ : message.role === "assistant" ? "agent" : "user";
37
+ return {
38
+ kind,
39
+ userId: kind === "user"
40
+ ? typeof author.userId === "string" ? author.userId : defaultUserId ?? null
41
+ : null,
42
+ name: typeof author.name === "string" && author.name.trim() ? author.name.trim() : null
43
+ };
44
+ }
45
+ export function isHiddenEntryKickoffRecord(message) {
46
+ const metadata = asRecord(message.metadata);
47
+ const raybase = asRecord(metadata.raybase);
48
+ return raybase.hidden === true && raybase.entryKickoff === true;
49
+ }
50
+ export function userTranscriptParts(parts, role) {
51
+ const hasVoiceNote = parts.some((part) => asAgentVoiceNoteData(part) !== null)
52
+ && parts.some((part) => asAgentFilePart(part)?.mediaType === "audio/wav");
53
+ return parts.flatMap((part) => userTranscriptPart(part, hasVoiceNote, role));
54
+ }
55
+ function userTranscriptPart(part, hasVoiceNote = false, role = "user") {
56
+ const record = asRecord(part);
57
+ const type = typeof record.type === "string" ? record.type : "";
58
+ if (type === "text" && typeof record.text === "string") {
59
+ return [{ type: "text", text: record.text }];
60
+ }
61
+ const file = asAgentFilePart(record);
62
+ if (file?.mediaType === "audio/wav") {
63
+ // A voice note keeps its audio part only alongside its duration marker;
64
+ // the pair is what the player is built from.
65
+ return hasVoiceNote ? [file] : [{ type: "text", text: agentFilePlaceholder(file) }];
66
+ }
67
+ if (file) {
68
+ // A durable `raybase-file:` reference is an opaque id the file route
69
+ // authorizes on its own, so it survives to every reader that can render
70
+ // it. Anything else — an inline `data:` payload, an unusable URL — is
71
+ // flattened to the stand-in it always was.
72
+ return raybaseFileReferenceId(file.url) ? [file] : [{ type: "text", text: agentFilePlaceholder(file) }];
73
+ }
74
+ const voiceNote = asAgentVoiceNoteData(record);
75
+ if (voiceNote && hasVoiceNote)
76
+ return [{ type: raybaseVoiceNoteDataPartType, data: voiceNote }];
77
+ const userData = role === "user" ? asAgentUserDataPart(record) : null;
78
+ if (userData)
79
+ return [{ type: userData.type, data: userData.data }];
80
+ if (type === raybaseAgentDataPartTypes.sources ||
81
+ type === raybaseAgentDataPartTypes.citations ||
82
+ type === raybaseAgentDataPartTypes.supportRequestCreated ||
83
+ type === raybaseAgentDataPartTypes.turnError) {
84
+ const output = { type, data: record.data };
85
+ if (typeof record.id === "string")
86
+ output.id = record.id;
87
+ return [output];
88
+ }
89
+ return [];
90
+ }
91
+ export function storedMessageRunId(message) {
92
+ const runId = asRecord(asRecord(message.metadata).raybase).runId;
93
+ return typeof runId === "string" && runId.trim() ? runId : null;
94
+ }
95
+ export function parseStoredMessage(value) {
96
+ try {
97
+ return asRecord(JSON.parse(value));
98
+ }
99
+ catch {
100
+ return {};
101
+ }
102
+ }
103
+ function asRecord(value) {
104
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
105
+ }
106
+ //# sourceMappingURL=agent-user-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-user-transcript.js","sourceRoot":"","sources":["../src/agent-user-transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare const defaultAgentVoiceNoteMaxSeconds = 300;
2
+ export declare const agentVoiceNotePcmBytesPerSecond = 32000;
3
+ export declare const agentVoiceNoteWavSlackBytes = 4096;
4
+ export type RaybaseAgentConversationVoiceNotesConfig = {
5
+ enabled: true;
6
+ maxSeconds?: number;
7
+ };
8
+ export type NormalizedRaybaseAgentConversationVoiceNotesConfig = {
9
+ enabled: true;
10
+ maxSeconds: number;
11
+ maxBytes: number;
12
+ };
13
+ export declare function agentVoiceNoteMaxBytes(maxSeconds: number, attachmentMaxBytes: number): number;
14
+ export declare function normalizeAgentVoiceNotesConfig(config: RaybaseAgentConversationVoiceNotesConfig | undefined, attachmentMaxBytes: number): NormalizedRaybaseAgentConversationVoiceNotesConfig | null;
15
+ //# sourceMappingURL=agent-voice-notes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-voice-notes.d.ts","sourceRoot":"","sources":["../src/agent-voice-notes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,eAAO,MAAM,+BAA+B,QAAS,CAAC;AACtD,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD,MAAM,MAAM,wCAAwC,GAAG;IACrD,OAAO,EAAE,IAAI,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,kDAAkD,GAAG;IAC/D,OAAO,EAAE,IAAI,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAK7F;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,wCAAwC,GAAG,SAAS,EAC5D,kBAAkB,EAAE,MAAM,GACzB,kDAAkD,GAAG,IAAI,CAQ3D"}
@@ -0,0 +1,17 @@
1
+ export const defaultAgentVoiceNoteMaxSeconds = 300;
2
+ export const agentVoiceNotePcmBytesPerSecond = 32_000;
3
+ export const agentVoiceNoteWavSlackBytes = 4_096;
4
+ export function agentVoiceNoteMaxBytes(maxSeconds, attachmentMaxBytes) {
5
+ return Math.min(attachmentMaxBytes, maxSeconds * agentVoiceNotePcmBytesPerSecond + agentVoiceNoteWavSlackBytes);
6
+ }
7
+ export function normalizeAgentVoiceNotesConfig(config, attachmentMaxBytes) {
8
+ if (!config)
9
+ return null;
10
+ const maxSeconds = config.maxSeconds ?? defaultAgentVoiceNoteMaxSeconds;
11
+ return {
12
+ enabled: true,
13
+ maxSeconds,
14
+ maxBytes: agentVoiceNoteMaxBytes(maxSeconds, attachmentMaxBytes)
15
+ };
16
+ }
17
+ //# sourceMappingURL=agent-voice-notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-voice-notes.js","sourceRoot":"","sources":["../src/agent-voice-notes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AACnD,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAajD,MAAM,UAAU,sBAAsB,CAAC,UAAkB,EAAE,kBAA0B;IACnF,OAAO,IAAI,CAAC,GAAG,CACb,kBAAkB,EAClB,UAAU,GAAG,+BAA+B,GAAG,2BAA2B,CAC3E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,MAA4D,EAC5D,kBAA0B;IAE1B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,+BAA+B,CAAC;IACxE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,UAAU;QACV,QAAQ,EAAE,sBAAsB,CAAC,UAAU,EAAE,kBAAkB,CAAC;KACjE,CAAC;AACJ,CAAC"}