sfcc-dev-mcp 1.0.15 → 1.0.19

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 (865) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.yml +3 -1
  2. package/.github/ISSUE_TEMPLATE/documentation.yml +2 -2
  3. package/.github/ISSUE_TEMPLATE/question.yml +1 -1
  4. package/.github/PULL_REQUEST_TEMPLATE/documentation.md +1 -1
  5. package/.github/PULL_REQUEST_TEMPLATE/new_tool.md +1 -1
  6. package/.github/agents/official-docs-researcher.agent.md +56 -0
  7. package/.github/instructions/mcp-node-tests.instructions.md +12 -916
  8. package/.github/instructions/mcp-yml-tests.instructions.md +14 -742
  9. package/.github/pull_request_template.md +1 -1
  10. package/.github/skills/agent-authoring/SKILL.md +66 -0
  11. package/.github/skills/mcp-log-debugging/SKILL.md +69 -0
  12. package/.github/skills/mcp-programmatic-testing/SKILL.md +142 -0
  13. package/.github/skills/mcp-yaml-testing/SKILL.md +136 -0
  14. package/.github/skills/salesforce-developer-site-scraper/SKILL.md +102 -0
  15. package/.github/skills/salesforce-developer-site-scraper/scripts/scrape-to-markdown.js +205 -0
  16. package/.github/skills/salesforce-help-site-scraper/SKILL.md +84 -0
  17. package/.github/skills/salesforce-help-site-scraper/scripts/scrape-help-to-markdown.js +212 -0
  18. package/.github/skills/skill-authoring/SKILL.md +228 -0
  19. package/.github/skills/skill-authoring/references/PATTERNS.md +384 -0
  20. package/.github/workflows/ci.yml +3 -3
  21. package/.github/workflows/deploy-pages.yml +9 -19
  22. package/.github/workflows/publish.yml +5 -2
  23. package/.github/workflows/update-docs.yml +1 -1
  24. package/AGENTS.md +140 -286
  25. package/CONTRIBUTING.md +10 -22
  26. package/README.md +48 -16
  27. package/ai-instructions/{github-copilot/copilot-instructions.md → AGENTS.md} +99 -127
  28. package/ai-instructions/skills/sfcc-caching/SKILL.md +89 -0
  29. package/{dist/docs/best-practices/cartridge_creation.md → ai-instructions/skills/sfcc-cartridge-development/SKILL.md} +31 -7
  30. package/ai-instructions/skills/sfcc-forms-development/SKILL.md +261 -0
  31. package/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +143 -0
  32. package/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +127 -0
  33. package/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +95 -0
  34. package/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +39 -0
  35. package/ai-instructions/skills/sfcc-isml-development/SKILL.md +370 -0
  36. package/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +116 -0
  37. package/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +50 -0
  38. package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +45 -0
  39. package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +85 -0
  40. package/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +63 -0
  41. package/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +159 -0
  42. package/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +13 -0
  43. package/ai-instructions/skills/sfcc-job-development/SKILL.md +334 -0
  44. package/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +393 -0
  45. package/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +271 -0
  46. package/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +257 -0
  47. package/ai-instructions/skills/sfcc-localization/SKILL.md +92 -0
  48. package/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +63 -0
  49. package/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +29 -0
  50. package/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +33 -0
  51. package/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +41 -0
  52. package/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +35 -0
  53. package/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +740 -0
  54. package/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +25 -0
  55. package/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +67 -0
  56. package/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +23 -0
  57. package/ai-instructions/skills/sfcc-localization/references/TESTING.md +21 -0
  58. package/{docs/best-practices/localserviceregistry.md → ai-instructions/skills/sfcc-localserviceregistry/SKILL.md} +65 -31
  59. package/ai-instructions/skills/sfcc-logging/SKILL.md +352 -0
  60. package/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +282 -0
  61. package/{docs/best-practices/ocapi_hooks.md → ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md} +51 -16
  62. package/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +108 -0
  63. package/ai-instructions/skills/sfcc-page-designer/SKILL.md +353 -0
  64. package/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
  65. package/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +322 -0
  66. package/{dist/docs/best-practices/performance.md → ai-instructions/skills/sfcc-performance/SKILL.md} +35 -3
  67. package/ai-instructions/skills/sfcc-platform-limits/SKILL.md +89 -0
  68. package/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +237 -0
  69. package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +214 -0
  70. package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +253 -0
  71. package/{docs/best-practices/scapi_hooks.md → ai-instructions/skills/sfcc-scapi-hooks/SKILL.md} +44 -17
  72. package/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +380 -0
  73. package/{docs/best-practices/security.md → ai-instructions/skills/sfcc-security/SKILL.md} +12 -3
  74. package/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +270 -0
  75. package/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +285 -0
  76. package/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +206 -0
  77. package/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +165 -0
  78. package/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +185 -0
  79. package/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +347 -0
  80. package/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +257 -0
  81. package/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +193 -0
  82. package/{dist/docs/best-practices/sfra_controllers.md → ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md} +0 -670
  83. package/ai-instructions/skills/sfcc-sfra-models/SKILL.md +322 -0
  84. package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +530 -0
  85. package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +234 -0
  86. package/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +417 -0
  87. package/{dist/docs/best-practices/sfra_scss.md → ai-instructions/skills/sfcc-sfra-scss/SKILL.md} +5 -0
  88. package/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +111 -0
  89. package/dist/ai-instructions/AGENTS.md +628 -0
  90. package/dist/ai-instructions/skills/sfcc-caching/SKILL.md +89 -0
  91. package/{docs/best-practices/cartridge_creation.md → dist/ai-instructions/skills/sfcc-cartridge-development/SKILL.md} +31 -7
  92. package/dist/ai-instructions/skills/sfcc-forms-development/SKILL.md +261 -0
  93. package/dist/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +143 -0
  94. package/dist/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +127 -0
  95. package/dist/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +95 -0
  96. package/dist/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +39 -0
  97. package/dist/ai-instructions/skills/sfcc-isml-development/SKILL.md +370 -0
  98. package/dist/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +116 -0
  99. package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +50 -0
  100. package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +45 -0
  101. package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +85 -0
  102. package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +63 -0
  103. package/dist/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +159 -0
  104. package/dist/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +13 -0
  105. package/dist/ai-instructions/skills/sfcc-job-development/SKILL.md +334 -0
  106. package/dist/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +393 -0
  107. package/dist/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +271 -0
  108. package/dist/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +257 -0
  109. package/dist/ai-instructions/skills/sfcc-localization/SKILL.md +92 -0
  110. package/dist/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +63 -0
  111. package/dist/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +29 -0
  112. package/dist/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +33 -0
  113. package/dist/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +41 -0
  114. package/dist/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +35 -0
  115. package/dist/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +740 -0
  116. package/dist/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +25 -0
  117. package/dist/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +67 -0
  118. package/dist/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +23 -0
  119. package/dist/ai-instructions/skills/sfcc-localization/references/TESTING.md +21 -0
  120. package/dist/{docs/best-practices/localserviceregistry.md → ai-instructions/skills/sfcc-localserviceregistry/SKILL.md} +65 -31
  121. package/dist/ai-instructions/skills/sfcc-logging/SKILL.md +352 -0
  122. package/dist/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +282 -0
  123. package/dist/{docs/best-practices/ocapi_hooks.md → ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md} +51 -16
  124. package/dist/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +108 -0
  125. package/dist/ai-instructions/skills/sfcc-page-designer/SKILL.md +353 -0
  126. package/dist/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
  127. package/dist/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +322 -0
  128. package/{docs/best-practices/performance.md → dist/ai-instructions/skills/sfcc-performance/SKILL.md} +35 -3
  129. package/dist/ai-instructions/skills/sfcc-platform-limits/SKILL.md +89 -0
  130. package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +237 -0
  131. package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +214 -0
  132. package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +253 -0
  133. package/dist/{docs/best-practices/scapi_hooks.md → ai-instructions/skills/sfcc-scapi-hooks/SKILL.md} +44 -17
  134. package/dist/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +380 -0
  135. package/dist/{docs/best-practices/security.md → ai-instructions/skills/sfcc-security/SKILL.md} +12 -3
  136. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +270 -0
  137. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +285 -0
  138. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +206 -0
  139. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +165 -0
  140. package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +185 -0
  141. package/dist/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +347 -0
  142. package/dist/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +257 -0
  143. package/dist/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +193 -0
  144. package/{docs/best-practices/sfra_controllers.md → dist/ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md} +0 -670
  145. package/dist/ai-instructions/skills/sfcc-sfra-models/SKILL.md +322 -0
  146. package/dist/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +530 -0
  147. package/dist/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +234 -0
  148. package/dist/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +417 -0
  149. package/{docs/best-practices/sfra_scss.md → dist/ai-instructions/skills/sfcc-sfra-scss/SKILL.md} +5 -0
  150. package/dist/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +111 -0
  151. package/dist/clients/agent-instructions-client.d.ts +66 -0
  152. package/dist/clients/agent-instructions-client.d.ts.map +1 -0
  153. package/dist/clients/agent-instructions-client.js +277 -0
  154. package/dist/clients/agent-instructions-client.js.map +1 -0
  155. package/dist/clients/base/abstract-documentation-client.d.ts +146 -0
  156. package/dist/clients/base/abstract-documentation-client.d.ts.map +1 -0
  157. package/dist/clients/base/abstract-documentation-client.js +265 -0
  158. package/dist/clients/base/abstract-documentation-client.js.map +1 -0
  159. package/dist/clients/base/oauth-token.d.ts +18 -0
  160. package/dist/clients/base/oauth-token.d.ts.map +1 -1
  161. package/dist/clients/base/oauth-token.js +45 -2
  162. package/dist/clients/base/oauth-token.js.map +1 -1
  163. package/dist/clients/cartridge/cartridge-generation-client.d.ts +59 -0
  164. package/dist/clients/cartridge/cartridge-generation-client.d.ts.map +1 -0
  165. package/dist/clients/cartridge/cartridge-generation-client.js +224 -0
  166. package/dist/clients/cartridge/cartridge-generation-client.js.map +1 -0
  167. package/dist/clients/cartridge/cartridge-structure.d.ts +17 -0
  168. package/dist/clients/cartridge/cartridge-structure.d.ts.map +1 -0
  169. package/dist/clients/cartridge/cartridge-structure.js +33 -0
  170. package/dist/clients/cartridge/cartridge-structure.js.map +1 -0
  171. package/dist/clients/cartridge/cartridge-templates.d.ts +22 -0
  172. package/dist/clients/cartridge/cartridge-templates.d.ts.map +1 -0
  173. package/dist/clients/cartridge/cartridge-templates.js +225 -0
  174. package/dist/clients/cartridge/cartridge-templates.js.map +1 -0
  175. package/dist/clients/cartridge/index.d.ts +7 -0
  176. package/dist/clients/cartridge/index.d.ts.map +1 -0
  177. package/dist/clients/cartridge/index.js +7 -0
  178. package/dist/clients/cartridge/index.js.map +1 -0
  179. package/dist/clients/docs/documentation-scanner.d.ts +5 -2
  180. package/dist/clients/docs/documentation-scanner.d.ts.map +1 -1
  181. package/dist/clients/docs/documentation-scanner.js +38 -23
  182. package/dist/clients/docs/documentation-scanner.js.map +1 -1
  183. package/dist/clients/docs-client.d.ts +13 -4
  184. package/dist/clients/docs-client.d.ts.map +1 -1
  185. package/dist/clients/docs-client.js +44 -11
  186. package/dist/clients/docs-client.js.map +1 -1
  187. package/dist/clients/isml-client.d.ts +71 -0
  188. package/dist/clients/isml-client.d.ts.map +1 -0
  189. package/dist/clients/isml-client.js +252 -0
  190. package/dist/clients/isml-client.js.map +1 -0
  191. package/dist/clients/ocapi/code-versions-client.d.ts.map +1 -1
  192. package/dist/clients/ocapi/code-versions-client.js +6 -1
  193. package/dist/clients/ocapi/code-versions-client.js.map +1 -1
  194. package/dist/clients/ocapi-client.d.ts +9 -101
  195. package/dist/clients/ocapi-client.d.ts.map +1 -1
  196. package/dist/clients/ocapi-client.js +11 -93
  197. package/dist/clients/ocapi-client.js.map +1 -1
  198. package/dist/clients/script-debugger/index.d.ts +5 -0
  199. package/dist/clients/script-debugger/index.d.ts.map +1 -0
  200. package/dist/clients/script-debugger/index.js +5 -0
  201. package/dist/clients/script-debugger/index.js.map +1 -0
  202. package/dist/clients/script-debugger/script-debugger-client.d.ts +147 -0
  203. package/dist/clients/script-debugger/script-debugger-client.d.ts.map +1 -0
  204. package/dist/clients/script-debugger/script-debugger-client.js +591 -0
  205. package/dist/clients/script-debugger/script-debugger-client.js.map +1 -0
  206. package/dist/clients/sfra-client.d.ts +13 -62
  207. package/dist/clients/sfra-client.d.ts.map +1 -1
  208. package/dist/clients/sfra-client.js +105 -326
  209. package/dist/clients/sfra-client.js.map +1 -1
  210. package/dist/config/configuration-factory.d.ts +1 -1
  211. package/dist/config/configuration-factory.d.ts.map +1 -1
  212. package/dist/config/configuration-factory.js +5 -1
  213. package/dist/config/configuration-factory.js.map +1 -1
  214. package/dist/config/dw-json-loader.d.ts +7 -0
  215. package/dist/config/dw-json-loader.d.ts.map +1 -1
  216. package/dist/config/dw-json-loader.js +92 -15
  217. package/dist/config/dw-json-loader.js.map +1 -1
  218. package/dist/config/workspace-roots.d.ts +143 -0
  219. package/dist/config/workspace-roots.d.ts.map +1 -0
  220. package/dist/config/workspace-roots.js +448 -0
  221. package/dist/config/workspace-roots.js.map +1 -0
  222. package/dist/constants/index.d.ts +1 -0
  223. package/dist/constants/index.d.ts.map +1 -0
  224. package/dist/constants/index.js +3 -0
  225. package/dist/constants/index.js.map +1 -0
  226. package/dist/core/handlers/abstract-client-handler.d.ts +52 -0
  227. package/dist/core/handlers/abstract-client-handler.d.ts.map +1 -0
  228. package/dist/core/handlers/abstract-client-handler.js +51 -0
  229. package/dist/core/handlers/abstract-client-handler.js.map +1 -0
  230. package/dist/core/handlers/agent-instructions-handler.d.ts +17 -0
  231. package/dist/core/handlers/agent-instructions-handler.d.ts.map +1 -0
  232. package/dist/core/handlers/agent-instructions-handler.js +38 -0
  233. package/dist/core/handlers/agent-instructions-handler.js.map +1 -0
  234. package/dist/core/handlers/base-handler.d.ts +3 -68
  235. package/dist/core/handlers/base-handler.d.ts.map +1 -1
  236. package/dist/core/handlers/base-handler.js +11 -84
  237. package/dist/core/handlers/base-handler.js.map +1 -1
  238. package/dist/core/handlers/cartridge-handler.d.ts +10 -11
  239. package/dist/core/handlers/cartridge-handler.d.ts.map +1 -1
  240. package/dist/core/handlers/cartridge-handler.js +10 -28
  241. package/dist/core/handlers/cartridge-handler.js.map +1 -1
  242. package/dist/core/handlers/client-factory.d.ts +12 -2
  243. package/dist/core/handlers/client-factory.d.ts.map +1 -1
  244. package/dist/core/handlers/client-factory.js +28 -1
  245. package/dist/core/handlers/client-factory.js.map +1 -1
  246. package/dist/core/handlers/code-version-handler.d.ts +11 -11
  247. package/dist/core/handlers/code-version-handler.d.ts.map +1 -1
  248. package/dist/core/handlers/code-version-handler.js +13 -27
  249. package/dist/core/handlers/code-version-handler.js.map +1 -1
  250. package/dist/core/handlers/docs-handler.d.ts +6 -12
  251. package/dist/core/handlers/docs-handler.d.ts.map +1 -1
  252. package/dist/core/handlers/docs-handler.js +11 -36
  253. package/dist/core/handlers/docs-handler.js.map +1 -1
  254. package/dist/core/handlers/isml-handler.d.ts +11 -0
  255. package/dist/core/handlers/isml-handler.d.ts.map +1 -0
  256. package/dist/core/handlers/isml-handler.js +18 -0
  257. package/dist/core/handlers/isml-handler.js.map +1 -0
  258. package/dist/core/handlers/job-log-handler.d.ts +8 -7
  259. package/dist/core/handlers/job-log-handler.d.ts.map +1 -1
  260. package/dist/core/handlers/job-log-handler.js +14 -5
  261. package/dist/core/handlers/job-log-handler.js.map +1 -1
  262. package/dist/core/handlers/log-handler.d.ts +8 -7
  263. package/dist/core/handlers/log-handler.d.ts.map +1 -1
  264. package/dist/core/handlers/log-handler.js +14 -5
  265. package/dist/core/handlers/log-handler.js.map +1 -1
  266. package/dist/core/handlers/script-debugger-handler.d.ts +18 -0
  267. package/dist/core/handlers/script-debugger-handler.d.ts.map +1 -0
  268. package/dist/core/handlers/script-debugger-handler.js +31 -0
  269. package/dist/core/handlers/script-debugger-handler.js.map +1 -0
  270. package/dist/core/handlers/sfra-handler.d.ts +6 -12
  271. package/dist/core/handlers/sfra-handler.d.ts.map +1 -1
  272. package/dist/core/handlers/sfra-handler.js +11 -36
  273. package/dist/core/handlers/sfra-handler.js.map +1 -1
  274. package/dist/core/handlers/simple-client-handler.d.ts +41 -0
  275. package/dist/core/handlers/simple-client-handler.d.ts.map +1 -0
  276. package/dist/core/handlers/simple-client-handler.js +49 -0
  277. package/dist/core/handlers/simple-client-handler.js.map +1 -0
  278. package/dist/core/handlers/system-object-handler.d.ts +11 -11
  279. package/dist/core/handlers/system-object-handler.d.ts.map +1 -1
  280. package/dist/core/handlers/system-object-handler.js +13 -27
  281. package/dist/core/handlers/system-object-handler.js.map +1 -1
  282. package/dist/core/handlers/validation-helpers.d.ts +22 -24
  283. package/dist/core/handlers/validation-helpers.d.ts.map +1 -1
  284. package/dist/core/handlers/validation-helpers.js +89 -39
  285. package/dist/core/handlers/validation-helpers.js.map +1 -1
  286. package/dist/core/instruction-advisor.d.ts +28 -0
  287. package/dist/core/instruction-advisor.d.ts.map +1 -0
  288. package/dist/core/instruction-advisor.js +114 -0
  289. package/dist/core/instruction-advisor.js.map +1 -0
  290. package/dist/core/server.d.ts +25 -0
  291. package/dist/core/server.d.ts.map +1 -1
  292. package/dist/core/server.js +151 -11
  293. package/dist/core/server.js.map +1 -1
  294. package/dist/core/tool-definitions.d.ts +6 -854
  295. package/dist/core/tool-definitions.d.ts.map +1 -1
  296. package/dist/core/tool-definitions.js +8 -1064
  297. package/dist/core/tool-definitions.js.map +1 -1
  298. package/dist/core/tool-schemas/agent-instruction-tools.d.ts +77 -0
  299. package/dist/core/tool-schemas/agent-instruction-tools.d.ts.map +1 -0
  300. package/dist/core/tool-schemas/agent-instruction-tools.js +72 -0
  301. package/dist/core/tool-schemas/agent-instruction-tools.js.map +1 -0
  302. package/dist/core/tool-schemas/cartridge-tools.d.ts +27 -0
  303. package/dist/core/tool-schemas/cartridge-tools.d.ts.map +1 -0
  304. package/dist/core/tool-schemas/cartridge-tools.js +29 -0
  305. package/dist/core/tool-schemas/cartridge-tools.js.map +1 -0
  306. package/dist/core/tool-schemas/code-version-tools.d.ts +28 -0
  307. package/dist/core/tool-schemas/code-version-tools.d.ts.map +1 -0
  308. package/dist/core/tool-schemas/code-version-tools.js +28 -0
  309. package/dist/core/tool-schemas/code-version-tools.js.map +1 -0
  310. package/dist/core/tool-schemas/documentation-tools.d.ts +139 -0
  311. package/dist/core/tool-schemas/documentation-tools.d.ts.map +1 -0
  312. package/dist/core/tool-schemas/documentation-tools.js +104 -0
  313. package/dist/core/tool-schemas/documentation-tools.js.map +1 -0
  314. package/dist/core/tool-schemas/index.d.ts +17 -0
  315. package/dist/core/tool-schemas/index.d.ts.map +1 -0
  316. package/dist/core/tool-schemas/index.js +19 -0
  317. package/dist/core/tool-schemas/index.js.map +1 -0
  318. package/dist/core/tool-schemas/isml-tools.d.ts +98 -0
  319. package/dist/core/tool-schemas/isml-tools.d.ts.map +1 -0
  320. package/dist/core/tool-schemas/isml-tools.js +89 -0
  321. package/dist/core/tool-schemas/isml-tools.js.map +1 -0
  322. package/dist/core/tool-schemas/log-tools.d.ts +221 -0
  323. package/dist/core/tool-schemas/log-tools.d.ts.map +1 -0
  324. package/dist/core/tool-schemas/log-tools.js +180 -0
  325. package/dist/core/tool-schemas/log-tools.js.map +1 -0
  326. package/dist/core/tool-schemas/script-debugger-tools.d.ts +44 -0
  327. package/dist/core/tool-schemas/script-debugger-tools.d.ts.map +1 -0
  328. package/dist/core/tool-schemas/script-debugger-tools.js +83 -0
  329. package/dist/core/tool-schemas/script-debugger-tools.js.map +1 -0
  330. package/dist/core/tool-schemas/sfra-tools.d.ts +63 -0
  331. package/dist/core/tool-schemas/sfra-tools.d.ts.map +1 -0
  332. package/dist/core/tool-schemas/sfra-tools.js +65 -0
  333. package/dist/core/tool-schemas/sfra-tools.js.map +1 -0
  334. package/dist/core/tool-schemas/shared-schemas.d.ts +350 -0
  335. package/dist/core/tool-schemas/shared-schemas.d.ts.map +1 -0
  336. package/dist/core/tool-schemas/shared-schemas.js +153 -0
  337. package/dist/core/tool-schemas/shared-schemas.js.map +1 -0
  338. package/dist/core/tool-schemas/system-object-tools.d.ts +511 -0
  339. package/dist/core/tool-schemas/system-object-tools.d.ts.map +1 -0
  340. package/dist/core/tool-schemas/system-object-tools.js +126 -0
  341. package/dist/core/tool-schemas/system-object-tools.js.map +1 -0
  342. package/dist/docs/dw_net/HTTPClient.md +46 -2
  343. package/dist/docs/dw_net/HTTPClientLoggingConfig.md +296 -0
  344. package/dist/docs/dw_order/Basket.md +7 -7
  345. package/dist/docs/dw_order/BasketMgr.md +22 -6
  346. package/dist/docs/dw_order.hooks/BasketMergeHooks.md +42 -0
  347. package/dist/docs/dw_svc/ServiceCallback.md +2 -2
  348. package/dist/docs/isml/isactivedatacontext.md +382 -0
  349. package/dist/docs/isml/isactivedatahead.md +566 -0
  350. package/dist/docs/isml/isanalyticsoff.md +537 -0
  351. package/dist/docs/isml/isapplepay.md +667 -0
  352. package/dist/docs/isml/isbreak.md +687 -0
  353. package/dist/docs/isml/isbuynow.md +682 -0
  354. package/dist/docs/isml/iscache.md +802 -0
  355. package/dist/docs/isml/iscomment.md +794 -0
  356. package/dist/docs/isml/iscomponent.md +797 -0
  357. package/dist/docs/isml/iscontent.md +594 -0
  358. package/dist/docs/isml/iscontinue.md +563 -0
  359. package/dist/docs/isml/iscookie.md +798 -0
  360. package/dist/docs/isml/isdecorate.md +818 -0
  361. package/dist/docs/isml/isif.md +737 -0
  362. package/dist/docs/isml/isinclude.md +874 -0
  363. package/dist/docs/isml/isloop.md +377 -0
  364. package/dist/docs/isml/ismodule.md +844 -0
  365. package/dist/docs/isml/isnext.md +672 -0
  366. package/dist/docs/isml/isobject.md +760 -0
  367. package/dist/docs/isml/ispayment.md +577 -0
  368. package/dist/docs/isml/ispaymentmessages.md +664 -0
  369. package/dist/docs/isml/isprint.md +875 -0
  370. package/dist/docs/isml/isredirect.md +716 -0
  371. package/dist/docs/isml/isremove.md +725 -0
  372. package/dist/docs/isml/isreplace.md +783 -0
  373. package/dist/docs/isml/isscript.md +859 -0
  374. package/dist/docs/isml/isselect.md +908 -0
  375. package/dist/docs/isml/isset.md +585 -0
  376. package/dist/docs/isml/isslot.md +824 -0
  377. package/dist/docs/isml/isstatus.md +711 -0
  378. package/dist/main.d.ts +16 -0
  379. package/dist/main.d.ts.map +1 -1
  380. package/dist/main.js +60 -28
  381. package/dist/main.js.map +1 -1
  382. package/dist/services/index.d.ts +4 -2
  383. package/dist/services/index.d.ts.map +1 -1
  384. package/dist/services/index.js +2 -2
  385. package/dist/services/index.js.map +1 -1
  386. package/dist/tool-configs/agent-instructions-tool-config.d.ts +6 -0
  387. package/dist/tool-configs/agent-instructions-tool-config.d.ts.map +1 -0
  388. package/dist/tool-configs/agent-instructions-tool-config.js +74 -0
  389. package/dist/tool-configs/agent-instructions-tool-config.js.map +1 -0
  390. package/dist/tool-configs/code-version-tool-config.d.ts.map +1 -1
  391. package/dist/tool-configs/code-version-tool-config.js +0 -5
  392. package/dist/tool-configs/code-version-tool-config.js.map +1 -1
  393. package/dist/tool-configs/docs-tool-config.d.ts.map +1 -1
  394. package/dist/tool-configs/docs-tool-config.js +0 -7
  395. package/dist/tool-configs/docs-tool-config.js.map +1 -1
  396. package/dist/tool-configs/isml-tool-config.d.ts +11 -0
  397. package/dist/tool-configs/isml-tool-config.d.ts.map +1 -0
  398. package/dist/tool-configs/isml-tool-config.js +77 -0
  399. package/dist/tool-configs/isml-tool-config.js.map +1 -0
  400. package/dist/tool-configs/job-log-tool-config.d.ts +1 -2
  401. package/dist/tool-configs/job-log-tool-config.d.ts.map +1 -1
  402. package/dist/tool-configs/job-log-tool-config.js +11 -15
  403. package/dist/tool-configs/job-log-tool-config.js.map +1 -1
  404. package/dist/tool-configs/log-tool-config.d.ts +1 -2
  405. package/dist/tool-configs/log-tool-config.d.ts.map +1 -1
  406. package/dist/tool-configs/log-tool-config.js +35 -51
  407. package/dist/tool-configs/log-tool-config.js.map +1 -1
  408. package/dist/tool-configs/script-debugger-tool-config.d.ts +11 -0
  409. package/dist/tool-configs/script-debugger-tool-config.d.ts.map +1 -0
  410. package/dist/tool-configs/script-debugger-tool-config.js +35 -0
  411. package/dist/tool-configs/script-debugger-tool-config.js.map +1 -0
  412. package/dist/tool-configs/sfra-tool-config.d.ts.map +1 -1
  413. package/dist/tool-configs/sfra-tool-config.js +0 -11
  414. package/dist/tool-configs/sfra-tool-config.js.map +1 -1
  415. package/dist/tool-configs/system-object-tool-config.d.ts.map +1 -1
  416. package/dist/tool-configs/system-object-tool-config.js +0 -5
  417. package/dist/tool-configs/system-object-tool-config.js.map +1 -1
  418. package/dist/types/types.d.ts +2 -0
  419. package/dist/types/types.d.ts.map +1 -1
  420. package/dist/utils/cache.d.ts +12 -10
  421. package/dist/utils/cache.d.ts.map +1 -1
  422. package/dist/utils/cache.js +47 -47
  423. package/dist/utils/cache.js.map +1 -1
  424. package/dist/utils/category-utils.d.ts +31 -0
  425. package/dist/utils/category-utils.d.ts.map +1 -0
  426. package/dist/utils/category-utils.js +45 -0
  427. package/dist/utils/category-utils.js.map +1 -0
  428. package/dist/utils/log-tool-constants.d.ts +16 -13
  429. package/dist/utils/log-tool-constants.d.ts.map +1 -1
  430. package/dist/utils/log-tool-constants.js +10 -11
  431. package/dist/utils/log-tool-constants.js.map +1 -1
  432. package/dist/utils/logger.d.ts +11 -0
  433. package/dist/utils/logger.d.ts.map +1 -1
  434. package/dist/utils/logger.js +35 -1
  435. package/dist/utils/logger.js.map +1 -1
  436. package/dist/utils/markdown-utils.d.ts +60 -0
  437. package/dist/utils/markdown-utils.d.ts.map +1 -0
  438. package/dist/utils/markdown-utils.js +206 -0
  439. package/dist/utils/markdown-utils.js.map +1 -0
  440. package/dist/utils/path-resolver.d.ts +12 -4
  441. package/dist/utils/path-resolver.d.ts.map +1 -1
  442. package/dist/utils/path-resolver.js +22 -8
  443. package/dist/utils/path-resolver.js.map +1 -1
  444. package/dist/utils/path-validation.d.ts +40 -0
  445. package/dist/utils/path-validation.d.ts.map +1 -0
  446. package/dist/utils/path-validation.js +84 -0
  447. package/dist/utils/path-validation.js.map +1 -0
  448. package/docs/dw_net/HTTPClient.md +46 -2
  449. package/docs/dw_net/HTTPClientLoggingConfig.md +296 -0
  450. package/docs/dw_order/Basket.md +7 -7
  451. package/docs/dw_order/BasketMgr.md +22 -6
  452. package/docs/dw_order.hooks/BasketMergeHooks.md +42 -0
  453. package/docs/dw_svc/ServiceCallback.md +2 -2
  454. package/docs/isml/isactivedatacontext.md +382 -0
  455. package/docs/isml/isactivedatahead.md +566 -0
  456. package/docs/isml/isanalyticsoff.md +537 -0
  457. package/docs/isml/isapplepay.md +667 -0
  458. package/docs/isml/isbreak.md +687 -0
  459. package/docs/isml/isbuynow.md +682 -0
  460. package/docs/isml/iscache.md +802 -0
  461. package/docs/isml/iscomment.md +794 -0
  462. package/docs/isml/iscomponent.md +797 -0
  463. package/docs/isml/iscontent.md +594 -0
  464. package/docs/isml/iscontinue.md +563 -0
  465. package/docs/isml/iscookie.md +798 -0
  466. package/docs/isml/isdecorate.md +818 -0
  467. package/docs/isml/isif.md +737 -0
  468. package/docs/isml/isinclude.md +874 -0
  469. package/docs/isml/isloop.md +377 -0
  470. package/docs/isml/ismodule.md +844 -0
  471. package/docs/isml/isnext.md +672 -0
  472. package/docs/isml/isobject.md +760 -0
  473. package/docs/isml/ispayment.md +577 -0
  474. package/docs/isml/ispaymentmessages.md +664 -0
  475. package/docs/isml/isprint.md +875 -0
  476. package/docs/isml/isredirect.md +716 -0
  477. package/docs/isml/isremove.md +725 -0
  478. package/docs/isml/isreplace.md +783 -0
  479. package/docs/isml/isscript.md +859 -0
  480. package/docs/isml/isselect.md +908 -0
  481. package/docs/isml/isset.md +585 -0
  482. package/docs/isml/isslot.md +824 -0
  483. package/docs/isml/isstatus.md +711 -0
  484. package/docs-site-v2/.vitepress/config.mts +190 -0
  485. package/docs-site-v2/.vitepress/theme/components/AssistantTabs.vue +96 -0
  486. package/docs-site-v2/.vitepress/theme/components/Callout.vue +10 -0
  487. package/docs-site-v2/.vitepress/theme/components/Collapsible.vue +14 -0
  488. package/docs-site-v2/.vitepress/theme/components/DwJsonBuilder.vue +82 -0
  489. package/docs-site-v2/.vitepress/theme/components/HomeSections.vue +552 -0
  490. package/docs-site-v2/.vitepress/theme/components/InstructionFilesTabs.vue +87 -0
  491. package/docs-site-v2/.vitepress/theme/components/ModeTabs.vue +70 -0
  492. package/docs-site-v2/.vitepress/theme/components/NewcomerCTA.vue +14 -0
  493. package/docs-site-v2/.vitepress/theme/components/QuickStartCards.vue +20 -0
  494. package/docs-site-v2/.vitepress/theme/components/QuickStartHero.vue +20 -0
  495. package/docs-site-v2/.vitepress/theme/components/SkillsList.vue +48 -0
  496. package/docs-site-v2/.vitepress/theme/components/ToolExplorer.vue +85 -0
  497. package/docs-site-v2/.vitepress/theme/custom.css +1373 -0
  498. package/docs-site-v2/.vitepress/theme/index.ts +39 -0
  499. package/docs-site-v2/data/skills.ts +147 -0
  500. package/docs-site-v2/data/tools.ts +490 -0
  501. package/docs-site-v2/development/index.md +151 -0
  502. package/docs-site-v2/examples/index.md +333 -0
  503. package/docs-site-v2/features/index.md +144 -0
  504. package/docs-site-v2/guide/ai-interfaces.md +58 -0
  505. package/docs-site-v2/guide/configuration.md +208 -0
  506. package/docs-site-v2/guide/index.md +50 -0
  507. package/docs-site-v2/index.md +32 -0
  508. package/docs-site-v2/package-lock.json +2511 -0
  509. package/docs-site-v2/package.json +15 -0
  510. package/docs-site-v2/public/android-chrome-192x192.png +0 -0
  511. package/docs-site-v2/public/android-chrome-512x512.png +0 -0
  512. package/docs-site-v2/public/apple-touch-icon.png +0 -0
  513. package/docs-site-v2/public/favicon-16x16.png +0 -0
  514. package/docs-site-v2/public/favicon-32x32.png +0 -0
  515. package/docs-site-v2/public/favicon.ico +0 -0
  516. package/docs-site-v2/public/index.css +4174 -0
  517. package/docs-site-v2/public/llms.txt +44 -0
  518. package/docs-site-v2/public/logo-dark.svg +8 -0
  519. package/docs-site-v2/public/logo.svg +8 -0
  520. package/{docs-site → docs-site-v2}/public/robots.txt +1 -6
  521. package/{docs-site → docs-site-v2}/public/site.webmanifest +1 -1
  522. package/{docs-site → docs-site-v2}/public/sitemap.xml +33 -12
  523. package/docs-site-v2/script-debugger/index.md +105 -0
  524. package/docs-site-v2/scripts/generate-llms.js +71 -0
  525. package/docs-site-v2/scripts/generate-sitemap.js +97 -0
  526. package/docs-site-v2/security/index.md +115 -0
  527. package/docs-site-v2/skills/index.md +40 -0
  528. package/docs-site-v2/tools/index.md +36 -0
  529. package/docs-site-v2/troubleshooting/index.md +204 -0
  530. package/eslint.config.js +3 -1
  531. package/memories/repo/docs-site-v2-build.json +11 -0
  532. package/package.json +18 -14
  533. package/scripts/validate-server-json.js +68 -0
  534. package/server.json +4 -6
  535. package/src/clients/agent-instructions-client.ts +370 -0
  536. package/src/clients/base/abstract-documentation-client.ts +405 -0
  537. package/src/clients/base/oauth-token.ts +52 -2
  538. package/src/clients/cartridge/cartridge-generation-client.ts +302 -0
  539. package/src/clients/cartridge/cartridge-structure.ts +37 -0
  540. package/src/clients/cartridge/cartridge-templates.ts +246 -0
  541. package/src/clients/cartridge/index.ts +6 -0
  542. package/src/clients/docs/documentation-scanner.ts +44 -28
  543. package/src/clients/docs-client.ts +54 -14
  544. package/src/clients/isml-client.ts +353 -0
  545. package/src/clients/ocapi/code-versions-client.ts +7 -1
  546. package/src/clients/ocapi-client.ts +11 -166
  547. package/src/clients/script-debugger/index.ts +5 -0
  548. package/src/clients/script-debugger/script-debugger-client.ts +754 -0
  549. package/src/clients/sfra-client.ts +134 -397
  550. package/src/config/configuration-factory.ts +6 -1
  551. package/src/config/dw-json-loader.ts +96 -15
  552. package/src/config/workspace-roots.ts +540 -0
  553. package/src/constants/index.ts +1 -0
  554. package/src/core/handlers/abstract-client-handler.ts +85 -0
  555. package/src/core/handlers/agent-instructions-handler.ts +48 -0
  556. package/src/core/handlers/base-handler.ts +17 -127
  557. package/src/core/handlers/cartridge-handler.ts +13 -33
  558. package/src/core/handlers/client-factory.ts +32 -2
  559. package/src/core/handlers/code-version-handler.ts +17 -32
  560. package/src/core/handlers/docs-handler.ts +12 -44
  561. package/src/core/handlers/isml-handler.ts +19 -0
  562. package/src/core/handlers/job-log-handler.ts +19 -8
  563. package/src/core/handlers/log-handler.ts +19 -8
  564. package/src/core/handlers/script-debugger-handler.ts +46 -0
  565. package/src/core/handlers/sfra-handler.ts +12 -44
  566. package/src/core/handlers/simple-client-handler.ts +78 -0
  567. package/src/core/handlers/system-object-handler.ts +17 -32
  568. package/src/core/handlers/validation-helpers.ts +87 -47
  569. package/src/core/instruction-advisor.ts +122 -0
  570. package/src/core/server.ts +178 -13
  571. package/src/core/tool-definitions.ts +25 -1071
  572. package/src/core/tool-schemas/agent-instruction-tools.ts +72 -0
  573. package/src/core/tool-schemas/cartridge-tools.ts +29 -0
  574. package/src/core/tool-schemas/code-version-tools.ts +28 -0
  575. package/src/core/tool-schemas/documentation-tools.ts +104 -0
  576. package/src/core/tool-schemas/index.ts +27 -0
  577. package/src/core/tool-schemas/isml-tools.ts +89 -0
  578. package/src/core/tool-schemas/log-tools.ts +196 -0
  579. package/src/core/tool-schemas/script-debugger-tools.ts +83 -0
  580. package/src/core/tool-schemas/sfra-tools.ts +65 -0
  581. package/src/core/tool-schemas/shared-schemas.ts +158 -0
  582. package/src/core/tool-schemas/system-object-tools.ts +127 -0
  583. package/src/main.ts +63 -30
  584. package/src/services/index.ts +4 -10
  585. package/src/tool-configs/agent-instructions-tool-config.ts +83 -0
  586. package/src/tool-configs/cartridge-tool-config.ts +1 -1
  587. package/src/tool-configs/code-version-tool-config.ts +0 -5
  588. package/src/tool-configs/docs-tool-config.ts +0 -7
  589. package/src/tool-configs/isml-tool-config.ts +87 -0
  590. package/src/tool-configs/job-log-tool-config.ts +18 -17
  591. package/src/tool-configs/log-tool-config.ts +49 -64
  592. package/src/tool-configs/script-debugger-tool-config.ts +69 -0
  593. package/src/tool-configs/sfra-tool-config.ts +0 -11
  594. package/src/tool-configs/system-object-tool-config.ts +0 -5
  595. package/src/types/types.ts +2 -0
  596. package/src/utils/cache.ts +49 -54
  597. package/src/utils/category-utils.ts +70 -0
  598. package/src/utils/log-tool-constants.ts +25 -17
  599. package/src/utils/logger.ts +38 -1
  600. package/src/utils/markdown-utils.ts +280 -0
  601. package/src/utils/path-resolver.ts +25 -9
  602. package/src/utils/path-validation.ts +113 -0
  603. package/tests/base-handler.test.ts +1 -1
  604. package/tests/cache.test.ts +2 -2
  605. package/tests/cartridge-handler.test.ts +4 -4
  606. package/tests/client-factory.test.ts +1 -1
  607. package/tests/code-version-handler.test.ts +3 -3
  608. package/tests/docs-handler.test.ts +2 -2
  609. package/tests/documentation-scanner.test.ts +4 -4
  610. package/tests/isml-client.test.ts +463 -0
  611. package/tests/isml-handler.test.ts +375 -0
  612. package/tests/job-log-handler.test.ts +1 -1
  613. package/tests/log-handler.test.ts +8 -8
  614. package/tests/log-validation.test.ts +149 -0
  615. package/tests/mcp/README.md +22 -18
  616. package/tests/mcp/node/activate-code-version-advanced.full-mode.programmatic.test.js +30 -12
  617. package/tests/mcp/node/evaluate-script.full-mode.programmatic.test.js +387 -0
  618. package/tests/mcp/node/generate-cartridge-structure.docs-only.programmatic.test.js +14 -8
  619. package/tests/mcp/node/get-isml-categories.programmatic.test.js +278 -0
  620. package/tests/mcp/node/get-isml-element.programmatic.test.js +278 -0
  621. package/tests/mcp/node/get-isml-elements-by-category.programmatic.test.js +363 -0
  622. package/tests/mcp/node/get-sfra-categories.docs-only.programmatic.test.js +24 -24
  623. package/tests/mcp/node/get-sfra-document.programmatic.test.js +4 -2
  624. package/tests/mcp/node/list-isml-elements.programmatic.test.js +311 -0
  625. package/tests/mcp/node/list-sfcc-classes.docs-only.programmatic.test.js +2 -33
  626. package/tests/mcp/node/search-isml-elements.programmatic.test.js +325 -0
  627. package/tests/mcp/node/search-sfcc-classes.docs-only.programmatic.test.js +5 -9
  628. package/tests/mcp/node/search-sfcc-methods.docs-only.programmatic.test.js +7 -9
  629. package/tests/mcp/node/tools.docs-only.programmatic.test.js +42 -65
  630. package/tests/mcp/node/tools.full-mode.programmatic.test.js +7 -8
  631. package/tests/mcp/yaml/activate-code-version.full-mode.test.mcp.yml +2 -2
  632. package/tests/mcp/yaml/evaluate-script.full-mode.test.mcp.yml +281 -0
  633. package/tests/mcp/yaml/get-isml-categories.docs-only.test.mcp.yml +330 -0
  634. package/tests/mcp/yaml/get-isml-element.docs-only.test.mcp.yml +294 -0
  635. package/tests/mcp/yaml/get-isml-elements-by-category.docs-only.test.mcp.yml +334 -0
  636. package/tests/mcp/yaml/get-sfcc-class-info.docs-only.test.mcp.yml +2 -2
  637. package/tests/mcp/yaml/get-sfra-categories.docs-only.test.mcp.yml +13 -13
  638. package/tests/mcp/yaml/get-sfra-categories.full-mode.test.mcp.yml +13 -13
  639. package/tests/mcp/yaml/get-system-object-definitions.docs-only.test.mcp.yml +1 -16
  640. package/tests/mcp/yaml/list-isml-elements.docs-only.test.mcp.yml +212 -0
  641. package/tests/mcp/yaml/search-isml-elements.docs-only.test.mcp.yml +312 -0
  642. package/tests/mcp/yaml/search-sfcc-classes.docs-only.test.mcp.yml +1 -1
  643. package/tests/mcp/yaml/search-sfcc-classes.full-mode.test.mcp.yml +1 -1
  644. package/tests/mcp/yaml/search-site-preferences.docs-only.test.mcp.yml +1 -1
  645. package/tests/mcp/yaml/tools.docs-only.test.mcp.yml +3 -57
  646. package/tests/mcp/yaml/tools.full-mode.test.mcp.yml +3 -3
  647. package/tests/oauth-token.test.ts +107 -12
  648. package/tests/ocapi-client.test.ts +53 -106
  649. package/tests/script-debugger-client.test.ts +430 -0
  650. package/tests/servers/sfcc-mock-server/src/app.js +15 -0
  651. package/tests/servers/sfcc-mock-server/src/routes/cartridge-webdav.js +258 -0
  652. package/tests/servers/sfcc-mock-server/src/routes/ocapi/debugger-handler.js +396 -0
  653. package/tests/servers/sfcc-mock-server/src/routes/ocapi.js +5 -0
  654. package/tests/servers/sfcc-mock-server/src/routes/storefront.js +86 -0
  655. package/tests/servers/sfcc-mock-server/src/routes/webdav.js +6 -4
  656. package/tests/validation-helpers.test.ts +0 -31
  657. package/tests/workspace-roots.test.ts +227 -0
  658. package/ai-instructions/claude-desktop/claude_custom_instructions.md +0 -321
  659. package/ai-instructions/cursor/.cursor/rules/debugging-workflows.mdc +0 -171
  660. package/ai-instructions/cursor/.cursor/rules/hooks-development.mdc +0 -168
  661. package/ai-instructions/cursor/.cursor/rules/isml-templates.mdc +0 -209
  662. package/ai-instructions/cursor/.cursor/rules/job-framework.mdc +0 -379
  663. package/ai-instructions/cursor/.cursor/rules/performance-optimization.mdc +0 -215
  664. package/ai-instructions/cursor/.cursor/rules/scapi-endpoints.mdc +0 -98
  665. package/ai-instructions/cursor/.cursor/rules/security-patterns.mdc +0 -375
  666. package/ai-instructions/cursor/.cursor/rules/sfcc-development.mdc +0 -144
  667. package/ai-instructions/cursor/.cursor/rules/sfra-controllers.mdc +0 -376
  668. package/ai-instructions/cursor/.cursor/rules/sfra-models.mdc +0 -412
  669. package/ai-instructions/cursor/.cursor/rules/system-objects.mdc +0 -383
  670. package/ai-instructions/cursor/.cursor/rules/testing-patterns.mdc +0 -418
  671. package/dist/clients/best-practices-client.d.ts +0 -57
  672. package/dist/clients/best-practices-client.d.ts.map +0 -1
  673. package/dist/clients/best-practices-client.js +0 -288
  674. package/dist/clients/best-practices-client.js.map +0 -1
  675. package/dist/clients/cartridge-generation-client.d.ts +0 -57
  676. package/dist/clients/cartridge-generation-client.d.ts.map +0 -1
  677. package/dist/clients/cartridge-generation-client.js +0 -384
  678. package/dist/clients/cartridge-generation-client.js.map +0 -1
  679. package/dist/clients/logs/index.d.ts +0 -13
  680. package/dist/clients/logs/index.d.ts.map +0 -1
  681. package/dist/clients/logs/index.js +0 -15
  682. package/dist/clients/logs/index.js.map +0 -1
  683. package/dist/clients/logs/log-analyzer.d.ts +0 -55
  684. package/dist/clients/logs/log-analyzer.d.ts.map +0 -1
  685. package/dist/clients/logs/log-analyzer.js +0 -228
  686. package/dist/clients/logs/log-analyzer.js.map +0 -1
  687. package/dist/clients/logs/log-client.d.ts +0 -87
  688. package/dist/clients/logs/log-client.d.ts.map +0 -1
  689. package/dist/clients/logs/log-client.js +0 -418
  690. package/dist/clients/logs/log-client.js.map +0 -1
  691. package/dist/clients/logs/log-constants.d.ts +0 -37
  692. package/dist/clients/logs/log-constants.d.ts.map +0 -1
  693. package/dist/clients/logs/log-constants.js +0 -37
  694. package/dist/clients/logs/log-constants.js.map +0 -1
  695. package/dist/clients/logs/log-file-discovery.d.ts +0 -62
  696. package/dist/clients/logs/log-file-discovery.d.ts.map +0 -1
  697. package/dist/clients/logs/log-file-discovery.js +0 -238
  698. package/dist/clients/logs/log-file-discovery.js.map +0 -1
  699. package/dist/clients/logs/log-file-reader.d.ts +0 -53
  700. package/dist/clients/logs/log-file-reader.d.ts.map +0 -1
  701. package/dist/clients/logs/log-file-reader.js +0 -194
  702. package/dist/clients/logs/log-file-reader.js.map +0 -1
  703. package/dist/clients/logs/log-formatter.d.ts +0 -90
  704. package/dist/clients/logs/log-formatter.d.ts.map +0 -1
  705. package/dist/clients/logs/log-formatter.js +0 -189
  706. package/dist/clients/logs/log-formatter.js.map +0 -1
  707. package/dist/clients/logs/log-processor.d.ts +0 -91
  708. package/dist/clients/logs/log-processor.d.ts.map +0 -1
  709. package/dist/clients/logs/log-processor.js +0 -328
  710. package/dist/clients/logs/log-processor.js.map +0 -1
  711. package/dist/clients/logs/log-types.d.ts +0 -69
  712. package/dist/clients/logs/log-types.d.ts.map +0 -1
  713. package/dist/clients/logs/log-types.js +0 -5
  714. package/dist/clients/logs/log-types.js.map +0 -1
  715. package/dist/clients/logs/webdav-client-manager.d.ts +0 -28
  716. package/dist/clients/logs/webdav-client-manager.d.ts.map +0 -1
  717. package/dist/clients/logs/webdav-client-manager.js +0 -77
  718. package/dist/clients/logs/webdav-client-manager.js.map +0 -1
  719. package/dist/core/handlers/abstract-log-tool-handler.d.ts +0 -35
  720. package/dist/core/handlers/abstract-log-tool-handler.d.ts.map +0 -1
  721. package/dist/core/handlers/abstract-log-tool-handler.js +0 -46
  722. package/dist/core/handlers/abstract-log-tool-handler.js.map +0 -1
  723. package/dist/core/handlers/best-practices-handler.d.ts +0 -17
  724. package/dist/core/handlers/best-practices-handler.d.ts.map +0 -1
  725. package/dist/core/handlers/best-practices-handler.js +0 -43
  726. package/dist/core/handlers/best-practices-handler.js.map +0 -1
  727. package/dist/core/handlers/job-log-tool-config.d.ts +0 -8
  728. package/dist/core/handlers/job-log-tool-config.d.ts.map +0 -1
  729. package/dist/core/handlers/job-log-tool-config.js +0 -76
  730. package/dist/core/handlers/job-log-tool-config.js.map +0 -1
  731. package/dist/core/handlers/log-tool-config.d.ts +0 -8
  732. package/dist/core/handlers/log-tool-config.d.ts.map +0 -1
  733. package/dist/core/handlers/log-tool-config.js +0 -73
  734. package/dist/core/handlers/log-tool-config.js.map +0 -1
  735. package/dist/docs/best-practices/isml_templates.md +0 -1933
  736. package/dist/docs/best-practices/job_framework.md +0 -1173
  737. package/dist/docs/best-practices/scapi_custom_endpoint.md +0 -963
  738. package/dist/docs/best-practices/sfra_client_side_js.md +0 -736
  739. package/dist/docs/best-practices/sfra_models.md +0 -1142
  740. package/dist/tool-configs/best-practices-tool-config.d.ts +0 -11
  741. package/dist/tool-configs/best-practices-tool-config.d.ts.map +0 -1
  742. package/dist/tool-configs/best-practices-tool-config.js +0 -59
  743. package/dist/tool-configs/best-practices-tool-config.js.map +0 -1
  744. package/dist/utils/job-log-tool-config.d.ts +0 -8
  745. package/dist/utils/job-log-tool-config.d.ts.map +0 -1
  746. package/dist/utils/job-log-tool-config.js +0 -76
  747. package/dist/utils/job-log-tool-config.js.map +0 -1
  748. package/dist/utils/job-log-utils.d.ts +0 -34
  749. package/dist/utils/job-log-utils.d.ts.map +0 -1
  750. package/dist/utils/job-log-utils.js +0 -60
  751. package/dist/utils/job-log-utils.js.map +0 -1
  752. package/dist/utils/log-cache.d.ts +0 -53
  753. package/dist/utils/log-cache.d.ts.map +0 -1
  754. package/dist/utils/log-cache.js +0 -114
  755. package/dist/utils/log-cache.js.map +0 -1
  756. package/dist/utils/log-tool-config.d.ts +0 -8
  757. package/dist/utils/log-tool-config.d.ts.map +0 -1
  758. package/dist/utils/log-tool-config.js +0 -73
  759. package/dist/utils/log-tool-config.js.map +0 -1
  760. package/dist/utils/log-tool-utils.d.ts +0 -39
  761. package/dist/utils/log-tool-utils.d.ts.map +0 -1
  762. package/dist/utils/log-tool-utils.js +0 -94
  763. package/dist/utils/log-tool-utils.js.map +0 -1
  764. package/docs/best-practices/isml_templates.md +0 -1933
  765. package/docs/best-practices/job_framework.md +0 -1173
  766. package/docs/best-practices/scapi_custom_endpoint.md +0 -963
  767. package/docs/best-practices/sfra_client_side_js.md +0 -736
  768. package/docs/best-practices/sfra_models.md +0 -1142
  769. package/docs-site/App.tsx +0 -103
  770. package/docs-site/README.md +0 -113
  771. package/docs-site/components/Badge.tsx +0 -38
  772. package/docs-site/components/BreadcrumbSchema.tsx +0 -34
  773. package/docs-site/components/CodeBlock.tsx +0 -132
  774. package/docs-site/components/Collapsible.tsx +0 -40
  775. package/docs-site/components/ConfigBuilder.tsx +0 -118
  776. package/docs-site/components/ConfigHero.tsx +0 -19
  777. package/docs-site/components/ConfigModeTabs.tsx +0 -42
  778. package/docs-site/components/Layout.tsx +0 -174
  779. package/docs-site/components/LightCodeContainer.tsx +0 -44
  780. package/docs-site/components/NewcomerCTA.tsx +0 -57
  781. package/docs-site/components/NextStepsStrip.tsx +0 -23
  782. package/docs-site/components/OnThisPage.tsx +0 -91
  783. package/docs-site/components/SEO.tsx +0 -79
  784. package/docs-site/components/Search.tsx +0 -207
  785. package/docs-site/components/Sidebar.tsx +0 -96
  786. package/docs-site/components/StructuredData.tsx +0 -72
  787. package/docs-site/components/ToolCard.tsx +0 -84
  788. package/docs-site/components/ToolFilters.tsx +0 -39
  789. package/docs-site/components/Typography.tsx +0 -30
  790. package/docs-site/components/VersionBadge.tsx +0 -18
  791. package/docs-site/components/icons.tsx +0 -37
  792. package/docs-site/constants.tsx +0 -34
  793. package/docs-site/index.html +0 -62
  794. package/docs-site/main.tsx +0 -16
  795. package/docs-site/metadata.json +0 -5
  796. package/docs-site/package-lock.json +0 -3966
  797. package/docs-site/package.json +0 -35
  798. package/docs-site/pages/AIInterfacesPage.tsx +0 -610
  799. package/docs-site/pages/ConfigurationPage.tsx +0 -315
  800. package/docs-site/pages/DevelopmentPage.tsx +0 -607
  801. package/docs-site/pages/ExamplesPage.tsx +0 -558
  802. package/docs-site/pages/FeaturesPage.tsx +0 -353
  803. package/docs-site/pages/HomePage.tsx +0 -1046
  804. package/docs-site/pages/SecurityPage.tsx +0 -372
  805. package/docs-site/pages/ToolsPage.tsx +0 -205
  806. package/docs-site/pages/TroubleshootingPage.tsx +0 -590
  807. package/docs-site/postcss.config.js +0 -6
  808. package/docs-site/public/.well-known/security.txt +0 -6
  809. package/docs-site/public/android-chrome-192x192.png +0 -0
  810. package/docs-site/public/android-chrome-512x512.png +0 -0
  811. package/docs-site/public/apple-touch-icon.png +0 -0
  812. package/docs-site/public/favicon-16x16.png +0 -0
  813. package/docs-site/public/favicon-32x32.png +0 -0
  814. package/docs-site/public/favicon.ico +0 -0
  815. package/docs-site/public/llms.txt +0 -47
  816. package/docs-site/scripts/generate-search-index.js +0 -323
  817. package/docs-site/scripts/generate-sitemap.js +0 -156
  818. package/docs-site/scripts/search-dev.js +0 -112
  819. package/docs-site/src/styles/input.css +0 -248
  820. package/docs-site/src/styles/prism-theme.css +0 -124
  821. package/docs-site/tailwind.config.js +0 -70
  822. package/docs-site/tsconfig.json +0 -29
  823. package/docs-site/types.ts +0 -16
  824. package/docs-site/utils/search.ts +0 -132
  825. package/docs-site/utils/toolsData.ts +0 -116
  826. package/docs-site/vite.config.ts +0 -63
  827. package/src/clients/best-practices-client.ts +0 -332
  828. package/src/clients/cartridge-generation-client.ts +0 -507
  829. package/src/clients/logs/index.ts +0 -18
  830. package/src/clients/logs/log-analyzer.ts +0 -289
  831. package/src/clients/logs/log-client.ts +0 -540
  832. package/src/clients/logs/log-constants.ts +0 -53
  833. package/src/clients/logs/log-file-discovery.ts +0 -299
  834. package/src/clients/logs/log-file-reader.ts +0 -227
  835. package/src/clients/logs/log-formatter.ts +0 -258
  836. package/src/clients/logs/log-processor.ts +0 -402
  837. package/src/clients/logs/log-types.ts +0 -80
  838. package/src/clients/logs/webdav-client-manager.ts +0 -93
  839. package/src/core/handlers/abstract-log-tool-handler.ts +0 -64
  840. package/src/core/handlers/best-practices-handler.ts +0 -55
  841. package/src/core/handlers/job-log-tool-config.ts +0 -89
  842. package/src/core/handlers/log-tool-config.ts +0 -98
  843. package/src/tool-configs/best-practices-tool-config.ts +0 -68
  844. package/src/utils/job-log-tool-config.ts +0 -89
  845. package/src/utils/job-log-utils.ts +0 -78
  846. package/src/utils/log-cache.ts +0 -134
  847. package/src/utils/log-tool-config.ts +0 -98
  848. package/src/utils/log-tool-utils.ts +0 -122
  849. package/tests/best-practices-handler.test.ts +0 -236
  850. package/tests/job-log-utils.test.ts +0 -182
  851. package/tests/mcp/node/get-available-best-practice-guides.docs-only.programmatic.test.js +0 -516
  852. package/tests/mcp/node/get-best-practice-guide.docs-only.programmatic.test.js +0 -733
  853. package/tests/mcp/node/get-hook-reference.docs-only.programmatic.test.js +0 -185
  854. package/tests/mcp/node/search-best-practices.docs-only.programmatic.test.js +0 -836
  855. package/tests/mcp/yaml/get-available-best-practice-guides.docs-only.test.mcp.yml +0 -885
  856. package/tests/mcp/yaml/get-available-best-practice-guides.full-mode.test.mcp.yml +0 -885
  857. package/tests/mcp/yaml/get-best-practice-guide.docs-only.test.mcp.yml +0 -462
  858. package/tests/mcp/yaml/get-best-practice-guide.full-mode.test.mcp.yml +0 -462
  859. package/tests/mcp/yaml/get-hook-reference.docs-only.test.mcp.yml +0 -321
  860. package/tests/mcp/yaml/get-hook-reference.full-mode.test.mcp.yml +0 -321
  861. package/tests/mcp/yaml/search-best-practices.docs-only.test.mcp.yml +0 -655
  862. package/tests/mcp/yaml/search-best-practices.full-mode.test.mcp.yml +0 -655
  863. /package/{docs-site → docs-site-v2}/public/404.html +0 -0
  864. /package/{docs-site → docs-site-v2}/public/explain-product-pricing-methods-no-mcp.png +0 -0
  865. /package/{docs-site → docs-site-v2}/public/explain-product-pricing-methods.png +0 -0
