@agimon-ai/doompi-author 0.0.1-alpha.2 → 0.0.1-alpha.21

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 (318) hide show
  1. package/README.md +5 -1
  2. package/dist/apiContracts.cjs +316 -0
  3. package/dist/apiContracts.cjs.map +1 -0
  4. package/dist/apiContracts.d.mts +53 -0
  5. package/dist/apiContracts.d.mts.map +1 -0
  6. package/dist/apiContracts.mjs +311 -0
  7. package/dist/apiContracts.mjs.map +1 -0
  8. package/dist/authorCommand-B90ghX5J.mjs +226 -0
  9. package/dist/authorCommand-B90ghX5J.mjs.map +1 -0
  10. package/dist/authorCommand-Cd5dnLF7.cjs +315 -0
  11. package/dist/authorCommand-Cd5dnLF7.cjs.map +1 -0
  12. package/dist/authorFacade-B9-Re3Ga.mjs +75 -0
  13. package/dist/authorFacade-B9-Re3Ga.mjs.map +1 -0
  14. package/dist/authorFacade-BvCSzZ5K.cjs +104 -0
  15. package/dist/authorFacade-BvCSzZ5K.cjs.map +1 -0
  16. package/dist/authorFacade-RZ6EXlR5.d.mts +113 -0
  17. package/dist/authorFacade-RZ6EXlR5.d.mts.map +1 -0
  18. package/dist/authorFacade.cjs +26 -0
  19. package/dist/authorFacade.d.mts +3 -0
  20. package/dist/authorFacade.mjs +3 -0
  21. package/dist/extensions/pi.cjs +172 -1
  22. package/dist/extensions/pi.cjs.map +1 -0
  23. package/dist/extensions/pi.d.mts +6 -2
  24. package/dist/extensions/pi.d.mts.map +1 -0
  25. package/dist/extensions/pi.mjs +167 -1
  26. package/dist/extensions/pi.mjs.map +1 -0
  27. package/dist/extensions/server.cjs +659 -0
  28. package/dist/extensions/server.cjs.map +1 -0
  29. package/dist/extensions/server.d.mts +5 -0
  30. package/dist/extensions/server.d.mts.map +1 -0
  31. package/dist/extensions/server.mjs +652 -0
  32. package/dist/extensions/server.mjs.map +1 -0
  33. package/dist/extensions/web.mjs +4231 -0
  34. package/dist/extensions/web.mjs.map +1 -0
  35. package/dist/index-Btm_xNOb.d.mts +386 -0
  36. package/dist/index-Btm_xNOb.d.mts.map +1 -0
  37. package/dist/index.cjs +35 -1
  38. package/dist/index.d.mts +2 -21
  39. package/dist/index.mjs +4 -1
  40. package/dist/monitor-7T5YF6px.mjs +70 -0
  41. package/dist/monitor-7T5YF6px.mjs.map +1 -0
  42. package/dist/monitor-BxY8s_AX.cjs +81 -0
  43. package/dist/monitor-BxY8s_AX.cjs.map +1 -0
  44. package/dist/structuredDocuments-Bg6DIqu5.cjs +960 -0
  45. package/dist/structuredDocuments-Bg6DIqu5.cjs.map +1 -0
  46. package/dist/structuredDocuments-CzMYD0Bq.mjs +810 -0
  47. package/dist/structuredDocuments-CzMYD0Bq.mjs.map +1 -0
  48. package/package.json +48 -38
  49. package/src/types/authorPreview.ts +76 -0
  50. package/src/types/webAuthor.ts +1 -1
  51. package/dist/_virtual/_rolldown/runtime.cjs +0 -1
  52. package/dist/adapters/authorApi.cjs +0 -2
  53. package/dist/adapters/authorApi.cjs.map +0 -1
  54. package/dist/adapters/authorBridgeApi.cjs +0 -2
  55. package/dist/adapters/authorBridgeApi.cjs.map +0 -1
  56. package/dist/adapters/authorDocumentApi.cjs +0 -2
  57. package/dist/adapters/authorDocumentApi.cjs.map +0 -1
  58. package/dist/adapters/pi/authorBridgeClient.cjs +0 -2
  59. package/dist/adapters/pi/authorBridgeClient.cjs.map +0 -1
  60. package/dist/adapters/pi/authorTools.cjs +0 -2
  61. package/dist/adapters/pi/authorTools.cjs.map +0 -1
  62. package/dist/adapters/pi/extension.cjs +0 -2
  63. package/dist/adapters/pi/extension.cjs.map +0 -1
  64. package/dist/adapters/structuredDocuments/common.cjs +0 -2
  65. package/dist/adapters/structuredDocuments/common.cjs.map +0 -1
  66. package/dist/adapters/structuredDocuments/csv.cjs +0 -7
  67. package/dist/adapters/structuredDocuments/csv.cjs.map +0 -1
  68. package/dist/adapters/structuredDocuments/index.cjs +0 -2
  69. package/dist/adapters/structuredDocuments/index.cjs.map +0 -1
  70. package/dist/adapters/structuredDocuments/markdownSlides.cjs +0 -6
  71. package/dist/adapters/structuredDocuments/markdownSlides.cjs.map +0 -1
  72. package/dist/adapters/structuredDocuments/ooxmlArchive.cjs +0 -2
  73. package/dist/adapters/structuredDocuments/ooxmlArchive.cjs.map +0 -1
  74. package/dist/adapters/structuredDocuments/pptx.cjs +0 -2
  75. package/dist/adapters/structuredDocuments/pptx.cjs.map +0 -1
  76. package/dist/adapters/structuredDocuments/xlsx.cjs +0 -2
  77. package/dist/adapters/structuredDocuments/xlsx.cjs.map +0 -1
  78. package/dist/adapters/structuredDocuments/xmlText.cjs +0 -2
  79. package/dist/adapters/structuredDocuments/xmlText.cjs.map +0 -1
  80. package/dist/adapters/webAuthorChannel.cjs +0 -2
  81. package/dist/adapters/webAuthorChannel.cjs.map +0 -1
  82. package/dist/commands/doomAuthorCommand.cjs +0 -2
  83. package/dist/commands/doomAuthorCommand.cjs.map +0 -1
  84. package/dist/container/index.cjs +0 -2
  85. package/dist/container/index.cjs.map +0 -1
  86. package/dist/extensions/pi.d.cts +0 -2
  87. package/dist/index.d.cts +0 -21
  88. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.cts +0 -6
  89. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.cts.map +0 -1
  90. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.mts +0 -6
  91. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.mts.map +0 -1
  92. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.cts +0 -7
  93. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.cts.map +0 -1
  94. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.mts +0 -7
  95. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.mts.map +0 -1
  96. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.cts +0 -12
  97. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.cts.map +0 -1
  98. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.mts +0 -12
  99. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.mts.map +0 -1
  100. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.cts +0 -12
  101. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.cts.map +0 -1
  102. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.mts +0 -12
  103. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.mts.map +0 -1
  104. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.cts +0 -9
  105. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.cts.map +0 -1
  106. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.mts +0 -9
  107. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.mts.map +0 -1
  108. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.cts +0 -4
  109. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.cts.map +0 -1
  110. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.mts +0 -4
  111. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.mts.map +0 -1
  112. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.cts +0 -9
  113. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.cts.map +0 -1
  114. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.mts +0 -9
  115. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.mts.map +0 -1
  116. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.cts +0 -8
  117. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.cts.map +0 -1
  118. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.mts +0 -8
  119. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.mts.map +0 -1
  120. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.cts +0 -15
  121. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.cts.map +0 -1
  122. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.mts +0 -15
  123. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.mts.map +0 -1
  124. package/dist/packages/minor/doompi-author/src/adapters/authorApi.mjs +0 -2
  125. package/dist/packages/minor/doompi-author/src/adapters/authorApi.mjs.map +0 -1
  126. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.cts +0 -6
  127. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.cts.map +0 -1
  128. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.mts +0 -6
  129. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.mts.map +0 -1
  130. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.mjs +0 -2
  131. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.mjs.map +0 -1
  132. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.cts +0 -11
  133. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.cts.map +0 -1
  134. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.mts +0 -11
  135. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.mts.map +0 -1
  136. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.mjs +0 -2
  137. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.mjs.map +0 -1
  138. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.cts +0 -18
  139. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.cts.map +0 -1
  140. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.mts +0 -18
  141. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.mts.map +0 -1
  142. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.mjs +0 -2
  143. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.mjs.map +0 -1
  144. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.cts +0 -9
  145. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.cts.map +0 -1
  146. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.mts +0 -9
  147. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.mts.map +0 -1
  148. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.mjs +0 -2
  149. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.mjs.map +0 -1
  150. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.cts +0 -19
  151. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.cts.map +0 -1
  152. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.mts +0 -19
  153. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.mts.map +0 -1
  154. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.mjs +0 -2
  155. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.mjs.map +0 -1
  156. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/common.mjs +0 -2
  157. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/common.mjs.map +0 -1
  158. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.cts +0 -7
  159. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.cts.map +0 -1
  160. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.mts +0 -7
  161. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.mts.map +0 -1
  162. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.mjs +0 -7
  163. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.mjs.map +0 -1
  164. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.cts +0 -13
  165. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.cts.map +0 -1
  166. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.mts +0 -13
  167. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.mts.map +0 -1
  168. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.mjs +0 -2
  169. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.mjs.map +0 -1
  170. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.cts +0 -7
  171. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.cts.map +0 -1
  172. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.mts +0 -7
  173. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.mts.map +0 -1
  174. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.mjs +0 -6
  175. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.mjs.map +0 -1
  176. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.cts +0 -13
  177. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.cts.map +0 -1
  178. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.mts +0 -13
  179. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.mts.map +0 -1
  180. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.mjs +0 -2
  181. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.mjs.map +0 -1
  182. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.cts +0 -7
  183. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.cts.map +0 -1
  184. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.mts +0 -7
  185. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.mts.map +0 -1
  186. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.mjs +0 -2
  187. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.mjs.map +0 -1
  188. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.cts +0 -7
  189. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.cts.map +0 -1
  190. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.mts +0 -7
  191. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.mts.map +0 -1
  192. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.mjs +0 -2
  193. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.mjs.map +0 -1
  194. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xmlText.mjs +0 -2
  195. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xmlText.mjs.map +0 -1
  196. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.cts +0 -6
  197. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.cts.map +0 -1
  198. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.mts +0 -6
  199. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.mts.map +0 -1
  200. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.mjs +0 -2
  201. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.mjs.map +0 -1
  202. package/dist/packages/minor/doompi-author/src/commands/doomAuthorCommand.mjs +0 -2
  203. package/dist/packages/minor/doompi-author/src/commands/doomAuthorCommand.mjs.map +0 -1
  204. package/dist/packages/minor/doompi-author/src/container/index.d.cts +0 -5
  205. package/dist/packages/minor/doompi-author/src/container/index.d.cts.map +0 -1
  206. package/dist/packages/minor/doompi-author/src/container/index.d.mts +0 -5
  207. package/dist/packages/minor/doompi-author/src/container/index.d.mts.map +0 -1
  208. package/dist/packages/minor/doompi-author/src/container/index.mjs +0 -2
  209. package/dist/packages/minor/doompi-author/src/container/index.mjs.map +0 -1
  210. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.cts +0 -16
  211. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.cts.map +0 -1
  212. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.mts +0 -16
  213. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.mts.map +0 -1
  214. package/dist/packages/minor/doompi-author/src/schemas/authorTools.mjs +0 -2
  215. package/dist/packages/minor/doompi-author/src/schemas/authorTools.mjs.map +0 -1
  216. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.cts +0 -31
  217. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.cts.map +0 -1
  218. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.mts +0 -31
  219. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.mts.map +0 -1
  220. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.mjs +0 -2
  221. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.mjs.map +0 -1
  222. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.cts +0 -10
  223. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.cts.map +0 -1
  224. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.mts +0 -10
  225. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.mts.map +0 -1
  226. package/dist/packages/minor/doompi-author/src/services/authorMode.d.cts +0 -19
  227. package/dist/packages/minor/doompi-author/src/services/authorMode.d.cts.map +0 -1
  228. package/dist/packages/minor/doompi-author/src/services/authorMode.d.mts +0 -19
  229. package/dist/packages/minor/doompi-author/src/services/authorMode.d.mts.map +0 -1
  230. package/dist/packages/minor/doompi-author/src/services/authorMode.mjs +0 -3
  231. package/dist/packages/minor/doompi-author/src/services/authorMode.mjs.map +0 -1
  232. package/dist/packages/minor/doompi-author/src/services/extensionService.d.cts +0 -7
  233. package/dist/packages/minor/doompi-author/src/services/extensionService.d.cts.map +0 -1
  234. package/dist/packages/minor/doompi-author/src/services/extensionService.d.mts +0 -7
  235. package/dist/packages/minor/doompi-author/src/services/extensionService.d.mts.map +0 -1
  236. package/dist/packages/minor/doompi-author/src/services/extensionService.mjs +0 -2
  237. package/dist/packages/minor/doompi-author/src/services/extensionService.mjs.map +0 -1
  238. package/dist/packages/minor/doompi-author/src/types/author.d.cts +0 -39
  239. package/dist/packages/minor/doompi-author/src/types/author.d.cts.map +0 -1
  240. package/dist/packages/minor/doompi-author/src/types/author.d.mts +0 -39
  241. package/dist/packages/minor/doompi-author/src/types/author.d.mts.map +0 -1
  242. package/dist/packages/minor/doompi-author/src/types/author.mjs +0 -2
  243. package/dist/packages/minor/doompi-author/src/types/author.mjs.map +0 -1
  244. package/dist/packages/minor/doompi-author/src/types/authorApi.d.cts +0 -23
  245. package/dist/packages/minor/doompi-author/src/types/authorApi.d.cts.map +0 -1
  246. package/dist/packages/minor/doompi-author/src/types/authorApi.d.mts +0 -23
  247. package/dist/packages/minor/doompi-author/src/types/authorApi.d.mts.map +0 -1
  248. package/dist/packages/minor/doompi-author/src/types/authorApi.mjs +0 -2
  249. package/dist/packages/minor/doompi-author/src/types/authorApi.mjs.map +0 -1
  250. package/dist/packages/minor/doompi-author/src/types/extension.d.cts +0 -16
  251. package/dist/packages/minor/doompi-author/src/types/extension.d.cts.map +0 -1
  252. package/dist/packages/minor/doompi-author/src/types/extension.d.mts +0 -16
  253. package/dist/packages/minor/doompi-author/src/types/extension.d.mts.map +0 -1
  254. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.cts +0 -60
  255. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.cts.map +0 -1
  256. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.mts +0 -60
  257. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.mts.map +0 -1
  258. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.cts +0 -67
  259. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.cts.map +0 -1
  260. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.mts +0 -67
  261. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.mts.map +0 -1
  262. package/dist/packages/minor/doompi-author/src/types/webAuthor.mjs +0 -2
  263. package/dist/packages/minor/doompi-author/src/types/webAuthor.mjs.map +0 -1
  264. package/dist/schemas/authorTools.cjs +0 -2
  265. package/dist/schemas/authorTools.cjs.map +0 -1
  266. package/dist/services/authorBridgeState.cjs +0 -2
  267. package/dist/services/authorBridgeState.cjs.map +0 -1
  268. package/dist/services/authorMode.cjs +0 -3
  269. package/dist/services/authorMode.cjs.map +0 -1
  270. package/dist/services/extensionService.cjs +0 -2
  271. package/dist/services/extensionService.cjs.map +0 -1
  272. package/dist/sessionApi.cjs +0 -1
  273. package/dist/sessionApi.d.cts +0 -7
  274. package/dist/sessionApi.d.mts +0 -7
  275. package/dist/sessionApi.mjs +0 -1
  276. package/dist/types/author.cjs +0 -2
  277. package/dist/types/author.cjs.map +0 -1
  278. package/dist/types/authorApi.cjs +0 -2
  279. package/dist/types/authorApi.cjs.map +0 -1
  280. package/dist/types/webAuthor.cjs +0 -2
  281. package/dist/types/webAuthor.cjs.map +0 -1
  282. package/dist/webHub.cjs +0 -1
  283. package/dist/webHub.d.cts +0 -2
  284. package/dist/webHub.d.mts +0 -2
  285. package/dist/webHub.mjs +0 -1
  286. package/src/exports/webClient.ts +0 -76
  287. package/src/web/api/authorBroker.ts +0 -14
  288. package/src/web/api/authorBrowserBridge.ts +0 -225
  289. package/src/web/api/authorFiles.ts +0 -219
  290. package/src/web/api/authorMedia.ts +0 -19
  291. package/src/web/api/authorRuntime.ts +0 -164
  292. package/src/web/components/AuthorDocumentPanel.tsx +0 -232
  293. package/src/web/components/AuthorGridOverlay.tsx +0 -81
  294. package/src/web/components/AuthorMediaPreview.tsx +0 -41
  295. package/src/web/components/AuthorMediaView.tsx +0 -356
  296. package/src/web/components/AuthorPanel.tsx +0 -105
  297. package/src/web/components/AuthorRegionDrafts.tsx +0 -102
  298. package/src/web/components/AuthorRequestLog.tsx +0 -179
  299. package/src/web/components/AuthorStructuredView.tsx +0 -121
  300. package/src/web/components/AuthorTextView.tsx +0 -97
  301. package/src/web/components/AuthorToolPalette.tsx +0 -103
  302. package/src/web/components/AuthorVideoControls.tsx +0 -111
  303. package/src/web/components/DescribeAuthorToolsToolCard.tsx +0 -50
  304. package/src/web/components/OpenAuthoringFileToolCard.tsx +0 -66
  305. package/src/web/components/UseAuthorToolsToolCard.tsx +0 -50
  306. package/src/web/index.ts +0 -68
  307. package/src/web/lib/authorGrid.ts +0 -124
  308. package/src/web/lib/authorRegions.ts +0 -30
  309. package/src/web/lib/authorViewportTypes.ts +0 -202
  310. package/src/web/lib/describeAuthorToolsToolRender.ts +0 -20
  311. package/src/web/lib/useAuthorToolsToolRender.ts +0 -20
  312. package/src/web/stores/authorCapture.ts +0 -322
  313. package/src/web/stores/authorGridTools.ts +0 -316
  314. package/src/web/stores/authorProfiles.ts +0 -130
  315. package/src/web/stores/authorRequestLifecycle.ts +0 -82
  316. package/src/web/stores/authorStore.ts +0 -60
  317. package/src/web/stores/authorWorkspaceStore.ts +0 -525
  318. package/src/web/tsconfig.json +0 -22
