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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +41 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  4. package/dist/api-contracts.cjs +1 -0
  5. package/dist/api-contracts.d.cts +2 -0
  6. package/dist/api-contracts.d.mts +2 -0
  7. package/dist/api-contracts.mjs +1 -0
  8. package/dist/authorFacade.cjs +1 -0
  9. package/dist/authorFacade.d.cts +3 -0
  10. package/dist/authorFacade.d.mts +3 -0
  11. package/dist/authorFacade.mjs +1 -0
  12. package/dist/constants/author.cjs +4 -0
  13. package/dist/constants/author.cjs.map +1 -0
  14. package/dist/constants/author.mjs +4 -0
  15. package/dist/constants/author.mjs.map +1 -0
  16. package/dist/controllers/authorApi.cjs +2 -0
  17. package/dist/controllers/authorApi.cjs.map +1 -0
  18. package/dist/controllers/authorApi.mjs +2 -0
  19. package/dist/controllers/authorApi.mjs.map +1 -0
  20. package/dist/controllers/authorBridgeApi.cjs +2 -0
  21. package/dist/controllers/authorBridgeApi.cjs.map +1 -0
  22. package/dist/controllers/authorBridgeApi.mjs +2 -0
  23. package/dist/controllers/authorBridgeApi.mjs.map +1 -0
  24. package/dist/controllers/authorBridgeMethod.cjs +2 -0
  25. package/dist/controllers/authorBridgeMethod.cjs.map +1 -0
  26. package/dist/controllers/authorBridgeMethod.mjs +2 -0
  27. package/dist/controllers/authorBridgeMethod.mjs.map +1 -0
  28. package/dist/controllers/authorDocumentApi.cjs +2 -0
  29. package/dist/controllers/authorDocumentApi.cjs.map +1 -0
  30. package/dist/controllers/authorDocumentApi.mjs +2 -0
  31. package/dist/controllers/authorDocumentApi.mjs.map +1 -0
  32. package/dist/controllers/authorPiMode.cjs +2 -0
  33. package/dist/controllers/authorPiMode.cjs.map +1 -0
  34. package/dist/controllers/authorPiMode.mjs +2 -0
  35. package/dist/controllers/authorPiMode.mjs.map +1 -0
  36. package/dist/controllers/doomAuthorCommand.cjs +2 -0
  37. package/dist/controllers/doomAuthorCommand.cjs.map +1 -0
  38. package/dist/controllers/doomAuthorCommand.d.cts +5 -0
  39. package/dist/controllers/doomAuthorCommand.d.cts.map +1 -0
  40. package/dist/controllers/doomAuthorCommand.d.mts +5 -0
  41. package/dist/controllers/doomAuthorCommand.d.mts.map +1 -0
  42. package/dist/controllers/doomAuthorCommand.mjs +2 -0
  43. package/dist/controllers/doomAuthorCommand.mjs.map +1 -0
  44. package/dist/controllers/webAuthorChannel.cjs +2 -0
  45. package/dist/controllers/webAuthorChannel.cjs.map +1 -0
  46. package/dist/controllers/webAuthorChannel.mjs +2 -0
  47. package/dist/controllers/webAuthorChannel.mjs.map +1 -0
  48. package/dist/extensions/pi.cjs +2 -0
  49. package/dist/extensions/pi.cjs.map +1 -0
  50. package/dist/extensions/pi.d.cts +7 -0
  51. package/dist/extensions/pi.d.cts.map +1 -0
  52. package/dist/extensions/pi.d.mts +7 -0
  53. package/dist/extensions/pi.d.mts.map +1 -0
  54. package/dist/extensions/pi.mjs +2 -0
  55. package/dist/extensions/pi.mjs.map +1 -0
  56. package/dist/extensions/server.cjs +2 -0
  57. package/dist/extensions/server.cjs.map +1 -0
  58. package/dist/extensions/server.d.cts +5 -0
  59. package/dist/extensions/server.d.cts.map +1 -0
  60. package/dist/extensions/server.d.mts +5 -0
  61. package/dist/extensions/server.d.mts.map +1 -0
  62. package/dist/extensions/server.mjs +2 -0
  63. package/dist/extensions/server.mjs.map +1 -0
  64. package/dist/index.cjs +1 -0
  65. package/dist/index.d.cts +20 -0
  66. package/dist/index.d.mts +20 -0
  67. package/dist/index.mjs +1 -0
  68. package/dist/models/authorBridgeState.cjs +2 -0
  69. package/dist/models/authorBridgeState.cjs.map +1 -0
  70. package/dist/models/authorBridgeState.d.cts +31 -0
  71. package/dist/models/authorBridgeState.d.cts.map +1 -0
  72. package/dist/models/authorBridgeState.d.mts +31 -0
  73. package/dist/models/authorBridgeState.d.mts.map +1 -0
  74. package/dist/models/authorBridgeState.mjs +2 -0
  75. package/dist/models/authorBridgeState.mjs.map +1 -0
  76. package/dist/models/authorMode.cjs +2 -0
  77. package/dist/models/authorMode.cjs.map +1 -0
  78. package/dist/models/authorMode.d.cts +9 -0
  79. package/dist/models/authorMode.d.cts.map +1 -0
  80. package/dist/models/authorMode.d.mts +9 -0
  81. package/dist/models/authorMode.d.mts.map +1 -0
  82. package/dist/models/authorMode.mjs +2 -0
  83. package/dist/models/authorMode.mjs.map +1 -0
  84. package/dist/schemas/apiContracts.cjs +4 -0
  85. package/dist/schemas/apiContracts.cjs.map +1 -0
  86. package/dist/schemas/apiContracts.d.cts +53 -0
  87. package/dist/schemas/apiContracts.d.cts.map +1 -0
  88. package/dist/schemas/apiContracts.d.mts +53 -0
  89. package/dist/schemas/apiContracts.d.mts.map +1 -0
  90. package/dist/schemas/apiContracts.mjs +4 -0
  91. package/dist/schemas/apiContracts.mjs.map +1 -0
  92. package/dist/schemas/authorFacade.cjs +2 -0
  93. package/dist/schemas/authorFacade.cjs.map +1 -0
  94. package/dist/schemas/authorFacade.d.cts +112 -0
  95. package/dist/schemas/authorFacade.d.cts.map +1 -0
  96. package/dist/schemas/authorFacade.d.mts +112 -0
  97. package/dist/schemas/authorFacade.d.mts.map +1 -0
  98. package/dist/schemas/authorFacade.mjs +2 -0
  99. package/dist/schemas/authorFacade.mjs.map +1 -0
  100. package/dist/schemas/authorTools.cjs +2 -0
  101. package/dist/schemas/authorTools.cjs.map +1 -0
  102. package/dist/schemas/authorTools.d.cts +12 -0
  103. package/dist/schemas/authorTools.d.cts.map +1 -0
  104. package/dist/schemas/authorTools.d.mts +12 -0
  105. package/dist/schemas/authorTools.d.mts.map +1 -0
  106. package/dist/schemas/authorTools.mjs +2 -0
  107. package/dist/schemas/authorTools.mjs.map +1 -0
  108. package/dist/services/authorCatalog/index.cjs +2 -0
  109. package/dist/services/authorCatalog/index.cjs.map +1 -0
  110. package/dist/services/authorCatalog/index.d.cts +6 -0
  111. package/dist/services/authorCatalog/index.d.cts.map +1 -0
  112. package/dist/services/authorCatalog/index.d.mts +6 -0
  113. package/dist/services/authorCatalog/index.d.mts.map +1 -0
  114. package/dist/services/authorCatalog/index.mjs +2 -0
  115. package/dist/services/authorCatalog/index.mjs.map +1 -0
  116. package/dist/services/authorCatalog/monitor.cjs +2 -0
  117. package/dist/services/authorCatalog/monitor.cjs.map +1 -0
  118. package/dist/services/authorCatalog/monitor.d.cts +20 -0
  119. package/dist/services/authorCatalog/monitor.d.cts.map +1 -0
  120. package/dist/services/authorCatalog/monitor.d.mts +20 -0
  121. package/dist/services/authorCatalog/monitor.d.mts.map +1 -0
  122. package/dist/services/authorCatalog/monitor.mjs +2 -0
  123. package/dist/services/authorCatalog/monitor.mjs.map +1 -0
  124. package/dist/services/authorCatalog/type.d.cts +10 -0
  125. package/dist/services/authorCatalog/type.d.cts.map +1 -0
  126. package/dist/services/authorCatalog/type.d.mts +10 -0
  127. package/dist/services/authorCatalog/type.d.mts.map +1 -0
  128. package/dist/services/authorPrompt/index.cjs +2 -0
  129. package/dist/services/authorPrompt/index.cjs.map +1 -0
  130. package/dist/services/authorPrompt/index.mjs +2 -0
  131. package/dist/services/authorPrompt/index.mjs.map +1 -0
  132. package/dist/services/structuredDocuments/common.cjs +2 -0
  133. package/dist/services/structuredDocuments/common.cjs.map +1 -0
  134. package/dist/services/structuredDocuments/common.mjs +2 -0
  135. package/dist/services/structuredDocuments/common.mjs.map +1 -0
  136. package/dist/services/structuredDocuments/csv.cjs +7 -0
  137. package/dist/services/structuredDocuments/csv.cjs.map +1 -0
  138. package/dist/services/structuredDocuments/csv.d.cts +7 -0
  139. package/dist/services/structuredDocuments/csv.d.cts.map +1 -0
  140. package/dist/services/structuredDocuments/csv.d.mts +7 -0
  141. package/dist/services/structuredDocuments/csv.d.mts.map +1 -0
  142. package/dist/services/structuredDocuments/csv.mjs +7 -0
  143. package/dist/services/structuredDocuments/csv.mjs.map +1 -0
  144. package/dist/services/structuredDocuments/document.cjs +2 -0
  145. package/dist/services/structuredDocuments/document.cjs.map +1 -0
  146. package/dist/services/structuredDocuments/document.mjs +2 -0
  147. package/dist/services/structuredDocuments/document.mjs.map +1 -0
  148. package/dist/services/structuredDocuments/index.cjs +2 -0
  149. package/dist/services/structuredDocuments/index.cjs.map +1 -0
  150. package/dist/services/structuredDocuments/index.d.cts +13 -0
  151. package/dist/services/structuredDocuments/index.d.cts.map +1 -0
  152. package/dist/services/structuredDocuments/index.d.mts +13 -0
  153. package/dist/services/structuredDocuments/index.d.mts.map +1 -0
  154. package/dist/services/structuredDocuments/index.mjs +2 -0
  155. package/dist/services/structuredDocuments/index.mjs.map +1 -0
  156. package/dist/services/structuredDocuments/markdownSlides.cjs +6 -0
  157. package/dist/services/structuredDocuments/markdownSlides.cjs.map +1 -0
  158. package/dist/services/structuredDocuments/markdownSlides.d.cts +7 -0
  159. package/dist/services/structuredDocuments/markdownSlides.d.cts.map +1 -0
  160. package/dist/services/structuredDocuments/markdownSlides.d.mts +7 -0
  161. package/dist/services/structuredDocuments/markdownSlides.d.mts.map +1 -0
  162. package/dist/services/structuredDocuments/markdownSlides.mjs +6 -0
  163. package/dist/services/structuredDocuments/markdownSlides.mjs.map +1 -0
  164. package/dist/services/structuredDocuments/ooxmlArchive.cjs +2 -0
  165. package/dist/services/structuredDocuments/ooxmlArchive.cjs.map +1 -0
  166. package/dist/services/structuredDocuments/ooxmlArchive.d.cts +13 -0
  167. package/dist/services/structuredDocuments/ooxmlArchive.d.cts.map +1 -0
  168. package/dist/services/structuredDocuments/ooxmlArchive.d.mts +13 -0
  169. package/dist/services/structuredDocuments/ooxmlArchive.d.mts.map +1 -0
  170. package/dist/services/structuredDocuments/ooxmlArchive.mjs +2 -0
  171. package/dist/services/structuredDocuments/ooxmlArchive.mjs.map +1 -0
  172. package/dist/services/structuredDocuments/pptx.cjs +2 -0
  173. package/dist/services/structuredDocuments/pptx.cjs.map +1 -0
  174. package/dist/services/structuredDocuments/pptx.d.cts +7 -0
  175. package/dist/services/structuredDocuments/pptx.d.cts.map +1 -0
  176. package/dist/services/structuredDocuments/pptx.d.mts +7 -0
  177. package/dist/services/structuredDocuments/pptx.d.mts.map +1 -0
  178. package/dist/services/structuredDocuments/pptx.mjs +2 -0
  179. package/dist/services/structuredDocuments/pptx.mjs.map +1 -0
  180. package/dist/services/structuredDocuments/xlsx.cjs +2 -0
  181. package/dist/services/structuredDocuments/xlsx.cjs.map +1 -0
  182. package/dist/services/structuredDocuments/xlsx.d.cts +7 -0
  183. package/dist/services/structuredDocuments/xlsx.d.cts.map +1 -0
  184. package/dist/services/structuredDocuments/xlsx.d.mts +7 -0
  185. package/dist/services/structuredDocuments/xlsx.d.mts.map +1 -0
  186. package/dist/services/structuredDocuments/xlsx.mjs +2 -0
  187. package/dist/services/structuredDocuments/xlsx.mjs.map +1 -0
  188. package/dist/services/structuredDocuments/xmlText.cjs +2 -0
  189. package/dist/services/structuredDocuments/xmlText.cjs.map +1 -0
  190. package/dist/services/structuredDocuments/xmlText.mjs +2 -0
  191. package/dist/services/structuredDocuments/xmlText.mjs.map +1 -0
  192. package/dist/tools/authorTools.cjs +2 -0
  193. package/dist/tools/authorTools.cjs.map +1 -0
  194. package/dist/tools/authorTools.d.cts +6 -0
  195. package/dist/tools/authorTools.d.cts.map +1 -0
  196. package/dist/tools/authorTools.d.mts +6 -0
  197. package/dist/tools/authorTools.d.mts.map +1 -0
  198. package/dist/tools/authorTools.mjs +2 -0
  199. package/dist/tools/authorTools.mjs.map +1 -0
  200. package/dist/types/author.cjs +2 -0
  201. package/dist/types/author.cjs.map +1 -0
  202. package/dist/types/author.d.cts +39 -0
  203. package/dist/types/author.d.cts.map +1 -0
  204. package/dist/types/author.d.mts +39 -0
  205. package/dist/types/author.d.mts.map +1 -0
  206. package/dist/types/author.mjs +2 -0
  207. package/dist/types/author.mjs.map +1 -0
  208. package/dist/types/authorApi.cjs +2 -0
  209. package/dist/types/authorApi.cjs.map +1 -0
  210. package/dist/types/authorApi.d.cts +23 -0
  211. package/dist/types/authorApi.d.cts.map +1 -0
  212. package/dist/types/authorApi.d.mts +23 -0
  213. package/dist/types/authorApi.d.mts.map +1 -0
  214. package/dist/types/authorApi.mjs +2 -0
  215. package/dist/types/authorApi.mjs.map +1 -0
  216. package/dist/types/extension.d.cts +16 -0
  217. package/dist/types/extension.d.cts.map +1 -0
  218. package/dist/types/extension.d.mts +16 -0
  219. package/dist/types/extension.d.mts.map +1 -0
  220. package/dist/types/structuredDocuments.d.cts +60 -0
  221. package/dist/types/structuredDocuments.d.cts.map +1 -0
  222. package/dist/types/structuredDocuments.d.mts +60 -0
  223. package/dist/types/structuredDocuments.d.mts.map +1 -0
  224. package/dist/types/webAuthor.cjs +2 -0
  225. package/dist/types/webAuthor.cjs.map +1 -0
  226. package/dist/types/webAuthor.d.cts +67 -0
  227. package/dist/types/webAuthor.d.cts.map +1 -0
  228. package/dist/types/webAuthor.d.mts +67 -0
  229. package/dist/types/webAuthor.d.mts.map +1 -0
  230. package/dist/types/webAuthor.mjs +2 -0
  231. package/dist/types/webAuthor.mjs.map +1 -0
  232. package/llms.txt +11 -0
  233. package/package.json +147 -0
  234. package/src/extensions/web.ts +71 -0
  235. package/src/prompts/doompi-use-author/SKILL.md +17 -0
  236. package/src/types/author.ts +45 -0
  237. package/src/types/structuredDocuments.ts +63 -0
  238. package/src/types/webAuthor.ts +85 -0
  239. package/src/web/api/authorBroker.ts +14 -0
  240. package/src/web/api/authorBrowserBridge.ts +229 -0
  241. package/src/web/api/authorFiles.ts +221 -0
  242. package/src/web/api/authorMedia.ts +19 -0
  243. package/src/web/api/authorRuntime.ts +165 -0
  244. package/src/web/components/AuthorDocumentPanel.tsx +233 -0
  245. package/src/web/components/AuthorGridOverlay.tsx +82 -0
  246. package/src/web/components/AuthorMediaPreview.tsx +42 -0
  247. package/src/web/components/AuthorMediaView.tsx +357 -0
  248. package/src/web/components/AuthorPanel.tsx +102 -0
  249. package/src/web/components/AuthorRegionDrafts.tsx +103 -0
  250. package/src/web/components/AuthorRequestLog.tsx +179 -0
  251. package/src/web/components/AuthorStructuredView.tsx +122 -0
  252. package/src/web/components/AuthorTextView.tsx +98 -0
  253. package/src/web/components/AuthorToolPalette.tsx +104 -0
  254. package/src/web/components/AuthorVideoControls.tsx +111 -0
  255. package/src/web/components/DescribeAuthorToolsToolCard.tsx +51 -0
  256. package/src/web/components/OpenAuthoringFileToolCard.tsx +67 -0
  257. package/src/web/components/UseAuthorToolsToolCard.tsx +51 -0
  258. package/src/web/lib/authorGrid.ts +125 -0
  259. package/src/web/lib/authorRegions.ts +30 -0
  260. package/src/web/lib/authorViewportTypes.ts +202 -0
  261. package/src/web/lib/describeAuthorToolsToolRender.ts +20 -0
  262. package/src/web/lib/useAuthorToolsToolRender.ts +20 -0
  263. package/src/web/stores/authorCapture.ts +323 -0
  264. package/src/web/stores/authorGridTools.ts +316 -0
  265. package/src/web/stores/authorProfiles.ts +130 -0
  266. package/src/web/stores/authorRequestLifecycle.ts +83 -0
  267. package/src/web/stores/authorStore.ts +61 -0
  268. package/src/web/stores/authorWorkspaceStore.ts +526 -0
  269. package/src/web/tsconfig.json +22 -0
