@syrin/cli 1.3.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 (438) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +302 -0
  3. package/dist/cli/commands/analyse.d.ts +16 -0
  4. package/dist/cli/commands/analyse.js +61 -0
  5. package/dist/cli/commands/dev.d.ts +23 -0
  6. package/dist/cli/commands/dev.js +419 -0
  7. package/dist/cli/commands/doctor.d.ts +10 -0
  8. package/dist/cli/commands/doctor.js +195 -0
  9. package/dist/cli/commands/index.d.ts +12 -0
  10. package/dist/cli/commands/index.js +12 -0
  11. package/dist/cli/commands/init.d.ts +16 -0
  12. package/dist/cli/commands/init.js +90 -0
  13. package/dist/cli/commands/list.d.ts +15 -0
  14. package/dist/cli/commands/list.js +50 -0
  15. package/dist/cli/commands/rollback.d.ts +12 -0
  16. package/dist/cli/commands/rollback.js +101 -0
  17. package/dist/cli/commands/test.d.ts +31 -0
  18. package/dist/cli/commands/test.js +88 -0
  19. package/dist/cli/commands/update.d.ts +9 -0
  20. package/dist/cli/commands/update.js +76 -0
  21. package/dist/cli/index.d.ts +13 -0
  22. package/dist/cli/index.js +342 -0
  23. package/dist/cli/prompts/index.d.ts +5 -0
  24. package/dist/cli/prompts/index.js +5 -0
  25. package/dist/cli/prompts/init-prompt.d.ts +17 -0
  26. package/dist/cli/prompts/init-prompt.js +263 -0
  27. package/dist/cli/utils/command-error-handler.d.ts +14 -0
  28. package/dist/cli/utils/command-error-handler.js +35 -0
  29. package/dist/cli/utils/common-types.d.ts +24 -0
  30. package/dist/cli/utils/common-types.js +6 -0
  31. package/dist/cli/utils/connection-handler.d.ts +37 -0
  32. package/dist/cli/utils/connection-handler.js +90 -0
  33. package/dist/cli/utils/index.d.ts +11 -0
  34. package/dist/cli/utils/index.js +11 -0
  35. package/dist/cli/utils/option-parsers.d.ts +41 -0
  36. package/dist/cli/utils/option-parsers.js +92 -0
  37. package/dist/cli/utils/output-utils.d.ts +12 -0
  38. package/dist/cli/utils/output-utils.js +21 -0
  39. package/dist/cli/utils/transport-resolver.d.ts +33 -0
  40. package/dist/cli/utils/transport-resolver.js +82 -0
  41. package/dist/cli/utils/version-banner.d.ts +10 -0
  42. package/dist/cli/utils/version-banner.js +26 -0
  43. package/dist/config/env-checker.d.ts +37 -0
  44. package/dist/config/env-checker.js +136 -0
  45. package/dist/config/generator.d.ts +19 -0
  46. package/dist/config/generator.js +196 -0
  47. package/dist/config/index.d.ts +9 -0
  48. package/dist/config/index.js +9 -0
  49. package/dist/config/loader.d.ts +19 -0
  50. package/dist/config/loader.js +57 -0
  51. package/dist/config/schema.d.ts +42 -0
  52. package/dist/config/schema.js +181 -0
  53. package/dist/config/syrin.template.yaml +127 -0
  54. package/dist/config/types.d.ts +87 -0
  55. package/dist/config/types.js +6 -0
  56. package/dist/constants/app.d.ts +9 -0
  57. package/dist/constants/app.js +9 -0
  58. package/dist/constants/commands.d.ts +43 -0
  59. package/dist/constants/commands.js +43 -0
  60. package/dist/constants/defaults.d.ts +18 -0
  61. package/dist/constants/defaults.js +18 -0
  62. package/dist/constants/env-vars.d.ts +11 -0
  63. package/dist/constants/env-vars.js +11 -0
  64. package/dist/constants/icons.d.ts +23 -0
  65. package/dist/constants/icons.js +23 -0
  66. package/dist/constants/index.d.ts +17 -0
  67. package/dist/constants/index.js +17 -0
  68. package/dist/constants/labels.d.ts +38 -0
  69. package/dist/constants/labels.js +42 -0
  70. package/dist/constants/links.d.ts +10 -0
  71. package/dist/constants/links.js +11 -0
  72. package/dist/constants/list.d.ts +10 -0
  73. package/dist/constants/list.js +9 -0
  74. package/dist/constants/llm.d.ts +26 -0
  75. package/dist/constants/llm.js +25 -0
  76. package/dist/constants/messages.d.ts +107 -0
  77. package/dist/constants/messages.js +138 -0
  78. package/dist/constants/paths.d.ts +29 -0
  79. package/dist/constants/paths.js +29 -0
  80. package/dist/constants/transport.d.ts +9 -0
  81. package/dist/constants/transport.js +8 -0
  82. package/dist/events/emitter.d.ts +64 -0
  83. package/dist/events/emitter.js +142 -0
  84. package/dist/events/event-type.d.ts +66 -0
  85. package/dist/events/event-type.js +81 -0
  86. package/dist/events/payloads/diagnostics.d.ts +24 -0
  87. package/dist/events/payloads/diagnostics.js +5 -0
  88. package/dist/events/payloads/index.d.ts +15 -0
  89. package/dist/events/payloads/index.js +6 -0
  90. package/dist/events/payloads/llm.d.ts +58 -0
  91. package/dist/events/payloads/llm.js +6 -0
  92. package/dist/events/payloads/registry.d.ts +28 -0
  93. package/dist/events/payloads/registry.js +5 -0
  94. package/dist/events/payloads/session.d.ts +32 -0
  95. package/dist/events/payloads/session.js +5 -0
  96. package/dist/events/payloads/testing.d.ts +17 -0
  97. package/dist/events/payloads/testing.js +5 -0
  98. package/dist/events/payloads/tool.d.ts +29 -0
  99. package/dist/events/payloads/tool.js +5 -0
  100. package/dist/events/payloads/transport.d.ts +30 -0
  101. package/dist/events/payloads/transport.js +5 -0
  102. package/dist/events/payloads/validation.d.ts +37 -0
  103. package/dist/events/payloads/validation.js +5 -0
  104. package/dist/events/payloads/workflow.d.ts +45 -0
  105. package/dist/events/payloads/workflow.js +5 -0
  106. package/dist/events/store/file-store.d.ts +37 -0
  107. package/dist/events/store/file-store.js +113 -0
  108. package/dist/events/store/index.d.ts +7 -0
  109. package/dist/events/store/index.js +6 -0
  110. package/dist/events/store/memory-store.d.ts +26 -0
  111. package/dist/events/store/memory-store.js +39 -0
  112. package/dist/events/store.d.ts +11 -0
  113. package/dist/events/store.js +2 -0
  114. package/dist/events/types.d.ts +14 -0
  115. package/dist/events/types.js +2 -0
  116. package/dist/index.d.ts +8 -0
  117. package/dist/index.js +30 -0
  118. package/dist/presentation/analysis-ui.d.ts +24 -0
  119. package/dist/presentation/analysis-ui.js +158 -0
  120. package/dist/presentation/dev/chat-ui-types.d.ts +68 -0
  121. package/dist/presentation/dev/chat-ui-types.js +5 -0
  122. package/dist/presentation/dev/chat-ui.d.ts +61 -0
  123. package/dist/presentation/dev/chat-ui.js +714 -0
  124. package/dist/presentation/dev/components/assistant-message.d.ts +19 -0
  125. package/dist/presentation/dev/components/assistant-message.js +36 -0
  126. package/dist/presentation/dev/components/header.d.ts +16 -0
  127. package/dist/presentation/dev/components/header.js +22 -0
  128. package/dist/presentation/dev/components/index.d.ts +13 -0
  129. package/dist/presentation/dev/components/index.js +13 -0
  130. package/dist/presentation/dev/components/input-panel.d.ts +22 -0
  131. package/dist/presentation/dev/components/input-panel.js +43 -0
  132. package/dist/presentation/dev/components/message-component.d.ts +16 -0
  133. package/dist/presentation/dev/components/message-component.js +51 -0
  134. package/dist/presentation/dev/components/messages-list.d.ts +24 -0
  135. package/dist/presentation/dev/components/messages-list.js +48 -0
  136. package/dist/presentation/dev/components/system-message.d.ts +16 -0
  137. package/dist/presentation/dev/components/system-message.js +26 -0
  138. package/dist/presentation/dev/components/user-message.d.ts +21 -0
  139. package/dist/presentation/dev/components/user-message.js +35 -0
  140. package/dist/presentation/dev/components/welcome-banner.d.ts +24 -0
  141. package/dist/presentation/dev/components/welcome-banner.js +146 -0
  142. package/dist/presentation/dev/goodbye-messages.d.ts +31 -0
  143. package/dist/presentation/dev/goodbye-messages.js +100 -0
  144. package/dist/presentation/dev/index.d.ts +5 -0
  145. package/dist/presentation/dev/index.js +5 -0
  146. package/dist/presentation/dev/text-wrapper.d.ts +30 -0
  147. package/dist/presentation/dev/text-wrapper.js +74 -0
  148. package/dist/presentation/dev-ui.d.ts +33 -0
  149. package/dist/presentation/dev-ui.js +246 -0
  150. package/dist/presentation/doctor-ui.d.ts +40 -0
  151. package/dist/presentation/doctor-ui.js +157 -0
  152. package/dist/presentation/init-ui.d.ts +14 -0
  153. package/dist/presentation/init-ui.js +41 -0
  154. package/dist/presentation/list-ui.d.ts +44 -0
  155. package/dist/presentation/list-ui.js +139 -0
  156. package/dist/presentation/test-ui.d.ts +49 -0
  157. package/dist/presentation/test-ui.js +358 -0
  158. package/dist/runtime/analysis/analyser.d.ts +14 -0
  159. package/dist/runtime/analysis/analyser.js +88 -0
  160. package/dist/runtime/analysis/dependencies.d.ts +10 -0
  161. package/dist/runtime/analysis/dependencies.js +140 -0
  162. package/dist/runtime/analysis/index.d.ts +10 -0
  163. package/dist/runtime/analysis/index.js +10 -0
  164. package/dist/runtime/analysis/indexer.d.ts +10 -0
  165. package/dist/runtime/analysis/indexer.js +62 -0
  166. package/dist/runtime/analysis/loader.d.ts +15 -0
  167. package/dist/runtime/analysis/loader.js +47 -0
  168. package/dist/runtime/analysis/normalizer.d.ts +14 -0
  169. package/dist/runtime/analysis/normalizer.js +184 -0
  170. package/dist/runtime/analysis/rules/__test-helpers__.d.ts +18 -0
  171. package/dist/runtime/analysis/rules/__test-helpers__.js +40 -0
  172. package/dist/runtime/analysis/rules/base.d.ts +38 -0
  173. package/dist/runtime/analysis/rules/base.js +23 -0
  174. package/dist/runtime/analysis/rules/error-codes.d.ts +64 -0
  175. package/dist/runtime/analysis/rules/error-codes.js +73 -0
  176. package/dist/runtime/analysis/rules/errors/e000-tool-not-found.d.ts +35 -0
  177. package/dist/runtime/analysis/rules/errors/e000-tool-not-found.js +32 -0
  178. package/dist/runtime/analysis/rules/errors/e001-missing-output-schema.d.ts +22 -0
  179. package/dist/runtime/analysis/rules/errors/e001-missing-output-schema.js +30 -0
  180. package/dist/runtime/analysis/rules/errors/e002-underspecified-input.d.ts +24 -0
  181. package/dist/runtime/analysis/rules/errors/e002-underspecified-input.js +52 -0
  182. package/dist/runtime/analysis/rules/errors/e003-type-mismatch.d.ts +23 -0
  183. package/dist/runtime/analysis/rules/errors/e003-type-mismatch.js +73 -0
  184. package/dist/runtime/analysis/rules/errors/e004-free-text-propagation.d.ts +23 -0
  185. package/dist/runtime/analysis/rules/errors/e004-free-text-propagation.js +47 -0
  186. package/dist/runtime/analysis/rules/errors/e005-tool-ambiguity.d.ts +25 -0
  187. package/dist/runtime/analysis/rules/errors/e005-tool-ambiguity.js +73 -0
  188. package/dist/runtime/analysis/rules/errors/e006-param-not-in-description.d.ts +22 -0
  189. package/dist/runtime/analysis/rules/errors/e006-param-not-in-description.js +57 -0
  190. package/dist/runtime/analysis/rules/errors/e007-output-not-guaranteed.d.ts +23 -0
  191. package/dist/runtime/analysis/rules/errors/e007-output-not-guaranteed.js +56 -0
  192. package/dist/runtime/analysis/rules/errors/e008-circular-dependency.d.ts +22 -0
  193. package/dist/runtime/analysis/rules/errors/e008-circular-dependency.js +84 -0
  194. package/dist/runtime/analysis/rules/errors/e009-implicit-user-input.d.ts +23 -0
  195. package/dist/runtime/analysis/rules/errors/e009-implicit-user-input.js +89 -0
  196. package/dist/runtime/analysis/rules/errors/e010-non-serializable.d.ts +25 -0
  197. package/dist/runtime/analysis/rules/errors/e010-non-serializable.js +46 -0
  198. package/dist/runtime/analysis/rules/errors/e011-missing-tool-description.d.ts +24 -0
  199. package/dist/runtime/analysis/rules/errors/e011-missing-tool-description.js +33 -0
  200. package/dist/runtime/analysis/rules/errors/e012-side-effect-detected.d.ts +39 -0
  201. package/dist/runtime/analysis/rules/errors/e012-side-effect-detected.js +40 -0
  202. package/dist/runtime/analysis/rules/errors/e013-non-deterministic-output.d.ts +37 -0
  203. package/dist/runtime/analysis/rules/errors/e013-non-deterministic-output.js +34 -0
  204. package/dist/runtime/analysis/rules/errors/e013-output-explosion.d.ts +39 -0
  205. package/dist/runtime/analysis/rules/errors/e013-output-explosion.js +36 -0
  206. package/dist/runtime/analysis/rules/errors/e014-hidden-dependency.d.ts +42 -0
  207. package/dist/runtime/analysis/rules/errors/e014-hidden-dependency.js +46 -0
  208. package/dist/runtime/analysis/rules/errors/e014-output-explosion.d.ts +39 -0
  209. package/dist/runtime/analysis/rules/errors/e014-output-explosion.js +36 -0
  210. package/dist/runtime/analysis/rules/errors/e015-hidden-dependency.d.ts +42 -0
  211. package/dist/runtime/analysis/rules/errors/e015-hidden-dependency.js +46 -0
  212. package/dist/runtime/analysis/rules/errors/e015-unbounded-execution.d.ts +44 -0
  213. package/dist/runtime/analysis/rules/errors/e015-unbounded-execution.js +66 -0
  214. package/dist/runtime/analysis/rules/errors/e016-output-validation-failed.d.ts +43 -0
  215. package/dist/runtime/analysis/rules/errors/e016-output-validation-failed.js +42 -0
  216. package/dist/runtime/analysis/rules/errors/e016-unbounded-execution.d.ts +44 -0
  217. package/dist/runtime/analysis/rules/errors/e016-unbounded-execution.js +66 -0
  218. package/dist/runtime/analysis/rules/errors/e017-input-validation-failed.d.ts +57 -0
  219. package/dist/runtime/analysis/rules/errors/e017-input-validation-failed.js +80 -0
  220. package/dist/runtime/analysis/rules/errors/e017-output-validation-failed.d.ts +43 -0
  221. package/dist/runtime/analysis/rules/errors/e017-output-validation-failed.js +42 -0
  222. package/dist/runtime/analysis/rules/errors/e018-input-validation-failed.d.ts +57 -0
  223. package/dist/runtime/analysis/rules/errors/e018-input-validation-failed.js +80 -0
  224. package/dist/runtime/analysis/rules/errors/e018-tool-execution-failed.d.ts +38 -0
  225. package/dist/runtime/analysis/rules/errors/e018-tool-execution-failed.js +37 -0
  226. package/dist/runtime/analysis/rules/errors/e019-tool-execution-failed.d.ts +38 -0
  227. package/dist/runtime/analysis/rules/errors/e019-tool-execution-failed.js +37 -0
  228. package/dist/runtime/analysis/rules/errors/e019-unexpected-test-result.d.ts +65 -0
  229. package/dist/runtime/analysis/rules/errors/e019-unexpected-test-result.js +109 -0
  230. package/dist/runtime/analysis/rules/errors/e020-unexpected-test-result.d.ts +65 -0
  231. package/dist/runtime/analysis/rules/errors/e020-unexpected-test-result.js +109 -0
  232. package/dist/runtime/analysis/rules/errors/e100-missing-output-schema.d.ts +22 -0
  233. package/dist/runtime/analysis/rules/errors/e100-missing-output-schema.js +30 -0
  234. package/dist/runtime/analysis/rules/errors/e101-missing-tool-description.d.ts +24 -0
  235. package/dist/runtime/analysis/rules/errors/e101-missing-tool-description.js +33 -0
  236. package/dist/runtime/analysis/rules/errors/e102-underspecified-input.d.ts +24 -0
  237. package/dist/runtime/analysis/rules/errors/e102-underspecified-input.js +52 -0
  238. package/dist/runtime/analysis/rules/errors/e103-type-mismatch.d.ts +23 -0
  239. package/dist/runtime/analysis/rules/errors/e103-type-mismatch.js +72 -0
  240. package/dist/runtime/analysis/rules/errors/e104-param-not-in-description.d.ts +22 -0
  241. package/dist/runtime/analysis/rules/errors/e104-param-not-in-description.js +57 -0
  242. package/dist/runtime/analysis/rules/errors/e105-free-text-propagation.d.ts +23 -0
  243. package/dist/runtime/analysis/rules/errors/e105-free-text-propagation.js +47 -0
  244. package/dist/runtime/analysis/rules/errors/e106-output-not-guaranteed.d.ts +23 -0
  245. package/dist/runtime/analysis/rules/errors/e106-output-not-guaranteed.js +58 -0
  246. package/dist/runtime/analysis/rules/errors/e107-circular-dependency.d.ts +22 -0
  247. package/dist/runtime/analysis/rules/errors/e107-circular-dependency.js +84 -0
  248. package/dist/runtime/analysis/rules/errors/e108-implicit-user-input.d.ts +23 -0
  249. package/dist/runtime/analysis/rules/errors/e108-implicit-user-input.js +94 -0
  250. package/dist/runtime/analysis/rules/errors/e109-non-serializable.d.ts +25 -0
  251. package/dist/runtime/analysis/rules/errors/e109-non-serializable.js +44 -0
  252. package/dist/runtime/analysis/rules/errors/e110-tool-ambiguity.d.ts +25 -0
  253. package/dist/runtime/analysis/rules/errors/e110-tool-ambiguity.js +73 -0
  254. package/dist/runtime/analysis/rules/errors/e200-input-validation-failed.d.ts +57 -0
  255. package/dist/runtime/analysis/rules/errors/e200-input-validation-failed.js +71 -0
  256. package/dist/runtime/analysis/rules/errors/e300-output-validation-failed.d.ts +43 -0
  257. package/dist/runtime/analysis/rules/errors/e300-output-validation-failed.js +44 -0
  258. package/dist/runtime/analysis/rules/errors/e301-output-explosion.d.ts +39 -0
  259. package/dist/runtime/analysis/rules/errors/e301-output-explosion.js +36 -0
  260. package/dist/runtime/analysis/rules/errors/e400-tool-execution-failed.d.ts +38 -0
  261. package/dist/runtime/analysis/rules/errors/e400-tool-execution-failed.js +37 -0
  262. package/dist/runtime/analysis/rules/errors/e403-unbounded-execution.d.ts +44 -0
  263. package/dist/runtime/analysis/rules/errors/e403-unbounded-execution.js +66 -0
  264. package/dist/runtime/analysis/rules/errors/e500-side-effect-detected.d.ts +39 -0
  265. package/dist/runtime/analysis/rules/errors/e500-side-effect-detected.js +40 -0
  266. package/dist/runtime/analysis/rules/errors/e501-hidden-dependency.d.ts +47 -0
  267. package/dist/runtime/analysis/rules/errors/e501-hidden-dependency.js +46 -0
  268. package/dist/runtime/analysis/rules/errors/e600-unexpected-test-result.d.ts +65 -0
  269. package/dist/runtime/analysis/rules/errors/e600-unexpected-test-result.js +109 -0
  270. package/dist/runtime/analysis/rules/index.d.ts +18 -0
  271. package/dist/runtime/analysis/rules/index.js +94 -0
  272. package/dist/runtime/analysis/rules/warnings/w001-implicit-dependency.d.ts +22 -0
  273. package/dist/runtime/analysis/rules/warnings/w001-implicit-dependency.js +39 -0
  274. package/dist/runtime/analysis/rules/warnings/w002-free-text-without-normalization.d.ts +24 -0
  275. package/dist/runtime/analysis/rules/warnings/w002-free-text-without-normalization.js +40 -0
  276. package/dist/runtime/analysis/rules/warnings/w003-missing-examples.d.ts +22 -0
  277. package/dist/runtime/analysis/rules/warnings/w003-missing-examples.js +84 -0
  278. package/dist/runtime/analysis/rules/warnings/w004-overloaded-responsibility.d.ts +23 -0
  279. package/dist/runtime/analysis/rules/warnings/w004-overloaded-responsibility.js +96 -0
  280. package/dist/runtime/analysis/rules/warnings/w005-generic-description.d.ts +53 -0
  281. package/dist/runtime/analysis/rules/warnings/w005-generic-description.js +108 -0
  282. package/dist/runtime/analysis/rules/warnings/w006-optional-as-required.d.ts +22 -0
  283. package/dist/runtime/analysis/rules/warnings/w006-optional-as-required.js +44 -0
  284. package/dist/runtime/analysis/rules/warnings/w007-broad-output-schema.d.ts +23 -0
  285. package/dist/runtime/analysis/rules/warnings/w007-broad-output-schema.js +37 -0
  286. package/dist/runtime/analysis/rules/warnings/w008-multiple-entry-points.d.ts +22 -0
  287. package/dist/runtime/analysis/rules/warnings/w008-multiple-entry-points.js +97 -0
  288. package/dist/runtime/analysis/rules/warnings/w009-hidden-side-effects.d.ts +23 -0
  289. package/dist/runtime/analysis/rules/warnings/w009-hidden-side-effects.js +88 -0
  290. package/dist/runtime/analysis/rules/warnings/w010-output-not-reusable.d.ts +22 -0
  291. package/dist/runtime/analysis/rules/warnings/w010-output-not-reusable.js +81 -0
  292. package/dist/runtime/analysis/rules/warnings/w021-weak-schema.d.ts +40 -0
  293. package/dist/runtime/analysis/rules/warnings/w021-weak-schema.js +32 -0
  294. package/dist/runtime/analysis/rules/warnings/w022-high-entropy-output.d.ts +39 -0
  295. package/dist/runtime/analysis/rules/warnings/w022-high-entropy-output.js +36 -0
  296. package/dist/runtime/analysis/rules/warnings/w023-unstable-defaults.d.ts +38 -0
  297. package/dist/runtime/analysis/rules/warnings/w023-unstable-defaults.js +36 -0
  298. package/dist/runtime/analysis/rules/warnings/w100-implicit-dependency.d.ts +22 -0
  299. package/dist/runtime/analysis/rules/warnings/w100-implicit-dependency.js +89 -0
  300. package/dist/runtime/analysis/rules/warnings/w101-free-text-without-normalization.d.ts +24 -0
  301. package/dist/runtime/analysis/rules/warnings/w101-free-text-without-normalization.js +40 -0
  302. package/dist/runtime/analysis/rules/warnings/w102-missing-examples.d.ts +22 -0
  303. package/dist/runtime/analysis/rules/warnings/w102-missing-examples.js +76 -0
  304. package/dist/runtime/analysis/rules/warnings/w103-overloaded-responsibility.d.ts +23 -0
  305. package/dist/runtime/analysis/rules/warnings/w103-overloaded-responsibility.js +91 -0
  306. package/dist/runtime/analysis/rules/warnings/w104-generic-description.d.ts +53 -0
  307. package/dist/runtime/analysis/rules/warnings/w104-generic-description.js +108 -0
  308. package/dist/runtime/analysis/rules/warnings/w105-optional-as-required.d.ts +22 -0
  309. package/dist/runtime/analysis/rules/warnings/w105-optional-as-required.js +45 -0
  310. package/dist/runtime/analysis/rules/warnings/w106-broad-output-schema.d.ts +23 -0
  311. package/dist/runtime/analysis/rules/warnings/w106-broad-output-schema.js +37 -0
  312. package/dist/runtime/analysis/rules/warnings/w107-multiple-entry-points.d.ts +22 -0
  313. package/dist/runtime/analysis/rules/warnings/w107-multiple-entry-points.js +97 -0
  314. package/dist/runtime/analysis/rules/warnings/w108-hidden-side-effects.d.ts +23 -0
  315. package/dist/runtime/analysis/rules/warnings/w108-hidden-side-effects.js +94 -0
  316. package/dist/runtime/analysis/rules/warnings/w109-output-not-reusable.d.ts +22 -0
  317. package/dist/runtime/analysis/rules/warnings/w109-output-not-reusable.js +63 -0
  318. package/dist/runtime/analysis/rules/warnings/w110-weak-schema.d.ts +40 -0
  319. package/dist/runtime/analysis/rules/warnings/w110-weak-schema.js +32 -0
  320. package/dist/runtime/analysis/rules/warnings/w300-high-entropy-output.d.ts +39 -0
  321. package/dist/runtime/analysis/rules/warnings/w300-high-entropy-output.js +47 -0
  322. package/dist/runtime/analysis/rules/warnings/w301-unstable-defaults.d.ts +38 -0
  323. package/dist/runtime/analysis/rules/warnings/w301-unstable-defaults.js +36 -0
  324. package/dist/runtime/analysis/strict-mode.d.ts +21 -0
  325. package/dist/runtime/analysis/strict-mode.js +44 -0
  326. package/dist/runtime/analysis/types.d.ts +133 -0
  327. package/dist/runtime/analysis/types.js +6 -0
  328. package/dist/runtime/analysis/utils.d.ts +19 -0
  329. package/dist/runtime/analysis/utils.js +21 -0
  330. package/dist/runtime/dev/data-manager.d.ts +55 -0
  331. package/dist/runtime/dev/data-manager.js +87 -0
  332. package/dist/runtime/dev/event-mapper.d.ts +100 -0
  333. package/dist/runtime/dev/event-mapper.js +400 -0
  334. package/dist/runtime/dev/formatter.d.ts +94 -0
  335. package/dist/runtime/dev/formatter.js +236 -0
  336. package/dist/runtime/dev/index.d.ts +9 -0
  337. package/dist/runtime/dev/index.js +9 -0
  338. package/dist/runtime/dev/repl.d.ts +114 -0
  339. package/dist/runtime/dev/repl.js +310 -0
  340. package/dist/runtime/dev/session.d.ts +86 -0
  341. package/dist/runtime/dev/session.js +447 -0
  342. package/dist/runtime/dev/stack-trace.d.ts +77 -0
  343. package/dist/runtime/dev/stack-trace.js +286 -0
  344. package/dist/runtime/dev/types.d.ts +54 -0
  345. package/dist/runtime/dev/types.js +5 -0
  346. package/dist/runtime/llm/claude.d.ts +27 -0
  347. package/dist/runtime/llm/claude.js +150 -0
  348. package/dist/runtime/llm/factory.d.ts +30 -0
  349. package/dist/runtime/llm/factory.js +78 -0
  350. package/dist/runtime/llm/index.d.ts +10 -0
  351. package/dist/runtime/llm/index.js +10 -0
  352. package/dist/runtime/llm/ollama.d.ts +45 -0
  353. package/dist/runtime/llm/ollama.js +449 -0
  354. package/dist/runtime/llm/openai.d.ts +27 -0
  355. package/dist/runtime/llm/openai.js +170 -0
  356. package/dist/runtime/llm/provider.d.ts +32 -0
  357. package/dist/runtime/llm/provider.js +6 -0
  358. package/dist/runtime/llm/types.d.ts +55 -0
  359. package/dist/runtime/llm/types.js +6 -0
  360. package/dist/runtime/mcp/client/base.d.ts +40 -0
  361. package/dist/runtime/mcp/client/base.js +157 -0
  362. package/dist/runtime/mcp/client/manager.d.ts +91 -0
  363. package/dist/runtime/mcp/client/manager.js +248 -0
  364. package/dist/runtime/mcp/client/process.d.ts +31 -0
  365. package/dist/runtime/mcp/client/process.js +82 -0
  366. package/dist/runtime/mcp/connection.d.ts +63 -0
  367. package/dist/runtime/mcp/connection.js +449 -0
  368. package/dist/runtime/mcp/index.d.ts +9 -0
  369. package/dist/runtime/mcp/index.js +9 -0
  370. package/dist/runtime/mcp/list.d.ts +50 -0
  371. package/dist/runtime/mcp/list.js +65 -0
  372. package/dist/runtime/mcp/stdio-transport.d.ts +23 -0
  373. package/dist/runtime/mcp/stdio-transport.js +71 -0
  374. package/dist/runtime/mcp/types.d.ts +85 -0
  375. package/dist/runtime/mcp/types.js +6 -0
  376. package/dist/runtime/sandbox/executor.d.ts +102 -0
  377. package/dist/runtime/sandbox/executor.js +537 -0
  378. package/dist/runtime/sandbox/index.d.ts +9 -0
  379. package/dist/runtime/sandbox/index.js +9 -0
  380. package/dist/runtime/sandbox/io-monitor.d.ts +78 -0
  381. package/dist/runtime/sandbox/io-monitor.js +98 -0
  382. package/dist/runtime/sandbox/time-parser.d.ts +19 -0
  383. package/dist/runtime/sandbox/time-parser.js +67 -0
  384. package/dist/runtime/sandbox/types.d.ts +58 -0
  385. package/dist/runtime/sandbox/types.js +23 -0
  386. package/dist/runtime/test/behavior-observer.d.ts +61 -0
  387. package/dist/runtime/test/behavior-observer.js +140 -0
  388. package/dist/runtime/test/contract-loader.d.ts +41 -0
  389. package/dist/runtime/test/contract-loader.js +158 -0
  390. package/dist/runtime/test/contract-schema.d.ts +46 -0
  391. package/dist/runtime/test/contract-schema.js +107 -0
  392. package/dist/runtime/test/contract-types.d.ts +106 -0
  393. package/dist/runtime/test/contract-types.js +6 -0
  394. package/dist/runtime/test/dependency-tracker.d.ts +66 -0
  395. package/dist/runtime/test/dependency-tracker.js +80 -0
  396. package/dist/runtime/test/formatters.d.ts +18 -0
  397. package/dist/runtime/test/formatters.js +172 -0
  398. package/dist/runtime/test/index.d.ts +12 -0
  399. package/dist/runtime/test/index.js +13 -0
  400. package/dist/runtime/test/input-generator.d.ts +33 -0
  401. package/dist/runtime/test/input-generator.js +498 -0
  402. package/dist/runtime/test/mcp-root-detector.d.ts +31 -0
  403. package/dist/runtime/test/mcp-root-detector.js +105 -0
  404. package/dist/runtime/test/orchestrator.d.ts +131 -0
  405. package/dist/runtime/test/orchestrator.js +738 -0
  406. package/dist/runtime/test/output-validator.d.ts +44 -0
  407. package/dist/runtime/test/output-validator.js +262 -0
  408. package/dist/runtime/test/retry-tester.d.ts +44 -0
  409. package/dist/runtime/test/retry-tester.js +103 -0
  410. package/dist/runtime/test/runner.d.ts +28 -0
  411. package/dist/runtime/test/runner.js +55 -0
  412. package/dist/runtime/test/synthetic-input-generator.d.ts +11 -0
  413. package/dist/runtime/test/synthetic-input-generator.js +154 -0
  414. package/dist/runtime/test/test-runner.d.ts +28 -0
  415. package/dist/runtime/test/test-runner.js +55 -0
  416. package/dist/types/factories.d.ts +16 -0
  417. package/dist/types/factories.js +43 -0
  418. package/dist/types/ids.d.ts +16 -0
  419. package/dist/types/ids.js +2 -0
  420. package/dist/types/opaque.d.ts +4 -0
  421. package/dist/types/opaque.js +2 -0
  422. package/dist/utils/errors.d.ts +92 -0
  423. package/dist/utils/errors.js +97 -0
  424. package/dist/utils/gitignore.d.ts +11 -0
  425. package/dist/utils/gitignore.js +59 -0
  426. package/dist/utils/json-file-saver.d.ts +17 -0
  427. package/dist/utils/json-file-saver.js +81 -0
  428. package/dist/utils/json-formatter.d.ts +63 -0
  429. package/dist/utils/json-formatter.js +344 -0
  430. package/dist/utils/logger.d.ts +184 -0
  431. package/dist/utils/logger.js +330 -0
  432. package/dist/utils/package-manager.d.ts +30 -0
  433. package/dist/utils/package-manager.js +157 -0
  434. package/dist/utils/version-checker.d.ts +47 -0
  435. package/dist/utils/version-checker.js +167 -0
  436. package/dist/utils/version-display.d.ts +10 -0
  437. package/dist/utils/version-display.js +20 -0
  438. package/package.json +106 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * E109: Non-Serializable Output
