glirastes 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 (424) hide show
  1. package/CHANGELOG.md +468 -0
  2. package/README.md +651 -0
  3. package/dist/cli/bin.d.ts +2 -0
  4. package/dist/cli/bin.js +34 -0
  5. package/dist/cli/bin.js.map +1 -0
  6. package/dist/cli/commands/check-upgrade.d.ts +15 -0
  7. package/dist/cli/commands/check-upgrade.js +138 -0
  8. package/dist/cli/commands/check-upgrade.js.map +1 -0
  9. package/dist/cli/commands/test.d.ts +8 -0
  10. package/dist/cli/commands/test.js +76 -0
  11. package/dist/cli/commands/test.js.map +1 -0
  12. package/dist/cli/index.d.ts +1 -0
  13. package/dist/cli/index.js +609 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/cli/utils/changelog-parser.d.ts +13 -0
  16. package/dist/cli/utils/changelog-parser.js +89 -0
  17. package/dist/cli/utils/changelog-parser.js.map +1 -0
  18. package/dist/cli/utils/commit-parser.d.ts +8 -0
  19. package/dist/cli/utils/commit-parser.js +23 -0
  20. package/dist/cli/utils/commit-parser.js.map +1 -0
  21. package/dist/cli/utils/gap-detector.d.ts +14 -0
  22. package/dist/cli/utils/gap-detector.js +65 -0
  23. package/dist/cli/utils/gap-detector.js.map +1 -0
  24. package/dist/cli/utils/get-cli-version.d.ts +2 -0
  25. package/dist/cli/utils/get-cli-version.js +10 -0
  26. package/dist/cli/utils/get-cli-version.js.map +1 -0
  27. package/dist/codegen/asset-sync.d.ts +20 -0
  28. package/dist/codegen/asset-sync.js +26 -0
  29. package/dist/codegen/asset-sync.js.map +1 -0
  30. package/dist/codegen/coverage.d.ts +66 -0
  31. package/dist/codegen/coverage.js +372 -0
  32. package/dist/codegen/coverage.js.map +1 -0
  33. package/dist/codegen/endpoint-scanner.d.ts +16 -0
  34. package/dist/codegen/endpoint-scanner.js +161 -0
  35. package/dist/codegen/endpoint-scanner.js.map +1 -0
  36. package/dist/codegen/format.d.ts +17 -0
  37. package/dist/codegen/format.js +28 -0
  38. package/dist/codegen/format.js.map +1 -0
  39. package/dist/codegen/fs-utils.d.ts +45 -0
  40. package/dist/codegen/fs-utils.js +155 -0
  41. package/dist/codegen/fs-utils.js.map +1 -0
  42. package/dist/codegen/index.d.ts +13 -0
  43. package/dist/codegen/index.js +13 -0
  44. package/dist/codegen/index.js.map +1 -0
  45. package/dist/codegen/mcp-generator.d.ts +50 -0
  46. package/dist/codegen/mcp-generator.js +801 -0
  47. package/dist/codegen/mcp-generator.js.map +1 -0
  48. package/dist/codegen/module-generator.d.ts +11 -0
  49. package/dist/codegen/module-generator.js +351 -0
  50. package/dist/codegen/module-generator.js.map +1 -0
  51. package/dist/codegen/nestjs-scanner.d.ts +43 -0
  52. package/dist/codegen/nestjs-scanner.js +239 -0
  53. package/dist/codegen/nestjs-scanner.js.map +1 -0
  54. package/dist/codegen/output-recommender.d.ts +23 -0
  55. package/dist/codegen/output-recommender.js +31 -0
  56. package/dist/codegen/output-recommender.js.map +1 -0
  57. package/dist/codegen/scaffolder.d.ts +36 -0
  58. package/dist/codegen/scaffolder.js +259 -0
  59. package/dist/codegen/scaffolder.js.map +1 -0
  60. package/dist/codegen/skill-generator.d.ts +49 -0
  61. package/dist/codegen/skill-generator.js +965 -0
  62. package/dist/codegen/skill-generator.js.map +1 -0
  63. package/dist/codegen/types.d.ts +52 -0
  64. package/dist/codegen/types.js +14 -0
  65. package/dist/codegen/types.js.map +1 -0
  66. package/dist/codegen/ui-scanner.d.ts +24 -0
  67. package/dist/codegen/ui-scanner.js +197 -0
  68. package/dist/codegen/ui-scanner.js.map +1 -0
  69. package/dist/codegen/validator.d.ts +35 -0
  70. package/dist/codegen/validator.js +256 -0
  71. package/dist/codegen/validator.js.map +1 -0
  72. package/dist/openapi/demo-generate.d.ts +1 -0
  73. package/dist/openapi/demo-generate.js +15 -0
  74. package/dist/openapi/demo-generate.js.map +1 -0
  75. package/dist/openapi/index.d.ts +78 -0
  76. package/dist/openapi/index.js +341 -0
  77. package/dist/openapi/index.js.map +1 -0
  78. package/dist/react/audio-worklet-processor.d.ts +9 -0
  79. package/dist/react/audio-worklet-processor.js +28 -0
  80. package/dist/react/audio-worklet-processor.js.map +1 -0
  81. package/dist/react/bridges/rest-session-bridge.d.ts +113 -0
  82. package/dist/react/bridges/rest-session-bridge.js +207 -0
  83. package/dist/react/bridges/rest-session-bridge.js.map +1 -0
  84. package/dist/react/components/ai-chat-panel.d.ts +12 -0
  85. package/dist/react/components/ai-chat-panel.js +65 -0
  86. package/dist/react/components/ai-chat-panel.js.map +1 -0
  87. package/dist/react/components/ai-trigger-button.d.ts +2 -0
  88. package/dist/react/components/ai-trigger-button.js +239 -0
  89. package/dist/react/components/ai-trigger-button.js.map +1 -0
  90. package/dist/react/components/approval-card.d.ts +9 -0
  91. package/dist/react/components/approval-card.js +22 -0
  92. package/dist/react/components/approval-card.js.map +1 -0
  93. package/dist/react/components/bulk-approval-card.d.ts +9 -0
  94. package/dist/react/components/bulk-approval-card.js +34 -0
  95. package/dist/react/components/bulk-approval-card.js.map +1 -0
  96. package/dist/react/components/chat-input.d.ts +10 -0
  97. package/dist/react/components/chat-input.js +58 -0
  98. package/dist/react/components/chat-input.js.map +1 -0
  99. package/dist/react/components/chat-window.d.ts +2 -0
  100. package/dist/react/components/chat-window.js +132 -0
  101. package/dist/react/components/chat-window.js.map +1 -0
  102. package/dist/react/components/confirm-dialog.d.ts +32 -0
  103. package/dist/react/components/confirm-dialog.js +46 -0
  104. package/dist/react/components/confirm-dialog.js.map +1 -0
  105. package/dist/react/components/floating-chat-ui.d.ts +84 -0
  106. package/dist/react/components/floating-chat-ui.js +161 -0
  107. package/dist/react/components/floating-chat-ui.js.map +1 -0
  108. package/dist/react/components/mention-chip.d.ts +16 -0
  109. package/dist/react/components/mention-chip.js +39 -0
  110. package/dist/react/components/mention-chip.js.map +1 -0
  111. package/dist/react/components/mention-input.d.ts +8 -0
  112. package/dist/react/components/mention-input.js +115 -0
  113. package/dist/react/components/mention-input.js.map +1 -0
  114. package/dist/react/components/message-bubble.d.ts +11 -0
  115. package/dist/react/components/message-bubble.js +123 -0
  116. package/dist/react/components/message-bubble.js.map +1 -0
  117. package/dist/react/components/message-list.d.ts +8 -0
  118. package/dist/react/components/message-list.js +50 -0
  119. package/dist/react/components/message-list.js.map +1 -0
  120. package/dist/react/components/pipeline-timeline.d.ts +7 -0
  121. package/dist/react/components/pipeline-timeline.js +70 -0
  122. package/dist/react/components/pipeline-timeline.js.map +1 -0
  123. package/dist/react/components/recording-bar.d.ts +2 -0
  124. package/dist/react/components/recording-bar.js +81 -0
  125. package/dist/react/components/recording-bar.js.map +1 -0
  126. package/dist/react/components/recording-controls.d.ts +18 -0
  127. package/dist/react/components/recording-controls.js +35 -0
  128. package/dist/react/components/recording-controls.js.map +1 -0
  129. package/dist/react/components/rich-mention-input.d.ts +2 -0
  130. package/dist/react/components/rich-mention-input.js +569 -0
  131. package/dist/react/components/rich-mention-input.js.map +1 -0
  132. package/dist/react/components/session-switcher.d.ts +14 -0
  133. package/dist/react/components/session-switcher.js +131 -0
  134. package/dist/react/components/session-switcher.js.map +1 -0
  135. package/dist/react/components/suggestion-bar.d.ts +9 -0
  136. package/dist/react/components/suggestion-bar.js +45 -0
  137. package/dist/react/components/suggestion-bar.js.map +1 -0
  138. package/dist/react/components/suggestion-chip.d.ts +9 -0
  139. package/dist/react/components/suggestion-chip.js +12 -0
  140. package/dist/react/components/suggestion-chip.js.map +1 -0
  141. package/dist/react/components/voice-input-addon.d.ts +13 -0
  142. package/dist/react/components/voice-input-addon.js +29 -0
  143. package/dist/react/components/voice-input-addon.js.map +1 -0
  144. package/dist/react/components/voice-input-button.d.ts +2 -0
  145. package/dist/react/components/voice-input-button.js +53 -0
  146. package/dist/react/components/voice-input-button.js.map +1 -0
  147. package/dist/react/hooks/use-ai-chat.d.ts +22 -0
  148. package/dist/react/hooks/use-ai-chat.js +49 -0
  149. package/dist/react/hooks/use-ai-chat.js.map +1 -0
  150. package/dist/react/hooks/use-approvals.d.ts +23 -0
  151. package/dist/react/hooks/use-approvals.js +61 -0
  152. package/dist/react/hooks/use-approvals.js.map +1 -0
  153. package/dist/react/hooks/use-deepgram-transcription.d.ts +2 -0
  154. package/dist/react/hooks/use-deepgram-transcription.js +327 -0
  155. package/dist/react/hooks/use-deepgram-transcription.js.map +1 -0
  156. package/dist/react/hooks/use-drag-resize-panel.d.ts +48 -0
  157. package/dist/react/hooks/use-drag-resize-panel.js +306 -0
  158. package/dist/react/hooks/use-drag-resize-panel.js.map +1 -0
  159. package/dist/react/hooks/use-draggable-position.d.ts +25 -0
  160. package/dist/react/hooks/use-draggable-position.js +132 -0
  161. package/dist/react/hooks/use-draggable-position.js.map +1 -0
  162. package/dist/react/hooks/use-keyboard-shortcut.d.ts +20 -0
  163. package/dist/react/hooks/use-keyboard-shortcut.js +91 -0
  164. package/dist/react/hooks/use-keyboard-shortcut.js.map +1 -0
  165. package/dist/react/hooks/use-mentions.d.ts +23 -0
  166. package/dist/react/hooks/use-mentions.js +40 -0
  167. package/dist/react/hooks/use-mentions.js.map +1 -0
  168. package/dist/react/hooks/use-suggestions.d.ts +22 -0
  169. package/dist/react/hooks/use-suggestions.js +37 -0
  170. package/dist/react/hooks/use-suggestions.js.map +1 -0
  171. package/dist/react/index.d.ts +43 -0
  172. package/dist/react/index.js +53 -0
  173. package/dist/react/index.js.map +1 -0
  174. package/dist/react/provider/ai-chat-provider.d.ts +45 -0
  175. package/dist/react/provider/ai-chat-provider.js +1021 -0
  176. package/dist/react/provider/ai-chat-provider.js.map +1 -0
  177. package/dist/react/provider/chat-context.d.ts +84 -0
  178. package/dist/react/provider/chat-context.js +10 -0
  179. package/dist/react/provider/chat-context.js.map +1 -0
  180. package/dist/react/styles.css +897 -0
  181. package/dist/react/template.d.ts +84 -0
  182. package/dist/react/template.js +83 -0
  183. package/dist/react/template.js.map +1 -0
  184. package/dist/react/themes.d.ts +24 -0
  185. package/dist/react/themes.js +269 -0
  186. package/dist/react/themes.js.map +1 -0
  187. package/dist/react/transports/langgraph/index.d.ts +2 -0
  188. package/dist/react/transports/langgraph/index.js +3 -0
  189. package/dist/react/transports/langgraph/index.js.map +1 -0
  190. package/dist/react/transports/langgraph/langgraph-ai-chat.d.ts +62 -0
  191. package/dist/react/transports/langgraph/langgraph-ai-chat.js +92 -0
  192. package/dist/react/transports/langgraph/langgraph-ai-chat.js.map +1 -0
  193. package/dist/react/transports/langgraph.d.ts +71 -0
  194. package/dist/react/transports/langgraph.js +366 -0
  195. package/dist/react/transports/langgraph.js.map +1 -0
  196. package/dist/react/transports/vercel/index.d.ts +2 -0
  197. package/dist/react/transports/vercel/index.js +3 -0
  198. package/dist/react/transports/vercel/index.js.map +1 -0
  199. package/dist/react/transports/vercel/vercel-ai-chat.d.ts +49 -0
  200. package/dist/react/transports/vercel/vercel-ai-chat.js +79 -0
  201. package/dist/react/transports/vercel/vercel-ai-chat.js.map +1 -0
  202. package/dist/react/transports/vercel.d.ts +30 -0
  203. package/dist/react/transports/vercel.js +67 -0
  204. package/dist/react/transports/vercel.js.map +1 -0
  205. package/dist/react/types.d.ts +750 -0
  206. package/dist/react/types.js +2 -0
  207. package/dist/react/types.js.map +1 -0
  208. package/dist/react/ui.d.ts +73 -0
  209. package/dist/react/ui.js +170 -0
  210. package/dist/react/ui.js.map +1 -0
  211. package/dist/react/utils/create-approval-description.d.ts +53 -0
  212. package/dist/react/utils/create-approval-description.js +120 -0
  213. package/dist/react/utils/create-approval-description.js.map +1 -0
  214. package/dist/react/utils/create-tool-result-handler.d.ts +90 -0
  215. package/dist/react/utils/create-tool-result-handler.js +166 -0
  216. package/dist/react/utils/create-tool-result-handler.js.map +1 -0
  217. package/dist/react/utils/mention-markup.d.ts +13 -0
  218. package/dist/react/utils/mention-markup.js +111 -0
  219. package/dist/react/utils/mention-markup.js.map +1 -0
  220. package/dist/react/utils/merge-pipeline-steps.d.ts +19 -0
  221. package/dist/react/utils/merge-pipeline-steps.js +79 -0
  222. package/dist/react/utils/merge-pipeline-steps.js.map +1 -0
  223. package/dist/react/utils/sanitize-stored-messages.d.ts +23 -0
  224. package/dist/react/utils/sanitize-stored-messages.js +50 -0
  225. package/dist/react/utils/sanitize-stored-messages.js.map +1 -0
  226. package/dist/server/adapters/nestjs/chat/ai-chat-auth.guard.d.ts +10 -0
  227. package/dist/server/adapters/nestjs/chat/ai-chat-auth.guard.js +40 -0
  228. package/dist/server/adapters/nestjs/chat/ai-chat-auth.guard.js.map +1 -0
  229. package/dist/server/adapters/nestjs/chat/ai-chat-module-options.interface.d.ts +32 -0
  230. package/dist/server/adapters/nestjs/chat/ai-chat-module-options.interface.js +2 -0
  231. package/dist/server/adapters/nestjs/chat/ai-chat-module-options.interface.js.map +1 -0
  232. package/dist/server/adapters/nestjs/chat/ai-chat.controller.d.ts +11 -0
  233. package/dist/server/adapters/nestjs/chat/ai-chat.controller.js +78 -0
  234. package/dist/server/adapters/nestjs/chat/ai-chat.controller.js.map +1 -0
  235. package/dist/server/adapters/nestjs/chat/ai-chat.module.d.ts +9 -0
  236. package/dist/server/adapters/nestjs/chat/ai-chat.module.js +116 -0
  237. package/dist/server/adapters/nestjs/chat/ai-chat.module.js.map +1 -0
  238. package/dist/server/adapters/nestjs/chat/ai-chat.service.d.ts +13 -0
  239. package/dist/server/adapters/nestjs/chat/ai-chat.service.js +129 -0
  240. package/dist/server/adapters/nestjs/chat/ai-chat.service.js.map +1 -0
  241. package/dist/server/adapters/nestjs/chat/dto/ai-chat-request.dto.d.ts +7 -0
  242. package/dist/server/adapters/nestjs/chat/dto/ai-chat-request.dto.js +49 -0
  243. package/dist/server/adapters/nestjs/chat/dto/ai-chat-request.dto.js.map +1 -0
  244. package/dist/server/adapters/nestjs/chat/dto/chat-message-part.dto.d.ts +19 -0
  245. package/dist/server/adapters/nestjs/chat/dto/chat-message-part.dto.js +105 -0
  246. package/dist/server/adapters/nestjs/chat/dto/chat-message-part.dto.js.map +1 -0
  247. package/dist/server/adapters/nestjs/chat/dto/chat-message.dto.d.ts +8 -0
  248. package/dist/server/adapters/nestjs/chat/dto/chat-message.dto.js +56 -0
  249. package/dist/server/adapters/nestjs/chat/dto/chat-message.dto.js.map +1 -0
  250. package/dist/server/adapters/nestjs/chat/dto/index.d.ts +3 -0
  251. package/dist/server/adapters/nestjs/chat/dto/index.js +4 -0
  252. package/dist/server/adapters/nestjs/chat/dto/index.js.map +1 -0
  253. package/dist/server/adapters/nestjs/chat/index.d.ts +3 -0
  254. package/dist/server/adapters/nestjs/chat/index.js +3 -0
  255. package/dist/server/adapters/nestjs/chat/index.js.map +1 -0
  256. package/dist/server/adapters/nestjs/chat/speech-stream.gateway.d.ts +4 -0
  257. package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js +69 -0
  258. package/dist/server/adapters/nestjs/chat/speech-stream.gateway.js.map +1 -0
  259. package/dist/server/adapters/nestjs/decorators/ai-module.decorator.d.ts +6 -0
  260. package/dist/server/adapters/nestjs/decorators/ai-module.decorator.js +11 -0
  261. package/dist/server/adapters/nestjs/decorators/ai-module.decorator.js.map +1 -0
  262. package/dist/server/adapters/nestjs/decorators/ai-param.decorator.d.ts +5 -0
  263. package/dist/server/adapters/nestjs/decorators/ai-param.decorator.js +13 -0
  264. package/dist/server/adapters/nestjs/decorators/ai-param.decorator.js.map +1 -0
  265. package/dist/server/adapters/nestjs/decorators/ai-tool.decorator.d.ts +6 -0
  266. package/dist/server/adapters/nestjs/decorators/ai-tool.decorator.js +20 -0
  267. package/dist/server/adapters/nestjs/decorators/ai-tool.decorator.js.map +1 -0
  268. package/dist/server/adapters/nestjs/decorators/constants.d.ts +4 -0
  269. package/dist/server/adapters/nestjs/decorators/constants.js +5 -0
  270. package/dist/server/adapters/nestjs/decorators/constants.js.map +1 -0
  271. package/dist/server/adapters/nestjs/index.d.ts +14 -0
  272. package/dist/server/adapters/nestjs/index.js +20 -0
  273. package/dist/server/adapters/nestjs/index.js.map +1 -0
  274. package/dist/server/adapters/nestjs/metadata.d.ts +39 -0
  275. package/dist/server/adapters/nestjs/metadata.js +30 -0
  276. package/dist/server/adapters/nestjs/metadata.js.map +1 -0
  277. package/dist/server/adapters/nestjs/module/ai-tools-explorer.service.d.ts +36 -0
  278. package/dist/server/adapters/nestjs/module/ai-tools-explorer.service.js +156 -0
  279. package/dist/server/adapters/nestjs/module/ai-tools-explorer.service.js.map +1 -0
  280. package/dist/server/adapters/nestjs/module/ai-tools.module.d.ts +37 -0
  281. package/dist/server/adapters/nestjs/module/ai-tools.module.js +42 -0
  282. package/dist/server/adapters/nestjs/module/ai-tools.module.js.map +1 -0
  283. package/dist/server/adapters/nestjs/module/ai-tools.service.d.ts +28 -0
  284. package/dist/server/adapters/nestjs/module/ai-tools.service.js +38 -0
  285. package/dist/server/adapters/nestjs/module/ai-tools.service.js.map +1 -0
  286. package/dist/server/adapters/nestjs/scanner/nestjs-scanner.d.ts +16 -0
  287. package/dist/server/adapters/nestjs/scanner/nestjs-scanner.js +115 -0
  288. package/dist/server/adapters/nestjs/scanner/nestjs-scanner.js.map +1 -0
  289. package/dist/server/adapters/nestjs/scanner/schema-builder.d.ts +26 -0
  290. package/dist/server/adapters/nestjs/scanner/schema-builder.js +255 -0
  291. package/dist/server/adapters/nestjs/scanner/schema-builder.js.map +1 -0
  292. package/dist/server/adapters/nestjs/swagger.d.ts +7 -0
  293. package/dist/server/adapters/nestjs/swagger.js +37 -0
  294. package/dist/server/adapters/nestjs/swagger.js.map +1 -0
  295. package/dist/server/adapters/nextjs/context-helpers.d.ts +22 -0
  296. package/dist/server/adapters/nextjs/context-helpers.js +55 -0
  297. package/dist/server/adapters/nextjs/context-helpers.js.map +1 -0
  298. package/dist/server/adapters/nextjs/create-ai-chat-handler.d.ts +78 -0
  299. package/dist/server/adapters/nextjs/create-ai-chat-handler.js +950 -0
  300. package/dist/server/adapters/nextjs/create-ai-chat-handler.js.map +1 -0
  301. package/dist/server/adapters/nextjs/index.d.ts +8 -0
  302. package/dist/server/adapters/nextjs/index.js +9 -0
  303. package/dist/server/adapters/nextjs/index.js.map +1 -0
  304. package/dist/server/adapters/nextjs/prepare-model-messages.d.ts +58 -0
  305. package/dist/server/adapters/nextjs/prepare-model-messages.js +111 -0
  306. package/dist/server/adapters/nextjs/prepare-model-messages.js.map +1 -0
  307. package/dist/server/adapters/nextjs/sanitize-model-messages.d.ts +64 -0
  308. package/dist/server/adapters/nextjs/sanitize-model-messages.js +487 -0
  309. package/dist/server/adapters/nextjs/sanitize-model-messages.js.map +1 -0
  310. package/dist/server/adapters/nextjs/server-action-helper.d.ts +7 -0
  311. package/dist/server/adapters/nextjs/server-action-helper.js +38 -0
  312. package/dist/server/adapters/nextjs/server-action-helper.js.map +1 -0
  313. package/dist/server/adapters/nextjs/types.d.ts +246 -0
  314. package/dist/server/adapters/nextjs/types.js +2 -0
  315. package/dist/server/adapters/nextjs/types.js.map +1 -0
  316. package/dist/server/adapters/nextjs/with-ai-tool.d.ts +9 -0
  317. package/dist/server/adapters/nextjs/with-ai-tool.js +10 -0
  318. package/dist/server/adapters/nextjs/with-ai-tool.js.map +1 -0
  319. package/dist/server/core/followup-tool.d.ts +9 -0
  320. package/dist/server/core/followup-tool.js +80 -0
  321. package/dist/server/core/followup-tool.js.map +1 -0
  322. package/dist/server/core/index.d.ts +139 -0
  323. package/dist/server/core/index.js +787 -0
  324. package/dist/server/core/index.js.map +1 -0
  325. package/dist/server/core/intent-classifier.d.ts +94 -0
  326. package/dist/server/core/intent-classifier.js +314 -0
  327. package/dist/server/core/intent-classifier.js.map +1 -0
  328. package/dist/server/core/model-selector.d.ts +12 -0
  329. package/dist/server/core/model-selector.js +45 -0
  330. package/dist/server/core/model-selector.js.map +1 -0
  331. package/dist/server/core/module-router.d.ts +14 -0
  332. package/dist/server/core/module-router.js +107 -0
  333. package/dist/server/core/module-router.js.map +1 -0
  334. package/dist/server/core/zod-compact.d.ts +18 -0
  335. package/dist/server/core/zod-compact.js +127 -0
  336. package/dist/server/core/zod-compact.js.map +1 -0
  337. package/dist/server/index.d.ts +5 -0
  338. package/dist/server/index.js +8 -0
  339. package/dist/server/index.js.map +1 -0
  340. package/dist/server/lancer/cache.d.ts +9 -0
  341. package/dist/server/lancer/cache.js +30 -0
  342. package/dist/server/lancer/cache.js.map +1 -0
  343. package/dist/server/lancer/client.d.ts +2 -0
  344. package/dist/server/lancer/client.js +277 -0
  345. package/dist/server/lancer/client.js.map +1 -0
  346. package/dist/server/lancer/errors.d.ts +13 -0
  347. package/dist/server/lancer/errors.js +18 -0
  348. package/dist/server/lancer/errors.js.map +1 -0
  349. package/dist/server/lancer/index.d.ts +3 -0
  350. package/dist/server/lancer/index.js +3 -0
  351. package/dist/server/lancer/index.js.map +1 -0
  352. package/dist/server/lancer/telemetry-buffer.d.ts +15 -0
  353. package/dist/server/lancer/telemetry-buffer.js +61 -0
  354. package/dist/server/lancer/telemetry-buffer.js.map +1 -0
  355. package/dist/server/lancer/types.d.ts +201 -0
  356. package/dist/server/lancer/types.js +5 -0
  357. package/dist/server/lancer/types.js.map +1 -0
  358. package/dist/server/pii-shield/aegis-detector.d.ts +26 -0
  359. package/dist/server/pii-shield/aegis-detector.js +24 -0
  360. package/dist/server/pii-shield/aegis-detector.js.map +1 -0
  361. package/dist/server/pii-shield/create-pii-shield.d.ts +2 -0
  362. package/dist/server/pii-shield/create-pii-shield.js +189 -0
  363. package/dist/server/pii-shield/create-pii-shield.js.map +1 -0
  364. package/dist/server/pii-shield/deep-walk.d.ts +1 -0
  365. package/dist/server/pii-shield/deep-walk.js +17 -0
  366. package/dist/server/pii-shield/deep-walk.js.map +1 -0
  367. package/dist/server/pii-shield/fake-data.d.ts +5 -0
  368. package/dist/server/pii-shield/fake-data.js +168 -0
  369. package/dist/server/pii-shield/fake-data.js.map +1 -0
  370. package/dist/server/pii-shield/index.d.ts +4 -0
  371. package/dist/server/pii-shield/index.js +5 -0
  372. package/dist/server/pii-shield/index.js.map +1 -0
  373. package/dist/server/pii-shield/leakage.d.ts +1 -0
  374. package/dist/server/pii-shield/leakage.js +13 -0
  375. package/dist/server/pii-shield/leakage.js.map +1 -0
  376. package/dist/server/pii-shield/session-mapping.d.ts +12 -0
  377. package/dist/server/pii-shield/session-mapping.js +68 -0
  378. package/dist/server/pii-shield/session-mapping.js.map +1 -0
  379. package/dist/server/pipeline.d.ts +26 -0
  380. package/dist/server/pipeline.js +125 -0
  381. package/dist/server/pipeline.js.map +1 -0
  382. package/dist/server/testing/approvals.d.ts +11 -0
  383. package/dist/server/testing/approvals.js +39 -0
  384. package/dist/server/testing/approvals.js.map +1 -0
  385. package/dist/server/testing/combination.d.ts +3 -0
  386. package/dist/server/testing/combination.js +81 -0
  387. package/dist/server/testing/combination.js.map +1 -0
  388. package/dist/server/testing/create-test-suite.d.ts +29 -0
  389. package/dist/server/testing/create-test-suite.js +79 -0
  390. package/dist/server/testing/create-test-suite.js.map +1 -0
  391. package/dist/server/testing/edge-cases.d.ts +8 -0
  392. package/dist/server/testing/edge-cases.js +275 -0
  393. package/dist/server/testing/edge-cases.js.map +1 -0
  394. package/dist/server/testing/guardrails.d.ts +14 -0
  395. package/dist/server/testing/guardrails.js +150 -0
  396. package/dist/server/testing/guardrails.js.map +1 -0
  397. package/dist/server/testing/helpers.d.ts +14 -0
  398. package/dist/server/testing/helpers.js +114 -0
  399. package/dist/server/testing/helpers.js.map +1 -0
  400. package/dist/server/testing/index.d.ts +12 -0
  401. package/dist/server/testing/index.js +21 -0
  402. package/dist/server/testing/index.js.map +1 -0
  403. package/dist/server/testing/mock-executor.d.ts +8 -0
  404. package/dist/server/testing/mock-executor.js +38 -0
  405. package/dist/server/testing/mock-executor.js.map +1 -0
  406. package/dist/server/testing/regression.d.ts +7 -0
  407. package/dist/server/testing/regression.js +25 -0
  408. package/dist/server/testing/regression.js.map +1 -0
  409. package/dist/server/testing/routing.d.ts +12 -0
  410. package/dist/server/testing/routing.js +61 -0
  411. package/dist/server/testing/routing.js.map +1 -0
  412. package/dist/server/testing/schema-consistency.d.ts +6 -0
  413. package/dist/server/testing/schema-consistency.js +54 -0
  414. package/dist/server/testing/schema-consistency.js.map +1 -0
  415. package/dist/server/testing/smoke.d.ts +11 -0
  416. package/dist/server/testing/smoke.js +62 -0
  417. package/dist/server/testing/smoke.js.map +1 -0
  418. package/dist/server/testing/types.d.ts +156 -0
  419. package/dist/server/testing/types.js +2 -0
  420. package/dist/server/testing/types.js.map +1 -0
  421. package/dist/types.d.ts +696 -0
  422. package/dist/types.js +84 -0
  423. package/dist/types.js.map +1 -0
  424. package/package.json +187 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/react/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import type { ActionIdRegistry } from '../types.js';
