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

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 (282) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  4. package/dist/adapters/authorApi.cjs +2 -0
  5. package/dist/adapters/authorApi.cjs.map +1 -0
  6. package/dist/adapters/authorBridgeApi.cjs +2 -0
  7. package/dist/adapters/authorBridgeApi.cjs.map +1 -0
  8. package/dist/adapters/authorDocumentApi.cjs +2 -0
  9. package/dist/adapters/authorDocumentApi.cjs.map +1 -0
  10. package/dist/adapters/pi/authorBridgeClient.cjs +2 -0
  11. package/dist/adapters/pi/authorBridgeClient.cjs.map +1 -0
  12. package/dist/adapters/pi/authorTools.cjs +2 -0
  13. package/dist/adapters/pi/authorTools.cjs.map +1 -0
  14. package/dist/adapters/pi/extension.cjs +2 -0
  15. package/dist/adapters/pi/extension.cjs.map +1 -0
  16. package/dist/adapters/structuredDocuments/common.cjs +2 -0
  17. package/dist/adapters/structuredDocuments/common.cjs.map +1 -0
  18. package/dist/adapters/structuredDocuments/csv.cjs +7 -0
  19. package/dist/adapters/structuredDocuments/csv.cjs.map +1 -0
  20. package/dist/adapters/structuredDocuments/index.cjs +2 -0
  21. package/dist/adapters/structuredDocuments/index.cjs.map +1 -0
  22. package/dist/adapters/structuredDocuments/markdownSlides.cjs +6 -0
  23. package/dist/adapters/structuredDocuments/markdownSlides.cjs.map +1 -0
  24. package/dist/adapters/structuredDocuments/ooxmlArchive.cjs +2 -0
  25. package/dist/adapters/structuredDocuments/ooxmlArchive.cjs.map +1 -0
  26. package/dist/adapters/structuredDocuments/pptx.cjs +2 -0
  27. package/dist/adapters/structuredDocuments/pptx.cjs.map +1 -0
  28. package/dist/adapters/structuredDocuments/xlsx.cjs +2 -0
  29. package/dist/adapters/structuredDocuments/xlsx.cjs.map +1 -0
  30. package/dist/adapters/structuredDocuments/xmlText.cjs +2 -0
  31. package/dist/adapters/structuredDocuments/xmlText.cjs.map +1 -0
  32. package/dist/adapters/webAuthorChannel.cjs +2 -0
  33. package/dist/adapters/webAuthorChannel.cjs.map +1 -0
  34. package/dist/commands/doomAuthorCommand.cjs +2 -0
  35. package/dist/commands/doomAuthorCommand.cjs.map +1 -0
  36. package/dist/container/index.cjs +2 -0
  37. package/dist/container/index.cjs.map +1 -0
  38. package/dist/extensions/pi.cjs +1 -0
  39. package/dist/extensions/pi.d.cts +2 -0
  40. package/dist/extensions/pi.d.mts +2 -0
  41. package/dist/extensions/pi.mjs +1 -0
  42. package/dist/index.cjs +1 -0
  43. package/dist/index.d.cts +21 -0
  44. package/dist/index.d.mts +21 -0
  45. package/dist/index.mjs +1 -0
  46. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.cts +6 -0
  47. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.cts.map +1 -0
  48. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.mts +6 -0
  49. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.mts.map +1 -0
  50. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.cts +7 -0
  51. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.cts.map +1 -0
  52. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.mts +7 -0
  53. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.mts.map +1 -0
  54. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.cts +12 -0
  55. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.cts.map +1 -0
  56. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.mts +12 -0
  57. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.mts.map +1 -0
  58. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.cts +12 -0
  59. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.cts.map +1 -0
  60. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.mts +12 -0
  61. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.mts.map +1 -0
  62. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.cts +9 -0
  63. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.cts.map +1 -0
  64. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.mts +9 -0
  65. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.mts.map +1 -0
  66. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.cts +4 -0
  67. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.cts.map +1 -0
  68. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.mts +4 -0
  69. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.mts.map +1 -0
  70. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.cts +9 -0
  71. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.cts.map +1 -0
  72. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.mts +9 -0
  73. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.mts.map +1 -0
  74. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.cts +8 -0
  75. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.cts.map +1 -0
  76. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.mts +8 -0
  77. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.mts.map +1 -0
  78. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.cts +15 -0
  79. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.cts.map +1 -0
  80. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.mts +15 -0
  81. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.mts.map +1 -0
  82. package/dist/packages/minor/doompi-author/src/adapters/authorApi.mjs +2 -0
  83. package/dist/packages/minor/doompi-author/src/adapters/authorApi.mjs.map +1 -0
  84. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.cts +6 -0
  85. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.cts.map +1 -0
  86. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.mts +6 -0
  87. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.mts.map +1 -0
  88. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.mjs +2 -0
  89. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.mjs.map +1 -0
  90. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.cts +11 -0
  91. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.cts.map +1 -0
  92. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.mts +11 -0
  93. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.mts.map +1 -0
  94. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.mjs +2 -0
  95. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.mjs.map +1 -0
  96. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.cts +18 -0
  97. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.cts.map +1 -0
  98. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.mts +18 -0
  99. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.mts.map +1 -0
  100. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.mjs +2 -0
  101. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.mjs.map +1 -0
  102. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.cts +9 -0
  103. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.cts.map +1 -0
  104. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.mts +9 -0
  105. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.mts.map +1 -0
  106. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.mjs +2 -0
  107. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.mjs.map +1 -0
  108. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.cts +19 -0
  109. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.cts.map +1 -0
  110. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.mts +19 -0
  111. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.mts.map +1 -0
  112. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.mjs +2 -0
  113. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.mjs.map +1 -0
  114. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/common.mjs +2 -0
  115. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/common.mjs.map +1 -0
  116. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.cts +7 -0
  117. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.cts.map +1 -0
  118. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.mts +7 -0
  119. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.mts.map +1 -0
  120. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.mjs +7 -0
  121. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.mjs.map +1 -0
  122. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.cts +13 -0
  123. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.cts.map +1 -0
  124. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.mts +13 -0
  125. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.mts.map +1 -0
  126. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.mjs +2 -0
  127. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.mjs.map +1 -0
  128. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.cts +7 -0
  129. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.cts.map +1 -0
  130. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.mts +7 -0
  131. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.mts.map +1 -0
  132. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.mjs +6 -0
  133. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.mjs.map +1 -0
  134. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.cts +13 -0
  135. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.cts.map +1 -0
  136. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.mts +13 -0
  137. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.mts.map +1 -0
  138. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.mjs +2 -0
  139. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.mjs.map +1 -0
  140. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.cts +7 -0
  141. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.cts.map +1 -0
  142. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.mts +7 -0
  143. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.mts.map +1 -0
  144. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.mjs +2 -0
  145. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.mjs.map +1 -0
  146. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.cts +7 -0
  147. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.cts.map +1 -0
  148. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.mts +7 -0
  149. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.mts.map +1 -0
  150. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.mjs +2 -0
  151. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.mjs.map +1 -0
  152. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xmlText.mjs +2 -0
  153. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xmlText.mjs.map +1 -0
  154. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.cts +6 -0
  155. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.cts.map +1 -0
  156. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.mts +6 -0
  157. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.mts.map +1 -0
  158. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.mjs +2 -0
  159. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.mjs.map +1 -0
  160. package/dist/packages/minor/doompi-author/src/commands/doomAuthorCommand.mjs +2 -0
  161. package/dist/packages/minor/doompi-author/src/commands/doomAuthorCommand.mjs.map +1 -0
  162. package/dist/packages/minor/doompi-author/src/container/index.d.cts +5 -0
  163. package/dist/packages/minor/doompi-author/src/container/index.d.cts.map +1 -0
  164. package/dist/packages/minor/doompi-author/src/container/index.d.mts +5 -0
  165. package/dist/packages/minor/doompi-author/src/container/index.d.mts.map +1 -0
  166. package/dist/packages/minor/doompi-author/src/container/index.mjs +2 -0
  167. package/dist/packages/minor/doompi-author/src/container/index.mjs.map +1 -0
  168. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.cts +16 -0
  169. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.cts.map +1 -0
  170. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.mts +16 -0
  171. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.mts.map +1 -0
  172. package/dist/packages/minor/doompi-author/src/schemas/authorTools.mjs +2 -0
  173. package/dist/packages/minor/doompi-author/src/schemas/authorTools.mjs.map +1 -0
  174. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.cts +31 -0
  175. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.cts.map +1 -0
  176. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.mts +31 -0
  177. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.mts.map +1 -0
  178. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.mjs +2 -0
  179. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.mjs.map +1 -0
  180. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.cts +10 -0
  181. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.cts.map +1 -0
  182. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.mts +10 -0
  183. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.mts.map +1 -0
  184. package/dist/packages/minor/doompi-author/src/services/authorMode.d.cts +19 -0
  185. package/dist/packages/minor/doompi-author/src/services/authorMode.d.cts.map +1 -0
  186. package/dist/packages/minor/doompi-author/src/services/authorMode.d.mts +19 -0
  187. package/dist/packages/minor/doompi-author/src/services/authorMode.d.mts.map +1 -0
  188. package/dist/packages/minor/doompi-author/src/services/authorMode.mjs +3 -0
  189. package/dist/packages/minor/doompi-author/src/services/authorMode.mjs.map +1 -0
  190. package/dist/packages/minor/doompi-author/src/services/extensionService.d.cts +7 -0
  191. package/dist/packages/minor/doompi-author/src/services/extensionService.d.cts.map +1 -0
  192. package/dist/packages/minor/doompi-author/src/services/extensionService.d.mts +7 -0
  193. package/dist/packages/minor/doompi-author/src/services/extensionService.d.mts.map +1 -0
  194. package/dist/packages/minor/doompi-author/src/services/extensionService.mjs +2 -0
  195. package/dist/packages/minor/doompi-author/src/services/extensionService.mjs.map +1 -0
  196. package/dist/packages/minor/doompi-author/src/types/author.d.cts +39 -0
  197. package/dist/packages/minor/doompi-author/src/types/author.d.cts.map +1 -0
  198. package/dist/packages/minor/doompi-author/src/types/author.d.mts +39 -0
  199. package/dist/packages/minor/doompi-author/src/types/author.d.mts.map +1 -0
  200. package/dist/packages/minor/doompi-author/src/types/author.mjs +2 -0
  201. package/dist/packages/minor/doompi-author/src/types/author.mjs.map +1 -0
  202. package/dist/packages/minor/doompi-author/src/types/authorApi.d.cts +23 -0
  203. package/dist/packages/minor/doompi-author/src/types/authorApi.d.cts.map +1 -0
  204. package/dist/packages/minor/doompi-author/src/types/authorApi.d.mts +23 -0
  205. package/dist/packages/minor/doompi-author/src/types/authorApi.d.mts.map +1 -0
  206. package/dist/packages/minor/doompi-author/src/types/authorApi.mjs +2 -0
  207. package/dist/packages/minor/doompi-author/src/types/authorApi.mjs.map +1 -0
  208. package/dist/packages/minor/doompi-author/src/types/extension.d.cts +16 -0
  209. package/dist/packages/minor/doompi-author/src/types/extension.d.cts.map +1 -0
  210. package/dist/packages/minor/doompi-author/src/types/extension.d.mts +16 -0
  211. package/dist/packages/minor/doompi-author/src/types/extension.d.mts.map +1 -0
  212. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.cts +60 -0
  213. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.cts.map +1 -0
  214. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.mts +60 -0
  215. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.mts.map +1 -0
  216. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.cts +67 -0
  217. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.cts.map +1 -0
  218. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.mts +67 -0
  219. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.mts.map +1 -0
  220. package/dist/packages/minor/doompi-author/src/types/webAuthor.mjs +2 -0
  221. package/dist/packages/minor/doompi-author/src/types/webAuthor.mjs.map +1 -0
  222. package/dist/schemas/authorTools.cjs +2 -0
  223. package/dist/schemas/authorTools.cjs.map +1 -0
  224. package/dist/services/authorBridgeState.cjs +2 -0
  225. package/dist/services/authorBridgeState.cjs.map +1 -0
  226. package/dist/services/authorMode.cjs +3 -0
  227. package/dist/services/authorMode.cjs.map +1 -0
  228. package/dist/services/extensionService.cjs +2 -0
  229. package/dist/services/extensionService.cjs.map +1 -0
  230. package/dist/sessionApi.cjs +1 -0
  231. package/dist/sessionApi.d.cts +7 -0
  232. package/dist/sessionApi.d.mts +7 -0
  233. package/dist/sessionApi.mjs +1 -0
  234. package/dist/types/author.cjs +2 -0
  235. package/dist/types/author.cjs.map +1 -0
  236. package/dist/types/authorApi.cjs +2 -0
  237. package/dist/types/authorApi.cjs.map +1 -0
  238. package/dist/types/webAuthor.cjs +2 -0
  239. package/dist/types/webAuthor.cjs.map +1 -0
  240. package/dist/webHub.cjs +1 -0
  241. package/dist/webHub.d.cts +2 -0
  242. package/dist/webHub.d.mts +2 -0
  243. package/dist/webHub.mjs +1 -0
  244. package/llms.txt +11 -0
  245. package/package.json +140 -0
  246. package/src/exports/webClient.ts +76 -0
  247. package/src/prompts/doompi-use-author/SKILL.md +17 -0
  248. package/src/types/author.ts +45 -0
  249. package/src/types/structuredDocuments.ts +63 -0
  250. package/src/types/webAuthor.ts +85 -0
  251. package/src/web/api/authorBroker.ts +14 -0
  252. package/src/web/api/authorBrowserBridge.ts +225 -0
  253. package/src/web/api/authorFiles.ts +219 -0
  254. package/src/web/api/authorMedia.ts +19 -0
  255. package/src/web/api/authorRuntime.ts +164 -0
  256. package/src/web/components/AuthorDocumentPanel.tsx +232 -0
  257. package/src/web/components/AuthorGridOverlay.tsx +81 -0
  258. package/src/web/components/AuthorMediaPreview.tsx +41 -0
  259. package/src/web/components/AuthorMediaView.tsx +356 -0
  260. package/src/web/components/AuthorPanel.tsx +105 -0
  261. package/src/web/components/AuthorRegionDrafts.tsx +102 -0
  262. package/src/web/components/AuthorRequestLog.tsx +179 -0
  263. package/src/web/components/AuthorStructuredView.tsx +121 -0
  264. package/src/web/components/AuthorTextView.tsx +97 -0
  265. package/src/web/components/AuthorToolPalette.tsx +103 -0
  266. package/src/web/components/AuthorVideoControls.tsx +111 -0
  267. package/src/web/components/DescribeAuthorToolsToolCard.tsx +50 -0
  268. package/src/web/components/OpenAuthoringFileToolCard.tsx +66 -0
  269. package/src/web/components/UseAuthorToolsToolCard.tsx +50 -0
  270. package/src/web/index.ts +68 -0
  271. package/src/web/lib/authorGrid.ts +124 -0
  272. package/src/web/lib/authorRegions.ts +30 -0
  273. package/src/web/lib/authorViewportTypes.ts +202 -0
  274. package/src/web/lib/describeAuthorToolsToolRender.ts +20 -0
  275. package/src/web/lib/useAuthorToolsToolRender.ts +20 -0
  276. package/src/web/stores/authorCapture.ts +322 -0
  277. package/src/web/stores/authorGridTools.ts +316 -0
  278. package/src/web/stores/authorProfiles.ts +130 -0
  279. package/src/web/stores/authorRequestLifecycle.ts +82 -0
  280. package/src/web/stores/authorStore.ts +60 -0
  281. package/src/web/stores/authorWorkspaceStore.ts +525 -0
  282. package/src/web/tsconfig.json +22 -0