3
+ *
4
+ * Condition:
5
+ * - Output schema contains:
6
+ * - functions
7
+ * - class instances
8
+ * - unsupported types
9
+ *
10
+ * Why:
11
+ * - Breaks MCP contract
12
+ * - Breaks recording & replay later
13
+ */
14
+ import { BaseRule } from '../base.js';
15
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
16
+ declare class E109NonSerializableRule extends BaseRule {
17
+ readonly id: "E109";
18
+ readonly severity: "error";
19
+ readonly ruleName = "Non-Serializable Output";
20
+ readonly description = "Output of tool is not serializable. Breaks MCP contract.";
21
+ check(ctx: AnalysisContext): Diagnostic[];
22
+ }
23
+ export declare const E109NonSerializable: E109NonSerializableRule;
24
+ export {};
25
+ //# sourceMappingURL=e109-non-serializable.d.ts.map
@@ -0,0 +1,44 @@
1
+ /**
2
+ * E109: Non-Serializable Output
3
+ *
4
+ * Condition:
5
+ * - Output schema contains:
6
+ * - functions
7
+ * - class instances
8
+ * - unsupported types
9
+ *
10
+ * Why:
11
+ * - Breaks MCP contract
12
+ * - Breaks recording & replay later
13
+ */
14
+ import { BaseRule } from '../base.js';
15
+ import { ERROR_CODES } from '../error-codes.js';
16
+ /**
17
+ * Types that are not serializable in JSON.
18
+ */
19
+ const NON_SERIALIZABLE_TYPES = Object.freeze(new Set(['function', 'undefined', 'symbol', 'bigint']));
20
+ /**
21
+ * Check if a type is non-serializable.
22
+ */
23
+ function isNonSerializableType(type) {
24
+ return NON_SERIALIZABLE_TYPES.has(type.toLowerCase());
25
+ }
26
+ class E109NonSerializableRule extends BaseRule {
27
+ id = ERROR_CODES.E109;
28
+ severity = 'error';
29
+ ruleName = 'Non-Serializable Output';
30
+ description = 'Output of tool is not serializable. Breaks MCP contract.';
31
+ check(ctx) {
32
+ const diagnostics = [];
33
+ for (const tool of ctx.tools) {
34
+ for (const output of tool.outputs) {
35
+ if (isNonSerializableType(output.type)) {
36
+ diagnostics.push(this.createDiagnostic(`Output of "${tool.name}" (field: "${output.name}") has non-serializable type "${output.type}".`, tool.name, output.name, `Change the output type to a serializable type (string, number, boolean, object, array).`));
37
+ }
38
+ }
39
+ }
40
+ return diagnostics;
41
+ }
42
+ }
43
+ export const E109NonSerializable = new E109NonSerializableRule();
44
+ //# sourceMappingURL=e109-non-serializable.js.map
@@ -0,0 +1,25 @@
1
+ /**
2
+ * E110: Hard Tool Ambiguity
3
+ *
4
+ * Condition:
5
+ * - Two or more tools:
6
+ * - Overlapping descriptions
7
+ * - Overlapping schemas
8
+ * - No clear differentiator
9
+ *
10
+ * Why:
11
+ * - Tool selection becomes nondeterministic
12
+ * - Agent behavior changes across runs/models
13
+ */
14
+ import { BaseRule } from '../base.js';
15
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
16
+ declare class E110ToolAmbiguityRule extends BaseRule {
17
+ readonly id: "E110";
18
+ readonly severity: "error";
19
+ readonly ruleName = "Hard Tool Ambiguity";
20
+ readonly description = "Multiple tools match the same intent. LLM tool selection is ambiguous.";
21
+ check(ctx: AnalysisContext): Diagnostic[];
22
+ }
23
+ export declare const E110ToolAmbiguity: E110ToolAmbiguityRule;
24
+ export {};
25
+ //# sourceMappingURL=e110-tool-ambiguity.d.ts.map
@@ -0,0 +1,73 @@
1
+ /**
2
+ * E110: Hard Tool Ambiguity
3
+ *
4
+ * Condition:
5
+ * - Two or more tools:
6
+ * - Overlapping descriptions
7
+ * - Overlapping schemas
8
+ * - No clear differentiator
9
+ *
10
+ * Why:
11
+ * - Tool selection becomes nondeterministic
12
+ * - Agent behavior changes across runs/models
13
+ */
14
+ import { BaseRule } from '../base.js';
15
+ import { ERROR_CODES } from '../error-codes.js';
16
+ /**
17
+ * Calculate similarity between two sets of tokens.
18
+ */
19
+ function tokenSimilarity(tokens1, tokens2) {
20
+ if (tokens1.size === 0 || tokens2.size === 0) {
21
+ return 0.0;
22
+ }
23
+ const intersection = new Set([...tokens1].filter(t => tokens2.has(t)));
24
+ const union = new Set([...tokens1, ...tokens2]);
25
+ return intersection.size / union.size;
26
+ }
27
+ /**
28
+ * Calculate schema overlap between two tools.
29
+ */
30
+ function schemaOverlap(inputs1, inputs2) {
31
+ const names1 = new Set(inputs1.map(i => i.name.toLowerCase()));
32
+ const names2 = new Set(inputs2.map(i => i.name.toLowerCase()));
33
+ const nameOverlapSet = new Set([...names1].filter(n => names2.has(n)));
34
+ const nameOverlap = nameOverlapSet.size;
35
+ const totalNames = new Set([...names1, ...names2]).size;
36
+ if (totalNames === 0) {
37
+ return 0.0;
38
+ }
39
+ return nameOverlap / totalNames;
40
+ }
41
+ class E110ToolAmbiguityRule extends BaseRule {
42
+ id = ERROR_CODES.E110;
43
+ severity = 'error';
44
+ ruleName = 'Hard Tool Ambiguity';
45
+ description = 'Multiple tools match the same intent. LLM tool selection is ambiguous.';
46
+ check(ctx) {
47
+ const diagnostics = [];
48
+ for (let i = 0; i < ctx.tools.length; i++) {
49
+ const tool1 = ctx.tools[i];
50
+ if (!tool1)
51
+ continue;
52
+ for (let j = i + 1; j < ctx.tools.length; j++) {
53
+ const tool2 = ctx.tools[j];
54
+ if (!tool2)
55
+ continue;
56
+ // Calculate description similarity
57
+ const descSimilarity = tokenSimilarity(tool1.descriptionTokens, tool2.descriptionTokens);
58
+ // Calculate schema overlap
59
+ const inputOverlap = schemaOverlap(tool1.inputs, tool2.inputs);
60
+ const outputOverlap = schemaOverlap(tool1.outputs, tool2.outputs);
61
+ const schemaOverlapScore = (inputOverlap + outputOverlap) / 2;
62
+ // If both description and schema are very similar, it's ambiguous
63
+ // Threshold: >0.7 description similarity AND >0.5 schema overlap
64
+ if (descSimilarity > 0.7 && schemaOverlapScore > 0.5) {
65
+ diagnostics.push(this.createDiagnostic(`Multiple tools match the same intent: "${tool1.name}", "${tool2.name}". LLM tool selection is ambiguous.`, undefined, undefined, `Differentiate "${tool1.name}" and "${tool2.name}" by making their descriptions and schemas more distinct.`));
66
+ }
67
+ }
68
+ }
69
+ return diagnostics;
70
+ }
71
+ }
72
+ export const E110ToolAmbiguity = new E110ToolAmbiguityRule();
73
+ //# sourceMappingURL=e110-tool-ambiguity.js.map
@@ -0,0 +1,57 @@
1
+ /**
2
+ * E200: Input Validation Failed
3
+ *
4
+ * Condition: Tool input doesn't match declared input schema
5
+ *
6
+ * Why this is fatal:
7
+ * - Tool contract is inaccurate
8
+ * - Tool doesn't handle invalid inputs gracefully
9
+ * - Can cause runtime errors in production
10
+ * - Indicates missing input validation or schema mismatch
11
+ */
12
+ import { BaseRule } from '../base.js';
13
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
14
+ /**
15
+ * Context for input validation failure detection.
16
+ */
17
+ export interface InputValidationContext {
18
+ /** Tool name */
19
+ toolName: string;
20
+ /** Test name (if applicable) */
21
+ testName?: string;
22
+ /** Test input that caused the failure */
23
+ testInput?: Record<string, unknown>;
24
+ /** Validation error details */
25
+ error?: string;
26
+ /** Parsed error details (field, message, etc.) */
27
+ parsedError?: {
28
+ field?: string;
29
+ message?: string;
30
+ inputValue?: string;
31
+ inputType?: string;
32
+ errorType?: string;
33
+ };
34
+ /** Additional validation details */
35
+ details?: Record<string, unknown>;
36
+ }
37
+ declare class E200InputValidationFailedRule extends BaseRule {
38
+ readonly id: "E200";
39
+ readonly severity: "error";
40
+ readonly ruleName = "Input Validation Failed";
41
+ readonly description = "Tool input doesn't match declared input schema. Tool doesn't handle invalid inputs gracefully.";
42
+ check(_ctx: AnalysisContext): Diagnostic[];
43
+ /**
44
+ * Build parsed error message fragment for a field.
45
+ * @param parsed - Parsed error details
46
+ * @param baseError - Base error message as fallback
47
+ * @returns Error message fragment describing the field validation issue
48
+ */
49
+ private buildParsedErrorMessage;
50
+ /**
51
+ * Check with behavioral context (called from test orchestrator).
52
+ */
53
+ checkWithBehavioralContext(behavioralCtx: InputValidationContext): Diagnostic[];
54
+ }
55
+ export declare const E200InputValidationFailed: E200InputValidationFailedRule;
56
+ export {};
57
+ //# sourceMappingURL=e200-input-validation-failed.d.ts.map
@@ -0,0 +1,71 @@
1
+ /**
2
+ * E200: Input Validation Failed
3
+ *
4
+ * Condition: Tool input doesn't match declared input schema
5
+ *
6
+ * Why this is fatal:
7
+ * - Tool contract is inaccurate
8
+ * - Tool doesn't handle invalid inputs gracefully
9
+ * - Can cause runtime errors in production
10
+ * - Indicates missing input validation or schema mismatch
11
+ */
12
+ import { BaseRule } from '../base.js';
13
+ import { ERROR_CODES } from '../error-codes.js';
14
+ class E200InputValidationFailedRule extends BaseRule {
15
+ id = ERROR_CODES.E200;
16
+ severity = 'error';
17
+ ruleName = 'Input Validation Failed';
18
+ description = "Tool input doesn't match declared input schema. Tool doesn't handle invalid inputs gracefully.";
19
+ check(_ctx) {
20
+ // This rule requires behavioral context
21
+ return [];
22
+ }
23
+ /**
24
+ * Build parsed error message fragment for a field.
25
+ * @param parsed - Parsed error details
26
+ * @param baseError - Base error message as fallback
27
+ * @returns Error message fragment describing the field validation issue
28
+ */
29
+ buildParsedErrorMessage(parsed, baseError) {
30
+ if (!parsed?.field) {
31
+ return baseError;
32
+ }
33
+ if (parsed.message && parsed.inputType) {
34
+ return `Field "${parsed.field}" - ${parsed.message} (received invalid type ${parsed.inputType})`;
35
+ }
36
+ else if (parsed.message) {
37
+ return `Field "${parsed.field}" - ${parsed.message}`;
38
+ }
39
+ else if (parsed.inputType) {
40
+ return `Field "${parsed.field}" received invalid type ${parsed.inputType}`;
41
+ }
42
+ else {
43
+ return baseError;
44
+ }
45
+ }
46
+ /**
47
+ * Check with behavioral context (called from test orchestrator).
48
+ */
49
+ checkWithBehavioralContext(behavioralCtx) {
50
+ const diagnostics = [];
51
+ // Build a clear error message
52
+ const baseError = behavioralCtx.error || 'Invalid input';
53
+ const parsedMessage = this.buildParsedErrorMessage(behavioralCtx.parsedError, baseError);
54
+ const errorDetail = behavioralCtx.parsedError?.field
55
+ ? parsedMessage
56
+ : baseError;
57
+ const scope = behavioralCtx.testName
58
+ ? `Test "${behavioralCtx.testName}" in tool "${behavioralCtx.toolName}"`
59
+ : `Tool "${behavioralCtx.toolName}"`;
60
+ const message = `${scope} input validation failed: ${errorDetail}`;
61
+ diagnostics.push(this.createDiagnostic(message, behavioralCtx.toolName, undefined, 'Fix input validation to handle edge cases gracefully, update input schema to match actual validation, or add proper error handling for invalid inputs.', {
62
+ testName: behavioralCtx.testName,
63
+ testInput: behavioralCtx.testInput,
64
+ parsedError: behavioralCtx.parsedError,
65
+ ...behavioralCtx.details,
66
+ }));
67
+ return diagnostics;
68
+ }
69
+ }
70
+ export const E200InputValidationFailed = new E200InputValidationFailedRule();
71
+ //# sourceMappingURL=e200-input-validation-failed.js.map
@@ -0,0 +1,43 @@
1
+ /**
2
+ * E300: Output Structure Validation Failed
3
+ *
4
+ * Condition: Tool output doesn't match declared output schema
5
+ *
6
+ * Why this is fatal:
7
+ * - Tool contract is inaccurate
8
+ * - Breaks agent's ability to reason about tool outputs
9
+ * - Can cause downstream errors in tool chains
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
13
+ /**
14
+ * Context for output validation failure detection.
15
+ */
16
+ export interface OutputValidationContext {
17
+ /** Tool name */
18
+ toolName: string;
19
+ /** Test name (if applicable) */
20
+ testName?: string;
21
+ /** Test input that caused the failure */
22
+ testInput?: Record<string, unknown>;
23
+ /** Expected output schema name */
24
+ expectedOutputSchema?: string;
25
+ /** Validation error details */
26
+ error?: string;
27
+ /** Additional validation details */
28
+ details?: Record<string, unknown>;
29
+ }
30
+ declare class E300OutputValidationFailedRule extends BaseRule {
31
+ readonly id: "E300";
32
+ readonly severity: "error";
33
+ readonly ruleName = "Output Structure Validation Failed";
34
+ readonly description = "Tool output doesn't match declared output schema. This breaks agent's ability to reason about tool outputs.";
35
+ check(_ctx: AnalysisContext): Diagnostic[];
36
+ /**
37
+ * Check with behavioral context (called from test orchestrator).
38
+ */
39
+ checkWithBehavioralContext(behavioralCtx: OutputValidationContext): Diagnostic[];
40
+ }
41
+ export declare const E300OutputValidationFailed: E300OutputValidationFailedRule;
42
+ export {};
43
+ //# sourceMappingURL=e300-output-validation-failed.d.ts.map
@@ -0,0 +1,44 @@
1
+ /**
2
+ * E300: Output Structure Validation Failed
3
+ *
4
+ * Condition: Tool output doesn't match declared output schema
5
+ *
6
+ * Why this is fatal:
7
+ * - Tool contract is inaccurate
8
+ * - Breaks agent's ability to reason about tool outputs
9
+ * - Can cause downstream errors in tool chains
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import { ERROR_CODES } from '../error-codes.js';
13
+ class E300OutputValidationFailedRule extends BaseRule {
14
+ id = ERROR_CODES.E300;
15
+ severity = 'error';
16
+ ruleName = 'Output Structure Validation Failed';
17
+ description = "Tool output doesn't match declared output schema. This breaks agent's ability to reason about tool outputs.";
18
+ check(_ctx) {
19
+ // This rule requires behavioral context
20
+ return [];
21
+ }
22
+ /**
23
+ * Check with behavioral context (called from test orchestrator).
24
+ */
25
+ checkWithBehavioralContext(behavioralCtx) {
26
+ const diagnostics = [];
27
+ const errorMessage = behavioralCtx.error || 'Output structure does not match schema';
28
+ let message = `Tool "${behavioralCtx.toolName}" output validation failed: ${errorMessage}`;
29
+ if (behavioralCtx.testName) {
30
+ message = `Test "${behavioralCtx.testName}" in tool "${behavioralCtx.toolName}" output validation failed: ${errorMessage}`;
31
+ }
32
+ // Merge details, filtering out undefined values
33
+ const details = Object.fromEntries(Object.entries({
34
+ ...behavioralCtx.details,
35
+ testName: behavioralCtx.testName,
36
+ testInput: behavioralCtx.testInput,
37
+ expectedOutputSchema: behavioralCtx.expectedOutputSchema,
38
+ }).filter(([, v]) => v !== undefined));
39
+ diagnostics.push(this.createDiagnostic(message, behavioralCtx.toolName, undefined, 'Fix output structure to match declared schema or update schema to match actual output. Ensure output schema accurately reflects tool behavior.', details));
40
+ return diagnostics;
41
+ }
42
+ }
43
+ export const E300OutputValidationFailed = new E300OutputValidationFailedRule();
44
+ //# sourceMappingURL=e300-output-validation-failed.js.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * E301: Output Explosion
3
+ *
4
+ * Condition: Tool output exceeds declared size limit
5
+ *
6
+ * Why this is fatal:
7
+ * - Large outputs overwhelm LLM context
8
+ * - Breaks agent reasoning
9
+ * - Indicates design issue (pagination, filtering needed)
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
13
+ /**
14
+ * Context for output size validation.
15
+ */
16
+ export interface OutputSizeContext {
17
+ /** Tool name */
18
+ toolName: string;
19
+ /** Actual output size in bytes */
20
+ actualSize: number;
21
+ /** Maximum allowed size in bytes */
22
+ maxSize: number;
23
+ /** Size limit string from contract (e.g., "50kb") */
24
+ limitString: string;
25
+ }
26
+ declare class E301OutputExplosionRule extends BaseRule {
27
+ readonly id: "E301";
28
+ readonly severity: "error";
29
+ readonly ruleName = "Output Explosion";
30
+ readonly description = "Tool output exceeds declared size limit. Large outputs overwhelm LLM context and break agent reasoning.";
31
+ check(_ctx: AnalysisContext): Diagnostic[];
32
+ /**
33
+ * Check with behavioral context (called from test orchestrator).
34
+ */
35
+ checkWithBehavioralContext(behavioralCtx: OutputSizeContext): Diagnostic[];
36
+ }
37
+ export declare const E301OutputExplosion: E301OutputExplosionRule;
38
+ export {};
39
+ //# sourceMappingURL=e301-output-explosion.d.ts.map
@@ -0,0 +1,36 @@
1
+ /**
2
+ * E301: Output Explosion
3
+ *
4
+ * Condition: Tool output exceeds declared size limit
5
+ *
6
+ * Why this is fatal:
7
+ * - Large outputs overwhelm LLM context
8
+ * - Breaks agent reasoning
9
+ * - Indicates design issue (pagination, filtering needed)
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import { ERROR_CODES } from '../error-codes.js';
13
+ class E301OutputExplosionRule extends BaseRule {
14
+ id = ERROR_CODES.E301;
15
+ severity = 'error';
16
+ ruleName = 'Output Explosion';
17
+ description = 'Tool output exceeds declared size limit. Large outputs overwhelm LLM context and break agent reasoning.';
18
+ check(_ctx) {
19
+ // This rule requires behavioral context
20
+ return [];
21
+ }
22
+ /**
23
+ * Check with behavioral context (called from test orchestrator).
24
+ */
25
+ checkWithBehavioralContext(behavioralCtx) {
26
+ const diagnostics = [];
27
+ if (behavioralCtx.actualSize > behavioralCtx.maxSize) {
28
+ const actualSizeKB = (behavioralCtx.actualSize / 1024).toFixed(2);
29
+ const maxSizeKB = (behavioralCtx.maxSize / 1024).toFixed(2);
30
+ diagnostics.push(this.createDiagnostic(`Tool "${behavioralCtx.toolName}" returned ${actualSizeKB}KB, exceeding declared limit of ${behavioralCtx.limitString} (${maxSizeKB}KB).`, behavioralCtx.toolName, undefined, `Reduce output size by: paginating results, adding filters, or updating contract limit if legitimate (max_output_size: ${Math.ceil(behavioralCtx.actualSize / 1024)}kb).`));
31
+ }
32
+ return diagnostics;
33
+ }
34
+ }
35
+ export const E301OutputExplosion = new E301OutputExplosionRule();
36
+ //# sourceMappingURL=e301-output-explosion.js.map
@@ -0,0 +1,38 @@
1
+ /**
2
+ * E400: Tool Execution Failed
3
+ *
4
+ * Condition: Tool raises an exception during execution
5
+ *
6
+ * Why this is fatal:
7
+ * - Tool crashes instead of handling errors gracefully
8
+ * - Breaks agent reliability
9
+ * - Indicates missing error handling or input validation
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
13
+ /**
14
+ * Context for execution error detection.
15
+ */
16
+ export interface ExecutionErrorContext {
17
+ /** Tool name */
18
+ toolName: string;
19
+ /** Execution errors */
20
+ errors: Array<{
21
+ message: string;
22
+ code?: string;
23
+ }>;
24
+ }
25
+ declare class E400ToolExecutionFailedRule extends BaseRule {
26
+ readonly id: "E400";
27
+ readonly severity: "error";
28
+ readonly ruleName = "Tool Execution Failed";
29
+ readonly description = "Tool raises an exception during execution. Tool should handle errors gracefully instead of crashing.";
30
+ check(_ctx: AnalysisContext): Diagnostic[];
31
+ /**
32
+ * Check with behavioral context (called from test orchestrator).
33
+ */
34
+ checkWithBehavioralContext(behavioralCtx: ExecutionErrorContext): Diagnostic[];
35
+ }
36
+ export declare const E400ToolExecutionFailed: E400ToolExecutionFailedRule;
37
+ export {};
38
+ //# sourceMappingURL=e400-tool-execution-failed.d.ts.map
@@ -0,0 +1,37 @@
1
+ /**
2
+ * E400: Tool Execution Failed
3
+ *
4
+ * Condition: Tool raises an exception during execution
5
+ *
6
+ * Why this is fatal:
7
+ * - Tool crashes instead of handling errors gracefully
8
+ * - Breaks agent reliability
9
+ * - Indicates missing error handling or input validation
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import { ERROR_CODES } from '../error-codes.js';
13
+ class E400ToolExecutionFailedRule extends BaseRule {
14
+ id = ERROR_CODES.E400;
15
+ severity = 'error';
16
+ ruleName = 'Tool Execution Failed';
17
+ description = 'Tool raises an exception during execution. Tool should handle errors gracefully instead of crashing.';
18
+ check(_ctx) {
19
+ // This rule requires behavioral context
20
+ return [];
21
+ }
22
+ /**
23
+ * Check with behavioral context (called from test orchestrator).
24
+ */
25
+ checkWithBehavioralContext(behavioralCtx) {
26
+ const diagnostics = [];
27
+ if (behavioralCtx.errors.length > 0) {
28
+ const errorMessages = behavioralCtx.errors
29
+ .map(e => ` - ${e.message}`)
30
+ .join('\n');
31
+ diagnostics.push(this.createDiagnostic(`Tool "${behavioralCtx.toolName}" execution failed:\n${errorMessages}`, behavioralCtx.toolName, undefined, 'Fix tool implementation errors. Ensure tool handles all input cases gracefully and validates inputs before processing.'));
32
+ }
33
+ return diagnostics;
34
+ }
35
+ }
36
+ export const E400ToolExecutionFailed = new E400ToolExecutionFailedRule();
37
+ //# sourceMappingURL=e400-tool-execution-failed.js.map
@@ -0,0 +1,44 @@
1
+ /**
2
+ * E403: Unbounded Execution
3
+ *
4
+ * Condition: Tool execution timed out or failed to terminate
5
+ *
6
+ * Why this is fatal:
7
+ * - Tool may hang indefinitely
8
+ * - Breaks agent reliability
9
+ * - Indicates design issue (missing timeouts, infinite loops)
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
13
+ /**
14
+ * Context for unbounded execution detection.
15
+ */
16
+ export interface UnboundedExecutionContext {
17
+ /** Tool name */
18
+ toolName: string;
19
+ /** Whether execution timed out */
20
+ timedOut: boolean;
21
+ /** Declared max execution time (e.g., "5m", "2h") or undefined if using default */
22
+ declaredTimeout?: string;
23
+ /** Actual timeout used in milliseconds */
24
+ actualTimeoutMs?: number;
25
+ /** Execution errors */
26
+ errors: Array<{
27
+ message: string;
28
+ code?: string;
29
+ }>;
30
+ }
31
+ declare class E403UnboundedExecutionRule extends BaseRule {
32
+ readonly id: "E403";
33
+ readonly severity: "error";
34
+ readonly ruleName = "Unbounded Execution";
35
+ readonly description = "Tool execution timed out or failed to terminate. Tool may hang indefinitely, breaking agent reliability.";
36
+ check(_ctx: AnalysisContext): Diagnostic[];
37
+ /**
38
+ * Check with behavioral context (called from test orchestrator).
39
+ */
40
+ checkWithBehavioralContext(behavioralCtx: UnboundedExecutionContext): Diagnostic[];
41
+ }
42
+ export declare const E403UnboundedExecution: E403UnboundedExecutionRule;
43
+ export {};
44
+ //# sourceMappingURL=e403-unbounded-execution.d.ts.map
@@ -0,0 +1,66 @@
1
+ /**
2
+ * E403: Unbounded Execution
3
+ *
4
+ * Condition: Tool execution timed out or failed to terminate
5
+ *
6
+ * Why this is fatal:
7
+ * - Tool may hang indefinitely
8
+ * - Breaks agent reliability
9
+ * - Indicates design issue (missing timeouts, infinite loops)
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import { ERROR_CODES } from '../error-codes.js';
13
+ /**
14
+ * Format timeout in milliseconds to human-readable string.
15
+ */
16
+ function formatTimeout(ms) {
17
+ if (ms < 1000) {
18
+ return `${ms}ms`;
19
+ }
20
+ const s = Math.floor(ms / 1000);
21
+ if (s < 60) {
22
+ return `${s}s`;
23
+ }
24
+ const m = Math.floor(s / 60);
25
+ if (m < 60) {
26
+ return `${m}m`;
27
+ }
28
+ const h = Math.floor(m / 60);
29
+ return `${h}h`;
30
+ }
31
+ class E403UnboundedExecutionRule extends BaseRule {
32
+ id = ERROR_CODES.E403;
33
+ severity = 'error';
34
+ ruleName = 'Unbounded Execution';
35
+ description = 'Tool execution timed out or failed to terminate. Tool may hang indefinitely, breaking agent reliability.';
36
+ check(_ctx) {
37
+ // This rule requires behavioral context
38
+ return [];
39
+ }
40
+ /**
41
+ * Check with behavioral context (called from test orchestrator).
42
+ */
43
+ checkWithBehavioralContext(behavioralCtx) {
44
+ const diagnostics = [];
45
+ if (behavioralCtx.timedOut) {
46
+ const timeoutInfo = behavioralCtx.declaredTimeout
47
+ ? ` (exceeded declared timeout: ${behavioralCtx.declaredTimeout})`
48
+ : behavioralCtx.actualTimeoutMs
49
+ ? ` (exceeded default timeout: ${formatTimeout(behavioralCtx.actualTimeoutMs)})`
50
+ : '';
51
+ const suggestion = behavioralCtx.declaredTimeout
52
+ ? `Tool exceeded its declared max_execution_time (${behavioralCtx.declaredTimeout}). Either fix the tool to complete within this time, or update the contract if a longer timeout is legitimate.`
53
+ : 'Add timeouts, fix infinite loops, or optimize slow operations. If tool legitimately takes longer, declare max_execution_time in contract (e.g., "5m", "2h").';
54
+ diagnostics.push(this.createDiagnostic(`Tool "${behavioralCtx.toolName}" execution timed out${timeoutInfo}. Tool may hang indefinitely.`, behavioralCtx.toolName, undefined, suggestion));
55
+ }
56
+ if (behavioralCtx.errors.length > 0 && !behavioralCtx.timedOut) {
57
+ const errorMessages = behavioralCtx.errors
58
+ .map(e => ` - ${e.message}`)
59
+ .join('\n');
60
+ diagnostics.push(this.createDiagnostic(`Tool "${behavioralCtx.toolName}" execution failed:\n${errorMessages}`, behavioralCtx.toolName, undefined, 'Fix tool implementation errors. Ensure tool handles all input cases gracefully.'));
61
+ }
62
+ return diagnostics;
63
+ }
64
+ }
65
+ export const E403UnboundedExecution = new E403UnboundedExecutionRule();
66
+ //# sourceMappingURL=e403-unbounded-execution.js.map