@vurb/core 3.2.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 (642) hide show
  1. package/README.md +677 -0
  2. package/dist/cli/args.d.ts +26 -0
  3. package/dist/cli/args.d.ts.map +1 -0
  4. package/dist/cli/args.js +117 -0
  5. package/dist/cli/args.js.map +1 -0
  6. package/dist/cli/commands/create.d.ts +11 -0
  7. package/dist/cli/commands/create.d.ts.map +1 -0
  8. package/dist/cli/commands/create.js +121 -0
  9. package/dist/cli/commands/create.js.map +1 -0
  10. package/dist/cli/commands/deploy.d.ts +3 -0
  11. package/dist/cli/commands/deploy.d.ts.map +1 -0
  12. package/dist/cli/commands/deploy.js +268 -0
  13. package/dist/cli/commands/deploy.js.map +1 -0
  14. package/dist/cli/commands/dev.d.ts +9 -0
  15. package/dist/cli/commands/dev.d.ts.map +1 -0
  16. package/dist/cli/commands/dev.js +58 -0
  17. package/dist/cli/commands/dev.js.map +1 -0
  18. package/dist/cli/commands/lock.d.ts +5 -0
  19. package/dist/cli/commands/lock.d.ts.map +1 -0
  20. package/dist/cli/commands/lock.js +94 -0
  21. package/dist/cli/commands/lock.js.map +1 -0
  22. package/dist/cli/commands/remote.d.ts +3 -0
  23. package/dist/cli/commands/remote.d.ts.map +1 -0
  24. package/dist/cli/commands/remote.js +37 -0
  25. package/dist/cli/commands/remote.js.map +1 -0
  26. package/dist/cli/constants.d.ts +18 -0
  27. package/dist/cli/constants.d.ts.map +1 -0
  28. package/dist/cli/constants.js +95 -0
  29. package/dist/cli/constants.js.map +1 -0
  30. package/dist/cli/progress.d.ts +34 -0
  31. package/dist/cli/progress.d.ts.map +1 -0
  32. package/dist/cli/progress.js +102 -0
  33. package/dist/cli/progress.js.map +1 -0
  34. package/dist/cli/rc.d.ts +11 -0
  35. package/dist/cli/rc.d.ts.map +1 -0
  36. package/dist/cli/rc.js +75 -0
  37. package/dist/cli/rc.js.map +1 -0
  38. package/dist/cli/registry.d.ts +25 -0
  39. package/dist/cli/registry.d.ts.map +1 -0
  40. package/dist/cli/registry.js +86 -0
  41. package/dist/cli/registry.js.map +1 -0
  42. package/dist/cli/scaffold.d.ts +10 -0
  43. package/dist/cli/scaffold.d.ts.map +1 -0
  44. package/dist/cli/scaffold.js +105 -0
  45. package/dist/cli/scaffold.js.map +1 -0
  46. package/dist/cli/templates/config.d.ts +14 -0
  47. package/dist/cli/templates/config.d.ts.map +1 -0
  48. package/dist/cli/templates/config.js +133 -0
  49. package/dist/cli/templates/config.js.map +1 -0
  50. package/dist/cli/templates/constants.d.ts +9 -0
  51. package/dist/cli/templates/constants.d.ts.map +1 -0
  52. package/dist/cli/templates/constants.js +9 -0
  53. package/dist/cli/templates/constants.js.map +1 -0
  54. package/dist/cli/templates/core.d.ts +14 -0
  55. package/dist/cli/templates/core.d.ts.map +1 -0
  56. package/dist/cli/templates/core.js +186 -0
  57. package/dist/cli/templates/core.js.map +1 -0
  58. package/dist/cli/templates/cursor.d.ts +8 -0
  59. package/dist/cli/templates/cursor.d.ts.map +1 -0
  60. package/dist/cli/templates/cursor.js +13 -0
  61. package/dist/cli/templates/cursor.js.map +1 -0
  62. package/dist/cli/templates/index.d.ts +17 -0
  63. package/dist/cli/templates/index.d.ts.map +1 -0
  64. package/dist/cli/templates/index.js +27 -0
  65. package/dist/cli/templates/index.js.map +1 -0
  66. package/dist/cli/templates/middleware.d.ts +7 -0
  67. package/dist/cli/templates/middleware.d.ts.map +1 -0
  68. package/dist/cli/templates/middleware.js +34 -0
  69. package/dist/cli/templates/middleware.js.map +1 -0
  70. package/dist/cli/templates/presenter.d.ts +7 -0
  71. package/dist/cli/templates/presenter.d.ts.map +1 -0
  72. package/dist/cli/templates/presenter.js +46 -0
  73. package/dist/cli/templates/presenter.js.map +1 -0
  74. package/dist/cli/templates/prompt.d.ts +7 -0
  75. package/dist/cli/templates/prompt.d.ts.map +1 -0
  76. package/dist/cli/templates/prompt.js +42 -0
  77. package/dist/cli/templates/prompt.js.map +1 -0
  78. package/dist/cli/templates/readme.d.ts +8 -0
  79. package/dist/cli/templates/readme.d.ts.map +1 -0
  80. package/dist/cli/templates/readme.js +173 -0
  81. package/dist/cli/templates/readme.js.map +1 -0
  82. package/dist/cli/templates/testing.d.ts +11 -0
  83. package/dist/cli/templates/testing.d.ts.map +1 -0
  84. package/dist/cli/templates/testing.js +101 -0
  85. package/dist/cli/templates/testing.js.map +1 -0
  86. package/dist/cli/templates/tools.d.ts +13 -0
  87. package/dist/cli/templates/tools.d.ts.map +1 -0
  88. package/dist/cli/templates/tools.js +63 -0
  89. package/dist/cli/templates/tools.js.map +1 -0
  90. package/dist/cli/templates/vectors/database.d.ts +9 -0
  91. package/dist/cli/templates/vectors/database.d.ts.map +1 -0
  92. package/dist/cli/templates/vectors/database.js +82 -0
  93. package/dist/cli/templates/vectors/database.js.map +1 -0
  94. package/dist/cli/templates/vectors/index.d.ts +9 -0
  95. package/dist/cli/templates/vectors/index.d.ts.map +1 -0
  96. package/dist/cli/templates/vectors/index.js +9 -0
  97. package/dist/cli/templates/vectors/index.js.map +1 -0
  98. package/dist/cli/templates/vectors/oauth.d.ts +10 -0
  99. package/dist/cli/templates/vectors/oauth.d.ts.map +1 -0
  100. package/dist/cli/templates/vectors/oauth.js +76 -0
  101. package/dist/cli/templates/vectors/oauth.js.map +1 -0
  102. package/dist/cli/templates/vectors/openapi.d.ts +10 -0
  103. package/dist/cli/templates/vectors/openapi.d.ts.map +1 -0
  104. package/dist/cli/templates/vectors/openapi.js +106 -0
  105. package/dist/cli/templates/vectors/openapi.js.map +1 -0
  106. package/dist/cli/templates/vectors/workflow.d.ts +7 -0
  107. package/dist/cli/templates/vectors/workflow.d.ts.map +1 -0
  108. package/dist/cli/templates/vectors/workflow.js +49 -0
  109. package/dist/cli/templates/vectors/workflow.js.map +1 -0
  110. package/dist/cli/types.d.ts +36 -0
  111. package/dist/cli/types.d.ts.map +1 -0
  112. package/dist/cli/types.js +10 -0
  113. package/dist/cli/types.js.map +1 -0
  114. package/dist/cli/utils.d.ts +27 -0
  115. package/dist/cli/utils.d.ts.map +1 -0
  116. package/dist/cli/utils.js +73 -0
  117. package/dist/cli/utils.js.map +1 -0
  118. package/dist/cli/vurb.d.ts +15 -0
  119. package/dist/cli/vurb.d.ts.map +1 -0
  120. package/dist/cli/vurb.js +87 -0
  121. package/dist/cli/vurb.js.map +1 -0
  122. package/dist/client/InferRouter.d.ts +92 -0
  123. package/dist/client/InferRouter.d.ts.map +1 -0
  124. package/dist/client/InferRouter.js +31 -0
  125. package/dist/client/InferRouter.js.map +1 -0
  126. package/dist/client/VurbClient.d.ts +282 -0
  127. package/dist/client/VurbClient.d.ts.map +1 -0
  128. package/dist/client/VurbClient.js +287 -0
  129. package/dist/client/VurbClient.js.map +1 -0
  130. package/dist/client/createTypedRegistry.d.ts +25 -0
  131. package/dist/client/createTypedRegistry.d.ts.map +1 -0
  132. package/dist/client/createTypedRegistry.js +74 -0
  133. package/dist/client/createTypedRegistry.js.map +1 -0
  134. package/dist/client/index.d.ts +6 -0
  135. package/dist/client/index.d.ts.map +1 -0
  136. package/dist/client/index.js +4 -0
  137. package/dist/client/index.js.map +1 -0
  138. package/dist/converters/ConverterBase.d.ts +68 -0
  139. package/dist/converters/ConverterBase.d.ts.map +1 -0
  140. package/dist/converters/ConverterBase.js +62 -0
  141. package/dist/converters/ConverterBase.js.map +1 -0
  142. package/dist/converters/GroupConverter.d.ts +33 -0
  143. package/dist/converters/GroupConverter.d.ts.map +1 -0
  144. package/dist/converters/GroupConverter.js +26 -0
  145. package/dist/converters/GroupConverter.js.map +1 -0
  146. package/dist/converters/PromptConverter.d.ts +33 -0
  147. package/dist/converters/PromptConverter.d.ts.map +1 -0
  148. package/dist/converters/PromptConverter.js +26 -0
  149. package/dist/converters/PromptConverter.js.map +1 -0
  150. package/dist/converters/ResourceConverter.d.ts +35 -0
  151. package/dist/converters/ResourceConverter.d.ts.map +1 -0
  152. package/dist/converters/ResourceConverter.js +28 -0
  153. package/dist/converters/ResourceConverter.js.map +1 -0
  154. package/dist/converters/ToolAnnotationsConverter.d.ts +33 -0
  155. package/dist/converters/ToolAnnotationsConverter.d.ts.map +1 -0
  156. package/dist/converters/ToolAnnotationsConverter.js +26 -0
  157. package/dist/converters/ToolAnnotationsConverter.js.map +1 -0
  158. package/dist/converters/ToolConverter.d.ts +35 -0
  159. package/dist/converters/ToolConverter.d.ts.map +1 -0
  160. package/dist/converters/ToolConverter.js +28 -0
  161. package/dist/converters/ToolConverter.js.map +1 -0
  162. package/dist/converters/index.d.ts +7 -0
  163. package/dist/converters/index.d.ts.map +1 -0
  164. package/dist/converters/index.js +7 -0
  165. package/dist/converters/index.js.map +1 -0
  166. package/dist/core/StandardSchema.d.ts +178 -0
  167. package/dist/core/StandardSchema.d.ts.map +1 -0
  168. package/dist/core/StandardSchema.js +174 -0
  169. package/dist/core/StandardSchema.js.map +1 -0
  170. package/dist/core/builder/ActionGroupBuilder.d.ts +208 -0
  171. package/dist/core/builder/ActionGroupBuilder.d.ts.map +1 -0
  172. package/dist/core/builder/ActionGroupBuilder.js +193 -0
  173. package/dist/core/builder/ActionGroupBuilder.js.map +1 -0
  174. package/dist/core/builder/ErrorBuilder.d.ts +59 -0
  175. package/dist/core/builder/ErrorBuilder.d.ts.map +1 -0
  176. package/dist/core/builder/ErrorBuilder.js +99 -0
  177. package/dist/core/builder/ErrorBuilder.js.map +1 -0
  178. package/dist/core/builder/FluentRouter.d.ts +96 -0
  179. package/dist/core/builder/FluentRouter.d.ts.map +1 -0
  180. package/dist/core/builder/FluentRouter.js +116 -0
  181. package/dist/core/builder/FluentRouter.js.map +1 -0
  182. package/dist/core/builder/FluentSchemaHelpers.d.ts +237 -0
  183. package/dist/core/builder/FluentSchemaHelpers.d.ts.map +1 -0
  184. package/dist/core/builder/FluentSchemaHelpers.js +227 -0
  185. package/dist/core/builder/FluentSchemaHelpers.js.map +1 -0
  186. package/dist/core/builder/FluentToolBuilder.d.ts +419 -0
  187. package/dist/core/builder/FluentToolBuilder.d.ts.map +1 -0
  188. package/dist/core/builder/FluentToolBuilder.js +643 -0
  189. package/dist/core/builder/FluentToolBuilder.js.map +1 -0
  190. package/dist/core/builder/GroupedToolBuilder.d.ts +832 -0
  191. package/dist/core/builder/GroupedToolBuilder.d.ts.map +1 -0
  192. package/dist/core/builder/GroupedToolBuilder.js +1306 -0
  193. package/dist/core/builder/GroupedToolBuilder.js.map +1 -0
  194. package/dist/core/builder/ParamDescriptors.d.ts +142 -0
  195. package/dist/core/builder/ParamDescriptors.d.ts.map +1 -0
  196. package/dist/core/builder/ParamDescriptors.js +164 -0
  197. package/dist/core/builder/ParamDescriptors.js.map +1 -0
  198. package/dist/core/builder/ToolDefinitionCompiler.d.ts +37 -0
  199. package/dist/core/builder/ToolDefinitionCompiler.d.ts.map +1 -0
  200. package/dist/core/builder/ToolDefinitionCompiler.js +72 -0
  201. package/dist/core/builder/ToolDefinitionCompiler.js.map +1 -0
  202. package/dist/core/builder/defineTool.d.ts +180 -0
  203. package/dist/core/builder/defineTool.d.ts.map +1 -0
  204. package/dist/core/builder/defineTool.js +164 -0
  205. package/dist/core/builder/defineTool.js.map +1 -0
  206. package/dist/core/builder/index.d.ts +13 -0
  207. package/dist/core/builder/index.d.ts.map +1 -0
  208. package/dist/core/builder/index.js +13 -0
  209. package/dist/core/builder/index.js.map +1 -0
  210. package/dist/core/createGroup.d.ts +140 -0
  211. package/dist/core/createGroup.d.ts.map +1 -0
  212. package/dist/core/createGroup.js +144 -0
  213. package/dist/core/createGroup.js.map +1 -0
  214. package/dist/core/execution/ConcurrencyGuard.d.ts +103 -0
  215. package/dist/core/execution/ConcurrencyGuard.d.ts.map +1 -0
  216. package/dist/core/execution/ConcurrencyGuard.js +147 -0
  217. package/dist/core/execution/ConcurrencyGuard.js.map +1 -0
  218. package/dist/core/execution/EgressGuard.d.ts +72 -0
  219. package/dist/core/execution/EgressGuard.d.ts.map +1 -0
  220. package/dist/core/execution/EgressGuard.js +163 -0
  221. package/dist/core/execution/EgressGuard.js.map +1 -0
  222. package/dist/core/execution/ExecutionPipeline.d.ts +67 -0
  223. package/dist/core/execution/ExecutionPipeline.d.ts.map +1 -0
  224. package/dist/core/execution/ExecutionPipeline.js +176 -0
  225. package/dist/core/execution/ExecutionPipeline.js.map +1 -0
  226. package/dist/core/execution/MiddlewareCompiler.d.ts +35 -0
  227. package/dist/core/execution/MiddlewareCompiler.d.ts.map +1 -0
  228. package/dist/core/execution/MiddlewareCompiler.js +111 -0
  229. package/dist/core/execution/MiddlewareCompiler.js.map +1 -0
  230. package/dist/core/execution/MutationSerializer.d.ts +78 -0
  231. package/dist/core/execution/MutationSerializer.d.ts.map +1 -0
  232. package/dist/core/execution/MutationSerializer.js +106 -0
  233. package/dist/core/execution/MutationSerializer.js.map +1 -0
  234. package/dist/core/execution/PipelineHooks.d.ts +46 -0
  235. package/dist/core/execution/PipelineHooks.d.ts.map +1 -0
  236. package/dist/core/execution/PipelineHooks.js +66 -0
  237. package/dist/core/execution/PipelineHooks.js.map +1 -0
  238. package/dist/core/execution/ProgressHelper.d.ts +67 -0
  239. package/dist/core/execution/ProgressHelper.d.ts.map +1 -0
  240. package/dist/core/execution/ProgressHelper.js +59 -0
  241. package/dist/core/execution/ProgressHelper.js.map +1 -0
  242. package/dist/core/execution/ValidationErrorFormatter.d.ts +34 -0
  243. package/dist/core/execution/ValidationErrorFormatter.d.ts.map +1 -0
  244. package/dist/core/execution/ValidationErrorFormatter.js +193 -0
  245. package/dist/core/execution/ValidationErrorFormatter.js.map +1 -0
  246. package/dist/core/execution/index.d.ts +9 -0
  247. package/dist/core/execution/index.d.ts.map +1 -0
  248. package/dist/core/execution/index.js +9 -0
  249. package/dist/core/execution/index.js.map +1 -0
  250. package/dist/core/index.d.ts +34 -0
  251. package/dist/core/index.d.ts.map +1 -0
  252. package/dist/core/index.js +29 -0
  253. package/dist/core/index.js.map +1 -0
  254. package/dist/core/initVurb.d.ts +295 -0
  255. package/dist/core/initVurb.d.ts.map +1 -0
  256. package/dist/core/initVurb.js +171 -0
  257. package/dist/core/initVurb.js.map +1 -0
  258. package/dist/core/middleware/ContextDerivation.d.ts +124 -0
  259. package/dist/core/middleware/ContextDerivation.d.ts.map +1 -0
  260. package/dist/core/middleware/ContextDerivation.js +117 -0
  261. package/dist/core/middleware/ContextDerivation.js.map +1 -0
  262. package/dist/core/middleware/index.d.ts +4 -0
  263. package/dist/core/middleware/index.d.ts.map +1 -0
  264. package/dist/core/middleware/index.js +3 -0
  265. package/dist/core/middleware/index.js.map +1 -0
  266. package/dist/core/registry/ToolFilterEngine.d.ts +27 -0
  267. package/dist/core/registry/ToolFilterEngine.d.ts.map +1 -0
  268. package/dist/core/registry/ToolFilterEngine.js +45 -0
  269. package/dist/core/registry/ToolFilterEngine.js.map +1 -0
  270. package/dist/core/registry/ToolRegistry.d.ts +259 -0
  271. package/dist/core/registry/ToolRegistry.d.ts.map +1 -0
  272. package/dist/core/registry/ToolRegistry.js +343 -0
  273. package/dist/core/registry/ToolRegistry.js.map +1 -0
  274. package/dist/core/registry/index.d.ts +4 -0
  275. package/dist/core/registry/index.d.ts.map +1 -0
  276. package/dist/core/registry/index.js +3 -0
  277. package/dist/core/registry/index.js.map +1 -0
  278. package/dist/core/response.d.ts +289 -0
  279. package/dist/core/response.d.ts.map +1 -0
  280. package/dist/core/response.js +286 -0
  281. package/dist/core/response.js.map +1 -0
  282. package/dist/core/result.d.ts +93 -0
  283. package/dist/core/result.d.ts.map +1 -0
  284. package/dist/core/result.js +66 -0
  285. package/dist/core/result.js.map +1 -0
  286. package/dist/core/schema/AnnotationAggregator.d.ts +11 -0
  287. package/dist/core/schema/AnnotationAggregator.d.ts.map +1 -0
  288. package/dist/core/schema/AnnotationAggregator.js +40 -0
  289. package/dist/core/schema/AnnotationAggregator.js.map +1 -0
  290. package/dist/core/schema/DescriptionGenerator.d.ts +12 -0
  291. package/dist/core/schema/DescriptionGenerator.d.ts.map +1 -0
  292. package/dist/core/schema/DescriptionGenerator.js +81 -0
  293. package/dist/core/schema/DescriptionGenerator.js.map +1 -0
  294. package/dist/core/schema/SchemaGenerator.d.ts +15 -0
  295. package/dist/core/schema/SchemaGenerator.d.ts.map +1 -0
  296. package/dist/core/schema/SchemaGenerator.js +192 -0
  297. package/dist/core/schema/SchemaGenerator.js.map +1 -0
  298. package/dist/core/schema/SchemaUtils.d.ts +26 -0
  299. package/dist/core/schema/SchemaUtils.d.ts.map +1 -0
  300. package/dist/core/schema/SchemaUtils.js +85 -0
  301. package/dist/core/schema/SchemaUtils.js.map +1 -0
  302. package/dist/core/schema/ToonDescriptionGenerator.d.ts +3 -0
  303. package/dist/core/schema/ToonDescriptionGenerator.d.ts.map +1 -0
  304. package/dist/core/schema/ToonDescriptionGenerator.js +65 -0
  305. package/dist/core/schema/ToonDescriptionGenerator.js.map +1 -0
  306. package/dist/core/schema/index.d.ts +7 -0
  307. package/dist/core/schema/index.d.ts.map +1 -0
  308. package/dist/core/schema/index.js +7 -0
  309. package/dist/core/schema/index.js.map +1 -0
  310. package/dist/core/serialization/JsonSerializer.d.ts +71 -0
  311. package/dist/core/serialization/JsonSerializer.d.ts.map +1 -0
  312. package/dist/core/serialization/JsonSerializer.js +192 -0
  313. package/dist/core/serialization/JsonSerializer.js.map +1 -0
  314. package/dist/core/serialization/index.d.ts +7 -0
  315. package/dist/core/serialization/index.d.ts.map +1 -0
  316. package/dist/core/serialization/index.js +7 -0
  317. package/dist/core/serialization/index.js.map +1 -0
  318. package/dist/core/types.d.ts +303 -0
  319. package/dist/core/types.d.ts.map +1 -0
  320. package/dist/core/types.js +17 -0
  321. package/dist/core/types.js.map +1 -0
  322. package/dist/domain/Annotations.d.ts +42 -0
  323. package/dist/domain/Annotations.d.ts.map +1 -0
  324. package/dist/domain/Annotations.js +16 -0
  325. package/dist/domain/Annotations.js.map +1 -0
  326. package/dist/domain/BaseModel.d.ts +50 -0
  327. package/dist/domain/BaseModel.d.ts.map +1 -0
  328. package/dist/domain/BaseModel.js +41 -0
  329. package/dist/domain/BaseModel.js.map +1 -0
  330. package/dist/domain/Group.d.ts +99 -0
  331. package/dist/domain/Group.d.ts.map +1 -0
  332. package/dist/domain/Group.js +172 -0
  333. package/dist/domain/Group.js.map +1 -0
  334. package/dist/domain/GroupItem.d.ts +46 -0
  335. package/dist/domain/GroupItem.d.ts.map +1 -0
  336. package/dist/domain/GroupItem.js +58 -0
  337. package/dist/domain/GroupItem.js.map +1 -0
  338. package/dist/domain/Icon.d.ts +41 -0
  339. package/dist/domain/Icon.d.ts.map +1 -0
  340. package/dist/domain/Icon.js +15 -0
  341. package/dist/domain/Icon.js.map +1 -0
  342. package/dist/domain/Prompt.d.ts +49 -0
  343. package/dist/domain/Prompt.d.ts.map +1 -0
  344. package/dist/domain/Prompt.js +59 -0
  345. package/dist/domain/Prompt.js.map +1 -0
  346. package/dist/domain/PromptArgument.d.ts +23 -0
  347. package/dist/domain/PromptArgument.d.ts.map +1 -0
  348. package/dist/domain/PromptArgument.js +27 -0
  349. package/dist/domain/PromptArgument.js.map +1 -0
  350. package/dist/domain/Resource.d.ts +37 -0
  351. package/dist/domain/Resource.d.ts.map +1 -0
  352. package/dist/domain/Resource.js +39 -0
  353. package/dist/domain/Resource.js.map +1 -0
  354. package/dist/domain/Role.d.ts +23 -0
  355. package/dist/domain/Role.d.ts.map +1 -0
  356. package/dist/domain/Role.js +24 -0
  357. package/dist/domain/Role.js.map +1 -0
  358. package/dist/domain/Tool.d.ts +39 -0
  359. package/dist/domain/Tool.d.ts.map +1 -0
  360. package/dist/domain/Tool.js +41 -0
  361. package/dist/domain/Tool.js.map +1 -0
  362. package/dist/domain/ToolAnnotations.d.ts +48 -0
  363. package/dist/domain/ToolAnnotations.d.ts.map +1 -0
  364. package/dist/domain/ToolAnnotations.js +15 -0
  365. package/dist/domain/ToolAnnotations.js.map +1 -0
  366. package/dist/domain/index.d.ts +16 -0
  367. package/dist/domain/index.d.ts.map +1 -0
  368. package/dist/domain/index.js +13 -0
  369. package/dist/domain/index.js.map +1 -0
  370. package/dist/domain/utils.d.ts +6 -0
  371. package/dist/domain/utils.d.ts.map +1 -0
  372. package/dist/domain/utils.js +12 -0
  373. package/dist/domain/utils.js.map +1 -0
  374. package/dist/edge-stub.d.ts +73 -0
  375. package/dist/edge-stub.d.ts.map +1 -0
  376. package/dist/edge-stub.js +83 -0
  377. package/dist/edge-stub.js.map +1 -0
  378. package/dist/exposition/ExpositionCompiler.d.ts +66 -0
  379. package/dist/exposition/ExpositionCompiler.d.ts.map +1 -0
  380. package/dist/exposition/ExpositionCompiler.js +279 -0
  381. package/dist/exposition/ExpositionCompiler.js.map +1 -0
  382. package/dist/exposition/index.d.ts +4 -0
  383. package/dist/exposition/index.d.ts.map +1 -0
  384. package/dist/exposition/index.js +2 -0
  385. package/dist/exposition/index.js.map +1 -0
  386. package/dist/exposition/types.d.ts +58 -0
  387. package/dist/exposition/types.d.ts.map +1 -0
  388. package/dist/exposition/types.js +11 -0
  389. package/dist/exposition/types.js.map +1 -0
  390. package/dist/fsm/StateMachineGate.d.ts +294 -0
  391. package/dist/fsm/StateMachineGate.d.ts.map +1 -0
  392. package/dist/fsm/StateMachineGate.js +400 -0
  393. package/dist/fsm/StateMachineGate.js.map +1 -0
  394. package/dist/index.d.ts +148 -0
  395. package/dist/index.d.ts.map +1 -0
  396. package/dist/index.js +112 -0
  397. package/dist/index.js.map +1 -0
  398. package/dist/introspection/BehaviorDigest.d.ts +112 -0
  399. package/dist/introspection/BehaviorDigest.d.ts.map +1 -0
  400. package/dist/introspection/BehaviorDigest.js +149 -0
  401. package/dist/introspection/BehaviorDigest.js.map +1 -0
  402. package/dist/introspection/CapabilityLockfile.d.ts +261 -0
  403. package/dist/introspection/CapabilityLockfile.d.ts.map +1 -0
  404. package/dist/introspection/CapabilityLockfile.js +395 -0
  405. package/dist/introspection/CapabilityLockfile.js.map +1 -0
  406. package/dist/introspection/ContractAwareSelfHealing.d.ts +90 -0
  407. package/dist/introspection/ContractAwareSelfHealing.d.ts.map +1 -0
  408. package/dist/introspection/ContractAwareSelfHealing.js +132 -0
  409. package/dist/introspection/ContractAwareSelfHealing.js.map +1 -0
  410. package/dist/introspection/ContractDiff.d.ts +91 -0
  411. package/dist/introspection/ContractDiff.d.ts.map +1 -0
  412. package/dist/introspection/ContractDiff.js +466 -0
  413. package/dist/introspection/ContractDiff.js.map +1 -0
  414. package/dist/introspection/CryptoAttestation.d.ts +143 -0
  415. package/dist/introspection/CryptoAttestation.d.ts.map +1 -0
  416. package/dist/introspection/CryptoAttestation.js +192 -0
  417. package/dist/introspection/CryptoAttestation.js.map +1 -0
  418. package/dist/introspection/EntitlementScanner.d.ts +177 -0
  419. package/dist/introspection/EntitlementScanner.d.ts.map +1 -0
  420. package/dist/introspection/EntitlementScanner.js +459 -0
  421. package/dist/introspection/EntitlementScanner.js.map +1 -0
  422. package/dist/introspection/GovernanceObserver.d.ts +88 -0
  423. package/dist/introspection/GovernanceObserver.d.ts.map +1 -0
  424. package/dist/introspection/GovernanceObserver.js +136 -0
  425. package/dist/introspection/GovernanceObserver.js.map +1 -0
  426. package/dist/introspection/IntrospectionResource.d.ts +20 -0
  427. package/dist/introspection/IntrospectionResource.d.ts.map +1 -0
  428. package/dist/introspection/IntrospectionResource.js +112 -0
  429. package/dist/introspection/IntrospectionResource.js.map +1 -0
  430. package/dist/introspection/ManifestCompiler.d.ts +33 -0
  431. package/dist/introspection/ManifestCompiler.d.ts.map +1 -0
  432. package/dist/introspection/ManifestCompiler.js +88 -0
  433. package/dist/introspection/ManifestCompiler.js.map +1 -0
  434. package/dist/introspection/SemanticProbe.d.ts +207 -0
  435. package/dist/introspection/SemanticProbe.d.ts.map +1 -0
  436. package/dist/introspection/SemanticProbe.js +274 -0
  437. package/dist/introspection/SemanticProbe.js.map +1 -0
  438. package/dist/introspection/TokenEconomics.d.ts +210 -0
  439. package/dist/introspection/TokenEconomics.d.ts.map +1 -0
  440. package/dist/introspection/TokenEconomics.js +292 -0
  441. package/dist/introspection/TokenEconomics.js.map +1 -0
  442. package/dist/introspection/ToolContract.d.ts +161 -0
  443. package/dist/introspection/ToolContract.d.ts.map +1 -0
  444. package/dist/introspection/ToolContract.js +218 -0
  445. package/dist/introspection/ToolContract.js.map +1 -0
  446. package/dist/introspection/canonicalize.d.ts +35 -0
  447. package/dist/introspection/canonicalize.d.ts.map +1 -0
  448. package/dist/introspection/canonicalize.js +72 -0
  449. package/dist/introspection/canonicalize.js.map +1 -0
  450. package/dist/introspection/index.d.ts +26 -0
  451. package/dist/introspection/index.d.ts.map +1 -0
  452. package/dist/introspection/index.js +24 -0
  453. package/dist/introspection/index.js.map +1 -0
  454. package/dist/introspection/types.d.ts +120 -0
  455. package/dist/introspection/types.d.ts.map +1 -0
  456. package/dist/introspection/types.js +13 -0
  457. package/dist/introspection/types.js.map +1 -0
  458. package/dist/observability/DebugObserver.d.ts +185 -0
  459. package/dist/observability/DebugObserver.d.ts.map +1 -0
  460. package/dist/observability/DebugObserver.js +102 -0
  461. package/dist/observability/DebugObserver.js.map +1 -0
  462. package/dist/observability/TelemetryBus.d.ts +88 -0
  463. package/dist/observability/TelemetryBus.d.ts.map +1 -0
  464. package/dist/observability/TelemetryBus.js +463 -0
  465. package/dist/observability/TelemetryBus.js.map +1 -0
  466. package/dist/observability/TelemetryEvent.d.ts +177 -0
  467. package/dist/observability/TelemetryEvent.d.ts.map +1 -0
  468. package/dist/observability/TelemetryEvent.js +2 -0
  469. package/dist/observability/TelemetryEvent.js.map +1 -0
  470. package/dist/observability/Tracing.d.ts +155 -0
  471. package/dist/observability/Tracing.d.ts.map +1 -0
  472. package/dist/observability/Tracing.js +67 -0
  473. package/dist/observability/Tracing.js.map +1 -0
  474. package/dist/observability/index.d.ts +13 -0
  475. package/dist/observability/index.d.ts.map +1 -0
  476. package/dist/observability/index.js +12 -0
  477. package/dist/observability/index.js.map +1 -0
  478. package/dist/presenter/PostProcessor.d.ts +52 -0
  479. package/dist/presenter/PostProcessor.d.ts.map +1 -0
  480. package/dist/presenter/PostProcessor.js +148 -0
  481. package/dist/presenter/PostProcessor.js.map +1 -0
  482. package/dist/presenter/Presenter.d.ts +575 -0
  483. package/dist/presenter/Presenter.d.ts.map +1 -0
  484. package/dist/presenter/Presenter.js +768 -0
  485. package/dist/presenter/Presenter.js.map +1 -0
  486. package/dist/presenter/PresenterValidationError.d.ts +42 -0
  487. package/dist/presenter/PresenterValidationError.d.ts.map +1 -0
  488. package/dist/presenter/PresenterValidationError.js +55 -0
  489. package/dist/presenter/PresenterValidationError.js.map +1 -0
  490. package/dist/presenter/RedactEngine.d.ts +110 -0
  491. package/dist/presenter/RedactEngine.d.ts.map +1 -0
  492. package/dist/presenter/RedactEngine.js +128 -0
  493. package/dist/presenter/RedactEngine.js.map +1 -0
  494. package/dist/presenter/ResponseBuilder.d.ts +262 -0
  495. package/dist/presenter/ResponseBuilder.d.ts.map +1 -0
  496. package/dist/presenter/ResponseBuilder.js +374 -0
  497. package/dist/presenter/ResponseBuilder.js.map +1 -0
  498. package/dist/presenter/SelectUtils.d.ts +78 -0
  499. package/dist/presenter/SelectUtils.d.ts.map +1 -0
  500. package/dist/presenter/SelectUtils.js +141 -0
  501. package/dist/presenter/SelectUtils.js.map +1 -0
  502. package/dist/presenter/ZodDescriptionExtractor.d.ts +54 -0
  503. package/dist/presenter/ZodDescriptionExtractor.d.ts.map +1 -0
  504. package/dist/presenter/ZodDescriptionExtractor.js +131 -0
  505. package/dist/presenter/ZodDescriptionExtractor.js.map +1 -0
  506. package/dist/presenter/definePresenter.d.ts +193 -0
  507. package/dist/presenter/definePresenter.d.ts.map +1 -0
  508. package/dist/presenter/definePresenter.js +99 -0
  509. package/dist/presenter/definePresenter.js.map +1 -0
  510. package/dist/presenter/index.d.ts +21 -0
  511. package/dist/presenter/index.d.ts.map +1 -0
  512. package/dist/presenter/index.js +28 -0
  513. package/dist/presenter/index.js.map +1 -0
  514. package/dist/presenter/suggest.d.ts +39 -0
  515. package/dist/presenter/suggest.d.ts.map +1 -0
  516. package/dist/presenter/suggest.js +41 -0
  517. package/dist/presenter/suggest.js.map +1 -0
  518. package/dist/presenter/typeHelpers.d.ts +147 -0
  519. package/dist/presenter/typeHelpers.d.ts.map +1 -0
  520. package/dist/presenter/typeHelpers.js +152 -0
  521. package/dist/presenter/typeHelpers.js.map +1 -0
  522. package/dist/presenter/ui.d.ts +205 -0
  523. package/dist/presenter/ui.d.ts.map +1 -0
  524. package/dist/presenter/ui.js +222 -0
  525. package/dist/presenter/ui.js.map +1 -0
  526. package/dist/prompt/CursorCodec.d.ts +43 -0
  527. package/dist/prompt/CursorCodec.d.ts.map +1 -0
  528. package/dist/prompt/CursorCodec.js +171 -0
  529. package/dist/prompt/CursorCodec.js.map +1 -0
  530. package/dist/prompt/FluentPromptBuilder.d.ts +155 -0
  531. package/dist/prompt/FluentPromptBuilder.d.ts.map +1 -0
  532. package/dist/prompt/FluentPromptBuilder.js +195 -0
  533. package/dist/prompt/FluentPromptBuilder.js.map +1 -0
  534. package/dist/prompt/HydrationSandbox.d.ts +55 -0
  535. package/dist/prompt/HydrationSandbox.d.ts.map +1 -0
  536. package/dist/prompt/HydrationSandbox.js +122 -0
  537. package/dist/prompt/HydrationSandbox.js.map +1 -0
  538. package/dist/prompt/PromptExecutionPipeline.d.ts +61 -0
  539. package/dist/prompt/PromptExecutionPipeline.d.ts.map +1 -0
  540. package/dist/prompt/PromptExecutionPipeline.js +177 -0
  541. package/dist/prompt/PromptExecutionPipeline.js.map +1 -0
  542. package/dist/prompt/PromptMessage.d.ts +133 -0
  543. package/dist/prompt/PromptMessage.d.ts.map +1 -0
  544. package/dist/prompt/PromptMessage.js +182 -0
  545. package/dist/prompt/PromptMessage.js.map +1 -0
  546. package/dist/prompt/PromptRegistry.d.ts +236 -0
  547. package/dist/prompt/PromptRegistry.d.ts.map +1 -0
  548. package/dist/prompt/PromptRegistry.js +399 -0
  549. package/dist/prompt/PromptRegistry.js.map +1 -0
  550. package/dist/prompt/definePrompt.d.ts +111 -0
  551. package/dist/prompt/definePrompt.d.ts.map +1 -0
  552. package/dist/prompt/definePrompt.js +130 -0
  553. package/dist/prompt/definePrompt.js.map +1 -0
  554. package/dist/prompt/index.d.ts +12 -0
  555. package/dist/prompt/index.d.ts.map +1 -0
  556. package/dist/prompt/index.js +13 -0
  557. package/dist/prompt/index.js.map +1 -0
  558. package/dist/prompt/types.d.ts +425 -0
  559. package/dist/prompt/types.d.ts.map +1 -0
  560. package/dist/prompt/types.js +19 -0
  561. package/dist/prompt/types.js.map +1 -0
  562. package/dist/sandbox/SandboxEngine.d.ts +225 -0
  563. package/dist/sandbox/SandboxEngine.d.ts.map +1 -0
  564. package/dist/sandbox/SandboxEngine.js +437 -0
  565. package/dist/sandbox/SandboxEngine.js.map +1 -0
  566. package/dist/sandbox/SandboxGuard.d.ts +47 -0
  567. package/dist/sandbox/SandboxGuard.d.ts.map +1 -0
  568. package/dist/sandbox/SandboxGuard.js +127 -0
  569. package/dist/sandbox/SandboxGuard.js.map +1 -0
  570. package/dist/sandbox/index.d.ts +23 -0
  571. package/dist/sandbox/index.d.ts.map +1 -0
  572. package/dist/sandbox/index.js +26 -0
  573. package/dist/sandbox/index.js.map +1 -0
  574. package/dist/server/DevServer.d.ts +120 -0
  575. package/dist/server/DevServer.d.ts.map +1 -0
  576. package/dist/server/DevServer.js +252 -0
  577. package/dist/server/DevServer.js.map +1 -0
  578. package/dist/server/ServerAttachment.d.ts +354 -0
  579. package/dist/server/ServerAttachment.d.ts.map +1 -0
  580. package/dist/server/ServerAttachment.js +709 -0
  581. package/dist/server/ServerAttachment.js.map +1 -0
  582. package/dist/server/ServerResolver.d.ts +24 -0
  583. package/dist/server/ServerResolver.d.ts.map +1 -0
  584. package/dist/server/ServerResolver.js +50 -0
  585. package/dist/server/ServerResolver.js.map +1 -0
  586. package/dist/server/autoDiscover.d.ts +75 -0
  587. package/dist/server/autoDiscover.d.ts.map +1 -0
  588. package/dist/server/autoDiscover.js +164 -0
  589. package/dist/server/autoDiscover.js.map +1 -0
  590. package/dist/server/index.d.ts +12 -0
  591. package/dist/server/index.d.ts.map +1 -0
  592. package/dist/server/index.js +11 -0
  593. package/dist/server/index.js.map +1 -0
  594. package/dist/server/startServer.d.ts +81 -0
  595. package/dist/server/startServer.d.ts.map +1 -0
  596. package/dist/server/startServer.js +143 -0
  597. package/dist/server/startServer.js.map +1 -0
  598. package/dist/state-sync/CausalEngine.d.ts +28 -0
  599. package/dist/state-sync/CausalEngine.d.ts.map +1 -0
  600. package/dist/state-sync/CausalEngine.js +17 -0
  601. package/dist/state-sync/CausalEngine.js.map +1 -0
  602. package/dist/state-sync/DescriptionDecorator.d.ts +31 -0
  603. package/dist/state-sync/DescriptionDecorator.d.ts.map +1 -0
  604. package/dist/state-sync/DescriptionDecorator.js +38 -0
  605. package/dist/state-sync/DescriptionDecorator.js.map +1 -0
  606. package/dist/state-sync/GlobMatcher.d.ts +29 -0
  607. package/dist/state-sync/GlobMatcher.d.ts.map +1 -0
  608. package/dist/state-sync/GlobMatcher.js +79 -0
  609. package/dist/state-sync/GlobMatcher.js.map +1 -0
  610. package/dist/state-sync/PolicyEngine.d.ts +75 -0
  611. package/dist/state-sync/PolicyEngine.d.ts.map +1 -0
  612. package/dist/state-sync/PolicyEngine.js +107 -0
  613. package/dist/state-sync/PolicyEngine.js.map +1 -0
  614. package/dist/state-sync/PolicyValidator.d.ts +67 -0
  615. package/dist/state-sync/PolicyValidator.d.ts.map +1 -0
  616. package/dist/state-sync/PolicyValidator.js +122 -0
  617. package/dist/state-sync/PolicyValidator.js.map +1 -0
  618. package/dist/state-sync/ResponseDecorator.d.ts +33 -0
  619. package/dist/state-sync/ResponseDecorator.d.ts.map +1 -0
  620. package/dist/state-sync/ResponseDecorator.js +20 -0
  621. package/dist/state-sync/ResponseDecorator.js.map +1 -0
  622. package/dist/state-sync/StateSyncBuilder.d.ts +77 -0
  623. package/dist/state-sync/StateSyncBuilder.d.ts.map +1 -0
  624. package/dist/state-sync/StateSyncBuilder.js +129 -0
  625. package/dist/state-sync/StateSyncBuilder.js.map +1 -0
  626. package/dist/state-sync/StateSyncLayer.d.ts +107 -0
  627. package/dist/state-sync/StateSyncLayer.d.ts.map +1 -0
  628. package/dist/state-sync/StateSyncLayer.js +158 -0
  629. package/dist/state-sync/StateSyncLayer.js.map +1 -0
  630. package/dist/state-sync/index.d.ts +27 -0
  631. package/dist/state-sync/index.d.ts.map +1 -0
  632. package/dist/state-sync/index.js +27 -0
  633. package/dist/state-sync/index.js.map +1 -0
  634. package/dist/state-sync/types.d.ts +174 -0
  635. package/dist/state-sync/types.d.ts.map +1 -0
  636. package/dist/state-sync/types.js +17 -0
  637. package/dist/state-sync/types.js.map +1 -0
  638. package/dist/testing/MvaMetaSymbol.d.ts +45 -0
  639. package/dist/testing/MvaMetaSymbol.d.ts.map +1 -0
  640. package/dist/testing/MvaMetaSymbol.js +34 -0
  641. package/dist/testing/MvaMetaSymbol.js.map +1 -0
  642. package/package.json +153 -0
