@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,80 @@
1
+ /**
2
+ * E018: 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 E018InputValidationFailedRule extends BaseRule {
15
+ id = ERROR_CODES.E018;
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
+ let message;
55
+ if (behavioralCtx.testName) {
56
+ // Test-specific error message
57
+ if (behavioralCtx.parsedError?.field) {
58
+ message = `Test "${behavioralCtx.testName}" in tool "${behavioralCtx.toolName}" input validation failed: ${parsedMessage}`;
59
+ }
60
+ else {
61
+ message = `Test "${behavioralCtx.testName}" in tool "${behavioralCtx.toolName}" input validation failed: ${baseError}`;
62
+ }
63
+ }
64
+ else if (behavioralCtx.parsedError?.field) {
65
+ message = `Tool "${behavioralCtx.toolName}" input validation failed: ${parsedMessage}`;
66
+ }
67
+ else {
68
+ message = `Tool "${behavioralCtx.toolName}" input validation failed: ${baseError}`;
69
+ }
70
+ 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.', {
71
+ testName: behavioralCtx.testName,
72
+ testInput: behavioralCtx.testInput,
73
+ parsedError: behavioralCtx.parsedError,
74
+ ...behavioralCtx.details,
75
+ }));
76
+ return diagnostics;
77
+ }
78
+ }
79
+ export const E018InputValidationFailed = new E018InputValidationFailedRule();
80
+ //# sourceMappingURL=e018-input-validation-failed.js.map
@@ -0,0 +1,38 @@
1
+ /**
2
+ * E018: 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 E018ToolExecutionFailedRule extends BaseRule {
26
+ readonly id: "E018";
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 E018ToolExecutionFailed: E018ToolExecutionFailedRule;
37
+ export {};
38
+ //# sourceMappingURL=e018-tool-execution-failed.d.ts.map
@@ -0,0 +1,37 @@
1
+ /**
2
+ * E018: 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 E018ToolExecutionFailedRule extends BaseRule {
14
+ id = ERROR_CODES.E018;
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 E018ToolExecutionFailed = new E018ToolExecutionFailedRule();
37
+ //# sourceMappingURL=e018-tool-execution-failed.js.map
@@ -0,0 +1,38 @@
1
+ /**
2
+ * E019: 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 E019ToolExecutionFailedRule extends BaseRule {
26
+ readonly id: "E019";
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 E019ToolExecutionFailed: E019ToolExecutionFailedRule;
37
+ export {};
38
+ //# sourceMappingURL=e019-tool-execution-failed.d.ts.map
@@ -0,0 +1,37 @@
1
+ /**
2
+ * E019: 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 E019ToolExecutionFailedRule extends BaseRule {
14
+ id = ERROR_CODES.E019;
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 E019ToolExecutionFailed = new E019ToolExecutionFailedRule();
37
+ //# sourceMappingURL=e019-tool-execution-failed.js.map
@@ -0,0 +1,65 @@
1
+ /**
2
+ * E019: Unexpected Test Result
3
+ *
4
+ * Condition: Test's actual outcome doesn't match its expectation
5
+ *
6
+ * Why this is fatal:
7
+ * - Test contract is inaccurate
8
+ * - Tool behavior doesn't match declared guarantees
9
+ * - Can cause false positives/negatives in validation
10
+ * - Indicates mismatch between expectations and reality
11
+ */
12
+ import { BaseRule } from '../base.js';
13
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
14
+ /**
15
+ * Context for unexpected test result detection.
16
+ */
17
+ export interface UnexpectedTestResultContext {
18
+ /** Tool name */
19
+ toolName: string;
20
+ /** Test name */
21
+ testName: string;
22
+ /** Test input */
23
+ testInput?: Record<string, unknown>;
24
+ /** Expected outcome (success/error/timeout) */
25
+ expectedOutcome: 'success' | 'error' | 'timeout';
26
+ /** Actual outcome (success/error/timeout) */
27
+ actualOutcome: 'success' | 'error' | 'timeout';
28
+ /** Expected error code (if expecting error) */
29
+ expectedErrorCode?: string;
30
+ /** Expected error type (if expecting error) */
31
+ expectedErrorType?: string;
32
+ /** Actual error code (if actual outcome is error) */
33
+ actualErrorCode?: string;
34
+ /** Actual error type (if actual outcome is error) */
35
+ actualErrorType?: string;
36
+ /** Expected error details (if expecting specific error) */
37
+ expectedError?: {
38
+ type?: string;
39
+ details?: Record<string, unknown>;
40
+ };
41
+ /** Actual error details (if actual outcome is error) */
42
+ actualError?: {
43
+ code?: string;
44
+ type?: string;
45
+ message?: string;
46
+ };
47
+ }
48
+ declare class E019UnexpectedTestResultRule extends BaseRule {
49
+ readonly id: "E019";
50
+ readonly severity: "error";
51
+ readonly ruleName = "Unexpected Test Result";
52
+ readonly description = "Test's actual outcome doesn't match its expectation. Tool behavior doesn't match declared guarantees.";
53
+ check(_ctx: AnalysisContext): Diagnostic[];
54
+ /**
55
+ * Determine if a diagnostic should be created based on behavioral context.
56
+ */
57
+ private shouldCreateDiagnostic;
58
+ /**
59
+ * Check with behavioral context (called from test orchestrator).
60
+ */
61
+ checkWithBehavioralContext(behavioralCtx: UnexpectedTestResultContext): Diagnostic[];
62
+ }
63
+ export declare const E019UnexpectedTestResult: E019UnexpectedTestResultRule;
64
+ export {};
65
+ //# sourceMappingURL=e019-unexpected-test-result.d.ts.map
@@ -0,0 +1,109 @@
1
+ /**
2
+ * E019: Unexpected Test Result
3
+ *
4
+ * Condition: Test's actual outcome doesn't match its expectation
5
+ *
6
+ * Why this is fatal:
7
+ * - Test contract is inaccurate
8
+ * - Tool behavior doesn't match declared guarantees
9
+ * - Can cause false positives/negatives in validation
10
+ * - Indicates mismatch between expectations and reality
11
+ */
12
+ import { BaseRule } from '../base.js';
13
+ import { ERROR_CODES } from '../error-codes.js';
14
+ class E019UnexpectedTestResultRule extends BaseRule {
15
+ id = ERROR_CODES.E019;
16
+ severity = 'error';
17
+ ruleName = 'Unexpected Test Result';
18
+ description = "Test's actual outcome doesn't match its expectation. Tool behavior doesn't match declared guarantees.";
19
+ check(_ctx) {
20
+ // This rule requires behavioral context
21
+ return [];
22
+ }
23
+ /**
24
+ * Determine if a diagnostic should be created based on behavioral context.
25
+ */
26
+ shouldCreateDiagnostic(behavioralCtx) {
27
+ // If outcomes don't match, create diagnostic
28
+ if (behavioralCtx.expectedOutcome !== behavioralCtx.actualOutcome) {
29
+ return true;
30
+ }
31
+ // Outcomes match - check if error details also match (for error cases)
32
+ if (behavioralCtx.expectedOutcome === 'error') {
33
+ const expectedType = behavioralCtx.expectedErrorType?.toLowerCase();
34
+ const actualType = behavioralCtx.actualErrorType?.toLowerCase();
35
+ if (expectedType && actualType && expectedType !== actualType) {
36
+ return true; // Type mismatch
37
+ }
38
+ if (expectedType && !actualType) {
39
+ return true; // Expected type but no actual type
40
+ }
41
+ const expectedCode = behavioralCtx.expectedErrorCode;
42
+ const actualCode = behavioralCtx.actualErrorCode;
43
+ if (expectedCode && actualCode && expectedCode !== actualCode) {
44
+ return true; // Code mismatch
45
+ }
46
+ }
47
+ return false; // Everything matches
48
+ }
49
+ /**
50
+ * Check with behavioral context (called from test orchestrator).
51
+ */
52
+ checkWithBehavioralContext(behavioralCtx) {
53
+ const diagnostics = [];
54
+ if (!this.shouldCreateDiagnostic(behavioralCtx)) {
55
+ return diagnostics;
56
+ }
57
+ // If we reach here, there's a mismatch - create diagnostic
58
+ let message = `Test "${behavioralCtx.testName}" in tool "${behavioralCtx.toolName}" expected `;
59
+ // Build expected description
60
+ if (behavioralCtx.expectedOutcome === 'success') {
61
+ message += 'success but got ';
62
+ if (behavioralCtx.actualOutcome === 'error') {
63
+ message += `error (${behavioralCtx.actualErrorCode || behavioralCtx.actualErrorType || 'unknown error'})`;
64
+ }
65
+ else if (behavioralCtx.actualOutcome === 'timeout') {
66
+ message += 'timeout';
67
+ }
68
+ else {
69
+ message += behavioralCtx.actualOutcome;
70
+ }
71
+ }
72
+ else if (behavioralCtx.expectedOutcome === 'error') {
73
+ message += `error`;
74
+ if (behavioralCtx.expectedErrorType) {
75
+ message += ` of type "${behavioralCtx.expectedErrorType}"`;
76
+ }
77
+ if (behavioralCtx.expectedErrorCode) {
78
+ message += ` (code: ${behavioralCtx.expectedErrorCode})`;
79
+ }
80
+ message += ' but got ';
81
+ if (behavioralCtx.actualOutcome === 'success') {
82
+ message += 'success';
83
+ }
84
+ else {
85
+ message += `${behavioralCtx.actualOutcome} (${behavioralCtx.actualErrorCode || behavioralCtx.actualErrorType || 'unknown error'})`;
86
+ }
87
+ if (behavioralCtx.actualErrorType &&
88
+ behavioralCtx.expectedErrorType &&
89
+ behavioralCtx.actualErrorType.toLowerCase() !==
90
+ behavioralCtx.expectedErrorType.toLowerCase()) {
91
+ message += ' with different type';
92
+ }
93
+ }
94
+ else {
95
+ message += `${behavioralCtx.expectedOutcome} but got ${behavioralCtx.actualOutcome}`;
96
+ }
97
+ diagnostics.push(this.createDiagnostic(message, behavioralCtx.toolName, undefined, 'Update test expectation to match actual tool behavior, or fix tool implementation to match declared guarantees. Ensure test expectations accurately reflect tool behavior.', {
98
+ testName: behavioralCtx.testName,
99
+ testInput: behavioralCtx.testInput,
100
+ expectedOutcome: behavioralCtx.expectedOutcome,
101
+ actualOutcome: behavioralCtx.actualOutcome,
102
+ expectedError: behavioralCtx.expectedError,
103
+ actualError: behavioralCtx.actualError,
104
+ }));
105
+ return diagnostics;
106
+ }
107
+ }
108
+ export const E019UnexpectedTestResult = new E019UnexpectedTestResultRule();
109
+ //# sourceMappingURL=e019-unexpected-test-result.js.map
@@ -0,0 +1,65 @@
1
+ /**
2
+ * E020: Unexpected Test Result
3
+ *
4
+ * Condition: Test's actual outcome doesn't match its expectation
5
+ *
6
+ * Why this is fatal:
7
+ * - Test contract is inaccurate
8
+ * - Tool behavior doesn't match declared guarantees
9
+ * - Can cause false positives/negatives in validation
10
+ * - Indicates mismatch between expectations and reality
11
+ */
12
+ import { BaseRule } from '../base.js';
13
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
14
+ /**
15
+ * Context for unexpected test result detection.
16
+ */
17
+ export interface UnexpectedTestResultContext {
18
+ /** Tool name */
19
+ toolName: string;
20
+ /** Test name */
21
+ testName: string;
22
+ /** Test input */
23
+ testInput?: Record<string, unknown>;
24
+ /** Expected outcome (success/error/timeout) */
25
+ expectedOutcome: 'success' | 'error' | 'timeout';
26
+ /** Actual outcome (success/error/timeout) */
27
+ actualOutcome: 'success' | 'error' | 'timeout';
28
+ /** Expected error code (if expecting error) */
29
+ expectedErrorCode?: string;
30
+ /** Expected error type (if expecting error) */
31
+ expectedErrorType?: string;
32
+ /** Actual error code (if actual outcome is error) */
33
+ actualErrorCode?: string;
34
+ /** Actual error type (if actual outcome is error) */
35
+ actualErrorType?: string;
36
+ /** Expected error details (if expecting specific error) */
37
+ expectedError?: {
38
+ type?: string;
39
+ details?: Record<string, unknown>;
40
+ };
41
+ /** Actual error details (if actual outcome is error) */
42
+ actualError?: {
43
+ code?: string;
44
+ type?: string;
45
+ message?: string;
46
+ };
47
+ }
48
+ declare class E020UnexpectedTestResultRule extends BaseRule {
49
+ readonly id: "E020";
50
+ readonly severity: "error";
51
+ readonly ruleName = "Unexpected Test Result";
52
+ readonly description = "Test's actual outcome doesn't match its expectation. Tool behavior doesn't match declared guarantees.";
53
+ check(_ctx: AnalysisContext): Diagnostic[];
54
+ /**
55
+ * Determine if a diagnostic should be created based on behavioral context.
56
+ */
57
+ private shouldCreateDiagnostic;
58
+ /**
59
+ * Check with behavioral context (called from test orchestrator).
60
+ */
61
+ checkWithBehavioralContext(behavioralCtx: UnexpectedTestResultContext): Diagnostic[];
62
+ }
63
+ export declare const E020UnexpectedTestResult: E020UnexpectedTestResultRule;
64
+ export {};
65
+ //# sourceMappingURL=e020-unexpected-test-result.d.ts.map
@@ -0,0 +1,109 @@
1
+ /**
2
+ * E020: Unexpected Test Result
3
+ *
4
+ * Condition: Test's actual outcome doesn't match its expectation
5
+ *
6
+ * Why this is fatal:
7
+ * - Test contract is inaccurate
8
+ * - Tool behavior doesn't match declared guarantees
9
+ * - Can cause false positives/negatives in validation
10
+ * - Indicates mismatch between expectations and reality
11
+ */
12
+ import { BaseRule } from '../base.js';
13
+ import { ERROR_CODES } from '../error-codes.js';
14
+ class E020UnexpectedTestResultRule extends BaseRule {
15
+ id = ERROR_CODES.E020;
16
+ severity = 'error';
17
+ ruleName = 'Unexpected Test Result';
18
+ description = "Test's actual outcome doesn't match its expectation. Tool behavior doesn't match declared guarantees.";
19
+ check(_ctx) {
20
+ // This rule requires behavioral context
21
+ return [];
22
+ }
23
+ /**
24
+ * Determine if a diagnostic should be created based on behavioral context.
25
+ */
26
+ shouldCreateDiagnostic(behavioralCtx) {
27
+ // If outcomes don't match, create diagnostic
28
+ if (behavioralCtx.expectedOutcome !== behavioralCtx.actualOutcome) {
29
+ return true;
30
+ }
31
+ // Outcomes match - check if error details also match (for error cases)
32
+ if (behavioralCtx.expectedOutcome === 'error') {
33
+ const expectedType = behavioralCtx.expectedErrorType?.toLowerCase();
34
+ const actualType = behavioralCtx.actualErrorType?.toLowerCase();
35
+ if (expectedType && actualType && expectedType !== actualType) {
36
+ return true; // Type mismatch
37
+ }
38
+ if (expectedType && !actualType) {
39
+ return true; // Expected type but no actual type
40
+ }
41
+ const expectedCode = behavioralCtx.expectedErrorCode;
42
+ const actualCode = behavioralCtx.actualErrorCode;
43
+ if (expectedCode && actualCode && expectedCode !== actualCode) {
44
+ return true; // Code mismatch
45
+ }
46
+ }
47
+ return false; // Everything matches
48
+ }
49
+ /**
50
+ * Check with behavioral context (called from test orchestrator).
51
+ */
52
+ checkWithBehavioralContext(behavioralCtx) {
53
+ const diagnostics = [];
54
+ if (!this.shouldCreateDiagnostic(behavioralCtx)) {
55
+ return diagnostics;
56
+ }
57
+ // If we reach here, there's a mismatch - create diagnostic
58
+ let message = `Test "${behavioralCtx.testName}" in tool "${behavioralCtx.toolName}" expected `;
59
+ // Build expected description
60
+ if (behavioralCtx.expectedOutcome === 'success') {
61
+ message += 'success but got ';
62
+ if (behavioralCtx.actualOutcome === 'error') {
63
+ message += `error (${behavioralCtx.actualErrorCode || behavioralCtx.actualErrorType || 'unknown error'})`;
64
+ }
65
+ else if (behavioralCtx.actualOutcome === 'timeout') {
66
+ message += 'timeout';
67
+ }
68
+ else {
69
+ message += behavioralCtx.actualOutcome;
70
+ }
71
+ }
72
+ else if (behavioralCtx.expectedOutcome === 'error') {
73
+ message += `error`;
74
+ if (behavioralCtx.expectedErrorType) {
75
+ message += ` of type "${behavioralCtx.expectedErrorType}"`;
76
+ }
77
+ if (behavioralCtx.expectedErrorCode) {
78
+ message += ` (code: ${behavioralCtx.expectedErrorCode})`;
79
+ }
80
+ message += ' but got ';
81
+ if (behavioralCtx.actualOutcome === 'success') {
82
+ message += 'success';
83
+ }
84
+ else {
85
+ message += `${behavioralCtx.actualOutcome} (${behavioralCtx.actualErrorCode || behavioralCtx.actualErrorType || 'unknown error'})`;
86
+ }
87
+ if (behavioralCtx.actualErrorType &&
88
+ behavioralCtx.expectedErrorType &&
89
+ behavioralCtx.actualErrorType.toLowerCase() !==
90
+ behavioralCtx.expectedErrorType.toLowerCase()) {
91
+ message += ' with different type';
92
+ }
93
+ }
94
+ else {
95
+ message += `${behavioralCtx.expectedOutcome} but got ${behavioralCtx.actualOutcome}`;
96
+ }
97
+ diagnostics.push(this.createDiagnostic(message, behavioralCtx.toolName, undefined, 'Update test expectation to match actual tool behavior, or fix tool implementation to match declared guarantees. Ensure test expectations accurately reflect tool behavior.', {
98
+ testName: behavioralCtx.testName,
99
+ testInput: behavioralCtx.testInput,
100
+ expectedOutcome: behavioralCtx.expectedOutcome,
101
+ actualOutcome: behavioralCtx.actualOutcome,
102
+ expectedError: behavioralCtx.expectedError,
103
+ actualError: behavioralCtx.actualError,
104
+ }));
105
+ return diagnostics;
106
+ }
107
+ }
108
+ export const E020UnexpectedTestResult = new E020UnexpectedTestResultRule();
109
+ //# sourceMappingURL=e020-unexpected-test-result.js.map
@@ -0,0 +1,22 @@
1
+ /**
2
+ * E100: Missing Output Schema
3
+ *
4
+ * Condition: Tool does not declare an output schema
5
+ *
6
+ * Why this is fatal:
7
+ * - Downstream tools cannot reason about outputs
8
+ * - LLM will invent structure
9
+ * - Reproducibility is impossible
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
13
+ declare class E100MissingOutputSchemaRule extends BaseRule {
14
+ readonly id: "E100";
15
+ readonly severity: "error";
16
+ readonly ruleName = "Missing Output Schema";
17
+ readonly description = "Tool does not declare an output schema. Downstream tools cannot safely consume its output.";
18
+ check(ctx: AnalysisContext): Diagnostic[];
19
+ }
20
+ export declare const E100MissingOutputSchema: E100MissingOutputSchemaRule;
21
+ export {};
22
+ //# sourceMappingURL=e100-missing-output-schema.d.ts.map
@@ -0,0 +1,30 @@
1
+ /**
2
+ * E100: Missing Output Schema
3
+ *
4
+ * Condition: Tool does not declare an output schema
5
+ *
6
+ * Why this is fatal:
7
+ * - Downstream tools cannot reason about outputs
8
+ * - LLM will invent structure
9
+ * - Reproducibility is impossible
10
+ */
11
+ import { BaseRule } from '../base.js';
12
+ import { ERROR_CODES } from '../error-codes.js';
13
+ class E100MissingOutputSchemaRule extends BaseRule {
14
+ id = ERROR_CODES.E100;
15
+ severity = 'error';
16
+ ruleName = 'Missing Output Schema';
17
+ description = 'Tool does not declare an output schema. Downstream tools cannot safely consume its output.';
18
+ check(ctx) {
19
+ const diagnostics = [];
20
+ for (const tool of ctx.tools) {
21
+ // Check if tool has no output fields
22
+ if (!tool.outputs || tool.outputs.length === 0) {
23
+ diagnostics.push(this.createDiagnostic(`Tool "${tool.name}" has no output schema. Downstream tools cannot safely consume its output.`, tool.name, undefined, 'Add an output schema to the tool definition to specify the structure of the output.'));
24
+ }
25
+ }
26
+ return diagnostics;
27
+ }
28
+ }
29
+ export const E100MissingOutputSchema = new E100MissingOutputSchemaRule();
30
+ //# sourceMappingURL=e100-missing-output-schema.js.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * E101: Missing Tool Description
3
+ *
4
+ * Condition:
5
+ * - Tool has no description OR
6
+ * - Tool description is empty or only whitespace
7
+ *
8
+ * Why:
9
+ * - LLM cannot understand what the tool does
10
+ * - Tool selection becomes ambiguous
11
+ * - Critical for tool discovery and usage
12
+ */
13
+ import { BaseRule } from '../base.js';
14
+ import type { AnalysisContext, Diagnostic } from '../../types.js';
15
+ declare class E101MissingToolDescriptionRule extends BaseRule {
16
+ readonly id: "E101";
17
+ readonly severity: "error";
18
+ readonly ruleName = "Missing Tool Description";
19
+ readonly description = "Tool is missing a description. LLM cannot understand what the tool does.";
20
+ check(ctx: AnalysisContext): Diagnostic[];
21
+ }
22
+ export declare const E101MissingToolDescription: E101MissingToolDescriptionRule;
23
+ export {};
24
+ //# sourceMappingURL=e101-missing-tool-description.d.ts.map