@@ -1,525 +0,0 @@
1
- import { defineGlobalStore } from '@agimon-ai/doompi-web-contracts';
2
- import type {
3
- AuthorAnnotation,
4
- AuthorCrop,
5
- AuthorDocumentInput,
6
- AuthorDraftRevision,
7
- AuthorFocusedDocument,
8
- AuthorRegionCandidate,
9
- AuthorRegionDraft,
10
- AuthorRequestRecord,
11
- AuthorRequestStatus,
12
- AuthorToolMode,
13
- } from '../lib/authorViewportTypes.ts';
14
-
15
- export const AUTHOR_REGION_LIMIT = 16;
16
- export const AUTHOR_HISTORY_RECORD_LIMIT = 100;
17
- export const AUTHOR_HISTORY_BYTE_LIMIT = 512 * 1024;
18
- const TERMINAL_REQUEST_STATUSES: ReadonlySet<AuthorRequestStatus> = new Set(['COMPLETE', 'FAILED', 'CANCELLED']);
19
-
20
- export interface AuthorWorkspaceDocument extends AuthorDocumentInput {
21
- path: string;
22
- annotations: readonly AuthorAnnotation[];
23
- revisions: readonly AuthorDraftRevision[];
24
- crop?: AuthorCrop;
25
- saveRequest: number;
26
- version: number;
27
- savedVersion: number;
28
- savingVersion?: number;
29
- }
30
-
31
- export interface AuthorSessionWorkspace {
32
- generation: number;
33
- focusedDocument?: AuthorFocusedDocument;
34
- activeTool: AuthorToolMode;
35
- candidate?: AuthorRegionCandidate;
36
- videoSeekRequest?: { path: string; generation: number; timeSeconds: number; sequence: number };
37
- regions: readonly AuthorRegionDraft[];
38
- requests: readonly AuthorRequestRecord[];
39
- }
40
-
41
- export interface AuthorWorkspaceState {
42
- documents: Readonly<Record<string, AuthorWorkspaceDocument>>;
43
- sessions: Readonly<Record<string, AuthorSessionWorkspace>>;
44
- }
45
-
46
- const EMPTY_SESSION: AuthorSessionWorkspace = { generation: 0, activeTool: 'select', regions: [], requests: [] };
47
-
48
- export function normalizeAuthorPath(path: string): string {
49
- const parts: string[] = [];
50
- for (const part of path.trim().replaceAll('\\', '/').split('/')) {
51
- if (part === '' || part === '.') continue;
52
- if (part === '..') parts.pop();
53
- else parts.push(part);
54
- }
55
- return parts.join('/');
56
- }
57
-
58
- export function authorDocumentKey(sessionId: string, path: string): string {
59
- return `${sessionId}\n${normalizeAuthorPath(path)}`;
60
- }
61
-
62
- export const authorWorkspace = defineGlobalStore<AuthorWorkspaceState>({ documents: {}, sessions: {} });
63
-
64
- export function authorDocument(sessionId: string | null, path: string): AuthorWorkspaceDocument | undefined {
65
- if (sessionId === null) return undefined;
66
- return authorWorkspace.store.state.documents[authorDocumentKey(sessionId, path)];
67
- }
68
-
69
- export function authorSessionWorkspace(sessionId: string | null): AuthorSessionWorkspace {
70
- if (sessionId === null) return EMPTY_SESSION;
71
- return authorWorkspace.store.state.sessions[sessionId] ?? EMPTY_SESSION;
72
- }
73
-
74
- export function putAuthorDocument(sessionId: string, input: AuthorDocumentInput): AuthorWorkspaceDocument {
75
- const path = normalizeAuthorPath(input.path);
76
- if (path === '') throw new Error('Author document path must not be empty');
77
- const key = authorDocumentKey(sessionId, path);
78
- const staleThumbnails: string[] = [];
79
- let result!: AuthorWorkspaceDocument;
80
- authorWorkspace.update((state) => {
81
- const previous = state.documents[key];
82
- const sourceChanged =
83
- previous?.sourceSha256 !== undefined &&
84
- input.sourceSha256 !== undefined &&
85
- previous.sourceSha256 !== input.sourceSha256;
86
- const baselineVersion = sourceChanged ? previous.version + 1 : (previous?.version ?? 0);
87
- result = {
88
- ...input,
89
- path,
90
- annotations: sourceChanged ? [] : (previous?.annotations ?? []),
91
- revisions: sourceChanged ? [] : (previous?.revisions ?? []),
92
- saveRequest: previous?.saveRequest ?? 0,
93
- version: baselineVersion,
94
- savedVersion: sourceChanged ? baselineVersion : (previous?.savedVersion ?? 0),
95
- ...(sourceChanged || previous?.crop === undefined ? {} : { crop: previous.crop }),
96
- };
97
- const session = state.sessions[sessionId];
98
- let sessions = state.sessions;
99
- if (sourceChanged && session?.focusedDocument?.path === path) {
100
- staleThumbnails.push(
101
- ...(session.candidate?.thumbnailUrl === undefined ? [] : [session.candidate.thumbnailUrl]),
102
- ...session.regions.flatMap((region) => (region.thumbnailUrl === undefined ? [] : [region.thumbnailUrl])),
103
- );
104
- const now = Date.now();
105
- const generation = session.generation + 1;
106
- sessions = {
107
- ...sessions,
108
- [sessionId]: {
109
- ...session,
110
- generation,
111
- focusedDocument: {
112
- path,
113
- generation,
114
- revision: baselineVersion,
115
- sourceSha256: input.sourceSha256,
116
- focusedAt: now,
117
- },
118
- regions: [],
119
- candidate: undefined,
120
- requests: session.requests.map((request) =>
121
- request.documentPath === path &&
122
- (request.status === 'REQUESTED' || request.status === 'CHANGING' || request.status === 'CHANGED')
123
- ? {
124
- ...request,
125
- status: 'FAILED',
126
- currentOperation: undefined,
127
- error: 'The document source changed before the request completed.',
128
- updatedAt: now,
129
- }
130
- : request,
131
- ),
132
- },
133
- };
134
- }
135
- return { documents: { ...state.documents, [key]: result }, sessions };
136
- });
137
- staleThumbnails.forEach(revokeThumbnail);
138
- return result;
139
- }
140
-
141
- /** Claims focus and returns a generation token that makes cleanup race-safe. */
142
- export function focusAuthorDocument(sessionId: string, path: string, revision: number, sourceSha256?: string): number {
143
- const normalized = normalizeAuthorPath(path);
144
- const staleThumbnails: string[] = [];
145
- let generation = 0;
146
- authorWorkspace.update((state) => {
147
- const session = state.sessions[sessionId] ?? EMPTY_SESSION;
148
- generation = session.generation + 1;
149
- const keepRegions = session.focusedDocument?.path === normalized;
150
- if (!keepRegions) {
151
- staleThumbnails.push(
152
- ...(session.candidate?.thumbnailUrl === undefined ? [] : [session.candidate.thumbnailUrl]),
153
- ...session.regions.flatMap((region) => (region.thumbnailUrl === undefined ? [] : [region.thumbnailUrl])),
154
- );
155
- }
156
- return {
157
- ...state,
158
- sessions: {
159
- ...state.sessions,
160
- [sessionId]: {
161
- ...session,
162
- generation,
163
- focusedDocument: {
164
- path: normalized,
165
- generation,
166
- revision,
167
- sourceSha256,
168
- focusedAt: Date.now(),
169
- },
170
- regions: keepRegions ? session.regions : [],
171
- candidate: keepRegions ? session.candidate : undefined,
172
- },
173
- },
174
- };
175
- });
176
- staleThumbnails.forEach(revokeThumbnail);
177
- return generation;
178
- }
179
-
180
- export function syncAuthorDocumentFocus(
181
- sessionId: string,
182
- generation: number,
183
- revision: number,
184
- sourceSha256?: string,
185
- ): void {
186
- updateSession(sessionId, (session) => {
187
- const focused = session.focusedDocument;
188
- if (focused === undefined || focused.generation !== generation) return session;
189
- if (focused.revision === revision && focused.sourceSha256 === sourceSha256) return session;
190
- return { ...session, focusedDocument: { ...focused, revision, sourceSha256 } };
191
- });
192
- }
193
-
194
- export function releaseAuthorDocumentFocus(sessionId: string, generation: number): void {
195
- const staleThumbnails: string[] = [];
196
- updateSession(sessionId, (session) => {
197
- if (session.focusedDocument?.generation !== generation) return session;
198
- staleThumbnails.push(
199
- ...(session.candidate?.thumbnailUrl === undefined ? [] : [session.candidate.thumbnailUrl]),
200
- ...session.regions.flatMap((region) => (region.thumbnailUrl === undefined ? [] : [region.thumbnailUrl])),
201
- );
202
- return { ...session, focusedDocument: undefined, candidate: undefined, regions: [] };
203
- });
204
- staleThumbnails.forEach(revokeThumbnail);
205
- }
206
-
207
- export function seekAuthorVideo(sessionId: string, timeSeconds: number): boolean {
208
- const workspace = authorSessionWorkspace(sessionId);
209
- const focused = workspace.focusedDocument;
210
- if (
211
- !focused ||
212
- workspace.candidate ||
213
- !Number.isFinite(timeSeconds) ||
214
- timeSeconds < 0 ||
215
- authorDocument(sessionId, focused.path)?.kind !== 'video'
216
- )
217
- return false;
218
- updateSession(sessionId, (session) => ({
219
- ...session,
220
- activeTool: 'select',
221
- videoSeekRequest: {
222
- path: focused.path,
223
- generation: focused.generation,
224
- timeSeconds,
225
- sequence: (session.videoSeekRequest?.sequence ?? 0) + 1,
226
- },
227
- }));
228
- return true;
229
- }
230
-
231
- export function setAuthorToolMode(sessionId: string, activeTool: AuthorToolMode): void {
232
- updateSession(sessionId, (session) => (session.activeTool === activeTool ? session : { ...session, activeTool }));
233
- }
234
-
235
- export function setAuthorRegionCandidate(sessionId: string, candidate: AuthorRegionCandidate | undefined): void {
236
- let staleThumbnail: string | undefined;
237
- updateSession(sessionId, (session) => {
238
- const focused = session.focusedDocument;
239
- if (candidate !== undefined) {
240
- if (focused === undefined || focused.path !== normalizeAuthorPath(candidate.documentPath)) {
241
- throw new Error('The Author selection does not belong to the focused document.');
242
- }
243
- if (focused.revision !== candidate.revision || focused.sourceSha256 !== candidate.sourceSha256) {
244
- throw new Error('The Author selection is stale for the focused document.');
245
- }
246
- }
247
- staleThumbnail = session.candidate?.thumbnailUrl;
248
- return { ...session, candidate: candidate === undefined ? undefined : structuredClone(candidate) };
249
- });
250
- if (staleThumbnail !== undefined && staleThumbnail !== candidate?.thumbnailUrl) revokeThumbnail(staleThumbnail);
251
- }
252
-
253
- export function commitAuthorRegion(sessionId: string, comment: string): string {
254
- const id = crypto.randomUUID();
255
- const session = authorSessionWorkspace(sessionId);
256
- if (session.candidate === undefined) throw new Error('Select a document region before adding a comment.');
257
- addAuthorRegion(sessionId, { ...session.candidate, id, comment });
258
- updateSession(sessionId, (current) => ({ ...current, candidate: undefined }));
259
- return id;
260
- }
261
-
262
- export function addAuthorRegion(sessionId: string, region: AuthorRegionDraft): void {
263
- if (region.comment.trim() === '') throw new Error('Every Author region requires a comment.');
264
- updateSession(sessionId, (session) => {
265
- const focused = session.focusedDocument;
266
- if (focused === undefined || focused.path !== normalizeAuthorPath(region.documentPath)) {
267
- throw new Error('The Author region does not belong to the focused document.');
268
- }
269
- if (focused.revision !== region.revision || focused.sourceSha256 !== region.sourceSha256) {
270
- throw new Error('The Author region is stale for the focused document.');
271
- }
272
- if (session.regions.length >= AUTHOR_REGION_LIMIT)
273
- throw new Error(`Author requests support at most ${AUTHOR_REGION_LIMIT} regions.`);
274
- if (session.regions.some((candidate) => candidate.id === region.id))
275
- throw new Error(`Author region '${region.id}' already exists.`);
276
- return { ...session, regions: [...session.regions, copyRegion(region)] };
277
- });
278
- }
279
-
280
- export function removeAuthorRegion(sessionId: string, regionId: string): void {
281
- let thumbnail: string | undefined;
282
- updateSession(sessionId, (session) => {
283
- const region = session.regions.find((candidate) => candidate.id === regionId);
284
- thumbnail = region?.thumbnailUrl;
285
- const regions = session.regions.filter((candidate) => candidate.id !== regionId);
286
- return regions.length === session.regions.length ? session : { ...session, regions };
287
- });
288
- if (thumbnail !== undefined) revokeThumbnail(thumbnail);
289
- }
290
-
291
- export function updateAuthorRegionComment(sessionId: string, regionId: string, comment: string): void {
292
- if (comment.trim() === '') throw new Error('Every Author region requires a comment.');
293
- updateSession(sessionId, (session) => ({
294
- ...session,
295
- regions: session.regions.map((region) => (region.id === regionId ? { ...region, comment } : region)),
296
- }));
297
- }
298
-
299
- export function putAuthorRequest(sessionId: string, record: AuthorRequestRecord): void {
300
- if (record.requestText.trim() === '') throw new Error('An Author request requires verbatim request text.');
301
- if (record.regions.length === 0 || record.regions.some((region) => region.comment.trim() === '')) {
302
- throw new Error('An Author request requires at least one commented region.');
303
- }
304
- updateSession(sessionId, (session) => {
305
- if (session.requests.some((request) => request.id === record.id))
306
- throw new Error(`Author request '${record.id}' already exists.`);
307
- return { ...session, requests: boundHistory([...session.requests, copyRequest(record)]) };
308
- });
309
- }
310
-
311
- export function updateAuthorRequest(
312
- sessionId: string,
313
- requestId: string,
314
- update: (record: AuthorRequestRecord) => AuthorRequestRecord,
315
- ): void {
316
- updateSession(sessionId, (session) => ({
317
- ...session,
318
- requests: boundHistory(
319
- session.requests.map((request) => (request.id === requestId ? copyRequest(update(request)) : request)),
320
- ),
321
- }));
322
- }
323
-
324
- export function reviseAuthorDocument(sessionId: string, path: string, content: string): void {
325
- updateDocument(sessionId, path, (document) => {
326
- if (document.content === content) return document;
327
- const version = document.version + 1;
328
- return {
329
- ...document,
330
- content,
331
- version,
332
- revisions: [...document.revisions, { revision: version, content }],
333
- };
334
- });
335
- }
336
-
337
- export function reviseAuthorFragment(sessionId: string, path: string, fragmentId: string, text: string): void {
338
- updateDocument(sessionId, path, (document) => {
339
- const fragment = document.fragments?.find((candidate) => candidate.id === fragmentId);
340
- if (fragment === undefined || fragment.text === text) return document;
341
- const version = document.version + 1;
342
- return {
343
- ...document,
344
- fragments: document.fragments?.map((fragment) => (fragment.id === fragmentId ? { ...fragment, text } : fragment)),
345
- version,
346
- revisions: [...document.revisions, { revision: version, content: text }],
347
- };
348
- });
349
- }
350
-
351
- export function addAuthorAnnotation(sessionId: string, path: string, annotation: AuthorAnnotation): void {
352
- updateDocument(sessionId, path, (document) => ({ ...document, annotations: [...document.annotations, annotation] }));
353
- }
354
-
355
- export function setAuthorCrop(sessionId: string, path: string, crop: AuthorCrop | undefined): void {
356
- updateDocument(sessionId, path, (document) => {
357
- const version = document.version + 1;
358
- return {
359
- ...document,
360
- ...(crop === undefined ? { crop: undefined } : { crop }),
361
- version,
362
- revisions: [...document.revisions, { revision: version, content: JSON.stringify(crop ?? null) }],
363
- };
364
- });
365
- }
366
-
367
- export function requestAuthorSave(sessionId: string, path: string): void {
368
- updateDocument(sessionId, path, (document) => ({
369
- ...document,
370
- saveRequest: document.saveRequest + 1,
371
- savingVersion: document.version,
372
- }));
373
- }
374
-
375
- export function failAuthorSave(sessionId: string, path: string, savingVersion: number): void {
376
- updateDocument(sessionId, path, (document) =>
377
- document.savingVersion === savingVersion ? { ...document, savingVersion: undefined } : document,
378
- );
379
- }
380
-
381
- export function completeAuthorSave(
382
- sessionId: string,
383
- path: string,
384
- sourceSha256: string,
385
- savedVersion: number,
386
- savedFragments: AuthorDocumentInput['fragments'],
387
- ): void {
388
- updateDocument(sessionId, path, (document) => {
389
- if (savedVersion < document.savedVersion) return document;
390
- return {
391
- ...document,
392
- sourceSha256,
393
- savedVersion,
394
- savingVersion: document.savingVersion === savedVersion ? undefined : document.savingVersion,
395
- originalFragments: savedFragments?.map((fragment) => ({ ...fragment })),
396
- ...(document.version === savedVersion ? { crop: undefined } : {}),
397
- revisions: document.revisions.filter((revision) => revision.revision > savedVersion),
398
- };
399
- });
400
- const now = Date.now();
401
- updateSession(sessionId, (session) => ({
402
- ...session,
403
- requests: boundHistory(
404
- session.requests.map((request) =>
405
- request.documentPath === normalizeAuthorPath(path) &&
406
- request.status === 'CHANGED' &&
407
- request.revision <= savedVersion
408
- ? { ...request, status: 'COMPLETE', currentOperation: undefined, updatedAt: now }
409
- : request,
410
- ),
411
- ),
412
- }));
413
- }
414
-
415
- export function dropAuthorSession(sessionId: string): void {
416
- const prefix = `${sessionId}\n`;
417
- const session = authorWorkspace.store.state.sessions[sessionId];
418
- if (session?.candidate?.thumbnailUrl !== undefined) revokeThumbnail(session.candidate.thumbnailUrl);
419
- session?.regions.forEach((region) => {
420
- if (region.thumbnailUrl !== undefined) revokeThumbnail(region.thumbnailUrl);
421
- });
422
- authorWorkspace.update((state) => {
423
- const sessions = { ...state.sessions };
424
- delete sessions[sessionId];
425
- return {
426
- documents: Object.fromEntries(Object.entries(state.documents).filter(([key]) => !key.startsWith(prefix))),
427
- sessions,
428
- };
429
- });
430
- }
431
-
432
- function updateDocument(
433
- sessionId: string,
434
- path: string,
435
- update: (document: AuthorWorkspaceDocument) => AuthorWorkspaceDocument,
436
- ): void {
437
- const key = authorDocumentKey(sessionId, path);
438
- const staleThumbnails: string[] = [];
439
- authorWorkspace.update((state) => {
440
- const document = state.documents[key];
441
- if (document === undefined) return state;
442
- const next = update(document);
443
- const session = state.sessions[sessionId];
444
- const focused = session?.focusedDocument;
445
- const identityChanged =
446
- focused?.path === document.path &&
447
- (focused.revision !== next.version || focused.sourceSha256 !== next.sourceSha256);
448
- if (identityChanged) {
449
- staleThumbnails.push(
450
- ...(session.candidate?.thumbnailUrl === undefined ? [] : [session.candidate.thumbnailUrl]),
451
- ...session.regions.flatMap((region) => (region.thumbnailUrl === undefined ? [] : [region.thumbnailUrl])),
452
- );
453
- }
454
- const sessions = identityChanged
455
- ? {
456
- ...state.sessions,
457
- [sessionId]: {
458
- ...session,
459
- focusedDocument: { ...focused, revision: next.version, sourceSha256: next.sourceSha256 },
460
- candidate: undefined,
461
- regions: [],
462
- },
463
- }
464
- : state.sessions;
465
- return { documents: { ...state.documents, [key]: next }, sessions };
466
- });
467
- staleThumbnails.forEach(revokeThumbnail);
468
- }
469
-
470
- function updateSession(sessionId: string, update: (session: AuthorSessionWorkspace) => AuthorSessionWorkspace): void {
471
- authorWorkspace.update((state) => {
472
- const session = state.sessions[sessionId] ?? EMPTY_SESSION;
473
- const next = update(session);
474
- return next === session ? state : { ...state, sessions: { ...state.sessions, [sessionId]: next } };
475
- });
476
- }
477
-
478
- function copyRegion(region: AuthorRegionDraft): AuthorRegionDraft {
479
- const anchor = 'rect' in region.anchor ? { ...region.anchor, rect: { ...region.anchor.rect } } : { ...region.anchor };
480
- return {
481
- ...region,
482
- anchor,
483
- viewport: { ...region.viewport },
484
- voiceGrid: region.voiceGrid && { ...region.voiceGrid },
485
- };
486
- }
487
-
488
- function boundedHistoryText(value: string | undefined): string | undefined {
489
- if (value === undefined) return undefined;
490
- const encoder = new TextEncoder();
491
- if (encoder.encode(value).byteLength <= 16 * 1024) return value;
492
- let end = value.length;
493
- while (end > 0 && encoder.encode(value.slice(0, end)).byteLength > 16 * 1024) end -= 256;
494
- return value.slice(0, end);
495
- }
496
-
497
- function copyRequest(record: AuthorRequestRecord): AuthorRequestRecord {
498
- return {
499
- ...record,
500
- before: boundedHistoryText(record.before),
501
- after: boundedHistoryText(record.after),
502
- regions: record.regions.map(copyRegion),
503
- pendingRegions: record.pendingRegions?.map(copyRegion),
504
- };
505
- }
506
-
507
- function boundHistory(records: readonly AuthorRequestRecord[]): readonly AuthorRequestRecord[] {
508
- const next = [...records];
509
- const bytes = (): number => new TextEncoder().encode(JSON.stringify(next)).byteLength;
510
- while (next.length > AUTHOR_HISTORY_RECORD_LIMIT || bytes() > AUTHOR_HISTORY_BYTE_LIMIT) {
511
- const terminal = next.findIndex((record) => TERMINAL_REQUEST_STATUSES.has(record.status));
512
- if (terminal < 0) throw new Error('Author request history is full while active requests are still running.');
513
- next.splice(terminal, 1);
514
- }
515
- return next;
516
- }
517
-
518
- function revokeThumbnail(url: string): void {
519
- if (!url.startsWith('blob:')) return;
520
- try {
521
- URL.revokeObjectURL(url);
522
- } catch {
523
- // Thumbnail cleanup must not make session teardown fail.
524
- }
525
- }
@@ -1,22 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "lib": ["ES2023", "DOM", "DOM.Iterable"],
5
- "module": "ESNext",
6
- "moduleResolution": "Bundler",
7
- "jsx": "react-jsx",
8
- "strict": true,
9
- "noImplicitAny": true,
10
- "noUnusedLocals": true,
11
- "noUnusedParameters": true,
12
- "noImplicitReturns": true,
13
- "noFallthroughCasesInSwitch": true,
14
- "noEmit": true,
15
- "resolveJsonModule": true,
16
- "esModuleInterop": true,
17
- "skipLibCheck": true,
18
- "allowImportingTsExtensions": true,
19
- "forceConsistentCasingInFileNames": true
20
- },
21
- "include": [".", "../types", "../exports/webClient.ts", "../../tests/web"]
22
- }