@jini-ai/chat 0.1.0

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 (444) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +109 -0
  3. package/dist/core/agentic/chat-capabilities.d.ts +19 -0
  4. package/dist/core/agentic/chat-capabilities.d.ts.map +1 -0
  5. package/dist/core/agentic/chat-capabilities.js +106 -0
  6. package/dist/core/agentic/chat-capabilities.js.map +1 -0
  7. package/dist/core/agentic/index.d.ts +22 -0
  8. package/dist/core/agentic/index.d.ts.map +1 -0
  9. package/dist/core/agentic/index.js +21 -0
  10. package/dist/core/agentic/index.js.map +1 -0
  11. package/dist/core/events.d.ts +84 -0
  12. package/dist/core/events.d.ts.map +1 -0
  13. package/dist/core/events.js +14 -0
  14. package/dist/core/events.js.map +1 -0
  15. package/dist/core/index.d.ts +40 -0
  16. package/dist/core/index.d.ts.map +1 -0
  17. package/dist/core/index.js +40 -0
  18. package/dist/core/index.js.map +1 -0
  19. package/dist/core/messages.d.ts +53 -0
  20. package/dist/core/messages.d.ts.map +1 -0
  21. package/dist/core/messages.js +16 -0
  22. package/dist/core/messages.js.map +1 -0
  23. package/dist/core/partial-json.d.ts +36 -0
  24. package/dist/core/partial-json.d.ts.map +1 -0
  25. package/dist/core/partial-json.js +119 -0
  26. package/dist/core/partial-json.js.map +1 -0
  27. package/dist/core/persistence/index.d.ts +11 -0
  28. package/dist/core/persistence/index.d.ts.map +1 -0
  29. package/dist/core/persistence/index.js +11 -0
  30. package/dist/core/persistence/index.js.map +1 -0
  31. package/dist/core/persistence/ports.d.ts +124 -0
  32. package/dist/core/persistence/ports.d.ts.map +1 -0
  33. package/dist/core/persistence/ports.js +2 -0
  34. package/dist/core/persistence/ports.js.map +1 -0
  35. package/dist/core/persistence/title.d.ts +35 -0
  36. package/dist/core/persistence/title.d.ts.map +1 -0
  37. package/dist/core/persistence/title.js +137 -0
  38. package/dist/core/persistence/title.js.map +1 -0
  39. package/dist/core/question-form/format.d.ts +27 -0
  40. package/dist/core/question-form/format.d.ts.map +1 -0
  41. package/dist/core/question-form/format.js +45 -0
  42. package/dist/core/question-form/format.js.map +1 -0
  43. package/dist/core/question-form/normalize.d.ts +30 -0
  44. package/dist/core/question-form/normalize.d.ts.map +1 -0
  45. package/dist/core/question-form/normalize.js +192 -0
  46. package/dist/core/question-form/normalize.js.map +1 -0
  47. package/dist/core/question-form/scan.d.ts +50 -0
  48. package/dist/core/question-form/scan.d.ts.map +1 -0
  49. package/dist/core/question-form/scan.js +404 -0
  50. package/dist/core/question-form/scan.js.map +1 -0
  51. package/dist/core/question-form/types.d.ts +83 -0
  52. package/dist/core/question-form/types.d.ts.map +1 -0
  53. package/dist/core/question-form/types.js +11 -0
  54. package/dist/core/question-form/types.js.map +1 -0
  55. package/dist/core/question-form.d.ts +39 -0
  56. package/dist/core/question-form.d.ts.map +1 -0
  57. package/dist/core/question-form.js +4 -0
  58. package/dist/core/question-form.js.map +1 -0
  59. package/dist/core/todos.d.ts +70 -0
  60. package/dist/core/todos.d.ts.map +1 -0
  61. package/dist/core/todos.js +175 -0
  62. package/dist/core/todos.js.map +1 -0
  63. package/dist/core/tool-events.d.ts +18 -0
  64. package/dist/core/tool-events.d.ts.map +1 -0
  65. package/dist/core/tool-events.js +36 -0
  66. package/dist/core/tool-events.js.map +1 -0
  67. package/dist/core/tools.d.ts +51 -0
  68. package/dist/core/tools.d.ts.map +1 -0
  69. package/dist/core/tools.js +41 -0
  70. package/dist/core/tools.js.map +1 -0
  71. package/dist/core/transcript.d.ts +81 -0
  72. package/dist/core/transcript.d.ts.map +1 -0
  73. package/dist/core/transcript.js +133 -0
  74. package/dist/core/transcript.js.map +1 -0
  75. package/dist/core/transport.d.ts +109 -0
  76. package/dist/core/transport.d.ts.map +1 -0
  77. package/dist/core/transport.js +2 -0
  78. package/dist/core/transport.js.map +1 -0
  79. package/dist/core/util/index.d.ts +16 -0
  80. package/dist/core/util/index.d.ts.map +1 -0
  81. package/dist/core/util/index.js +16 -0
  82. package/dist/core/util/index.js.map +1 -0
  83. package/dist/core/util/manifest.d.ts +39 -0
  84. package/dist/core/util/manifest.d.ts.map +1 -0
  85. package/dist/core/util/manifest.js +173 -0
  86. package/dist/core/util/manifest.js.map +1 -0
  87. package/dist/core/util/markdown-context.d.ts +47 -0
  88. package/dist/core/util/markdown-context.d.ts.map +1 -0
  89. package/dist/core/util/markdown-context.js +125 -0
  90. package/dist/core/util/markdown-context.js.map +1 -0
  91. package/dist/core/util/markup-attributes.d.ts +20 -0
  92. package/dist/core/util/markup-attributes.d.ts.map +1 -0
  93. package/dist/core/util/markup-attributes.js +33 -0
  94. package/dist/core/util/markup-attributes.js.map +1 -0
  95. package/dist/core/util/parser.d.ts +42 -0
  96. package/dist/core/util/parser.d.ts.map +1 -0
  97. package/dist/core/util/parser.js +238 -0
  98. package/dist/core/util/parser.js.map +1 -0
  99. package/dist/core/util/pointer.d.ts +28 -0
  100. package/dist/core/util/pointer.d.ts.map +1 -0
  101. package/dist/core/util/pointer.js +75 -0
  102. package/dist/core/util/pointer.js.map +1 -0
  103. package/dist/core/util/recover.d.ts +40 -0
  104. package/dist/core/util/recover.d.ts.map +1 -0
  105. package/dist/core/util/recover.js +117 -0
  106. package/dist/core/util/recover.js.map +1 -0
  107. package/dist/core/util/strip.d.ts +112 -0
  108. package/dist/core/util/strip.d.ts.map +1 -0
  109. package/dist/core/util/strip.js +333 -0
  110. package/dist/core/util/strip.js.map +1 -0
  111. package/dist/core/util/types.d.ts +31 -0
  112. package/dist/core/util/types.d.ts.map +1 -0
  113. package/dist/core/util/types.js +2 -0
  114. package/dist/core/util/types.js.map +1 -0
  115. package/dist/core/util/validate.d.ts +50 -0
  116. package/dist/core/util/validate.d.ts.map +1 -0
  117. package/dist/core/util/validate.js +202 -0
  118. package/dist/core/util/validate.js.map +1 -0
  119. package/dist/react/agent-bridge/frontend-session-bridge.d.ts +45 -0
  120. package/dist/react/agent-bridge/frontend-session-bridge.d.ts.map +1 -0
  121. package/dist/react/agent-bridge/frontend-session-bridge.js +214 -0
  122. package/dist/react/agent-bridge/frontend-session-bridge.js.map +1 -0
  123. package/dist/react/artifact-types.d.ts +61 -0
  124. package/dist/react/artifact-types.d.ts.map +1 -0
  125. package/dist/react/artifact-types.js +33 -0
  126. package/dist/react/artifact-types.js.map +1 -0
  127. package/dist/react/chat-pane.d.ts +21 -0
  128. package/dist/react/chat-pane.d.ts.map +1 -0
  129. package/dist/react/chat-pane.js +20 -0
  130. package/dist/react/chat-pane.js.map +1 -0
  131. package/dist/react/components/A2uiSurfaceCard.d.ts +35 -0
  132. package/dist/react/components/A2uiSurfaceCard.d.ts.map +1 -0
  133. package/dist/react/components/A2uiSurfaceCard.js +272 -0
  134. package/dist/react/components/A2uiSurfaceCard.js.map +1 -0
  135. package/dist/react/components/AttachmentTray.d.ts +6 -0
  136. package/dist/react/components/AttachmentTray.d.ts.map +1 -0
  137. package/dist/react/components/AttachmentTray.js +30 -0
  138. package/dist/react/components/AttachmentTray.js.map +1 -0
  139. package/dist/react/components/ChatFab.d.ts +8 -0
  140. package/dist/react/components/ChatFab.d.ts.map +1 -0
  141. package/dist/react/components/ChatFab.js +24 -0
  142. package/dist/react/components/ChatFab.js.map +1 -0
  143. package/dist/react/components/Composer.d.ts +34 -0
  144. package/dist/react/components/Composer.d.ts.map +1 -0
  145. package/dist/react/components/Composer.js +300 -0
  146. package/dist/react/components/Composer.js.map +1 -0
  147. package/dist/react/components/ComposerDiscovery.d.ts +46 -0
  148. package/dist/react/components/ComposerDiscovery.d.ts.map +1 -0
  149. package/dist/react/components/ComposerDiscovery.js +38 -0
  150. package/dist/react/components/ComposerDiscovery.js.map +1 -0
  151. package/dist/react/components/ConversationList.d.ts +31 -0
  152. package/dist/react/components/ConversationList.d.ts.map +1 -0
  153. package/dist/react/components/ConversationList.js +221 -0
  154. package/dist/react/components/ConversationList.js.map +1 -0
  155. package/dist/react/components/ExtEventErrorBoundary.d.ts +35 -0
  156. package/dist/react/components/ExtEventErrorBoundary.d.ts.map +1 -0
  157. package/dist/react/components/ExtEventErrorBoundary.js +38 -0
  158. package/dist/react/components/ExtEventErrorBoundary.js.map +1 -0
  159. package/dist/react/components/Icon.d.ts +17 -0
  160. package/dist/react/components/Icon.d.ts.map +1 -0
  161. package/dist/react/components/Icon.js +46 -0
  162. package/dist/react/components/Icon.js.map +1 -0
  163. package/dist/react/components/JiniChatProvider.d.ts +45 -0
  164. package/dist/react/components/JiniChatProvider.d.ts.map +1 -0
  165. package/dist/react/components/JiniChatProvider.js +44 -0
  166. package/dist/react/components/JiniChatProvider.js.map +1 -0
  167. package/dist/react/components/Markdown.d.ts +5 -0
  168. package/dist/react/components/Markdown.d.ts.map +1 -0
  169. package/dist/react/components/Markdown.js +390 -0
  170. package/dist/react/components/Markdown.js.map +1 -0
  171. package/dist/react/components/McpUiSurfaceCard.d.ts +51 -0
  172. package/dist/react/components/McpUiSurfaceCard.d.ts.map +1 -0
  173. package/dist/react/components/McpUiSurfaceCard.js +159 -0
  174. package/dist/react/components/McpUiSurfaceCard.js.map +1 -0
  175. package/dist/react/components/MessageList.d.ts +15 -0
  176. package/dist/react/components/MessageList.d.ts.map +1 -0
  177. package/dist/react/components/MessageList.js +81 -0
  178. package/dist/react/components/MessageList.js.map +1 -0
  179. package/dist/react/components/MessageRow.d.ts +60 -0
  180. package/dist/react/components/MessageRow.d.ts.map +1 -0
  181. package/dist/react/components/MessageRow.js +156 -0
  182. package/dist/react/components/MessageRow.js.map +1 -0
  183. package/dist/react/components/NextStepActions.d.ts +34 -0
  184. package/dist/react/components/NextStepActions.d.ts.map +1 -0
  185. package/dist/react/components/NextStepActions.js +9 -0
  186. package/dist/react/components/NextStepActions.js.map +1 -0
  187. package/dist/react/components/QuestionForm.d.ts +26 -0
  188. package/dist/react/components/QuestionForm.d.ts.map +1 -0
  189. package/dist/react/components/QuestionForm.js +238 -0
  190. package/dist/react/components/QuestionForm.js.map +1 -0
  191. package/dist/react/components/QuestionsPanel.d.ts +13 -0
  192. package/dist/react/components/QuestionsPanel.d.ts.map +1 -0
  193. package/dist/react/components/QuestionsPanel.js +33 -0
  194. package/dist/react/components/QuestionsPanel.js.map +1 -0
  195. package/dist/react/components/TodoCard.d.ts +8 -0
  196. package/dist/react/components/TodoCard.d.ts.map +1 -0
  197. package/dist/react/components/TodoCard.js +29 -0
  198. package/dist/react/components/TodoCard.js.map +1 -0
  199. package/dist/react/components/ToolCard.d.ts +22 -0
  200. package/dist/react/components/ToolCard.d.ts.map +1 -0
  201. package/dist/react/components/ToolCard.js +298 -0
  202. package/dist/react/components/ToolCard.js.map +1 -0
  203. package/dist/react/components/composer-discovery.d.ts +107 -0
  204. package/dist/react/components/composer-discovery.d.ts.map +1 -0
  205. package/dist/react/components/composer-discovery.js +176 -0
  206. package/dist/react/components/composer-discovery.js.map +1 -0
  207. package/dist/react/ext-event-renderer-registry.d.ts +51 -0
  208. package/dist/react/ext-event-renderer-registry.d.ts.map +1 -0
  209. package/dist/react/ext-event-renderer-registry.js +20 -0
  210. package/dist/react/ext-event-renderer-registry.js.map +1 -0
  211. package/dist/react/features/chat-pane/agent-tools.d.ts +14 -0
  212. package/dist/react/features/chat-pane/agent-tools.d.ts.map +1 -0
  213. package/dist/react/features/chat-pane/agent-tools.js +22 -0
  214. package/dist/react/features/chat-pane/agent-tools.js.map +1 -0
  215. package/dist/react/features/chat-pane/components/AgentRuntimePicker.d.ts +12 -0
  216. package/dist/react/features/chat-pane/components/AgentRuntimePicker.d.ts.map +1 -0
  217. package/dist/react/features/chat-pane/components/AgentRuntimePicker.js +106 -0
  218. package/dist/react/features/chat-pane/components/AgentRuntimePicker.js.map +1 -0
  219. package/dist/react/features/chat-pane/components/ChatPane.d.ts +10 -0
  220. package/dist/react/features/chat-pane/components/ChatPane.d.ts.map +1 -0
  221. package/dist/react/features/chat-pane/components/ChatPane.js +169 -0
  222. package/dist/react/features/chat-pane/components/ChatPane.js.map +1 -0
  223. package/dist/react/features/chat-pane/create-daemon-attachment-uploader.d.ts +21 -0
  224. package/dist/react/features/chat-pane/create-daemon-attachment-uploader.d.ts.map +1 -0
  225. package/dist/react/features/chat-pane/create-daemon-attachment-uploader.js +213 -0
  226. package/dist/react/features/chat-pane/create-daemon-attachment-uploader.js.map +1 -0
  227. package/dist/react/features/chat-pane/create-mcp-ui-tool-caller.d.ts +70 -0
  228. package/dist/react/features/chat-pane/create-mcp-ui-tool-caller.d.ts.map +1 -0
  229. package/dist/react/features/chat-pane/create-mcp-ui-tool-caller.js +76 -0
  230. package/dist/react/features/chat-pane/create-mcp-ui-tool-caller.js.map +1 -0
  231. package/dist/react/features/chat-pane/hooks/useAgentRuntimePicker.hooks.d.ts +133 -0
  232. package/dist/react/features/chat-pane/hooks/useAgentRuntimePicker.hooks.d.ts.map +1 -0
  233. package/dist/react/features/chat-pane/hooks/useAgentRuntimePicker.hooks.js +258 -0
  234. package/dist/react/features/chat-pane/hooks/useAgentRuntimePicker.hooks.js.map +1 -0
  235. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts +66 -0
  236. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts.map +1 -0
  237. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js +224 -0
  238. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js.map +1 -0
  239. package/dist/react/features/chat-pane/hooks/useChatPaneAgentControl.hooks.d.ts +38 -0
  240. package/dist/react/features/chat-pane/hooks/useChatPaneAgentControl.hooks.d.ts.map +1 -0
  241. package/dist/react/features/chat-pane/hooks/useChatPaneAgentControl.hooks.js +252 -0
  242. package/dist/react/features/chat-pane/hooks/useChatPaneAgentControl.hooks.js.map +1 -0
  243. package/dist/react/features/chat-pane/hooks/useChatPaneControlsHeight.hooks.d.ts +16 -0
  244. package/dist/react/features/chat-pane/hooks/useChatPaneControlsHeight.hooks.d.ts.map +1 -0
  245. package/dist/react/features/chat-pane/hooks/useChatPaneControlsHeight.hooks.js +59 -0
  246. package/dist/react/features/chat-pane/hooks/useChatPaneControlsHeight.hooks.js.map +1 -0
  247. package/dist/react/features/chat-pane/hooks/useChatPaneFileDrop.hooks.d.ts +26 -0
  248. package/dist/react/features/chat-pane/hooks/useChatPaneFileDrop.hooks.d.ts.map +1 -0
  249. package/dist/react/features/chat-pane/hooks/useChatPaneFileDrop.hooks.js +74 -0
  250. package/dist/react/features/chat-pane/hooks/useChatPaneFileDrop.hooks.js.map +1 -0
  251. package/dist/react/features/chat-pane/hooks/useChatPaneRuntimeInventory.hooks.d.ts +25 -0
  252. package/dist/react/features/chat-pane/hooks/useChatPaneRuntimeInventory.hooks.d.ts.map +1 -0
  253. package/dist/react/features/chat-pane/hooks/useChatPaneRuntimeInventory.hooks.js +88 -0
  254. package/dist/react/features/chat-pane/hooks/useChatPaneRuntimeInventory.hooks.js.map +1 -0
  255. package/dist/react/features/chat-pane/hooks/useChatPaneWorkingDirectory.hooks.d.ts +38 -0
  256. package/dist/react/features/chat-pane/hooks/useChatPaneWorkingDirectory.hooks.d.ts.map +1 -0
  257. package/dist/react/features/chat-pane/hooks/useChatPaneWorkingDirectory.hooks.js +184 -0
  258. package/dist/react/features/chat-pane/hooks/useChatPaneWorkingDirectory.hooks.js.map +1 -0
  259. package/dist/react/features/chat-pane/index.d.ts +12 -0
  260. package/dist/react/features/chat-pane/index.d.ts.map +1 -0
  261. package/dist/react/features/chat-pane/index.js +11 -0
  262. package/dist/react/features/chat-pane/index.js.map +1 -0
  263. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts +12 -0
  264. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts.map +1 -0
  265. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js +102 -0
  266. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js.map +1 -0
  267. package/dist/react/features/chat-pane/react/components/ChatPane.d.ts +10 -0
  268. package/dist/react/features/chat-pane/react/components/ChatPane.d.ts.map +1 -0
  269. package/dist/react/features/chat-pane/react/components/ChatPane.js +137 -0
  270. package/dist/react/features/chat-pane/react/components/ChatPane.js.map +1 -0
  271. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts +133 -0
  272. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts.map +1 -0
  273. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js +258 -0
  274. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js.map +1 -0
  275. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts +66 -0
  276. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts.map +1 -0
  277. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js +223 -0
  278. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js.map +1 -0
  279. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts +38 -0
  280. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts.map +1 -0
  281. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js +252 -0
  282. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js.map +1 -0
  283. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts +26 -0
  284. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts.map +1 -0
  285. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js +60 -0
  286. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js.map +1 -0
  287. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts +25 -0
  288. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts.map +1 -0
  289. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js +83 -0
  290. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js.map +1 -0
  291. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts +38 -0
  292. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts.map +1 -0
  293. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js +184 -0
  294. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js.map +1 -0
  295. package/dist/react/features/chat-pane/react/styles.d.ts +2 -0
  296. package/dist/react/features/chat-pane/react/styles.d.ts.map +1 -0
  297. package/dist/react/features/chat-pane/react/styles.js +863 -0
  298. package/dist/react/features/chat-pane/react/styles.js.map +1 -0
  299. package/dist/react/features/chat-pane/rules.d.ts +31 -0
  300. package/dist/react/features/chat-pane/rules.d.ts.map +1 -0
  301. package/dist/react/features/chat-pane/rules.js +81 -0
  302. package/dist/react/features/chat-pane/rules.js.map +1 -0
  303. package/dist/react/features/chat-pane/styles.d.ts +2 -0
  304. package/dist/react/features/chat-pane/styles.d.ts.map +1 -0
  305. package/dist/react/features/chat-pane/styles.js +1327 -0
  306. package/dist/react/features/chat-pane/styles.js.map +1 -0
  307. package/dist/react/features/chat-pane/types.d.ts +248 -0
  308. package/dist/react/features/chat-pane/types.d.ts.map +1 -0
  309. package/dist/react/features/chat-pane/types.js +2 -0
  310. package/dist/react/features/chat-pane/types.js.map +1 -0
  311. package/dist/react/features/model-picker/components/CredentialStatusBadge.d.ts +7 -0
  312. package/dist/react/features/model-picker/components/CredentialStatusBadge.d.ts.map +1 -0
  313. package/dist/react/features/model-picker/components/CredentialStatusBadge.js +20 -0
  314. package/dist/react/features/model-picker/components/CredentialStatusBadge.js.map +1 -0
  315. package/dist/react/features/model-picker/components/ModelPicker.d.ts +9 -0
  316. package/dist/react/features/model-picker/components/ModelPicker.d.ts.map +1 -0
  317. package/dist/react/features/model-picker/components/ModelPicker.js +34 -0
  318. package/dist/react/features/model-picker/components/ModelPicker.js.map +1 -0
  319. package/dist/react/features/model-picker/constants.d.ts +6 -0
  320. package/dist/react/features/model-picker/constants.d.ts.map +1 -0
  321. package/dist/react/features/model-picker/constants.js +9 -0
  322. package/dist/react/features/model-picker/constants.js.map +1 -0
  323. package/dist/react/features/model-picker/dependencies.d.ts +11 -0
  324. package/dist/react/features/model-picker/dependencies.d.ts.map +1 -0
  325. package/dist/react/features/model-picker/dependencies.js +10 -0
  326. package/dist/react/features/model-picker/dependencies.js.map +1 -0
  327. package/dist/react/features/model-picker/hooks/useModelPicker.hooks.d.ts +27 -0
  328. package/dist/react/features/model-picker/hooks/useModelPicker.hooks.d.ts.map +1 -0
  329. package/dist/react/features/model-picker/hooks/useModelPicker.hooks.js +62 -0
  330. package/dist/react/features/model-picker/hooks/useModelPicker.hooks.js.map +1 -0
  331. package/dist/react/features/model-picker/index.d.ts +32 -0
  332. package/dist/react/features/model-picker/index.d.ts.map +1 -0
  333. package/dist/react/features/model-picker/index.js +29 -0
  334. package/dist/react/features/model-picker/index.js.map +1 -0
  335. package/dist/react/features/model-picker/ports.d.ts +11 -0
  336. package/dist/react/features/model-picker/ports.d.ts.map +1 -0
  337. package/dist/react/features/model-picker/ports.js +2 -0
  338. package/dist/react/features/model-picker/ports.js.map +1 -0
  339. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts +7 -0
  340. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts.map +1 -0
  341. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js +20 -0
  342. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js.map +1 -0
  343. package/dist/react/features/model-picker/react/components/ModelPicker.d.ts +9 -0
  344. package/dist/react/features/model-picker/react/components/ModelPicker.d.ts.map +1 -0
  345. package/dist/react/features/model-picker/react/components/ModelPicker.js +34 -0
  346. package/dist/react/features/model-picker/react/components/ModelPicker.js.map +1 -0
  347. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts +27 -0
  348. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts.map +1 -0
  349. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js +62 -0
  350. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js.map +1 -0
  351. package/dist/react/features/model-picker/rules.d.ts +26 -0
  352. package/dist/react/features/model-picker/rules.d.ts.map +1 -0
  353. package/dist/react/features/model-picker/rules.js +84 -0
  354. package/dist/react/features/model-picker/rules.js.map +1 -0
  355. package/dist/react/features/model-picker/types.d.ts +38 -0
  356. package/dist/react/features/model-picker/types.d.ts.map +1 -0
  357. package/dist/react/features/model-picker/types.js +2 -0
  358. package/dist/react/features/model-picker/types.js.map +1 -0
  359. package/dist/react/hooks/composer-draft-cache.d.ts +65 -0
  360. package/dist/react/hooks/composer-draft-cache.d.ts.map +1 -0
  361. package/dist/react/hooks/composer-draft-cache.js +89 -0
  362. package/dist/react/hooks/composer-draft-cache.js.map +1 -0
  363. package/dist/react/hooks/context.d.ts +18 -0
  364. package/dist/react/hooks/context.d.ts.map +1 -0
  365. package/dist/react/hooks/context.js +60 -0
  366. package/dist/react/hooks/context.js.map +1 -0
  367. package/dist/react/hooks/testing/fake-transport.d.ts +34 -0
  368. package/dist/react/hooks/testing/fake-transport.d.ts.map +1 -0
  369. package/dist/react/hooks/testing/fake-transport.js +46 -0
  370. package/dist/react/hooks/testing/fake-transport.js.map +1 -0
  371. package/dist/react/hooks/useArtifactStream.d.ts +18 -0
  372. package/dist/react/hooks/useArtifactStream.d.ts.map +1 -0
  373. package/dist/react/hooks/useArtifactStream.js +55 -0
  374. package/dist/react/hooks/useArtifactStream.js.map +1 -0
  375. package/dist/react/hooks/useChatFabDrag.d.ts +25 -0
  376. package/dist/react/hooks/useChatFabDrag.d.ts.map +1 -0
  377. package/dist/react/hooks/useChatFabDrag.js +88 -0
  378. package/dist/react/hooks/useChatFabDrag.js.map +1 -0
  379. package/dist/react/hooks/useComposer.d.ts +48 -0
  380. package/dist/react/hooks/useComposer.d.ts.map +1 -0
  381. package/dist/react/hooks/useComposer.js +121 -0
  382. package/dist/react/hooks/useComposer.js.map +1 -0
  383. package/dist/react/hooks/useConversation.d.ts +34 -0
  384. package/dist/react/hooks/useConversation.d.ts.map +1 -0
  385. package/dist/react/hooks/useConversation.js +163 -0
  386. package/dist/react/hooks/useConversation.js.map +1 -0
  387. package/dist/react/hooks/useCopyToClipboard.d.ts +14 -0
  388. package/dist/react/hooks/useCopyToClipboard.d.ts.map +1 -0
  389. package/dist/react/hooks/useCopyToClipboard.js +98 -0
  390. package/dist/react/hooks/useCopyToClipboard.js.map +1 -0
  391. package/dist/react/hooks/useExtEventGroups.d.ts +7 -0
  392. package/dist/react/hooks/useExtEventGroups.d.ts.map +1 -0
  393. package/dist/react/hooks/useExtEventGroups.js +32 -0
  394. package/dist/react/hooks/useExtEventGroups.js.map +1 -0
  395. package/dist/react/hooks/useLatestOperation.d.ts +31 -0
  396. package/dist/react/hooks/useLatestOperation.d.ts.map +1 -0
  397. package/dist/react/hooks/useLatestOperation.js +74 -0
  398. package/dist/react/hooks/useLatestOperation.js.map +1 -0
  399. package/dist/react/hooks/usePinnedTodos.d.ts +15 -0
  400. package/dist/react/hooks/usePinnedTodos.d.ts.map +1 -0
  401. package/dist/react/hooks/usePinnedTodos.js +43 -0
  402. package/dist/react/hooks/usePinnedTodos.js.map +1 -0
  403. package/dist/react/hooks/useQuestionForms.d.ts +28 -0
  404. package/dist/react/hooks/useQuestionForms.d.ts.map +1 -0
  405. package/dist/react/hooks/useQuestionForms.js +113 -0
  406. package/dist/react/hooks/useQuestionForms.js.map +1 -0
  407. package/dist/react/hooks/useRunStream.d.ts +27 -0
  408. package/dist/react/hooks/useRunStream.d.ts.map +1 -0
  409. package/dist/react/hooks/useRunStream.js +180 -0
  410. package/dist/react/hooks/useRunStream.js.map +1 -0
  411. package/dist/react/hooks/useToolTimeline.d.ts +33 -0
  412. package/dist/react/hooks/useToolTimeline.d.ts.map +1 -0
  413. package/dist/react/hooks/useToolTimeline.js +47 -0
  414. package/dist/react/hooks/useToolTimeline.js.map +1 -0
  415. package/dist/react/index.d.ts +158 -0
  416. package/dist/react/index.d.ts.map +1 -0
  417. package/dist/react/index.js +118 -0
  418. package/dist/react/index.js.map +1 -0
  419. package/dist/react/message-blocks.d.ts +86 -0
  420. package/dist/react/message-blocks.d.ts.map +1 -0
  421. package/dist/react/message-blocks.js +78 -0
  422. package/dist/react/message-blocks.js.map +1 -0
  423. package/dist/react/poc-mcp-ui-official/PocMcpUiCard.d.ts +9 -0
  424. package/dist/react/poc-mcp-ui-official/PocMcpUiCard.d.ts.map +1 -0
  425. package/dist/react/poc-mcp-ui-official/PocMcpUiCard.js +29 -0
  426. package/dist/react/poc-mcp-ui-official/PocMcpUiCard.js.map +1 -0
  427. package/dist/react/poc-mcp-ui-official/create-poc-resource.d.ts +30 -0
  428. package/dist/react/poc-mcp-ui-official/create-poc-resource.d.ts.map +1 -0
  429. package/dist/react/poc-mcp-ui-official/create-poc-resource.js +44 -0
  430. package/dist/react/poc-mcp-ui-official/create-poc-resource.js.map +1 -0
  431. package/dist/react/slots.d.ts +215 -0
  432. package/dist/react/slots.d.ts.map +1 -0
  433. package/dist/react/slots.js +2 -0
  434. package/dist/react/slots.js.map +1 -0
  435. package/dist/react/styles/reference.css +298 -0
  436. package/dist/react/tool-renderer-registry.d.ts +41 -0
  437. package/dist/react/tool-renderer-registry.d.ts.map +1 -0
  438. package/dist/react/tool-renderer-registry.js +22 -0
  439. package/dist/react/tool-renderer-registry.js.map +1 -0
  440. package/dist/react/util/defined-props.d.ts +31 -0
  441. package/dist/react/util/defined-props.d.ts.map +1 -0
  442. package/dist/react/util/defined-props.js +28 -0
  443. package/dist/react/util/defined-props.js.map +1 -0
  444. package/package.json +99 -0
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @module useQuestionForms
3
+ *
4
+ * Parses `<question-form>` artifacts out of each assistant message via
5
+ * `@jini-ai/chat/core`'s `findFirstQuestionForm`, tracks which one (if any) is
6
+ * still the active/answerable one, and recovers already-submitted answers by
7
+ * reading the next user message's `[form answers — ...]` payload. Pure parse
8
+ * — `submit` only builds the next-user-message text; the host posts it via
9
+ * its own `sendMessage`/transport call. Per
10
+ * `ADS-memory/reports/jini-port/recon/r4b-webui-design.md` §4.
11
+ *
12
+ * `parseSubmittedAnswers` below generalizes OD's `components/QuestionForm.tsx`
13
+ * function of the same name (verified 0 OD product references — it only
14
+ * reverses `formatFormAnswers`'s own text format) into this package, since
15
+ * chat-core intentionally ships only the forward direction
16
+ * (`formatFormAnswers`).
17
+ */
18
+ import { useCallback, useMemo } from 'react';
19
+ import { findFirstQuestionForm, formOptionValueForLabel, formatFormAnswers } from '../../core/index.js';
20
+ export function useQuestionForms(messages) {
21
+ const forms = useMemo(() => {
22
+ if (!messages || messages.length === 0)
23
+ return [];
24
+ const out = [];
25
+ for (let i = 0; i < messages.length; i += 1) {
26
+ const message = messages[i];
27
+ if (!message || message.role !== 'assistant')
28
+ continue;
29
+ const found = findFirstQuestionForm(message.content);
30
+ if (!found)
31
+ continue;
32
+ const nextMessage = messages[i + 1];
33
+ const submittedAnswers = nextMessage && nextMessage.role === 'user' ? parseSubmittedAnswers(found.form, nextMessage.content) ?? undefined : undefined;
34
+ const interactive = submittedAnswers === undefined && i === messages.length - 1;
35
+ out.push({ form: found.form, raw: found.raw, messageId: message.id, interactive, submittedAnswers });
36
+ }
37
+ return out;
38
+ }, [messages]);
39
+ const activeForm = useMemo(() => {
40
+ for (let i = forms.length - 1; i >= 0; i -= 1) {
41
+ const form = forms[i];
42
+ if (form?.interactive)
43
+ return form;
44
+ }
45
+ return null;
46
+ }, [forms]);
47
+ const buildSubmission = useCallback((form, answers) => formatFormAnswers(form, answers), []);
48
+ return { forms, activeForm, buildSubmission };
49
+ }
50
+ /**
51
+ * Reverse of `formatFormAnswers` — given the user message that (maybe)
52
+ * answered `form`, recover the answers map so the form can render in its
53
+ * locked "answered" state with the user's picks visible.
54
+ */
55
+ export function parseSubmittedAnswers(form, userMessageContent) {
56
+ // `String.prototype.split` always returns an array of length >= 1 (even
57
+ // `''.split('\n')` is `['']`), so `lines` can never be empty here — no
58
+ // `lines.length === 0` guard is needed (removed as provably-dead). Index 0
59
+ // of a non-empty array is always defined; TS just can't express that for
60
+ // a plain numeric index, hence the assertion instead of a `?? ''` branch
61
+ // that would never take its fallback path.
62
+ const lines = userMessageContent.split('\n').map((l) => l.trim());
63
+ const header = lines[0];
64
+ if (!/^\[form answers/i.test(header))
65
+ return null;
66
+ const answers = {};
67
+ const labelToId = new Map();
68
+ for (const q of form.questions)
69
+ labelToId.set(q.label.toLowerCase(), q.id);
70
+ for (let i = 1; i < lines.length; i += 1) {
71
+ // `i < lines.length` is the loop condition, so this index is always
72
+ // in-bounds and defined — same reasoning as `header` above.
73
+ const line = lines[i];
74
+ const m = /^[-*]\s*([^:]+):\s*(.*)$/.exec(line);
75
+ if (!m)
76
+ continue;
77
+ // Both capture groups are required (non-optional) in this pattern, so
78
+ // they're always defined once `m` is non-null — TS just can't express
79
+ // that for regex capture groups.
80
+ const labelKey = m[1].trim().toLowerCase();
81
+ const value = m[2].trim();
82
+ const id = labelToId.get(labelKey);
83
+ if (!id)
84
+ continue;
85
+ // `id` only ever comes from `labelToId`, which was populated from this
86
+ // same `form.questions` array immediately above, so a question with
87
+ // this exact `id` is always found — the `!` reflects that invariant
88
+ // rather than gaming an untestable defensive branch.
89
+ const question = form.questions.find((x) => x.id === id);
90
+ answers[id] = decodeAnswerValue(question, value);
91
+ }
92
+ return Object.keys(answers).length > 0 ? answers : null;
93
+ }
94
+ function decodeAnswerValue(question, value) {
95
+ if (question.type === 'checkbox') {
96
+ return value
97
+ .split(',')
98
+ .map((s) => s.trim())
99
+ .filter((s) => s.length > 0 && s.toLowerCase() !== '(skipped)')
100
+ .map((s) => formOptionValueForLabel(question, parseSubmittedOptionToken(s)));
101
+ }
102
+ return value.toLowerCase() === '(skipped)' ? '' : formOptionValueForLabel(question, parseSubmittedOptionToken(value));
103
+ }
104
+ function parseSubmittedOptionToken(raw) {
105
+ const match = /\s+\[value:\s*([^\]]+)\]\s*$/i.exec(raw);
106
+ if (!match)
107
+ return raw.trim();
108
+ // The single capture group is non-optional in this pattern, so it's
109
+ // always defined once `match` is non-null — same regex-capture-group
110
+ // caveat as `parseSubmittedAnswers` above.
111
+ return match[1].trim();
112
+ }
113
+ //# sourceMappingURL=useQuestionForms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuestionForms.js","sourceRoot":"","sources":["../../../src/react/hooks/useQuestionForms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { AgentEvent } from '../../core/index.js';
2
+ import type { ChatTransport, StartRunInput } from '../../core/index.js';
3
+ export type RunStreamStatus = 'idle' | 'streaming' | 'done' | 'error' | 'canceled';
4
+ export interface RunStreamState {
5
+ runId: string | null;
6
+ status: RunStreamStatus;
7
+ events: AgentEvent[];
8
+ error: Error | null;
9
+ /** Ephemeral live tool-input fragments, keyed by tool-use id. Never persisted. */
10
+ toolInputDeltas: Record<string, string>;
11
+ }
12
+ export type StartRunOptions = Omit<StartRunInput, 'signal' | 'cancelSignal'>;
13
+ export interface UseRunStreamResult extends RunStreamState {
14
+ /** True while `status === 'streaming'`. Convenience for render conditions. */
15
+ isStreaming: boolean;
16
+ start: (input: StartRunOptions) => Promise<{
17
+ runId: string;
18
+ } | null>;
19
+ /** Resume listening to an already-started run (reconnect/replay), optionally seeded with its persisted events. */
20
+ reattach: (runId: string, initialEvents?: AgentEvent[]) => Promise<void>;
21
+ /** Aborts the current browser-side subscription AND asks the transport to stop the run host-side. */
22
+ cancel: () => void;
23
+ /** Clears all state back to `idle` without touching the transport (e.g. moving to a fresh turn). */
24
+ reset: () => void;
25
+ }
26
+ export declare function useRunStream(transport: ChatTransport): UseRunStreamResult;
27
+ //# sourceMappingURL=useRunStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRunStream.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useRunStream.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAe,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAErF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,kFAAkF;IAClF,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,cAAc,CAAC,CAAC;AAE7E,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,8EAA8E;IAC9E,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACrE,kHAAkH;IAClH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,qGAAqG;IACrG,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,oGAAoG;IACpG,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAkCD,wBAAgB,YAAY,CAAC,SAAS,EAAE,aAAa,GAAG,kBAAkB,CAoIzE"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * @module useRunStream
3
+ *
4
+ * Owns the current `runId`, streaming flag, accumulated `AgentEvent[]`,
5
+ * error/terminal state, and the ephemeral tool-input-delta buffer (keyed by
6
+ * tool id) for a single active run. Calls `transport.startRun`/
7
+ * `reattachRun`/`stopRun` — never touches `fetch`/`EventSource` itself; the
8
+ * `ChatTransport` port (see `../../transport.js`) is the only I/O this hook
9
+ * performs. Per `ADS-memory/reports/jini-port/recon/r4b-webui-design.md` §4's hook table.
10
+ *
11
+ * This hook IS the "single-instance orchestrator" the §4 accumulating-
12
+ * subscription rule refers to: it owns the one active browser-side
13
+ * subscription for whichever run it is currently attached to. Each
14
+ * start/reattach bumps a generation counter; handlers from a superseded
15
+ * generation are ignored, so a slow/duplicate callback from an aborted
16
+ * subscription can never clobber a newer one's state (a plain `runId`
17
+ * comparison can't do this — `start()`'s handlers must exist before the
18
+ * transport's promise resolves with the real id).
19
+ */
20
+ import { useCallback, useEffect, useRef, useState } from 'react';
21
+ function reportRunStreamHostEffectFailure(effectName, error) {
22
+ console.error(`[@jini-ai/chat] useRunStream ${effectName} host effect failed:`, error);
23
+ }
24
+ /**
25
+ * Fire-and-forget teardown call to `transport.stopRun`. Invokes it synchronously, then observes
26
+ * a synchronous throw or async rejection without leaving it unhandled — under Node's default
27
+ * `--unhandled-rejections=throw` a rejecting transport would otherwise crash the process, and in
28
+ * the browser it is a silent, undiagnosable console error. Neither call site awaits the result
29
+ * or calls `setState`, so there is nothing here that could touch state after unmount.
30
+ */
31
+ function runStopRunHostEffect(effectName, effect) {
32
+ let result;
33
+ try {
34
+ result = effect();
35
+ }
36
+ catch (error) {
37
+ reportRunStreamHostEffectFailure(effectName, error);
38
+ return;
39
+ }
40
+ void result.catch((error) => {
41
+ reportRunStreamHostEffectFailure(effectName, error);
42
+ });
43
+ }
44
+ const INITIAL_STATE = {
45
+ runId: null,
46
+ status: 'idle',
47
+ events: [],
48
+ error: null,
49
+ toolInputDeltas: {},
50
+ };
51
+ export function useRunStream(transport) {
52
+ const [state, setState] = useState(INITIAL_STATE);
53
+ const subscriptionAbortRef = useRef(null);
54
+ const cancelAbortRef = useRef(null);
55
+ // Bumped on every start/reattach/reset. A handler closes over the
56
+ // generation it was created for and drops itself once superseded.
57
+ const generationRef = useRef(0);
58
+ /**
59
+ * Generations that were CANCELLED (as opposed to merely superseded) while their `startRun` was
60
+ * still in flight.
61
+ *
62
+ * `cancel()` can only stop a run it has an id for, and during that window there is no id yet.
63
+ * The generation bump then routes the eventual resolution down the "not current" path, so the
64
+ * run was left alive on the daemon with nothing on the client able to reach it. Recording the
65
+ * intent here lets the resolution finish the job. A supersession by a new start/reattach is
66
+ * deliberately NOT recorded — that case really does need no stop.
67
+ */
68
+ const canceledGenerations = useRef(new Set());
69
+ const teardownSubscription = useCallback(() => {
70
+ subscriptionAbortRef.current?.abort();
71
+ subscriptionAbortRef.current = null;
72
+ cancelAbortRef.current = null;
73
+ }, []);
74
+ // Abort any in-flight subscription on unmount so a slow transport can't
75
+ // call back into a hook instance that no longer exists.
76
+ useEffect(() => teardownSubscription, [teardownSubscription]);
77
+ const makeHandlers = useCallback((generation) => {
78
+ const isStale = () => generationRef.current !== generation;
79
+ return {
80
+ onEvent: (ev) => {
81
+ if (isStale())
82
+ return;
83
+ setState((prev) => ({ ...prev, status: 'streaming', events: [...prev.events, ev] }));
84
+ },
85
+ onToolInputDelta: (id, _name, delta) => {
86
+ if (isStale())
87
+ return;
88
+ setState((prev) => ({
89
+ ...prev,
90
+ toolInputDeltas: { ...prev.toolInputDeltas, [id]: (prev.toolInputDeltas[id] ?? '') + delta },
91
+ }));
92
+ },
93
+ onError: (err) => {
94
+ if (isStale())
95
+ return;
96
+ setState((prev) => ({ ...prev, status: 'error', error: err }));
97
+ },
98
+ onDone: (finalEvents) => {
99
+ if (isStale())
100
+ return;
101
+ setState((prev) => ({ ...prev, status: prev.status === 'error' ? prev.status : 'done', events: finalEvents }));
102
+ },
103
+ };
104
+ }, []);
105
+ const start = useCallback(async (input) => {
106
+ teardownSubscription();
107
+ const generation = ++generationRef.current;
108
+ const subscriptionAbort = new AbortController();
109
+ const cancelAbort = new AbortController();
110
+ subscriptionAbortRef.current = subscriptionAbort;
111
+ cancelAbortRef.current = cancelAbort;
112
+ setState({ ...INITIAL_STATE, status: 'streaming' });
113
+ try {
114
+ const { runId } = await transport.startRun({ ...input, signal: subscriptionAbort.signal, cancelSignal: cancelAbort.signal }, makeHandlers(generation));
115
+ if (generationRef.current !== generation) {
116
+ // Consumed rather than assumed: only a CANCEL leaves an orphan here.
117
+ if (canceledGenerations.current.delete(generation)) {
118
+ runStopRunHostEffect('transport.stopRun (orphaned generation)', () => transport.stopRun(runId));
119
+ }
120
+ return { runId };
121
+ }
122
+ setState((prev) => ({ ...prev, runId }));
123
+ return { runId };
124
+ }
125
+ catch (err) {
126
+ // A start that never produced a run id has nothing to stop; drop the intent so the set does
127
+ // not accumulate one entry per failed start for the lifetime of the hook.
128
+ canceledGenerations.current.delete(generation);
129
+ if (generationRef.current !== generation)
130
+ return null;
131
+ setState((prev) => ({ ...prev, status: 'error', error: toError(err) }));
132
+ return null;
133
+ }
134
+ }, [makeHandlers, teardownSubscription, transport]);
135
+ const reattach = useCallback(async (runId, initialEvents = []) => {
136
+ teardownSubscription();
137
+ const generation = ++generationRef.current;
138
+ const subscriptionAbort = new AbortController();
139
+ const cancelAbort = new AbortController();
140
+ subscriptionAbortRef.current = subscriptionAbort;
141
+ cancelAbortRef.current = cancelAbort;
142
+ setState({ ...INITIAL_STATE, runId, status: 'streaming', events: initialEvents });
143
+ try {
144
+ // The subscription controller reaches the transport, so `teardownSubscription()` (unmount,
145
+ // reset, or a superseding start/reattach) actually detaches the stream. Without it the
146
+ // generation guard still stops stale callbacks from clobbering state, but the connection
147
+ // and its read loop stay open until the run ends on its own.
148
+ await transport.reattachRun(runId, makeHandlers(generation), { signal: subscriptionAbort.signal });
149
+ }
150
+ catch (err) {
151
+ if (generationRef.current !== generation)
152
+ return;
153
+ setState((prev) => ({ ...prev, status: 'error', error: toError(err) }));
154
+ }
155
+ }, [makeHandlers, teardownSubscription]);
156
+ const cancel = useCallback(() => {
157
+ cancelAbortRef.current?.abort();
158
+ const runId = state.runId;
159
+ // Recorded BEFORE the bump, so it names the generation currently in flight. When `runId` is
160
+ // already known the `stopRun` below does the work and this entry is simply never consumed;
161
+ // when it is not, this is the only thing that will ever stop that run.
162
+ if (runId == null)
163
+ canceledGenerations.current.add(generationRef.current);
164
+ generationRef.current += 1;
165
+ teardownSubscription();
166
+ setState((prev) => ({ ...prev, status: 'canceled' }));
167
+ if (runId)
168
+ runStopRunHostEffect('transport.stopRun (cancel)', () => transport.stopRun(runId));
169
+ }, [state.runId, teardownSubscription, transport]);
170
+ const reset = useCallback(() => {
171
+ generationRef.current += 1;
172
+ teardownSubscription();
173
+ setState(INITIAL_STATE);
174
+ }, [teardownSubscription]);
175
+ return { ...state, isStreaming: state.status === 'streaming', start, reattach, cancel, reset };
176
+ }
177
+ function toError(err) {
178
+ return err instanceof Error ? err : new Error(String(err));
179
+ }
180
+ //# sourceMappingURL=useRunStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRunStream.js","sourceRoot":"","sources":["../../../src/react/hooks/useRunStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { AgentEvent, ToolRenderProps, ToolStatus } from '../../core/index.js';
2
+ type ToolUseEvent = Extract<AgentEvent, {
3
+ kind: 'tool_use';
4
+ }>;
5
+ type ToolResultEvent = Extract<AgentEvent, {
6
+ kind: 'tool_result';
7
+ }>;
8
+ export interface ToolTimelineRow {
9
+ id: string;
10
+ name: string;
11
+ use: ToolUseEvent;
12
+ result: ToolResultEvent | undefined;
13
+ status: ToolStatus;
14
+ expanded: boolean;
15
+ renderProps: ToolRenderProps;
16
+ }
17
+ export interface UseToolTimelineOptions {
18
+ /** Whether the owning run is still emitting events. */
19
+ runStreaming?: boolean;
20
+ /** Whether the (already-terminal) owning run reached a successful status. Ignored while `runStreaming` is true. */
21
+ runSucceeded?: boolean;
22
+ /** Rows start expanded by default. Defaults to `false` (collapsed). */
23
+ defaultExpanded?: boolean;
24
+ }
25
+ export interface UseToolTimelineResult {
26
+ rows: ToolTimelineRow[];
27
+ toggle: (id: string) => void;
28
+ expandAll: () => void;
29
+ collapseAll: () => void;
30
+ }
31
+ export declare function useToolTimeline(events: AgentEvent[] | undefined, options?: UseToolTimelineOptions): UseToolTimelineResult;
32
+ export {};
33
+ //# sourceMappingURL=useToolTimeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToolTimeline.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useToolTimeline.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGnF,KAAK,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC;AAC9D,KAAK,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,YAAY,CAAC;IAClB,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mHAAmH;IACnH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,OAAO,GAAE,sBAA2B,GAAG,qBAAqB,CAsC7H"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @module useToolTimeline
3
+ *
4
+ * Per-tool lifecycle rows for a message's events: pairs each `tool_use` with
5
+ * its `tool_result` (deduped by id via `@jini-ai/chat/core`'s
6
+ * `dedupeToolUsesById`), derives a four-state status via
7
+ * `deriveToolStatus`, and tracks per-row expand/collapse UI state. Pure over
8
+ * `AgentEvent[]` — zero I/O. Per
9
+ * `ADS-memory/reports/jini-port/recon/r4b-webui-design.md` §4.
10
+ */
11
+ import { useCallback, useMemo, useState } from 'react';
12
+ import { dedupeToolUsesById, deriveToolStatus } from '../../core/index.js';
13
+ export function useToolTimeline(events, options = {}) {
14
+ const { runStreaming = false, runSucceeded = false, defaultExpanded = false } = options;
15
+ const [overrides, setOverrides] = useState({});
16
+ const deduped = useMemo(() => dedupeToolUsesById(events), [events]);
17
+ const rows = useMemo(() => {
18
+ const out = [];
19
+ for (const ev of deduped) {
20
+ if (ev.kind !== 'tool_use')
21
+ continue;
22
+ const result = deduped.find((r) => r.kind === 'tool_result' && r.toolUseId === ev.id);
23
+ const status = deriveToolStatus(result, runStreaming, runSucceeded);
24
+ out.push({
25
+ id: ev.id,
26
+ name: ev.name,
27
+ use: ev,
28
+ result,
29
+ status,
30
+ expanded: overrides[ev.id] ?? defaultExpanded,
31
+ renderProps: { status, name: ev.name, args: ev.input, result: result?.content, isError: result?.isError ?? false, media: result?.media },
32
+ });
33
+ }
34
+ return out;
35
+ }, [deduped, defaultExpanded, overrides, runStreaming, runSucceeded]);
36
+ const toggle = useCallback((id) => {
37
+ setOverrides((prev) => ({ ...prev, [id]: !(prev[id] ?? defaultExpanded) }));
38
+ }, [defaultExpanded]);
39
+ const expandAll = useCallback(() => {
40
+ setOverrides(Object.fromEntries(deduped.filter((e) => e.kind === 'tool_use').map((e) => [e.id, true])));
41
+ }, [deduped]);
42
+ const collapseAll = useCallback(() => {
43
+ setOverrides(Object.fromEntries(deduped.filter((e) => e.kind === 'tool_use').map((e) => [e.id, false])));
44
+ }, [deduped]);
45
+ return { rows, toggle, expandAll, collapseAll };
46
+ }
47
+ //# sourceMappingURL=useToolTimeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToolTimeline.js","sourceRoot":"","sources":["../../../src/react/hooks/useToolTimeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * @jini-ai/chat-react — headless hooks + presentational components + slots for
3
+ * a chat/artifact frontend, built on `@jini-ai/chat/core`'s framework-free
4
+ * vocabulary. See ADS-memory/reports/jini-port/recon/r4b-webui-design.md §1/§2/§4 for the
5
+ * spec this package implements, and source-map.md for provenance.
6
+ *
7
+ * This barrel is filled in incrementally as each layer lands (hooks first,
8
+ * then presentational components, then the `<JiniChatProvider>` composition
9
+ * root) — see source-map.md's "Status" section for what's shipped so far.
10
+ *
11
+ * ## Every export here is explicit. Do not reintroduce `export *`.
12
+ *
13
+ * This file used 15 `export * from` statements until 2026-08-05. That made the package's public
14
+ * API *implicit*: whatever any of those modules happened to export was public, so renaming an
15
+ * internal helper shipped a breaking change nobody reviewed, and no one could read this file and
16
+ * say what the package exports. It is also the likeliest reason consumers reach past this barrel
17
+ * into `@jini-ai/chat/core` deep paths — a grab-bag invites bypassing.
18
+ *
19
+ * The expansion was mechanical and provably surface-preserving: 193 symbols before and after,
20
+ * identical in name AND in value-vs-type kind. `features/chat-pane/index.ts` is the style model.
21
+ *
22
+ * When adding an export, add the name here deliberately. That edit IS the API review.
23
+ */
24
+ export type { ChatTransport, FeedbackChange, OnFeedback, ReattachRunOptions, RunContext, RunHandlers, StartRunInput, } from '../core/index.js';
25
+ export { RendererRegistry, } from './artifact-types.js';
26
+ export type { ArtifactFile, ArtifactRenderContext, ArtifactRenderMatch, ArtifactRenderer, } from './artifact-types.js';
27
+ export type { AgentOption, AgentSelection, AnalyticsAdapter, AnnotationAdapter, AttachmentTraySlot, ComposerDiscoveryArgument, ComposerDiscoveryGroup, ComposerDiscoveryItem, ComposerDiscoveryOutcome, ComposerDiscoverySelection, ComposerPlusItem, ComposerSlots, FilePreviewSlot, I18nAdapter, MentionResult, MentionSource, ModelAgentPickerSlot, ProjectContextValue, } from './slots.js';
28
+ export { clearToolRenderers, getToolRenderer, registerToolRenderer, } from './tool-renderer-registry.js';
29
+ export type { ToolRenderer, } from './tool-renderer-registry.js';
30
+ export { clearExtEventRenderers, getExtEventRenderer, registerExtEventRenderer, } from './ext-event-renderer-registry.js';
31
+ export type { ExtEventRenderProps, ExtEventRenderer, } from './ext-event-renderer-registry.js';
32
+ /**
33
+ * @deprecated REF-001 Step C (2026-08-05): `ChatPane` and its companions moved to their own
34
+ * subpath, `@jini-ai/chat/react/chat-pane` — import from there in new code. Re-exported here,
35
+ * unchanged, so every existing `import { ChatPane } from '@jini-ai/chat/react'` keeps working.
36
+ * This alias has no removal date scheduled yet; see `chat-pane.ts` for the canonical surface and
37
+ * the module doc there for why the split exists.
38
+ */
39
+ export { AgentRuntimePicker, CHAT_PANE_AGENT_TOOLS, ChatPane, createDaemonAttachmentUploader, createMcpUiToolCaller, defaultChatPaneSelection, orderChatPaneAgents, resolveChatPaneSelection, useChatPane, useChatPaneAgentControl, useChatPaneRuntimeInventory, useChatPaneWorkingDirectory, } from './chat-pane.js';
40
+ export type { AgentRuntimePickerProps, ByokRuntimeSummary, ChatPaneActivity, ChatPaneAgent, ChatPaneAgentBridgeAccess, ChatPaneAgentControlOptions, ChatPaneAgentOption, ChatPaneAgentSelection, ChatPaneAgentToolAction, ChatPaneAgentToolDef, ChatPaneAgentToolInputSchema, ChatPaneAgentToolRisk, ChatPaneAttachmentUploadOptions, ChatPaneComposerHandle, ChatPaneProps, ChatPaneRunContext, ChatPaneRunContextInput, ChatPaneRuntimeAccess, ChatPaneVariant, ChatPaneWorkingDirectoryAccess, CreateDaemonAttachmentUploaderOptions, CreateMcpUiToolCallerOptions, McpUiToolCallRequest, RuntimePickerPlacement, UseChatPaneAgentControlOptions, UseChatPaneOptions, UseChatPaneResult, UseChatPaneRuntimeInventoryOptions, UseChatPaneRuntimeInventoryResult, UseChatPaneWorkingDirectoryOptions, UseChatPaneWorkingDirectoryResult, } from './chat-pane.js';
41
+ export { useRunStream, } from './hooks/useRunStream.js';
42
+ export type { RunStreamState, RunStreamStatus, StartRunOptions, UseRunStreamResult, } from './hooks/useRunStream.js';
43
+ export { useConversation, } from './hooks/useConversation.js';
44
+ export type { SendMessageOptions, UseConversationOptions, UseConversationResult, } from './hooks/useConversation.js';
45
+ export { useComposer, } from './hooks/useComposer.js';
46
+ export type { ComposerDraftPersistence, MentionPopoverState, UseComposerOptions, UseComposerResult, } from './hooks/useComposer.js';
47
+ export { useToolTimeline, } from './hooks/useToolTimeline.js';
48
+ export type { ToolTimelineRow, UseToolTimelineOptions, UseToolTimelineResult, } from './hooks/useToolTimeline.js';
49
+ export { useExtEventGroups, } from './hooks/useExtEventGroups.js';
50
+ export type { ExtEventGroup, } from './hooks/useExtEventGroups.js';
51
+ export { usePinnedTodos, } from './hooks/usePinnedTodos.js';
52
+ export type { UsePinnedTodosResult, } from './hooks/usePinnedTodos.js';
53
+ export { parseSubmittedAnswers, useQuestionForms, } from './hooks/useQuestionForms.js';
54
+ export type { ParsedQuestionForm, QuestionFormAnswers, UseQuestionFormsResult, } from './hooks/useQuestionForms.js';
55
+ export { useArtifactStream, } from './hooks/useArtifactStream.js';
56
+ export type { ArtifactStreamItem, UseArtifactStreamResult, } from './hooks/useArtifactStream.js';
57
+ export { CHAT_FAB_DRAG_THRESHOLD_PX, CHAT_FAB_EDGE_MARGIN_PX, clampChatFabToViewport, useChatFabDrag, } from './hooks/useChatFabDrag.js';
58
+ export type { ChatFabPosition, UseChatFabDragResult, } from './hooks/useChatFabDrag.js';
59
+ export { useT, useI18n, useAnalytics, useProjectContext, useChatTransport, useArtifactRegistry, } from './hooks/context.js';
60
+ /**
61
+ * REF-001 Step D (2026-08-05): both newly public. `ChatPane`'s own composition already depended
62
+ * on both — `useLatestOperation` for the "only the newest attempt may write state" guard every
63
+ * async hook in this package needs, `definedProps` for collapsing `exactOptionalPropertyTypes`
64
+ * prop-forwarding ternaries — which was itself the finding: a consumer building an equivalent
65
+ * custom async hook or an equivalent prop-forwarding composition could not reach either one, so
66
+ * `ChatPane` was doing something the published API didn't let anyone else do. Both are general
67
+ * building blocks with no `ChatPane`-specific coupling (see each module's own doc), not composition
68
+ * internals, so exporting them is a surface completion, not a leak. See
69
+ * `scripts/check-chatpane-public-surface.ts` (R10) and
70
+ * ADS-memory/reports/refactor/2026-08-05-ref-001-steps-bcd-proposal.md §9.
71
+ */
72
+ export { normalizeOperationError, useLatestOperation, } from './hooks/useLatestOperation.js';
73
+ export type { LatestOperation, OperationToken, } from './hooks/useLatestOperation.js';
74
+ export { definedProps } from './util/defined-props.js';
75
+ export type { DefinedProps } from './util/defined-props.js';
76
+ /**
77
+ * Newly public for the same R10 reason as `definedProps`/`useLatestOperation` above:
78
+ * `ChatPane`'s `composerHandle.insertText` (see `types.ts`'s `ChatPaneComposerHandle`) joins
79
+ * inserted text onto the existing draft with `appendComposerDiscovery` — the same joining rule the
80
+ * "+" discovery menu's own `insertText` items use, so a host writing into the draft from outside
81
+ * `ChatPane`'s props gets the identical, already-established behavior rather than inventing a
82
+ * second concatenation rule. Zero `ChatPane`-specific coupling (it operates on a plain draft string
83
+ * and an insertion string), so a consumer assembling an equivalent external-insertion feature faced
84
+ * the same problem and could not previously reach this solution either.
85
+ */
86
+ export { appendComposerDiscovery } from './components/composer-discovery.js';
87
+ /**
88
+ * REF-001 §10 (2026-08-05): newly public, same reasoning as `definedProps`/`useLatestOperation`
89
+ * above. `MessageRow.tsx` (itself public) depends on `interleaveMessageBlocks` to reconstruct an
90
+ * assistant message's original event order — text and tool cards interleaved where they actually
91
+ * happened — from `ChatMessage.content` + `ChatMessage.events` (see `message-blocks.ts`'s own
92
+ * module doc for why this needs computing at all, and when it refuses rather than guesses). Zero
93
+ * `ChatPane`-specific coupling: it operates on core `AgentEvent`/message vocabulary, not anything
94
+ * `ChatPane`-shaped. A consumer building an equivalent custom message-row component, with its own
95
+ * tool-timeline data, faced the identical interleaving problem and could not reach this solution —
96
+ * the same API-gap finding as §9.2, just found one hop further out by §10's transitive-reach trace
97
+ * rather than by `ChatPane`'s own direct imports. See
98
+ * ADS-memory/reports/refactor/2026-08-05-ref-001-steps-bcd-proposal.md §10.2: this export closes
99
+ * the one live instance §10 found of R10's documented transitive-reach scope limit.
100
+ */
101
+ export { interleaveMessageBlocks } from './message-blocks.js';
102
+ export type { MessageBlock } from './message-blocks.js';
103
+ export { TodoCard } from './components/TodoCard.js';
104
+ export type { TodoCardProps } from './components/TodoCard.js';
105
+ /**
106
+ * The conversation switcher — new / select / delete / search / rename-on-double-click. Storage
107
+ * agnostic: it takes data plus callbacks, so a host backs it with `@jini-ai/sqlite`'s
108
+ * `ChatHistoryStore`, an HTTP endpoint, or a plain array. Drop it into `ChatPane`'s
109
+ * `leadingAccessory` slot; it needs no changes to `ChatPane` itself.
110
+ */
111
+ export { ConversationList } from './components/ConversationList.js';
112
+ export type { ConversationListProps, ConversationListItem } from './components/ConversationList.js';
113
+ export { ToolCard } from './components/ToolCard.js';
114
+ export type { ToolCardProps } from './components/ToolCard.js';
115
+ export { A2uiSurfaceCard } from './components/A2uiSurfaceCard.js';
116
+ export type { A2uiAgentActionOutcome, A2uiSurfaceCardProps } from './components/A2uiSurfaceCard.js';
117
+ /**
118
+ * Moved from `@jini-ai/ui`'s `react/mcp-ui/` 2026-08-03 (see `McpUiSurfaceCard.tsx`'s own file
119
+ * doc) — the same `kind: 'ext'` extensibility seam as `A2uiSurfaceCard` above, just for MCP-UI
120
+ * resources instead of A2UI surfaces.
121
+ */
122
+ export { McpUiSurfaceCard, registerMcpUiSurfaceRenderer, MCP_UI_EXT_EVENT_NAME } from './components/McpUiSurfaceCard.js';
123
+ export type { McpUiSurfaceCardProps } from './components/McpUiSurfaceCard.js';
124
+ export { ExtEventErrorBoundary } from './components/ExtEventErrorBoundary.js';
125
+ export type { ExtEventErrorBoundaryProps } from './components/ExtEventErrorBoundary.js';
126
+ export { QuestionForm } from './components/QuestionForm.js';
127
+ export type { QuestionFormProps, QuestionFormHandle, QuestionFormFileSubmission } from './components/QuestionForm.js';
128
+ export { QuestionsPanel } from './components/QuestionsPanel.js';
129
+ export type { QuestionsPanelProps } from './components/QuestionsPanel.js';
130
+ export { NextStepActions } from './components/NextStepActions.js';
131
+ export type { NextStepAction, NextStepActionsProps } from './components/NextStepActions.js';
132
+ export { Markdown } from './components/Markdown.js';
133
+ export type { MarkdownProps } from './components/Markdown.js';
134
+ export { MessageRow } from './components/MessageRow.js';
135
+ export type { MessageRowProps } from './components/MessageRow.js';
136
+ export { MessageList } from './components/MessageList.js';
137
+ export type { MessageListProps } from './components/MessageList.js';
138
+ export { Composer } from './components/Composer.js';
139
+ export type { ComposerProps } from './components/Composer.js';
140
+ export { AttachmentTray } from './components/AttachmentTray.js';
141
+ export type { AttachmentTrayProps } from './components/AttachmentTray.js';
142
+ export { ChatFab } from './components/ChatFab.js';
143
+ export type { ChatFabProps } from './components/ChatFab.js';
144
+ export { JiniChatProvider, useJiniChatSlots, useOnFeedback } from './components/JiniChatProvider.js';
145
+ export type { JiniChatProviderProps, JiniChatSlots } from './components/JiniChatProvider.js';
146
+ /**
147
+ * Agent bridge — the browser half of daemon-relayed frontend control.
148
+ *
149
+ * Lives here rather than in an example because a consumer cannot copy-paste its way to a
150
+ * transport: this is the piece that makes `ChatPaneAgentBridgeAccess` satisfiable at all.
151
+ *
152
+ * `createDomPageDriver`/`currentAgentPage` moved to `@jini-ai/agentic/dom` in the 2026-07-26
153
+ * extraction — re-exported here so existing `@jini-ai/chat-react` importers keep working.
154
+ */
155
+ export { createFrontendSessionBridge } from './agent-bridge/frontend-session-bridge.js';
156
+ export type { FrontendSessionBridge, FrontendSessionBridgeOptions, } from './agent-bridge/frontend-session-bridge.js';
157
+ export { createDomPageDriver, currentAgentPage, type DomPageDriverOptions } from '@jini-ai/agentic/dom';
158
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,YAAY,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,WAAW,EACX,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,YAAY,GACb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAoB1C;;;;;;GAMG;AACH,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,EACR,8BAA8B,EAC9B,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,WAAW,EACX,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,EACrB,+BAA+B,EAC/B,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,8BAA8B,EAC9B,qCAAqC,EACrC,4BAA4B,EAC5B,oBAAoB,EACpB,sBAAsB,EACtB,8BAA8B,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,kCAAkC,EAClC,iCAAiC,EACjC,kCAAkC,EAClC,iCAAiC,GAClC,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,YAAY,GACb,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,eAAe,EACf,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;GAWG;AACH,OAAO,EACL,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,eAAe,EACf,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;;;;;GASG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACpG;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzH,YAAY,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,YAAY,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACrG,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAE7F;;;;;;;;GAQG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,YAAY,EACV,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}