@@ -0,0 +1,67 @@
1
+ /**
2
+ * ExecutionPipeline — Orchestrates MCP Tool Execution Steps
3
+ *
4
+ * Breaks the monolithic execute() flow into discrete, testable steps
5
+ * using the Result monad for railway-oriented error handling.
6
+ *
7
+ * Each step either succeeds (passes data to the next step) or fails
8
+ * (short-circuits with an error response).
9
+ *
10
+ * Pipeline: ensureBuilt → parseDiscriminator → resolveAction → validateArgs → runChain
11
+ */
12
+ import { type ZodObject, type ZodRawShape } from 'zod';
13
+ import { type ToolResponse } from '../response.js';
14
+ import { type Result } from '../result.js';
15
+ import { type InternalAction } from '../types.js';
16
+ import { type CompiledChain } from './MiddlewareCompiler.js';
17
+ import { type ProgressSink } from './ProgressHelper.js';
18
+ import { type PostProcessTelemetry } from '../../presenter/PostProcessor.js';
19
+ /** Pre-built runtime context needed for execution */
20
+ export interface ExecutionContext<TContext> {
21
+ readonly actionMap: Map<string, InternalAction<TContext>>;
22
+ readonly compiledChain: CompiledChain<TContext>;
23
+ readonly validationSchemaCache: Map<string, ZodObject<ZodRawShape> | null>;
24
+ readonly actionKeysString: string;
25
+ readonly discriminator: string;
26
+ readonly toolName: string;
27
+ }
28
+ /** Resolved action with its discriminator value */
29
+ interface ResolvedAction<TContext> {
30
+ readonly action: InternalAction<TContext>;
31
+ readonly discriminatorValue: string;
32
+ }
33
+ /** Step 1: Parse discriminator value from raw args */
34
+ export declare function parseDiscriminator<TContext>(execCtx: ExecutionContext<TContext>, args: Record<string, unknown>): Result<string>;
35
+ /** Step 2: Resolve the action by discriminator value — O(1) lookup */
36
+ export declare function resolveAction<TContext>(execCtx: ExecutionContext<TContext>, discriminatorValue: string): Result<ResolvedAction<TContext>>;
37
+ /** Step 3: Validate and strip args using pre-cached Zod schema */
38
+ export declare function validateArgs<TContext>(execCtx: ExecutionContext<TContext>, resolved: ResolvedAction<TContext>, args: Record<string, unknown>): Result<{
39
+ validated: Record<string, unknown>;
40
+ selectFields: string[] | undefined;
41
+ }>;
42
+ /**
43
+ * Step 4: Run pre-compiled middleware chain → handler.
44
+ *
45
+ * @param rethrow - When `true`, handler exceptions propagate to the caller
46
+ * instead of being caught and converted to error responses. Used by the
47
+ * traced execution path so that `_executeTraced` can classify system errors
48
+ * (`SpanStatusCode.ERROR` + `recordException`). Default: `false`.
49
+ * @param signal - Optional AbortSignal for cooperative cancellation.
50
+ * Checked before handler execution. If already aborted, returns an
51
+ * immediate error response without invoking the handler chain.
52
+ * @param selectFields - Optional `_select` field names extracted from the
53
+ * AI's input. Forwarded to `postProcessResult()` → `Presenter.make()`
54
+ * for Late Guillotine filtering.
55
+ */
56
+ export declare function runChain<TContext>(execCtx: ExecutionContext<TContext>, resolved: ResolvedAction<TContext>, ctx: TContext, args: Record<string, unknown>, progressSink?: ProgressSink, rethrow?: boolean, signal?: AbortSignal, selectFields?: string[], telemetry?: PostProcessTelemetry): Promise<ToolResponse>;
57
+ /**
58
+ * An envelope that wraps an async generator from a handler.
59
+ * The middleware compiler detects generator handlers and wraps
60
+ * their return value in this envelope so the pipeline can drain them.
61
+ */
62
+ export interface GeneratorResultEnvelope {
63
+ readonly __brand: 'GeneratorResultEnvelope';
64
+ readonly generator: AsyncGenerator<unknown, ToolResponse, undefined>;
65
+ }
66
+ export {};
67
+ //# sourceMappingURL=ExecutionPipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionPipeline.d.ts","sourceRoot":"","sources":["../../../src/core/execution/ExecutionPipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AACvD,OAAO,EAAE,KAAK,YAAY,EAA+B,MAAM,gBAAgB,CAAC;AAEhF,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAIhG,qDAAqD;AACrD,MAAM,WAAW,gBAAgB,CAAC,QAAQ;IACtC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC7B;AAED,mDAAmD;AACnD,UAAU,cAAc,CAAC,QAAQ;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACvC;AAID,sDAAsD;AACtD,wBAAgB,kBAAkB,CAAC,QAAQ,EACvC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,CAAC,CAyBhB;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,QAAQ,EAClC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EACnC,kBAAkB,EAAE,MAAM,GAC3B,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAalC;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,QAAQ,EACjC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EACnC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,EAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,CAAC,CA2CpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EACnC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EACnC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,EAClC,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,YAAY,CAAC,EAAE,YAAY,EAC3B,OAAO,UAAQ,EACf,MAAM,CAAC,EAAE,WAAW,EACpB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,SAAS,CAAC,EAAE,oBAAoB,GACjC,OAAO,CAAC,YAAY,CAAC,CA8BvB;AAQD;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;CACxE"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * ExecutionPipeline — Orchestrates MCP Tool Execution Steps
3
+ *
4
+ * Breaks the monolithic execute() flow into discrete, testable steps
5
+ * using the Result monad for railway-oriented error handling.
6
+ *
7
+ * Each step either succeeds (passes data to the next step) or fails
8
+ * (short-circuits with an error response).
9
+ *
10
+ * Pipeline: ensureBuilt → parseDiscriminator → resolveAction → validateArgs → runChain
11
+ */
12
+ import {} from 'zod';
13
+ import { error, escapeXml, toolError } from '../response.js';
14
+ import { formatValidationError } from './ValidationErrorFormatter.js';
15
+ import { succeed, fail } from '../result.js';
16
+ import {} from '../types.js';
17
+ import {} from './MiddlewareCompiler.js';
18
+ import { isProgressEvent } from './ProgressHelper.js';
19
+ import { postProcessResult } from '../../presenter/PostProcessor.js';
20
+ // ── Pipeline Steps (pure functions) ──────────────────────
21
+ /** Step 1: Parse discriminator value from raw args */
22
+ export function parseDiscriminator(execCtx, args) {
23
+ const raw = args[execCtx.discriminator];
24
+ // Bug #116 fix: distinguish missing from wrong-type discriminator.
25
+ if (raw !== undefined && typeof raw !== 'string') {
26
+ const text = [
27
+ `<tool_error code="INVALID_DISCRIMINATOR">`,
28
+ `<message>Discriminator field "${escapeXml(execCtx.discriminator)}" must be a string, got ${typeof raw}.</message>`,
29
+ `<available_actions>${escapeXml(execCtx.actionKeysString)}</available_actions>`,
30
+ `<recovery>Set "${escapeXml(execCtx.discriminator)}" to one of the available actions as a string.</recovery>`,
31
+ `</tool_error>`,
32
+ ].join('\n');
33
+ return fail({ content: [{ type: 'text', text }], isError: true });
34
+ }
35
+ const value = typeof raw === 'string' ? raw : undefined;
36
+ if (!value) {
37
+ const text = [
38
+ `<tool_error code="MISSING_DISCRIMINATOR">`,
39
+ `<message>The required field "${escapeXml(execCtx.discriminator)}" is missing.</message>`,
40
+ `<available_actions>${escapeXml(execCtx.actionKeysString)}</available_actions>`,
41
+ `<recovery>Add the "${escapeXml(execCtx.discriminator)}" field as a string and call the tool again.</recovery>`,
42
+ `</tool_error>`,
43
+ ].join('\n');
44
+ return fail({ content: [{ type: 'text', text }], isError: true });
45
+ }
46
+ return succeed(value);
47
+ }
48
+ /** Step 2: Resolve the action by discriminator value — O(1) lookup */
49
+ export function resolveAction(execCtx, discriminatorValue) {
50
+ const action = execCtx.actionMap.get(discriminatorValue);
51
+ if (!action) {
52
+ const text = [
53
+ `<tool_error code="UNKNOWN_ACTION">`,
54
+ `<message>The ${escapeXml(execCtx.discriminator)} "${escapeXml(discriminatorValue)}" does not exist.</message>`,
55
+ `<available_actions>${escapeXml(execCtx.actionKeysString)}</available_actions>`,
56
+ `<recovery>Choose a valid action from available_actions and call the tool again.</recovery>`,
57
+ `</tool_error>`,
58
+ ].join('\n');
59
+ return fail({ content: [{ type: 'text', text }], isError: true });
60
+ }
61
+ return succeed({ action, discriminatorValue });
62
+ }
63
+ /** Step 3: Validate and strip args using pre-cached Zod schema */
64
+ export function validateArgs(execCtx, resolved, args) {
65
+ const validationSchema = execCtx.validationSchemaCache.get(resolved.action.key);
66
+ // Extract _select before validation — it's a framework-level field
67
+ // that must NOT reach the .strict() Zod schema.
68
+ const rawSelect = args['_select'];
69
+ const selectFields = (Array.isArray(rawSelect) && rawSelect.every(v => typeof v === 'string'))
70
+ ? rawSelect
71
+ : undefined;
72
+ if (!validationSchema) {
73
+ // No schema — strip _select (framework field) but preserve discriminator
74
+ // (handlers rely on it). Re-inject with resolved value like the with-schema path.
75
+ const { _select: _sel, ...cleaned } = args;
76
+ return succeed({ validated: cleaned, selectFields });
77
+ }
78
+ // Remove discriminator AND _select before validation
79
+ const { [execCtx.discriminator]: _, _select: _unused, ...argsToValidate } = args;
80
+ const result = validationSchema.safeParse(argsToValidate);
81
+ if (!result.success) {
82
+ const text = formatValidationError(result.error.issues, `${execCtx.toolName}/${resolved.discriminatorValue}`, argsToValidate);
83
+ // formatValidationError already produces complete XML — bypass error() to avoid double-wrapping
84
+ return fail({ content: [{ type: 'text', text }], isError: true });
85
+ }
86
+ // Mutate directly — zero-copy re-injection of discriminator
87
+ const validated = result.data;
88
+ // Guard against prototype-pollution via poisoned discriminator names
89
+ const disc = execCtx.discriminator;
90
+ if (disc === '__proto__' || disc === 'constructor' || disc === 'prototype') {
91
+ return fail({
92
+ content: [{ type: 'text', text: `Invalid discriminator name: "${disc}".` }],
93
+ isError: true,
94
+ });
95
+ }
96
+ validated[disc] = resolved.discriminatorValue;
97
+ return succeed({ validated, selectFields });
98
+ }
99
+ /**
100
+ * Step 4: Run pre-compiled middleware chain → handler.
101
+ *
102
+ * @param rethrow - When `true`, handler exceptions propagate to the caller
103
+ * instead of being caught and converted to error responses. Used by the
104
+ * traced execution path so that `_executeTraced` can classify system errors
105
+ * (`SpanStatusCode.ERROR` + `recordException`). Default: `false`.
106
+ * @param signal - Optional AbortSignal for cooperative cancellation.
107
+ * Checked before handler execution. If already aborted, returns an
108
+ * immediate error response without invoking the handler chain.
109
+ * @param selectFields - Optional `_select` field names extracted from the
110
+ * AI's input. Forwarded to `postProcessResult()` → `Presenter.make()`
111
+ * for Late Guillotine filtering.
112
+ */
113
+ export async function runChain(execCtx, resolved, ctx, args, progressSink, rethrow = false, signal, selectFields, telemetry) {
114
+ const chain = execCtx.compiledChain.get(resolved.action.key);
115
+ if (!chain) {
116
+ return error(`No compiled chain for action "${resolved.action.key}".`);
117
+ }
118
+ // Cancellation gate: abort before starting the handler chain
119
+ if (signal?.aborted) {
120
+ return error(`[${execCtx.toolName}/${resolved.discriminatorValue}] Request cancelled.`);
121
+ }
122
+ try {
123
+ const result = await chain(ctx, args);
124
+ // If the middleware chain returned a generator result envelope, drain it
125
+ if (isGeneratorResultEnvelope(result)) {
126
+ const drained = await drainGenerator(result.generator, progressSink, signal);
127
+ return postProcessResult(drained, resolved.action.returns, ctx, selectFields, telemetry);
128
+ }
129
+ return postProcessResult(result, resolved.action.returns, ctx, selectFields, telemetry);
130
+ }
131
+ catch (err) {
132
+ if (rethrow)
133
+ throw err;
134
+ const message = err instanceof Error ? err.message : String(err);
135
+ return toolError('INTERNAL_ERROR', {
136
+ message: `[${execCtx.toolName}/${resolved.discriminatorValue}] ${message}`,
137
+ suggestion: 'This may be a transient error. Retry the same call with identical parameters.',
138
+ severity: 'error',
139
+ });
140
+ }
141
+ }
142
+ /** @internal */
143
+ function isGeneratorResultEnvelope(value) {
144
+ return (typeof value === 'object' &&
145
+ value !== null &&
146
+ '__brand' in value &&
147
+ value.__brand === 'GeneratorResultEnvelope');
148
+ }
149
+ /**
150
+ * Drain an async generator, forwarding ProgressEvents to the sink
151
+ * and returning the final ToolResponse.
152
+ *
153
+ * Checks the AbortSignal before each iteration. If cancelled, the
154
+ * generator is returned (cleanup runs) and an error response is returned.
155
+ * This prevents zombie generators from continuing to execute after
156
+ * the user cancels the request.
157
+ *
158
+ * @internal
159
+ */
160
+ async function drainGenerator(gen, progressSink, signal) {
161
+ let result = await gen.next();
162
+ while (!result.done) {
163
+ // Cancellation check: abort generator if signal fired
164
+ if (signal?.aborted) {
165
+ // Return the generator to trigger finally {} cleanup
166
+ await gen.return(error('Request cancelled.'));
167
+ return error('Request cancelled.');
168
+ }
169
+ if (progressSink && isProgressEvent(result.value)) {
170
+ progressSink(result.value);
171
+ }
172
+ result = await gen.next();
173
+ }
174
+ return result.value;
175
+ }
176
+ //# sourceMappingURL=ExecutionPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionPipeline.js","sourceRoot":"","sources":["../../../src/core/execution/ExecutionPipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { type InternalAction, type MiddlewareFn } from '../types.js';
2
+ export type CompiledChain<TContext> = Map<string, (ctx: TContext, args: Record<string, unknown>) => Promise<unknown>>;
3
+ /** Generic handler function signature used in middleware chains. */
4
+ type ChainFn<TContext> = (ctx: TContext, args: Record<string, unknown>) => Promise<unknown>;
5
+ /**
6
+ * Wrap a handler with a middleware stack (right-to-left composition).
7
+ *
8
+ * This is the single canonical implementation of the middleware
9
+ * wrapping pattern. No other file should duplicate this loop.
10
+ *
11
+ * Includes a runtime guard: if a middleware returns `undefined`,
12
+ * a one-time warning is emitted. This catches the common junior
13
+ * mistake of forgetting `return next()`, which silently prevents
14
+ * the handler from executing.
15
+ *
16
+ * @param handler - The innermost function to wrap
17
+ * @param middlewares - Middleware stack (outermost first, applied right-to-left)
18
+ * @returns The compiled chain function
19
+ */
20
+ export declare function wrapChain<TContext>(handler: ChainFn<TContext>, middlewares: readonly MiddlewareFn<TContext>[]): ChainFn<TContext>;
21
+ /**
22
+ * Pre-compile middleware chains for all actions in a builder.
23
+ *
24
+ * For each action:
25
+ * 1. Wraps generator handlers in a GeneratorResultEnvelope
26
+ * 2. Applies per-action middlewares (innermost)
27
+ * 3. Applies global middlewares (outermost)
28
+ *
29
+ * @param actions - Registered actions with their handlers and local middleware
30
+ * @param middlewares - Global middleware stack
31
+ * @returns Map from action key to compiled chain
32
+ */
33
+ export declare function compileMiddlewareChains<TContext>(actions: readonly InternalAction<TContext>[], middlewares: readonly MiddlewareFn<TContext>[]): CompiledChain<TContext>;
34
+ export {};
35
+ //# sourceMappingURL=MiddlewareCompiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiddlewareCompiler.d.ts","sourceRoot":"","sources":["../../../src/core/execution/MiddlewareCompiler.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAIrE,MAAM,MAAM,aAAa,CAAC,QAAQ,IAAI,GAAG,CACrC,MAAM,EACN,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CACrE,CAAC;AAEF,oEAAoE;AACpE,KAAK,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AA4B5F;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAC9B,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,WAAW,EAAE,SAAS,YAAY,CAAC,QAAQ,CAAC,EAAE,GAC/C,OAAO,CAAC,QAAQ,CAAC,CAsBnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAC5C,OAAO,EAAE,SAAS,cAAc,CAAC,QAAQ,CAAC,EAAE,EAC5C,WAAW,EAAE,SAAS,YAAY,CAAC,QAAQ,CAAC,EAAE,GAC/C,aAAa,CAAC,QAAQ,CAAC,CA4BzB"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * MiddlewareCompiler — Middleware Chain Pre-Compilation Strategy
3
+ *
4
+ * Wraps middlewares right-to-left around each action handler,
5
+ * producing a ready-to-execute chain per action key.
6
+ *
7
+ * Supports both regular async handlers and async generator handlers.
8
+ * Generator handlers are wrapped in a {@link GeneratorResultEnvelope}
9
+ * so the pipeline can drain progress events from them.
10
+ *
11
+ * Pure-function module: no state, no side effects.
12
+ */
13
+ import {} from '../response.js';
14
+ import {} from '../types.js';
15
+ /**
16
+ * Check if a function is an async generator function.
17
+ * Uses Symbol.toStringTag which survives minification (unlike constructor.name).
18
+ * @internal
19
+ */
20
+ function isAsyncGeneratorFunction(fn) {
21
+ if (typeof fn !== 'function')
22
+ return false;
23
+ // Symbol.toStringTag is set by the engine on async generator functions
24
+ if (fn[Symbol.toStringTag] === 'AsyncGeneratorFunction')
25
+ return true;
26
+ if (fn.constructor?.name === 'AsyncGeneratorFunction')
27
+ return true;
28
+ // Duck-type fallback for transpiled code: check the prototype
29
+ if (typeof fn.prototype === 'object' && fn.prototype !== null
30
+ && Symbol.asyncIterator in fn.prototype) {
31
+ return true;
32
+ }
33
+ return false;
34
+ }
35
+ /**
36
+ * Set of middleware functions that have already triggered the
37
+ * "forgot return next()" warning. Keyed by function identity
38
+ * to ensure each middleware warns at most once across all chains.
39
+ * @internal
40
+ */
41
+ const _warnedMiddlewares = new WeakSet();
42
+ /**
43
+ * Wrap a handler with a middleware stack (right-to-left composition).
44
+ *
45
+ * This is the single canonical implementation of the middleware
46
+ * wrapping pattern. No other file should duplicate this loop.
47
+ *
48
+ * Includes a runtime guard: if a middleware returns `undefined`,
49
+ * a one-time warning is emitted. This catches the common junior
50
+ * mistake of forgetting `return next()`, which silently prevents
51
+ * the handler from executing.
52
+ *
53
+ * @param handler - The innermost function to wrap
54
+ * @param middlewares - Middleware stack (outermost first, applied right-to-left)
55
+ * @returns The compiled chain function
56
+ */
57
+ export function wrapChain(handler, middlewares) {
58
+ let chain = handler;
59
+ for (let i = middlewares.length - 1; i >= 0; i--) {
60
+ const mw = middlewares[i];
61
+ if (!mw)
62
+ continue;
63
+ const nextFn = chain;
64
+ chain = async (ctx, args) => {
65
+ const result = await mw(ctx, args, () => nextFn(ctx, args));
66
+ if (result === undefined && !_warnedMiddlewares.has(mw)) {
67
+ _warnedMiddlewares.add(mw);
68
+ console.warn(`[vurb] Middleware "${mw.name || '(anonymous)'}" returned undefined. ` +
69
+ `Did you forget "return next()"? Without it, the handler never executes ` +
70
+ `and the tool silently returns an empty response.`);
71
+ }
72
+ return result;
73
+ };
74
+ }
75
+ return chain;
76
+ }
77
+ /**
78
+ * Pre-compile middleware chains for all actions in a builder.
79
+ *
80
+ * For each action:
81
+ * 1. Wraps generator handlers in a GeneratorResultEnvelope
82
+ * 2. Applies per-action middlewares (innermost)
83
+ * 3. Applies global middlewares (outermost)
84
+ *
85
+ * @param actions - Registered actions with their handlers and local middleware
86
+ * @param middlewares - Global middleware stack
87
+ * @returns Map from action key to compiled chain
88
+ */
89
+ export function compileMiddlewareChains(actions, middlewares) {
90
+ const compiled = new Map();
91
+ for (const action of actions) {
92
+ // Step 1: Resolve the base handler (regular or generator-wrapped)
93
+ let handler;
94
+ if (isAsyncGeneratorFunction(action.handler)) {
95
+ handler = (ctx, args) => {
96
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
+ const gen = action.handler(ctx, args);
98
+ return Promise.resolve({ __brand: 'GeneratorResultEnvelope', generator: gen });
99
+ };
100
+ }
101
+ else {
102
+ handler = action.handler;
103
+ }
104
+ // Step 2: Wrap with per-action middleware (innermost), then global (outermost)
105
+ const actionMws = action.middlewares ?? [];
106
+ const chain = wrapChain(wrapChain(handler, actionMws), middlewares);
107
+ compiled.set(action.key, chain);
108
+ }
109
+ return compiled;
110
+ }
111
+ //# sourceMappingURL=MiddlewareCompiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiddlewareCompiler.js","sourceRoot":"","sources":["../../../src/core/execution/MiddlewareCompiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * MutationSerializer — Per-Action Intent Mutex for Destructive Operations
3
+ *
4
+ * When an LLM hallucinates and fires two `delete_user` calls for the same ID
5
+ * in the same millisecond, this serializer ensures they execute sequentially —
6
+ * not concurrently. Transactional isolation at the framework level.
7
+ *
8
+ * Architecture:
9
+ * ┌────────────────────────────────────────────────────┐
10
+ * │ delete_user(id: "42") ──► serialize("delete") │
11
+ * │ delete_user(id: "42") ──► queue behind first │
12
+ * │ list_users() ──► pass-through (readOnly)│
13
+ * │ create_user(...) ──► pass-through (not destr)│
14
+ * └────────────────────────────────────────────────────┘
15
+ *
16
+ * Mechanism:
17
+ * Uses promise-chaining per action key. Each destructive call
18
+ * awaits the previous call's completion before starting.
19
+ * This is the idiomatic async mutex pattern in JavaScript:
20
+ * no external locks, no shared memory, no OS primitives.
21
+ *
22
+ * Properties:
23
+ * - Zero overhead for non-destructive actions (never called)
24
+ * - O(1) setup per serialized call (promise chain append)
25
+ * - Automatic GC: completed chains are pruned from the map
26
+ * - Cooperative with AbortSignal: cancelled while waiting
27
+ * - Per action-key isolation: `billing.delete` ≠ `users.delete`
28
+ *
29
+ * @module
30
+ * @internal
31
+ */
32
+ /**
33
+ * An async mutex that serializes destructive operations by action key.
34
+ *
35
+ * Created once per builder during `buildToolDefinition()` — only when
36
+ * at least one action is marked `destructive: true`. Otherwise the
37
+ * field stays `undefined` (zero overhead).
38
+ *
39
+ * Used by `_executePipeline()` to wrap `runChain()` for destructive actions.
40
+ *
41
+ * @example
42
+ * ```
43
+ * // Concurrent calls to `billing.delete`:
44
+ * // Call A → executes immediately
45
+ * // Call B → waits for A to complete → then executes
46
+ * // Call C → waits for B to complete → then executes
47
+ * //
48
+ * // Concurrent calls to `billing.list` (readOnly):
49
+ * // All execute in parallel (serializer not invoked)
50
+ * ```
51
+ */
52
+ export declare class MutationSerializer {
53
+ /**
54
+ * Active promise chains keyed by action key.
55
+ * Each entry represents the "tail" of the serialization queue.
56
+ * When the tail resolves, the next waiter starts.
57
+ */
58
+ private readonly _chains;
59
+ /**
60
+ * Serialize execution of `fn` for the given action key.
61
+ *
62
+ * Concurrent calls with the **same key** are queued and executed
63
+ * strictly in FIFO order. Different keys are fully independent.
64
+ *
65
+ * @param key - Action key (e.g., `"delete"` or `"billing.refund"`)
66
+ * @param fn - The async function to serialize (typically `runChain()`)
67
+ * @param signal - Optional AbortSignal for cooperative cancellation while waiting
68
+ * @returns The result of `fn()`
69
+ * @throws Error if the AbortSignal fires while waiting in queue
70
+ */
71
+ serialize<T>(key: string, fn: () => Promise<T>, signal?: AbortSignal): Promise<T>;
72
+ /**
73
+ * Number of action keys with active serialization chains.
74
+ * Used for testing and debugging — should be 0 when idle.
75
+ */
76
+ get activeChains(): number;
77
+ }
78
+ //# sourceMappingURL=MutationSerializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationSerializer.d.ts","sourceRoot":"","sources":["../../../src/core/execution/MutationSerializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,kBAAkB;IAC3B;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAI5D;;;;;;;;;;;OAWG;IACG,SAAS,CAAC,CAAC,EACb,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,CAAC,CAAC;IA+Bb;;;OAGG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;CACJ"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * MutationSerializer — Per-Action Intent Mutex for Destructive Operations
3
+ *
4
+ * When an LLM hallucinates and fires two `delete_user` calls for the same ID
5
+ * in the same millisecond, this serializer ensures they execute sequentially —
6
+ * not concurrently. Transactional isolation at the framework level.
7
+ *
8
+ * Architecture:
9
+ * ┌────────────────────────────────────────────────────┐
10
+ * │ delete_user(id: "42") ──► serialize("delete") │
11
+ * │ delete_user(id: "42") ──► queue behind first │
12
+ * │ list_users() ──► pass-through (readOnly)│
13
+ * │ create_user(...) ──► pass-through (not destr)│
14
+ * └────────────────────────────────────────────────────┘
15
+ *
16
+ * Mechanism:
17
+ * Uses promise-chaining per action key. Each destructive call
18
+ * awaits the previous call's completion before starting.
19
+ * This is the idiomatic async mutex pattern in JavaScript:
20
+ * no external locks, no shared memory, no OS primitives.
21
+ *
22
+ * Properties:
23
+ * - Zero overhead for non-destructive actions (never called)
24
+ * - O(1) setup per serialized call (promise chain append)
25
+ * - Automatic GC: completed chains are pruned from the map
26
+ * - Cooperative with AbortSignal: cancelled while waiting
27
+ * - Per action-key isolation: `billing.delete` ≠ `users.delete`
28
+ *
29
+ * @module
30
+ * @internal
31
+ */
32
+ // ── Serializer Implementation ────────────────────────────
33
+ /**
34
+ * An async mutex that serializes destructive operations by action key.
35
+ *
36
+ * Created once per builder during `buildToolDefinition()` — only when
37
+ * at least one action is marked `destructive: true`. Otherwise the
38
+ * field stays `undefined` (zero overhead).
39
+ *
40
+ * Used by `_executePipeline()` to wrap `runChain()` for destructive actions.
41
+ *
42
+ * @example
43
+ * ```
44
+ * // Concurrent calls to `billing.delete`:
45
+ * // Call A → executes immediately
46
+ * // Call B → waits for A to complete → then executes
47
+ * // Call C → waits for B to complete → then executes
48
+ * //
49
+ * // Concurrent calls to `billing.list` (readOnly):
50
+ * // All execute in parallel (serializer not invoked)
51
+ * ```
52
+ */
53
+ export class MutationSerializer {
54
+ /**
55
+ * Active promise chains keyed by action key.
56
+ * Each entry represents the "tail" of the serialization queue.
57
+ * When the tail resolves, the next waiter starts.
58
+ */
59
+ _chains = new Map();
60
+ // ── Public API ───────────────────────────────────────
61
+ /**
62
+ * Serialize execution of `fn` for the given action key.
63
+ *
64
+ * Concurrent calls with the **same key** are queued and executed
65
+ * strictly in FIFO order. Different keys are fully independent.
66
+ *
67
+ * @param key - Action key (e.g., `"delete"` or `"billing.refund"`)
68
+ * @param fn - The async function to serialize (typically `runChain()`)
69
+ * @param signal - Optional AbortSignal for cooperative cancellation while waiting
70
+ * @returns The result of `fn()`
71
+ * @throws Error if the AbortSignal fires while waiting in queue
72
+ */
73
+ async serialize(key, fn, signal) {
74
+ // Append to the chain for this key
75
+ const prev = this._chains.get(key) ?? Promise.resolve();
76
+ let releaseLock;
77
+ const lock = new Promise(resolve => { releaseLock = resolve; });
78
+ this._chains.set(key, lock);
79
+ try {
80
+ // Wait for previous operation on this key to complete
81
+ await prev;
82
+ // Check if cancelled while waiting in the serialization queue
83
+ if (signal?.aborted) {
84
+ throw new Error('Request cancelled while waiting for mutation lock.');
85
+ }
86
+ return await fn();
87
+ }
88
+ finally {
89
+ releaseLock();
90
+ // GC: if this was the last link in the chain, prune the entry
91
+ // so the map doesn't grow unboundedly with resolved promises.
92
+ if (this._chains.get(key) === lock) {
93
+ this._chains.delete(key);
94
+ }
95
+ }
96
+ }
97
+ // ── Diagnostics ──────────────────────────────────────
98
+ /**
99
+ * Number of action keys with active serialization chains.
100
+ * Used for testing and debugging — should be 0 when idle.
101
+ */
102
+ get activeChains() {
103
+ return this._chains.size;
104
+ }
105
+ }
106
+ //# sourceMappingURL=MutationSerializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationSerializer.js","sourceRoot":"","sources":["../../../src/core/execution/MutationSerializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,4DAA4D;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,kBAAkB;IAC3B;;;;OAIG;IACc,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE5D,wDAAwD;IAExD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,SAAS,CACX,GAAW,EACX,EAAoB,EACpB,MAAoB;QAEpB,mCAAmC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAExD,IAAI,WAAwB,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE5B,IAAI,CAAC;YACD,sDAAsD;YACtD,MAAM,IAAI,CAAC;YAEX,8DAA8D;YAC9D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAC1E,CAAC;YAED,OAAO,MAAM,EAAE,EAAE,CAAC;QACtB,CAAC;gBAAS,CAAC;YACP,WAAW,EAAE,CAAC;YAEd,8DAA8D;YAC9D,8DAA8D;YAC9D,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;IACL,CAAC;IAED,wDAAwD;IAExD;;;OAGG;IACH,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;CACJ"}