@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,221 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * @module ConversationList
4
+ *
5
+ * The conversation switcher: new / select / delete / search / rename-on-double-click. Drop it
6
+ * into `ChatPane`'s `leadingAccessory` slot — it needs no changes to `ChatPane` itself.
7
+ *
8
+ * Storage-agnostic by construction. It takes data and callbacks and owns nothing durable, so a
9
+ * host backs it with `@jini-ai/sqlite`'s `ChatHistoryStore`, an HTTP endpoint, or an in-memory
10
+ * array without this file knowing the difference.
11
+ *
12
+ * Search is a **client-side filter by default**, and delegates to `onSearch` when a host provides
13
+ * one. That default is not laziness: a host with no server search still gets a working filter,
14
+ * and one whose list grows past a page swaps in a server query by passing a prop. The rule for
15
+ * when to swap is concrete — a client filter over a *paginated* list silently searches only the
16
+ * loaded page, so the moment a host paginates, it must provide `onSearch`.
17
+ *
18
+ * Rename is double-click, restoring parity with Open Design's original `ConversationsMenu`; its
19
+ * own newer in-pane menu dropped the affordance, which is a regression rather than a decision.
20
+ *
21
+ * Unstyled semantic markup with `jini-conv-*` class names, matching every other component in this
22
+ * package — a host supplies the CSS.
23
+ */
24
+ import { useCallback, useDeferredValue, useEffect, useMemo, useRef, useState } from 'react';
25
+ import { useT } from '../hooks/context.js';
26
+ import { Icon } from './Icon.js';
27
+ /**
28
+ * How long a click waits to see whether it is really the first half of a double-click.
29
+ *
30
+ * Chosen below the ~500ms OS double-click threshold on purpose: this only has to disambiguate
31
+ * two clicks a user made deliberately in quick succession, and a longer wait would make ordinary
32
+ * conversation switching feel sticky.
33
+ */
34
+ const DOUBLE_CLICK_GRACE_MS = 220;
35
+ function reportConversationListHostEffectFailure(effectName, error) {
36
+ console.error(`[@jini-ai/chat] ConversationList ${effectName} host effect failed:`, error);
37
+ }
38
+ /** Invokes a host callback and reports a synchronous throw or async rejection without leaving it unhandled. */
39
+ function runConversationListHostEffect(effectName, effect) {
40
+ let result;
41
+ try {
42
+ result = effect();
43
+ }
44
+ catch (error) {
45
+ reportConversationListHostEffectFailure(effectName, error);
46
+ return;
47
+ }
48
+ void Promise.resolve(result).catch((error) => {
49
+ reportConversationListHostEffectFailure(effectName, error);
50
+ });
51
+ }
52
+ function relativeTime(updatedAt, now) {
53
+ if (updatedAt === undefined)
54
+ return '';
55
+ const seconds = Math.max(0, Math.round((now - updatedAt) / 1000));
56
+ if (seconds < 60)
57
+ return 'just now';
58
+ const minutes = Math.round(seconds / 60);
59
+ if (minutes < 60)
60
+ return `${minutes}m ago`;
61
+ const hours = Math.round(minutes / 60);
62
+ if (hours < 24)
63
+ return `${hours}h ago`;
64
+ return `${Math.round(hours / 24)}d ago`;
65
+ }
66
+ export function ConversationList({ conversations, activeConversationId, onSelect, onCreate, onDelete, onRename, onSearch, confirmDelete, createDisabled = false, emptyState, }) {
67
+ const t = useT();
68
+ const [open, setOpen] = useState(false);
69
+ const [query, setQuery] = useState('');
70
+ const [serverResults, setServerResults] = useState(null);
71
+ const [editingId, setEditingId] = useState(null);
72
+ const [draft, setDraft] = useState('');
73
+ const rootRef = useRef(null);
74
+ const deferredQuery = useDeferredValue(query);
75
+ /**
76
+ * Pending single-click selection, held so a double-click can cancel it.
77
+ *
78
+ * A double-click always delivers its first `click` too, so selecting immediately would close
79
+ * the menu out from under the rename editor — the row would be selected and the switcher shut
80
+ * before `dblclick` ever arrived. Open Design's original switcher has exactly this bug. The
81
+ * delay is only perceptible if you are looking for it, and it costs nothing but a timer.
82
+ */
83
+ const pendingSelectRef = useRef(null);
84
+ const cancelPendingSelect = useCallback(() => {
85
+ if (pendingSelectRef.current === null)
86
+ return;
87
+ clearTimeout(pendingSelectRef.current);
88
+ pendingSelectRef.current = null;
89
+ }, []);
90
+ // A timer that fires after unmount would call `setOpen` on a dead component.
91
+ useEffect(() => cancelPendingSelect, [cancelPendingSelect]);
92
+ /*
93
+ * Closing the switcher also abandons a click that has not yet resolved into a selection.
94
+ *
95
+ * The grace window exists so a double-click can become a rename rather than a selection, which
96
+ * means a single click stays pending for 220ms. Press Escape (or click outside) inside that window
97
+ * and the menu closes while the timer survives, so the row is selected anyway — and if the pending
98
+ * click was on Delete, it selects an id that no longer exists.
99
+ */
100
+ useEffect(() => {
101
+ if (!open)
102
+ cancelPendingSelect();
103
+ }, [open, cancelPendingSelect]);
104
+ // Close on outside click / Escape. Registered only while open so a closed switcher costs
105
+ // nothing on every document event.
106
+ useEffect(() => {
107
+ if (!open)
108
+ return;
109
+ function onPointerDown(event) {
110
+ if (!rootRef.current?.contains(event.target))
111
+ setOpen(false);
112
+ }
113
+ function onKeyDown(event) {
114
+ if (event.key === 'Escape')
115
+ setOpen(false);
116
+ }
117
+ document.addEventListener('mousedown', onPointerDown);
118
+ document.addEventListener('keydown', onKeyDown);
119
+ return () => {
120
+ document.removeEventListener('mousedown', onPointerDown);
121
+ document.removeEventListener('keydown', onKeyDown);
122
+ };
123
+ }, [open]);
124
+ // A stale query is worse than no query: reopening to yesterday's filter looks like data loss.
125
+ useEffect(() => {
126
+ if (open)
127
+ return;
128
+ setQuery('');
129
+ setServerResults(null);
130
+ setEditingId(null);
131
+ }, [open]);
132
+ useEffect(() => {
133
+ if (!onSearch)
134
+ return;
135
+ if (!deferredQuery) {
136
+ setServerResults(null);
137
+ return;
138
+ }
139
+ // `cancelled` guards the classic out-of-order response: a slow query for "a" resolving after
140
+ // a fast one for "abc" would otherwise overwrite the newer, correct results.
141
+ let cancelled = false;
142
+ // A search failure just leaves the prior (possibly stale) results in place rather than
143
+ // wiping the list — degraded, not wrong, so reporting the rejection is all that's warranted.
144
+ runConversationListHostEffect('onSearch', () => onSearch(deferredQuery).then((results) => {
145
+ if (!cancelled)
146
+ setServerResults(results);
147
+ }));
148
+ return () => {
149
+ cancelled = true;
150
+ };
151
+ }, [onSearch, deferredQuery]);
152
+ const visible = useMemo(() => {
153
+ if (onSearch)
154
+ return serverResults ?? conversations;
155
+ const needle = deferredQuery.trim().toLocaleLowerCase();
156
+ if (!needle)
157
+ return conversations;
158
+ return conversations.filter((c) => (c.title ?? t('Untitled')).toLocaleLowerCase().includes(needle));
159
+ }, [onSearch, serverResults, conversations, deferredQuery, t]);
160
+ // One timestamp for the whole render so every row's "5m ago" is computed against the same
161
+ // instant — otherwise rows drawn either side of a second boundary disagree.
162
+ const now = Date.now();
163
+ const commitRename = useCallback((id) => {
164
+ const next = draft.trim();
165
+ setEditingId(null);
166
+ // An empty rename is a cancel, not a request to erase the title — a user who selects all
167
+ // and hits Enter has almost certainly changed their mind.
168
+ //
169
+ // No optimistic title update happens here — the row keeps rendering `item.title` from
170
+ // props until the host's own state updates, so a rejection cannot leave the UI showing a
171
+ // title the server didn't accept. Reporting the failure is what closes the remaining gap.
172
+ if (next)
173
+ runConversationListHostEffect('onRename', () => onRename(id, next));
174
+ }, [draft, onRename]);
175
+ const requestDelete = useCallback((item) => {
176
+ const confirmer = confirmDelete ??
177
+ ((c) => typeof window === 'undefined'
178
+ ? true
179
+ : window.confirm(t('Delete "{title}"? This cannot be undone.').replace('{title}', c.title ?? t('Untitled'))));
180
+ // No optimistic removal — the row stays in `conversations` until the host's own state
181
+ // drops it — so a rejected confirmer or `onDelete` cannot leave a deleted-looking row
182
+ // behind; it only means the item silently never disappears. `onDelete` is the effect name
183
+ // reported here since a rejecting confirmer is, from the host's perspective, also "the
184
+ // delete didn't happen."
185
+ runConversationListHostEffect('onDelete', async () => {
186
+ if (await confirmer(item))
187
+ await onDelete(item.id);
188
+ });
189
+ }, [confirmDelete, onDelete, t]);
190
+ const active = conversations.find((c) => c.id === activeConversationId) ?? null;
191
+ return (_jsxs("div", { className: "jini-conv", ref: rootRef, children: [_jsx("button", { type: "button", className: `jini-conv-trigger${open ? ' jini-conv-trigger-open' : ''}`, "aria-haspopup": "menu", "aria-expanded": open, "aria-label": active?.title ? `${t('Conversations')} — ${active.title}` : t('Conversations'), title: active?.title ?? t('Conversations'), "data-testid": "conversation-trigger", onClick: () => setOpen((v) => !v), children: _jsx(Icon, { name: "comment", size: 16 }) }), open ? (_jsxs("div", { className: "jini-conv-menu", role: "menu", "data-testid": "conversation-menu", children: [_jsxs("div", { className: "jini-conv-head", children: [_jsxs("span", { className: "jini-conv-heading", children: [t('Conversations'), _jsx("span", { className: "jini-conv-count", "data-testid": "conversation-count", children: conversations.length })] }), _jsxs("button", { type: "button", className: "jini-conv-new", disabled: createDisabled, "data-testid": "conversation-new", onClick: () => {
192
+ if (createDisabled)
193
+ return;
194
+ // No optimistic row is inserted — the list still comes straight from props — so a
195
+ // rejection here cannot leave a phantom conversation on screen; it only means the
196
+ // switcher closed without one actually being created. Reporting the failure closes
197
+ // the remaining gap between "switcher closed" and "the host actually knows".
198
+ runConversationListHostEffect('onCreate', () => onCreate());
199
+ setOpen(false);
200
+ }, children: [_jsx(Icon, { name: "plus", size: 12 }), _jsx("span", { children: t('New') })] })] }), _jsxs("label", { className: "jini-conv-search", children: [_jsx(Icon, { name: "search", size: 13 }), _jsx("input", { type: "search", value: query, placeholder: t('Search conversations'), "data-testid": "conversation-search", onChange: (event) => setQuery(event.currentTarget.value) })] }), _jsx("div", { className: "jini-conv-list", "data-testid": "conversation-list", children: conversations.length === 0 ? (_jsx("div", { className: "jini-conv-empty", children: emptyState ?? t('No conversations yet') })) : visible.length === 0 ? (_jsx("div", { className: "jini-conv-empty", children: t('No conversations match') })) : (visible.map((item) => (_jsxs("div", { className: `jini-conv-item${item.id === activeConversationId ? ' jini-conv-item-active' : ''}`, "data-testid": `conversation-item-${item.id}`, children: [editingId === item.id ? (_jsx("input", { autoFocus: true, className: "jini-conv-rename", value: draft, "data-testid": `conversation-rename-${item.id}`, onChange: (event) => setDraft(event.currentTarget.value), onBlur: () => commitRename(item.id), onKeyDown: (event) => {
201
+ if (event.key === 'Enter')
202
+ commitRename(item.id);
203
+ else if (event.key === 'Escape')
204
+ setEditingId(null);
205
+ } })) : (_jsxs("button", { type: "button", className: "jini-conv-item-select", "data-testid": `conversation-select-${item.id}`, title: t('Double-click to rename'), onClick: () => {
206
+ cancelPendingSelect();
207
+ pendingSelectRef.current = setTimeout(() => {
208
+ pendingSelectRef.current = null;
209
+ onSelect(item.id);
210
+ setOpen(false);
211
+ }, DOUBLE_CLICK_GRACE_MS);
212
+ }, onDoubleClick: () => {
213
+ cancelPendingSelect();
214
+ setEditingId(item.id);
215
+ setDraft(item.title ?? '');
216
+ }, children: [_jsx("span", { className: "jini-conv-item-title", children: item.title ?? t('Untitled') }), _jsxs("span", { className: "jini-conv-item-meta", children: [item.messageCount === undefined ? '' : `${item.messageCount} msg · `, relativeTime(item.updatedAt, now)] })] })), _jsx("button", { type: "button", className: "jini-conv-item-delete", "aria-label": t('Delete conversation'), "data-testid": `conversation-delete-${item.id}`, onClick: (event) => {
217
+ event.stopPropagation();
218
+ requestDelete(item);
219
+ }, children: _jsx(Icon, { name: "close", size: 12 }) })] }, item.id)))) })] })) : null] }));
220
+ }
221
+ //# sourceMappingURL=ConversationList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationList.js","sourceRoot":"","sources":["../../../src/react/components/ConversationList.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5F,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAiClC,SAAS,uCAAuC,CAAC,UAAkB,EAAE,KAAc;IACjF,OAAO,CAAC,KAAK,CAAC,oCAAoC,UAAU,sBAAsB,EAAE,KAAK,CAAC,CAAC;AAC7F,CAAC;AAED,+GAA+G;AAC/G,SAAS,6BAA6B,CAAC,UAAkB,EAAE,MAAqC;IAC9F,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uCAAuC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IACD,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACpD,uCAAuC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,SAA6B,EAAE,GAAW;IAC9D,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAClE,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,UAAU,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC;IACvC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAC/B,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,cAAc,GAAG,KAAK,EACtB,UAAU,GACY;IACtB,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgC,IAAI,CAAC,CAAC;IACxF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9C;;;;;;;OAOG;IACH,MAAM,gBAAgB,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAE5E,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC3C,IAAI,gBAAgB,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO;QAC9C,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;IAClC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,6EAA6E;IAC7E,SAAS,CAAC,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE5D;;;;;;;OAOG;IACH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,mBAAmB,EAAE,CAAC;IACnC,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEhC,yFAAyF;IACzF,mCAAmC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,SAAS,aAAa,CAAC,KAAiB;YACtC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvE,CAAC;QACD,SAAS,SAAS,CAAC,KAAoB;YACrC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACtD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YACzD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,8FAA8F;IAC9F,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI;YAAE,OAAO;QACjB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,6FAA6F;QAC7F,6EAA6E;QAC7E,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,uFAAuF;QACvF,6FAA6F;QAC7F,6BAA6B,CAAC,UAAU,EAAE,GAAG,EAAE,CAC7C,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACvC,IAAI,CAAC,SAAS;gBAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,CACH,CAAC;QACF,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,QAAQ;YAAE,OAAO,aAAa,IAAI,aAAa,CAAC;QACpD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,OAAO,aAAa,CAAC;QAClC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAChC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAChE,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/D,0FAA0F;IAC1F,4EAA4E;IAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,EAAU,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1B,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,yFAAyF;QACzF,0DAA0D;QAC1D,EAAE;QACF,sFAAsF;QACtF,yFAAyF;QACzF,0FAA0F;QAC1F,IAAI,IAAI;YAAE,6BAA6B,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC,EACD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,IAA0B,EAAE,EAAE;QAC7B,MAAM,SAAS,GACb,aAAa;YACb,CAAC,CAAC,CAAuB,EAAE,EAAE,CAC3B,OAAO,MAAM,KAAK,WAAW;gBAC3B,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACpH,sFAAsF;QACtF,sFAAsF;QACtF,0FAA0F;QAC1F,uFAAuF;QACvF,yBAAyB;QACzB,6BAA6B,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACnD,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC;gBAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC7B,CAAC;IAEF,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAC,IAAI,IAAI,CAAC;IAEhF,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,EAAC,GAAG,EAAE,OAAO,aAIrC,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,oBAAoB,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,mBACxD,MAAM,mBACL,IAAI,gBACP,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,EAC1F,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC,eAAe,CAAC,iBAC9B,sBAAsB,EAClC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAEjC,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,IAAI,EAAE,EAAE,GAAI,GAC1B,EAER,IAAI,CAAC,CAAC,CAAC,CACN,eAAK,SAAS,EAAC,gBAAgB,EAAC,IAAI,EAAC,MAAM,iBAAa,mBAAmB,aACzE,eAAK,SAAS,EAAC,gBAAgB,aAC7B,gBAAM,SAAS,EAAC,mBAAmB,aAChC,CAAC,CAAC,eAAe,CAAC,EAGnB,eAAM,SAAS,EAAC,iBAAiB,iBAAa,oBAAoB,YAC/D,aAAa,CAAC,MAAM,GAChB,IACF,EACP,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,eAAe,EACzB,QAAQ,EAAE,cAAc,iBACZ,kBAAkB,EAC9B,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,cAAc;wCAAE,OAAO;oCAC3B,kFAAkF;oCAClF,kFAAkF;oCAClF,mFAAmF;oCACnF,6EAA6E;oCAC7E,6BAA6B,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;oCAC5D,OAAO,CAAC,KAAK,CAAC,CAAC;gCACjB,CAAC,aAED,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,EAAE,GAAI,EAC9B,yBAAO,CAAC,CAAC,KAAK,CAAC,GAAQ,IAChB,IACL,EAEN,iBAAO,SAAS,EAAC,kBAAkB,aACjC,KAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAE,EAAE,GAAI,EAChC,gBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,CAAC,CAAC,sBAAsB,CAAC,iBAC1B,qBAAqB,EACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GACxD,IACI,EAER,cAAK,SAAS,EAAC,gBAAgB,iBAAa,mBAAmB,YAC5D,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC5B,cAAK,SAAS,EAAC,iBAAiB,YAAE,UAAU,IAAI,CAAC,CAAC,sBAAsB,CAAC,GAAO,CACjF,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACzB,cAAK,SAAS,EAAC,iBAAiB,YAAE,CAAC,CAAC,wBAAwB,CAAC,GAAO,CACrE,CAAC,CAAC,CAAC,CACF,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACpB,eAEE,SAAS,EAAE,iBAAiB,IAAI,CAAC,EAAE,KAAK,oBAAoB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE,iBACjF,qBAAqB,IAAI,CAAC,EAAE,EAAE,aAE1C,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CACvB,gBACE,SAAS,QACT,SAAS,EAAC,kBAAkB,EAC5B,KAAK,EAAE,KAAK,iBACC,uBAAuB,IAAI,CAAC,EAAE,EAAE,EAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EACxD,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EACnC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;wCACnB,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;4CAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;6CAC5C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;4CAAE,YAAY,CAAC,IAAI,CAAC,CAAC;oCACtD,CAAC,GACD,CACH,CAAC,CAAC,CAAC,CACF,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uBAAuB,iBACpB,uBAAuB,IAAI,CAAC,EAAE,EAAE,EAC7C,KAAK,EAAE,CAAC,CAAC,wBAAwB,CAAC,EAClC,OAAO,EAAE,GAAG,EAAE;wCACZ,mBAAmB,EAAE,CAAC;wCACtB,gBAAgB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;4CACzC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;4CAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4CAClB,OAAO,CAAC,KAAK,CAAC,CAAC;wCACjB,CAAC,EAAE,qBAAqB,CAAC,CAAC;oCAC5B,CAAC,EACD,aAAa,EAAE,GAAG,EAAE;wCAClB,mBAAmB,EAAE,CAAC;wCACtB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wCACtB,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oCAC7B,CAAC,aAED,eAAM,SAAS,EAAC,sBAAsB,YAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,GAAQ,EAC3E,gBAAM,SAAS,EAAC,qBAAqB,aAClC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,SAAS,EACpE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAC7B,IACA,CACV,EACD,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uBAAuB,gBACrB,CAAC,CAAC,qBAAqB,CAAC,iBACvB,uBAAuB,IAAI,CAAC,EAAE,EAAE,EAC7C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wCACjB,KAAK,CAAC,eAAe,EAAE,CAAC;wCACxB,aAAa,CAAC,IAAI,CAAC,CAAC;oCACtB,CAAC,YAED,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAE,EAAE,GAAI,GACxB,KAvDJ,IAAI,CAAC,EAAE,CAwDR,CACP,CAAC,CACH,GACG,IACF,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @module ExtEventErrorBoundary
3
+ *
4
+ * Isolates one `kind: 'ext'` event group's renderer from the rest of the chat transcript.
5
+ * `ext-event-renderer-registry.ts`'s renderers (a host's own, or a protocol package's like
6
+ * `@jini-ai/agentic/a2ui`'s `A2uiSurfaceCard`) run inline during `MessageRow`'s render, over
7
+ * agent-authored payloads — a malformed data-model binding, an unbounded recursive component
8
+ * tree, or any other adversarial/unvalidated shape a renderer doesn't itself defend against can
9
+ * throw during React's render phase. Before this module, there was no error boundary anywhere in
10
+ * `packages/chat-react/src` or any host's `src` (verified by grep before writing this) — an
11
+ * uncaught render-phase throw from a single message's ext event unmounts the entire chat React
12
+ * root: blank page, lost transcript, lost draft. This confines that blast radius to the one
13
+ * `<div>` the failing group would have occupied.
14
+ *
15
+ * React error boundaries must be class components (no Hook equivalent exists as of React 19).
16
+ */
17
+ import { Component, type ErrorInfo, type ReactNode } from 'react';
18
+ export interface ExtEventErrorBoundaryProps {
19
+ /** The ext-event `name` this boundary wraps — surfaced in the fallback and passed to `onError`, so a host can tell which protocol/renderer failed. */
20
+ name: string;
21
+ /** Called once per catch, in addition to always rendering the built-in fallback — for a host that wants to log/report beyond what this module does on its own. */
22
+ onError?: (error: Error, info: ErrorInfo) => void;
23
+ children: ReactNode;
24
+ }
25
+ interface ExtEventErrorBoundaryState {
26
+ error: Error | null;
27
+ }
28
+ export declare class ExtEventErrorBoundary extends Component<ExtEventErrorBoundaryProps, ExtEventErrorBoundaryState> {
29
+ state: ExtEventErrorBoundaryState;
30
+ static getDerivedStateFromError(error: Error): ExtEventErrorBoundaryState;
31
+ componentDidCatch(error: Error, info: ErrorInfo): void;
32
+ render(): ReactNode;
33
+ }
34
+ export {};
35
+ //# sourceMappingURL=ExtEventErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtEventErrorBoundary.d.ts","sourceRoot":"","sources":["../../../src/react/components/ExtEventErrorBoundary.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElE,MAAM,WAAW,0BAA0B;IACzC,sJAAsJ;IACtJ,IAAI,EAAE,MAAM,CAAC;IACb,kKAAkK;IAClK,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,UAAU,0BAA0B;IAClC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,qBAAa,qBAAsB,SAAQ,SAAS,CAAC,0BAA0B,EAAE,0BAA0B,CAAC;IACjG,KAAK,EAAE,0BAA0B,CAAmB;IAE7D,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,0BAA0B;IAIhE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAQtD,MAAM,IAAI,SAAS;CAU7B"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @module ExtEventErrorBoundary
4
+ *
5
+ * Isolates one `kind: 'ext'` event group's renderer from the rest of the chat transcript.
6
+ * `ext-event-renderer-registry.ts`'s renderers (a host's own, or a protocol package's like
7
+ * `@jini-ai/agentic/a2ui`'s `A2uiSurfaceCard`) run inline during `MessageRow`'s render, over
8
+ * agent-authored payloads — a malformed data-model binding, an unbounded recursive component
9
+ * tree, or any other adversarial/unvalidated shape a renderer doesn't itself defend against can
10
+ * throw during React's render phase. Before this module, there was no error boundary anywhere in
11
+ * `packages/chat-react/src` or any host's `src` (verified by grep before writing this) — an
12
+ * uncaught render-phase throw from a single message's ext event unmounts the entire chat React
13
+ * root: blank page, lost transcript, lost draft. This confines that blast radius to the one
14
+ * `<div>` the failing group would have occupied.
15
+ *
16
+ * React error boundaries must be class components (no Hook equivalent exists as of React 19).
17
+ */
18
+ import { Component } from 'react';
19
+ export class ExtEventErrorBoundary extends Component {
20
+ state = { error: null };
21
+ static getDerivedStateFromError(error) {
22
+ return { error };
23
+ }
24
+ componentDidCatch(error, info) {
25
+ // React already surfaces this in the dev console via its own error-boundary reporting; this
26
+ // adds the ext-event `name` React's generic report has no way to know, and gives a host a
27
+ // hook to route it into its own error reporting.
28
+ console.error(`[ExtEventErrorBoundary] ext event "${this.props.name}" failed to render:`, error);
29
+ this.props.onError?.(error, info);
30
+ }
31
+ render() {
32
+ if (this.state.error) {
33
+ return (_jsx("div", { className: "jini-ext-event-error", role: "alert", "data-ext-event-name": this.props.name, children: `"${this.props.name}" failed to render: ${this.state.error.message}` }));
34
+ }
35
+ return this.props.children;
36
+ }
37
+ }
38
+ //# sourceMappingURL=ExtEventErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtEventErrorBoundary.js","sourceRoot":"","sources":["../../../src/react/components/ExtEventErrorBoundary.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAC;AAclE,MAAM,OAAO,qBAAsB,SAAQ,SAAiE;IACjG,KAAK,GAA+B,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAE7D,MAAM,CAAC,wBAAwB,CAAC,KAAY;QAC1C,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAEQ,iBAAiB,CAAC,KAAY,EAAE,IAAe;QACtD,4FAA4F;QAC5F,0FAA0F;QAC1F,iDAAiD;QACjD,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAI,CAAC,KAAK,CAAC,IAAI,qBAAqB,EAAE,KAAK,CAAC,CAAC;QACjG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAEQ,MAAM;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CACL,cAAK,SAAS,EAAC,sBAAsB,EAAC,IAAI,EAAC,OAAO,yBAAsB,IAAI,CAAC,KAAK,CAAC,IAAI,YACpF,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,uBAAuB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GACjE,CACP,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @module Icon
3
+ *
4
+ * A minimal inline-SVG icon set covering only the glyphs this package's own
5
+ * components use. Kept private so low-level chat leaves remain small; the
6
+ * higher-level ChatPane composition also reuses `@jini-ai/ui`'s generic
7
+ * AgentIcon and WorkingDirPicker.
8
+ */
9
+ import type { SVGProps } from 'react';
10
+ export type IconName = 'spinner' | 'check' | 'close' | 'chevron-down' | 'chevron-right' | 'attach' | 'file' | 'image' | 'x' | 'comment' | 'search' | 'plus' | 'copy';
11
+ interface IconProps extends Omit<SVGProps<SVGSVGElement>, 'name'> {
12
+ name: IconName;
13
+ size?: number | string;
14
+ }
15
+ export declare function Icon({ name, size, strokeWidth, ...rest }: IconProps): import("react").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=Icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/react/components/Icon.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,OAAO,GACP,OAAO,GACP,cAAc,GACd,eAAe,GACf,QAAQ,GACR,MAAM,GACN,OAAO,GACP,GAAG,GACH,SAAS,GACT,QAAQ,GACR,MAAM,GACN,MAAM,CAAC;AAEX,UAAU,SAAU,SAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAC/D,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,WAAiB,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,+BAmG9E"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export function Icon({ name, size = 14, strokeWidth = 1.6, ...rest }) {
3
+ const common = {
4
+ width: size,
5
+ height: size,
6
+ viewBox: '0 0 24 24',
7
+ fill: 'none',
8
+ stroke: 'currentColor',
9
+ strokeWidth,
10
+ strokeLinecap: 'round',
11
+ strokeLinejoin: 'round',
12
+ 'aria-hidden': true,
13
+ focusable: 'false',
14
+ ...rest,
15
+ };
16
+ switch (name) {
17
+ case 'spinner':
18
+ return (_jsx("svg", { ...common, className: `jini-icon-spin ${rest.className ?? ''}`.trim(), children: _jsx("path", { d: "M21 12a9 9 0 1 1-6.22-8.56" }) }));
19
+ case 'check':
20
+ return (_jsx("svg", { ...common, children: _jsx("path", { d: "M20 6 9 17l-5-5" }) }));
21
+ case 'close':
22
+ case 'x':
23
+ return (_jsxs("svg", { ...common, children: [_jsx("path", { d: "M20 4 4 20" }), _jsx("path", { d: "m4 4 16 16" })] }));
24
+ case 'chevron-down':
25
+ return (_jsx("svg", { ...common, children: _jsx("path", { d: "m6 9 6 6 6-6" }) }));
26
+ /** Conversation-switcher trigger — a speech bubble reads as "chat history" without a label. */
27
+ case 'comment':
28
+ return (_jsx("svg", { ...common, children: _jsx("path", { d: "M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z" }) }));
29
+ case 'search':
30
+ return (_jsxs("svg", { ...common, children: [_jsx("circle", { cx: "11", cy: "11", r: "7" }), _jsx("path", { d: "m20 20-3.5-3.5" })] }));
31
+ case 'plus':
32
+ return (_jsxs("svg", { ...common, children: [_jsx("path", { d: "M12 5v14" }), _jsx("path", { d: "M5 12h14" })] }));
33
+ case 'chevron-right':
34
+ return (_jsx("svg", { ...common, children: _jsx("path", { d: "m9 18 6-6-6-6" }) }));
35
+ case 'attach':
36
+ return (_jsx("svg", { ...common, children: _jsx("path", { d: "m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" }) }));
37
+ case 'file':
38
+ return (_jsxs("svg", { ...common, children: [_jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z" }), _jsx("path", { d: "M14 2v6h6" }), _jsx("path", { d: "M8 13h8M8 17h6" })] }));
39
+ case 'image':
40
+ return (_jsxs("svg", { ...common, children: [_jsx("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }), _jsx("circle", { cx: "9", cy: "9", r: "2" }), _jsx("path", { d: "m21 15-5-5L5 21" })] }));
41
+ /** Per-message copy affordance (MessageRow.tsx). Two overlapping squares -- the conventional copy glyph. */
42
+ case 'copy':
43
+ return (_jsxs("svg", { ...common, children: [_jsx("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }), _jsx("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })] }));
44
+ }
45
+ }
46
+ //# sourceMappingURL=Icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../../src/react/components/Icon.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @module JiniChatProvider
3
+ *
4
+ * Wires transport, project, analytics, i18n, and the artifact-renderer
5
+ * registry into context — exactly the `JiniChatProviderProps` shape from
6
+ * `ADS-memory/reports/jini-port/recon/r4b-webui-design.md` §2. This is the ONE file in
7
+ * this package's presentational layer allowed to bind concrete
8
+ * adapters/slots to context (mirrors the OD slice discipline's
9
+ * "only `dependencies.ts` binds a provider" rule, per §5's engine-core
10
+ * boundary lint item 3 — the composition-root analogue for a package
11
+ * instead of a feature slice).
12
+ *
13
+ * `slots`/`onFeedback`/`toolRegistry` are threaded through unchanged for a
14
+ * consuming host to read via `useJiniChatSlots()`/`useOnFeedback()` — this
15
+ * package's own components (`<Composer>`, `<MessageRow>`, ...) take the
16
+ * slots they need directly as props rather than reading them from context
17
+ * implicitly, so a host retains full control over composition; the context
18
+ * value exists for a host's OWN wrapper components to reach the same slots
19
+ * without re-threading props through every layer.
20
+ */
21
+ import { type ReactNode } from 'react';
22
+ import type { ChatTransport, OnFeedback } from '../../core/index.js';
23
+ import type { AnalyticsAdapter, AttachmentTraySlot, ComposerSlots, FilePreviewSlot, I18nAdapter, ModelAgentPickerSlot, AnnotationAdapter, ProjectContextValue } from '../slots.js';
24
+ import type { RendererRegistry } from '../artifact-types.js';
25
+ export interface JiniChatSlots {
26
+ modelPicker?: ModelAgentPickerSlot;
27
+ composer?: ComposerSlots;
28
+ filePreview?: FilePreviewSlot;
29
+ annotation?: AnnotationAdapter;
30
+ attachmentTray?: AttachmentTraySlot;
31
+ }
32
+ export interface JiniChatProviderProps {
33
+ transport: ChatTransport;
34
+ project?: ProjectContextValue;
35
+ analytics?: AnalyticsAdapter;
36
+ i18n?: I18nAdapter;
37
+ artifactRegistry?: RendererRegistry;
38
+ slots?: JiniChatSlots;
39
+ onFeedback?: OnFeedback;
40
+ children: ReactNode;
41
+ }
42
+ export declare function JiniChatProvider({ transport, project, analytics, i18n, artifactRegistry, slots, onFeedback, children }: JiniChatProviderProps): import("react").JSX.Element;
43
+ export declare function useJiniChatSlots(): JiniChatSlots;
44
+ export declare function useOnFeedback(): OnFeedback | undefined;
45
+ //# sourceMappingURL=JiniChatProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JiniChatProvider.d.ts","sourceRoot":"","sources":["../../../src/react/components/JiniChatProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACnL,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAKD,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,qBAAqB,+BAa7I;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED,wBAAgB,aAAa,IAAI,UAAU,GAAG,SAAS,CAEtD"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @module JiniChatProvider
4
+ *
5
+ * Wires transport, project, analytics, i18n, and the artifact-renderer
6
+ * registry into context — exactly the `JiniChatProviderProps` shape from
7
+ * `ADS-memory/reports/jini-port/recon/r4b-webui-design.md` §2. This is the ONE file in
8
+ * this package's presentational layer allowed to bind concrete
9
+ * adapters/slots to context (mirrors the OD slice discipline's
10
+ * "only `dependencies.ts` binds a provider" rule, per §5's engine-core
11
+ * boundary lint item 3 — the composition-root analogue for a package
12
+ * instead of a feature slice).
13
+ *
14
+ * `slots`/`onFeedback`/`toolRegistry` are threaded through unchanged for a
15
+ * consuming host to read via `useJiniChatSlots()`/`useOnFeedback()` — this
16
+ * package's own components (`<Composer>`, `<MessageRow>`, ...) take the
17
+ * slots they need directly as props rather than reading them from context
18
+ * implicitly, so a host retains full control over composition; the context
19
+ * value exists for a host's OWN wrapper components to reach the same slots
20
+ * without re-threading props through every layer.
21
+ */
22
+ import { createContext, useContext } from 'react';
23
+ import { AnalyticsContext, ArtifactRegistryContext, ChatTransportContext, I18nContext, ProjectContext } from '../hooks/context.js';
24
+ const JiniChatSlotsContext = createContext({});
25
+ const OnFeedbackContext = createContext(undefined);
26
+ export function JiniChatProvider({ transport, project, analytics, i18n, artifactRegistry, slots, onFeedback, children }) {
27
+ let tree = (_jsx(ChatTransportContext.Provider, { value: transport, children: _jsx(JiniChatSlotsContext.Provider, { value: slots ?? {}, children: _jsx(OnFeedbackContext.Provider, { value: onFeedback, children: children }) }) }));
28
+ if (artifactRegistry)
29
+ tree = _jsx(ArtifactRegistryContext.Provider, { value: artifactRegistry, children: tree });
30
+ if (project)
31
+ tree = _jsx(ProjectContext.Provider, { value: project, children: tree });
32
+ if (analytics)
33
+ tree = _jsx(AnalyticsContext.Provider, { value: analytics, children: tree });
34
+ if (i18n)
35
+ tree = _jsx(I18nContext.Provider, { value: i18n, children: tree });
36
+ return tree;
37
+ }
38
+ export function useJiniChatSlots() {
39
+ return useContext(JiniChatSlotsContext);
40
+ }
41
+ export function useOnFeedback() {
42
+ return useContext(OnFeedbackContext);
43
+ }
44
+ //# sourceMappingURL=JiniChatProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JiniChatProvider.js","sourceRoot":"","sources":["../../../src/react/components/JiniChatProvider.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAIlE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAqBnI,MAAM,oBAAoB,GAAG,aAAa,CAAgB,EAAE,CAAC,CAAC;AAC9D,MAAM,iBAAiB,GAAG,aAAa,CAAyB,SAAS,CAAC,CAAC;AAE3E,MAAM,UAAU,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAyB;IAC5I,IAAI,IAAI,GAAG,CACT,KAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,SAAS,YAC7C,KAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,IAAI,EAAE,YAC/C,KAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU,YAAG,QAAQ,GAA8B,GACxD,GACF,CACjC,CAAC;IACF,IAAI,gBAAgB;QAAE,IAAI,GAAG,KAAC,uBAAuB,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB,YAAG,IAAI,GAAoC,CAAC;IAClI,IAAI,OAAO;QAAE,IAAI,GAAG,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,IAAI,GAA2B,CAAC;IAC9F,IAAI,SAAS;QAAE,IAAI,GAAG,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,SAAS,YAAG,IAAI,GAA6B,CAAC;IACtG,IAAI,IAAI;QAAE,IAAI,GAAG,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,YAAG,IAAI,GAAwB,CAAC;IAClF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface MarkdownProps {
2
+ children: string;
3
+ }
4
+ export declare function Markdown({ children }: MarkdownProps): import("react").JSX.Element;
5
+ //# sourceMappingURL=Markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../src/react/components/Markdown.tsx"],"names":[],"mappings":"AA4CA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,+BASnD"}