2
+ export interface UiAction {
3
+ type: string;
4
+ actionId?: string;
5
+ [key: string]: unknown;
6
+ }
7
+ export type UiActionHandler = (action: UiAction) => void | Promise<void>;
8
+ export interface AiClientActionEventDetail {
9
+ actionId: string;
10
+ payload?: Record<string, unknown>;
11
+ }
12
+ export declare class UiActionBus {
13
+ private handlersByType;
14
+ private handlersById;
15
+ subscribeByType(type: string, handler: UiActionHandler): () => void;
16
+ subscribeById(actionId: string, handler: UiActionHandler): () => void;
17
+ dispatch(action: UiAction): Promise<void>;
18
+ }
19
+ export declare function useAiClientActionByType(bus: UiActionBus, actionType: string, handler: UiActionHandler): void;
20
+ export declare function useAiClientActionById(bus: UiActionBus, actionId: string, handler: UiActionHandler): void;
21
+ /**
22
+ * Set the action ID registry for validation (call once at app startup).
23
+ * The registry is typically auto-generated by the codegen package.
24
+ */
25
+ export declare function setActionIdRegistry(registry: ActionIdRegistry): void;
26
+ /**
27
+ * Dispatch an AI client action via window events.
28
+ * Used by the chat panel / AI layer to trigger UI updates.
29
+ */
30
+ export declare function dispatchAiClientAction(detail: AiClientActionEventDetail): void;
31
+ /**
32
+ * Dispatch one or more AI client actions via window events.
33
+ * Convenience wrapper for compound actions — accepts a single action or an array.
34
+ */
35
+ export declare function dispatchAiClientActions(details: AiClientActionEventDetail | AiClientActionEventDetail[]): void;
36
+ /**
37
+ * Hook to register a handler for a specific AI client action ID.
38
+ * The handler is tracked in a global registry for dev-mode validation.
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * useAiClientAction('task-details.open', (payload) => {
43
+ * openTaskDetails(payload?.taskId as string);
44
+ * });
45
+ * ```
46
+ */
47
+ export declare function useAiClientAction(actionId: string, handler: (payload?: Record<string, unknown>) => void): void;
48
+ /**
49
+ * Returns all currently registered handler actionIds.
50
+ */
51
+ export declare function getRegisteredHandlers(): string[];
52
+ /**
53
+ * Returns actionIds defined in the registry but missing a registered handler.
54
+ * Useful for dev-mode validation to ensure all AI actions have handlers.
55
+ */
56
+ export declare function getMissingHandlers(): string[];
57
+ /**
58
+ * Returns info about a specific actionId from the registry.
59
+ */
60
+ export declare function getActionIdInfo(actionId: string): import("../types.js").ActionIdEntry | undefined;
61
+ /**
62
+ * Hook that warns about missing AI action handlers in development mode.
63
+ * Checks after a 2-second delay to allow all components to mount and register.
64
+ *
65
+ * @example
66
+ * ```tsx
67
+ * // In your AppShell or root layout component:
68
+ * useAiMissingHandlerWarning();
69
+ * ```
70
+ */
71
+ export declare function useAiMissingHandlerWarning(options?: {
72
+ delay?: number;
73
+ }): void;
@@ -0,0 +1,170 @@
1
+ import { useEffect, useCallback, useRef } from 'react';
2
+ // ============================================================================
3
+ // UiActionBus (class-based, framework-agnostic)
4
+ // ============================================================================
5
+ function addHandler(map, key, handler) {
6
+ const handlers = map.get(key) ?? new Set();
7
+ handlers.add(handler);
8
+ map.set(key, handlers);
9
+ return () => {
10
+ const current = map.get(key);
11
+ if (!current)
12
+ return;
13
+ current.delete(handler);
14
+ if (current.size === 0)
15
+ map.delete(key);
16
+ };
17
+ }
18
+ export class UiActionBus {
19
+ handlersByType = new Map();
20
+ handlersById = new Map();
21
+ subscribeByType(type, handler) {
22
+ return addHandler(this.handlersByType, type, handler);
23
+ }
24
+ subscribeById(actionId, handler) {
25
+ return addHandler(this.handlersById, actionId, handler);
26
+ }
27
+ async dispatch(action) {
28
+ const typeHandlers = this.handlersByType.get(action.type);
29
+ const idHandlers = action.actionId
30
+ ? this.handlersById.get(action.actionId)
31
+ : undefined;
32
+ const allHandlers = new Set([
33
+ ...(typeHandlers ? Array.from(typeHandlers) : []),
34
+ ...(idHandlers ? Array.from(idHandlers) : []),
35
+ ]);
36
+ for (const handler of allHandlers) {
37
+ await handler(action);
38
+ }
39
+ }
40
+ }
41
+ // ============================================================================
42
+ // UiActionBus Hooks
43
+ // ============================================================================
44
+ export function useAiClientActionByType(bus, actionType, handler) {
45
+ useEffect(() => bus.subscribeByType(actionType, handler), [bus, actionType, handler]);
46
+ }
47
+ export function useAiClientActionById(bus, actionId, handler) {
48
+ useEffect(() => bus.subscribeById(actionId, handler), [bus, actionId, handler]);
49
+ }
50
+ // ============================================================================
51
+ // Window Event-based Action Dispatch (to-do-manager pattern)
52
+ // ============================================================================
53
+ const AI_CLIENT_ACTION_EVENT = 'ai-client-action';
54
+ /** Global registry of currently registered handler actionIds */
55
+ const registeredHandlers = new Set();
56
+ /** Optional reference to an ActionIdRegistry for validation */
57
+ let actionIdRegistryRef;
58
+ /**
59
+ * Set the action ID registry for validation (call once at app startup).
60
+ * The registry is typically auto-generated by the codegen package.
61
+ */
62
+ export function setActionIdRegistry(registry) {
63
+ actionIdRegistryRef = registry;
64
+ }
65
+ /**
66
+ * Dispatch an AI client action via window events.
67
+ * Used by the chat panel / AI layer to trigger UI updates.
68
+ */
69
+ export function dispatchAiClientAction(detail) {
70
+ if (typeof window === 'undefined')
71
+ return;
72
+ window.dispatchEvent(new CustomEvent(AI_CLIENT_ACTION_EVENT, { detail }));
73
+ }
74
+ /**
75
+ * Dispatch one or more AI client actions via window events.
76
+ * Convenience wrapper for compound actions — accepts a single action or an array.
77
+ */
78
+ export function dispatchAiClientActions(details) {
79
+ const actions = Array.isArray(details) ? details : [details];
80
+ for (const detail of actions) {
81
+ dispatchAiClientAction(detail);
82
+ }
83
+ }
84
+ /**
85
+ * Hook to register a handler for a specific AI client action ID.
86
+ * The handler is tracked in a global registry for dev-mode validation.
87
+ *
88
+ * @example
89
+ * ```tsx
90
+ * useAiClientAction('task-details.open', (payload) => {
91
+ * openTaskDetails(payload?.taskId as string);
92
+ * });
93
+ * ```
94
+ */
95
+ export function useAiClientAction(actionId, handler) {
96
+ const handlerRef = useRef(handler);
97
+ handlerRef.current = handler;
98
+ const stableHandler = useCallback((payload) => handlerRef.current(payload), []);
99
+ useEffect(() => {
100
+ registeredHandlers.add(actionId);
101
+ const handleEvent = (event) => {
102
+ const detail = event
103
+ .detail;
104
+ if (!detail || detail.actionId !== actionId)
105
+ return;
106
+ stableHandler(detail.payload);
107
+ };
108
+ window.addEventListener(AI_CLIENT_ACTION_EVENT, handleEvent);
109
+ return () => {
110
+ window.removeEventListener(AI_CLIENT_ACTION_EVENT, handleEvent);
111
+ registeredHandlers.delete(actionId);
112
+ };
113
+ }, [actionId, stableHandler]);
114
+ }
115
+ // ============================================================================
116
+ // Handler Registry Inspection (for dev-mode validation)
117
+ // ============================================================================
118
+ /**
119
+ * Returns all currently registered handler actionIds.
120
+ */
121
+ export function getRegisteredHandlers() {
122
+ return Array.from(registeredHandlers);
123
+ }
124
+ /**
125
+ * Returns actionIds defined in the registry but missing a registered handler.
126
+ * Useful for dev-mode validation to ensure all AI actions have handlers.
127
+ */
128
+ export function getMissingHandlers() {
129
+ if (!actionIdRegistryRef)
130
+ return [];
131
+ const required = Object.keys(actionIdRegistryRef);
132
+ return required.filter((id) => !registeredHandlers.has(id));
133
+ }
134
+ /**
135
+ * Returns info about a specific actionId from the registry.
136
+ */
137
+ export function getActionIdInfo(actionId) {
138
+ return actionIdRegistryRef?.[actionId];
139
+ }
140
+ // ============================================================================
141
+ // Dev-Mode Missing Handler Warning
142
+ // ============================================================================
143
+ /**
144
+ * Hook that warns about missing AI action handlers in development mode.
145
+ * Checks after a 2-second delay to allow all components to mount and register.
146
+ *
147
+ * @example
148
+ * ```tsx
149
+ * // In your AppShell or root layout component:
150
+ * useAiMissingHandlerWarning();
151
+ * ```
152
+ */
153
+ export function useAiMissingHandlerWarning(options = {}) {
154
+ const { delay = 2000 } = options;
155
+ useEffect(() => {
156
+ if (process.env.NODE_ENV !== 'development')
157
+ return;
158
+ if (!actionIdRegistryRef)
159
+ return;
160
+ const timer = setTimeout(() => {
161
+ const missing = getMissingHandlers();
162
+ if (missing.length === 0)
163
+ return;
164
+ console.warn(`[glirastes] ${missing.length} AI action handler(s) missing:`, missing);
165
+ console.warn('[glirastes] Register handlers with useAiClientAction() or mark as @ai-ignore');
166
+ }, delay);
167
+ return () => clearTimeout(timer);
168
+ }, [delay]);
169
+ }
170
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/react/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { ApprovalDescriptionFn } from '../types.js';
2
+ export interface ApprovalDescriptionConfig {
3
+ /** Map field names to human-readable labels. Example: `{ dueDate: 'Due date' }` */
4
+ fieldLabels?: Record<string, string>;
5
+ /**
6
+ * Map of field+value to translated display value.
7
+ * Outer key = field name, inner key = raw value.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * { priority: { high: 'High', low: 'Low' }, status: { done: 'Done' } }
12
+ * ```
13
+ */
14
+ valueTranslations?: Record<string, Record<string, string>>;
15
+ /** Field names to always hide (e.g. internal IDs). UUIDs are hidden automatically. */
16
+ hiddenFields?: string[] | Set<string>;
17
+ /** Map tool names to human-readable action labels */
18
+ toolLabels?: Record<string, string>;
19
+ /** Locale for date formatting (default: `'en-US'`) */
20
+ dateLocale?: string;
21
+ /** Default confirm button text */
22
+ defaultConfirmText?: string;
23
+ /** Default description for unknown tools */
24
+ defaultDescription?: string;
25
+ }
26
+ /**
27
+ * Create an approval description generator that formats tool arguments
28
+ * into human-readable detail lines for approval cards.
29
+ *
30
+ * Features:
31
+ * - Auto-hides UUID values and configurable field names
32
+ * - Auto-formats ISO dates using the configured locale
33
+ * - Translates field values via configurable mappings
34
+ * - Flattens nested objects into detail lines
35
+ * - Filters empty arrays and null/undefined values
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * import { createApprovalDescriptionGenerator } from '../index.js';
40
+ *
41
+ * const getApprovalDescription = createApprovalDescriptionGenerator({
42
+ * fieldLabels: { title: 'Title', dueDate: 'Due date', priority: 'Priority' },
43
+ * valueTranslations: { priority: { high: 'High', medium: 'Medium', low: 'Low' } },
44
+ * hiddenFields: ['taskId', 'assigneeId', 'groupId'],
45
+ * toolLabels: { create_task: 'Create task', update_task: 'Update task' },
46
+ * dateLocale: 'de-DE',
47
+ * defaultConfirmText: 'Execute',
48
+ * });
49
+ *
50
+ * <AiChatProvider approvalDescription={getApprovalDescription} ... />
51
+ * ```
52
+ */
53
+ export declare function createApprovalDescriptionGenerator(config?: ApprovalDescriptionConfig): ApprovalDescriptionFn;
@@ -0,0 +1,120 @@
1
+ // ============================================================================
2
+ // Helpers
3
+ // ============================================================================
4
+ const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
5
+ const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|[+-]\d{2}:\d{2})?)?$/;
6
+ function capitalize(str) {
7
+ return str ? str.charAt(0).toUpperCase() + str.slice(1) : str;
8
+ }
9
+ function formatDateValue(strValue, locale) {
10
+ try {
11
+ const date = new Date(strValue);
12
+ if (isNaN(date.getTime()))
13
+ return strValue;
14
+ // Date-only (YYYY-MM-DD)
15
+ if (strValue.length === 10) {
16
+ return date.toLocaleDateString(locale, { day: '2-digit', month: '2-digit', year: 'numeric' });
17
+ }
18
+ return date.toLocaleString(locale, {
19
+ day: '2-digit', month: '2-digit', year: 'numeric',
20
+ hour: '2-digit', minute: '2-digit',
21
+ });
22
+ }
23
+ catch {
24
+ return strValue;
25
+ }
26
+ }
27
+ // ============================================================================
28
+ // Factory
29
+ // ============================================================================
30
+ /**
31
+ * Create an approval description generator that formats tool arguments
32
+ * into human-readable detail lines for approval cards.
33
+ *
34
+ * Features:
35
+ * - Auto-hides UUID values and configurable field names
36
+ * - Auto-formats ISO dates using the configured locale
37
+ * - Translates field values via configurable mappings
38
+ * - Flattens nested objects into detail lines
39
+ * - Filters empty arrays and null/undefined values
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import { createApprovalDescriptionGenerator } from '../index.js';
44
+ *
45
+ * const getApprovalDescription = createApprovalDescriptionGenerator({
46
+ * fieldLabels: { title: 'Title', dueDate: 'Due date', priority: 'Priority' },
47
+ * valueTranslations: { priority: { high: 'High', medium: 'Medium', low: 'Low' } },
48
+ * hiddenFields: ['taskId', 'assigneeId', 'groupId'],
49
+ * toolLabels: { create_task: 'Create task', update_task: 'Update task' },
50
+ * dateLocale: 'de-DE',
51
+ * defaultConfirmText: 'Execute',
52
+ * });
53
+ *
54
+ * <AiChatProvider approvalDescription={getApprovalDescription} ... />
55
+ * ```
56
+ */
57
+ export function createApprovalDescriptionGenerator(config = {}) {
58
+ const { fieldLabels = {}, valueTranslations = {}, hiddenFields: rawHiddenFields, toolLabels = {}, dateLocale = 'en-US', defaultConfirmText, defaultDescription = 'Confirm action?', } = config;
59
+ const hiddenFields = rawHiddenFields instanceof Set
60
+ ? rawHiddenFields
61
+ : new Set(rawHiddenFields ?? []);
62
+ function formatValue(key, value) {
63
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
64
+ return Object.entries(value)
65
+ .filter(([, v]) => v !== undefined && v !== null && v !== '')
66
+ .map(([k, v]) => `${fieldLabels[k] || k}: ${formatValue(k, v)}`)
67
+ .join(', ');
68
+ }
69
+ const strValue = String(value);
70
+ if (valueTranslations[key]?.[strValue])
71
+ return valueTranslations[key][strValue];
72
+ if (ISO_DATE_REGEX.test(strValue))
73
+ return formatDateValue(strValue, dateLocale);
74
+ return capitalize(strValue);
75
+ }
76
+ function collectDetails(obj) {
77
+ const result = [];
78
+ for (const [key, value] of Object.entries(obj)) {
79
+ if (value === undefined || value === null || value === '')
80
+ continue;
81
+ if (hiddenFields.has(key))
82
+ continue;
83
+ if (UUID_REGEX.test(String(value)))
84
+ continue;
85
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
86
+ result.push(...collectDetails(value));
87
+ continue;
88
+ }
89
+ const label = fieldLabels[key] || key;
90
+ let displayValue;
91
+ if (Array.isArray(value)) {
92
+ const filtered = value.filter((v) => !UUID_REGEX.test(String(v)));
93
+ if (filtered.length === 0)
94
+ continue;
95
+ displayValue = filtered.map((v) => formatValue(key, v)).join(', ');
96
+ }
97
+ else {
98
+ displayValue = formatValue(key, value);
99
+ }
100
+ result.push(`${label}: ${displayValue}`);
101
+ }
102
+ return result;
103
+ }
104
+ return (toolName, approvalId, args) => {
105
+ const details = [];
106
+ if (args && typeof args === 'object') {
107
+ details.push(...collectDetails(args));
108
+ }
109
+ return {
110
+ id: approvalId,
111
+ toolName,
112
+ args: (args && typeof args === 'object' ? args : {}),
113
+ messageId: '',
114
+ description: toolLabels[toolName] || defaultDescription,
115
+ details,
116
+ ...(defaultConfirmText ? { confirmText: defaultConfirmText } : {}),
117
+ };
118
+ };
119
+ }
120
+ //# sourceMappingURL=create-approval-description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-approval-description.js","sourceRoot":"","sources":["../../../src/react/utils/create-approval-description.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /** Schema-like object that can validate values (compatible with Zod, Valibot, etc.) */
2
+ interface SafeParseable {
3
+ safeParse(value: unknown): {
4
+ success: true;
5
+ data: Record<string, unknown>;
6
+ } | {
7
+ success: false;
8
+ error: {
9
+ issues: unknown[];
10
+ };
11
+ };
12
+ }
13
+ export interface ToolResultHandlerConfig {
14
+ /** Schema to validate uiActions (compatible with Zod `.safeParse()`). When omitted, uiActions are not validated. */
15
+ uiActionSchema?: SafeParseable;
16
+ /**
17
+ * Custom action handlers by uiAction type.
18
+ * Called with the full validated uiAction object.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * actionHandlers: {
23
+ * 'set-filters': (action) => {
24
+ * window.dispatchEvent(new CustomEvent('ai-set-filters', { detail: action.filters }));
25
+ * },
26
+ * }
27
+ * ```
28
+ */
29
+ actionHandlers?: Record<string, (action: Record<string, unknown>) => void>;
30
+ /**
31
+ * Map of entity names to list page destinations.
32
+ * Used by convention-based `{entity}-created` actions.
33
+ *
34
+ * @example `{ task: '/tasks', group: '/groups' }`
35
+ */
36
+ entityListDestinations?: Record<string, string>;
37
+ /** Called when an entity-created or entity-deleted action requires navigation */
38
+ onNavigate?: (destination: string, entity: string) => void;
39
+ /** Called when an entity-updated action requires opening a detail view */
40
+ onOpenDetail?: (entity: string, entityId: string) => void;
41
+ /** Called for `run-client-action` uiAction types */
42
+ onClientAction?: (actionId: string, payload?: Record<string, unknown>) => void;
43
+ /** Called for any successful tool result */
44
+ onSuccess?: (toolName: string, result: Record<string, unknown>) => void;
45
+ /**
46
+ * Fallback handlers for specific tool names.
47
+ * Called when a tool succeeds but has no uiAction to process.
48
+ */
49
+ toolFallbacks?: Record<string, (result: Record<string, unknown>) => void>;
50
+ /** Optional dedupe guard for duplicate `run-client-action` dispatches. */
51
+ clientActionDedupe?: {
52
+ enabled?: boolean;
53
+ windowMs?: number;
54
+ actionIds?: string[];
55
+ };
56
+ }
57
+ /**
58
+ * Create a tool result handler that processes tool outputs for UI-side actions.
59
+ *
60
+ * Extracts `uiAction` from tool results, validates against an optional schema,
61
+ * and routes to the appropriate handler based on action type.
62
+ *
63
+ * Supports convention-based entity actions (`{entity}-created`, `{entity}-updated`,
64
+ * `{entity}-deleted`), `run-client-action`, and custom action handlers.
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * import { createToolResultHandler } from '../index.js';
69
+ * import { dispatchAiClientAction } from '../ui/index.js';
70
+ *
71
+ * const handleToolResult = createToolResultHandler({
72
+ * uiActionSchema: mySchema,
73
+ * entityListDestinations: { task: '/tasks', group: '/groups' },
74
+ * onNavigate: (dest) => router.push(dest),
75
+ * onOpenDetail: (entity, id) => openPanel(entity, id),
76
+ * onClientAction: (actionId, payload) => dispatchAiClientAction({ actionId, payload }),
77
+ * onSuccess: () => window.dispatchEvent(new CustomEvent('data-refresh')),
78
+ * actionHandlers: {
79
+ * 'set-filters': (action) => {
80
+ * window.dispatchEvent(new CustomEvent('ai-set-filters', { detail: action.filters }));
81
+ * },
82
+ * },
83
+ * });
84
+ *
85
+ * // Wire into AiChatProvider or use in useEffect:
86
+ * <AiChatProvider onToolResult={handleToolResult} ... />
87
+ * ```
88
+ */
89
+ export declare function createToolResultHandler(config: ToolResultHandlerConfig): (toolName: string, result: unknown) => void;
90
+ export {};