@@ -1,934 +1,30 @@
1
1
  ---
2
2
  applyTo: "**/*.programmatic.test.js"
3
3
  ---
4
- # MCP Aegis - Programmatic Testing Guide for AI Agents
4
+ # MCP Programmatic Testing Instructions
5
5
 
6
- **Target Audience**: AI coding assistants generating JavaScript/TypeScript programmatic t# Debugging and monitoring
7
- const stderr = client.getStderr(); // Get captured stderr
8
- client.clearStderr(); // Clear stderr buffer (REQUIRED in beforeEach!)
6
+ For detailed guidance on writing programmatic tests, use the `mcp-programmatic-testing` skill located at `.github/skills/mcp-programmatic-testing/SKILL.md`.
9
7
 
10
- **⚠️ CRITICAL**: Always include `client.clearStderr()` in your `beforeEach()` hook to prevent stderr from one test affecting the next test. This is a common source of test flakiness. files for Model Context Protocol servers.
8
+ ## Quick Reference
11
9
 
12
- ## Overview
13
-
14
- **Programmatic Testing** provides JavaScript/TypeScript API for complex MCP server testing scenarios that require dynamic validation logic, multi-step workflows, and integration with existing test suites. **For basic functional testing, the YAML-based testing approach (see `../yaml/AGENTS.md`) is more than sufficient and recommended.**
15
-
16
- ### When to Use Programmatic vs YAML Testing
17
-
18
- **Use YAML Testing for:**
19
- - ✅ Basic functional validation (tool discovery, parameter validation, response structure)
20
- - ✅ Standard error handling scenarios
21
- - ✅ Simple input/output verification
22
- - ✅ CI/CD pipeline testing (more reliable across environments)
23
- - ✅ Quick test development and maintenance
24
-
25
- **Use Programmatic Testing for:**
26
- - Complex business logic validation requiring code execution
27
- - Multi-step workflows with state management
28
- - Dynamic test case generation based on server configuration
29
- - Integration with existing JavaScript/TypeScript test suites
30
- - Advanced error recovery and resilience testing
31
-
32
- ### 📚 Key Resources
33
- - **[Programmatic Testing Documentation](https://aegis.rhino-inquisitor.com/programmatic-testing.html)** - Complete guide
34
- - **[API Reference](https://aegis.rhino-inquisitor.com/api-reference.html)** - All methods and properties
35
- - **[Examples Directory](../../examples/)** - Real-world programmatic test files
36
- - **[YAML Testing Guide](../yaml/AGENTS.md)** - Recommended for basic testing scenarios
37
-
38
- ## Quick Setup
39
-
40
- ### 1. Installation and Initialization
41
- ```bash
42
- # Install in project
43
- npm install --save-dev mcp-aegis
44
- # OR
45
- npx mcp-aegis init
46
- ```
47
-
48
- ### 2. Configuration File
49
- Always create `aegis.config.json` first:
50
-
51
- ```json
52
- {
53
- "name": "My MCP Server",
54
- "command": "node",
55
- "args": ["./server.js"],
56
- "startupTimeout": 5000,
57
- "env": {
58
- "NODE_ENV": "test"
59
- }
60
- }
61
- ```
62
-
63
- ### 3. Basic Programmatic Test Structure
64
- File naming convention: `*.programmatic.test.js`
65
-
66
- ```javascript
67
- import { test, describe, before, after, beforeEach } from 'node:test';
68
- import { strict as assert } from 'node:assert';
69
- import { connect } from 'mcp-aegis';
70
-
71
- describe('[SERVER_NAME] Programmatic Tests', () => {
72
- let client;
73
-
74
- before(async () => {
75
- client = await connect('./aegis.config.json');
76
- });
77
-
78
- after(async () => {
79
- if (client?.connected) {
80
- await client.disconnect();
81
- }
82
- });
83
-
84
- beforeEach(() => {
85
- // CRITICAL: Clear all buffers to prevent leaking into next tests
86
- client.clearAllBuffers(); // Recommended - comprehensive protection
87
- // OR: client.clearStderr(); // Minimum - stderr only
88
- });
89
-
90
- test('should list available tools', async () => {
91
- const tools = await client.listTools();
92
- assert.ok(Array.isArray(tools), 'Tools should be array');
93
- assert.ok(tools.length > 0, 'Should have at least one tool');
94
- });
95
-
96
- test('should execute tool successfully', async () => {
97
- const result = await client.callTool('[TOOL_NAME]', { param: 'value' });
98
- assert.ok(result.content, 'Should return content');
99
- assert.equal(result.isError, false, 'Should not be error');
100
- });
101
- });
102
- ```
103
-
104
- ## Quick Debugging with Query Command
105
-
106
- Before writing comprehensive programmatic tests, use the `query` command to rapidly test your server:
107
-
108
- ```bash
109
- # List all available tools
110
- aegis query --config aegis.config.json
111
-
112
- # Test specific tool with arguments
113
- aegis query read_file '{"path": "test.txt"}' --config aegis.config.json
114
-
115
- # Get JSON output for inspection
116
- aegis query calculator '{"operation": "add", "a": 5, "b": 3}' --config aegis.config.json --json
117
- ```
118
-
119
- **Benefits for programmatic testing workflow**:
120
- - **Rapid prototyping**: Verify server behavior before writing test code
121
- - **API exploration**: Discover tool signatures and response formats
122
- - **Debug assistance**: Inspect actual responses to design assertions
123
- - **Development speed**: Test changes instantly without rebuilding test suite
124
-
125
- **Integration with programmatic tests**:
126
- ```javascript
127
- // Use query command findings to create targeted tests
128
- test('should handle file reading as discovered via query', async () => {
129
- // Based on: aegis query read_file '{"path": "test.txt"}'
130
- const result = await client.callTool('read_file', { path: 'test.txt' });
131
-
132
- // Query command showed this response structure:
133
- assert.ok(result.content);
134
- assert.equal(result.content[0].type, 'text');
135
- assert.ok(result.content[0].text.includes('expected content'));
136
- });
137
- ```
138
-
139
- ## API Reference
140
-
141
- ### Main Entry Points
142
- ```javascript
143
- import { createClient, connect } from 'mcp-aegis';
144
-
145
- // Option 1: Create client (not connected)
146
- const client = await createClient('./aegis.config.json');
147
- await client.connect();
148
-
149
- // Option 2: Create and auto-connect
150
- const connectedClient = await connect('./aegis.config.json');
151
-
152
- // Option 3: Inline configuration
153
- const client = await connect({
154
- name: 'My Server',
155
- command: 'node',
156
- args: ['./server.js'],
157
- cwd: './server-directory',
158
- startupTimeout: 5000
159
- });
160
- ```
161
-
162
- ### Core Methods
163
- ```javascript
164
- // Server lifecycle
165
- await client.connect(); // Start server + MCP handshake
166
- await client.disconnect(); // Graceful shutdown
167
- const isConnected = client.connected; // Connection status
168
-
169
- // Tool operations
170
- const tools = await client.listTools(); // Get available tools
171
- const result = await client.callTool(name, arguments); // Execute tool
172
- const response = await client.sendMessage(jsonRpcMessage); // Raw JSON-RPC
173
-
174
- // Debugging and monitoring
175
- const stderr = client.getStderr(); // Get captured stderr
176
- client.clearStderr(); // Clear stderr buffer
177
- ```
178
-
179
- ### Error Handling
180
- ```javascript
181
- try {
182
- const result = await client.callTool('nonexistent_tool', {});
183
- } catch (error) {
184
- assert.ok(error.message.includes('Failed to call tool'));
185
- // Error details available in error object
186
- }
187
-
188
- // Check for execution errors (not exceptions)
189
- const result = await client.callTool('tool_name', { invalid: 'param' });
190
- if (result.isError) {
191
- assert.ok(result.content[0].text.includes('error message'));
192
- }
193
- ```
194
-
195
- ## Critical: Preventing Test Interference
196
-
197
- ### Buffer Leaking Prevention
198
- **The most common source of flaky programmatic tests is buffer leaking between tests.** When one test generates output (stderr, partial stdout messages) and doesn't clear it, subsequent tests may see the output from previous tests, causing unexpected failures.
199
-
200
- #### Always Include beforeEach Hook
201
- ```javascript
202
- beforeEach(() => {
203
- // RECOMMENDED: Clear all buffers to prevent any leaking
204
- client.clearAllBuffers();
205
-
206
- // OR minimum: Clear only stderr (less comprehensive)
207
- // client.clearStderr();
208
- });
209
- ```
210
-
211
- #### Buffer Bleeding Sources
212
- - **Stderr buffer**: Error messages and debug output
213
- - **Stdout buffer**: Partial JSON messages from previous requests
214
- - **Ready state**: Server readiness flag not reset
215
- - **Pending reads**: Lingering message handlers
216
-
217
- **Best Practice**: Use `client.clearAllBuffers()` instead of just `clearStderr()` for comprehensive protection.
218
-
219
- #### Common Anti-Patterns to Avoid
220
- ```javascript
221
- // ❌ WRONG - Missing beforeEach entirely
222
- describe('My Tests', () => {
223
- let client;
224
-
225
- before(async () => {
226
- client = await connect('./config.json');
227
- });
228
-
229
- // Missing beforeEach - tests will leak buffers!
230
-
231
- test('first test', async () => {
232
- const result = await client.callTool('tool', {});
233
- // This test might generate stderr or leave stdout buffer data
234
- });
235
-
236
- test('second test', async () => {
237
- // This test might see output from first test!
238
- assert.equal(client.getStderr(), ''); // Will fail if first test had stderr
239
- });
240
- });
241
-
242
- // ✅ CORRECT - Include beforeEach with clearStderr
243
- describe('My Tests', () => {
244
- let client;
245
-
246
- before(async () => {
247
- client = await connect('./config.json');
248
- });
249
-
250
- beforeEach(() => {
251
- client.clearAllBuffers(); // Prevents all buffer leaking between tests
252
- });
253
-
254
- test('first test', async () => {
255
- const result = await client.callTool('tool', {});
256
- // Any stderr is isolated to this test
257
- });
258
-
259
- test('second test', async () => {
260
- // Clean slate - no stderr from previous tests
261
- assert.equal(client.getStderr(), ''); // Will pass
262
- });
263
- });
264
- ```
265
-
266
- #### Debugging Stderr Issues
267
- If you're experiencing flaky test failures related to unexpected stderr content:
268
-
269
- 1. **Add clearStderr() to beforeEach** - Most common fix
270
- 2. **Check test isolation** - Ensure each test starts with clean state
271
- 3. **Debug stderr content** - Log `client.getStderr()` to see what's leaking
272
- 4. **Use afterEach cleanup** - Optional additional cleanup
10
+ **File naming**: `*.programmatic.test.js`
273
11
 
12
+ **Critical Setup**:
274
13
  ```javascript
275
14
  beforeEach(() => {
276
- client.clearStderr();
277
- });
278
-
279
- afterEach(() => {
280
- // Optional: Debug what stderr was generated
281
- const stderr = client.getStderr();
282
- if (stderr) {
283
- console.log('Test generated stderr:', stderr);
284
- }
285
- });
286
- ```
287
-
288
- ## Testing Patterns
289
-
290
- ### 1. Tool Discovery and Validation
291
- ```javascript
292
- describe('Tool Discovery', () => {
293
- test('should list all expected tools', async () => {
294
- const tools = await client.listTools();
295
-
296
- assert.equal(tools.length, 4, 'Should have 4 tools');
297
-
298
- const toolNames = tools.map(tool => tool.name);
299
- assert.ok(toolNames.includes('calculator'));
300
- assert.ok(toolNames.includes('text_processor'));
301
- assert.ok(toolNames.includes('data_validator'));
302
- });
303
-
304
- test('should validate tool schemas', async () => {
305
- const tools = await client.listTools();
306
-
307
- tools.forEach(tool => {
308
- assert.ok(tool.name, 'Tool should have name');
309
- assert.ok(tool.description, 'Tool should have description');
310
- assert.ok(tool.inputSchema, 'Tool should have input schema');
311
- assert.equal(tool.inputSchema.type, 'object');
312
- });
313
- });
314
- });
315
- ```
316
-
317
- ### 2. Tool Execution Testing
318
- ```javascript
319
- describe('Calculator Tool', () => {
320
- test('should perform basic arithmetic', async () => {
321
- const result = await client.callTool('calculator', {
322
- operation: 'add',
323
- a: 15,
324
- b: 27
325
- });
326
-
327
- assert.equal(result.isError, false);
328
- assert.equal(result.content.length, 1);
329
- assert.equal(result.content[0].type, 'text');
330
- assert.equal(result.content[0].text, 'Result: 42');
331
- });
332
-
333
- test('should handle division by zero', async () => {
334
- const result = await client.callTool('calculator', {
335
- operation: 'divide',
336
- a: 10,
337
- b: 0
338
- });
339
-
340
- assert.equal(result.isError, true);
341
- assert.ok(result.content[0].text.includes('division by zero'));
342
- });
343
-
344
- test('should validate required parameters', async () => {
345
- const result = await client.callTool('calculator', {
346
- operation: 'add'
347
- // Missing a and b parameters
348
- });
349
-
350
- assert.equal(result.isError, true);
351
- assert.ok(result.content[0].text.includes('required'));
352
- });
353
- });
354
- ```
355
-
356
- ### 3. Multi-Step Workflows
357
- ```javascript
358
- describe('Multi-Step Agent Workflows', () => {
359
- test('should support complex decision chains', async () => {
360
- // Step 1: Search for information
361
- const searchResult = await client.callTool('search_knowledge', {
362
- query: 'customer support best practices'
363
- });
364
- assert.equal(searchResult.isError, false);
365
-
366
- // Step 2: Analyze findings
367
- const analysisResult = await client.callTool('analyze_content', {
368
- content: searchResult.content[0].text,
369
- focus: 'actionable recommendations'
370
- });
371
- assert.equal(analysisResult.isError, false);
372
-
373
- // Step 3: Generate summary based on analysis
374
- const summaryResult = await client.callTool('generate_summary', {
375
- source_data: analysisResult.content[0].text,
376
- format: 'executive_summary'
377
- });
378
- assert.equal(summaryResult.isError, false);
379
- assert.ok(summaryResult.content[0].text.includes('Executive Summary'));
380
- });
381
-
382
- test('should maintain context across tool calls', async () => {
383
- // Initialize conversation context
384
- const initResult = await client.callTool('conversation_manager', {
385
- action: 'initialize',
386
- user_id: 'test_user_123'
387
- });
388
- assert.equal(initResult.isError, false);
389
-
390
- const sessionId = extractSessionId(initResult.content[0].text);
391
-
392
- // Make context-dependent call
393
- const contextResult = await client.callTool('conversation_manager', {
394
- action: 'recall',
395
- user_id: 'test_user_123',
396
- session_id: sessionId
397
- });
398
- assert.equal(contextResult.isError, false);
399
- assert.ok(contextResult.content[0].text.includes('session found'));
400
- });
401
- });
402
- ```
403
-
404
- ### 4. Error Recovery and Resilience
405
- ```javascript
406
- describe('Error Recovery', () => {
407
- test('should handle failures gracefully', async () => {
408
- // Test normal operation
409
- const normalResult = await client.callTool('external_api_call', {
410
- endpoint: 'users',
411
- action: 'list'
412
- });
413
- assert.equal(normalResult.isError, false);
414
-
415
- // Test failure scenario - should not throw
416
- const failureResult = await client.callTool('external_api_call', {
417
- endpoint: 'invalid_endpoint',
418
- action: 'list'
419
- });
420
- assert.equal(failureResult.isError, true);
421
- assert.ok(failureResult.content[0].text.includes('not found'));
422
-
423
- // Test recovery - should work again
424
- const recoveryResult = await client.callTool('external_api_call', {
425
- endpoint: 'users',
426
- action: 'list'
427
- });
428
- assert.equal(recoveryResult.isError, false);
429
- });
430
-
431
- test('should handle server restart scenarios', async () => {
432
- // Verify initial connection
433
- const tools = await client.listTools();
434
- assert.ok(tools.length > 0);
435
-
436
- // Simulate server issue by calling invalid method
437
- try {
438
- await client.sendMessage({
439
- jsonrpc: '2.0',
440
- id: 'test-1',
441
- method: 'invalid_method',
442
- params: {}
443
- });
444
- } catch (error) {
445
- // Expected error
446
- }
447
-
448
- // Verify connection still works
449
- const toolsAfter = await client.listTools();
450
- assert.ok(toolsAfter.length > 0);
451
- });
15
+ client.clearAllBuffers(); // REQUIRED - prevents test interference
452
16
  });
453
17
  ```
454
18
 
455
- ### ⚠️ Critical: Avoid Concurrent Requests
456
-
457
- **Never use `Promise.all()` or concurrent requests** with MCP Aegis's programmatic API. MCP communication uses a single stdio process with shared message handlers and buffers. Concurrent requests can cause:
458
-
459
- - **Buffer conflicts**: Multiple requests writing to the same stdout/stderr streams
460
- - **Message handler interference**: JSON-RPC messages getting mixed or corrupted
461
- - **Race conditions**: Responses arriving out of order or getting lost
462
- - **Unpredictable test failures**: Flaky tests that pass/fail randomly
463
-
464
- ```javascript
465
- // ❌ NEVER DO THIS - Causes buffer/message handler conflicts
466
- const promises = tools.map(tool => client.callTool(tool.name, {}));
467
- const results = await Promise.all(promises); // WILL CAUSE ISSUES!
468
-
469
- // ✅ ALWAYS DO THIS - Sequential requests work reliably
470
- const results = [];
471
- for (const tool of tools) {
472
- const result = await client.callTool(tool.name, {});
473
- results.push(result);
474
- }
475
- ```
476
-
477
- ### 5. Sequential Request Testing
478
- ```javascript
479
- describe('Sequential Request Testing', () => {
480
- test('should handle sequential requests correctly', async () => {
481
- const results = [];
482
-
483
- // Execute requests sequentially to avoid buffer/message handler conflicts
484
- for (let i = 0; i < 10; i++) {
485
- const result = await client.callTool('sequential_operation', { id: i });
486
- results.push(result);
487
- }
488
-
489
- results.forEach((result, i) => {
490
- assert.equal(result.isError, false, `Request ${i} should succeed`);
491
- assert.ok(result.content[0].text.includes(`id: ${i}`));
492
- });
493
- });
494
-
495
- test('should handle large payload processing', async () => {
496
- const largeText = 'x'.repeat(50000); // 50KB text
497
-
498
- const result = await client.callTool('text_processor', {
499
- text: largeText,
500
- operation: 'word_count'
501
- });
502
-
503
- assert.equal(result.isError, false);
504
- assert.ok(result.content[0].text.includes('50000'));
505
- });
506
- });
507
- ```
508
-
509
- ### ⚠️ Performance Testing Not Recommended
510
-
511
- **Performance testing is not recommended in programmatic tests** due to CI environment variability. CI environments have:
512
- - Highly variable resource allocation and sharing
513
- - Unpredictable I/O performance and network latency
514
- - JIT compilation delays and garbage collection interference
515
- - Container and process initialization overhead
516
-
517
- **Use dedicated performance testing tools instead:**
518
- - Load testing frameworks (Artillery, k6, Apache JMeter)
519
- - APM tools (New Relic, DataDog, AppDynamics)
520
- - Custom monitoring with controlled environments
521
- - Synthetic monitoring services
522
-
523
- **If you must include timing validation**, use extremely lenient thresholds (5+ seconds) and focus on detecting major regressions rather than precise performance requirements.
524
-
525
- ### 6. Dynamic Validation Logic
526
- ```javascript
527
- describe('Dynamic Validation', () => {
528
- test('should validate business rules dynamically', async () => {
529
- const tools = await client.listTools();
530
-
531
- // Dynamic validation based on actual tools
532
- const calculatorTool = tools.find(t => t.name === 'calculator');
533
- if (calculatorTool) {
534
- const supportedOps = calculatorTool.inputSchema.properties.operation.enum;
535
-
536
- for (const operation of supportedOps) {
537
- const result = await client.callTool('calculator', {
538
- operation,
539
- a: 10,
540
- b: 5
541
- });
542
- assert.equal(result.isError, false, `Operation ${operation} should work`);
543
- }
544
- }
545
- });
546
-
547
- test('should generate test cases from schema', async () => {
548
- const tools = await client.listTools();
549
-
550
- for (const tool of tools) {
551
- const schema = tool.inputSchema;
552
- const testCases = generateTestCases(schema);
553
-
554
- for (const testCase of testCases) {
555
- const result = await client.callTool(tool.name, testCase.input);
556
-
557
- if (testCase.shouldSucceed) {
558
- assert.equal(result.isError, false,
559
- `${tool.name} should succeed with ${JSON.stringify(testCase.input)}`);
560
- } else {
561
- assert.equal(result.isError, true,
562
- `${tool.name} should fail with ${JSON.stringify(testCase.input)}`);
563
- }
564
- }
565
- }
566
- });
567
- });
568
-
569
- function generateTestCases(schema) {
570
- // Generate test cases based on JSON schema
571
- const testCases = [];
572
-
573
- // Valid case with all required properties
574
- const validCase = {};
575
- for (const [prop, propSchema] of Object.entries(schema.properties || {})) {
576
- if (propSchema.type === 'string') {
577
- validCase[prop] = 'test_value';
578
- } else if (propSchema.type === 'number') {
579
- validCase[prop] = 42;
580
- }
581
- }
582
- testCases.push({ input: validCase, shouldSucceed: true });
583
-
584
- // Invalid case missing required properties
585
- if (schema.required?.length > 0) {
586
- testCases.push({ input: {}, shouldSucceed: false });
587
- }
588
-
589
- return testCases;
590
- }
591
- ```
592
-
593
- ## Advanced Testing Scenarios
594
-
595
- ### State Management Testing
596
- ```javascript
597
- describe('State Management', () => {
598
- test('should maintain state across multiple calls', async () => {
599
- // Initialize state
600
- await client.callTool('state_manager', {
601
- action: 'set',
602
- key: 'test_key',
603
- value: 'test_value'
604
- });
605
-
606
- // Verify state persists
607
- const result = await client.callTool('state_manager', {
608
- action: 'get',
609
- key: 'test_key'
610
- });
611
-
612
- assert.equal(result.content[0].text, 'test_value');
613
- });
614
- });
615
- ```
616
-
617
- ### Integration Testing with External Services
618
- ```javascript
619
- describe('External Service Integration', () => {
620
- test('should handle API dependencies', async () => {
621
- // Mock external service responses if needed
622
- const result = await client.callTool('api_client', {
623
- endpoint: 'https://jsonplaceholder.typicode.com/posts/1',
624
- method: 'GET'
625
- });
626
-
627
- assert.equal(result.isError, false);
628
- const responseData = JSON.parse(result.content[0].text);
629
- assert.ok(responseData.id);
630
- assert.ok(responseData.title);
631
- });
632
- });
633
- ```
634
-
635
- ### Custom Assertion Helpers
636
- ```javascript
637
- // Helper functions for common assertions
638
- function assertValidMCPResponse(result) {
639
- assert.ok(result.content, 'Should have content');
640
- assert.ok(Array.isArray(result.content), 'Content should be array');
641
- assert.equal(typeof result.isError, 'boolean', 'isError should be boolean');
642
- }
643
-
644
- function assertTextContent(result, expectedSubstring) {
645
- assertValidMCPResponse(result);
646
- assert.equal(result.content[0].type, 'text');
647
- assert.ok(result.content[0].text.includes(expectedSubstring));
648
- }
649
-
650
- function assertToolSchema(tool) {
651
- assert.ok(tool.name, 'Tool should have name');
652
- assert.ok(tool.description, 'Tool should have description');
653
- assert.ok(tool.inputSchema, 'Tool should have schema');
654
- assert.equal(tool.inputSchema.type, 'object');
655
- }
656
-
657
- // Usage
658
- test('should return valid calculation result', async () => {
659
- const result = await client.callTool('calculator', { operation: 'add', a: 2, b: 3 });
660
- assertTextContent(result, 'Result: 5');
661
- });
662
- ```
663
-
664
- ## Framework Integration
665
-
666
- ### Jest Integration
667
- ```javascript
668
- // jest.config.js
669
- module.exports = {
670
- testEnvironment: 'node',
671
- setupFilesAfterEnv: ['<rootDir>/test/setup.js'],
672
- testMatch: ['**/*.programmatic.test.js']
673
- };
674
-
675
- // test/setup.js
676
- global.mcpClient = null;
677
-
678
- beforeAll(async () => {
679
- const { connect } = require('mcp-aegis');
680
- global.mcpClient = await connect('./aegis.config.json');
681
- });
682
-
683
- afterAll(async () => {
684
- if (global.mcpClient) {
685
- await global.mcpClient.disconnect();
686
- }
687
- });
688
- ```
689
-
690
- ### Mocha Integration
691
- ```javascript
692
- // test/helpers/mcp-setup.js
693
- const { connect } = require('mcp-aegis');
694
-
695
- let client;
696
-
697
- exports.mochaHooks = {
698
- beforeAll: async () => {
699
- client = await connect('./aegis.config.json');
700
- },
701
- afterAll: async () => {
702
- if (client) {
703
- await client.disconnect();
704
- }
705
- }
706
- };
707
-
708
- exports.getClient = () => client;
709
- ```
710
-
711
- ### TypeScript Support
712
- ```typescript
713
- import { test, describe, before, after } from 'node:test';
714
- import { strict as assert } from 'node:assert';
715
- import { connect, MCPClient } from 'mcp-aegis';
716
-
717
- describe('TypeScript MCP Tests', () => {
718
- let client: MCPClient;
719
-
720
- before(async () => {
721
- client = await connect('./aegis.config.json');
722
- });
723
-
724
- after(async () => {
725
- await client.disconnect();
726
- });
727
-
728
- test('should have typed responses', async () => {
729
- const tools = await client.listTools();
730
-
731
- // TypeScript provides full type safety
732
- assert.ok(Array.isArray(tools));
733
- tools.forEach(tool => {
734
- assert.ok(typeof tool.name === 'string');
735
- assert.ok(typeof tool.description === 'string');
736
- assert.ok(typeof tool.inputSchema === 'object');
737
- });
738
- });
739
- });
740
- ```
741
-
742
- ## Best Practices for AI Agents
743
-
744
- ### 1. Test Structure Generation
745
- ```javascript
746
- // Template for generating comprehensive test suites
747
- function generateTestSuite(serverConfig, toolList) {
748
- return `
749
- describe('${serverConfig.name} Programmatic Tests', () => {
750
- let client;
751
-
752
- before(async () => {
753
- client = await connect('${serverConfig.configPath}');
754
- });
755
-
756
- after(async () => {
757
- if (client?.connected) {
758
- await client.disconnect();
759
- }
760
- });
761
-
762
- beforeEach(() => {
763
- client.clearStderr();
764
- });
765
-
766
- describe('Protocol Compliance', () => {
767
- test('should complete MCP handshake', async () => {
768
- assert.ok(client.connected, 'Client should be connected');
769
- });
770
-
771
- test('should list available tools', async () => {
772
- const tools = await client.listTools();
773
- assert.ok(Array.isArray(tools));
774
- assert.equal(tools.length, ${toolList.length});
775
- });
776
- });
777
-
778
- ${toolList.map(tool => generateToolTests(tool)).join('\n\n')}
779
- });`;
780
- }
781
-
782
- function generateToolTests(tool) {
783
- return `
784
- describe('${tool.name} Tool', () => {
785
- test('should execute successfully with valid parameters', async () => {
786
- const result = await client.callTool('${tool.name}', ${JSON.stringify(tool.validParams)});
787
- assert.equal(result.isError, false);
788
- assertValidMCPResponse(result);
789
- });
790
-
791
- test('should handle invalid parameters gracefully', async () => {
792
- const result = await client.callTool('${tool.name}', {});
793
- assert.equal(result.isError, true);
794
- assertTextContent(result, 'required');
795
- });
796
- });`;
797
- }
798
- ```
799
-
800
- ### 2. Configuration Management
801
- ```javascript
802
- // Detect server configuration from project structure
803
- function detectServerConfig(projectPath) {
804
- const packageJson = readPackageJson(projectPath);
805
-
806
- return {
807
- name: packageJson.name || 'MCP Server',
808
- command: detectRuntime(packageJson.engines),
809
- args: [detectServerFile(projectPath)],
810
- cwd: projectPath,
811
- startupTimeout: 5000,
812
- env: {
813
- NODE_ENV: 'test',
814
- ...(packageJson.mcpConfig?.testEnv || {})
815
- }
816
- };
817
- }
818
-
819
- function detectRuntime(engines = {}) {
820
- if (engines.node) return 'node';
821
- if (engines.python) return 'python';
822
- return 'node'; // default
823
- }
824
- ```
825
-
826
- ### 3. Error Pattern Recognition
827
- ```javascript
828
- // Common error patterns to test for
829
- const errorPatterns = [
830
- { type: 'validation', keywords: ['required', 'invalid', 'missing'] },
831
- { type: 'not_found', keywords: ['not found', 'does not exist'] },
832
- { type: 'permission', keywords: ['permission', 'unauthorized', 'forbidden'] },
833
- { type: 'network', keywords: ['connection', 'timeout', 'unreachable'] }
834
- ];
835
-
836
- function categorizeError(errorText) {
837
- for (const pattern of errorPatterns) {
838
- if (pattern.keywords.some(keyword =>
839
- errorText.toLowerCase().includes(keyword))) {
840
- return pattern.type;
841
- }
842
- }
843
- return 'unknown';
844
- }
845
- ```
846
-
847
- ### 4. Built-in Functional Monitoring
848
- ```javascript
849
- // Focus on functional correctness rather than timing
850
- class FunctionalMonitor {
851
- constructor() {
852
- this.results = new Map();
853
- }
854
-
855
- async validateTool(client, toolName, params) {
856
- const result = await client.callTool(toolName, params);
857
-
858
- const validation = {
859
- success: !result.isError,
860
- hasContent: result.content && result.content.length > 0,
861
- contentType: result.content?.[0]?.type,
862
- timestamp: new Date().toISOString()
863
- };
864
-
865
- if (!this.results.has(toolName)) {
866
- this.results.set(toolName, []);
867
- }
868
- this.results.get(toolName).push(validation);
869
-
870
- return { result, validation };
871
- }
872
-
873
- getReliabilityStats(toolName) {
874
- const validations = this.results.get(toolName) || [];
875
- const successful = validations.filter(v => v.success).length;
876
-
877
- return {
878
- totalCalls: validations.length,
879
- successRate: successful / validations.length,
880
- failureRate: (validations.length - successful) / validations.length,
881
- lastValidation: validations[validations.length - 1]?.timestamp
882
- };
883
- }
884
- }
885
- ```
886
-
887
- ## Test Execution Commands
888
-
889
- **CRITICAL**: Use the correct test commands for this SFCC Dev MCP project:
890
-
19
+ **Test Execution**:
891
20
  ```bash
892
- # Run individual MCP programmatic test (CORRECT for this project)
893
21
  node --test tests/mcp/node/specific-test.programmatic.test.js
894
-
895
- # Run all MCP programmatic tests (CORRECT for this project)
896
22
  npm run test:mcp:node
897
-
898
- # Run all MCP tests (YAML + programmatic) (CORRECT for this project)
899
- npm run test:mcp:all
900
-
901
- # ❌ WRONG: Don't use npm test with individual files for MCP tests
902
- # npm test -- tests/mcp/node/specific-test.programmatic.test.js # This runs Jest!
903
-
904
- # ❌ WRONG: Don't use Jest for MCP programmatic tests
905
- # npx jest --testMatch="**/*.programmatic.test.js" # Jest doesn't handle MCP tests
906
-
907
- # Watch mode for development (Node.js test runner)
908
- node --test --watch tests/mcp/node/*.programmatic.test.js
909
-
910
- # Jest is used for unit tests only (src/ directory)
911
- jest base-handler.test.ts
912
-
913
- # Complete test suite (Jest + MCP tests)
914
- npm test
915
23
  ```
916
24
 
917
- **Package.json Script Reference for this project:**
918
- - `npm run test:mcp:node` `node --test tests/mcp/node/*.programmatic.test.js`
919
- - `npm run test:mcp:yaml` Aegis YAML tests (docs-only mode)
920
- - `npm run test:mcp:yaml:full` Aegis YAML tests (full mode)
921
- - `npm run test:mcp:all` → All MCP tests (YAML + programmatic)
922
- - `npm test` → Jest unit tests + MCP tests
923
-
924
- ---
25
+ **Critical Rules**:
26
+ 1. Never use `Promise.all()` with MCP requests
27
+ 2. Always include `beforeEach` with buffer clearing
28
+ 3. Use `node --test`, NOT `npm test` for individual MCP tests
925
29
 
926
- **Key Success Factors for Programmatic Testing:**
927
- 1. Always use proper lifecycle management (before/after hooks)
928
- 2. Clear stderr between tests for isolation
929
- 3. Use appropriate assertion libraries and helpers
930
- 4. Include comprehensive error handling tests
931
- 5. Test both success and failure scenarios
932
- 6. Implement performance monitoring for critical operations
933
- 7. Use TypeScript for better development experience
934
- 8. Integrate with existing testing frameworks and CI/CD pipelines
30
+ For complete API reference and patterns, see the skill file.