@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
package/README.md ADDED
@@ -0,0 +1,677 @@
1
+ <div align="center">
2
+
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/86ae1b28-a938-4e12-af29-bfc60a55dbe8" >
5
+ <img src="https://github.com/user-attachments/assets/86ae1b28-a938-4e12-af29-bfc60a55dbe8" style="border-radius:8px;background:#000000;padding:10px;border:1px solid #414141;" alt="Vurb.ts">
6
+ </picture>
7
+
8
+ **The MVA framework for production MCP servers.**<br>
9
+ Structured perception for AI agents. Zero hallucination. Zero data leaks.
10
+
11
+ [![npm version](https://img.shields.io/npm/v/vurb.svg?color=0ea5e9)](https://www.npmjs.com/package/vurb)
12
+ [![Downloads](https://img.shields.io/npm/dw/vurb)](https://www.npmjs.com/package/vurb)
13
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.7+-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
14
+ [![MCP Standard](https://img.shields.io/badge/MCP-Standard-purple)](https://modelcontextprotocol.io/)
15
+ [![License](https://img.shields.io/badge/License-Apache_2.0-green)](https://github.com/vinkius-labs/vurb.ts/blob/main/LICENSE)
16
+
17
+ [Documentation](https://vurb.vinkius.com/) · [Quick Start](https://vurb.vinkius.com/quickstart-lightspeed) · [API Reference](https://vurb.vinkius.com/api/)
18
+
19
+ </div>
20
+
21
+ ---
22
+
23
+ ## Get Started in 5 Seconds
24
+
25
+ ```bash
26
+ npx @vurb/core create my-server
27
+ cd my-server && vurb dev
28
+ ```
29
+
30
+ That's it. A production-ready MCP server with file-based routing, Presenters, middleware, tests, and pre-configured connections for **Cursor**, **Claude Desktop**, **Claude Code**, **Windsurf**, **Cline**, and **VS Code + GitHub Copilot**.
31
+
32
+ ```
33
+ Project name? › my-server
34
+ Transport? › stdio
35
+ Vector? › vanilla
36
+
37
+ ● Scaffolding project — 14 files (6ms)
38
+ ● Installing dependencies...
39
+ ✔ Done — vurb dev to start
40
+ ```
41
+
42
+ Choose a vector to scaffold exactly the project you need:
43
+
44
+ | Vector | What it scaffolds |
45
+ |---|---|
46
+ | `vanilla` | `autoDiscover()` file-based routing. Zero external deps |
47
+ | `prisma` | Prisma schema + CRUD tools with field-level security |
48
+ | `n8n` | n8n workflow bridge — auto-discover webhooks as tools |
49
+ | `openapi` | OpenAPI 3.x / Swagger 2.0 → full MVA tool generation |
50
+ | `oauth` | RFC 8628 Device Flow authentication |
51
+
52
+ ```bash
53
+ # Database-driven server with Presenter egress firewall
54
+ npx @vurb/core create my-api --vector prisma --transport sse --yes
55
+
56
+ # Bridge your n8n workflows to any MCP client
57
+ npx @vurb/core create ops-bridge --vector n8n --yes
58
+
59
+ # REST API → MCP in one command
60
+ npx @vurb/core create petstore --vector openapi --yes
61
+ ```
62
+
63
+ Drop a file in `src/tools/`, restart — it's a live MCP tool. No central import file, no merge conflicts:
64
+
65
+ ```
66
+ src/tools/
67
+ ├── billing/
68
+ │ ├── get_invoice.ts → billing.get_invoice
69
+ │ └── pay.ts → billing.pay
70
+ ├── users/
71
+ │ ├── list.ts → users.list
72
+ │ └── ban.ts → users.ban
73
+ └── system/
74
+ └── health.ts → system.health
75
+ ```
76
+
77
+ ---
78
+
79
+ ## Why Vurb.ts Exists
80
+
81
+ Every raw MCP server does the same thing: `JSON.stringify()` the database result and ship it to the LLM. Three catastrophic consequences:
82
+
83
+ ```typescript
84
+ // What every MCP tutorial teaches
85
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
86
+ const { name, arguments: args } = request.params;
87
+ if (name === 'get_invoice') {
88
+ const invoice = await db.invoices.findUnique(args.id);
89
+ return { content: [{ type: 'text', text: JSON.stringify(invoice) }] };
90
+ // AI receives: { password_hash, internal_margin, customer_ssn, ... }
91
+ }
92
+ // ...50 more if/else branches
93
+ });
94
+ ```
95
+
96
+ **Data exfiltration.** `JSON.stringify(invoice)` sends `password_hash`, `internal_margin`, `customer_ssn` — every column — straight to the LLM provider. One field = one GDPR violation.
97
+
98
+ **Token explosion.** Every tool schema is sent on every turn, even when irrelevant. System prompt rules for every domain entity are sent globally, bloating context with wasted tokens.
99
+
100
+ **Context DDoS.** An unbounded `findMany()` can dump thousands of rows into the context window. The LLM hallucinates. Your API bill explodes.
101
+
102
+ ---
103
+
104
+ ## The MVA Solution
105
+
106
+ Vurb.ts replaces `JSON.stringify()` with a **Presenter** — a deterministic perception layer that controls exactly what the agent sees, knows, and can do next.
107
+
108
+ ```
109
+ Handler (Model) Presenter (View) Agent (LLM)
110
+ ─────────────── ──────────────── ───────────
111
+ Raw DB data → Zod-validated schema → Structured
112
+ { amount_cents, + System rules perception
113
+ password_hash, + UI blocks (charts) package
114
+ internal_margin, + Suggested next actions
115
+ ssn, ... } + PII redaction
116
+ + Cognitive guardrails
117
+ - password_hash ← STRIPPED
118
+ - internal_margin ← STRIPPED
119
+ - ssn ← REDACTED
120
+ ```
121
+
122
+ The result is not JSON — it's a **Perception Package**:
123
+
124
+ ```
125
+ Block 1 — DATA: {"id":"INV-001","amount_cents":45000,"status":"pending"}
126
+ Block 2 — UI: [ECharts gauge chart config]
127
+ Block 3 — RULES: "amount_cents is in CENTS. Divide by 100 for display."
128
+ Block 4 — ACTIONS: → billing.pay: "Invoice is pending — process payment"
129
+ Block 5 — EMBEDS: [Client Presenter + LineItem Presenter composed]
130
+ ```
131
+
132
+ No guessing. Undeclared fields rejected. Domain rules travel with data — not in the system prompt. Next actions computed from data state.
133
+
134
+ ---
135
+
136
+ ## Before vs. After
137
+
138
+ **Before** — raw MCP:
139
+
140
+ ```typescript
141
+ case 'get_invoice':
142
+ const invoice = await db.invoices.findUnique(args.id);
143
+ return { content: [{ type: 'text', text: JSON.stringify(invoice) }] };
144
+ // Leaks internal columns. No rules. No guidance.
145
+ ```
146
+
147
+ **After** — Vurb.ts with MVA:
148
+
149
+ ```typescript
150
+ import { createPresenter, suggest, ui, t } from '@vurb/core';
151
+
152
+ const InvoicePresenter = createPresenter('Invoice')
153
+ .schema({
154
+ id: t.string,
155
+ amount_cents: t.number.describe('Amount in cents — divide by 100'),
156
+ status: t.enum('paid', 'pending', 'overdue'),
157
+ })
158
+ .rules(['CRITICAL: amount_cents is in CENTS. Divide by 100 for display.'])
159
+ .redactPII(['*.customer_ssn', '*.credit_card'])
160
+ .ui((inv) => [
161
+ ui.echarts({
162
+ series: [{ type: 'gauge', data: [{ value: inv.amount_cents / 100 }] }],
163
+ }),
164
+ ])
165
+ .suggest((inv) =>
166
+ inv.status === 'pending'
167
+ ? [suggest('billing.pay', 'Invoice pending — process payment')]
168
+ : [suggest('billing.archive', 'Invoice settled — archive it')]
169
+ )
170
+ .embed('client', ClientPresenter)
171
+ .embed('line_items', LineItemPresenter)
172
+ .limit(50);
173
+
174
+ export default f.query('billing.get_invoice')
175
+ .describe('Get an invoice by ID')
176
+ .withString('id', 'Invoice ID')
177
+ .returns(InvoicePresenter)
178
+ .handle(async (input, ctx) => ctx.db.invoices.findUnique({
179
+ where: { id: input.id },
180
+ include: { client: true, line_items: true },
181
+ }));
182
+ ```
183
+
184
+ The handler returns raw data. The Presenter shapes absolutely everything the agent perceives.
185
+
186
+ ---
187
+
188
+ ## Architecture
189
+
190
+ ### Egress Firewall — Schema as Security Boundary
191
+
192
+ The Presenter's Zod schema acts as a whitelist. **Only declared fields pass through.** A database migration that adds `customer_ssn` doesn't change what the agent sees — the new column is invisible unless you explicitly declare it in the schema.
193
+
194
+ ```typescript
195
+ const UserPresenter = createPresenter('User')
196
+ .schema({ id: t.string, name: t.string, email: t.string });
197
+ // password_hash, tenant_id, internal_flags → STRIPPED at RAM level
198
+ // A developer CANNOT accidentally expose a new column
199
+ ```
200
+
201
+ ### DLP Compliance Engine — PII Redaction
202
+
203
+ GDPR / LGPD / HIPAA compliance built into the framework. `.redactPII()` compiles a V8-optimized redaction function via `fast-redact` that masks sensitive fields **after** UI blocks and rules have been computed (Late Guillotine Pattern) — the LLM receives `[REDACTED]` instead of real values.
204
+
205
+ ```typescript
206
+ const PatientPresenter = createPresenter('Patient')
207
+ .schema({ name: t.string, ssn: t.string, diagnosis: t.string })
208
+ .redactPII(['ssn', 'diagnosis'])
209
+ .ui((patient) => [
210
+ ui.markdown(`**Patient:** ${patient.name}`),
211
+ // patient.ssn available for UI logic — but LLM sees [REDACTED]
212
+ ]);
213
+ ```
214
+
215
+ Custom censors, wildcard paths (`'*.email'`, `'patients[*].diagnosis'`), and centralized PII field lists. **Zero-leak guarantee** — the developer cannot accidentally bypass redaction.
216
+
217
+ ### 8 Anti-Hallucination Mechanisms
218
+
219
+ ```
220
+ ① Action Consolidation → groups operations behind fewer tools → ↓ tokens
221
+ ② TOON Encoding → pipe-delimited compact descriptions → ↓ tokens
222
+ ③ Zod .strict() → rejects hallucinated params at build → ↓ retries
223
+ ④ Self-Healing Errors → directed correction prompts → ↓ retries
224
+ ⑤ Cognitive Guardrails → .limit() truncates before LLM sees it → ↓ tokens
225
+ ⑥ Agentic Affordances → HATEOAS next-action hints from data → ↓ retries
226
+ ⑦ JIT Context Rules → rules travel with data, not globally → ↓ tokens
227
+ ⑧ State Sync → RFC 7234 cache-control for agents → ↓ requests
228
+ ```
229
+
230
+ Each mechanism compounds. Fewer tokens in context, fewer requests per task, less hallucination, lower cost.
231
+
232
+ ### FSM State Gate — Temporal Anti-Hallucination
233
+
234
+ **The first framework where it is physically impossible for an AI to execute tools out of order.**
235
+
236
+ LLMs are chaotic — even with HATEOAS suggestions, a model can ignore them and call `cart.pay` with an empty cart. The FSM State Gate makes temporal hallucination structurally impossible: if the workflow state is `empty`, the `cart.pay` tool **doesn't exist** in `tools/list`. The LLM literally cannot call it.
237
+
238
+ ```typescript
239
+ const gate = f.fsm({
240
+ id: 'checkout',
241
+ initial: 'empty',
242
+ states: {
243
+ empty: { on: { ADD_ITEM: 'has_items' } },
244
+ has_items: { on: { CHECKOUT: 'payment', CLEAR: 'empty' } },
245
+ payment: { on: { PAY: 'confirmed', CANCEL: 'has_items' } },
246
+ confirmed: { type: 'final' },
247
+ },
248
+ });
249
+
250
+ const pay = f.mutation('cart.pay')
251
+ .describe('Process payment')
252
+ .bindState('payment', 'PAY') // Visible ONLY in 'payment' state
253
+ .handle(async (input, ctx) => ctx.db.payments.process(input.method));
254
+ ```
255
+
256
+ | State | Visible Tools |
257
+ |---|---|
258
+ | `empty` | `cart.add_item`, `cart.view` |
259
+ | `has_items` | `cart.add_item`, `cart.checkout`, `cart.view` |
260
+ | `payment` | `cart.pay`, `cart.view` |
261
+ | `confirmed` | `cart.view` |
262
+
263
+ Three complementary layers: **Format** (Zod validates shape), **Guidance** (HATEOAS suggests the next tool), **Gate** (FSM physically removes wrong tools). XState v5 powered, serverless-ready with `fsmStore`.
264
+
265
+ ### Zero-Trust Sandbox — Computation Delegation
266
+
267
+ The LLM sends JavaScript logic to your data instead of shipping data to the LLM. Code runs inside a sealed V8 isolate — **zero access** to `process`, `require`, `fs`, `net`, `fetch`, `Buffer`. Timeout kill, memory cap, output limit, automatic isolate recovery, and AbortSignal kill-switch (Connection Watchdog).
268
+
269
+ ```typescript
270
+ export default f.query('analytics.compute')
271
+ .describe('Run a computation on server-side data')
272
+ .sandboxed({ timeout: 3000, memoryLimit: 64 })
273
+ .handle(async (input, ctx) => {
274
+ const data = await ctx.db.records.findMany();
275
+ const engine = f.sandbox({ timeout: 3000, memoryLimit: 64 });
276
+ try {
277
+ const result = await engine.execute(input.expression, data);
278
+ if (!result.ok) return f.error('VALIDATION_ERROR', result.error)
279
+ .suggest('Fix the JavaScript expression and retry.');
280
+ return result.value;
281
+ } finally { engine.dispose(); }
282
+ });
283
+ ```
284
+
285
+ `.sandboxed()` auto-injects HATEOAS instructions into the tool description — the LLM knows exactly how to format its code. Prototype pollution contained. `constructor.constructor` escape blocked. One isolate per engine, new pristine context per call.
286
+
287
+ ### State Sync — Temporal Awareness for Agents
288
+
289
+ LLMs have no sense of time. After `sprints.list` then `sprints.create`, the agent still believes the list is unchanged. Vurb.ts injects RFC 7234-inspired cache-control signals:
290
+
291
+ ```typescript
292
+ const listSprints = f.query('sprints.list')
293
+ .stale() // no-store — always re-fetch
294
+ .handle(async (input, ctx) => ctx.db.sprints.findMany());
295
+
296
+ const createSprint = f.action('sprints.create')
297
+ .invalidates('sprints.*', 'tasks.*') // causal cross-domain invalidation
298
+ .withString('name', 'Sprint name')
299
+ .handle(async (input, ctx) => ctx.db.sprints.create(input));
300
+ // After mutation: [System: Cache invalidated for sprints.*, tasks.* — caused by sprints.create]
301
+ // Failed mutations emit nothing — state didn't change.
302
+ ```
303
+
304
+ Registry-level policies with `f.stateSync()`, glob patterns (`*`, `**`), policy overlap detection, observability hooks, and MCP `notifications/resources/updated` emission.
305
+
306
+ ### Prompt Engine — Server-Side Templates
307
+
308
+ MCP Prompts as executable server-side templates with the same Fluent API as tools. Middleware, hydration timeout, schema-informed coercion, interceptors, multi-modal messages, and the Presenter bridge:
309
+
310
+ ```typescript
311
+ const IncidentAnalysis = f.prompt('incident_analysis')
312
+ .title('Incident Analysis')
313
+ .describe('Structured analysis of a production incident')
314
+ .tags('engineering', 'ops')
315
+ .input({
316
+ incident_id: { type: 'string', description: 'Incident ticket ID' },
317
+ severity: { enum: ['sev1', 'sev2', 'sev3'] as const },
318
+ })
319
+ .use(requireAuth, requireRole('engineer'))
320
+ .timeout(10_000)
321
+ .handler(async (ctx, { incident_id, severity }) => {
322
+ const incident = await ctx.db.incidents.findUnique({ where: { id: incident_id } });
323
+ return {
324
+ messages: [
325
+ PromptMessage.system(`You are a Senior SRE. Severity: ${severity.toUpperCase()}.`),
326
+ ...PromptMessage.fromView(IncidentPresenter.make(incident, ctx)),
327
+ PromptMessage.user('Begin root cause analysis.'),
328
+ ],
329
+ };
330
+ });
331
+ ```
332
+
333
+ `PromptMessage.fromView()` decomposes any Presenter into prompt messages — same schema, same rules, same affordances in both tools and prompts. Multi-modal with `.image()`, `.audio()`, `.resource()`. Interceptors inject compliance footers after every handler. `PromptRegistry` with filtering, pagination, and lifecycle sync.
334
+
335
+ ### Agent Skills — Progressive Instruction Distribution
336
+
337
+ **No other MCP framework has this.** Distribute domain expertise to AI agents on demand via MCP. Three-layer progressive disclosure — the agent searches a lightweight index, loads only the relevant SKILL.md, and reads auxiliary files on demand. Zero context window waste.
338
+
339
+ ```typescript
340
+ import { SkillRegistry, autoDiscoverSkills, createSkillTools } from '@vurb/skills';
341
+
342
+ const skills = new SkillRegistry();
343
+ await autoDiscoverSkills(skills, './skills');
344
+ const [search, load, readFile] = createSkillTools(f, skills);
345
+ registry.registerAll(search, load, readFile);
346
+ ```
347
+
348
+ Skills follow the [agentskills.io](https://agentskills.io) open standard — SKILL.md with YAML frontmatter. `skills.search` returns the lightweight index. `skills.load` returns full instructions. `skills.read_file` gives access to auxiliary files with **path traversal protection** (only files within the skill's directory). Custom search engines supported.
349
+
350
+ ```
351
+ skills/
352
+ ├── deployment/
353
+ │ ├── SKILL.md # name, description, full instructions
354
+ │ └── scripts/
355
+ │ └── deploy.sh # accessible via skills.read_file
356
+ └── database-migration/
357
+ └── SKILL.md
358
+ ```
359
+
360
+ ### Fluent API — Semantic Verbs & Chainable Builders
361
+
362
+ ```typescript
363
+ f.query('users.list') // readOnly: true — no side effects
364
+ f.action('users.create') // neutral — creates or updates
365
+ f.mutation('users.delete') // destructive: true — triggers confirmation dialogs
366
+ ```
367
+
368
+ Every builder method is chainable and fully typed. Types accumulate as you chain — the final `.handle()` has 100% accurate autocomplete with zero annotations:
369
+
370
+ ```typescript
371
+ export const deploy = f.mutation('infra.deploy')
372
+ .describe('Deploy infrastructure')
373
+ .instructions('Use ONLY after the user explicitly requests deployment.')
374
+ .withEnum('env', ['staging', 'production'] as const, 'Target environment')
375
+ .concurrency({ max: 2, queueSize: 5 })
376
+ .egress(1_000_000)
377
+ .idempotent()
378
+ .invalidates('infra.*')
379
+ .returns(DeployPresenter)
380
+ .handle(async function* (input, ctx) {
381
+ yield progress(10, 'Cloning repository...');
382
+ await cloneRepo(ctx.repoUrl);
383
+ yield progress(90, 'Running tests...');
384
+ const results = await runTests();
385
+ yield progress(100, 'Done!');
386
+ return results;
387
+ });
388
+ ```
389
+
390
+ `.instructions()` embeds prompt engineering. `.concurrency()` prevents backend overload. `.egress()` caps response size. `yield progress()` streams MCP progress notifications. `.cached()` / `.stale()` / `.invalidates()` control temporal awareness. `.sandboxed()` enables computation delegation. `.bindState()` enables FSM gating.
391
+
392
+ ### Middleware — Pre-Compiled, Zero-Allocation
393
+
394
+ tRPC-style context derivation. Middleware chains compiled at registration time into a single nested function — O(1) dispatch, no array iteration, no per-request allocation:
395
+
396
+ ```typescript
397
+ const requireAuth = f.middleware(async (ctx) => {
398
+ const user = await db.getUser(ctx.token);
399
+ if (!user) throw new Error('Unauthorized');
400
+ return { user, permissions: user.permissions };
401
+ });
402
+
403
+ // ctx.user and ctx.permissions — fully typed downstream. Zero annotations.
404
+ ```
405
+
406
+ Stack `.use()` calls for layered derivations: auth → permissions → tenant resolution → audit logging. Same `MiddlewareFn` signature works for both tools and prompts.
407
+
408
+ ### Fluent Router — Grouped Tooling
409
+
410
+ ```typescript
411
+ const users = f.router('users')
412
+ .describe('User management')
413
+ .use(requireAuth)
414
+ .tags('core');
415
+
416
+ export const listUsers = users.query('list').describe('List users').handle(/* ... */);
417
+ export const banUser = users.mutation('ban').describe('Ban a user').handle(/* ... */);
418
+ // Middleware, tags, prefix — all inherited automatically
419
+ ```
420
+
421
+ Discriminator enum compilation. Per-field annotations tell the LLM which parameters belong to which action. Tool exposition: `flat` (independent MCP tools) or `grouped` (one tool with enum discriminator).
422
+
423
+ ### tRPC-Style Client — Compile-Time Route Validation
424
+
425
+ ```typescript
426
+ import { createVurbClient } from '@vurb/core';
427
+ import type { AppRouter } from './server.js';
428
+
429
+ const client = createVurbClient<AppRouter>(transport);
430
+
431
+ await client.execute('projects.create', { workspace_id: 'ws_1', name: 'V2' });
432
+ // TS error on typos ('projetcs.create'), missing fields, type mismatches.
433
+ // Zero runtime cost. Client middleware (auth, logging). Batch execution.
434
+ ```
435
+
436
+ `createTypedRegistry()` is a curried double-generic — first call sets `TContext`, second infers all builder types. `InferRouter` is pure type-level.
437
+
438
+ ### Self-Healing Errors
439
+
440
+ ```typescript
441
+ // Validation errors → directed correction prompts
442
+ ❌ Validation failed for 'users.create':
443
+ • email — Invalid email format. You sent: 'admin@local'.
444
+ Expected: a valid email address (e.g. user@example.com).
445
+ 💡 Fix the fields above and call the action again.
446
+
447
+ // Business-logic errors → structured recovery with fluent builder
448
+ return f.error('NOT_FOUND', `Project '${input.id}' not found`)
449
+ .suggest('Call projects.list to find valid IDs')
450
+ .actions('projects.list')
451
+ .build();
452
+ ```
453
+
454
+ ### Capability Governance — Cryptographic Surface Integrity
455
+
456
+ Nine modules for SOC2-auditable AI deployments:
457
+
458
+ ```bash
459
+ npx @vurb/core lock --server ./src/server.ts # Generate vurb.lock
460
+ npx @vurb/core lock --check --server ./src/server.ts # Gate CI builds
461
+ ```
462
+
463
+ - **Capability Lockfile** — deterministic, git-diffable artifact capturing every tool's behavioral contract
464
+ - **Surface Integrity** — SHA-256 behavioral fingerprinting
465
+ - **Contract Diffing** — semantic delta engine with severity classification
466
+ - **Zero-Trust Attestation** — HMAC-SHA256 signing and runtime verification
467
+ - **Blast Radius Analysis** — entitlement scanning (filesystem, network, subprocess) with evasion detection
468
+ - **Token Economics** — cognitive overload profiling
469
+ - **Semantic Probing** — LLM-as-a-Judge for behavioral drift
470
+ - **Self-Healing Context** — contract delta injection into validation errors
471
+
472
+ PR diffs show exactly what changed in the AI-facing surface:
473
+
474
+ ```diff
475
+ "invoices": {
476
+ - "integrityDigest": "sha256:f6e5d4c3b2a1...",
477
+ + "integrityDigest": "sha256:9a8b7c6d5e4f...",
478
+ "behavior": {
479
+ - "systemRulesFingerprint": "static:abc",
480
+ + "systemRulesFingerprint": "dynamic",
481
+ }
482
+ }
483
+ ```
484
+
485
+ ---
486
+
487
+ ## Code Generators
488
+
489
+ ### OpenAPI → MCP in One Command
490
+
491
+ Turn any **REST/OpenAPI 3.x or Swagger 2.0** spec into a working MCP server — code generation or runtime proxy:
492
+
493
+ ```bash
494
+ npx openapi-gen generate -i ./petstore.yaml -o ./generated
495
+ API_BASE_URL=https://api.example.com npx tsx ./generated/server.ts
496
+ ```
497
+
498
+ Generates `models/` (Zod `.strict()` schemas), `views/` (Presenters), `agents/` (tool definitions with inferred annotations), `server.ts` (bootstrap). HTTP method → MCP annotation inference: `GET` → `readOnly`, `DELETE` → `destructive`, `PUT` → `idempotent`.
499
+
500
+ Runtime proxy mode with `loadOpenAPI()` for instant prototyping — no code generation step.
501
+
502
+ ### Prisma → MCP with Field-Level Security
503
+
504
+ A Prisma Generator that produces Vurb.ts tools and Presenters with field-level security, tenant isolation, and OOM protection:
505
+
506
+ ```prisma
507
+ generator mcp {
508
+ provider = "vurb-prisma-gen"
509
+ output = "../src/tools/database"
510
+ }
511
+
512
+ model User {
513
+ id String @id @default(uuid())
514
+ email String @unique
515
+ passwordHash String /// @vurb.hide ← physically excluded from schema
516
+ stripeToken String /// @vurb.hide ← physically excluded from schema
517
+ creditScore Int /// @vurb.describe("Score 0-1000. Above 700 is PREMIUM.")
518
+ tenantId String /// @vurb.tenantKey ← injected into every WHERE clause
519
+ }
520
+ ```
521
+
522
+ `npx prisma generate` → typed CRUD tools with pagination capped at 50, tenant isolation at the generated code level. Cross-tenant access is structurally impossible.
523
+
524
+ ### n8n Workflows → MCP Tools
525
+
526
+ Auto-discover n8n webhook workflows as MCP tools with tag filtering, live polling, and MVA interception:
527
+
528
+ ```typescript
529
+ const n8n = await createN8nConnector({
530
+ url: process.env.N8N_URL!,
531
+ apiKey: process.env.N8N_API_KEY!,
532
+ includeTags: ['ai-enabled'],
533
+ pollInterval: 60_000,
534
+ onChange: () => server.notification({ method: 'notifications/tools/list_changed' }),
535
+ });
536
+ ```
537
+
538
+ n8n handles the Stripe/Salesforce/webhook logic. Vurb.ts provides typing, Presenters, middleware, and access control.
539
+
540
+ ---
541
+
542
+ ## Inspector — Real-Time Dashboard
543
+
544
+ ```bash
545
+ npx @vurb/core inspect # Auto-discover and connect
546
+ npx @vurb/core inspect --demo # Built-in simulator
547
+ ```
548
+
549
+ ```
550
+ ┌──────────────────────────────────────────────────────────────┐
551
+ │ ● LIVE: PID 12345 │ RAM: [█████░░░] 28MB │ UP: 01:23 │
552
+ ├───────────────────────┬──────────────────────────────────────┤
553
+ │ TOOL LIST │ X-RAY: billing.create_invoice │
554
+ │ ✓ billing.create │ LATE GUILLOTINE: │
555
+ │ ✓ billing.get │ DB Raw : 4.2KB │
556
+ │ ✗ users.delete │ Wire : 1.1KB │
557
+ │ ✓ system.health │ SAVINGS : ████████░░ 73.8% │
558
+ ├───────────────────────┴──────────────────────────────────────┤
559
+ │ 19:32:01 ROUTE billing.create │ 19:32:01 EXEC ✓ 45ms│
560
+ └──────────────────────────────────────────────────────────────┘
561
+ ```
562
+
563
+ Connects via **Shadow Socket** (Named Pipe / Unix Domain Socket) — no stdio interference, no port conflicts. Real-time tool list, request stream, Late Guillotine visualization.
564
+
565
+ ---
566
+
567
+ ## Testing — Full Pipeline in RAM
568
+
569
+ `@vurb/testing` runs the actual execution pipeline — same code path as production — and returns `MvaTestResult` with each MVA layer decomposed:
570
+
571
+ ```typescript
572
+ import { createVurbTester } from '@vurb/testing';
573
+
574
+ const tester = createVurbTester(registry, {
575
+ contextFactory: () => ({ prisma: mockPrisma, tenantId: 't_42', role: 'ADMIN' }),
576
+ });
577
+
578
+ describe('SOC2 Data Governance', () => {
579
+ it('strips PII before it reaches the LLM', async () => {
580
+ const result = await tester.callAction('db_user', 'find_many', { take: 10 });
581
+ for (const user of result.data) {
582
+ expect(user).not.toHaveProperty('passwordHash');
583
+ expect(user).not.toHaveProperty('tenantId');
584
+ }
585
+ });
586
+
587
+ it('sends governance rules with data', async () => {
588
+ const result = await tester.callAction('db_user', 'find_many', { take: 5 });
589
+ expect(result.systemRules).toContain('Email addresses are PII.');
590
+ });
591
+
592
+ it('blocks guest access', async () => {
593
+ const result = await tester.callAction('db_user', 'find_many', { take: 5 }, { role: 'GUEST' });
594
+ expect(result.isError).toBe(true);
595
+ });
596
+ });
597
+ ```
598
+
599
+ Assert every MVA layer: `result.data` (egress firewall), `result.systemRules` (JIT rules), `result.uiBlocks` (server-rendered charts), `result.data.length` (cognitive guardrail), `rawResponse` (HATEOAS hints). Works with Vitest, Jest, Mocha, or `node:test`.
600
+
601
+ ---
602
+
603
+ ## Deploy Anywhere
604
+
605
+ Every tool is transport-agnostic. Same code on Stdio, SSE, and serverless:
606
+
607
+ ### Vercel Functions
608
+
609
+ ```typescript
610
+ import { vercelAdapter } from '@vurb/vercel';
611
+ export const POST = vercelAdapter({ registry, contextFactory });
612
+ export const runtime = 'edge'; // global edge distribution
613
+ ```
614
+
615
+ ### Cloudflare Workers
616
+
617
+ ```typescript
618
+ import { cloudflareWorkersAdapter } from '@vurb/cloudflare';
619
+ export default cloudflareWorkersAdapter({ registry, contextFactory });
620
+ // D1 for edge-native SQL, KV for sub-ms reads, waitUntil for telemetry
621
+ ```
622
+
623
+ ---
624
+
625
+ ## Ecosystem
626
+
627
+ ### Adapters
628
+
629
+ | Package | Target |
630
+ |---|---|
631
+ | [`@vurb/vercel`](https://vurb.vinkius.com/vercel-adapter) | Vercel Functions (Edge / Node.js) |
632
+ | [`@vurb/cloudflare`](https://vurb.vinkius.com/cloudflare-adapter) | Cloudflare Workers — zero polyfills |
633
+
634
+ ### Generators & Connectors
635
+
636
+ | Package | Purpose |
637
+ |---|---|
638
+ | [`@vurb/openapi-gen`](https://vurb.vinkius.com/openapi-gen) | Generate typed tools from OpenAPI 3.x / Swagger 2.0 specs |
639
+ | [`@vurb/prisma-gen`](https://vurb.vinkius.com/prisma-gen) | Generate CRUD tools with field-level security from Prisma |
640
+ | [`@vurb/n8n`](https://vurb.vinkius.com/n8n-connector) | Auto-discover n8n workflows as MCP tools |
641
+ | [`@vurb/aws`](https://vurb.vinkius.com/aws-connector) | Auto-discover AWS Lambda & Step Functions |
642
+ | [`@vurb/skills`](https://vurb.vinkius.com/skills) | Progressive instruction distribution for agents |
643
+
644
+ ### Security & Auth
645
+
646
+ | Package | Purpose |
647
+ |---|---|
648
+ | [`@vurb/oauth`](https://vurb.vinkius.com/oauth) | RFC 8628 Device Flow authentication |
649
+ | [`@vurb/jwt`](https://vurb.vinkius.com/jwt) | JWT verification — HS256/RS256/ES256 + JWKS |
650
+ | [`@vurb/api-key`](https://vurb.vinkius.com/api-key) | API key validation with timing-safe comparison |
651
+
652
+ ### Developer Experience
653
+
654
+ | Package | Purpose |
655
+ |---|---|
656
+ | [`@vurb/testing`](https://vurb.vinkius.com/testing) | In-memory pipeline testing with MVA layer assertions |
657
+ | [`@vurb/inspector`](https://vurb.vinkius.com/inspector) | Real-time terminal dashboard via Shadow Socket |
658
+
659
+ ---
660
+
661
+ ## Documentation
662
+
663
+ Full guides, API reference, and cookbook recipes:
664
+
665
+ **[Vurb.ts.vinkius.com](https://vurb.vinkius.com/)**
666
+
667
+ ## Contributing
668
+
669
+ See [CONTRIBUTING.md](https://github.com/vinkius-labs/vurb.ts/blob/main/CONTRIBUTING.md) for development setup and PR guidelines.
670
+
671
+ ## Security
672
+
673
+ See [SECURITY.md](https://github.com/vinkius-labs/vurb.ts/blob/main/SECURITY.md) for reporting vulnerabilities.
674
+
675
+ ## License
676
+
677
+ [Apache 2.0](https://github.com/vinkius-labs/vurb.ts/blob/main/LICENSE)