@@ -0,0 +1,2 @@
1
+ import{AUTHOR_FACADE_TOOL_NAMES as e,AUTHOR_GUIDANCE as t,AUTHOR_PACKAGE_SOURCE as n}from"../constants/author.mjs";import{OPEN_AUTHORING_FILE_TOOL_NAME as r}from"../types/author.mjs";import{createAuthorTools as i}from"../tools/authorTools.mjs";import{createAuthorCatalog as a}from"../services/authorCatalog/index.mjs";import{authorMinorMode as o}from"../models/authorMode.mjs";import{createAuthorCommand as s}from"../controllers/doomAuthorCommand.mjs";import{api as c,createAuthorSessionApi as l}from"../controllers/authorApi.mjs";import{createAuthorBridgeMethod as u}from"../controllers/authorBridgeMethod.mjs";import{createAuthorChannel as d}from"../controllers/webAuthorChannel.mjs";import{readAuthorPrompt as f}from"../services/authorPrompt/index.mjs";import{serverMinorModes as p}from"@agimon-ai/doompi-minor-mode";import{defineServerPlugin as m}from"@agimon-ai/doompi-core/server-facet";const h=m({name:n,global:({host:e})=>({channels:[d],methods:[u(`global`,e)]}),workspace:({host:e})=>({channels:[d],methods:[u(`workspace`,e)]}),session:({agent:n})=>{let u=n?l(n.context.cwd,n.context.sessionId):void 0;return{api:[u?.api??c],...n?{services:[p([o.createOwner({isActive:()=>(n.context.selection.state?.[`minor-mode`]??[]).includes(o.descriptor.id),detail:()=>`document authoring available`,async setActive(e){let t=(n.context.selection.state?.[`minor-mode`]??[]).filter(e=>e!==o.descriptor.id);await n.changeSelection({axis:`state`,key:`minor-mode`,values:e?[...t,o.descriptor.id]:t})}})])]}:{},toolRestrictions:[{when:{state:{"minor-mode":`author`}},allowedTools:[r,...e]}],resources:[{when:{state:{"minor-mode":`author`},attribution:{kind:`minor`,mode:`author`}},name:`doompi-use-author`,kind:`skill`,read:()=>f()}],tools:i(a(u?.catalog)).map(e=>({...e,when:{state:{"minor-mode":`author`},attribution:{kind:`minor`,mode:`author`}}})),commands:[s()],hooks:[{when:{state:{"minor-mode":`author`},attribution:{kind:`minor`,mode:`author`}},event:`before_agent_start`,handle(e){return{systemPrompt:`${typeof e.systemPrompt==`string`?e.systemPrompt:``}\n\n${t}`.trim()}}}]}}});export{h as authorServerFacet,h as default};
2
+ //# sourceMappingURL=server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.mjs","names":[],"sources":["../../src/extensions/server.ts"],"sourcesContent":["import { defineServerPlugin } from '@agimon-ai/doompi-core/server-facet';\nimport { serverMinorModes } from '@agimon-ai/doompi-minor-mode';\n\nimport { AUTHOR_PACKAGE_SOURCE, AUTHOR_FACADE_TOOL_NAMES, AUTHOR_GUIDANCE } from '../constants/author';\nimport { api, createAuthorSessionApi } from '../controllers/authorApi';\nimport { createAuthorBridgeMethod } from '../controllers/authorBridgeMethod';\nimport { createAuthorCommand } from '../controllers/doomAuthorCommand';\nimport { createAuthorChannel } from '../controllers/webAuthorChannel';\nimport { authorMinorMode } from '../models/authorMode';\nimport { createAuthorCatalog } from '../services/authorCatalog';\nimport { readAuthorPrompt } from '../services/authorPrompt';\nimport { createAuthorTools } from '../tools/authorTools';\nimport { OPEN_AUTHORING_FILE_TOOL_NAME } from '../types/author';\n\nexport const authorServerFacet = defineServerPlugin({\n name: AUTHOR_PACKAGE_SOURCE,\n global: ({ host }) => ({\n channels: [createAuthorChannel],\n methods: [createAuthorBridgeMethod('global', host)],\n }),\n workspace: ({ host }) => ({\n channels: [createAuthorChannel],\n methods: [createAuthorBridgeMethod('workspace', host)],\n }),\n session: ({ agent }) => {\n const session = agent ? createAuthorSessionApi(agent.context.cwd, agent.context.sessionId) : undefined;\n return {\n api: [session?.api ?? api],\n ...(agent\n ? {\n services: [\n serverMinorModes([\n authorMinorMode.createOwner({\n isActive: () =>\n (agent.context.selection.state?.['minor-mode'] ?? []).includes(authorMinorMode.descriptor.id),\n detail: () => 'document authoring available',\n async setActive(enabled) {\n const modes = (agent.context.selection.state?.['minor-mode'] ?? []).filter(\n (id) => id !== authorMinorMode.descriptor.id,\n );\n await agent.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: enabled ? [...modes, authorMinorMode.descriptor.id] : modes,\n });\n },\n }),\n ]),\n ],\n }\n : {}),\n toolRestrictions: [\n {\n when: { state: { 'minor-mode': 'author' } },\n allowedTools: [OPEN_AUTHORING_FILE_TOOL_NAME, ...AUTHOR_FACADE_TOOL_NAMES],\n },\n ],\n resources: [\n {\n when: { state: { 'minor-mode': 'author' }, attribution: { kind: 'minor', mode: 'author' } },\n name: 'doompi-use-author',\n kind: 'skill',\n read: () => readAuthorPrompt(),\n },\n ],\n tools: createAuthorTools(createAuthorCatalog(session?.catalog)).map((tool) => ({\n ...tool,\n when: { state: { 'minor-mode': 'author' }, attribution: { kind: 'minor', mode: 'author' } },\n })),\n commands: [createAuthorCommand()],\n hooks: [\n {\n when: { state: { 'minor-mode': 'author' }, attribution: { kind: 'minor', mode: 'author' } },\n event: 'before_agent_start',\n handle(event) {\n const systemPrompt = typeof event.systemPrompt === 'string' ? event.systemPrompt : '';\n return { systemPrompt: `${systemPrompt}\\n\\n${AUTHOR_GUIDANCE}`.trim() };\n },\n },\n ],\n };\n },\n});\n\nexport default authorServerFacet;\n"],"mappings":"63BAcA,MAAa,EAAoB,EAAmB,CAClD,KAAM,EACN,QAAS,CAAE,WAAY,CACrB,SAAU,CAAC,CAAmB,EAC9B,QAAS,CAAC,EAAyB,SAAU,CAAI,CAAC,CACpD,GACA,WAAY,CAAE,WAAY,CACxB,SAAU,CAAC,CAAmB,EAC9B,QAAS,CAAC,EAAyB,YAAa,CAAI,CAAC,CACvD,GACA,SAAU,CAAE,WAAY,CACtB,IAAM,EAAU,EAAQ,EAAuB,EAAM,QAAQ,IAAK,EAAM,QAAQ,SAAS,EAAI,IAAA,GAC7F,MAAO,CACL,IAAK,CAAC,GAAS,KAAO,CAAG,EACzB,GAAI,EACA,CACE,SAAU,CACR,EAAiB,CACf,EAAgB,YAAY,CAC1B,cACG,EAAM,QAAQ,UAAU,QAAQ,eAAiB,CAAC,EAAA,CAAG,SAAS,EAAgB,WAAW,EAAE,EAC9F,WAAc,+BACd,MAAM,UAAU,EAAS,CACvB,IAAM,GAAS,EAAM,QAAQ,UAAU,QAAQ,eAAiB,CAAC,EAAA,CAAG,OACjE,GAAO,IAAO,EAAgB,WAAW,EAC5C,EACA,MAAM,EAAM,gBAAgB,CAC1B,KAAM,QACN,IAAK,aACL,OAAQ,EAAU,CAAC,GAAG,EAAO,EAAgB,WAAW,EAAE,EAAI,CAChE,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACH,CACF,EACA,CAAC,EACL,iBAAkB,CAChB,CACE,KAAM,CAAE,MAAO,CAAE,aAAc,QAAS,CAAE,EAC1C,aAAc,CAAC,EAA+B,GAAG,CAAwB,CAC3E,CACF,EACA,UAAW,CACT,CACE,KAAM,CAAE,MAAO,CAAE,aAAc,QAAS,EAAG,YAAa,CAAE,KAAM,QAAS,KAAM,QAAS,CAAE,EAC1F,KAAM,oBACN,KAAM,QACN,SAAY,EAAiB,CAC/B,CACF,EACA,MAAO,EAAkB,EAAoB,GAAS,OAAO,CAAC,CAAC,CAAC,IAAK,IAAU,CAC7E,GAAG,EACH,KAAM,CAAE,MAAO,CAAE,aAAc,QAAS,EAAG,YAAa,CAAE,KAAM,QAAS,KAAM,QAAS,CAAE,CAC5F,EAAE,EACF,SAAU,CAAC,EAAoB,CAAC,EAChC,MAAO,CACL,CACE,KAAM,CAAE,MAAO,CAAE,aAAc,QAAS,EAAG,YAAa,CAAE,KAAM,QAAS,KAAM,QAAS,CAAE,EAC1F,MAAO,qBACP,OAAO,EAAO,CAEZ,MAAO,CAAE,aAAc,GADF,OAAO,EAAM,cAAiB,SAAW,EAAM,aAAe,GAC5C,MAAM,IAAkB,KAAK,CAAE,CACxE,CACF,CACF,CACF,CACF,CACF,CAAC"}
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./schemas/authorTools.cjs"),t=require("./types/author.cjs"),n=require("./tools/authorTools.cjs"),r=require("./services/authorCatalog/index.cjs"),i=require("./models/authorBridgeState.cjs"),a=require("./models/authorMode.cjs"),o=require("./services/authorCatalog/monitor.cjs"),s=require("./controllers/doomAuthorCommand.cjs"),c=require("./services/structuredDocuments/csv.cjs"),l=require("./services/structuredDocuments/markdownSlides.cjs"),u=require("./services/structuredDocuments/ooxmlArchive.cjs"),d=require("./services/structuredDocuments/pptx.cjs"),f=require("./services/structuredDocuments/xlsx.cjs"),p=require("./services/structuredDocuments/index.cjs");exports.AUTHOR_MODE_ID=t.AUTHOR_MODE_ID,exports.AUTHOR_OWNER_LEASE_MS=i.AUTHOR_OWNER_LEASE_MS,exports.AUTHOR_REQUEST_TIMEOUT_MS=i.AUTHOR_REQUEST_TIMEOUT_MS,exports.AuthorBridgeError=i.AuthorBridgeError,exports.DescribeAuthorToolsInputSchema=e.DescribeAuthorToolsInputSchema,exports.UseAuthorToolInputSchema=e.UseAuthorToolInputSchema,exports.authorMinorMode=a.authorMinorMode,exports.authorToolRestriction=o.authorToolRestriction,exports.createAuthorBridgeState=i.createAuthorBridgeState,exports.createAuthorCatalog=r.createAuthorCatalog,exports.createAuthorCatalogMonitor=o.createAuthorCatalogMonitor,exports.createAuthorCommand=s.createAuthorCommand,exports.createAuthorTools=n.createAuthorTools,exports.parseCsv=c.parseCsv,exports.parseDescribeAuthorToolsInput=e.parseDescribeAuthorToolsInput,exports.parseMarkdownSlides=l.parseMarkdownSlides,exports.parsePptx=d.parsePptx,exports.parseStructuredDocument=p.parseStructuredDocument,exports.parseUseAuthorToolInput=e.parseUseAuthorToolInput,exports.parseXlsx=f.parseXlsx,exports.preflightCsv=c.preflightCsv,exports.preflightMarkdownSlides=l.preflightMarkdownSlides,exports.preflightPptx=d.preflightPptx,exports.preflightStructuredDocument=p.preflightStructuredDocument,exports.preflightXlsx=f.preflightXlsx,exports.readOoxmlArchive=u.readOoxmlArchive,exports.serializeCsv=c.serializeCsv,exports.serializeMarkdownSlides=l.serializeMarkdownSlides,exports.serializePptx=d.serializePptx,exports.serializeStructuredDocument=p.serializeStructuredDocument,exports.serializeXlsx=f.serializeXlsx;
@@ -0,0 +1,20 @@
1
+ import { AUTHOR_MODE_ID, AuthorJsonSchema, AuthorModeActivation, AuthorModeSnapshot, AuthorOpenFileResult, AuthorToolResult, AuthorViewportCapability, AuthorViewportCapabilityDescriptor, AuthorViewportCatalogSnapshot, OPEN_AUTHORING_FILE_TOOL_NAME, UseAuthorToolInput } from "./types/author.cjs";
2
+ import { AuthorCatalog } from "./services/authorCatalog/type.cjs";
3
+ import { createAuthorTools } from "./tools/authorTools.cjs";
4
+ import { DescribeAuthorToolsInputSchema, UseAuthorToolInputSchema, parseDescribeAuthorToolsInput, parseUseAuthorToolInput } from "./schemas/authorTools.cjs";
5
+ import { createAuthorCatalog } from "./services/authorCatalog/index.cjs";
6
+ import { AuthorAcceptedMessage, AuthorBrowserMessage, AuthorCancelMessage, AuthorCancelledMessage, AuthorCatalogMessage, AuthorHubMessage, AuthorRegisterMessage, AuthorRejectedMessage, AuthorReleaseMessage, AuthorRequestMessage, AuthorResultMessage, AuthorWebView, authorChannelType } from "./types/webAuthor.cjs";
7
+ import { AUTHOR_OWNER_LEASE_MS, AUTHOR_REQUEST_TIMEOUT_MS, AuthorBridgeError, AuthorBridgeState, AuthorBridgeStateOptions, createAuthorBridgeState } from "./models/authorBridgeState.cjs";
8
+ import { authorMinorMode } from "./models/authorMode.cjs";
9
+ import { AuthorCatalogMonitor, AuthorModeMonitorClock, authorToolRestriction, createAuthorCatalogMonitor } from "./services/authorCatalog/monitor.cjs";
10
+ import { AuthorExtensionDependencies, AuthorExtensionResult, AuthorExtensionService, AuthorNotificationLevel } from "./types/extension.cjs";
11
+ import { createAuthorCommand } from "./controllers/doomAuthorCommand.cjs";
12
+ import { CsvDialect, DocumentFragment, DocumentManifest, DocumentOperation, DocumentOperationLogEntry, DocumentPreflightIssue, DocumentPreflightReport, DocumentRenderModel, ParsedStructuredDocument, SerializedStructuredDocument, StructuredDocumentFormat } from "./types/structuredDocuments.cjs";
13
+ import { parseCsv, preflightCsv, serializeCsv } from "./services/structuredDocuments/csv.cjs";
14
+ import { parseMarkdownSlides, preflightMarkdownSlides, serializeMarkdownSlides } from "./services/structuredDocuments/markdownSlides.cjs";
15
+ import { readOoxmlArchive } from "./services/structuredDocuments/ooxmlArchive.cjs";
16
+ import { parsePptx, preflightPptx, serializePptx } from "./services/structuredDocuments/pptx.cjs";
17
+ import { parseXlsx, preflightXlsx, serializeXlsx } from "./services/structuredDocuments/xlsx.cjs";
18
+ import { parseStructuredDocument, preflightStructuredDocument, serializeStructuredDocument } from "./services/structuredDocuments/index.cjs";
19
+ import { API_BASE_PATH, AUTHOR_BRIDGE_ROUTES, AUTHOR_STATE_PATH, AuthorSessionView, SESSION_QUERY_PARAM, authorStateUrl } from "./types/authorApi.cjs";
20
+ export { type API_BASE_PATH, type AUTHOR_BRIDGE_ROUTES, AUTHOR_MODE_ID, AUTHOR_OWNER_LEASE_MS, AUTHOR_REQUEST_TIMEOUT_MS, type AUTHOR_STATE_PATH, type AuthorAcceptedMessage, AuthorBridgeError, type AuthorBridgeState, type AuthorBridgeStateOptions, type AuthorBrowserMessage, type AuthorCancelMessage, type AuthorCancelledMessage, type AuthorCatalog, type AuthorCatalogMessage, type AuthorCatalogMonitor, type AuthorExtensionDependencies, type AuthorExtensionResult, type AuthorExtensionService, type AuthorHubMessage, type AuthorJsonSchema, type AuthorModeActivation, type AuthorModeMonitorClock, type AuthorModeSnapshot, type AuthorNotificationLevel, type AuthorOpenFileResult, type AuthorRegisterMessage, type AuthorRejectedMessage, type AuthorReleaseMessage, type AuthorRequestMessage, type AuthorResultMessage, type AuthorSessionView, type AuthorToolResult, type AuthorViewportCapability, type AuthorViewportCapabilityDescriptor, type AuthorViewportCatalogSnapshot, type AuthorWebView, type CsvDialect, DescribeAuthorToolsInputSchema, type DocumentFragment, type DocumentManifest, type DocumentOperation, type DocumentOperationLogEntry, type DocumentPreflightIssue, type DocumentPreflightReport, type DocumentRenderModel, type OPEN_AUTHORING_FILE_TOOL_NAME, type ParsedStructuredDocument, type SESSION_QUERY_PARAM, type SerializedStructuredDocument, type StructuredDocumentFormat, type UseAuthorToolInput, UseAuthorToolInputSchema, type authorChannelType, authorMinorMode, type authorStateUrl, authorToolRestriction, createAuthorBridgeState, createAuthorCatalog, createAuthorCatalogMonitor, createAuthorCommand, createAuthorTools, parseCsv, parseDescribeAuthorToolsInput, parseMarkdownSlides, parsePptx, parseStructuredDocument, parseUseAuthorToolInput, parseXlsx, preflightCsv, preflightMarkdownSlides, preflightPptx, preflightStructuredDocument, preflightXlsx, readOoxmlArchive, serializeCsv, serializeMarkdownSlides, serializePptx, serializeStructuredDocument, serializeXlsx };
@@ -0,0 +1,20 @@
1
+ import { AUTHOR_MODE_ID, AuthorJsonSchema, AuthorModeActivation, AuthorModeSnapshot, AuthorOpenFileResult, AuthorToolResult, AuthorViewportCapability, AuthorViewportCapabilityDescriptor, AuthorViewportCatalogSnapshot, OPEN_AUTHORING_FILE_TOOL_NAME, UseAuthorToolInput } from "./types/author.mjs";
2
+ import { AuthorCatalog } from "./services/authorCatalog/type.mjs";
3
+ import { createAuthorTools } from "./tools/authorTools.mjs";
4
+ import { DescribeAuthorToolsInputSchema, UseAuthorToolInputSchema, parseDescribeAuthorToolsInput, parseUseAuthorToolInput } from "./schemas/authorTools.mjs";
5
+ import { createAuthorCatalog } from "./services/authorCatalog/index.mjs";
6
+ import { AuthorAcceptedMessage, AuthorBrowserMessage, AuthorCancelMessage, AuthorCancelledMessage, AuthorCatalogMessage, AuthorHubMessage, AuthorRegisterMessage, AuthorRejectedMessage, AuthorReleaseMessage, AuthorRequestMessage, AuthorResultMessage, AuthorWebView, authorChannelType } from "./types/webAuthor.mjs";
7
+ import { AUTHOR_OWNER_LEASE_MS, AUTHOR_REQUEST_TIMEOUT_MS, AuthorBridgeError, AuthorBridgeState, AuthorBridgeStateOptions, createAuthorBridgeState } from "./models/authorBridgeState.mjs";
8
+ import { authorMinorMode } from "./models/authorMode.mjs";
9
+ import { AuthorCatalogMonitor, AuthorModeMonitorClock, authorToolRestriction, createAuthorCatalogMonitor } from "./services/authorCatalog/monitor.mjs";
10
+ import { AuthorExtensionDependencies, AuthorExtensionResult, AuthorExtensionService, AuthorNotificationLevel } from "./types/extension.mjs";
11
+ import { createAuthorCommand } from "./controllers/doomAuthorCommand.mjs";
12
+ import { CsvDialect, DocumentFragment, DocumentManifest, DocumentOperation, DocumentOperationLogEntry, DocumentPreflightIssue, DocumentPreflightReport, DocumentRenderModel, ParsedStructuredDocument, SerializedStructuredDocument, StructuredDocumentFormat } from "./types/structuredDocuments.mjs";
13
+ import { parseCsv, preflightCsv, serializeCsv } from "./services/structuredDocuments/csv.mjs";
14
+ import { parseMarkdownSlides, preflightMarkdownSlides, serializeMarkdownSlides } from "./services/structuredDocuments/markdownSlides.mjs";
15
+ import { readOoxmlArchive } from "./services/structuredDocuments/ooxmlArchive.mjs";
16
+ import { parsePptx, preflightPptx, serializePptx } from "./services/structuredDocuments/pptx.mjs";
17
+ import { parseXlsx, preflightXlsx, serializeXlsx } from "./services/structuredDocuments/xlsx.mjs";
18
+ import { parseStructuredDocument, preflightStructuredDocument, serializeStructuredDocument } from "./services/structuredDocuments/index.mjs";
19
+ import { API_BASE_PATH, AUTHOR_BRIDGE_ROUTES, AUTHOR_STATE_PATH, AuthorSessionView, SESSION_QUERY_PARAM, authorStateUrl } from "./types/authorApi.mjs";
20
+ export { type API_BASE_PATH, type AUTHOR_BRIDGE_ROUTES, AUTHOR_MODE_ID, AUTHOR_OWNER_LEASE_MS, AUTHOR_REQUEST_TIMEOUT_MS, type AUTHOR_STATE_PATH, type AuthorAcceptedMessage, AuthorBridgeError, type AuthorBridgeState, type AuthorBridgeStateOptions, type AuthorBrowserMessage, type AuthorCancelMessage, type AuthorCancelledMessage, type AuthorCatalog, type AuthorCatalogMessage, type AuthorCatalogMonitor, type AuthorExtensionDependencies, type AuthorExtensionResult, type AuthorExtensionService, type AuthorHubMessage, type AuthorJsonSchema, type AuthorModeActivation, type AuthorModeMonitorClock, type AuthorModeSnapshot, type AuthorNotificationLevel, type AuthorOpenFileResult, type AuthorRegisterMessage, type AuthorRejectedMessage, type AuthorReleaseMessage, type AuthorRequestMessage, type AuthorResultMessage, type AuthorSessionView, type AuthorToolResult, type AuthorViewportCapability, type AuthorViewportCapabilityDescriptor, type AuthorViewportCatalogSnapshot, type AuthorWebView, type CsvDialect, DescribeAuthorToolsInputSchema, type DocumentFragment, type DocumentManifest, type DocumentOperation, type DocumentOperationLogEntry, type DocumentPreflightIssue, type DocumentPreflightReport, type DocumentRenderModel, type OPEN_AUTHORING_FILE_TOOL_NAME, type ParsedStructuredDocument, type SESSION_QUERY_PARAM, type SerializedStructuredDocument, type StructuredDocumentFormat, type UseAuthorToolInput, UseAuthorToolInputSchema, type authorChannelType, authorMinorMode, type authorStateUrl, authorToolRestriction, createAuthorBridgeState, createAuthorCatalog, createAuthorCatalogMonitor, createAuthorCommand, createAuthorTools, parseCsv, parseDescribeAuthorToolsInput, parseMarkdownSlides, parsePptx, parseStructuredDocument, parseUseAuthorToolInput, parseXlsx, preflightCsv, preflightMarkdownSlides, preflightPptx, preflightStructuredDocument, preflightXlsx, readOoxmlArchive, serializeCsv, serializeMarkdownSlides, serializePptx, serializeStructuredDocument, serializeXlsx };
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ import{DescribeAuthorToolsInputSchema as e,UseAuthorToolInputSchema as t,parseDescribeAuthorToolsInput as n,parseUseAuthorToolInput as r}from"./schemas/authorTools.mjs";import{AUTHOR_MODE_ID as i}from"./types/author.mjs";import{createAuthorTools as a}from"./tools/authorTools.mjs";import{createAuthorCatalog as o}from"./services/authorCatalog/index.mjs";import{AUTHOR_OWNER_LEASE_MS as s,AUTHOR_REQUEST_TIMEOUT_MS as c,AuthorBridgeError as l,createAuthorBridgeState as u}from"./models/authorBridgeState.mjs";import{authorMinorMode as d}from"./models/authorMode.mjs";import{authorToolRestriction as f,createAuthorCatalogMonitor as p}from"./services/authorCatalog/monitor.mjs";import{createAuthorCommand as m}from"./controllers/doomAuthorCommand.mjs";import{parseCsv as h,preflightCsv as g,serializeCsv as _}from"./services/structuredDocuments/csv.mjs";import{parseMarkdownSlides as v,preflightMarkdownSlides as y,serializeMarkdownSlides as b}from"./services/structuredDocuments/markdownSlides.mjs";import{readOoxmlArchive as x}from"./services/structuredDocuments/ooxmlArchive.mjs";import{parsePptx as S,preflightPptx as C,serializePptx as w}from"./services/structuredDocuments/pptx.mjs";import{parseXlsx as T,preflightXlsx as E,serializeXlsx as D}from"./services/structuredDocuments/xlsx.mjs";import{parseStructuredDocument as O,preflightStructuredDocument as k,serializeStructuredDocument as A}from"./services/structuredDocuments/index.mjs";export{i as AUTHOR_MODE_ID,s as AUTHOR_OWNER_LEASE_MS,c as AUTHOR_REQUEST_TIMEOUT_MS,l as AuthorBridgeError,e as DescribeAuthorToolsInputSchema,t as UseAuthorToolInputSchema,d as authorMinorMode,f as authorToolRestriction,u as createAuthorBridgeState,o as createAuthorCatalog,p as createAuthorCatalogMonitor,m as createAuthorCommand,a as createAuthorTools,h as parseCsv,n as parseDescribeAuthorToolsInput,v as parseMarkdownSlides,S as parsePptx,O as parseStructuredDocument,r as parseUseAuthorToolInput,T as parseXlsx,g as preflightCsv,y as preflightMarkdownSlides,C as preflightPptx,k as preflightStructuredDocument,E as preflightXlsx,x as readOoxmlArchive,_ as serializeCsv,b as serializeMarkdownSlides,w as serializePptx,A as serializeStructuredDocument,D as serializeXlsx};
@@ -0,0 +1,2 @@
1
+ var e=class extends Error{status;constructor(e,t=409){super(e),this.status=t}};function t(t){let{now:n,issueToken:r,scheduleTimeout:i}=t,a=t.requestTimeoutMs??15e3,o=t.leaseMs??1e4,s,c,l,u,d=new Set,f=e=>{d.add(e),d.size>100&&d.delete(d.values().next().value)},p=e=>{if(u===void 0)l=e;else{let t=u;u=void 0,t.resolve(e)}},m=(t,n)=>{let r=c;r!==void 0&&(c=void 0,r.cancelTimer(),r.removeAbort?.(),f(r.request.requestId),n&&p({...r.request,kind:`cancel`}),r.reject(new e(t,503)))},h=()=>{if(s===void 0)throw new e(`No Author viewport is registered.`,503);if(s.expiresAt<=n())throw m(`The Author viewport lease expired.`,!1),s=void 0,new e(`The Author viewport lease expired.`,503);return s},g=(t,n,r)=>{let i=h();if(i.bindingId!==t||i.generation!==n||i.ownerToken!==r)throw new e(`Stale Author viewport binding.`);return i},_=(t,n,r,i,a)=>{if(g(t,n,r).catalogToken!==i)throw new e(`Stale Author catalog token.`);if(d.has(a))throw new e(`The Author request was already cancelled.`);if(c?.request.requestId!==a)throw new e(`Stale Author request.`);return c};return{register(t,i){if(t===``||!Number.isSafeInteger(i)||i<0)throw new e(`Invalid Author registration.`,400);if(s!==void 0&&s.expiresAt>n()){if(s.bindingId!==t)throw new e(`Another Author viewport owns the lease.`);if(i<s.generation)throw new e(`Stale Author generation.`);if(i===s.generation)return s.expiresAt=n()+o,{kind:`accepted`,generation:i,ownerToken:s.ownerToken,...s.catalogToken===void 0?{}:{catalogToken:s.catalogToken},leaseMs:o}}m(`The Author viewport generation changed.`,!1),l=void 0;let a={bindingId:t,generation:i,ownerToken:r(),expiresAt:n()+o,tools:[]};return s=a,{kind:`accepted`,generation:i,ownerToken:a.ownerToken,leaseMs:o}},catalog(t,i,a,s){let l=g(t,i,a);if(!Array.isArray(s)||s.length>15)throw new e(`Invalid Author catalog.`,400);let u=new Set;for(let t of s){if(typeof t!=`object`||!t||typeof t.name!=`string`||!/^[a-z][a-z0-9_]{0,29}$/.test(t.name)||typeof t.label!=`string`||typeof t.description!=`string`||typeof t.inputSchema!=`object`||t.inputSchema===null||Array.isArray(t.inputSchema)||u.has(t.name))throw new e(`Invalid Author catalog.`,400);u.add(t.name)}if(c!==void 0)throw new e(`Cannot replace the Author catalog during a request.`);return l.tools=s.map(e=>({...e,inputSchema:{...e.inputSchema}})),l.catalogToken=r(),l.expiresAt=n()+o,{kind:`accepted`,generation:i,ownerToken:a,catalogToken:l.catalogToken,leaseMs:o}},describe(){let t=h();if(t.catalogToken===void 0)throw new e(`The Author viewport has no catalog.`,503);return{catalogToken:t.catalogToken,tools:t.tools}},invoke(t,o){let s;try{if(s=h(),s.catalogToken!==t.catalogToken)throw new e(`The Author capability catalog changed.`);if(!s.tools.some(e=>e.name===t.name))throw new e(`Unknown Author capability: ${t.name}`,404);if(c!==void 0)throw new e(`Another Author request is already pending.`);if(o?.aborted)throw o.reason instanceof Error?o.reason:Error(`Author request cancelled.`)}catch(e){return Promise.reject(e)}let l={kind:`request`,generation:s.generation,ownerToken:s.ownerToken,catalogToken:s.catalogToken,requestId:r(),name:t.name,arguments:t.arguments};return new Promise((e,t)=>{let r=e=>m(e,!0),u=i(()=>r(`The Author request timed out.`),Math.min(a,s.expiresAt-n()));if(c={request:l,resolve:e,reject:t,cancelTimer:u},o!==void 0){let e=()=>r(`The Author request was cancelled.`);o.addEventListener(`abort`,e,{once:!0}),c.removeAbort=()=>o.removeEventListener(`abort`,e)}p(l)})},async next(t,n,r,i){if(g(t,n,r),l!==void 0){let e=l;return l=void 0,e}if(u!==void 0)throw new e(`An Author delivery poll is already active.`);return await new Promise((e,t)=>{let n,r=()=>{u===n&&(u=void 0),t(i?.reason??Error(`Author delivery poll cancelled.`))};n={resolve(t){i?.removeEventListener(`abort`,r),e(t)},reject:t},u=n,i?.addEventListener(`abort`,r,{once:!0})})},result(e,t,n,r,i,a){let o=_(e,t,n,r,i);c=void 0,o.cancelTimer(),o.removeAbort?.(),o.resolve({catalogToken:r,name:o.request.name,result:a})},cancelled(t,n,r,i,a){let o=_(t,n,r,i,a);c=void 0,o.cancelTimer(),o.removeAbort?.(),f(a),o.reject(new e(`The Author viewport cancelled the request.`))},disconnect(e,t){s?.bindingId===e&&s.generation===t&&(m(`The Author viewport disconnected.`,!1),s=void 0,l=void 0)},close(){m(`The Author bridge closed.`,!1),s=void 0,l=void 0,u?.reject(Error(`The Author bridge closed.`)),u=void 0}}}exports.AUTHOR_OWNER_LEASE_MS=1e4,exports.AUTHOR_REQUEST_TIMEOUT_MS=15e3,exports.AuthorBridgeError=e,exports.createAuthorBridgeState=t;
2
+ //# sourceMappingURL=authorBridgeState.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorBridgeState.cjs","names":[],"sources":["../../src/models/authorBridgeState.ts"],"sourcesContent":["import type {\n AuthorToolResult,\n AuthorViewportCapabilityDescriptor,\n AuthorViewportCatalogSnapshot,\n UseAuthorToolInput,\n} from '../types/author';\nimport type { AuthorAcceptedMessage, AuthorCancelMessage, AuthorRequestMessage } from '../types/webAuthor';\n\nexport const AUTHOR_REQUEST_TIMEOUT_MS = 15_000;\nexport const AUTHOR_OWNER_LEASE_MS = 10_000;\n\nexport class AuthorBridgeError extends Error {\n public constructor(\n message: string,\n public readonly status: 400 | 404 | 409 | 503 = 409,\n ) {\n super(message);\n }\n}\n\ninterface Owner {\n bindingId: string;\n generation: number;\n ownerToken: string;\n expiresAt: number;\n catalogToken?: string;\n tools: AuthorViewportCapabilityDescriptor[];\n}\n\ninterface Pending {\n request: AuthorRequestMessage;\n resolve(value: AuthorToolResult): void;\n reject(error: Error): void;\n cancelTimer(): void;\n removeAbort?: () => void;\n}\n\ntype Delivery = AuthorRequestMessage | AuthorCancelMessage;\n\nexport interface AuthorBridgeStateOptions {\n now: () => number;\n issueToken: () => string;\n scheduleTimeout: (callback: () => void, delayMs: number) => () => void;\n requestTimeoutMs?: number;\n leaseMs?: number;\n}\n\nexport interface AuthorBridgeState {\n register(bindingId: string, generation: number): AuthorAcceptedMessage;\n catalog(\n bindingId: string,\n generation: number,\n ownerToken: string,\n tools: AuthorViewportCapabilityDescriptor[],\n ): AuthorAcceptedMessage;\n describe(): AuthorViewportCatalogSnapshot;\n invoke(input: UseAuthorToolInput, signal?: AbortSignal): Promise<AuthorToolResult>;\n next(bindingId: string, generation: number, ownerToken: string, signal?: AbortSignal): Promise<Delivery>;\n result(\n bindingId: string,\n generation: number,\n ownerToken: string,\n catalogToken: string,\n requestId: string,\n result: unknown,\n ): void;\n cancelled(bindingId: string, generation: number, ownerToken: string, catalogToken: string, requestId: string): void;\n disconnect(bindingId: string, generation: number): void;\n close(): void;\n}\n\nexport function createAuthorBridgeState(options: AuthorBridgeStateOptions): AuthorBridgeState {\n const { now, issueToken, scheduleTimeout } = options;\n const timeoutMs = options.requestTimeoutMs ?? AUTHOR_REQUEST_TIMEOUT_MS;\n const leaseMs = options.leaseMs ?? AUTHOR_OWNER_LEASE_MS;\n let owner: Owner | undefined;\n let pending: Pending | undefined;\n let delivery: Delivery | undefined;\n let deliveryWaiter: { resolve(value: Delivery): void; reject(error: Error): void } | undefined;\n const tombstones = new Set<string>();\n\n const rememberCancellation = (requestId: string): void => {\n tombstones.add(requestId);\n if (tombstones.size > 100) tombstones.delete(tombstones.values().next().value!);\n };\n const publishDelivery = (value: Delivery): void => {\n if (deliveryWaiter === undefined) delivery = value;\n else {\n const waiter = deliveryWaiter;\n deliveryWaiter = undefined;\n waiter.resolve(value);\n }\n };\n const rejectPending = (reason: string, sendCancel: boolean): void => {\n const current = pending;\n if (current === undefined) return;\n pending = undefined;\n current.cancelTimer();\n current.removeAbort?.();\n rememberCancellation(current.request.requestId);\n if (sendCancel) publishDelivery({ ...current.request, kind: 'cancel' });\n current.reject(new AuthorBridgeError(reason, 503));\n };\n const liveOwner = (): Owner => {\n if (owner === undefined) throw new AuthorBridgeError('No Author viewport is registered.', 503);\n if (owner.expiresAt <= now()) {\n rejectPending('The Author viewport lease expired.', false);\n owner = undefined;\n throw new AuthorBridgeError('The Author viewport lease expired.', 503);\n }\n return owner;\n };\n const assertOwner = (bindingId: string, generation: number, ownerToken: string): Owner => {\n const current = liveOwner();\n if (current.bindingId !== bindingId || current.generation !== generation || current.ownerToken !== ownerToken) {\n throw new AuthorBridgeError('Stale Author viewport binding.');\n }\n return current;\n };\n const assertRequest = (\n bindingId: string,\n generation: number,\n ownerToken: string,\n catalogToken: string,\n requestId: string,\n ): Pending => {\n const currentOwner = assertOwner(bindingId, generation, ownerToken);\n if (currentOwner.catalogToken !== catalogToken) throw new AuthorBridgeError('Stale Author catalog token.');\n if (tombstones.has(requestId)) throw new AuthorBridgeError('The Author request was already cancelled.');\n if (pending?.request.requestId !== requestId) throw new AuthorBridgeError('Stale Author request.');\n return pending;\n };\n\n return {\n register(bindingId, generation) {\n if (bindingId === '' || !Number.isSafeInteger(generation) || generation < 0) {\n throw new AuthorBridgeError('Invalid Author registration.', 400);\n }\n if (owner !== undefined && owner.expiresAt > now()) {\n if (owner.bindingId !== bindingId) throw new AuthorBridgeError('Another Author viewport owns the lease.');\n if (generation < owner.generation) throw new AuthorBridgeError('Stale Author generation.');\n if (generation === owner.generation) {\n owner.expiresAt = now() + leaseMs;\n return {\n kind: 'accepted',\n generation,\n ownerToken: owner.ownerToken,\n ...(owner.catalogToken === undefined ? {} : { catalogToken: owner.catalogToken }),\n leaseMs,\n };\n }\n }\n rejectPending('The Author viewport generation changed.', false);\n delivery = undefined;\n const current: Owner = {\n bindingId,\n generation,\n ownerToken: issueToken(),\n expiresAt: now() + leaseMs,\n tools: [],\n };\n owner = current;\n return { kind: 'accepted', generation, ownerToken: current.ownerToken, leaseMs };\n },\n catalog(bindingId, generation, ownerToken, tools) {\n const current = assertOwner(bindingId, generation, ownerToken);\n if (!Array.isArray(tools) || tools.length > 15) throw new AuthorBridgeError('Invalid Author catalog.', 400);\n const names = new Set<string>();\n for (const tool of tools) {\n if (\n typeof tool !== 'object' ||\n tool === null ||\n typeof tool.name !== 'string' ||\n !/^[a-z][a-z0-9_]{0,29}$/.test(tool.name) ||\n typeof tool.label !== 'string' ||\n typeof tool.description !== 'string' ||\n typeof tool.inputSchema !== 'object' ||\n tool.inputSchema === null ||\n Array.isArray(tool.inputSchema) ||\n names.has(tool.name)\n ) {\n throw new AuthorBridgeError('Invalid Author catalog.', 400);\n }\n names.add(tool.name);\n }\n if (pending !== undefined) throw new AuthorBridgeError('Cannot replace the Author catalog during a request.');\n current.tools = tools.map((tool) => ({ ...tool, inputSchema: { ...tool.inputSchema } }));\n current.catalogToken = issueToken();\n current.expiresAt = now() + leaseMs;\n return {\n kind: 'accepted',\n generation,\n ownerToken,\n catalogToken: current.catalogToken,\n leaseMs,\n };\n },\n describe() {\n const current = liveOwner();\n if (current.catalogToken === undefined) throw new AuthorBridgeError('The Author viewport has no catalog.', 503);\n return { catalogToken: current.catalogToken, tools: current.tools };\n },\n invoke(input, signal) {\n let current: Owner;\n try {\n current = liveOwner();\n if (current.catalogToken !== input.catalogToken)\n throw new AuthorBridgeError('The Author capability catalog changed.');\n if (!current.tools.some((tool) => tool.name === input.name)) {\n throw new AuthorBridgeError(`Unknown Author capability: ${input.name}`, 404);\n }\n if (pending !== undefined) throw new AuthorBridgeError('Another Author request is already pending.');\n if (signal?.aborted)\n throw signal.reason instanceof Error ? signal.reason : new Error('Author request cancelled.');\n } catch (error) {\n return Promise.reject(error);\n }\n const request: AuthorRequestMessage = {\n kind: 'request',\n generation: current.generation,\n ownerToken: current.ownerToken,\n catalogToken: current.catalogToken!,\n requestId: issueToken(),\n name: input.name,\n arguments: input.arguments,\n };\n return new Promise<AuthorToolResult>((resolve, reject) => {\n const cancel = (reason: string): void => rejectPending(reason, true);\n const cancelTimer = scheduleTimeout(\n () => cancel('The Author request timed out.'),\n Math.min(timeoutMs, current.expiresAt - now()),\n );\n pending = { request, resolve, reject, cancelTimer };\n if (signal !== undefined) {\n const onAbort = () => cancel('The Author request was cancelled.');\n signal.addEventListener('abort', onAbort, { once: true });\n pending.removeAbort = () => signal.removeEventListener('abort', onAbort);\n }\n publishDelivery(request);\n });\n },\n async next(bindingId, generation, ownerToken, signal) {\n assertOwner(bindingId, generation, ownerToken);\n if (delivery !== undefined) {\n const value = delivery;\n delivery = undefined;\n return value;\n }\n if (deliveryWaiter !== undefined) throw new AuthorBridgeError('An Author delivery poll is already active.');\n return await new Promise<Delivery>((resolve, reject) => {\n let waiter: { resolve(value: Delivery): void; reject(error: Error): void };\n const onAbort = (): void => {\n if (deliveryWaiter === waiter) deliveryWaiter = undefined;\n reject(signal?.reason ?? new Error('Author delivery poll cancelled.'));\n };\n waiter = {\n resolve(value) {\n signal?.removeEventListener('abort', onAbort);\n resolve(value);\n },\n reject,\n };\n deliveryWaiter = waiter;\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n },\n result(bindingId, generation, ownerToken, catalogToken, requestId, result) {\n const current = assertRequest(bindingId, generation, ownerToken, catalogToken, requestId);\n pending = undefined;\n current.cancelTimer();\n current.removeAbort?.();\n current.resolve({ catalogToken, name: current.request.name, result });\n },\n cancelled(bindingId, generation, ownerToken, catalogToken, requestId) {\n const current = assertRequest(bindingId, generation, ownerToken, catalogToken, requestId);\n pending = undefined;\n current.cancelTimer();\n current.removeAbort?.();\n rememberCancellation(requestId);\n current.reject(new AuthorBridgeError('The Author viewport cancelled the request.'));\n },\n disconnect(bindingId, generation) {\n if (owner?.bindingId !== bindingId || owner.generation !== generation) return;\n rejectPending('The Author viewport disconnected.', false);\n owner = undefined;\n delivery = undefined;\n },\n close() {\n rejectPending('The Author bridge closed.', false);\n owner = undefined;\n delivery = undefined;\n deliveryWaiter?.reject(new Error('The Author bridge closed.'));\n deliveryWaiter = undefined;\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { AuthorToolResult, AuthorViewportCapabilityDescriptor, AuthorViewportCatalogSnapshot, UseAuthorToolInput } from "../types/author.cjs";
2
+ import { AuthorAcceptedMessage, AuthorCancelMessage, AuthorRequestMessage } from "../types/webAuthor.cjs";
3
+ //#region src/models/authorBridgeState.d.ts
4
+ export declare const AUTHOR_REQUEST_TIMEOUT_MS = 15000;
5
+ export declare const AUTHOR_OWNER_LEASE_MS = 10000;
6
+ export declare class AuthorBridgeError extends Error {
7
+ readonly status: 400 | 404 | 409 | 503;
8
+ constructor(message: string, status?: 400 | 404 | 409 | 503);
9
+ }
10
+ type Delivery = AuthorRequestMessage | AuthorCancelMessage;
11
+ export interface AuthorBridgeStateOptions {
12
+ now: () => number;
13
+ issueToken: () => string;
14
+ scheduleTimeout: (callback: () => void, delayMs: number) => () => void;
15
+ requestTimeoutMs?: number;
16
+ leaseMs?: number;
17
+ }
18
+ export interface AuthorBridgeState {
19
+ register(bindingId: string, generation: number): AuthorAcceptedMessage;
20
+ catalog(bindingId: string, generation: number, ownerToken: string, tools: AuthorViewportCapabilityDescriptor[]): AuthorAcceptedMessage;
21
+ describe(): AuthorViewportCatalogSnapshot;
22
+ invoke(input: UseAuthorToolInput, signal?: AbortSignal): Promise<AuthorToolResult>;
23
+ next(bindingId: string, generation: number, ownerToken: string, signal?: AbortSignal): Promise<Delivery>;
24
+ result(bindingId: string, generation: number, ownerToken: string, catalogToken: string, requestId: string, result: unknown): void;
25
+ cancelled(bindingId: string, generation: number, ownerToken: string, catalogToken: string, requestId: string): void;
26
+ disconnect(bindingId: string, generation: number): void;
27
+ close(): void;
28
+ }
29
+ export declare function createAuthorBridgeState(options: AuthorBridgeStateOptions): AuthorBridgeState;
30
+ //#endregion
31
+ //# sourceMappingURL=authorBridgeState.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorBridgeState.d.cts","names":[],"sources":["../../src/models/authorBridgeState.ts"],"mappings":";;;qBAQa;qBACA;qBAEA,0BAA0B;WAGnB;EAFlB,YACE,iBACgB;;KAuBf,WAAW,uBAAuB;iBAEtB;EACf;EACA;EACA,kBAAkB,sBAAsB;EACxC;EACA;;iBAGe;EACf,SAAS,mBAAmB,qBAAqB;EACjD,QACE,mBACA,oBACA,oBACA,OAAO,uCACN;EACH,YAAY;EACZ,OAAO,OAAO,oBAAoB,SAAS,cAAc,QAAQ;EACjE,KAAK,mBAAmB,oBAAoB,oBAAoB,SAAS,cAAc,QAAQ;EAC/F,OACE,mBACA,oBACA,oBACA,sBACA,mBACA;EAEF,UAAU,mBAAmB,oBAAoB,oBAAoB,sBAAsB;EAC3F,WAAW,mBAAmB;EAC9B;;wBAGc,wBAAwB,SAAS,2BAA2B"}
@@ -0,0 +1,31 @@
1
+ import { AuthorToolResult, AuthorViewportCapabilityDescriptor, AuthorViewportCatalogSnapshot, UseAuthorToolInput } from "../types/author.mjs";
2
+ import { AuthorAcceptedMessage, AuthorCancelMessage, AuthorRequestMessage } from "../types/webAuthor.mjs";
3
+ //#region src/models/authorBridgeState.d.ts
4
+ export declare const AUTHOR_REQUEST_TIMEOUT_MS = 15000;
5
+ export declare const AUTHOR_OWNER_LEASE_MS = 10000;
6
+ export declare class AuthorBridgeError extends Error {
7
+ readonly status: 400 | 404 | 409 | 503;
8
+ constructor(message: string, status?: 400 | 404 | 409 | 503);
9
+ }
10
+ type Delivery = AuthorRequestMessage | AuthorCancelMessage;
11
+ export interface AuthorBridgeStateOptions {
12
+ now: () => number;
13
+ issueToken: () => string;
14
+ scheduleTimeout: (callback: () => void, delayMs: number) => () => void;
15
+ requestTimeoutMs?: number;
16
+ leaseMs?: number;
17
+ }
18
+ export interface AuthorBridgeState {
19
+ register(bindingId: string, generation: number): AuthorAcceptedMessage;
20
+ catalog(bindingId: string, generation: number, ownerToken: string, tools: AuthorViewportCapabilityDescriptor[]): AuthorAcceptedMessage;
21
+ describe(): AuthorViewportCatalogSnapshot;
22
+ invoke(input: UseAuthorToolInput, signal?: AbortSignal): Promise<AuthorToolResult>;
23
+ next(bindingId: string, generation: number, ownerToken: string, signal?: AbortSignal): Promise<Delivery>;
24
+ result(bindingId: string, generation: number, ownerToken: string, catalogToken: string, requestId: string, result: unknown): void;
25
+ cancelled(bindingId: string, generation: number, ownerToken: string, catalogToken: string, requestId: string): void;
26
+ disconnect(bindingId: string, generation: number): void;
27
+ close(): void;
28
+ }
29
+ export declare function createAuthorBridgeState(options: AuthorBridgeStateOptions): AuthorBridgeState;
30
+ //#endregion
31
+ //# sourceMappingURL=authorBridgeState.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorBridgeState.d.mts","names":[],"sources":["../../src/models/authorBridgeState.ts"],"mappings":";;;qBAQa;qBACA;qBAEA,0BAA0B;WAGnB;EAFlB,YACE,iBACgB;;KAuBf,WAAW,uBAAuB;iBAEtB;EACf;EACA;EACA,kBAAkB,sBAAsB;EACxC;EACA;;iBAGe;EACf,SAAS,mBAAmB,qBAAqB;EACjD,QACE,mBACA,oBACA,oBACA,OAAO,uCACN;EACH,YAAY;EACZ,OAAO,OAAO,oBAAoB,SAAS,cAAc,QAAQ;EACjE,KAAK,mBAAmB,oBAAoB,oBAAoB,SAAS,cAAc,QAAQ;EAC/F,OACE,mBACA,oBACA,oBACA,sBACA,mBACA;EAEF,UAAU,mBAAmB,oBAAoB,oBAAoB,sBAAsB;EAC3F,WAAW,mBAAmB;EAC9B;;wBAGc,wBAAwB,SAAS,2BAA2B"}
@@ -0,0 +1,2 @@
1
+ const e=15e3,t=1e4;var n=class extends Error{status;constructor(e,t=409){super(e),this.status=t}};function r(e){let{now:t,issueToken:r,scheduleTimeout:i}=e,a=e.requestTimeoutMs??15e3,o=e.leaseMs??1e4,s,c,l,u,d=new Set,f=e=>{d.add(e),d.size>100&&d.delete(d.values().next().value)},p=e=>{if(u===void 0)l=e;else{let t=u;u=void 0,t.resolve(e)}},m=(e,t)=>{let r=c;r!==void 0&&(c=void 0,r.cancelTimer(),r.removeAbort?.(),f(r.request.requestId),t&&p({...r.request,kind:`cancel`}),r.reject(new n(e,503)))},h=()=>{if(s===void 0)throw new n(`No Author viewport is registered.`,503);if(s.expiresAt<=t())throw m(`The Author viewport lease expired.`,!1),s=void 0,new n(`The Author viewport lease expired.`,503);return s},g=(e,t,r)=>{let i=h();if(i.bindingId!==e||i.generation!==t||i.ownerToken!==r)throw new n(`Stale Author viewport binding.`);return i},_=(e,t,r,i,a)=>{if(g(e,t,r).catalogToken!==i)throw new n(`Stale Author catalog token.`);if(d.has(a))throw new n(`The Author request was already cancelled.`);if(c?.request.requestId!==a)throw new n(`Stale Author request.`);return c};return{register(e,i){if(e===``||!Number.isSafeInteger(i)||i<0)throw new n(`Invalid Author registration.`,400);if(s!==void 0&&s.expiresAt>t()){if(s.bindingId!==e)throw new n(`Another Author viewport owns the lease.`);if(i<s.generation)throw new n(`Stale Author generation.`);if(i===s.generation)return s.expiresAt=t()+o,{kind:`accepted`,generation:i,ownerToken:s.ownerToken,...s.catalogToken===void 0?{}:{catalogToken:s.catalogToken},leaseMs:o}}m(`The Author viewport generation changed.`,!1),l=void 0;let a={bindingId:e,generation:i,ownerToken:r(),expiresAt:t()+o,tools:[]};return s=a,{kind:`accepted`,generation:i,ownerToken:a.ownerToken,leaseMs:o}},catalog(e,i,a,s){let l=g(e,i,a);if(!Array.isArray(s)||s.length>15)throw new n(`Invalid Author catalog.`,400);let u=new Set;for(let e of s){if(typeof e!=`object`||!e||typeof e.name!=`string`||!/^[a-z][a-z0-9_]{0,29}$/.test(e.name)||typeof e.label!=`string`||typeof e.description!=`string`||typeof e.inputSchema!=`object`||e.inputSchema===null||Array.isArray(e.inputSchema)||u.has(e.name))throw new n(`Invalid Author catalog.`,400);u.add(e.name)}if(c!==void 0)throw new n(`Cannot replace the Author catalog during a request.`);return l.tools=s.map(e=>({...e,inputSchema:{...e.inputSchema}})),l.catalogToken=r(),l.expiresAt=t()+o,{kind:`accepted`,generation:i,ownerToken:a,catalogToken:l.catalogToken,leaseMs:o}},describe(){let e=h();if(e.catalogToken===void 0)throw new n(`The Author viewport has no catalog.`,503);return{catalogToken:e.catalogToken,tools:e.tools}},invoke(e,o){let s;try{if(s=h(),s.catalogToken!==e.catalogToken)throw new n(`The Author capability catalog changed.`);if(!s.tools.some(t=>t.name===e.name))throw new n(`Unknown Author capability: ${e.name}`,404);if(c!==void 0)throw new n(`Another Author request is already pending.`);if(o?.aborted)throw o.reason instanceof Error?o.reason:Error(`Author request cancelled.`)}catch(e){return Promise.reject(e)}let l={kind:`request`,generation:s.generation,ownerToken:s.ownerToken,catalogToken:s.catalogToken,requestId:r(),name:e.name,arguments:e.arguments};return new Promise((e,n)=>{let r=e=>m(e,!0),u=i(()=>r(`The Author request timed out.`),Math.min(a,s.expiresAt-t()));if(c={request:l,resolve:e,reject:n,cancelTimer:u},o!==void 0){let e=()=>r(`The Author request was cancelled.`);o.addEventListener(`abort`,e,{once:!0}),c.removeAbort=()=>o.removeEventListener(`abort`,e)}p(l)})},async next(e,t,r,i){if(g(e,t,r),l!==void 0){let e=l;return l=void 0,e}if(u!==void 0)throw new n(`An Author delivery poll is already active.`);return await new Promise((e,t)=>{let n,r=()=>{u===n&&(u=void 0),t(i?.reason??Error(`Author delivery poll cancelled.`))};n={resolve(t){i?.removeEventListener(`abort`,r),e(t)},reject:t},u=n,i?.addEventListener(`abort`,r,{once:!0})})},result(e,t,n,r,i,a){let o=_(e,t,n,r,i);c=void 0,o.cancelTimer(),o.removeAbort?.(),o.resolve({catalogToken:r,name:o.request.name,result:a})},cancelled(e,t,r,i,a){let o=_(e,t,r,i,a);c=void 0,o.cancelTimer(),o.removeAbort?.(),f(a),o.reject(new n(`The Author viewport cancelled the request.`))},disconnect(e,t){s?.bindingId===e&&s.generation===t&&(m(`The Author viewport disconnected.`,!1),s=void 0,l=void 0)},close(){m(`The Author bridge closed.`,!1),s=void 0,l=void 0,u?.reject(Error(`The Author bridge closed.`)),u=void 0}}}export{t as AUTHOR_OWNER_LEASE_MS,e as AUTHOR_REQUEST_TIMEOUT_MS,n as AuthorBridgeError,r as createAuthorBridgeState};
2
+ //# sourceMappingURL=authorBridgeState.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorBridgeState.mjs","names":[],"sources":["../../src/models/authorBridgeState.ts"],"sourcesContent":["import type {\n AuthorToolResult,\n AuthorViewportCapabilityDescriptor,\n AuthorViewportCatalogSnapshot,\n UseAuthorToolInput,\n} from '../types/author';\nimport type { AuthorAcceptedMessage, AuthorCancelMessage, AuthorRequestMessage } from '../types/webAuthor';\n\nexport const AUTHOR_REQUEST_TIMEOUT_MS = 15_000;\nexport const AUTHOR_OWNER_LEASE_MS = 10_000;\n\nexport class AuthorBridgeError extends Error {\n public constructor(\n message: string,\n public readonly status: 400 | 404 | 409 | 503 = 409,\n ) {\n super(message);\n }\n}\n\ninterface Owner {\n bindingId: string;\n generation: number;\n ownerToken: string;\n expiresAt: number;\n catalogToken?: string;\n tools: AuthorViewportCapabilityDescriptor[];\n}\n\ninterface Pending {\n request: AuthorRequestMessage;\n resolve(value: AuthorToolResult): void;\n reject(error: Error): void;\n cancelTimer(): void;\n removeAbort?: () => void;\n}\n\ntype Delivery = AuthorRequestMessage | AuthorCancelMessage;\n\nexport interface AuthorBridgeStateOptions {\n now: () => number;\n issueToken: () => string;\n scheduleTimeout: (callback: () => void, delayMs: number) => () => void;\n requestTimeoutMs?: number;\n leaseMs?: number;\n}\n\nexport interface AuthorBridgeState {\n register(bindingId: string, generation: number): AuthorAcceptedMessage;\n catalog(\n bindingId: string,\n generation: number,\n ownerToken: string,\n tools: AuthorViewportCapabilityDescriptor[],\n ): AuthorAcceptedMessage;\n describe(): AuthorViewportCatalogSnapshot;\n invoke(input: UseAuthorToolInput, signal?: AbortSignal): Promise<AuthorToolResult>;\n next(bindingId: string, generation: number, ownerToken: string, signal?: AbortSignal): Promise<Delivery>;\n result(\n bindingId: string,\n generation: number,\n ownerToken: string,\n catalogToken: string,\n requestId: string,\n result: unknown,\n ): void;\n cancelled(bindingId: string, generation: number, ownerToken: string, catalogToken: string, requestId: string): void;\n disconnect(bindingId: string, generation: number): void;\n close(): void;\n}\n\nexport function createAuthorBridgeState(options: AuthorBridgeStateOptions): AuthorBridgeState {\n const { now, issueToken, scheduleTimeout } = options;\n const timeoutMs = options.requestTimeoutMs ?? AUTHOR_REQUEST_TIMEOUT_MS;\n const leaseMs = options.leaseMs ?? AUTHOR_OWNER_LEASE_MS;\n let owner: Owner | undefined;\n let pending: Pending | undefined;\n let delivery: Delivery | undefined;\n let deliveryWaiter: { resolve(value: Delivery): void; reject(error: Error): void } | undefined;\n const tombstones = new Set<string>();\n\n const rememberCancellation = (requestId: string): void => {\n tombstones.add(requestId);\n if (tombstones.size > 100) tombstones.delete(tombstones.values().next().value!);\n };\n const publishDelivery = (value: Delivery): void => {\n if (deliveryWaiter === undefined) delivery = value;\n else {\n const waiter = deliveryWaiter;\n deliveryWaiter = undefined;\n waiter.resolve(value);\n }\n };\n const rejectPending = (reason: string, sendCancel: boolean): void => {\n const current = pending;\n if (current === undefined) return;\n pending = undefined;\n current.cancelTimer();\n current.removeAbort?.();\n rememberCancellation(current.request.requestId);\n if (sendCancel) publishDelivery({ ...current.request, kind: 'cancel' });\n current.reject(new AuthorBridgeError(reason, 503));\n };\n const liveOwner = (): Owner => {\n if (owner === undefined) throw new AuthorBridgeError('No Author viewport is registered.', 503);\n if (owner.expiresAt <= now()) {\n rejectPending('The Author viewport lease expired.', false);\n owner = undefined;\n throw new AuthorBridgeError('The Author viewport lease expired.', 503);\n }\n return owner;\n };\n const assertOwner = (bindingId: string, generation: number, ownerToken: string): Owner => {\n const current = liveOwner();\n if (current.bindingId !== bindingId || current.generation !== generation || current.ownerToken !== ownerToken) {\n throw new AuthorBridgeError('Stale Author viewport binding.');\n }\n return current;\n };\n const assertRequest = (\n bindingId: string,\n generation: number,\n ownerToken: string,\n catalogToken: string,\n requestId: string,\n ): Pending => {\n const currentOwner = assertOwner(bindingId, generation, ownerToken);\n if (currentOwner.catalogToken !== catalogToken) throw new AuthorBridgeError('Stale Author catalog token.');\n if (tombstones.has(requestId)) throw new AuthorBridgeError('The Author request was already cancelled.');\n if (pending?.request.requestId !== requestId) throw new AuthorBridgeError('Stale Author request.');\n return pending;\n };\n\n return {\n register(bindingId, generation) {\n if (bindingId === '' || !Number.isSafeInteger(generation) || generation < 0) {\n throw new AuthorBridgeError('Invalid Author registration.', 400);\n }\n if (owner !== undefined && owner.expiresAt > now()) {\n if (owner.bindingId !== bindingId) throw new AuthorBridgeError('Another Author viewport owns the lease.');\n if (generation < owner.generation) throw new AuthorBridgeError('Stale Author generation.');\n if (generation === owner.generation) {\n owner.expiresAt = now() + leaseMs;\n return {\n kind: 'accepted',\n generation,\n ownerToken: owner.ownerToken,\n ...(owner.catalogToken === undefined ? {} : { catalogToken: owner.catalogToken }),\n leaseMs,\n };\n }\n }\n rejectPending('The Author viewport generation changed.', false);\n delivery = undefined;\n const current: Owner = {\n bindingId,\n generation,\n ownerToken: issueToken(),\n expiresAt: now() + leaseMs,\n tools: [],\n };\n owner = current;\n return { kind: 'accepted', generation, ownerToken: current.ownerToken, leaseMs };\n },\n catalog(bindingId, generation, ownerToken, tools) {\n const current = assertOwner(bindingId, generation, ownerToken);\n if (!Array.isArray(tools) || tools.length > 15) throw new AuthorBridgeError('Invalid Author catalog.', 400);\n const names = new Set<string>();\n for (const tool of tools) {\n if (\n typeof tool !== 'object' ||\n tool === null ||\n typeof tool.name !== 'string' ||\n !/^[a-z][a-z0-9_]{0,29}$/.test(tool.name) ||\n typeof tool.label !== 'string' ||\n typeof tool.description !== 'string' ||\n typeof tool.inputSchema !== 'object' ||\n tool.inputSchema === null ||\n Array.isArray(tool.inputSchema) ||\n names.has(tool.name)\n ) {\n throw new AuthorBridgeError('Invalid Author catalog.', 400);\n }\n names.add(tool.name);\n }\n if (pending !== undefined) throw new AuthorBridgeError('Cannot replace the Author catalog during a request.');\n current.tools = tools.map((tool) => ({ ...tool, inputSchema: { ...tool.inputSchema } }));\n current.catalogToken = issueToken();\n current.expiresAt = now() + leaseMs;\n return {\n kind: 'accepted',\n generation,\n ownerToken,\n catalogToken: current.catalogToken,\n leaseMs,\n };\n },\n describe() {\n const current = liveOwner();\n if (current.catalogToken === undefined) throw new AuthorBridgeError('The Author viewport has no catalog.', 503);\n return { catalogToken: current.catalogToken, tools: current.tools };\n },\n invoke(input, signal) {\n let current: Owner;\n try {\n current = liveOwner();\n if (current.catalogToken !== input.catalogToken)\n throw new AuthorBridgeError('The Author capability catalog changed.');\n if (!current.tools.some((tool) => tool.name === input.name)) {\n throw new AuthorBridgeError(`Unknown Author capability: ${input.name}`, 404);\n }\n if (pending !== undefined) throw new AuthorBridgeError('Another Author request is already pending.');\n if (signal?.aborted)\n throw signal.reason instanceof Error ? signal.reason : new Error('Author request cancelled.');\n } catch (error) {\n return Promise.reject(error);\n }\n const request: AuthorRequestMessage = {\n kind: 'request',\n generation: current.generation,\n ownerToken: current.ownerToken,\n catalogToken: current.catalogToken!,\n requestId: issueToken(),\n name: input.name,\n arguments: input.arguments,\n };\n return new Promise<AuthorToolResult>((resolve, reject) => {\n const cancel = (reason: string): void => rejectPending(reason, true);\n const cancelTimer = scheduleTimeout(\n () => cancel('The Author request timed out.'),\n Math.min(timeoutMs, current.expiresAt - now()),\n );\n pending = { request, resolve, reject, cancelTimer };\n if (signal !== undefined) {\n const onAbort = () => cancel('The Author request was cancelled.');\n signal.addEventListener('abort', onAbort, { once: true });\n pending.removeAbort = () => signal.removeEventListener('abort', onAbort);\n }\n publishDelivery(request);\n });\n },\n async next(bindingId, generation, ownerToken, signal) {\n assertOwner(bindingId, generation, ownerToken);\n if (delivery !== undefined) {\n const value = delivery;\n delivery = undefined;\n return value;\n }\n if (deliveryWaiter !== undefined) throw new AuthorBridgeError('An Author delivery poll is already active.');\n return await new Promise<Delivery>((resolve, reject) => {\n let waiter: { resolve(value: Delivery): void; reject(error: Error): void };\n const onAbort = (): void => {\n if (deliveryWaiter === waiter) deliveryWaiter = undefined;\n reject(signal?.reason ?? new Error('Author delivery poll cancelled.'));\n };\n waiter = {\n resolve(value) {\n signal?.removeEventListener('abort', onAbort);\n resolve(value);\n },\n reject,\n };\n deliveryWaiter = waiter;\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n },\n result(bindingId, generation, ownerToken, catalogToken, requestId, result) {\n const current = assertRequest(bindingId, generation, ownerToken, catalogToken, requestId);\n pending = undefined;\n current.cancelTimer();\n current.removeAbort?.();\n current.resolve({ catalogToken, name: current.request.name, result });\n },\n cancelled(bindingId, generation, ownerToken, catalogToken, requestId) {\n const current = assertRequest(bindingId, generation, ownerToken, catalogToken, requestId);\n pending = undefined;\n current.cancelTimer();\n current.removeAbort?.();\n rememberCancellation(requestId);\n current.reject(new AuthorBridgeError('The Author viewport cancelled the request.'));\n },\n disconnect(bindingId, generation) {\n if (owner?.bindingId !== bindingId || owner.generation !== generation) return;\n rejectPending('The Author viewport disconnected.', false);\n owner = undefined;\n delivery = undefined;\n },\n close() {\n rejectPending('The Author bridge closed.', false);\n owner = undefined;\n delivery = undefined;\n deliveryWaiter?.reject(new Error('The Author bridge closed.'));\n deliveryWaiter = undefined;\n },\n };\n}\n"],"mappings":"AAQA,MAAa,EAA4B,KAC5B,EAAwB,IAErC,IAAa,EAAb,cAAuC,KAAM,CAGzB,OAFlB,YACE,EACA,EAAgD,IAChD,CACA,MAAM,CAAO,EAFG,KAAA,OAAA,CAGlB,CACF,EAqDA,SAAgB,EAAwB,EAAsD,CAC5F,GAAM,CAAE,MAAK,aAAY,mBAAoB,EACvC,EAAY,EAAQ,kBAAA,KACpB,EAAU,EAAQ,SAAA,IACpB,EACA,EACA,EACA,EACE,EAAa,IAAI,IAEjB,EAAwB,GAA4B,CACxD,EAAW,IAAI,CAAS,EACpB,EAAW,KAAO,KAAK,EAAW,OAAO,EAAW,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAM,CAChF,EACM,EAAmB,GAA0B,CACjD,GAAI,IAAmB,IAAA,GAAW,EAAW,MACxC,CACH,IAAM,EAAS,EACf,EAAiB,IAAA,GACjB,EAAO,QAAQ,CAAK,CACtB,CACF,EACM,GAAiB,EAAgB,IAA8B,CACnE,IAAM,EAAU,EACZ,IAAY,IAAA,KAChB,EAAU,IAAA,GACV,EAAQ,YAAY,EACpB,EAAQ,cAAc,EACtB,EAAqB,EAAQ,QAAQ,SAAS,EAC1C,GAAY,EAAgB,CAAE,GAAG,EAAQ,QAAS,KAAM,QAAS,CAAC,EACtE,EAAQ,OAAO,IAAI,EAAkB,EAAQ,GAAG,CAAC,EACnD,EACM,MAAyB,CAC7B,GAAI,IAAU,IAAA,GAAW,MAAM,IAAI,EAAkB,oCAAqC,GAAG,EAC7F,GAAI,EAAM,WAAa,EAAI,EAGzB,MAFA,EAAc,qCAAsC,EAAK,EACzD,EAAQ,IAAA,GACF,IAAI,EAAkB,qCAAsC,GAAG,EAEvE,OAAO,CACT,EACM,GAAe,EAAmB,EAAoB,IAA8B,CACxF,IAAM,EAAU,EAAU,EAC1B,GAAI,EAAQ,YAAc,GAAa,EAAQ,aAAe,GAAc,EAAQ,aAAe,EACjG,MAAM,IAAI,EAAkB,gCAAgC,EAE9D,OAAO,CACT,EACM,GACJ,EACA,EACA,EACA,EACA,IACY,CAEZ,GADqB,EAAY,EAAW,EAAY,CACzC,CAAC,CAAC,eAAiB,EAAc,MAAM,IAAI,EAAkB,6BAA6B,EACzG,GAAI,EAAW,IAAI,CAAS,EAAG,MAAM,IAAI,EAAkB,2CAA2C,EACtG,GAAI,GAAS,QAAQ,YAAc,EAAW,MAAM,IAAI,EAAkB,uBAAuB,EACjG,OAAO,CACT,EAEA,MAAO,CACL,SAAS,EAAW,EAAY,CAC9B,GAAI,IAAc,IAAM,CAAC,OAAO,cAAc,CAAU,GAAK,EAAa,EACxE,MAAM,IAAI,EAAkB,+BAAgC,GAAG,EAEjE,GAAI,IAAU,IAAA,IAAa,EAAM,UAAY,EAAI,EAAG,CAClD,GAAI,EAAM,YAAc,EAAW,MAAM,IAAI,EAAkB,yCAAyC,EACxG,GAAI,EAAa,EAAM,WAAY,MAAM,IAAI,EAAkB,0BAA0B,EACzF,GAAI,IAAe,EAAM,WAEvB,MADA,GAAM,UAAY,EAAI,EAAI,EACnB,CACL,KAAM,WACN,aACA,WAAY,EAAM,WAClB,GAAI,EAAM,eAAiB,IAAA,GAAY,CAAC,EAAI,CAAE,aAAc,EAAM,YAAa,EAC/E,SACF,CAEJ,CACA,EAAc,0CAA2C,EAAK,EAC9D,EAAW,IAAA,GACX,IAAM,EAAiB,CACrB,YACA,aACA,WAAY,EAAW,EACvB,UAAW,EAAI,EAAI,EACnB,MAAO,CAAC,CACV,EAEA,MADA,GAAQ,EACD,CAAE,KAAM,WAAY,aAAY,WAAY,EAAQ,WAAY,SAAQ,CACjF,EACA,QAAQ,EAAW,EAAY,EAAY,EAAO,CAChD,IAAM,EAAU,EAAY,EAAW,EAAY,CAAU,EAC7D,GAAI,CAAC,MAAM,QAAQ,CAAK,GAAK,EAAM,OAAS,GAAI,MAAM,IAAI,EAAkB,0BAA2B,GAAG,EAC1G,IAAM,EAAQ,IAAI,IAClB,IAAK,IAAM,KAAQ,EAAO,CACxB,GACE,OAAO,GAAS,WAChB,GACA,OAAO,EAAK,MAAS,UACrB,CAAC,yBAAyB,KAAK,EAAK,IAAI,GACxC,OAAO,EAAK,OAAU,UACtB,OAAO,EAAK,aAAgB,UAC5B,OAAO,EAAK,aAAgB,UAC5B,EAAK,cAAgB,MACrB,MAAM,QAAQ,EAAK,WAAW,GAC9B,EAAM,IAAI,EAAK,IAAI,EAEnB,MAAM,IAAI,EAAkB,0BAA2B,GAAG,EAE5D,EAAM,IAAI,EAAK,IAAI,CACrB,CACA,GAAI,IAAY,IAAA,GAAW,MAAM,IAAI,EAAkB,qDAAqD,EAI5G,MAHA,GAAQ,MAAQ,EAAM,IAAK,IAAU,CAAE,GAAG,EAAM,YAAa,CAAE,GAAG,EAAK,WAAY,CAAE,EAAE,EACvF,EAAQ,aAAe,EAAW,EAClC,EAAQ,UAAY,EAAI,EAAI,EACrB,CACL,KAAM,WACN,aACA,aACA,aAAc,EAAQ,aACtB,SACF,CACF,EACA,UAAW,CACT,IAAM,EAAU,EAAU,EAC1B,GAAI,EAAQ,eAAiB,IAAA,GAAW,MAAM,IAAI,EAAkB,sCAAuC,GAAG,EAC9G,MAAO,CAAE,aAAc,EAAQ,aAAc,MAAO,EAAQ,KAAM,CACpE,EACA,OAAO,EAAO,EAAQ,CACpB,IAAI,EACJ,GAAI,CAEF,GADA,EAAU,EAAU,EAChB,EAAQ,eAAiB,EAAM,aACjC,MAAM,IAAI,EAAkB,wCAAwC,EACtE,GAAI,CAAC,EAAQ,MAAM,KAAM,GAAS,EAAK,OAAS,EAAM,IAAI,EACxD,MAAM,IAAI,EAAkB,8BAA8B,EAAM,OAAQ,GAAG,EAE7E,GAAI,IAAY,IAAA,GAAW,MAAM,IAAI,EAAkB,4CAA4C,EACnG,GAAI,GAAQ,QACV,MAAM,EAAO,kBAAkB,MAAQ,EAAO,OAAa,MAAM,2BAA2B,CAChG,OAAS,EAAO,CACd,OAAO,QAAQ,OAAO,CAAK,CAC7B,CACA,IAAM,EAAgC,CACpC,KAAM,UACN,WAAY,EAAQ,WACpB,WAAY,EAAQ,WACpB,aAAc,EAAQ,aACtB,UAAW,EAAW,EACtB,KAAM,EAAM,KACZ,UAAW,EAAM,SACnB,EACA,OAAO,IAAI,SAA2B,EAAS,IAAW,CACxD,IAAM,EAAU,GAAyB,EAAc,EAAQ,EAAI,EAC7D,EAAc,MACZ,EAAO,+BAA+B,EAC5C,KAAK,IAAI,EAAW,EAAQ,UAAY,EAAI,CAAC,CAC/C,EAEA,GADA,EAAU,CAAE,UAAS,UAAS,SAAQ,aAAY,EAC9C,IAAW,IAAA,GAAW,CACxB,IAAM,MAAgB,EAAO,mCAAmC,EAChE,EAAO,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,EACxD,EAAQ,gBAAoB,EAAO,oBAAoB,QAAS,CAAO,CACzE,CACA,EAAgB,CAAO,CACzB,CAAC,CACH,EACA,MAAM,KAAK,EAAW,EAAY,EAAY,EAAQ,CAEpD,GADA,EAAY,EAAW,EAAY,CAAU,EACzC,IAAa,IAAA,GAAW,CAC1B,IAAM,EAAQ,EAEd,MADA,GAAW,IAAA,GACJ,CACT,CACA,GAAI,IAAmB,IAAA,GAAW,MAAM,IAAI,EAAkB,4CAA4C,EAC1G,OAAO,MAAM,IAAI,SAAmB,EAAS,IAAW,CACtD,IAAI,EACE,MAAsB,CACtB,IAAmB,IAAQ,EAAiB,IAAA,IAChD,EAAO,GAAQ,QAAc,MAAM,iCAAiC,CAAC,CACvE,EACA,EAAS,CACP,QAAQ,EAAO,CACb,GAAQ,oBAAoB,QAAS,CAAO,EAC5C,EAAQ,CAAK,CACf,EACA,QACF,EACA,EAAiB,EACjB,GAAQ,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,CAC3D,CAAC,CACH,EACA,OAAO,EAAW,EAAY,EAAY,EAAc,EAAW,EAAQ,CACzE,IAAM,EAAU,EAAc,EAAW,EAAY,EAAY,EAAc,CAAS,EACxF,EAAU,IAAA,GACV,EAAQ,YAAY,EACpB,EAAQ,cAAc,EACtB,EAAQ,QAAQ,CAAE,eAAc,KAAM,EAAQ,QAAQ,KAAM,QAAO,CAAC,CACtE,EACA,UAAU,EAAW,EAAY,EAAY,EAAc,EAAW,CACpE,IAAM,EAAU,EAAc,EAAW,EAAY,EAAY,EAAc,CAAS,EACxF,EAAU,IAAA,GACV,EAAQ,YAAY,EACpB,EAAQ,cAAc,EACtB,EAAqB,CAAS,EAC9B,EAAQ,OAAO,IAAI,EAAkB,4CAA4C,CAAC,CACpF,EACA,WAAW,EAAW,EAAY,CAC5B,GAAO,YAAc,GAAa,EAAM,aAAe,IAC3D,EAAc,oCAAqC,EAAK,EACxD,EAAQ,IAAA,GACR,EAAW,IAAA,GACb,EACA,OAAQ,CACN,EAAc,4BAA6B,EAAK,EAChD,EAAQ,IAAA,GACR,EAAW,IAAA,GACX,GAAgB,OAAW,MAAM,2BAA2B,CAAC,EAC7D,EAAiB,IAAA,EACnB,CACF,CACF"}
@@ -0,0 +1,2 @@
1
+ const e=require("../types/author.cjs"),t=(0,require("@agimon-ai/doompi-minor-mode").defineMinorMode)({descriptor:{source:`@agimon-ai/doompi-author`,id:e.AUTHOR_MODE_ID,label:`Author`,description:`Focused document review and bounded authoring through the current visual viewport.`,order:440,actions:[{id:`activate`,label:`Activate`,description:`Expose the current Author viewport capabilities to the agent.`,contexts:[`tui`,`headless`],parameters:[]},{id:`deactivate`,label:`Deactivate`,description:`Hide Author viewport capabilities from the agent.`,contexts:[`tui`,`headless`],parameters:[]}]},state(e){let t=e.isActive(),n=t?e.detail():void 0;return{activation:t?`active`:`inactive`,condition:`ready`,...n?{detail:n}:{},actions:[{id:`activate`,enabled:!t,...t?{disabledReason:`Author mode is already active.`}:{}},{id:`deactivate`,enabled:t,...t?{}:{disabledReason:`Author mode is not active.`}}]}},async handleAction(e,t,n,{signal:r}){if(t===`activate`)return await e.setActive(!0,r),{message:`Author mode activated.`};if(t===`deactivate`)return await e.setActive(!1,r),{message:`Author mode deactivated.`};throw Error(`Unknown Author mode action: ${t}`)}});exports.authorMinorMode=t;
2
+ //# sourceMappingURL=authorMode.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorMode.cjs","names":["defineMinorMode","AUTHOR_MODE_ID"],"sources":["../../src/models/authorMode.ts"],"sourcesContent":["import { defineMinorMode } from '@agimon-ai/doompi-minor-mode';\n\nimport { AUTHOR_MODE_ID } from '../types/author';\n\nexport interface AuthorModeBackend {\n isActive(): boolean;\n detail(): string | undefined;\n setActive(active: boolean, signal: AbortSignal): void | Promise<void>;\n}\n\nexport const authorMinorMode = defineMinorMode<AuthorModeBackend>({\n descriptor: {\n source: '@agimon-ai/doompi-author',\n id: AUTHOR_MODE_ID,\n label: 'Author',\n description: 'Focused document review and bounded authoring through the current visual viewport.',\n order: 440,\n actions: [\n {\n id: 'activate',\n label: 'Activate',\n description: 'Expose the current Author viewport capabilities to the agent.',\n contexts: ['tui', 'headless'],\n parameters: [],\n },\n {\n id: 'deactivate',\n label: 'Deactivate',\n description: 'Hide Author viewport capabilities from the agent.',\n contexts: ['tui', 'headless'],\n parameters: [],\n },\n ],\n },\n state(runtime) {\n const active = runtime.isActive();\n const detail = active ? runtime.detail() : undefined;\n return {\n activation: active ? 'active' : 'inactive',\n condition: 'ready',\n ...(detail ? { detail } : {}),\n actions: [\n { id: 'activate', enabled: !active, ...(active ? { disabledReason: 'Author mode is already active.' } : {}) },\n { id: 'deactivate', enabled: active, ...(!active ? { disabledReason: 'Author mode is not active.' } : {}) },\n ],\n };\n },\n async handleAction(runtime, actionId, _args, { signal }) {\n if (actionId === 'activate') {\n await runtime.setActive(true, signal);\n return { message: 'Author mode activated.' };\n }\n if (actionId === 'deactivate') {\n await runtime.setActive(false, signal);\n return { message: 'Author mode deactivated.' };\n }\n throw new Error(`Unknown Author mode action: ${actionId}`);\n },\n});\n"],"mappings":"uCAUa,GAAA,wCAAkBA,CAAAA,CAAAA,gBAAAA,CAAmC,CAChE,WAAY,CACV,OAAQ,2BACR,GAAIC,EAAAA,eACJ,MAAO,SACP,YAAa,qFACb,MAAO,IACP,QAAS,CACP,CACE,GAAI,WACJ,MAAO,WACP,YAAa,gEACb,SAAU,CAAC,MAAO,UAAU,EAC5B,WAAY,CAAC,CACf,EACA,CACE,GAAI,aACJ,MAAO,aACP,YAAa,oDACb,SAAU,CAAC,MAAO,UAAU,EAC5B,WAAY,CAAC,CACf,CACF,CACF,EACA,MAAM,EAAS,CACb,IAAM,EAAS,EAAQ,SAAS,EAC1B,EAAS,EAAS,EAAQ,OAAO,EAAI,IAAA,GAC3C,MAAO,CACL,WAAY,EAAS,SAAW,WAChC,UAAW,QACX,GAAI,EAAS,CAAE,QAAO,EAAI,CAAC,EAC3B,QAAS,CACP,CAAE,GAAI,WAAY,QAAS,CAAC,EAAQ,GAAI,EAAS,CAAE,eAAgB,gCAAiC,EAAI,CAAC,CAAG,EAC5G,CAAE,GAAI,aAAc,QAAS,EAAQ,GAAK,EAA4D,CAAC,EAApD,CAAE,eAAgB,4BAA6B,CAAQ,CAC5G,CACF,CACF,EACA,MAAM,aAAa,EAAS,EAAU,EAAO,CAAE,UAAU,CACvD,GAAI,IAAa,WAEf,OADA,MAAM,EAAQ,UAAU,GAAM,CAAM,EAC7B,CAAE,QAAS,wBAAyB,EAE7C,GAAI,IAAa,aAEf,OADA,MAAM,EAAQ,UAAU,GAAO,CAAM,EAC9B,CAAE,QAAS,0BAA2B,EAE/C,MAAU,MAAM,+BAA+B,GAAU,CAC3D,CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ //#region src/models/authorMode.d.ts
2
+ export interface AuthorModeBackend {
3
+ isActive(): boolean;
4
+ detail(): string | undefined;
5
+ setActive(active: boolean, signal: AbortSignal): void | Promise<void>;
6
+ }
7
+ export declare const authorMinorMode: import("@agimon-ai/doompi-minor-mode").DefinedMinorMode<AuthorModeBackend, import("@agimon-ai/doompi-minor-mode").MinorModeExecution>;
8
+ //#endregion
9
+ //# sourceMappingURL=authorMode.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorMode.d.cts","names":[],"sources":["../../src/models/authorMode.ts"],"mappings":";iBAIiB;EACf;EACA;EACA,UAAU,iBAAiB,QAAQ,qBAAqB;;qBAG7C,wDAAe,iBAAA,0DAAA"}
@@ -0,0 +1,9 @@
1
+ //#region src/models/authorMode.d.ts
2
+ export interface AuthorModeBackend {
3
+ isActive(): boolean;
4
+ detail(): string | undefined;
5
+ setActive(active: boolean, signal: AbortSignal): void | Promise<void>;
6
+ }
7
+ export declare const authorMinorMode: import("@agimon-ai/doompi-minor-mode").DefinedMinorMode<AuthorModeBackend, import("@agimon-ai/doompi-minor-mode").MinorModeExecution>;
8
+ //#endregion
9
+ //# sourceMappingURL=authorMode.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorMode.d.mts","names":[],"sources":["../../src/models/authorMode.ts"],"mappings":";iBAIiB;EACf;EACA;EACA,UAAU,iBAAiB,QAAQ,qBAAqB;;qBAG7C,wDAAe,iBAAA,0DAAA"}
@@ -0,0 +1,2 @@
1
+ import{AUTHOR_MODE_ID as e}from"../types/author.mjs";import{defineMinorMode as t}from"@agimon-ai/doompi-minor-mode";const n=t({descriptor:{source:`@agimon-ai/doompi-author`,id:e,label:`Author`,description:`Focused document review and bounded authoring through the current visual viewport.`,order:440,actions:[{id:`activate`,label:`Activate`,description:`Expose the current Author viewport capabilities to the agent.`,contexts:[`tui`,`headless`],parameters:[]},{id:`deactivate`,label:`Deactivate`,description:`Hide Author viewport capabilities from the agent.`,contexts:[`tui`,`headless`],parameters:[]}]},state(e){let t=e.isActive(),n=t?e.detail():void 0;return{activation:t?`active`:`inactive`,condition:`ready`,...n?{detail:n}:{},actions:[{id:`activate`,enabled:!t,...t?{disabledReason:`Author mode is already active.`}:{}},{id:`deactivate`,enabled:t,...t?{}:{disabledReason:`Author mode is not active.`}}]}},async handleAction(e,t,n,{signal:r}){if(t===`activate`)return await e.setActive(!0,r),{message:`Author mode activated.`};if(t===`deactivate`)return await e.setActive(!1,r),{message:`Author mode deactivated.`};throw Error(`Unknown Author mode action: ${t}`)}});export{n as authorMinorMode};
2
+ //# sourceMappingURL=authorMode.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorMode.mjs","names":[],"sources":["../../src/models/authorMode.ts"],"sourcesContent":["import { defineMinorMode } from '@agimon-ai/doompi-minor-mode';\n\nimport { AUTHOR_MODE_ID } from '../types/author';\n\nexport interface AuthorModeBackend {\n isActive(): boolean;\n detail(): string | undefined;\n setActive(active: boolean, signal: AbortSignal): void | Promise<void>;\n}\n\nexport const authorMinorMode = defineMinorMode<AuthorModeBackend>({\n descriptor: {\n source: '@agimon-ai/doompi-author',\n id: AUTHOR_MODE_ID,\n label: 'Author',\n description: 'Focused document review and bounded authoring through the current visual viewport.',\n order: 440,\n actions: [\n {\n id: 'activate',\n label: 'Activate',\n description: 'Expose the current Author viewport capabilities to the agent.',\n contexts: ['tui', 'headless'],\n parameters: [],\n },\n {\n id: 'deactivate',\n label: 'Deactivate',\n description: 'Hide Author viewport capabilities from the agent.',\n contexts: ['tui', 'headless'],\n parameters: [],\n },\n ],\n },\n state(runtime) {\n const active = runtime.isActive();\n const detail = active ? runtime.detail() : undefined;\n return {\n activation: active ? 'active' : 'inactive',\n condition: 'ready',\n ...(detail ? { detail } : {}),\n actions: [\n { id: 'activate', enabled: !active, ...(active ? { disabledReason: 'Author mode is already active.' } : {}) },\n { id: 'deactivate', enabled: active, ...(!active ? { disabledReason: 'Author mode is not active.' } : {}) },\n ],\n };\n },\n async handleAction(runtime, actionId, _args, { signal }) {\n if (actionId === 'activate') {\n await runtime.setActive(true, signal);\n return { message: 'Author mode activated.' };\n }\n if (actionId === 'deactivate') {\n await runtime.setActive(false, signal);\n return { message: 'Author mode deactivated.' };\n }\n throw new Error(`Unknown Author mode action: ${actionId}`);\n },\n});\n"],"mappings":"oHAUA,MAAa,EAAkB,EAAmC,CAChE,WAAY,CACV,OAAQ,2BACR,GAAI,EACJ,MAAO,SACP,YAAa,qFACb,MAAO,IACP,QAAS,CACP,CACE,GAAI,WACJ,MAAO,WACP,YAAa,gEACb,SAAU,CAAC,MAAO,UAAU,EAC5B,WAAY,CAAC,CACf,EACA,CACE,GAAI,aACJ,MAAO,aACP,YAAa,oDACb,SAAU,CAAC,MAAO,UAAU,EAC5B,WAAY,CAAC,CACf,CACF,CACF,EACA,MAAM,EAAS,CACb,IAAM,EAAS,EAAQ,SAAS,EAC1B,EAAS,EAAS,EAAQ,OAAO,EAAI,IAAA,GAC3C,MAAO,CACL,WAAY,EAAS,SAAW,WAChC,UAAW,QACX,GAAI,EAAS,CAAE,QAAO,EAAI,CAAC,EAC3B,QAAS,CACP,CAAE,GAAI,WAAY,QAAS,CAAC,EAAQ,GAAI,EAAS,CAAE,eAAgB,gCAAiC,EAAI,CAAC,CAAG,EAC5G,CAAE,GAAI,aAAc,QAAS,EAAQ,GAAK,EAA4D,CAAC,EAApD,CAAE,eAAgB,4BAA6B,CAAQ,CAC5G,CACF,CACF,EACA,MAAM,aAAa,EAAS,EAAU,EAAO,CAAE,UAAU,CACvD,GAAI,IAAa,WAEf,OADA,MAAM,EAAQ,UAAU,GAAM,CAAM,EAC7B,CAAE,QAAS,wBAAyB,EAE7C,GAAI,IAAa,aAEf,OADA,MAAM,EAAQ,UAAU,GAAO,CAAM,EAC9B,CAAE,QAAS,0BAA2B,EAE/C,MAAU,MAAM,+BAA+B,GAAU,CAC3D,CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ const e=require("./authorFacade.cjs");let t=require("@agimon-ai/doompi-core/api-contracts"),n=require("typebox");const r=n.Type.String(),i=n.Type.Number(),a=n.Type.Boolean(),o=n.Type.Optional,s=n.Type.Unknown({description:`Runtime author capability value, validated against the capability catalog inputSchema.`}),c=e=>n.Type.Union(e.map(e=>n.Type.Literal(e))),l=n.Type.Object({name:r,label:r,description:r,inputSchema:n.Type.Record(r,s)}),u=n.Type.Object({kind:n.Type.Literal(`accepted`),generation:i,ownerToken:r,catalogToken:o(r),leaseMs:i}),d={generation:i,ownerToken:r,catalogToken:r,requestId:r},f=n.Type.Object({kind:n.Type.Literal(`request`),...d,name:r,arguments:n.Type.Record(r,s)}),p=n.Type.Object({kind:n.Type.Literal(`cancel`),...d}),m=n.Type.Union([u,f,p,n.Type.Object({kind:n.Type.Literal(`rejected`),reason:r})]),h={bindingId:r,generation:n.Type.Integer({minimum:0})},g={...h,ownerToken:r},_={...g,catalogToken:r,requestId:r},v=c([`markdown-slides`,`csv`,`pptx`,`xlsx`]),y=n.Type.Object({format:v,sourceDigest:r,byteLength:i,fragmentCount:i,metadata:n.Type.Record(r,n.Type.Union([r,i,a]))}),b={fragmentId:r,replacement:r},x=n.Type.Array(n.Type.Object({...b,previous:r})),S={path:r,format:v,operations:o(n.Type.Array(n.Type.Object(b),{maxItems:1e5})),csvDialect:o(n.Type.Object({delimiter:o(c([`,`,`;`,` `,`|`])),quote:o(c([`"`,`'`])),recordDelimiter:o(c([`
2
+ `,`\r
3
+ `]))}))},C=n.Type.Object({manifest:y,fragments:n.Type.Array(n.Type.Object({id:r,kind:c([`slide`,`cell`,`text-run`]),text:r,readOnly:o(a),location:r})),renderModel:n.Type.Object({format:v,blocks:n.Type.Array(n.Type.Object({id:r,text:r,readOnly:a}))})}),w=(e,n,r,i)=>({id:e,scope:`session`,basePath:`author`,path:n,method:`POST`,authentication:`owner`,description:`Author ${e}.`,body:{required:!0,contentType:`application/json`,schema:r},responses:(0,t.jsonApiResponses)(i)}),T=(0,t.defineApiContract)({version:1,dynamic:[`Author capability catalogs supply input JSON Schemas and arbitrary JSON results at runtime.`],http:[{id:`author.state`,scope:`session`,basePath:`author`,path:`/state`,method:`GET`,authentication:`owner`,description:`Read author activation.`,responses:(0,t.jsonApiResponses)(n.Type.Object({sessionId:n.Type.Union([r,n.Type.Null()]),activation:c([`inactive`,`active`]),capabilityCount:i}))},w(`bridge.register`,`/bridge/register`,n.Type.Object(h),u),w(`bridge.catalog`,`/bridge/catalog`,n.Type.Object({...g,tools:n.Type.Array(l)}),u),w(`bridge.next`,`/bridge/next`,n.Type.Object(g),n.Type.Union([f,p])),w(`bridge.result`,`/bridge/result`,n.Type.Object({..._,result:s}),n.Type.Object({accepted:n.Type.Literal(!0)})),w(`bridge.cancelled`,`/bridge/cancelled`,n.Type.Object(_),n.Type.Object({accepted:n.Type.Literal(!0)})),w(`bridge.disconnect`,`/bridge/disconnect`,n.Type.Object(h),n.Type.Object({accepted:n.Type.Literal(!0)})),{id:`bridge.describe`,scope:`session`,basePath:`author`,path:`/bridge/describe`,method:`GET`,authentication:`owner`,description:`Read runtime author capabilities.`,responses:(0,t.jsonApiResponses)(n.Type.Object({catalogToken:r,tools:n.Type.Array(l)}))},w(`bridge.invoke`,`/bridge/invoke`,e.AuthorUseToolsInputSchema,n.Type.Object({catalogToken:r,name:r,result:s})),w(`documents.open`,`/documents/open`,n.Type.Object({...S,format:o(v)}),n.Type.Union([n.Type.Object({path:r,byteLength:i}),C])),w(`documents.preflight`,`/documents/preflight`,n.Type.Object(S),n.Type.Object({accepted:a,digest:r,sourceDigest:r,operations:x,issues:n.Type.Array(n.Type.Object({code:r,message:r,fragmentId:o(r)}))})),w(`documents.serialize`,`/documents/serialize`,n.Type.Object({...S,preflightDigest:r}),n.Type.Object({bytes:r,encoding:n.Type.Literal(`base64`),manifest:y,operationLog:x}))],sockets:[`global`,`workspace`].flatMap(t=>[{id:`author.send`,scope:t,service:`author.bridge`,member:`send`,kind:`method`,direction:`client-to-server`,description:`Scoped author bridge method invoked through doompi.plugin.v1.`,input:e.AuthorBridgeInputSchema,output:n.Type.Object({},{additionalProperties:!1})},{id:`author.browser`,scope:t,service:`doompi.hub.v1`,member:`author_webmcp`,kind:`channel`,direction:`client-to-server`,description:`Browser author channel payload.`,input:e.AuthorBridgeMessageSchema},{id:`author.hub`,scope:t,service:`doompi.hub.v1`,member:`author_webmcp`,kind:`channel`,direction:`server-to-client`,description:`Hub author channel payload.`,input:m}])});exports.AuthorHubMessageSchema=m,exports.apiContracts=T,exports.default=T;
4
+ //# sourceMappingURL=apiContracts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.cjs","names":["Type","jsonApiResponses","defineApiContract","AuthorUseToolsInputSchema","AuthorBridgeInputSchema","AuthorBridgeMessageSchema"],"sources":["../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses, type DoomHttpContract } from '@agimon-ai/doompi-core/api-contracts';\nimport { Type } from 'typebox';\n\nimport { AuthorBridgeMessageSchema, AuthorBridgeInputSchema, AuthorUseToolsInputSchema } from './authorFacade';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst Json = Type.Unknown({\n description: 'Runtime author capability value, validated against the capability catalog inputSchema.',\n});\nconst values = <T extends string>(items: T[]) => Type.Union(items.map((item) => Type.Literal(item)));\nconst Capability = Type.Object({ name: S, label: S, description: S, inputSchema: Type.Record(S, Json) });\nconst Accepted = Type.Object({\n kind: Type.Literal('accepted'),\n generation: N,\n ownerToken: S,\n catalogToken: O(S),\n leaseMs: N,\n});\nconst Identity = { generation: N, ownerToken: S, catalogToken: S, requestId: S };\nconst Request = Type.Object({ kind: Type.Literal('request'), ...Identity, name: S, arguments: Type.Record(S, Json) });\nconst Cancel = Type.Object({ kind: Type.Literal('cancel'), ...Identity });\nexport const AuthorHubMessageSchema = Type.Union([\n Accepted,\n Request,\n Cancel,\n Type.Object({ kind: Type.Literal('rejected'), reason: S }),\n]);\nconst Binding = { bindingId: S, generation: Type.Integer({ minimum: 0 }) };\nconst Owner = { ...Binding, ownerToken: S };\nconst ResultIdentity = { ...Owner, catalogToken: S, requestId: S };\nconst Format = values(['markdown-slides', 'csv', 'pptx', 'xlsx']);\nconst Manifest = Type.Object({\n format: Format,\n sourceDigest: S,\n byteLength: N,\n fragmentCount: N,\n metadata: Type.Record(S, Type.Union([S, N, B])),\n});\nconst Operation = { fragmentId: S, replacement: S };\nconst Log = Type.Array(Type.Object({ ...Operation, previous: S }));\nconst Document = {\n path: S,\n format: Format,\n operations: O(Type.Array(Type.Object(Operation), { maxItems: 100000 })),\n csvDialect: O(\n Type.Object({\n delimiter: O(values([',', ';', '\\t', '|'])),\n quote: O(values(['\"', \"'\"])),\n recordDelimiter: O(values(['\\n', '\\r\\n'])),\n }),\n ),\n};\nconst ParsedDocument = Type.Object({\n manifest: Manifest,\n fragments: Type.Array(\n Type.Object({ id: S, kind: values(['slide', 'cell', 'text-run']), text: S, readOnly: O(B), location: S }),\n ),\n renderModel: Type.Object({ format: Format, blocks: Type.Array(Type.Object({ id: S, text: S, readOnly: B })) }),\n});\nconst post = (id: string, path: string, schema: object, output: object): DoomHttpContract => ({\n id,\n scope: 'session',\n basePath: 'author',\n path,\n method: 'POST',\n authentication: 'owner',\n description: `Author ${id}.`,\n body: { required: true, contentType: 'application/json', schema },\n responses: jsonApiResponses(output),\n});\nexport const apiContracts = defineApiContract({\n version: 1,\n dynamic: ['Author capability catalogs supply input JSON Schemas and arbitrary JSON results at runtime.'],\n http: [\n {\n id: 'author.state',\n scope: 'session',\n basePath: 'author',\n path: '/state',\n method: 'GET',\n authentication: 'owner',\n description: 'Read author activation.',\n responses: jsonApiResponses(\n Type.Object({\n sessionId: Type.Union([S, Type.Null()]),\n activation: values(['inactive', 'active']),\n capabilityCount: N,\n }),\n ),\n },\n post('bridge.register', '/bridge/register', Type.Object(Binding), Accepted),\n post('bridge.catalog', '/bridge/catalog', Type.Object({ ...Owner, tools: Type.Array(Capability) }), Accepted),\n post('bridge.next', '/bridge/next', Type.Object(Owner), Type.Union([Request, Cancel])),\n post(\n 'bridge.result',\n '/bridge/result',\n Type.Object({ ...ResultIdentity, result: Json }),\n Type.Object({ accepted: Type.Literal(true) }),\n ),\n post(\n 'bridge.cancelled',\n '/bridge/cancelled',\n Type.Object(ResultIdentity),\n Type.Object({ accepted: Type.Literal(true) }),\n ),\n post(\n 'bridge.disconnect',\n '/bridge/disconnect',\n Type.Object(Binding),\n Type.Object({ accepted: Type.Literal(true) }),\n ),\n {\n id: 'bridge.describe',\n scope: 'session',\n basePath: 'author',\n path: '/bridge/describe',\n method: 'GET',\n authentication: 'owner',\n description: 'Read runtime author capabilities.',\n responses: jsonApiResponses(Type.Object({ catalogToken: S, tools: Type.Array(Capability) })),\n },\n post(\n 'bridge.invoke',\n '/bridge/invoke',\n AuthorUseToolsInputSchema,\n Type.Object({ catalogToken: S, name: S, result: Json }),\n ),\n post(\n 'documents.open',\n '/documents/open',\n Type.Object({ ...Document, format: O(Format) }),\n Type.Union([Type.Object({ path: S, byteLength: N }), ParsedDocument]),\n ),\n post(\n 'documents.preflight',\n '/documents/preflight',\n Type.Object(Document),\n Type.Object({\n accepted: B,\n digest: S,\n sourceDigest: S,\n operations: Log,\n issues: Type.Array(Type.Object({ code: S, message: S, fragmentId: O(S) })),\n }),\n ),\n post(\n 'documents.serialize',\n '/documents/serialize',\n Type.Object({ ...Document, preflightDigest: S }),\n Type.Object({ bytes: S, encoding: Type.Literal('base64'), manifest: Manifest, operationLog: Log }),\n ),\n ],\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'author.send',\n scope,\n service: 'author.bridge',\n member: 'send',\n kind: 'method',\n direction: 'client-to-server',\n description: 'Scoped author bridge method invoked through doompi.plugin.v1.',\n input: AuthorBridgeInputSchema,\n output: Type.Object({}, { additionalProperties: false }),\n },\n {\n id: 'author.browser',\n scope,\n service: 'doompi.hub.v1',\n member: 'author_webmcp',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Browser author channel payload.',\n input: AuthorBridgeMessageSchema,\n },\n {\n id: 'author.hub',\n scope,\n service: 'doompi.hub.v1',\n member: 'author_webmcp',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Hub author channel payload.',\n input: AuthorHubMessageSchema,\n },\n ]),\n});\nexport default apiContracts;\n"],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { Type } from "typebox";
2
+ //#region src/schemas/apiContracts.d.ts
3
+ export declare const apiContracts: {
4
+ version: 1;
5
+ protocols?: Record<string, string> | undefined;
6
+ schemas?: Record<string, boolean | object> | undefined;
7
+ http: {
8
+ id: string;
9
+ scope: "global" | "session" | "workspace";
10
+ basePath?: string | undefined;
11
+ path: string;
12
+ method: "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT";
13
+ description: string;
14
+ availability?: string | undefined;
15
+ authentication: "device" | "none" | "owner";
16
+ parameters?: {
17
+ name: string;
18
+ in: "header" | "path" | "query";
19
+ required: boolean;
20
+ schema: boolean | object;
21
+ }[] | undefined;
22
+ body?: {
23
+ contentType: string;
24
+ contentTypes?: string[] | undefined;
25
+ required: boolean;
26
+ schema: boolean | object;
27
+ } | undefined;
28
+ responses: Record<string, {
29
+ description: string;
30
+ contentType?: string | undefined;
31
+ schema?: boolean | object | undefined;
32
+ events?: Record<string, boolean | object> | undefined;
33
+ }>;
34
+ }[];
35
+ sockets: {
36
+ id: string;
37
+ scope: "global" | "session" | "workspace";
38
+ description: string;
39
+ availability?: string | undefined;
40
+ service: string;
41
+ member: string;
42
+ direction: "client-to-server" | "server-to-client";
43
+ kind: "channel" | "method" | "state";
44
+ input: boolean | object;
45
+ output?: boolean | object | undefined;
46
+ errors?: boolean | object | undefined;
47
+ }[];
48
+ dynamic: string[];
49
+ gaps?: string[] | undefined;
50
+ };
51
+ //#endregion
52
+ export { apiContracts as default };
53
+ //# sourceMappingURL=apiContracts.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.d.cts","names":[],"sources":["../../src/schemas/apiContracts.ts"],"mappings":";;qBAyEa"}
@@ -0,0 +1,53 @@
1
+ import { Type } from "typebox";
2
+ //#region src/schemas/apiContracts.d.ts
3
+ export declare const apiContracts: {
4
+ version: 1;
5
+ protocols?: Record<string, string> | undefined;
6
+ schemas?: Record<string, boolean | object> | undefined;
7
+ http: {
8
+ id: string;
9
+ scope: "global" | "session" | "workspace";
10
+ basePath?: string | undefined;
11
+ path: string;
12
+ method: "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT";
13
+ description: string;
14
+ availability?: string | undefined;
15
+ authentication: "device" | "none" | "owner";
16
+ parameters?: {
17
+ name: string;
18
+ in: "header" | "path" | "query";
19
+ required: boolean;
20
+ schema: boolean | object;
21
+ }[] | undefined;
22
+ body?: {
23
+ contentType: string;
24
+ contentTypes?: string[] | undefined;
25
+ required: boolean;
26
+ schema: boolean | object;
27
+ } | undefined;
28
+ responses: Record<string, {
29
+ description: string;
30
+ contentType?: string | undefined;
31
+ schema?: boolean | object | undefined;
32
+ events?: Record<string, boolean | object> | undefined;
33
+ }>;
34
+ }[];
35
+ sockets: {
36
+ id: string;
37
+ scope: "global" | "session" | "workspace";
38
+ description: string;
39
+ availability?: string | undefined;
40
+ service: string;
41
+ member: string;
42
+ direction: "client-to-server" | "server-to-client";
43
+ kind: "channel" | "method" | "state";
44
+ input: boolean | object;
45
+ output?: boolean | object | undefined;
46
+ errors?: boolean | object | undefined;
47
+ }[];
48
+ dynamic: string[];
49
+ gaps?: string[] | undefined;
50
+ };
51
+ //#endregion
52
+ export { apiContracts as default };
53
+ //# sourceMappingURL=apiContracts.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../../src/schemas/apiContracts.ts"],"mappings":";;qBAyEa"}
@@ -0,0 +1,4 @@
1
+ import{AuthorBridgeInputSchema as e,AuthorBridgeMessageSchema as t,AuthorUseToolsInputSchema as n}from"./authorFacade.mjs";import{defineApiContract as r,jsonApiResponses as i}from"@agimon-ai/doompi-core/api-contracts";import{Type as a}from"typebox";const o=a.String(),s=a.Number(),c=a.Boolean(),l=a.Optional,u=a.Unknown({description:`Runtime author capability value, validated against the capability catalog inputSchema.`}),d=e=>a.Union(e.map(e=>a.Literal(e))),f=a.Object({name:o,label:o,description:o,inputSchema:a.Record(o,u)}),p=a.Object({kind:a.Literal(`accepted`),generation:s,ownerToken:o,catalogToken:l(o),leaseMs:s}),m={generation:s,ownerToken:o,catalogToken:o,requestId:o},h=a.Object({kind:a.Literal(`request`),...m,name:o,arguments:a.Record(o,u)}),g=a.Object({kind:a.Literal(`cancel`),...m}),_=a.Union([p,h,g,a.Object({kind:a.Literal(`rejected`),reason:o})]),v={bindingId:o,generation:a.Integer({minimum:0})},y={...v,ownerToken:o},b={...y,catalogToken:o,requestId:o},x=d([`markdown-slides`,`csv`,`pptx`,`xlsx`]),S=a.Object({format:x,sourceDigest:o,byteLength:s,fragmentCount:s,metadata:a.Record(o,a.Union([o,s,c]))}),C={fragmentId:o,replacement:o},w=a.Array(a.Object({...C,previous:o})),T={path:o,format:x,operations:l(a.Array(a.Object(C),{maxItems:1e5})),csvDialect:l(a.Object({delimiter:l(d([`,`,`;`,` `,`|`])),quote:l(d([`"`,`'`])),recordDelimiter:l(d([`
2
+ `,`\r
3
+ `]))}))},E=a.Object({manifest:S,fragments:a.Array(a.Object({id:o,kind:d([`slide`,`cell`,`text-run`]),text:o,readOnly:l(c),location:o})),renderModel:a.Object({format:x,blocks:a.Array(a.Object({id:o,text:o,readOnly:c}))})}),D=(e,t,n,r)=>({id:e,scope:`session`,basePath:`author`,path:t,method:`POST`,authentication:`owner`,description:`Author ${e}.`,body:{required:!0,contentType:`application/json`,schema:n},responses:i(r)}),O=r({version:1,dynamic:[`Author capability catalogs supply input JSON Schemas and arbitrary JSON results at runtime.`],http:[{id:`author.state`,scope:`session`,basePath:`author`,path:`/state`,method:`GET`,authentication:`owner`,description:`Read author activation.`,responses:i(a.Object({sessionId:a.Union([o,a.Null()]),activation:d([`inactive`,`active`]),capabilityCount:s}))},D(`bridge.register`,`/bridge/register`,a.Object(v),p),D(`bridge.catalog`,`/bridge/catalog`,a.Object({...y,tools:a.Array(f)}),p),D(`bridge.next`,`/bridge/next`,a.Object(y),a.Union([h,g])),D(`bridge.result`,`/bridge/result`,a.Object({...b,result:u}),a.Object({accepted:a.Literal(!0)})),D(`bridge.cancelled`,`/bridge/cancelled`,a.Object(b),a.Object({accepted:a.Literal(!0)})),D(`bridge.disconnect`,`/bridge/disconnect`,a.Object(v),a.Object({accepted:a.Literal(!0)})),{id:`bridge.describe`,scope:`session`,basePath:`author`,path:`/bridge/describe`,method:`GET`,authentication:`owner`,description:`Read runtime author capabilities.`,responses:i(a.Object({catalogToken:o,tools:a.Array(f)}))},D(`bridge.invoke`,`/bridge/invoke`,n,a.Object({catalogToken:o,name:o,result:u})),D(`documents.open`,`/documents/open`,a.Object({...T,format:l(x)}),a.Union([a.Object({path:o,byteLength:s}),E])),D(`documents.preflight`,`/documents/preflight`,a.Object(T),a.Object({accepted:c,digest:o,sourceDigest:o,operations:w,issues:a.Array(a.Object({code:o,message:o,fragmentId:l(o)}))})),D(`documents.serialize`,`/documents/serialize`,a.Object({...T,preflightDigest:o}),a.Object({bytes:o,encoding:a.Literal(`base64`),manifest:S,operationLog:w}))],sockets:[`global`,`workspace`].flatMap(n=>[{id:`author.send`,scope:n,service:`author.bridge`,member:`send`,kind:`method`,direction:`client-to-server`,description:`Scoped author bridge method invoked through doompi.plugin.v1.`,input:e,output:a.Object({},{additionalProperties:!1})},{id:`author.browser`,scope:n,service:`doompi.hub.v1`,member:`author_webmcp`,kind:`channel`,direction:`client-to-server`,description:`Browser author channel payload.`,input:t},{id:`author.hub`,scope:n,service:`doompi.hub.v1`,member:`author_webmcp`,kind:`channel`,direction:`server-to-client`,description:`Hub author channel payload.`,input:_}])});export{_ as AuthorHubMessageSchema,O as apiContracts,O as default};
4
+ //# sourceMappingURL=apiContracts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.mjs","names":[],"sources":["../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses, type DoomHttpContract } from '@agimon-ai/doompi-core/api-contracts';\nimport { Type } from 'typebox';\n\nimport { AuthorBridgeMessageSchema, AuthorBridgeInputSchema, AuthorUseToolsInputSchema } from './authorFacade';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst Json = Type.Unknown({\n description: 'Runtime author capability value, validated against the capability catalog inputSchema.',\n});\nconst values = <T extends string>(items: T[]) => Type.Union(items.map((item) => Type.Literal(item)));\nconst Capability = Type.Object({ name: S, label: S, description: S, inputSchema: Type.Record(S, Json) });\nconst Accepted = Type.Object({\n kind: Type.Literal('accepted'),\n generation: N,\n ownerToken: S,\n catalogToken: O(S),\n leaseMs: N,\n});\nconst Identity = { generation: N, ownerToken: S, catalogToken: S, requestId: S };\nconst Request = Type.Object({ kind: Type.Literal('request'), ...Identity, name: S, arguments: Type.Record(S, Json) });\nconst Cancel = Type.Object({ kind: Type.Literal('cancel'), ...Identity });\nexport const AuthorHubMessageSchema = Type.Union([\n Accepted,\n Request,\n Cancel,\n Type.Object({ kind: Type.Literal('rejected'), reason: S }),\n]);\nconst Binding = { bindingId: S, generation: Type.Integer({ minimum: 0 }) };\nconst Owner = { ...Binding, ownerToken: S };\nconst ResultIdentity = { ...Owner, catalogToken: S, requestId: S };\nconst Format = values(['markdown-slides', 'csv', 'pptx', 'xlsx']);\nconst Manifest = Type.Object({\n format: Format,\n sourceDigest: S,\n byteLength: N,\n fragmentCount: N,\n metadata: Type.Record(S, Type.Union([S, N, B])),\n});\nconst Operation = { fragmentId: S, replacement: S };\nconst Log = Type.Array(Type.Object({ ...Operation, previous: S }));\nconst Document = {\n path: S,\n format: Format,\n operations: O(Type.Array(Type.Object(Operation), { maxItems: 100000 })),\n csvDialect: O(\n Type.Object({\n delimiter: O(values([',', ';', '\\t', '|'])),\n quote: O(values(['\"', \"'\"])),\n recordDelimiter: O(values(['\\n', '\\r\\n'])),\n }),\n ),\n};\nconst ParsedDocument = Type.Object({\n manifest: Manifest,\n fragments: Type.Array(\n Type.Object({ id: S, kind: values(['slide', 'cell', 'text-run']), text: S, readOnly: O(B), location: S }),\n ),\n renderModel: Type.Object({ format: Format, blocks: Type.Array(Type.Object({ id: S, text: S, readOnly: B })) }),\n});\nconst post = (id: string, path: string, schema: object, output: object): DoomHttpContract => ({\n id,\n scope: 'session',\n basePath: 'author',\n path,\n method: 'POST',\n authentication: 'owner',\n description: `Author ${id}.`,\n body: { required: true, contentType: 'application/json', schema },\n responses: jsonApiResponses(output),\n});\nexport const apiContracts = defineApiContract({\n version: 1,\n dynamic: ['Author capability catalogs supply input JSON Schemas and arbitrary JSON results at runtime.'],\n http: [\n {\n id: 'author.state',\n scope: 'session',\n basePath: 'author',\n path: '/state',\n method: 'GET',\n authentication: 'owner',\n description: 'Read author activation.',\n responses: jsonApiResponses(\n Type.Object({\n sessionId: Type.Union([S, Type.Null()]),\n activation: values(['inactive', 'active']),\n capabilityCount: N,\n }),\n ),\n },\n post('bridge.register', '/bridge/register', Type.Object(Binding), Accepted),\n post('bridge.catalog', '/bridge/catalog', Type.Object({ ...Owner, tools: Type.Array(Capability) }), Accepted),\n post('bridge.next', '/bridge/next', Type.Object(Owner), Type.Union([Request, Cancel])),\n post(\n 'bridge.result',\n '/bridge/result',\n Type.Object({ ...ResultIdentity, result: Json }),\n Type.Object({ accepted: Type.Literal(true) }),\n ),\n post(\n 'bridge.cancelled',\n '/bridge/cancelled',\n Type.Object(ResultIdentity),\n Type.Object({ accepted: Type.Literal(true) }),\n ),\n post(\n 'bridge.disconnect',\n '/bridge/disconnect',\n Type.Object(Binding),\n Type.Object({ accepted: Type.Literal(true) }),\n ),\n {\n id: 'bridge.describe',\n scope: 'session',\n basePath: 'author',\n path: '/bridge/describe',\n method: 'GET',\n authentication: 'owner',\n description: 'Read runtime author capabilities.',\n responses: jsonApiResponses(Type.Object({ catalogToken: S, tools: Type.Array(Capability) })),\n },\n post(\n 'bridge.invoke',\n '/bridge/invoke',\n AuthorUseToolsInputSchema,\n Type.Object({ catalogToken: S, name: S, result: Json }),\n ),\n post(\n 'documents.open',\n '/documents/open',\n Type.Object({ ...Document, format: O(Format) }),\n Type.Union([Type.Object({ path: S, byteLength: N }), ParsedDocument]),\n ),\n post(\n 'documents.preflight',\n '/documents/preflight',\n Type.Object(Document),\n Type.Object({\n accepted: B,\n digest: S,\n sourceDigest: S,\n operations: Log,\n issues: Type.Array(Type.Object({ code: S, message: S, fragmentId: O(S) })),\n }),\n ),\n post(\n 'documents.serialize',\n '/documents/serialize',\n Type.Object({ ...Document, preflightDigest: S }),\n Type.Object({ bytes: S, encoding: Type.Literal('base64'), manifest: Manifest, operationLog: Log }),\n ),\n ],\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'author.send',\n scope,\n service: 'author.bridge',\n member: 'send',\n kind: 'method',\n direction: 'client-to-server',\n description: 'Scoped author bridge method invoked through doompi.plugin.v1.',\n input: AuthorBridgeInputSchema,\n output: Type.Object({}, { additionalProperties: false }),\n },\n {\n id: 'author.browser',\n scope,\n service: 'doompi.hub.v1',\n member: 'author_webmcp',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Browser author channel payload.',\n input: AuthorBridgeMessageSchema,\n },\n {\n id: 'author.hub',\n scope,\n service: 'doompi.hub.v1',\n member: 'author_webmcp',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Hub author channel payload.',\n input: AuthorHubMessageSchema,\n },\n ]),\n});\nexport default apiContracts;\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ let e=require("typebox"),t=require("@agimon-ai/doompi-core/plugin-protocol");const n=e.Type.String({minLength:1,maxLength:30,pattern:`^[a-z][a-z0-9_]*$`}),r=e.Type.Object({},{additionalProperties:!1}),i=e.Type.Object({catalogToken:e.Type.String({minLength:1,maxLength:256}),name:n,arguments:e.Type.Record(e.Type.String(),e.Type.Unknown())},{additionalProperties:!1}),a={generation:e.Type.Number({minimum:0})},o=e.Type.Union([e.Type.Object({...a,kind:e.Type.Literal(`register`)},{additionalProperties:!1}),e.Type.Object({...a,kind:e.Type.Literal(`release`)},{additionalProperties:!1}),e.Type.Object({...a,kind:e.Type.Literal(`catalog`),ownerToken:e.Type.String({minLength:1}),tools:e.Type.Array(e.Type.Object({name:e.Type.String({minLength:1}),label:e.Type.String(),description:e.Type.String(),inputSchema:e.Type.Record(e.Type.String(),e.Type.Unknown())},{additionalProperties:!1}))},{additionalProperties:!1}),e.Type.Object({...a,kind:e.Type.Literal(`result`),ownerToken:e.Type.String({minLength:1}),catalogToken:e.Type.String({minLength:1}),requestId:e.Type.String({minLength:1}),result:e.Type.Unknown()},{additionalProperties:!1}),e.Type.Object({...a,kind:e.Type.Literal(`cancelled`),ownerToken:e.Type.String({minLength:1}),catalogToken:e.Type.String({minLength:1}),requestId:e.Type.String({minLength:1})},{additionalProperties:!1})]),s=e.Type.Object({sessionId:e.Type.String({minLength:1}),message:o},{additionalProperties:!1});function c(n){return(0,t.defineDoomPluginMethod)({service:`author.bridge`,method:`send`,scope:n,direction:`client-to-server`,input:s,output:e.Type.Object({},{additionalProperties:!1})})}exports.AuthorBridgeInputSchema=s,exports.AuthorBridgeMessageSchema=o,exports.AuthorDescribeToolsInputSchema=r,exports.AuthorUseToolsInputSchema=i,exports.authorBridgeMethod=c;
2
+ //# sourceMappingURL=authorFacade.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorFacade.cjs","names":["Type","defineDoomPluginMethod"],"sources":["../../src/schemas/authorFacade.ts"],"sourcesContent":["import type { DoomApiScope } from '@agimon-ai/doompi-core/package-api';\nimport { defineDoomPluginMethod } from '@agimon-ai/doompi-core/plugin-protocol';\nimport { type Static, Type } from 'typebox';\n\nconst AuthorCapabilityNameSchema = Type.String({\n minLength: 1,\n maxLength: 30,\n pattern: '^[a-z][a-z0-9_]*$',\n});\n\n/** Lists the capabilities exposed by the current Author viewport. */\nexport const AuthorDescribeToolsInputSchema = Type.Object({}, { additionalProperties: false });\nexport type AuthorDescribeToolsInput = Static<typeof AuthorDescribeToolsInputSchema>;\n\n/** Invokes one capability exposed by the current Author viewport. */\nexport const AuthorUseToolsInputSchema = Type.Object(\n {\n catalogToken: Type.String({ minLength: 1, maxLength: 256 }),\n name: AuthorCapabilityNameSchema,\n arguments: Type.Record(Type.String(), Type.Unknown()),\n },\n { additionalProperties: false },\n);\nexport type AuthorUseToolsInput = Static<typeof AuthorUseToolsInputSchema>;\n\nconst AuthorBridgeBase = {\n generation: Type.Number({ minimum: 0 }),\n};\n\n/** Browser-to-server lease messages, validated before Author sees the payload. */\nexport const AuthorBridgeMessageSchema = Type.Union([\n Type.Object({ ...AuthorBridgeBase, kind: Type.Literal('register') }, { additionalProperties: false }),\n Type.Object({ ...AuthorBridgeBase, kind: Type.Literal('release') }, { additionalProperties: false }),\n Type.Object(\n {\n ...AuthorBridgeBase,\n kind: Type.Literal('catalog'),\n ownerToken: Type.String({ minLength: 1 }),\n tools: Type.Array(\n Type.Object(\n {\n name: Type.String({ minLength: 1 }),\n label: Type.String(),\n description: Type.String(),\n inputSchema: Type.Record(Type.String(), Type.Unknown()),\n },\n { additionalProperties: false },\n ),\n ),\n },\n { additionalProperties: false },\n ),\n Type.Object(\n {\n ...AuthorBridgeBase,\n kind: Type.Literal('result'),\n ownerToken: Type.String({ minLength: 1 }),\n catalogToken: Type.String({ minLength: 1 }),\n requestId: Type.String({ minLength: 1 }),\n result: Type.Unknown(),\n },\n { additionalProperties: false },\n ),\n Type.Object(\n {\n ...AuthorBridgeBase,\n kind: Type.Literal('cancelled'),\n ownerToken: Type.String({ minLength: 1 }),\n catalogToken: Type.String({ minLength: 1 }),\n requestId: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n ),\n]);\n\nexport const AuthorBridgeInputSchema = Type.Object(\n { sessionId: Type.String({ minLength: 1 }), message: AuthorBridgeMessageSchema },\n { additionalProperties: false },\n);\n\nexport function authorBridgeMethod(scope: Extract<DoomApiScope, 'global' | 'workspace'>) {\n return defineDoomPluginMethod({\n service: 'author.bridge',\n method: 'send',\n scope,\n direction: 'client-to-server',\n input: AuthorBridgeInputSchema,\n output: Type.Object({}, { additionalProperties: false }),\n });\n}\n"],"mappings":"6EAIA,MAAM,EAA6BA,EAAAA,KAAK,OAAO,CAC7C,UAAW,EACX,UAAW,GACX,QAAS,mBACX,CAAC,EAGY,EAAiCA,EAAAA,KAAK,OAAO,CAAC,EAAG,CAAE,qBAAsB,EAAM,CAAC,EAIhF,EAA4BA,EAAAA,KAAK,OAC5C,CACE,aAAcA,EAAAA,KAAK,OAAO,CAAE,UAAW,EAAG,UAAW,GAAI,CAAC,EAC1D,KAAM,EACN,UAAWA,EAAAA,KAAK,OAAOA,EAAAA,KAAK,OAAO,EAAGA,EAAAA,KAAK,QAAQ,CAAC,CACtD,EACA,CAAE,qBAAsB,EAAM,CAChC,EAGM,EAAmB,CACvB,WAAYA,EAAAA,KAAK,OAAO,CAAE,QAAS,CAAE,CAAC,CACxC,EAGa,EAA4BA,EAAAA,KAAK,MAAM,CAClDA,EAAAA,KAAK,OAAO,CAAE,GAAG,EAAkB,KAAMA,EAAAA,KAAK,QAAQ,UAAU,CAAE,EAAG,CAAE,qBAAsB,EAAM,CAAC,EACpGA,EAAAA,KAAK,OAAO,CAAE,GAAG,EAAkB,KAAMA,EAAAA,KAAK,QAAQ,SAAS,CAAE,EAAG,CAAE,qBAAsB,EAAM,CAAC,EACnGA,EAAAA,KAAK,OACH,CACE,GAAG,EACH,KAAMA,EAAAA,KAAK,QAAQ,SAAS,EAC5B,WAAYA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACxC,MAAOA,EAAAA,KAAK,MACVA,EAAAA,KAAK,OACH,CACE,KAAMA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAClC,MAAOA,EAAAA,KAAK,OAAO,EACnB,YAAaA,EAAAA,KAAK,OAAO,EACzB,YAAaA,EAAAA,KAAK,OAAOA,EAAAA,KAAK,OAAO,EAAGA,EAAAA,KAAK,QAAQ,CAAC,CACxD,EACA,CAAE,qBAAsB,EAAM,CAChC,CACF,CACF,EACA,CAAE,qBAAsB,EAAM,CAChC,EACAA,EAAAA,KAAK,OACH,CACE,GAAG,EACH,KAAMA,EAAAA,KAAK,QAAQ,QAAQ,EAC3B,WAAYA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACxC,aAAcA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAC1C,UAAWA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACvC,OAAQA,EAAAA,KAAK,QAAQ,CACvB,EACA,CAAE,qBAAsB,EAAM,CAChC,EACAA,EAAAA,KAAK,OACH,CACE,GAAG,EACH,KAAMA,EAAAA,KAAK,QAAQ,WAAW,EAC9B,WAAYA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACxC,aAAcA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAC1C,UAAWA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CACzC,EACA,CAAE,qBAAsB,EAAM,CAChC,CACF,CAAC,EAEY,EAA0BA,EAAAA,KAAK,OAC1C,CAAE,UAAWA,EAAAA,KAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAAG,QAAS,CAA0B,EAC/E,CAAE,qBAAsB,EAAM,CAChC,EAEA,SAAgB,EAAmB,EAAsD,CACvF,OAAA,EAAOC,EAAAA,uBAAAA,CAAuB,CAC5B,QAAS,gBACT,OAAQ,OACR,QACA,UAAW,mBACX,MAAO,EACP,OAAQD,EAAAA,KAAK,OAAO,CAAC,EAAG,CAAE,qBAAsB,EAAM,CAAC,CACzD,CAAC,CACH"}