@@ -0,0 +1,66 @@
1
+ import {
2
+ Button,
3
+ MessageItem,
4
+ MessageItemBody,
5
+ MessageItemHeader,
6
+ MessageItemStatus,
7
+ toolTone,
8
+ } from '@agimon-ai/doompi-web-components';
9
+ import type { ToolMessageRenderProps } from '@agimon-ai/doompi-web-contracts';
10
+ import { authorFileTab } from './AuthorDocumentPanel.tsx';
11
+
12
+ export function openAuthoringFileTab(
13
+ path: string,
14
+ openTransientTab: ToolMessageRenderProps['openTransientTab'],
15
+ openTab: ToolMessageRenderProps['openTab'],
16
+ ): void {
17
+ const tab = authorFileTab(path);
18
+ openTransientTab(tab);
19
+ openTab(tab.id);
20
+ }
21
+
22
+ function resultPath(result: ToolMessageRenderProps['result']): string | undefined {
23
+ if (typeof result?.details !== 'object' || result.details === null || !('path' in result.details)) return undefined;
24
+ return typeof result.details.path === 'string' ? result.details.path : undefined;
25
+ }
26
+
27
+ export function OpenAuthoringFileToolCard({
28
+ args,
29
+ result,
30
+ running,
31
+ isError,
32
+ openTransientTab,
33
+ openTab,
34
+ }: ToolMessageRenderProps) {
35
+ const path = resultPath(result);
36
+
37
+ const requestedPath = typeof args.path === 'string' ? args.path : 'document';
38
+ return (
39
+ <MessageItem tone={toolTone({ running, isError })}>
40
+ {() => (
41
+ <>
42
+ <MessageItemHeader title="open_authoring_file">
43
+ <span data-testid="tool-call-open_authoring_file" className="min-w-0 flex-1 truncate text-doom-text">
44
+ {requestedPath}
45
+ </span>
46
+ </MessageItemHeader>
47
+ <MessageItemBody data-testid="tool-result-open_authoring_file">
48
+ <MessageItemStatus tone={isError ? 'error' : running ? 'running' : undefined}>
49
+ {isError ? 'failed' : running ? 'validating' : path === undefined ? 'waiting' : 'ready'}
50
+ </MessageItemStatus>
51
+ {!running && !isError && path !== undefined ? (
52
+ <Button
53
+ size="xs"
54
+ variant="outline"
55
+ data-testid="author-open-file"
56
+ onClick={() => openAuthoringFileTab(path, openTransientTab, openTab)}
57
+ >
58
+ open in Author
59
+ </Button>
60
+ ) : null}
61
+ </MessageItemBody>
62
+ </>
63
+ )}
64
+ </MessageItem>
65
+ );
66
+ }
@@ -0,0 +1,50 @@
1
+ import {
2
+ collapseLines,
3
+ MessageItem,
4
+ MessageItemBody,
5
+ MessageItemHeader,
6
+ MessageItemStatus,
7
+ MessageLines,
8
+ toolTone,
9
+ } from '@agimon-ai/doompi-web-components';
10
+ import type { ToolMessageRenderProps } from '@agimon-ai/doompi-web-contracts';
11
+ import {
12
+ useAuthorToolsCallSummary,
13
+ useAuthorToolsCollapsedLines,
14
+ useAuthorToolsResultLines,
15
+ } from '../lib/useAuthorToolsToolRender.ts';
16
+
17
+ /**
18
+ * The use_author_tools tool's timeline item: Use one capability of the current Author viewport. The shell owns
19
+ * the frame, the outcome tone, the status badge, and the expand toggle; this
20
+ * card supplies the header summary and the body lines, and says whether it
21
+ * hides any so the toggle appears only when it reveals something.
22
+ */
23
+ export function UseAuthorToolsToolCard({ toolName, args, result, running, isError }: ToolMessageRenderProps) {
24
+ const lines = useAuthorToolsResultLines(result);
25
+ const collapsed = collapseLines(lines, useAuthorToolsCollapsedLines, false);
26
+ return (
27
+ <MessageItem tone={toolTone({ running, isError })} expandable={collapsed.hidden > 0}>
28
+ {({ expanded }) => {
29
+ const view = expanded ? collapseLines(lines, useAuthorToolsCollapsedLines, true) : collapsed;
30
+ return (
31
+ <>
32
+ <MessageItemHeader title={toolName}>
33
+ <span data-testid={`tool-call-${toolName}`} className="min-w-0 flex-1 truncate text-doom-text">
34
+ {useAuthorToolsCallSummary(args)}
35
+ </span>
36
+ </MessageItemHeader>
37
+ {view.shown.length > 0 || running || isError ? (
38
+ <MessageItemBody data-testid={`tool-result-${toolName}`} className="flex flex-col gap-1">
39
+ {view.shown.length > 0 ? <MessageLines lines={view.shown} /> : null}
40
+ {view.hidden > 0 ? <MessageItemStatus expands>{view.hidden} more line(s)</MessageItemStatus> : null}
41
+ {running ? <MessageItemStatus tone="running">running</MessageItemStatus> : null}
42
+ {isError ? <MessageItemStatus tone="error">failed</MessageItemStatus> : null}
43
+ </MessageItemBody>
44
+ ) : null}
45
+ </>
46
+ );
47
+ }}
48
+ </MessageItem>
49
+ );
50
+ }
@@ -0,0 +1,68 @@
1
+ import { defineWebPlugin, type WebPluginRuntime } from '@agimon-ai/doompi-web-contracts';
2
+ import { authorFileLinks } from './components/AuthorDocumentPanel.tsx';
3
+ import { AuthorPanel } from './components/AuthorPanel.tsx';
4
+ import { startAuthorBrowserBridge } from './api/authorBrowserBridge.ts';
5
+ import { authorChannel } from './stores/authorStore.ts';
6
+ import { DescribeAuthorToolsToolCard } from './components/DescribeAuthorToolsToolCard.tsx';
7
+ import { OpenAuthoringFileToolCard } from './components/OpenAuthoringFileToolCard.tsx';
8
+ import { UseAuthorToolsToolCard } from './components/UseAuthorToolsToolCard.tsx';
9
+ import { recordAuthorCaptureStatus, recordAuthorComposerSubmission } from './stores/authorRequestLifecycle.ts';
10
+ import { authorWorkspace } from './stores/authorWorkspaceStore.ts';
11
+
12
+ /**
13
+ * This package's cockpit presence: the named export the generated plugin
14
+ * registry imports. Plugins are independent, so nothing here depends on
15
+ * install order; every relation to another plugin resolves by name.
16
+ */
17
+ function startAuthor(runtime: WebPluginRuntime): () => void {
18
+ const stopBridge = startAuthorBrowserBridge(runtime);
19
+ const stopSubmissions = runtime.onComposerSubmitted?.(recordAuthorComposerSubmission) ?? (() => undefined);
20
+ const stopCaptureStatus = runtime.onCaptureStatus?.(recordAuthorCaptureStatus) ?? (() => undefined);
21
+ return () => {
22
+ stopSubmissions();
23
+ stopCaptureStatus();
24
+ stopBridge();
25
+ };
26
+ }
27
+
28
+ export const webPlugin = defineWebPlugin({
29
+ id: 'author',
30
+ dockFaces: [
31
+ {
32
+ id: 'authoring',
33
+ label: 'authoring',
34
+ order: 30,
35
+ autoSelect: true,
36
+ panel: AuthorPanel,
37
+ requiredMinorMode: 'author',
38
+ visibility: {
39
+ subscribe(listener) {
40
+ const subscription = authorWorkspace.store.subscribe(listener);
41
+ return () => subscription.unsubscribe();
42
+ },
43
+ isVisible(sessionId) {
44
+ return sessionId !== null && authorWorkspace.store.state.sessions[sessionId]?.focusedDocument !== undefined;
45
+ },
46
+ },
47
+ },
48
+ ],
49
+ minorModes: [{ name: 'author', keys: 'o a', order: 45 }],
50
+ leaderBindings: [
51
+ {
52
+ id: 'author.toggle',
53
+ path: [
54
+ { key: 'o', label: 'other', detail: 'optional modes and tools' },
55
+ { key: 'a', label: 'author', detail: 'enable or disable focused document authoring' },
56
+ ],
57
+ command: 'minor author',
58
+ },
59
+ ],
60
+ channels: [authorChannel],
61
+ fileLinks: authorFileLinks,
62
+ toolRenderers: [
63
+ { tools: ['open_authoring_file'], message: OpenAuthoringFileToolCard },
64
+ { tools: ['describe_author_tools'], message: DescribeAuthorToolsToolCard },
65
+ { tools: ['use_author_tools'], message: UseAuthorToolsToolCard },
66
+ ],
67
+ start: startAuthor,
68
+ });
@@ -0,0 +1,124 @@
1
+ import { defineGlobalStore } from '@agimon-ai/doompi-web-contracts';
2
+ import type { AuthorNativeAnchor, AuthorVoiceGridEvidence, AuthorViewportSnapshot } from './authorViewportTypes.ts';
3
+
4
+ export const AUTHOR_GRID_COLUMNS = 'ABCDEFGH' as const;
5
+ export const AUTHOR_GRID_SIZE = 8;
6
+
7
+ export interface AuthorGridGeometry {
8
+ documentPath: string;
9
+ revision: number;
10
+ sourceSha256?: string;
11
+ geometryToken: string;
12
+ snapshotId: string;
13
+ viewport: AuthorViewportSnapshot;
14
+ updatedAt: number;
15
+ }
16
+
17
+ interface AuthorGridState {
18
+ sessions: Readonly<Record<string, AuthorGridGeometry>>;
19
+ }
20
+
21
+ export interface AuthorGridCellResolution {
22
+ cell: string;
23
+ column: number;
24
+ row: number;
25
+ rect: { x: number; y: number; width: number; height: number };
26
+ center: { x: number; y: number };
27
+ evidence: AuthorVoiceGridEvidence;
28
+ }
29
+
30
+ export interface AuthorGridNativeResolution {
31
+ anchor: AuthorNativeAnchor;
32
+ quote?: string;
33
+ }
34
+
35
+ type AuthorGridNativeResolver = (
36
+ cell: AuthorGridCellResolution,
37
+ geometry: AuthorGridGeometry,
38
+ ) => AuthorGridNativeResolution | undefined;
39
+
40
+ const nativeResolvers = new Map<string, AuthorGridNativeResolver>();
41
+
42
+ export const authorGrid = defineGlobalStore<AuthorGridState>({ sessions: {} });
43
+
44
+ export function parseAuthorGridCell(cell: string): { cell: string; column: number; row: number } {
45
+ const normalized = cell.trim().toUpperCase();
46
+ if (!/^[A-H][1-8]$/u.test(normalized)) throw new Error(`Invalid Author grid cell '${cell}'. Expected A1 through H8.`);
47
+ return {
48
+ cell: normalized,
49
+ column: AUTHOR_GRID_COLUMNS.indexOf(normalized[0] as (typeof AUTHOR_GRID_COLUMNS)[number]),
50
+ row: Number(normalized[1]) - 1,
51
+ };
52
+ }
53
+
54
+ export function updateAuthorGridGeometry(
55
+ sessionId: string,
56
+ input: Omit<AuthorGridGeometry, 'geometryToken' | 'snapshotId' | 'updatedAt'>,
57
+ ): AuthorGridGeometry {
58
+ const previous = authorGrid.store.state.sessions[sessionId];
59
+ const geometry: AuthorGridGeometry = {
60
+ ...input,
61
+ geometryToken: crypto.randomUUID(),
62
+ snapshotId:
63
+ previous?.documentPath === input.documentPath &&
64
+ previous.revision === input.revision &&
65
+ previous.sourceSha256 === input.sourceSha256
66
+ ? previous.snapshotId
67
+ : crypto.randomUUID(),
68
+ updatedAt: Date.now(),
69
+ };
70
+ authorGrid.update((state) => ({ ...state, sessions: { ...state.sessions, [sessionId]: geometry } }));
71
+ return geometry;
72
+ }
73
+
74
+ export function authorGridGeometry(sessionId: string): AuthorGridGeometry | undefined {
75
+ return authorGrid.store.state.sessions[sessionId];
76
+ }
77
+
78
+ export function clearAuthorGridGeometry(sessionId: string): void {
79
+ authorGrid.update((state) => {
80
+ if (state.sessions[sessionId] === undefined) return state;
81
+ const sessions = { ...state.sessions };
82
+ delete sessions[sessionId];
83
+ return { ...state, sessions };
84
+ });
85
+ }
86
+
87
+ export function registerAuthorGridResolver(sessionId: string, resolver: AuthorGridNativeResolver): () => void {
88
+ nativeResolvers.set(sessionId, resolver);
89
+ return () => {
90
+ if (nativeResolvers.get(sessionId) === resolver) nativeResolvers.delete(sessionId);
91
+ };
92
+ }
93
+
94
+ export function resolveAuthorGridNativeAnchor(
95
+ sessionId: string,
96
+ cell: AuthorGridCellResolution,
97
+ ): AuthorGridNativeResolution {
98
+ const geometry = authorGridGeometry(sessionId);
99
+ const resolved = geometry === undefined ? undefined : nativeResolvers.get(sessionId)?.(cell, geometry);
100
+ if (resolved === undefined)
101
+ throw new Error('AMBIGUOUS_GRID: The grid cell does not resolve to one visible native document target.');
102
+ return resolved;
103
+ }
104
+
105
+ export function resolveAuthorGridCell(
106
+ sessionId: string,
107
+ cell: string,
108
+ expectedGeometryToken: string,
109
+ ): AuthorGridCellResolution {
110
+ const geometry = authorGridGeometry(sessionId);
111
+ if (geometry === undefined || geometry.geometryToken !== expectedGeometryToken) {
112
+ throw new Error('STALE_GRID: The Author grid geometry changed. Describe the grid again.');
113
+ }
114
+ const parsed = parseAuthorGridCell(cell);
115
+ const width = 1 / AUTHOR_GRID_SIZE;
116
+ const height = 1 / AUTHOR_GRID_SIZE;
117
+ const rect = { x: parsed.column * width, y: parsed.row * height, width, height };
118
+ return {
119
+ ...parsed,
120
+ rect,
121
+ center: { x: rect.x + width / 2, y: rect.y + height / 2 },
122
+ evidence: { cell: parsed.cell, geometryToken: geometry.geometryToken, snapshotId: geometry.snapshotId },
123
+ };
124
+ }
@@ -0,0 +1,30 @@
1
+ import type { AuthorNormalizedRect } from './authorViewportTypes.ts';
2
+
3
+ export interface AuthorClientRect {
4
+ left: number;
5
+ top: number;
6
+ right: number;
7
+ bottom: number;
8
+ }
9
+
10
+ /** Clamp a drag to the source element, including drags made in reverse. */
11
+ export function normalizedAuthorRectangle(
12
+ bounds: AuthorClientRect,
13
+ drag: AuthorClientRect,
14
+ ): AuthorNormalizedRect | null {
15
+ const width = bounds.right - bounds.left;
16
+ const height = bounds.bottom - bounds.top;
17
+ if (![...Object.values(bounds), ...Object.values(drag)].every(Number.isFinite) || width <= 0 || height <= 0)
18
+ return null;
19
+ const left = Math.max(bounds.left, Math.min(drag.left, drag.right));
20
+ const right = Math.min(bounds.right, Math.max(drag.left, drag.right));
21
+ const top = Math.max(bounds.top, Math.min(drag.top, drag.bottom));
22
+ const bottom = Math.min(bounds.bottom, Math.max(drag.top, drag.bottom));
23
+ if (right <= left || bottom <= top) return null;
24
+ return {
25
+ x: (left - bounds.left) / width,
26
+ y: (top - bounds.top) / height,
27
+ width: (right - left) / width,
28
+ height: (bottom - top) / height,
29
+ };
30
+ }
@@ -0,0 +1,202 @@
1
+ import type { AuthorJsonSchema } from '../../types/author.ts';
2
+ import type { CsvDialect, DocumentFragment, StructuredDocumentFormat } from '../../types/structuredDocuments.ts';
3
+
4
+ export type AuthorDocumentKind =
5
+ | 'text'
6
+ | 'markdown'
7
+ | 'slides'
8
+ | 'csv'
9
+ | 'pptx'
10
+ | 'xlsx'
11
+ | 'image'
12
+ | 'video'
13
+ | 'pdf'
14
+ | 'opaque';
15
+
16
+ export interface AuthorDocumentInput {
17
+ path: string;
18
+ kind: AuthorDocumentKind;
19
+ content?: string;
20
+ mediaUrl?: string;
21
+ crop?: AuthorCrop;
22
+ title?: string;
23
+ sourceSha256?: string;
24
+ structuredFormat?: StructuredDocumentFormat;
25
+ csvDialect?: CsvDialect;
26
+ fragments?: readonly DocumentFragment[];
27
+ originalFragments?: readonly DocumentFragment[];
28
+ }
29
+
30
+ export interface AuthorAnnotation {
31
+ id: string;
32
+ kind: 'comment' | 'highlight';
33
+ body: string;
34
+ quote?: string;
35
+ startLine?: number;
36
+ endLine?: number;
37
+ }
38
+
39
+ export interface AuthorDraftRevision {
40
+ revision: number;
41
+ content: string;
42
+ }
43
+
44
+ /** A rectangle expressed relative to its source, not its current CSS size. */
45
+ export interface AuthorNormalizedRect {
46
+ x: number;
47
+ y: number;
48
+ width: number;
49
+ height: number;
50
+ }
51
+
52
+ /** Legacy image crop shape. Coordinates are source-normalized for new records. */
53
+ export type AuthorCrop = AuthorNormalizedRect;
54
+
55
+ export interface AuthorTextRangeAnchor {
56
+ kind: 'text-range';
57
+ startOffset: number;
58
+ endOffset: number;
59
+ startLine: number;
60
+ endLine: number;
61
+ }
62
+
63
+ export interface AuthorCellAnchor {
64
+ kind: 'cell';
65
+ fragmentId: string;
66
+ location: string;
67
+ row?: number;
68
+ column?: number;
69
+ sheet?: string;
70
+ }
71
+
72
+ export interface AuthorSlideElementAnchor {
73
+ kind: 'slide-element';
74
+ fragmentId: string;
75
+ slide: number;
76
+ elementId?: string;
77
+ location: string;
78
+ }
79
+
80
+ export interface AuthorImageRectAnchor {
81
+ kind: 'image-rect';
82
+ rect: AuthorNormalizedRect;
83
+ naturalWidth: number;
84
+ naturalHeight: number;
85
+ }
86
+
87
+ export interface AuthorPdfPageRectAnchor {
88
+ kind: 'pdf-page-rect';
89
+ page: number;
90
+ rect: AuthorNormalizedRect;
91
+ }
92
+
93
+ export interface AuthorVideoTimeRectAnchor {
94
+ kind: 'video-time-rect';
95
+ timeSeconds: number;
96
+ rect: AuthorNormalizedRect;
97
+ frame?: number;
98
+ intrinsicWidth?: number;
99
+ intrinsicHeight?: number;
100
+ }
101
+
102
+ export type AuthorNativeAnchor =
103
+ | AuthorTextRangeAnchor
104
+ | AuthorCellAnchor
105
+ | AuthorSlideElementAnchor
106
+ | AuthorImageRectAnchor
107
+ | AuthorPdfPageRectAnchor
108
+ | AuthorVideoTimeRectAnchor;
109
+
110
+ /** View state retained as capture evidence, never as mutation authority. */
111
+ export interface AuthorViewportSnapshot {
112
+ width: number;
113
+ height: number;
114
+ originX?: number;
115
+ originY?: number;
116
+ scrollX?: number;
117
+ scrollY?: number;
118
+ zoom?: number;
119
+ page?: number;
120
+ slide?: number;
121
+ timeSeconds?: number;
122
+ }
123
+
124
+ export interface AuthorVoiceGridEvidence {
125
+ cell: string;
126
+ geometryToken: string;
127
+ snapshotId: string;
128
+ }
129
+
130
+ export type AuthorToolMode = 'select' | 'mark' | 'crop';
131
+
132
+ export interface AuthorRegionCandidate {
133
+ documentPath: string;
134
+ revision: number;
135
+ sourceSha256?: string;
136
+ quote?: string;
137
+ anchor: AuthorNativeAnchor;
138
+ viewport: AuthorViewportSnapshot;
139
+ voiceGrid?: AuthorVoiceGridEvidence;
140
+ thumbnailUrl?: string;
141
+ createdAt: number;
142
+ }
143
+
144
+ export interface AuthorRegionDraft {
145
+ id: string;
146
+ documentPath: string;
147
+ revision: number;
148
+ sourceSha256?: string;
149
+ comment: string;
150
+ quote?: string;
151
+ anchor: AuthorNativeAnchor;
152
+ viewport: AuthorViewportSnapshot;
153
+ voiceGrid?: AuthorVoiceGridEvidence;
154
+ thumbnailUrl?: string;
155
+ createdAt: number;
156
+ }
157
+
158
+ /** A region paired with the stable request/draft number shown in the document. */
159
+ export interface AuthorDisplayedRegion {
160
+ ordinal: number;
161
+ region: AuthorRegionDraft;
162
+ }
163
+ export type AuthorRequestStatus = 'REQUESTED' | 'CHANGING' | 'CHANGED' | 'COMPLETE' | 'FAILED' | 'CANCELLED';
164
+
165
+ export interface AuthorRequestRecord {
166
+ id: string;
167
+ captureId?: string;
168
+ documentPath: string;
169
+ requestText: string;
170
+ regions: readonly AuthorRegionDraft[];
171
+ pendingRegions?: readonly AuthorRegionDraft[];
172
+ status: AuthorRequestStatus;
173
+ currentOperation?: string;
174
+ before?: string;
175
+ after?: string;
176
+ error?: string;
177
+ createdAt: number;
178
+ updatedAt: number;
179
+ revision: number;
180
+ sourceSha256?: string;
181
+ }
182
+
183
+ export interface AuthorFocusedDocument {
184
+ path: string;
185
+ generation: number;
186
+ revision: number;
187
+ sourceSha256?: string;
188
+ focusedAt: number;
189
+ }
190
+
191
+ export interface AuthorTrustedTool {
192
+ name: string;
193
+ label?: string;
194
+ description: string;
195
+ inputSchema: AuthorJsonSchema;
196
+ execute(input: unknown, signal: AbortSignal): Promise<unknown>;
197
+ }
198
+
199
+ export interface AuthorTrustedProfile {
200
+ id: string;
201
+ tools: readonly AuthorTrustedTool[];
202
+ }
@@ -0,0 +1,20 @@
1
+ import type { MessageLine } from '@agimon-ai/doompi-web-components';
2
+ import { type ToolResultView, toolResultTextLines } from '@agimon-ai/doompi-web-contracts';
3
+
4
+ export const describeAuthorToolsToolName = 'describe_author_tools';
5
+
6
+ /** Lines the collapsed item shows before it expands. */
7
+ export const describeAuthorToolsCollapsedLines = 8;
8
+
9
+ export function describeAuthorToolsCallSummary(_args: Readonly<Record<string, unknown>>): string {
10
+ return '';
11
+ }
12
+
13
+ /**
14
+ * The body as toned lines: what the result's details say, or its text. Pure,
15
+ * so a unit test can pin it without a DOM; the item decides how many to show.
16
+ */
17
+ export function describeAuthorToolsResultLines(result: ToolResultView | null): MessageLine[] {
18
+ if (result === null) return [];
19
+ return toolResultTextLines(result.content).map((text) => ({ text, tone: 'dim' }));
20
+ }
@@ -0,0 +1,20 @@
1
+ import type { MessageLine } from '@agimon-ai/doompi-web-components';
2
+ import { type ToolResultView, toolResultTextLines } from '@agimon-ai/doompi-web-contracts';
3
+
4
+ export const useAuthorToolsToolName = 'use_author_tools';
5
+
6
+ /** Lines the collapsed item shows before it expands. */
7
+ export const useAuthorToolsCollapsedLines = 8;
8
+
9
+ export function useAuthorToolsCallSummary(args: Readonly<Record<string, unknown>>): string {
10
+ return typeof args.name === 'string' ? args.name : '';
11
+ }
12
+
13
+ /**
14
+ * The body as toned lines: what the result's details say, or its text. Pure,
15
+ * so a unit test can pin it without a DOM; the item decides how many to show.
16
+ */
17
+ export function useAuthorToolsResultLines(result: ToolResultView | null): MessageLine[] {
18
+ if (result === null) return [];
19
+ return toolResultTextLines(result.content).map((text) => ({ text, tone: 'dim' }));
20
+ }