@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,225 @@
1
+ /**
2
+ * SandboxEngine — Zero-Trust V8 Isolate for Computation Delegation
3
+ *
4
+ * Allows LLMs to send JavaScript functions as strings to be executed
5
+ * in a sealed V8 isolate. The data stays on the client's machine,
6
+ * only the result travels back to the LLM.
7
+ *
8
+ * Architecture (V8 Engineering Rules):
9
+ * 1. ONE Isolate per SandboxEngine (boot ~5-10ms), reused across requests
10
+ * 2. NEW Context per execute() call (~0.1ms), pristine and empty
11
+ * 3. ExternalCopy + Script + Context are ALWAYS released in `finally`
12
+ * 4. Execution is ALWAYS async (script.run, never runSync)
13
+ * 5. Context is empty — no process, require, fs, globalThis injected
14
+ * 6. AbortSignal kills isolate.dispose() instantly (Connection Watchdog)
15
+ *
16
+ * The `isolated-vm` package is a peerDependency (optional).
17
+ * If not installed, the engine throws a clear error at construction time.
18
+ *
19
+ * ┌─────────────────────────────────────────────────────────┐
20
+ * │ SandboxEngine (owns 1 Isolate) │
21
+ * │ │
22
+ * │ execute(code, data, { signal? }) │
23
+ * │ ┌──────────┐ │
24
+ * │ │ Abort? │ pre-flight signal check │
25
+ * │ ├──────────┤ │
26
+ * │ │ Guard │ fail-fast syntax check │
27
+ * │ ├──────────┤ │
28
+ * │ │ Context │ new per request (empty!) │
29
+ * │ ├──────────┤ │
30
+ * │ │ Copy In │ ExternalCopy (deep, no refs) │
31
+ * │ ├──────────┤ │
32
+ * │ │ Compile │ isolate.compileScript │
33
+ * │ ├──────────┤ │
34
+ * │ │ Run │ script.run (ASYNC, with timeout + abort) │
35
+ * │ ├──────────┤ │
36
+ * │ │ Copy Out │ JSON.parse result │
37
+ * │ └──────────┘ │
38
+ * │ │
39
+ * │ finally: signal.removeEventListener() │
40
+ * │ inputCopy.release() │
41
+ * │ script.release() │
42
+ * │ context.release() │
43
+ * └─────────────────────────────────────────────────────────┘
44
+ *
45
+ * @module
46
+ */
47
+ import { type TelemetrySink } from '../observability/TelemetryEvent.js';
48
+ /**
49
+ * Configuration for a SandboxEngine instance.
50
+ *
51
+ * All fields are optional — sensible defaults are applied.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const engine = new SandboxEngine({
56
+ * timeout: 3000, // Kill after 3s
57
+ * memoryLimit: 64, // 64MB per isolate
58
+ * maxOutputBytes: 512_000, // 500KB max result
59
+ * });
60
+ * ```
61
+ */
62
+ export interface SandboxConfig {
63
+ /**
64
+ * Maximum execution time in milliseconds.
65
+ * If the script exceeds this, the V8 isolate kills it.
66
+ * @default 5000
67
+ */
68
+ timeout?: number;
69
+ /**
70
+ * Maximum memory for the V8 isolate in megabytes.
71
+ * If exceeded, the isolate dies and is recreated on next call.
72
+ * @default 128
73
+ */
74
+ memoryLimit?: number;
75
+ /**
76
+ * Maximum size of the serialized output in bytes.
77
+ * Prevents a malicious script from returning gigabytes of data.
78
+ * @default 1_048_576 (1MB)
79
+ */
80
+ maxOutputBytes?: number;
81
+ }
82
+ /**
83
+ * Error codes for sandbox execution failures.
84
+ *
85
+ * - `TIMEOUT`: Script exceeded the time limit
86
+ * - `MEMORY`: Isolate ran out of memory (auto-recovered)
87
+ * - `SYNTAX`: JavaScript syntax error in the provided code
88
+ * - `RUNTIME`: Script threw an error during execution
89
+ * - `OUTPUT_TOO_LARGE`: Result exceeds `maxOutputBytes`
90
+ * - `INVALID_CODE`: Failed the SandboxGuard fail-fast check
91
+ * - `INVALID_DATA`: Input data contains non-serializable values
92
+ * - `UNAVAILABLE`: `isolated-vm` is not installed
93
+ * - `ABORTED`: Execution was cancelled via AbortSignal (client disconnect)
94
+ */
95
+ export type SandboxErrorCode = 'TIMEOUT' | 'MEMORY' | 'SYNTAX' | 'RUNTIME' | 'OUTPUT_TOO_LARGE' | 'INVALID_CODE' | 'INVALID_DATA' | 'UNAVAILABLE' | 'ABORTED';
96
+ /**
97
+ * Result of a sandbox execution.
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const result = await engine.execute('(data) => data.length', [1, 2, 3]);
102
+ * if (result.ok) {
103
+ * console.log(result.value); // 3
104
+ * console.log(result.executionMs); // 0.42
105
+ * } else {
106
+ * console.log(result.code); // 'TIMEOUT'
107
+ * console.log(result.error); // 'Script execution timed out (5000ms)'
108
+ * }
109
+ * ```
110
+ */
111
+ export type SandboxResult<T = unknown> = {
112
+ readonly ok: true;
113
+ readonly value: T;
114
+ readonly executionMs: number;
115
+ } | {
116
+ readonly ok: false;
117
+ readonly error: string;
118
+ readonly code: SandboxErrorCode;
119
+ };
120
+ /**
121
+ * Reset the cached isolated-vm module reference.
122
+ * Exported exclusively for testing — allows mock/unmock cycles
123
+ * without process restart (Bug #137).
124
+ * @internal
125
+ */
126
+ export declare function resetIvmCache(): void;
127
+ /**
128
+ * Zero-trust V8 sandbox for executing LLM-provided JavaScript.
129
+ *
130
+ * Creates a single V8 `Isolate` at construction time and reuses it
131
+ * across all `execute()` calls. Each call gets a fresh, empty `Context`
132
+ * with no dangerous globals (no `process`, `require`, `fs`, etc.).
133
+ *
134
+ * If the isolate dies (e.g., OOM), it is automatically recreated
135
+ * on the next `execute()` call.
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * const sandbox = new SandboxEngine({ timeout: 3000, memoryLimit: 64 });
140
+ *
141
+ * const result = await sandbox.execute(
142
+ * '(data) => data.filter(d => d.risk > 90)',
143
+ * [{ name: 'A', risk: 95 }, { name: 'B', risk: 30 }],
144
+ * );
145
+ *
146
+ * if (result.ok) {
147
+ * console.log(result.value); // [{ name: 'A', risk: 95 }]
148
+ * }
149
+ *
150
+ * // IMPORTANT: dispose when no longer needed
151
+ * sandbox.dispose();
152
+ * ```
153
+ */
154
+ export declare class SandboxEngine {
155
+ private readonly _timeout;
156
+ private readonly _memoryLimit;
157
+ private readonly _maxOutputBytes;
158
+ private _isolate;
159
+ private _disposed;
160
+ private _telemetry?;
161
+ /** Number of in-flight execute() calls sharing the isolate. */
162
+ private _activeExecutions;
163
+ constructor(config?: SandboxConfig);
164
+ /**
165
+ * Set the telemetry sink for `sandbox.exec` event emission.
166
+ * When set, every `execute()` call emits a telemetry event
167
+ * visible in the Inspector TUI.
168
+ */
169
+ telemetry(sink: TelemetrySink): this;
170
+ /**
171
+ * Execute a JavaScript function string against the provided data.
172
+ *
173
+ * The function is compiled and run in a sealed V8 isolate with:
174
+ * - No `process`, `require`, `fs`, or network access
175
+ * - Strict timeout enforcement (async, non-blocking)
176
+ * - Memory limit enforcement
177
+ * - Automatic C++ pointer cleanup (ExternalCopy, Script, Context)
178
+ * - Cooperative cancellation via AbortSignal (Connection Watchdog)
179
+ *
180
+ * @param code - A JavaScript function expression as a string.
181
+ * Must be an arrow function or function expression.
182
+ * Example: `(data) => data.filter(d => d.value > 10)`
183
+ *
184
+ * @param data - The data to pass into the function.
185
+ * Deeply copied into the isolate (no references leak).
186
+ *
187
+ * @param options - Optional execution options.
188
+ * @param options.signal - AbortSignal for cooperative cancellation.
189
+ * When the signal fires (e.g., MCP client disconnects), the engine
190
+ * calls `isolate.dispose()` to kill the V8 C++ threads instantly.
191
+ * The isolate is auto-recovered on the next `.execute()` call.
192
+ *
193
+ * @returns A `SandboxResult` with the computed value or an error.
194
+ */
195
+ execute<T = unknown>(code: string, data: unknown, options?: {
196
+ signal?: AbortSignal;
197
+ }): Promise<SandboxResult<T>>;
198
+ /**
199
+ * Release all resources held by this engine.
200
+ *
201
+ * After calling `dispose()`, any subsequent `execute()` calls
202
+ * will return `{ ok: false, code: 'UNAVAILABLE' }`.
203
+ */
204
+ dispose(): void;
205
+ /**
206
+ * Check if the engine has been disposed.
207
+ */
208
+ get isDisposed(): boolean;
209
+ /**
210
+ * Emit a `sandbox.exec` telemetry event if a sink is configured.
211
+ * @internal
212
+ */
213
+ private _emitTelemetry;
214
+ /**
215
+ * Ensure the isolate is alive. If it died (OOM), create a new one.
216
+ * @internal
217
+ */
218
+ private _ensureIsolate;
219
+ /**
220
+ * Classify an error from V8 execution into a typed SandboxResult.
221
+ * @internal
222
+ */
223
+ private _classifyError;
224
+ }
225
+ //# sourceMappingURL=SandboxEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxEngine.d.ts","sourceRoot":"","sources":["../../src/sandbox/SandboxEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAGH,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAI/F;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GACtB,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,kBAAkB,GAClB,cAAc,GACd,cAAc,GACd,aAAa,GACb,SAAS,CAAC;AAEhB;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAC/B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAkCtF;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,+DAA+D;IAC/D,OAAO,CAAC,iBAAiB,CAAK;gBAElB,MAAM,CAAC,EAAE,aAAa;IAgBlC;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKpC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,OAAO,CAAC,CAAC,GAAG,OAAO,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACnC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAqK5B;;;;;OAKG;IACH,OAAO,IAAI,IAAI;IAUf;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;OAGG;IACH,OAAO,CAAC,cAAc;IActB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAatB;;;OAGG;IACH,OAAO,CAAC,cAAc;CA6CzB"}
@@ -0,0 +1,437 @@
1
+ /**
2
+ * SandboxEngine — Zero-Trust V8 Isolate for Computation Delegation
3
+ *
4
+ * Allows LLMs to send JavaScript functions as strings to be executed
5
+ * in a sealed V8 isolate. The data stays on the client's machine,
6
+ * only the result travels back to the LLM.
7
+ *
8
+ * Architecture (V8 Engineering Rules):
9
+ * 1. ONE Isolate per SandboxEngine (boot ~5-10ms), reused across requests
10
+ * 2. NEW Context per execute() call (~0.1ms), pristine and empty
11
+ * 3. ExternalCopy + Script + Context are ALWAYS released in `finally`
12
+ * 4. Execution is ALWAYS async (script.run, never runSync)
13
+ * 5. Context is empty — no process, require, fs, globalThis injected
14
+ * 6. AbortSignal kills isolate.dispose() instantly (Connection Watchdog)
15
+ *
16
+ * The `isolated-vm` package is a peerDependency (optional).
17
+ * If not installed, the engine throws a clear error at construction time.
18
+ *
19
+ * ┌─────────────────────────────────────────────────────────┐
20
+ * │ SandboxEngine (owns 1 Isolate) │
21
+ * │ │
22
+ * │ execute(code, data, { signal? }) │
23
+ * │ ┌──────────┐ │
24
+ * │ │ Abort? │ pre-flight signal check │
25
+ * │ ├──────────┤ │
26
+ * │ │ Guard │ fail-fast syntax check │
27
+ * │ ├──────────┤ │
28
+ * │ │ Context │ new per request (empty!) │
29
+ * │ ├──────────┤ │
30
+ * │ │ Copy In │ ExternalCopy (deep, no refs) │
31
+ * │ ├──────────┤ │
32
+ * │ │ Compile │ isolate.compileScript │
33
+ * │ ├──────────┤ │
34
+ * │ │ Run │ script.run (ASYNC, with timeout + abort) │
35
+ * │ ├──────────┤ │
36
+ * │ │ Copy Out │ JSON.parse result │
37
+ * │ └──────────┘ │
38
+ * │ │
39
+ * │ finally: signal.removeEventListener() │
40
+ * │ inputCopy.release() │
41
+ * │ script.release() │
42
+ * │ context.release() │
43
+ * └─────────────────────────────────────────────────────────┘
44
+ *
45
+ * @module
46
+ */
47
+ import { validateSandboxCode } from './SandboxGuard.js';
48
+ import {} from '../observability/TelemetryEvent.js';
49
+ // ── Constants ────────────────────────────────────────────
50
+ const DEFAULT_TIMEOUT_MS = 5_000;
51
+ const DEFAULT_MEMORY_LIMIT_MB = 128;
52
+ const DEFAULT_MAX_OUTPUT_BYTES = 1_048_576; // 1MB
53
+ const MAX_CODE_LENGTH = 65_536; // 64KB — generous for any legitimate sandbox function
54
+ const TEXT_ENCODER = new TextEncoder(); // Bug #138: reuse stateless encoder
55
+ // ── Lazy Require ─────────────────────────────────────────
56
+ /**
57
+ * Lazy-load isolated-vm to avoid hard dependency.
58
+ * Returns `null` if the package is not installed.
59
+ * @internal
60
+ */
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+ let _ivm = undefined;
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ function getIvm() {
65
+ if (_ivm !== undefined)
66
+ return _ivm;
67
+ try {
68
+ // Dynamic import would be cleaner but isolated-vm uses
69
+ // native bindings that require synchronous resolution.
70
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
71
+ _ivm = require('isolated-vm');
72
+ }
73
+ catch {
74
+ _ivm = null;
75
+ }
76
+ return _ivm;
77
+ }
78
+ /**
79
+ * Reset the cached isolated-vm module reference.
80
+ * Exported exclusively for testing — allows mock/unmock cycles
81
+ * without process restart (Bug #137).
82
+ * @internal
83
+ */
84
+ export function resetIvmCache() {
85
+ _ivm = undefined;
86
+ }
87
+ // ── Engine Implementation ────────────────────────────────
88
+ /**
89
+ * Zero-trust V8 sandbox for executing LLM-provided JavaScript.
90
+ *
91
+ * Creates a single V8 `Isolate` at construction time and reuses it
92
+ * across all `execute()` calls. Each call gets a fresh, empty `Context`
93
+ * with no dangerous globals (no `process`, `require`, `fs`, etc.).
94
+ *
95
+ * If the isolate dies (e.g., OOM), it is automatically recreated
96
+ * on the next `execute()` call.
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * const sandbox = new SandboxEngine({ timeout: 3000, memoryLimit: 64 });
101
+ *
102
+ * const result = await sandbox.execute(
103
+ * '(data) => data.filter(d => d.risk > 90)',
104
+ * [{ name: 'A', risk: 95 }, { name: 'B', risk: 30 }],
105
+ * );
106
+ *
107
+ * if (result.ok) {
108
+ * console.log(result.value); // [{ name: 'A', risk: 95 }]
109
+ * }
110
+ *
111
+ * // IMPORTANT: dispose when no longer needed
112
+ * sandbox.dispose();
113
+ * ```
114
+ */
115
+ export class SandboxEngine {
116
+ _timeout;
117
+ _memoryLimit;
118
+ _maxOutputBytes;
119
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
+ _isolate; // ivm.Isolate
121
+ _disposed = false;
122
+ _telemetry;
123
+ /** Number of in-flight execute() calls sharing the isolate. */
124
+ _activeExecutions = 0;
125
+ constructor(config) {
126
+ this._timeout = config?.timeout ?? DEFAULT_TIMEOUT_MS;
127
+ this._memoryLimit = config?.memoryLimit ?? DEFAULT_MEMORY_LIMIT_MB;
128
+ this._maxOutputBytes = config?.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
129
+ const ivm = getIvm();
130
+ if (!ivm) {
131
+ throw new Error('SandboxEngine requires the "isolated-vm" package. ' +
132
+ 'Install it with: npm install isolated-vm');
133
+ }
134
+ this._isolate = new ivm.Isolate({ memoryLimit: this._memoryLimit });
135
+ }
136
+ /**
137
+ * Set the telemetry sink for `sandbox.exec` event emission.
138
+ * When set, every `execute()` call emits a telemetry event
139
+ * visible in the Inspector TUI.
140
+ */
141
+ telemetry(sink) {
142
+ this._telemetry = sink;
143
+ return this;
144
+ }
145
+ /**
146
+ * Execute a JavaScript function string against the provided data.
147
+ *
148
+ * The function is compiled and run in a sealed V8 isolate with:
149
+ * - No `process`, `require`, `fs`, or network access
150
+ * - Strict timeout enforcement (async, non-blocking)
151
+ * - Memory limit enforcement
152
+ * - Automatic C++ pointer cleanup (ExternalCopy, Script, Context)
153
+ * - Cooperative cancellation via AbortSignal (Connection Watchdog)
154
+ *
155
+ * @param code - A JavaScript function expression as a string.
156
+ * Must be an arrow function or function expression.
157
+ * Example: `(data) => data.filter(d => d.value > 10)`
158
+ *
159
+ * @param data - The data to pass into the function.
160
+ * Deeply copied into the isolate (no references leak).
161
+ *
162
+ * @param options - Optional execution options.
163
+ * @param options.signal - AbortSignal for cooperative cancellation.
164
+ * When the signal fires (e.g., MCP client disconnects), the engine
165
+ * calls `isolate.dispose()` to kill the V8 C++ threads instantly.
166
+ * The isolate is auto-recovered on the next `.execute()` call.
167
+ *
168
+ * @returns A `SandboxResult` with the computed value or an error.
169
+ */
170
+ async execute(code, data, options) {
171
+ if (this._disposed) {
172
+ return { ok: false, error: 'SandboxEngine has been disposed.', code: 'UNAVAILABLE' };
173
+ }
174
+ const signal = options?.signal;
175
+ // ── Step 0: Pre-flight abort check ───────────────
176
+ // If the signal is already aborted (client disconnected before
177
+ // we even started), skip all V8 allocation entirely.
178
+ if (signal?.aborted) {
179
+ return {
180
+ ok: false,
181
+ error: 'Execution aborted: client disconnected before sandbox started.',
182
+ code: 'ABORTED',
183
+ };
184
+ }
185
+ // ── Step 0b: Code length guard ──────────────────
186
+ // Prevent host-side OOM before V8 is even involved.
187
+ // The V8 memoryLimit only bounds the isolate heap, not the host.
188
+ if (code.length > MAX_CODE_LENGTH) {
189
+ return {
190
+ ok: false,
191
+ error: `Code length (${code.length} chars) exceeds maximum (${MAX_CODE_LENGTH} chars). ` +
192
+ 'Sandbox functions should be small, pure transformations.',
193
+ code: 'INVALID_CODE',
194
+ };
195
+ }
196
+ // ── Step 1: Fail-fast guard ─────────────────────
197
+ const guard = validateSandboxCode(code);
198
+ if (!guard.ok) {
199
+ return { ok: false, error: guard.violation, code: 'INVALID_CODE' };
200
+ }
201
+ // ── Step 2: Ensure isolate is alive ─────────────
202
+ this._ensureIsolate();
203
+ const ivm = getIvm();
204
+ const isolate = this._isolate;
205
+ this._activeExecutions++;
206
+ // ── Step 3: Wire abort kill-switch ──────────────
207
+ // When the signal fires and this is the ONLY execution in
208
+ // progress, we call isolate.dispose() to kill V8 instantly.
209
+ //
210
+ // Bug #142: When other executions share the same isolate
211
+ // (activeExecutions > 1), we cannot dispose the isolate
212
+ // without killing all concurrent work (Bug #63 fix). Instead
213
+ // we set the `aborted` flag AND release the per-request
214
+ // context (if already created) to interrupt the running
215
+ // script without collateral damage. If context is not yet
216
+ // created, the script will terminate at its timeout boundary.
217
+ let aborted = false;
218
+ const onAbort = signal ? () => {
219
+ aborted = true;
220
+ if (this._activeExecutions <= 1) {
221
+ try {
222
+ isolate.dispose();
223
+ }
224
+ catch { /* may already be dead */ }
225
+ }
226
+ else {
227
+ // Release this request's context to interrupt execution
228
+ // without killing the shared isolate (Bug #142).
229
+ try {
230
+ context?.release();
231
+ }
232
+ catch { /* may already be released */ }
233
+ }
234
+ } : undefined;
235
+ if (signal && onAbort) {
236
+ signal.addEventListener('abort', onAbort, { once: true });
237
+ }
238
+ // ── Step 4: Execute in sealed context ───────────
239
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
240
+ let inputCopy; // ivm.ExternalCopy
241
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
242
+ let context; // ivm.Context
243
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
244
+ let script; // ivm.Script
245
+ const startMs = performance.now();
246
+ try {
247
+ // Create pristine context (NO globals injected — this IS the security)
248
+ context = await isolate.createContext();
249
+ // Deep-copy data into isolated heap (no references!)
250
+ // Bug #135: catch serialization errors from ExternalCopy separately
251
+ try {
252
+ inputCopy = new ivm.ExternalCopy(data);
253
+ }
254
+ catch (copyErr) {
255
+ const copyMsg = copyErr instanceof Error ? copyErr.message : String(copyErr);
256
+ const result = {
257
+ ok: false,
258
+ error: `Data serialization error: ${copyMsg}. The input data contains non-serializable values (functions, Symbols, WeakRefs, etc.).`,
259
+ code: 'INVALID_DATA',
260
+ };
261
+ this._emitTelemetry(result);
262
+ return result;
263
+ }
264
+ await context.global.set('__input__', inputCopy.copyInto());
265
+ // Compile with wrapper: call the function and serialize result
266
+ const wrappedCode = `const __fn__ = ${code};\nJSON.stringify(__fn__(__input__));`;
267
+ script = await isolate.compileScript(wrappedCode);
268
+ // ASYNC execution — never blocks the Node.js event loop
269
+ const rawResult = await script.run(context, { timeout: this._timeout });
270
+ const executionMs = performance.now() - startMs;
271
+ // ── Step 5: Output size guard ───────────────
272
+ if (typeof rawResult === 'string') {
273
+ const outputByteLength = TEXT_ENCODER.encode(rawResult).byteLength;
274
+ if (outputByteLength > this._maxOutputBytes) {
275
+ const oversized = {
276
+ ok: false,
277
+ error: `Output size (${outputByteLength} bytes) exceeds limit (${this._maxOutputBytes} bytes). ` +
278
+ 'Use more selective filters to reduce the result set.',
279
+ code: 'OUTPUT_TOO_LARGE',
280
+ };
281
+ this._emitTelemetry(oversized);
282
+ return oversized;
283
+ }
284
+ }
285
+ // ── Step 6: Parse result ────────────────────
286
+ const parsed = typeof rawResult === 'string' ? JSON.parse(rawResult) : rawResult;
287
+ const result = { ok: true, value: parsed, executionMs };
288
+ this._emitTelemetry(result);
289
+ return result;
290
+ }
291
+ catch (err) {
292
+ // If the abort listener disposed the isolate, classify as ABORTED
293
+ // (not MEMORY — the user disconnected, not an OOM condition)
294
+ if (aborted) {
295
+ const result = {
296
+ ok: false,
297
+ error: 'Execution aborted: client disconnected during sandbox execution.',
298
+ code: 'ABORTED',
299
+ };
300
+ this._emitTelemetry(result);
301
+ return result;
302
+ }
303
+ const result = this._classifyError(err);
304
+ this._emitTelemetry(result);
305
+ return result;
306
+ }
307
+ finally {
308
+ // ── MANDATORY ABORT LISTENER CLEANUP ─────────
309
+ // Remove the listener to prevent memory leaks when
310
+ // execution completes before the signal fires.
311
+ if (signal && onAbort) {
312
+ signal.removeEventListener('abort', onAbort);
313
+ }
314
+ // ── MANDATORY C++ POINTER RELEASE ────────────
315
+ // Order matters: release inner resources first.
316
+ // After abort-triggered dispose, these will throw
317
+ // but the catch blocks handle dead-isolate gracefully.
318
+ try {
319
+ inputCopy?.release();
320
+ }
321
+ catch { /* already released or isolate dead */ }
322
+ try {
323
+ script?.release();
324
+ }
325
+ catch { /* already released or isolate dead */ }
326
+ try {
327
+ context?.release();
328
+ }
329
+ catch { /* already released or isolate dead */ }
330
+ this._activeExecutions--;
331
+ }
332
+ }
333
+ /**
334
+ * Release all resources held by this engine.
335
+ *
336
+ * After calling `dispose()`, any subsequent `execute()` calls
337
+ * will return `{ ok: false, code: 'UNAVAILABLE' }`.
338
+ */
339
+ dispose() {
340
+ if (this._disposed)
341
+ return;
342
+ this._disposed = true;
343
+ try {
344
+ this._isolate?.dispose();
345
+ }
346
+ catch {
347
+ // Isolate may already be dead (OOM)
348
+ }
349
+ }
350
+ /**
351
+ * Check if the engine has been disposed.
352
+ */
353
+ get isDisposed() {
354
+ return this._disposed;
355
+ }
356
+ /**
357
+ * Emit a `sandbox.exec` telemetry event if a sink is configured.
358
+ * @internal
359
+ */
360
+ _emitTelemetry(result) {
361
+ if (!this._telemetry)
362
+ return;
363
+ const event = {
364
+ type: 'sandbox.exec',
365
+ ok: result.ok,
366
+ executionMs: result.ok ? result.executionMs : 0,
367
+ ...(!result.ok ? { errorCode: result.code } : {}),
368
+ timestamp: Date.now(),
369
+ };
370
+ this._telemetry(event);
371
+ }
372
+ // ── Private ──────────────────────────────────────────
373
+ /**
374
+ * Ensure the isolate is alive. If it died (OOM), create a new one.
375
+ * @internal
376
+ */
377
+ _ensureIsolate() {
378
+ const ivm = getIvm();
379
+ // Check if isolate is still usable
380
+ try {
381
+ if (this._isolate?.isDisposed) {
382
+ this._isolate = new ivm.Isolate({ memoryLimit: this._memoryLimit });
383
+ }
384
+ }
385
+ catch {
386
+ // isDisposed threw → isolate is dead, recreate
387
+ this._isolate = new ivm.Isolate({ memoryLimit: this._memoryLimit });
388
+ }
389
+ }
390
+ /**
391
+ * Classify an error from V8 execution into a typed SandboxResult.
392
+ * @internal
393
+ */
394
+ _classifyError(err) {
395
+ const message = err instanceof Error ? err.message : String(err);
396
+ // Timeout: isolated-vm throws a specific error
397
+ if (message.includes('Script execution timed out')) {
398
+ return {
399
+ ok: false,
400
+ error: `Script execution timed out (${this._timeout}ms). ` +
401
+ 'Simplify the computation or increase the timeout limit.',
402
+ code: 'TIMEOUT',
403
+ };
404
+ }
405
+ // Memory: V8 kills the isolate
406
+ if (message.includes('Isolate was disposed') ||
407
+ message.includes('out of memory') ||
408
+ message.includes('allocation failed')) {
409
+ // Mark isolate for recreation on next call
410
+ try {
411
+ this._isolate?.dispose();
412
+ }
413
+ catch { /* ignore */ }
414
+ return {
415
+ ok: false,
416
+ error: `Isolate ran out of memory (${this._memoryLimit}MB limit). ` +
417
+ 'Reduce the data size or simplify the computation.',
418
+ code: 'MEMORY',
419
+ };
420
+ }
421
+ // Syntax: V8 compilation error
422
+ if (message.includes('SyntaxError')) {
423
+ return {
424
+ ok: false,
425
+ error: `JavaScript syntax error: ${message}`,
426
+ code: 'SYNTAX',
427
+ };
428
+ }
429
+ // Runtime: any other V8 error (ReferenceError, TypeError, etc.)
430
+ return {
431
+ ok: false,
432
+ error: `Runtime error: ${message}`,
433
+ code: 'RUNTIME',
434
+ };
435
+ }
436
+ }
437
+ //# sourceMappingURL=SandboxEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxEngine.js","sourceRoot":"","sources":["../../src/sandbox/SandboxEngine.ts"],"names":[],"mappings":"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"}