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,487 @@
1
+ /**
2
+ * Sanitize model messages for OpenAI compatibility.
3
+ *
4
+ * Handles three classes of problems that occur after convertToModelMessages +
5
+ * pruneMessages from the Vercel AI SDK:
6
+ *
7
+ * 1. **Orphaned tool-calls** — assistant has tool-call but no matching
8
+ * tool-result anywhere (pruneMessages stripped it).
9
+ * 2. **Orphaned tool-approval-requests** — approval request without matching
10
+ * response, or whose linked tool-call was removed.
11
+ * 3. **Ordering violations** — OpenAI requires tool-result messages to
12
+ * IMMEDIATELY follow their assistant message. After pruning, the ordering
13
+ * can break.
14
+ *
15
+ * **Important:** The OpenAI provider silently drops `tool-approval-response`
16
+ * parts during serialization. A tool message containing ONLY approval-responses
17
+ * (no tool-result) produces zero OpenAI messages. Therefore, a tool-call is
18
+ * only considered "safe" when it has an adjacent `tool-result` — a
19
+ * `tool-approval-response` alone does NOT satisfy this requirement.
20
+ *
21
+ * **Exception:** When the LAST message is a tool message containing
22
+ * `tool-approval-response` parts, those tool-calls are preserved. The Vercel
23
+ * AI SDK's `streamText` runs `collectToolApprovals()` on the last message
24
+ * and executes approved tools BEFORE sending anything to OpenAI. Stripping
25
+ * these would break the approval flow (causing an infinite loop where the
26
+ * model re-generates the same tool call).
27
+ *
28
+ * The public API is {@link sanitizeModelMessages}, which runs two passes:
29
+ * - Primary pass: adjacency-based orphan removal
30
+ * - Safety-net pass: strict re-check for any remaining orphans
31
+ *
32
+ * @module
33
+ */
34
+ // ---------------------------------------------------------------------------
35
+ // Helpers
36
+ // ---------------------------------------------------------------------------
37
+ function isRecord(value) {
38
+ return typeof value === 'object' && value !== null;
39
+ }
40
+ /**
41
+ * Build a mapping from approvalId → toolCallId from assistant messages.
42
+ */
43
+ function buildApprovalIdToCallIdMap(messages) {
44
+ const map = new Map();
45
+ for (const msg of messages) {
46
+ if (!isRecord(msg) || msg.role !== 'assistant')
47
+ continue;
48
+ const content = msg.content;
49
+ if (!Array.isArray(content))
50
+ continue;
51
+ for (const part of content) {
52
+ if (isRecord(part) &&
53
+ part.type === 'tool-approval-request' &&
54
+ typeof part.approvalId === 'string' &&
55
+ typeof part.toolCallId === 'string') {
56
+ map.set(part.approvalId, part.toolCallId);
57
+ }
58
+ }
59
+ }
60
+ return map;
61
+ }
62
+ /**
63
+ * Find tool-call IDs that have a pending `tool-approval-response` in the
64
+ * LAST tool message. These are safe because `streamText`'s
65
+ * `collectToolApprovals()` will execute them before calling the model.
66
+ */
67
+ function findPendingApprovalCallIds(messages, approvalIdToCallId) {
68
+ const pendingCallIds = new Set();
69
+ // collectToolApprovals in streamText only looks at the very last message
70
+ const lastMsg = messages.at(-1);
71
+ if (!isRecord(lastMsg) || lastMsg.role !== 'tool')
72
+ return pendingCallIds;
73
+ const content = lastMsg.content;
74
+ if (!Array.isArray(content))
75
+ return pendingCallIds;
76
+ // Only consider this a pending approval if the tool message has NO
77
+ // tool-result parts (otherwise it's a completed step, not a pending approval)
78
+ const hasToolResult = content.some((part) => isRecord(part) && part.type === 'tool-result');
79
+ if (hasToolResult)
80
+ return pendingCallIds;
81
+ for (const part of content) {
82
+ if (isRecord(part) &&
83
+ part.type === 'tool-approval-response' &&
84
+ typeof part.approvalId === 'string') {
85
+ const linkedCallId = approvalIdToCallId.get(part.approvalId);
86
+ if (linkedCallId) {
87
+ pendingCallIds.add(linkedCallId);
88
+ }
89
+ }
90
+ }
91
+ return pendingCallIds;
92
+ }
93
+ /**
94
+ * Remove duplicate assistant tool-call occurrences for the same toolCallId.
95
+ *
96
+ * OpenAI requires each assistant `tool-call` to be followed by tool results
97
+ * for that call in the immediate next tool message block. If the same
98
+ * `toolCallId` appears in multiple assistant messages, one historical copy
99
+ * becomes orphaned and triggers a 400 error.
100
+ *
101
+ * Strategy:
102
+ * - Keep only the LAST assistant occurrence of each toolCallId.
103
+ * - **Exception:** Preserve tool-calls with pending approval-responses at the
104
+ * conversation tail, as these will be executed by streamText before the
105
+ * model call.
106
+ * - Remove matching `tool-approval-request` parts from older occurrences.
107
+ * - Drop assistant messages that become empty.
108
+ */
109
+ function dedupeAssistantToolCalls(messages) {
110
+ // Build approval mapping and find pending approvals
111
+ const approvalIdToCallId = buildApprovalIdToCallIdMap(messages);
112
+ const pendingApprovalCallIds = findPendingApprovalCallIds(messages, approvalIdToCallId);
113
+ const lastAssistantIndexByCallId = new Map();
114
+ for (let i = 0; i < messages.length; i++) {
115
+ const message = messages[i];
116
+ if (!isRecord(message) || message.role !== 'assistant')
117
+ continue;
118
+ const content = message.content;
119
+ if (!Array.isArray(content))
120
+ continue;
121
+ for (const part of content) {
122
+ if (isRecord(part) &&
123
+ part.type === 'tool-call' &&
124
+ typeof part.toolCallId === 'string') {
125
+ lastAssistantIndexByCallId.set(part.toolCallId, i);
126
+ }
127
+ }
128
+ }
129
+ return messages
130
+ .map((message, messageIndex) => {
131
+ if (!isRecord(message) || message.role !== 'assistant')
132
+ return message;
133
+ const content = message.content;
134
+ if (!Array.isArray(content))
135
+ return message;
136
+ const seenCallIdsInMessage = new Set();
137
+ const filtered = content.filter((part) => {
138
+ if (!isRecord(part))
139
+ return true;
140
+ if (part.type === 'tool-call' && typeof part.toolCallId === 'string') {
141
+ const isLastOccurrence = lastAssistantIndexByCallId.get(part.toolCallId) === messageIndex;
142
+ const isDuplicateInSameMessage = seenCallIdsInMessage.has(part.toolCallId);
143
+ const hasPendingApproval = pendingApprovalCallIds.has(part.toolCallId);
144
+ // Preserve if: last occurrence, OR has pending approval
145
+ // (pending approval means streamText will execute it - must not remove)
146
+ if ((!isLastOccurrence && !hasPendingApproval) ||
147
+ isDuplicateInSameMessage) {
148
+ console.info(`[glirastes] Removing duplicate assistant tool call: ${part.toolCallId}`);
149
+ return false;
150
+ }
151
+ seenCallIdsInMessage.add(part.toolCallId);
152
+ return true;
153
+ }
154
+ if (part.type === 'tool-approval-request' &&
155
+ typeof part.toolCallId === 'string') {
156
+ const isLastOccurrence = lastAssistantIndexByCallId.get(part.toolCallId) === messageIndex;
157
+ const hasPendingApproval = pendingApprovalCallIds.has(part.toolCallId);
158
+ // Keep approval-request if it's for the last occurrence OR has pending approval
159
+ return isLastOccurrence || hasPendingApproval;
160
+ }
161
+ return true;
162
+ });
163
+ if (filtered.length !== content.length) {
164
+ return { ...message, content: filtered };
165
+ }
166
+ return message;
167
+ })
168
+ .filter((message) => {
169
+ if (!isRecord(message) || message.role !== 'assistant')
170
+ return true;
171
+ const content = message.content;
172
+ return Array.isArray(content) ? content.length > 0 : true;
173
+ });
174
+ }
175
+ // ---------------------------------------------------------------------------
176
+ // Primary pass — removeOrphanedToolCalls
177
+ // ---------------------------------------------------------------------------
178
+ /**
179
+ * Remove orphaned tool-calls whose results are not immediately adjacent.
180
+ *
181
+ * Strategy:
182
+ * - For each assistant message with tool-calls, check that the NEXT message(s)
183
+ * are tool messages containing all required results.
184
+ * - If not, strip the orphaned tool-call (and any related approval-request).
185
+ * - Exception: tool-calls with pending approval-responses at the conversation
186
+ * tail are preserved (streamText will execute them).
187
+ * - Remove empty assistant/tool messages.
188
+ */
189
+ function removeOrphanedToolCalls(messages) {
190
+ // --- Build approval mapping and find pending approvals ---
191
+ const approvalIdToCallId = buildApprovalIdToCallIdMap(messages);
192
+ const pendingApprovalCallIds = findPendingApprovalCallIds(messages, approvalIdToCallId);
193
+ // --- Collect all tool-result IDs in tool-role messages ---
194
+ const adjacentResultIds = new Set();
195
+ for (let i = 0; i < messages.length; i++) {
196
+ const msg = messages[i];
197
+ if (!isRecord(msg) || msg.role !== 'assistant')
198
+ continue;
199
+ const content = msg.content;
200
+ if (!Array.isArray(content))
201
+ continue;
202
+ const callIds = new Set();
203
+ for (const part of content) {
204
+ if (isRecord(part) &&
205
+ part.type === 'tool-call' &&
206
+ typeof part.toolCallId === 'string') {
207
+ callIds.add(part.toolCallId);
208
+ }
209
+ }
210
+ if (callIds.size === 0)
211
+ continue;
212
+ // Walk forward: only consecutive tool messages count
213
+ for (let j = i + 1; j < messages.length; j++) {
214
+ const next = messages[j];
215
+ if (!isRecord(next) || next.role !== 'tool')
216
+ break;
217
+ const nextContent = next.content;
218
+ if (!Array.isArray(nextContent))
219
+ break;
220
+ for (const part of nextContent) {
221
+ if (isRecord(part) &&
222
+ part.type === 'tool-result' &&
223
+ typeof part.toolCallId === 'string') {
224
+ if (callIds.has(part.toolCallId)) {
225
+ adjacentResultIds.add(part.toolCallId);
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+ // A tool-call is safe if it has an adjacent result OR a pending approval
232
+ const safeCallIds = new Set([
233
+ ...adjacentResultIds,
234
+ ...pendingApprovalCallIds,
235
+ ]);
236
+ // --- Filter assistant content ---
237
+ return (messages
238
+ .map((message) => {
239
+ if (!isRecord(message) || message.role !== 'assistant')
240
+ return message;
241
+ const content = message.content;
242
+ if (!Array.isArray(content))
243
+ return message;
244
+ const filteredContent = content.filter((part) => {
245
+ if (!isRecord(part))
246
+ return true;
247
+ // Remove orphaned tool-calls (no adjacent tool-result and no pending approval)
248
+ if (part.type === 'tool-call' &&
249
+ typeof part.toolCallId === 'string') {
250
+ const isSafe = safeCallIds.has(part.toolCallId);
251
+ if (!isSafe) {
252
+ console.info(`[glirastes] Removing orphaned tool call: ${part.toolCallId}`);
253
+ }
254
+ return isSafe;
255
+ }
256
+ // Remove approval-requests whose tool-call was removed
257
+ if (part.type === 'tool-approval-request' &&
258
+ typeof part.toolCallId === 'string') {
259
+ return safeCallIds.has(part.toolCallId);
260
+ }
261
+ return true;
262
+ });
263
+ if (filteredContent.length !== content.length) {
264
+ return { ...message, content: filteredContent };
265
+ }
266
+ return message;
267
+ })
268
+ // Remove empty assistant messages
269
+ .filter((message) => {
270
+ if (!isRecord(message) || message.role !== 'assistant')
271
+ return true;
272
+ const content = message.content;
273
+ if (!Array.isArray(content))
274
+ return true;
275
+ return content.length > 0;
276
+ })
277
+ // Remove tool messages whose parts are all orphaned
278
+ .map((message) => {
279
+ if (!isRecord(message) || message.role !== 'tool')
280
+ return message;
281
+ const content = message.content;
282
+ if (!Array.isArray(content))
283
+ return message;
284
+ const filtered = content.filter((part) => {
285
+ if (!isRecord(part))
286
+ return true;
287
+ if (part.type === 'tool-result' &&
288
+ typeof part.toolCallId === 'string') {
289
+ return adjacentResultIds.has(part.toolCallId);
290
+ }
291
+ // Approval-responses survive if their linked tool-call survived
292
+ if (part.type === 'tool-approval-response' &&
293
+ typeof part.approvalId === 'string') {
294
+ const linkedCallId = approvalIdToCallId.get(part.approvalId);
295
+ return linkedCallId ? safeCallIds.has(linkedCallId) : true;
296
+ }
297
+ return true;
298
+ });
299
+ if (filtered.length !== content.length) {
300
+ return { ...message, content: filtered };
301
+ }
302
+ return message;
303
+ })
304
+ .filter((message) => {
305
+ if (!isRecord(message) || message.role !== 'tool')
306
+ return true;
307
+ const content = message.content;
308
+ if (!Array.isArray(content))
309
+ return true;
310
+ // Keep tool message if it has at least one surviving tool-result
311
+ // OR a pending approval-response for a surviving tool-call
312
+ return content.some((part) => {
313
+ if (!isRecord(part))
314
+ return false;
315
+ if (part.type === 'tool-result' &&
316
+ typeof part.toolCallId === 'string') {
317
+ return adjacentResultIds.has(part.toolCallId);
318
+ }
319
+ if (part.type === 'tool-approval-response' &&
320
+ typeof part.approvalId === 'string') {
321
+ const linkedCallId = approvalIdToCallId.get(part.approvalId);
322
+ return linkedCallId
323
+ ? pendingApprovalCallIds.has(linkedCallId)
324
+ : false;
325
+ }
326
+ return false;
327
+ });
328
+ }));
329
+ }
330
+ // ---------------------------------------------------------------------------
331
+ // Safety-net pass — stripRemainingOrphanedToolCalls
332
+ // ---------------------------------------------------------------------------
333
+ /**
334
+ * Strict re-check: strip any tool-call that still lacks an adjacent
335
+ * tool-result after the primary pass.
336
+ *
337
+ * Catches edge cases from pruneMessages / convertToModelMessages that the
338
+ * adjacency-based pass may miss (e.g. step-start block splits, incomplete
339
+ * tool states producing calls without results).
340
+ *
341
+ * Preserves tool-calls with pending approval-responses at the tail.
342
+ */
343
+ function stripRemainingOrphanedToolCalls(messages) {
344
+ // Build approval mapping and find pending approvals
345
+ const approvalIdToCallId = buildApprovalIdToCallIdMap(messages);
346
+ const pendingApprovalCallIds = findPendingApprovalCallIds(messages, approvalIdToCallId);
347
+ // Build set of "safe" tool-call IDs (have adjacent tool-result OR pending approval)
348
+ const safeCallIds = new Set(pendingApprovalCallIds);
349
+ for (let i = 0; i < messages.length; i++) {
350
+ const msg = messages[i];
351
+ if (!isRecord(msg) || msg.role !== 'assistant')
352
+ continue;
353
+ const content = msg.content;
354
+ if (!Array.isArray(content))
355
+ continue;
356
+ const callIds = new Set();
357
+ for (const part of content) {
358
+ if (isRecord(part) &&
359
+ part.type === 'tool-call' &&
360
+ typeof part.toolCallId === 'string') {
361
+ callIds.add(part.toolCallId);
362
+ }
363
+ }
364
+ if (callIds.size === 0)
365
+ continue;
366
+ for (let j = i + 1; j < messages.length; j++) {
367
+ const next = messages[j];
368
+ if (!isRecord(next) || next.role !== 'tool')
369
+ break;
370
+ const nextContent = next.content;
371
+ if (!Array.isArray(nextContent))
372
+ break;
373
+ for (const part of nextContent) {
374
+ if (isRecord(part) &&
375
+ part.type === 'tool-result' &&
376
+ typeof part.toolCallId === 'string') {
377
+ if (callIds.has(part.toolCallId)) {
378
+ safeCallIds.add(part.toolCallId);
379
+ }
380
+ }
381
+ }
382
+ }
383
+ }
384
+ // Strip unsafe tool-calls
385
+ let changed = false;
386
+ let result = messages
387
+ .map((message) => {
388
+ if (!isRecord(message) || message.role !== 'assistant')
389
+ return message;
390
+ const content = message.content;
391
+ if (!Array.isArray(content))
392
+ return message;
393
+ const filtered = content.filter((part) => {
394
+ if (!isRecord(part))
395
+ return true;
396
+ if (part.type === 'tool-call' && typeof part.toolCallId === 'string') {
397
+ const safe = safeCallIds.has(part.toolCallId);
398
+ if (!safe) {
399
+ console.warn(`[glirastes] Safety-net removing orphaned tool call: ${part.toolCallId}`);
400
+ changed = true;
401
+ }
402
+ return safe;
403
+ }
404
+ if (part.type === 'tool-approval-request' &&
405
+ typeof part.toolCallId === 'string') {
406
+ return safeCallIds.has(part.toolCallId);
407
+ }
408
+ return true;
409
+ });
410
+ if (filtered.length !== content.length)
411
+ return { ...message, content: filtered };
412
+ return message;
413
+ })
414
+ .filter((message) => {
415
+ if (!isRecord(message) || message.role !== 'assistant')
416
+ return true;
417
+ const content = message.content;
418
+ return Array.isArray(content) ? content.length > 0 : true;
419
+ });
420
+ // Remove tool messages whose results reference no surviving call
421
+ if (changed) {
422
+ result = result.filter((message) => {
423
+ if (!isRecord(message) || message.role !== 'tool')
424
+ return true;
425
+ const content = message.content;
426
+ if (!Array.isArray(content))
427
+ return true;
428
+ return content.some((part) => {
429
+ if (!isRecord(part))
430
+ return false;
431
+ if (part.type === 'tool-result' &&
432
+ typeof part.toolCallId === 'string') {
433
+ return safeCallIds.has(part.toolCallId);
434
+ }
435
+ // Keep approval-response if its linked call is a pending approval
436
+ if (part.type === 'tool-approval-response' &&
437
+ typeof part.approvalId === 'string') {
438
+ const linkedCallId = approvalIdToCallId.get(part.approvalId);
439
+ return linkedCallId
440
+ ? pendingApprovalCallIds.has(linkedCallId)
441
+ : false;
442
+ }
443
+ return true;
444
+ });
445
+ });
446
+ }
447
+ return result;
448
+ }
449
+ // ---------------------------------------------------------------------------
450
+ // Public API
451
+ // ---------------------------------------------------------------------------
452
+ /**
453
+ * Sanitize model messages by removing orphaned tool-calls and
454
+ * tool-approval-requests.
455
+ *
456
+ * A tool-call is considered orphaned when it does not have an adjacent
457
+ * `tool-result` in the immediately following tool message(s). A
458
+ * `tool-approval-response` alone does NOT count — the OpenAI provider
459
+ * silently drops these during serialization.
460
+ *
461
+ * **Exception:** Tool-calls with a `tool-approval-response` in the LAST
462
+ * message are preserved. The Vercel AI SDK's `streamText` runs
463
+ * `collectToolApprovals()` to execute approved tools before calling the
464
+ * model provider, so these are safe to keep.
465
+ *
466
+ * Call this on the output of `pruneMessages()` (from the `ai` SDK) before
467
+ * passing messages to `streamText()`. Or use {@link prepareModelMessages}
468
+ * which calls this automatically.
469
+ *
470
+ * @example
471
+ * ```ts
472
+ * import { sanitizeModelMessages } from './index.js';
473
+ *
474
+ * const raw = await convertToModelMessages(uiMessages, {
475
+ * ignoreIncompleteToolCalls: true,
476
+ * });
477
+ * const pruned = pruneMessages({ messages: raw.slice(-12), ... });
478
+ * const clean = sanitizeModelMessages(pruned);
479
+ * // clean is safe to pass to streamText()
480
+ * ```
481
+ */
482
+ export function sanitizeModelMessages(messages) {
483
+ const deduped = dedupeAssistantToolCalls(messages);
484
+ const afterPrimary = removeOrphanedToolCalls(deduped);
485
+ return stripRemainingOrphanedToolCalls(afterPrimary);
486
+ }
487
+ //# sourceMappingURL=sanitize-model-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-model-messages.js","sourceRoot":"","sources":["../../../../src/server/adapters/nextjs/sanitize-model-messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ExecuteToolOptions, ExecuteToolResult } from './types.js';
2
+ /**
3
+ * Execute a single tool from a Server Action context.
4
+ * The SDK does not perform authorization — permission checks happen in the
5
+ * backend API that each tool calls.
6
+ */
7
+ export declare function executeTool(options: ExecuteToolOptions): Promise<ExecuteToolResult>;
@@ -0,0 +1,38 @@
1
+ import { normalizeResultUiAction } from '../../core/index.js';
2
+ /**
3
+ * Execute a single tool from a Server Action context.
4
+ * The SDK does not perform authorization — permission checks happen in the
5
+ * backend API that each tool calls.
6
+ */
7
+ export async function executeTool(options) {
8
+ const { toolName, input, tools, locale = 'en-US', uiActionSchema, } = options;
9
+ const tool = tools[toolName];
10
+ if (!tool) {
11
+ return { success: false, error: `Tool "${toolName}" not found.` };
12
+ }
13
+ const context = {
14
+ currentDate: new Date(),
15
+ locale,
16
+ };
17
+ try {
18
+ const rawResult = await tool.execute(input, context);
19
+ const result = uiActionSchema
20
+ ? normalizeResultUiAction(rawResult, uiActionSchema)
21
+ : rawResult;
22
+ const record = typeof result === 'object' && result !== null
23
+ ? result
24
+ : { data: result };
25
+ return {
26
+ success: record.success !== false,
27
+ data: record,
28
+ uiAction: record.uiAction,
29
+ };
30
+ }
31
+ catch (error) {
32
+ return {
33
+ success: false,
34
+ error: error instanceof Error ? error.message : 'Unknown error',
35
+ };
36
+ }
37
+ }
38
+ //# sourceMappingURL=server-action-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-action-helper.js","sourceRoot":"","sources":["../../../../src/server/adapters/nextjs/server-action-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAG9D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA2B;IAE3B,MAAM,EACJ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,MAAM,GAAG,OAAO,EAChB,cAAc,GACf,GAAG,OAAO,CAAC;IAEZ,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,QAAQ,cAAc,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG;QACd,WAAW,EAAE,IAAI,IAAI,EAAE;QACvB,MAAM;KACP,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,cAAc;YAC3B,CAAC,CAAC,uBAAuB,CAAC,SAAS,EAAE,cAAc,CAAC;YACpD,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,MAAM,GACV,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAC3C,CAAC,CAAE,MAAkC;YACrC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAEvB,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,KAAK;YACjC,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM,CAAC,QAA+C;SACjE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC"}