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.
- package/.github/ISSUE_TEMPLATE/bug_report.yml +3 -1
- package/.github/ISSUE_TEMPLATE/documentation.yml +2 -2
- package/.github/ISSUE_TEMPLATE/question.yml +1 -1
- package/.github/PULL_REQUEST_TEMPLATE/documentation.md +1 -1
- package/.github/PULL_REQUEST_TEMPLATE/new_tool.md +1 -1
- package/.github/agents/official-docs-researcher.agent.md +56 -0
- package/.github/instructions/mcp-node-tests.instructions.md +12 -916
- package/.github/instructions/mcp-yml-tests.instructions.md +14 -742
- package/.github/pull_request_template.md +1 -1
- package/.github/skills/agent-authoring/SKILL.md +66 -0
- package/.github/skills/mcp-log-debugging/SKILL.md +69 -0
- package/.github/skills/mcp-programmatic-testing/SKILL.md +142 -0
- package/.github/skills/mcp-yaml-testing/SKILL.md +136 -0
- package/.github/skills/salesforce-developer-site-scraper/SKILL.md +102 -0
- package/.github/skills/salesforce-developer-site-scraper/scripts/scrape-to-markdown.js +205 -0
- package/.github/skills/salesforce-help-site-scraper/SKILL.md +84 -0
- package/.github/skills/salesforce-help-site-scraper/scripts/scrape-help-to-markdown.js +212 -0
- package/.github/skills/skill-authoring/SKILL.md +228 -0
- package/.github/skills/skill-authoring/references/PATTERNS.md +384 -0
- package/.github/workflows/ci.yml +3 -3
- package/.github/workflows/deploy-pages.yml +9 -19
- package/.github/workflows/publish.yml +5 -2
- package/.github/workflows/update-docs.yml +1 -1
- package/AGENTS.md +140 -286
- package/CONTRIBUTING.md +10 -22
- package/README.md +48 -16
- package/ai-instructions/{github-copilot/copilot-instructions.md → AGENTS.md} +99 -127
- package/ai-instructions/skills/sfcc-caching/SKILL.md +89 -0
- package/{dist/docs/best-practices/cartridge_creation.md → ai-instructions/skills/sfcc-cartridge-development/SKILL.md} +31 -7
- package/ai-instructions/skills/sfcc-forms-development/SKILL.md +261 -0
- package/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +143 -0
- package/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +127 -0
- package/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +95 -0
- package/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +39 -0
- package/ai-instructions/skills/sfcc-isml-development/SKILL.md +370 -0
- package/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +116 -0
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +50 -0
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +45 -0
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +85 -0
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +63 -0
- package/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +159 -0
- package/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +13 -0
- package/ai-instructions/skills/sfcc-job-development/SKILL.md +334 -0
- package/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +393 -0
- package/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +271 -0
- package/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +257 -0
- package/ai-instructions/skills/sfcc-localization/SKILL.md +92 -0
- package/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +63 -0
- package/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +29 -0
- package/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +33 -0
- package/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +41 -0
- package/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +35 -0
- package/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +740 -0
- package/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +25 -0
- package/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +67 -0
- package/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +23 -0
- package/ai-instructions/skills/sfcc-localization/references/TESTING.md +21 -0
- package/{docs/best-practices/localserviceregistry.md → ai-instructions/skills/sfcc-localserviceregistry/SKILL.md} +65 -31
- package/ai-instructions/skills/sfcc-logging/SKILL.md +352 -0
- package/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +282 -0
- package/{docs/best-practices/ocapi_hooks.md → ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md} +51 -16
- package/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +108 -0
- package/ai-instructions/skills/sfcc-page-designer/SKILL.md +353 -0
- package/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
- package/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +322 -0
- package/{dist/docs/best-practices/performance.md → ai-instructions/skills/sfcc-performance/SKILL.md} +35 -3
- package/ai-instructions/skills/sfcc-platform-limits/SKILL.md +89 -0
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +237 -0
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +214 -0
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +253 -0
- package/{docs/best-practices/scapi_hooks.md → ai-instructions/skills/sfcc-scapi-hooks/SKILL.md} +44 -17
- package/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +380 -0
- package/{docs/best-practices/security.md → ai-instructions/skills/sfcc-security/SKILL.md} +12 -3
- package/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +270 -0
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +285 -0
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +206 -0
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +165 -0
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +185 -0
- package/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +347 -0
- package/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +257 -0
- package/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +193 -0
- package/{dist/docs/best-practices/sfra_controllers.md → ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md} +0 -670
- package/ai-instructions/skills/sfcc-sfra-models/SKILL.md +322 -0
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +530 -0
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +234 -0
- package/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +417 -0
- package/{dist/docs/best-practices/sfra_scss.md → ai-instructions/skills/sfcc-sfra-scss/SKILL.md} +5 -0
- package/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +111 -0
- package/dist/ai-instructions/AGENTS.md +628 -0
- package/dist/ai-instructions/skills/sfcc-caching/SKILL.md +89 -0
- package/{docs/best-practices/cartridge_creation.md → dist/ai-instructions/skills/sfcc-cartridge-development/SKILL.md} +31 -7
- package/dist/ai-instructions/skills/sfcc-forms-development/SKILL.md +261 -0
- package/dist/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +143 -0
- package/dist/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +127 -0
- package/dist/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +95 -0
- package/dist/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +39 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/SKILL.md +370 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +116 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +50 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +45 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +85 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +63 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +159 -0
- package/dist/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +13 -0
- package/dist/ai-instructions/skills/sfcc-job-development/SKILL.md +334 -0
- package/dist/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +393 -0
- package/dist/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +271 -0
- package/dist/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +257 -0
- package/dist/ai-instructions/skills/sfcc-localization/SKILL.md +92 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +63 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +29 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +33 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +41 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +35 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +740 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +25 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +67 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +23 -0
- package/dist/ai-instructions/skills/sfcc-localization/references/TESTING.md +21 -0
- package/dist/{docs/best-practices/localserviceregistry.md → ai-instructions/skills/sfcc-localserviceregistry/SKILL.md} +65 -31
- package/dist/ai-instructions/skills/sfcc-logging/SKILL.md +352 -0
- package/dist/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +282 -0
- package/dist/{docs/best-practices/ocapi_hooks.md → ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md} +51 -16
- package/dist/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +108 -0
- package/dist/ai-instructions/skills/sfcc-page-designer/SKILL.md +353 -0
- package/dist/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
- package/dist/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +322 -0
- package/{docs/best-practices/performance.md → dist/ai-instructions/skills/sfcc-performance/SKILL.md} +35 -3
- package/dist/ai-instructions/skills/sfcc-platform-limits/SKILL.md +89 -0
- package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +237 -0
- package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +214 -0
- package/dist/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +253 -0
- package/dist/{docs/best-practices/scapi_hooks.md → ai-instructions/skills/sfcc-scapi-hooks/SKILL.md} +44 -17
- package/dist/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +380 -0
- package/dist/{docs/best-practices/security.md → ai-instructions/skills/sfcc-security/SKILL.md} +12 -3
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +270 -0
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +285 -0
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +206 -0
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +165 -0
- package/dist/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +185 -0
- package/dist/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +347 -0
- package/dist/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +257 -0
- package/dist/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +193 -0
- package/{docs/best-practices/sfra_controllers.md → dist/ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md} +0 -670
- package/dist/ai-instructions/skills/sfcc-sfra-models/SKILL.md +322 -0
- package/dist/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +530 -0
- package/dist/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +234 -0
- package/dist/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +417 -0
- package/{docs/best-practices/sfra_scss.md → dist/ai-instructions/skills/sfcc-sfra-scss/SKILL.md} +5 -0
- package/dist/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +111 -0
- package/dist/clients/agent-instructions-client.d.ts +66 -0
- package/dist/clients/agent-instructions-client.d.ts.map +1 -0
- package/dist/clients/agent-instructions-client.js +277 -0
- package/dist/clients/agent-instructions-client.js.map +1 -0
- package/dist/clients/base/abstract-documentation-client.d.ts +146 -0
- package/dist/clients/base/abstract-documentation-client.d.ts.map +1 -0
- package/dist/clients/base/abstract-documentation-client.js +265 -0
- package/dist/clients/base/abstract-documentation-client.js.map +1 -0
- package/dist/clients/base/oauth-token.d.ts +18 -0
- package/dist/clients/base/oauth-token.d.ts.map +1 -1
- package/dist/clients/base/oauth-token.js +45 -2
- package/dist/clients/base/oauth-token.js.map +1 -1
- package/dist/clients/cartridge/cartridge-generation-client.d.ts +59 -0
- package/dist/clients/cartridge/cartridge-generation-client.d.ts.map +1 -0
- package/dist/clients/cartridge/cartridge-generation-client.js +224 -0
- package/dist/clients/cartridge/cartridge-generation-client.js.map +1 -0
- package/dist/clients/cartridge/cartridge-structure.d.ts +17 -0
- package/dist/clients/cartridge/cartridge-structure.d.ts.map +1 -0
- package/dist/clients/cartridge/cartridge-structure.js +33 -0
- package/dist/clients/cartridge/cartridge-structure.js.map +1 -0
- package/dist/clients/cartridge/cartridge-templates.d.ts +22 -0
- package/dist/clients/cartridge/cartridge-templates.d.ts.map +1 -0
- package/dist/clients/cartridge/cartridge-templates.js +225 -0
- package/dist/clients/cartridge/cartridge-templates.js.map +1 -0
- package/dist/clients/cartridge/index.d.ts +7 -0
- package/dist/clients/cartridge/index.d.ts.map +1 -0
- package/dist/clients/cartridge/index.js +7 -0
- package/dist/clients/cartridge/index.js.map +1 -0
- package/dist/clients/docs/documentation-scanner.d.ts +5 -2
- package/dist/clients/docs/documentation-scanner.d.ts.map +1 -1
- package/dist/clients/docs/documentation-scanner.js +38 -23
- package/dist/clients/docs/documentation-scanner.js.map +1 -1
- package/dist/clients/docs-client.d.ts +13 -4
- package/dist/clients/docs-client.d.ts.map +1 -1
- package/dist/clients/docs-client.js +44 -11
- package/dist/clients/docs-client.js.map +1 -1
- package/dist/clients/isml-client.d.ts +71 -0
- package/dist/clients/isml-client.d.ts.map +1 -0
- package/dist/clients/isml-client.js +252 -0
- package/dist/clients/isml-client.js.map +1 -0
- package/dist/clients/ocapi/code-versions-client.d.ts.map +1 -1
- package/dist/clients/ocapi/code-versions-client.js +6 -1
- package/dist/clients/ocapi/code-versions-client.js.map +1 -1
- package/dist/clients/ocapi-client.d.ts +9 -101
- package/dist/clients/ocapi-client.d.ts.map +1 -1
- package/dist/clients/ocapi-client.js +11 -93
- package/dist/clients/ocapi-client.js.map +1 -1
- package/dist/clients/script-debugger/index.d.ts +5 -0
- package/dist/clients/script-debugger/index.d.ts.map +1 -0
- package/dist/clients/script-debugger/index.js +5 -0
- package/dist/clients/script-debugger/index.js.map +1 -0
- package/dist/clients/script-debugger/script-debugger-client.d.ts +147 -0
- package/dist/clients/script-debugger/script-debugger-client.d.ts.map +1 -0
- package/dist/clients/script-debugger/script-debugger-client.js +591 -0
- package/dist/clients/script-debugger/script-debugger-client.js.map +1 -0
- package/dist/clients/sfra-client.d.ts +13 -62
- package/dist/clients/sfra-client.d.ts.map +1 -1
- package/dist/clients/sfra-client.js +105 -326
- package/dist/clients/sfra-client.js.map +1 -1
- package/dist/config/configuration-factory.d.ts +1 -1
- package/dist/config/configuration-factory.d.ts.map +1 -1
- package/dist/config/configuration-factory.js +5 -1
- package/dist/config/configuration-factory.js.map +1 -1
- package/dist/config/dw-json-loader.d.ts +7 -0
- package/dist/config/dw-json-loader.d.ts.map +1 -1
- package/dist/config/dw-json-loader.js +92 -15
- package/dist/config/dw-json-loader.js.map +1 -1
- package/dist/config/workspace-roots.d.ts +143 -0
- package/dist/config/workspace-roots.d.ts.map +1 -0
- package/dist/config/workspace-roots.js +448 -0
- package/dist/config/workspace-roots.js.map +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +3 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/core/handlers/abstract-client-handler.d.ts +52 -0
- package/dist/core/handlers/abstract-client-handler.d.ts.map +1 -0
- package/dist/core/handlers/abstract-client-handler.js +51 -0
- package/dist/core/handlers/abstract-client-handler.js.map +1 -0
- package/dist/core/handlers/agent-instructions-handler.d.ts +17 -0
- package/dist/core/handlers/agent-instructions-handler.d.ts.map +1 -0
- package/dist/core/handlers/agent-instructions-handler.js +38 -0
- package/dist/core/handlers/agent-instructions-handler.js.map +1 -0
- package/dist/core/handlers/base-handler.d.ts +3 -68
- package/dist/core/handlers/base-handler.d.ts.map +1 -1
- package/dist/core/handlers/base-handler.js +11 -84
- package/dist/core/handlers/base-handler.js.map +1 -1
- package/dist/core/handlers/cartridge-handler.d.ts +10 -11
- package/dist/core/handlers/cartridge-handler.d.ts.map +1 -1
- package/dist/core/handlers/cartridge-handler.js +10 -28
- package/dist/core/handlers/cartridge-handler.js.map +1 -1
- package/dist/core/handlers/client-factory.d.ts +12 -2
- package/dist/core/handlers/client-factory.d.ts.map +1 -1
- package/dist/core/handlers/client-factory.js +28 -1
- package/dist/core/handlers/client-factory.js.map +1 -1
- package/dist/core/handlers/code-version-handler.d.ts +11 -11
- package/dist/core/handlers/code-version-handler.d.ts.map +1 -1
- package/dist/core/handlers/code-version-handler.js +13 -27
- package/dist/core/handlers/code-version-handler.js.map +1 -1
- package/dist/core/handlers/docs-handler.d.ts +6 -12
- package/dist/core/handlers/docs-handler.d.ts.map +1 -1
- package/dist/core/handlers/docs-handler.js +11 -36
- package/dist/core/handlers/docs-handler.js.map +1 -1
- package/dist/core/handlers/isml-handler.d.ts +11 -0
- package/dist/core/handlers/isml-handler.d.ts.map +1 -0
- package/dist/core/handlers/isml-handler.js +18 -0
- package/dist/core/handlers/isml-handler.js.map +1 -0
- package/dist/core/handlers/job-log-handler.d.ts +8 -7
- package/dist/core/handlers/job-log-handler.d.ts.map +1 -1
- package/dist/core/handlers/job-log-handler.js +14 -5
- package/dist/core/handlers/job-log-handler.js.map +1 -1
- package/dist/core/handlers/log-handler.d.ts +8 -7
- package/dist/core/handlers/log-handler.d.ts.map +1 -1
- package/dist/core/handlers/log-handler.js +14 -5
- package/dist/core/handlers/log-handler.js.map +1 -1
- package/dist/core/handlers/script-debugger-handler.d.ts +18 -0
- package/dist/core/handlers/script-debugger-handler.d.ts.map +1 -0
- package/dist/core/handlers/script-debugger-handler.js +31 -0
- package/dist/core/handlers/script-debugger-handler.js.map +1 -0
- package/dist/core/handlers/sfra-handler.d.ts +6 -12
- package/dist/core/handlers/sfra-handler.d.ts.map +1 -1
- package/dist/core/handlers/sfra-handler.js +11 -36
- package/dist/core/handlers/sfra-handler.js.map +1 -1
- package/dist/core/handlers/simple-client-handler.d.ts +41 -0
- package/dist/core/handlers/simple-client-handler.d.ts.map +1 -0
- package/dist/core/handlers/simple-client-handler.js +49 -0
- package/dist/core/handlers/simple-client-handler.js.map +1 -0
- package/dist/core/handlers/system-object-handler.d.ts +11 -11
- package/dist/core/handlers/system-object-handler.d.ts.map +1 -1
- package/dist/core/handlers/system-object-handler.js +13 -27
- package/dist/core/handlers/system-object-handler.js.map +1 -1
- package/dist/core/handlers/validation-helpers.d.ts +22 -24
- package/dist/core/handlers/validation-helpers.d.ts.map +1 -1
- package/dist/core/handlers/validation-helpers.js +89 -39
- package/dist/core/handlers/validation-helpers.js.map +1 -1
- package/dist/core/instruction-advisor.d.ts +28 -0
- package/dist/core/instruction-advisor.d.ts.map +1 -0
- package/dist/core/instruction-advisor.js +114 -0
- package/dist/core/instruction-advisor.js.map +1 -0
- package/dist/core/server.d.ts +25 -0
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +151 -11
- package/dist/core/server.js.map +1 -1
- package/dist/core/tool-definitions.d.ts +6 -854
- package/dist/core/tool-definitions.d.ts.map +1 -1
- package/dist/core/tool-definitions.js +8 -1064
- package/dist/core/tool-definitions.js.map +1 -1
- package/dist/core/tool-schemas/agent-instruction-tools.d.ts +77 -0
- package/dist/core/tool-schemas/agent-instruction-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/agent-instruction-tools.js +72 -0
- package/dist/core/tool-schemas/agent-instruction-tools.js.map +1 -0
- package/dist/core/tool-schemas/cartridge-tools.d.ts +27 -0
- package/dist/core/tool-schemas/cartridge-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/cartridge-tools.js +29 -0
- package/dist/core/tool-schemas/cartridge-tools.js.map +1 -0
- package/dist/core/tool-schemas/code-version-tools.d.ts +28 -0
- package/dist/core/tool-schemas/code-version-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/code-version-tools.js +28 -0
- package/dist/core/tool-schemas/code-version-tools.js.map +1 -0
- package/dist/core/tool-schemas/documentation-tools.d.ts +139 -0
- package/dist/core/tool-schemas/documentation-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/documentation-tools.js +104 -0
- package/dist/core/tool-schemas/documentation-tools.js.map +1 -0
- package/dist/core/tool-schemas/index.d.ts +17 -0
- package/dist/core/tool-schemas/index.d.ts.map +1 -0
- package/dist/core/tool-schemas/index.js +19 -0
- package/dist/core/tool-schemas/index.js.map +1 -0
- package/dist/core/tool-schemas/isml-tools.d.ts +98 -0
- package/dist/core/tool-schemas/isml-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/isml-tools.js +89 -0
- package/dist/core/tool-schemas/isml-tools.js.map +1 -0
- package/dist/core/tool-schemas/log-tools.d.ts +221 -0
- package/dist/core/tool-schemas/log-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/log-tools.js +180 -0
- package/dist/core/tool-schemas/log-tools.js.map +1 -0
- package/dist/core/tool-schemas/script-debugger-tools.d.ts +44 -0
- package/dist/core/tool-schemas/script-debugger-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/script-debugger-tools.js +83 -0
- package/dist/core/tool-schemas/script-debugger-tools.js.map +1 -0
- package/dist/core/tool-schemas/sfra-tools.d.ts +63 -0
- package/dist/core/tool-schemas/sfra-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/sfra-tools.js +65 -0
- package/dist/core/tool-schemas/sfra-tools.js.map +1 -0
- package/dist/core/tool-schemas/shared-schemas.d.ts +350 -0
- package/dist/core/tool-schemas/shared-schemas.d.ts.map +1 -0
- package/dist/core/tool-schemas/shared-schemas.js +153 -0
- package/dist/core/tool-schemas/shared-schemas.js.map +1 -0
- package/dist/core/tool-schemas/system-object-tools.d.ts +511 -0
- package/dist/core/tool-schemas/system-object-tools.d.ts.map +1 -0
- package/dist/core/tool-schemas/system-object-tools.js +126 -0
- package/dist/core/tool-schemas/system-object-tools.js.map +1 -0
- package/dist/docs/dw_net/HTTPClient.md +46 -2
- package/dist/docs/dw_net/HTTPClientLoggingConfig.md +296 -0
- package/dist/docs/dw_order/Basket.md +7 -7
- package/dist/docs/dw_order/BasketMgr.md +22 -6
- package/dist/docs/dw_order.hooks/BasketMergeHooks.md +42 -0
- package/dist/docs/dw_svc/ServiceCallback.md +2 -2
- package/dist/docs/isml/isactivedatacontext.md +382 -0
- package/dist/docs/isml/isactivedatahead.md +566 -0
- package/dist/docs/isml/isanalyticsoff.md +537 -0
- package/dist/docs/isml/isapplepay.md +667 -0
- package/dist/docs/isml/isbreak.md +687 -0
- package/dist/docs/isml/isbuynow.md +682 -0
- package/dist/docs/isml/iscache.md +802 -0
- package/dist/docs/isml/iscomment.md +794 -0
- package/dist/docs/isml/iscomponent.md +797 -0
- package/dist/docs/isml/iscontent.md +594 -0
- package/dist/docs/isml/iscontinue.md +563 -0
- package/dist/docs/isml/iscookie.md +798 -0
- package/dist/docs/isml/isdecorate.md +818 -0
- package/dist/docs/isml/isif.md +737 -0
- package/dist/docs/isml/isinclude.md +874 -0
- package/dist/docs/isml/isloop.md +377 -0
- package/dist/docs/isml/ismodule.md +844 -0
- package/dist/docs/isml/isnext.md +672 -0
- package/dist/docs/isml/isobject.md +760 -0
- package/dist/docs/isml/ispayment.md +577 -0
- package/dist/docs/isml/ispaymentmessages.md +664 -0
- package/dist/docs/isml/isprint.md +875 -0
- package/dist/docs/isml/isredirect.md +716 -0
- package/dist/docs/isml/isremove.md +725 -0
- package/dist/docs/isml/isreplace.md +783 -0
- package/dist/docs/isml/isscript.md +859 -0
- package/dist/docs/isml/isselect.md +908 -0
- package/dist/docs/isml/isset.md +585 -0
- package/dist/docs/isml/isslot.md +824 -0
- package/dist/docs/isml/isstatus.md +711 -0
- package/dist/main.d.ts +16 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +60 -28
- package/dist/main.js.map +1 -1
- package/dist/services/index.d.ts +4 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +1 -1
- package/dist/tool-configs/agent-instructions-tool-config.d.ts +6 -0
- package/dist/tool-configs/agent-instructions-tool-config.d.ts.map +1 -0
- package/dist/tool-configs/agent-instructions-tool-config.js +74 -0
- package/dist/tool-configs/agent-instructions-tool-config.js.map +1 -0
- package/dist/tool-configs/code-version-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/code-version-tool-config.js +0 -5
- package/dist/tool-configs/code-version-tool-config.js.map +1 -1
- package/dist/tool-configs/docs-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/docs-tool-config.js +0 -7
- package/dist/tool-configs/docs-tool-config.js.map +1 -1
- package/dist/tool-configs/isml-tool-config.d.ts +11 -0
- package/dist/tool-configs/isml-tool-config.d.ts.map +1 -0
- package/dist/tool-configs/isml-tool-config.js +77 -0
- package/dist/tool-configs/isml-tool-config.js.map +1 -0
- package/dist/tool-configs/job-log-tool-config.d.ts +1 -2
- package/dist/tool-configs/job-log-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/job-log-tool-config.js +11 -15
- package/dist/tool-configs/job-log-tool-config.js.map +1 -1
- package/dist/tool-configs/log-tool-config.d.ts +1 -2
- package/dist/tool-configs/log-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/log-tool-config.js +35 -51
- package/dist/tool-configs/log-tool-config.js.map +1 -1
- package/dist/tool-configs/script-debugger-tool-config.d.ts +11 -0
- package/dist/tool-configs/script-debugger-tool-config.d.ts.map +1 -0
- package/dist/tool-configs/script-debugger-tool-config.js +35 -0
- package/dist/tool-configs/script-debugger-tool-config.js.map +1 -0
- package/dist/tool-configs/sfra-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/sfra-tool-config.js +0 -11
- package/dist/tool-configs/sfra-tool-config.js.map +1 -1
- package/dist/tool-configs/system-object-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/system-object-tool-config.js +0 -5
- package/dist/tool-configs/system-object-tool-config.js.map +1 -1
- package/dist/types/types.d.ts +2 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils/cache.d.ts +12 -10
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +47 -47
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/category-utils.d.ts +31 -0
- package/dist/utils/category-utils.d.ts.map +1 -0
- package/dist/utils/category-utils.js +45 -0
- package/dist/utils/category-utils.js.map +1 -0
- package/dist/utils/log-tool-constants.d.ts +16 -13
- package/dist/utils/log-tool-constants.d.ts.map +1 -1
- package/dist/utils/log-tool-constants.js +10 -11
- package/dist/utils/log-tool-constants.js.map +1 -1
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +35 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/markdown-utils.d.ts +60 -0
- package/dist/utils/markdown-utils.d.ts.map +1 -0
- package/dist/utils/markdown-utils.js +206 -0
- package/dist/utils/markdown-utils.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +12 -4
- package/dist/utils/path-resolver.d.ts.map +1 -1
- package/dist/utils/path-resolver.js +22 -8
- package/dist/utils/path-resolver.js.map +1 -1
- package/dist/utils/path-validation.d.ts +40 -0
- package/dist/utils/path-validation.d.ts.map +1 -0
- package/dist/utils/path-validation.js +84 -0
- package/dist/utils/path-validation.js.map +1 -0
- package/docs/dw_net/HTTPClient.md +46 -2
- package/docs/dw_net/HTTPClientLoggingConfig.md +296 -0
- package/docs/dw_order/Basket.md +7 -7
- package/docs/dw_order/BasketMgr.md +22 -6
- package/docs/dw_order.hooks/BasketMergeHooks.md +42 -0
- package/docs/dw_svc/ServiceCallback.md +2 -2
- package/docs/isml/isactivedatacontext.md +382 -0
- package/docs/isml/isactivedatahead.md +566 -0
- package/docs/isml/isanalyticsoff.md +537 -0
- package/docs/isml/isapplepay.md +667 -0
- package/docs/isml/isbreak.md +687 -0
- package/docs/isml/isbuynow.md +682 -0
- package/docs/isml/iscache.md +802 -0
- package/docs/isml/iscomment.md +794 -0
- package/docs/isml/iscomponent.md +797 -0
- package/docs/isml/iscontent.md +594 -0
- package/docs/isml/iscontinue.md +563 -0
- package/docs/isml/iscookie.md +798 -0
- package/docs/isml/isdecorate.md +818 -0
- package/docs/isml/isif.md +737 -0
- package/docs/isml/isinclude.md +874 -0
- package/docs/isml/isloop.md +377 -0
- package/docs/isml/ismodule.md +844 -0
- package/docs/isml/isnext.md +672 -0
- package/docs/isml/isobject.md +760 -0
- package/docs/isml/ispayment.md +577 -0
- package/docs/isml/ispaymentmessages.md +664 -0
- package/docs/isml/isprint.md +875 -0
- package/docs/isml/isredirect.md +716 -0
- package/docs/isml/isremove.md +725 -0
- package/docs/isml/isreplace.md +783 -0
- package/docs/isml/isscript.md +859 -0
- package/docs/isml/isselect.md +908 -0
- package/docs/isml/isset.md +585 -0
- package/docs/isml/isslot.md +824 -0
- package/docs/isml/isstatus.md +711 -0
- package/docs-site-v2/.vitepress/config.mts +190 -0
- package/docs-site-v2/.vitepress/theme/components/AssistantTabs.vue +96 -0
- package/docs-site-v2/.vitepress/theme/components/Callout.vue +10 -0
- package/docs-site-v2/.vitepress/theme/components/Collapsible.vue +14 -0
- package/docs-site-v2/.vitepress/theme/components/DwJsonBuilder.vue +82 -0
- package/docs-site-v2/.vitepress/theme/components/HomeSections.vue +552 -0
- package/docs-site-v2/.vitepress/theme/components/InstructionFilesTabs.vue +87 -0
- package/docs-site-v2/.vitepress/theme/components/ModeTabs.vue +70 -0
- package/docs-site-v2/.vitepress/theme/components/NewcomerCTA.vue +14 -0
- package/docs-site-v2/.vitepress/theme/components/QuickStartCards.vue +20 -0
- package/docs-site-v2/.vitepress/theme/components/QuickStartHero.vue +20 -0
- package/docs-site-v2/.vitepress/theme/components/SkillsList.vue +48 -0
- package/docs-site-v2/.vitepress/theme/components/ToolExplorer.vue +85 -0
- package/docs-site-v2/.vitepress/theme/custom.css +1373 -0
- package/docs-site-v2/.vitepress/theme/index.ts +39 -0
- package/docs-site-v2/data/skills.ts +147 -0
- package/docs-site-v2/data/tools.ts +490 -0
- package/docs-site-v2/development/index.md +151 -0
- package/docs-site-v2/examples/index.md +333 -0
- package/docs-site-v2/features/index.md +144 -0
- package/docs-site-v2/guide/ai-interfaces.md +58 -0
- package/docs-site-v2/guide/configuration.md +208 -0
- package/docs-site-v2/guide/index.md +50 -0
- package/docs-site-v2/index.md +32 -0
- package/docs-site-v2/package-lock.json +2511 -0
- package/docs-site-v2/package.json +15 -0
- package/docs-site-v2/public/android-chrome-192x192.png +0 -0
- package/docs-site-v2/public/android-chrome-512x512.png +0 -0
- package/docs-site-v2/public/apple-touch-icon.png +0 -0
- package/docs-site-v2/public/favicon-16x16.png +0 -0
- package/docs-site-v2/public/favicon-32x32.png +0 -0
- package/docs-site-v2/public/favicon.ico +0 -0
- package/docs-site-v2/public/index.css +4174 -0
- package/docs-site-v2/public/llms.txt +44 -0
- package/docs-site-v2/public/logo-dark.svg +8 -0
- package/docs-site-v2/public/logo.svg +8 -0
- package/{docs-site → docs-site-v2}/public/robots.txt +1 -6
- package/{docs-site → docs-site-v2}/public/site.webmanifest +1 -1
- package/{docs-site → docs-site-v2}/public/sitemap.xml +33 -12
- package/docs-site-v2/script-debugger/index.md +105 -0
- package/docs-site-v2/scripts/generate-llms.js +71 -0
- package/docs-site-v2/scripts/generate-sitemap.js +97 -0
- package/docs-site-v2/security/index.md +115 -0
- package/docs-site-v2/skills/index.md +40 -0
- package/docs-site-v2/tools/index.md +36 -0
- package/docs-site-v2/troubleshooting/index.md +204 -0
- package/eslint.config.js +3 -1
- package/memories/repo/docs-site-v2-build.json +11 -0
- package/package.json +18 -14
- package/scripts/validate-server-json.js +68 -0
- package/server.json +4 -6
- package/src/clients/agent-instructions-client.ts +370 -0
- package/src/clients/base/abstract-documentation-client.ts +405 -0
- package/src/clients/base/oauth-token.ts +52 -2
- package/src/clients/cartridge/cartridge-generation-client.ts +302 -0
- package/src/clients/cartridge/cartridge-structure.ts +37 -0
- package/src/clients/cartridge/cartridge-templates.ts +246 -0
- package/src/clients/cartridge/index.ts +6 -0
- package/src/clients/docs/documentation-scanner.ts +44 -28
- package/src/clients/docs-client.ts +54 -14
- package/src/clients/isml-client.ts +353 -0
- package/src/clients/ocapi/code-versions-client.ts +7 -1
- package/src/clients/ocapi-client.ts +11 -166
- package/src/clients/script-debugger/index.ts +5 -0
- package/src/clients/script-debugger/script-debugger-client.ts +754 -0
- package/src/clients/sfra-client.ts +134 -397
- package/src/config/configuration-factory.ts +6 -1
- package/src/config/dw-json-loader.ts +96 -15
- package/src/config/workspace-roots.ts +540 -0
- package/src/constants/index.ts +1 -0
- package/src/core/handlers/abstract-client-handler.ts +85 -0
- package/src/core/handlers/agent-instructions-handler.ts +48 -0
- package/src/core/handlers/base-handler.ts +17 -127
- package/src/core/handlers/cartridge-handler.ts +13 -33
- package/src/core/handlers/client-factory.ts +32 -2
- package/src/core/handlers/code-version-handler.ts +17 -32
- package/src/core/handlers/docs-handler.ts +12 -44
- package/src/core/handlers/isml-handler.ts +19 -0
- package/src/core/handlers/job-log-handler.ts +19 -8
- package/src/core/handlers/log-handler.ts +19 -8
- package/src/core/handlers/script-debugger-handler.ts +46 -0
- package/src/core/handlers/sfra-handler.ts +12 -44
- package/src/core/handlers/simple-client-handler.ts +78 -0
- package/src/core/handlers/system-object-handler.ts +17 -32
- package/src/core/handlers/validation-helpers.ts +87 -47
- package/src/core/instruction-advisor.ts +122 -0
- package/src/core/server.ts +178 -13
- package/src/core/tool-definitions.ts +25 -1071
- package/src/core/tool-schemas/agent-instruction-tools.ts +72 -0
- package/src/core/tool-schemas/cartridge-tools.ts +29 -0
- package/src/core/tool-schemas/code-version-tools.ts +28 -0
- package/src/core/tool-schemas/documentation-tools.ts +104 -0
- package/src/core/tool-schemas/index.ts +27 -0
- package/src/core/tool-schemas/isml-tools.ts +89 -0
- package/src/core/tool-schemas/log-tools.ts +196 -0
- package/src/core/tool-schemas/script-debugger-tools.ts +83 -0
- package/src/core/tool-schemas/sfra-tools.ts +65 -0
- package/src/core/tool-schemas/shared-schemas.ts +158 -0
- package/src/core/tool-schemas/system-object-tools.ts +127 -0
- package/src/main.ts +63 -30
- package/src/services/index.ts +4 -10
- package/src/tool-configs/agent-instructions-tool-config.ts +83 -0
- package/src/tool-configs/cartridge-tool-config.ts +1 -1
- package/src/tool-configs/code-version-tool-config.ts +0 -5
- package/src/tool-configs/docs-tool-config.ts +0 -7
- package/src/tool-configs/isml-tool-config.ts +87 -0
- package/src/tool-configs/job-log-tool-config.ts +18 -17
- package/src/tool-configs/log-tool-config.ts +49 -64
- package/src/tool-configs/script-debugger-tool-config.ts +69 -0
- package/src/tool-configs/sfra-tool-config.ts +0 -11
- package/src/tool-configs/system-object-tool-config.ts +0 -5
- package/src/types/types.ts +2 -0
- package/src/utils/cache.ts +49 -54
- package/src/utils/category-utils.ts +70 -0
- package/src/utils/log-tool-constants.ts +25 -17
- package/src/utils/logger.ts +38 -1
- package/src/utils/markdown-utils.ts +280 -0
- package/src/utils/path-resolver.ts +25 -9
- package/src/utils/path-validation.ts +113 -0
- package/tests/base-handler.test.ts +1 -1
- package/tests/cache.test.ts +2 -2
- package/tests/cartridge-handler.test.ts +4 -4
- package/tests/client-factory.test.ts +1 -1
- package/tests/code-version-handler.test.ts +3 -3
- package/tests/docs-handler.test.ts +2 -2
- package/tests/documentation-scanner.test.ts +4 -4
- package/tests/isml-client.test.ts +463 -0
- package/tests/isml-handler.test.ts +375 -0
- package/tests/job-log-handler.test.ts +1 -1
- package/tests/log-handler.test.ts +8 -8
- package/tests/log-validation.test.ts +149 -0
- package/tests/mcp/README.md +22 -18
- package/tests/mcp/node/activate-code-version-advanced.full-mode.programmatic.test.js +30 -12
- package/tests/mcp/node/evaluate-script.full-mode.programmatic.test.js +387 -0
- package/tests/mcp/node/generate-cartridge-structure.docs-only.programmatic.test.js +14 -8
- package/tests/mcp/node/get-isml-categories.programmatic.test.js +278 -0
- package/tests/mcp/node/get-isml-element.programmatic.test.js +278 -0
- package/tests/mcp/node/get-isml-elements-by-category.programmatic.test.js +363 -0
- package/tests/mcp/node/get-sfra-categories.docs-only.programmatic.test.js +24 -24
- package/tests/mcp/node/get-sfra-document.programmatic.test.js +4 -2
- package/tests/mcp/node/list-isml-elements.programmatic.test.js +311 -0
- package/tests/mcp/node/list-sfcc-classes.docs-only.programmatic.test.js +2 -33
- package/tests/mcp/node/search-isml-elements.programmatic.test.js +325 -0
- package/tests/mcp/node/search-sfcc-classes.docs-only.programmatic.test.js +5 -9
- package/tests/mcp/node/search-sfcc-methods.docs-only.programmatic.test.js +7 -9
- package/tests/mcp/node/tools.docs-only.programmatic.test.js +42 -65
- package/tests/mcp/node/tools.full-mode.programmatic.test.js +7 -8
- package/tests/mcp/yaml/activate-code-version.full-mode.test.mcp.yml +2 -2
- package/tests/mcp/yaml/evaluate-script.full-mode.test.mcp.yml +281 -0
- package/tests/mcp/yaml/get-isml-categories.docs-only.test.mcp.yml +330 -0
- package/tests/mcp/yaml/get-isml-element.docs-only.test.mcp.yml +294 -0
- package/tests/mcp/yaml/get-isml-elements-by-category.docs-only.test.mcp.yml +334 -0
- package/tests/mcp/yaml/get-sfcc-class-info.docs-only.test.mcp.yml +2 -2
- package/tests/mcp/yaml/get-sfra-categories.docs-only.test.mcp.yml +13 -13
- package/tests/mcp/yaml/get-sfra-categories.full-mode.test.mcp.yml +13 -13
- package/tests/mcp/yaml/get-system-object-definitions.docs-only.test.mcp.yml +1 -16
- package/tests/mcp/yaml/list-isml-elements.docs-only.test.mcp.yml +212 -0
- package/tests/mcp/yaml/search-isml-elements.docs-only.test.mcp.yml +312 -0
- package/tests/mcp/yaml/search-sfcc-classes.docs-only.test.mcp.yml +1 -1
- package/tests/mcp/yaml/search-sfcc-classes.full-mode.test.mcp.yml +1 -1
- package/tests/mcp/yaml/search-site-preferences.docs-only.test.mcp.yml +1 -1
- package/tests/mcp/yaml/tools.docs-only.test.mcp.yml +3 -57
- package/tests/mcp/yaml/tools.full-mode.test.mcp.yml +3 -3
- package/tests/oauth-token.test.ts +107 -12
- package/tests/ocapi-client.test.ts +53 -106
- package/tests/script-debugger-client.test.ts +430 -0
- package/tests/servers/sfcc-mock-server/src/app.js +15 -0
- package/tests/servers/sfcc-mock-server/src/routes/cartridge-webdav.js +258 -0
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/debugger-handler.js +396 -0
- package/tests/servers/sfcc-mock-server/src/routes/ocapi.js +5 -0
- package/tests/servers/sfcc-mock-server/src/routes/storefront.js +86 -0
- package/tests/servers/sfcc-mock-server/src/routes/webdav.js +6 -4
- package/tests/validation-helpers.test.ts +0 -31
- package/tests/workspace-roots.test.ts +227 -0
- package/ai-instructions/claude-desktop/claude_custom_instructions.md +0 -321
- package/ai-instructions/cursor/.cursor/rules/debugging-workflows.mdc +0 -171
- package/ai-instructions/cursor/.cursor/rules/hooks-development.mdc +0 -168
- package/ai-instructions/cursor/.cursor/rules/isml-templates.mdc +0 -209
- package/ai-instructions/cursor/.cursor/rules/job-framework.mdc +0 -379
- package/ai-instructions/cursor/.cursor/rules/performance-optimization.mdc +0 -215
- package/ai-instructions/cursor/.cursor/rules/scapi-endpoints.mdc +0 -98
- package/ai-instructions/cursor/.cursor/rules/security-patterns.mdc +0 -375
- package/ai-instructions/cursor/.cursor/rules/sfcc-development.mdc +0 -144
- package/ai-instructions/cursor/.cursor/rules/sfra-controllers.mdc +0 -376
- package/ai-instructions/cursor/.cursor/rules/sfra-models.mdc +0 -412
- package/ai-instructions/cursor/.cursor/rules/system-objects.mdc +0 -383
- package/ai-instructions/cursor/.cursor/rules/testing-patterns.mdc +0 -418
- package/dist/clients/best-practices-client.d.ts +0 -57
- package/dist/clients/best-practices-client.d.ts.map +0 -1
- package/dist/clients/best-practices-client.js +0 -288
- package/dist/clients/best-practices-client.js.map +0 -1
- package/dist/clients/cartridge-generation-client.d.ts +0 -57
- package/dist/clients/cartridge-generation-client.d.ts.map +0 -1
- package/dist/clients/cartridge-generation-client.js +0 -384
- package/dist/clients/cartridge-generation-client.js.map +0 -1
- package/dist/clients/logs/index.d.ts +0 -13
- package/dist/clients/logs/index.d.ts.map +0 -1
- package/dist/clients/logs/index.js +0 -15
- package/dist/clients/logs/index.js.map +0 -1
- package/dist/clients/logs/log-analyzer.d.ts +0 -55
- package/dist/clients/logs/log-analyzer.d.ts.map +0 -1
- package/dist/clients/logs/log-analyzer.js +0 -228
- package/dist/clients/logs/log-analyzer.js.map +0 -1
- package/dist/clients/logs/log-client.d.ts +0 -87
- package/dist/clients/logs/log-client.d.ts.map +0 -1
- package/dist/clients/logs/log-client.js +0 -418
- package/dist/clients/logs/log-client.js.map +0 -1
- package/dist/clients/logs/log-constants.d.ts +0 -37
- package/dist/clients/logs/log-constants.d.ts.map +0 -1
- package/dist/clients/logs/log-constants.js +0 -37
- package/dist/clients/logs/log-constants.js.map +0 -1
- package/dist/clients/logs/log-file-discovery.d.ts +0 -62
- package/dist/clients/logs/log-file-discovery.d.ts.map +0 -1
- package/dist/clients/logs/log-file-discovery.js +0 -238
- package/dist/clients/logs/log-file-discovery.js.map +0 -1
- package/dist/clients/logs/log-file-reader.d.ts +0 -53
- package/dist/clients/logs/log-file-reader.d.ts.map +0 -1
- package/dist/clients/logs/log-file-reader.js +0 -194
- package/dist/clients/logs/log-file-reader.js.map +0 -1
- package/dist/clients/logs/log-formatter.d.ts +0 -90
- package/dist/clients/logs/log-formatter.d.ts.map +0 -1
- package/dist/clients/logs/log-formatter.js +0 -189
- package/dist/clients/logs/log-formatter.js.map +0 -1
- package/dist/clients/logs/log-processor.d.ts +0 -91
- package/dist/clients/logs/log-processor.d.ts.map +0 -1
- package/dist/clients/logs/log-processor.js +0 -328
- package/dist/clients/logs/log-processor.js.map +0 -1
- package/dist/clients/logs/log-types.d.ts +0 -69
- package/dist/clients/logs/log-types.d.ts.map +0 -1
- package/dist/clients/logs/log-types.js +0 -5
- package/dist/clients/logs/log-types.js.map +0 -1
- package/dist/clients/logs/webdav-client-manager.d.ts +0 -28
- package/dist/clients/logs/webdav-client-manager.d.ts.map +0 -1
- package/dist/clients/logs/webdav-client-manager.js +0 -77
- package/dist/clients/logs/webdav-client-manager.js.map +0 -1
- package/dist/core/handlers/abstract-log-tool-handler.d.ts +0 -35
- package/dist/core/handlers/abstract-log-tool-handler.d.ts.map +0 -1
- package/dist/core/handlers/abstract-log-tool-handler.js +0 -46
- package/dist/core/handlers/abstract-log-tool-handler.js.map +0 -1
- package/dist/core/handlers/best-practices-handler.d.ts +0 -17
- package/dist/core/handlers/best-practices-handler.d.ts.map +0 -1
- package/dist/core/handlers/best-practices-handler.js +0 -43
- package/dist/core/handlers/best-practices-handler.js.map +0 -1
- package/dist/core/handlers/job-log-tool-config.d.ts +0 -8
- package/dist/core/handlers/job-log-tool-config.d.ts.map +0 -1
- package/dist/core/handlers/job-log-tool-config.js +0 -76
- package/dist/core/handlers/job-log-tool-config.js.map +0 -1
- package/dist/core/handlers/log-tool-config.d.ts +0 -8
- package/dist/core/handlers/log-tool-config.d.ts.map +0 -1
- package/dist/core/handlers/log-tool-config.js +0 -73
- package/dist/core/handlers/log-tool-config.js.map +0 -1
- package/dist/docs/best-practices/isml_templates.md +0 -1933
- package/dist/docs/best-practices/job_framework.md +0 -1173
- package/dist/docs/best-practices/scapi_custom_endpoint.md +0 -963
- package/dist/docs/best-practices/sfra_client_side_js.md +0 -736
- package/dist/docs/best-practices/sfra_models.md +0 -1142
- package/dist/tool-configs/best-practices-tool-config.d.ts +0 -11
- package/dist/tool-configs/best-practices-tool-config.d.ts.map +0 -1
- package/dist/tool-configs/best-practices-tool-config.js +0 -59
- package/dist/tool-configs/best-practices-tool-config.js.map +0 -1
- package/dist/utils/job-log-tool-config.d.ts +0 -8
- package/dist/utils/job-log-tool-config.d.ts.map +0 -1
- package/dist/utils/job-log-tool-config.js +0 -76
- package/dist/utils/job-log-tool-config.js.map +0 -1
- package/dist/utils/job-log-utils.d.ts +0 -34
- package/dist/utils/job-log-utils.d.ts.map +0 -1
- package/dist/utils/job-log-utils.js +0 -60
- package/dist/utils/job-log-utils.js.map +0 -1
- package/dist/utils/log-cache.d.ts +0 -53
- package/dist/utils/log-cache.d.ts.map +0 -1
- package/dist/utils/log-cache.js +0 -114
- package/dist/utils/log-cache.js.map +0 -1
- package/dist/utils/log-tool-config.d.ts +0 -8
- package/dist/utils/log-tool-config.d.ts.map +0 -1
- package/dist/utils/log-tool-config.js +0 -73
- package/dist/utils/log-tool-config.js.map +0 -1
- package/dist/utils/log-tool-utils.d.ts +0 -39
- package/dist/utils/log-tool-utils.d.ts.map +0 -1
- package/dist/utils/log-tool-utils.js +0 -94
- package/dist/utils/log-tool-utils.js.map +0 -1
- package/docs/best-practices/isml_templates.md +0 -1933
- package/docs/best-practices/job_framework.md +0 -1173
- package/docs/best-practices/scapi_custom_endpoint.md +0 -963
- package/docs/best-practices/sfra_client_side_js.md +0 -736
- package/docs/best-practices/sfra_models.md +0 -1142
- package/docs-site/App.tsx +0 -103
- package/docs-site/README.md +0 -113
- package/docs-site/components/Badge.tsx +0 -38
- package/docs-site/components/BreadcrumbSchema.tsx +0 -34
- package/docs-site/components/CodeBlock.tsx +0 -132
- package/docs-site/components/Collapsible.tsx +0 -40
- package/docs-site/components/ConfigBuilder.tsx +0 -118
- package/docs-site/components/ConfigHero.tsx +0 -19
- package/docs-site/components/ConfigModeTabs.tsx +0 -42
- package/docs-site/components/Layout.tsx +0 -174
- package/docs-site/components/LightCodeContainer.tsx +0 -44
- package/docs-site/components/NewcomerCTA.tsx +0 -57
- package/docs-site/components/NextStepsStrip.tsx +0 -23
- package/docs-site/components/OnThisPage.tsx +0 -91
- package/docs-site/components/SEO.tsx +0 -79
- package/docs-site/components/Search.tsx +0 -207
- package/docs-site/components/Sidebar.tsx +0 -96
- package/docs-site/components/StructuredData.tsx +0 -72
- package/docs-site/components/ToolCard.tsx +0 -84
- package/docs-site/components/ToolFilters.tsx +0 -39
- package/docs-site/components/Typography.tsx +0 -30
- package/docs-site/components/VersionBadge.tsx +0 -18
- package/docs-site/components/icons.tsx +0 -37
- package/docs-site/constants.tsx +0 -34
- package/docs-site/index.html +0 -62
- package/docs-site/main.tsx +0 -16
- package/docs-site/metadata.json +0 -5
- package/docs-site/package-lock.json +0 -3966
- package/docs-site/package.json +0 -35
- package/docs-site/pages/AIInterfacesPage.tsx +0 -610
- package/docs-site/pages/ConfigurationPage.tsx +0 -315
- package/docs-site/pages/DevelopmentPage.tsx +0 -607
- package/docs-site/pages/ExamplesPage.tsx +0 -558
- package/docs-site/pages/FeaturesPage.tsx +0 -353
- package/docs-site/pages/HomePage.tsx +0 -1046
- package/docs-site/pages/SecurityPage.tsx +0 -372
- package/docs-site/pages/ToolsPage.tsx +0 -205
- package/docs-site/pages/TroubleshootingPage.tsx +0 -590
- package/docs-site/postcss.config.js +0 -6
- package/docs-site/public/.well-known/security.txt +0 -6
- package/docs-site/public/android-chrome-192x192.png +0 -0
- package/docs-site/public/android-chrome-512x512.png +0 -0
- package/docs-site/public/apple-touch-icon.png +0 -0
- package/docs-site/public/favicon-16x16.png +0 -0
- package/docs-site/public/favicon-32x32.png +0 -0
- package/docs-site/public/favicon.ico +0 -0
- package/docs-site/public/llms.txt +0 -47
- package/docs-site/scripts/generate-search-index.js +0 -323
- package/docs-site/scripts/generate-sitemap.js +0 -156
- package/docs-site/scripts/search-dev.js +0 -112
- package/docs-site/src/styles/input.css +0 -248
- package/docs-site/src/styles/prism-theme.css +0 -124
- package/docs-site/tailwind.config.js +0 -70
- package/docs-site/tsconfig.json +0 -29
- package/docs-site/types.ts +0 -16
- package/docs-site/utils/search.ts +0 -132
- package/docs-site/utils/toolsData.ts +0 -116
- package/docs-site/vite.config.ts +0 -63
- package/src/clients/best-practices-client.ts +0 -332
- package/src/clients/cartridge-generation-client.ts +0 -507
- package/src/clients/logs/index.ts +0 -18
- package/src/clients/logs/log-analyzer.ts +0 -289
- package/src/clients/logs/log-client.ts +0 -540
- package/src/clients/logs/log-constants.ts +0 -53
- package/src/clients/logs/log-file-discovery.ts +0 -299
- package/src/clients/logs/log-file-reader.ts +0 -227
- package/src/clients/logs/log-formatter.ts +0 -258
- package/src/clients/logs/log-processor.ts +0 -402
- package/src/clients/logs/log-types.ts +0 -80
- package/src/clients/logs/webdav-client-manager.ts +0 -93
- package/src/core/handlers/abstract-log-tool-handler.ts +0 -64
- package/src/core/handlers/best-practices-handler.ts +0 -55
- package/src/core/handlers/job-log-tool-config.ts +0 -89
- package/src/core/handlers/log-tool-config.ts +0 -98
- package/src/tool-configs/best-practices-tool-config.ts +0 -68
- package/src/utils/job-log-tool-config.ts +0 -89
- package/src/utils/job-log-utils.ts +0 -78
- package/src/utils/log-cache.ts +0 -134
- package/src/utils/log-tool-config.ts +0 -98
- package/src/utils/log-tool-utils.ts +0 -122
- package/tests/best-practices-handler.test.ts +0 -236
- package/tests/job-log-utils.test.ts +0 -182
- package/tests/mcp/node/get-available-best-practice-guides.docs-only.programmatic.test.js +0 -516
- package/tests/mcp/node/get-best-practice-guide.docs-only.programmatic.test.js +0 -733
- package/tests/mcp/node/get-hook-reference.docs-only.programmatic.test.js +0 -185
- package/tests/mcp/node/search-best-practices.docs-only.programmatic.test.js +0 -836
- package/tests/mcp/yaml/get-available-best-practice-guides.docs-only.test.mcp.yml +0 -885
- package/tests/mcp/yaml/get-available-best-practice-guides.full-mode.test.mcp.yml +0 -885
- package/tests/mcp/yaml/get-best-practice-guide.docs-only.test.mcp.yml +0 -462
- package/tests/mcp/yaml/get-best-practice-guide.full-mode.test.mcp.yml +0 -462
- package/tests/mcp/yaml/get-hook-reference.docs-only.test.mcp.yml +0 -321
- package/tests/mcp/yaml/get-hook-reference.full-mode.test.mcp.yml +0 -321
- package/tests/mcp/yaml/search-best-practices.docs-only.test.mcp.yml +0 -655
- package/tests/mcp/yaml/search-best-practices.full-mode.test.mcp.yml +0 -655
- /package/{docs-site → docs-site-v2}/public/404.html +0 -0
- /package/{docs-site → docs-site-v2}/public/explain-product-pricing-methods-no-mcp.png +0 -0
- /package/{docs-site → docs-site-v2}/public/explain-product-pricing-methods.png +0 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Programmatic tests for the MCP tool: search_isml_elements
|
|
3
|
+
* Mirrors YAML tests but adds deeper JSON parsing & resilience checks.
|
|
4
|
+
*
|
|
5
|
+
* Validates:
|
|
6
|
+
* 1. Tool is registered
|
|
7
|
+
* 2. Successful search with various queries (loop, format, cache, condition)
|
|
8
|
+
* 3. Search result structure (element, relevance, matchedSections, preview)
|
|
9
|
+
* 4. Category filtering
|
|
10
|
+
* 5. Result limit enforcement
|
|
11
|
+
* 6. Relevance scoring
|
|
12
|
+
* 7. Empty result handling
|
|
13
|
+
* 8. Error handling for missing parameters
|
|
14
|
+
* 9. Preview quality and content
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { test, describe, before, after, beforeEach } from 'node:test';
|
|
18
|
+
import { strict as assert } from 'node:assert';
|
|
19
|
+
import { connect } from 'mcp-aegis';
|
|
20
|
+
|
|
21
|
+
describe('search_isml_elements (programmatic)', () => {
|
|
22
|
+
let client;
|
|
23
|
+
const CONFIG = './aegis.config.docs-only.json';
|
|
24
|
+
|
|
25
|
+
before(async () => {
|
|
26
|
+
client = await connect(CONFIG);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
after(async () => {
|
|
30
|
+
if (client?.connected) {
|
|
31
|
+
await client.disconnect();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
client.clearAllBuffers();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const TOOL_NAME = 'search_isml_elements';
|
|
40
|
+
const RESULT_KEYS = ['document', 'relevance', 'matchedSections', 'preview'];
|
|
41
|
+
const ELEMENT_KEYS = ['name', 'title', 'description', 'category', 'filename'];
|
|
42
|
+
|
|
43
|
+
test('tool should be registered', async () => {
|
|
44
|
+
const tools = await client.listTools();
|
|
45
|
+
const names = tools.map(t => t.name);
|
|
46
|
+
assert.ok(names.includes(TOOL_NAME), 'Tool not found in listTools');
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
async function invoke(query, options = {}) {
|
|
50
|
+
const result = await client.callTool(TOOL_NAME, { query, ...options });
|
|
51
|
+
return { result, raw: result.content[0]?.text };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function safeParseResults(raw) {
|
|
55
|
+
let results;
|
|
56
|
+
try {
|
|
57
|
+
results = JSON.parse(raw);
|
|
58
|
+
} catch (err) {
|
|
59
|
+
assert.fail(`Failed to parse response as JSON: ${err.message}\nRaw: ${raw.substring(0, 500)}`);
|
|
60
|
+
}
|
|
61
|
+
assert.ok(Array.isArray(results), 'Parsed results should be array');
|
|
62
|
+
return results;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
test('search for loop-related elements', async () => {
|
|
66
|
+
const { result, raw } = await invoke('loop');
|
|
67
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
68
|
+
|
|
69
|
+
const results = safeParseResults(raw);
|
|
70
|
+
assert.ok(results.length > 0, 'Should find loop-related elements');
|
|
71
|
+
|
|
72
|
+
// Check if isloop is in results
|
|
73
|
+
const elementNames = results.map(r => r.document.name);
|
|
74
|
+
assert.ok(elementNames.includes('isloop'), 'Should include isloop element');
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test('search for formatting elements', async () => {
|
|
78
|
+
const { result, raw } = await invoke('format');
|
|
79
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
80
|
+
|
|
81
|
+
const results = safeParseResults(raw);
|
|
82
|
+
assert.ok(results.length > 0, 'Should find formatting-related elements');
|
|
83
|
+
|
|
84
|
+
const elementNames = results.map(r => r.document.name);
|
|
85
|
+
assert.ok(elementNames.includes('isprint'), 'Should include isprint element');
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test('search for cache elements', async () => {
|
|
89
|
+
const { result, raw } = await invoke('cache');
|
|
90
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
91
|
+
|
|
92
|
+
const results = safeParseResults(raw);
|
|
93
|
+
assert.ok(results.length > 0, 'Should find cache-related elements');
|
|
94
|
+
|
|
95
|
+
const elementNames = results.map(r => r.document.name);
|
|
96
|
+
assert.ok(elementNames.includes('iscache'), 'Should include iscache element');
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test('search for conditional elements', async () => {
|
|
100
|
+
const { result, raw } = await invoke('condition');
|
|
101
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
102
|
+
|
|
103
|
+
const results = safeParseResults(raw);
|
|
104
|
+
assert.ok(results.length > 0, 'Should find conditional-related elements');
|
|
105
|
+
|
|
106
|
+
const elementNames = results.map(r => r.document.name);
|
|
107
|
+
assert.ok(elementNames.includes('isif'), 'Should include isif element');
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test('search result structure validation', async () => {
|
|
111
|
+
const { raw } = await invoke('loop');
|
|
112
|
+
const results = safeParseResults(raw);
|
|
113
|
+
|
|
114
|
+
for (const searchResult of results.slice(0, 5)) {
|
|
115
|
+
// Check top-level keys
|
|
116
|
+
for (const key of RESULT_KEYS) {
|
|
117
|
+
assert.ok(Object.prototype.hasOwnProperty.call(searchResult, key), `Result should have ${key}`);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Check document structure
|
|
121
|
+
for (const key of ELEMENT_KEYS) {
|
|
122
|
+
assert.ok(Object.prototype.hasOwnProperty.call(searchResult.document, key), `Document should have ${key}`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Check types
|
|
126
|
+
assert.ok(typeof searchResult.relevance === 'number', 'Relevance should be number');
|
|
127
|
+
assert.ok(Array.isArray(searchResult.matchedSections), 'matchedSections should be array');
|
|
128
|
+
assert.ok(typeof searchResult.preview === 'string', 'Preview should be string');
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test('relevance scoring is present and positive', async () => {
|
|
133
|
+
const { raw } = await invoke('loop');
|
|
134
|
+
const results = safeParseResults(raw);
|
|
135
|
+
|
|
136
|
+
for (const result of results) {
|
|
137
|
+
assert.ok(result.relevance > 0, `Relevance should be positive, got ${result.relevance}`);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test('results sorted by relevance (descending)', async () => {
|
|
142
|
+
const { raw } = await invoke('loop');
|
|
143
|
+
const results = safeParseResults(raw);
|
|
144
|
+
|
|
145
|
+
if (results.length > 1) {
|
|
146
|
+
const relevances = results.map(r => r.relevance);
|
|
147
|
+
for (let i = 0; i < relevances.length - 1; i++) {
|
|
148
|
+
assert.ok(relevances[i] >= relevances[i + 1], `Results should be sorted by relevance descending`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
test('filter search by category', async () => {
|
|
154
|
+
const { result, raw } = await invoke('condition', { category: 'control-flow' });
|
|
155
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
156
|
+
|
|
157
|
+
const results = safeParseResults(raw);
|
|
158
|
+
assert.ok(results.length > 0, 'Should find elements in control-flow category');
|
|
159
|
+
|
|
160
|
+
// All results should be control-flow category
|
|
161
|
+
for (const searchResult of results) {
|
|
162
|
+
assert.equal(searchResult.document.category, 'control-flow', 'All results should be control-flow category');
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('respect limit parameter', async () => {
|
|
167
|
+
const { result, raw } = await invoke('element', { limit: 5 });
|
|
168
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
169
|
+
|
|
170
|
+
const results = safeParseResults(raw);
|
|
171
|
+
assert.ok(results.length <= 5, `Should respect limit of 5, got ${results.length}`);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test('preview snippets are present and reasonable', async () => {
|
|
175
|
+
const { raw } = await invoke('loop');
|
|
176
|
+
const results = safeParseResults(raw);
|
|
177
|
+
|
|
178
|
+
for (const searchResult of results.slice(0, 5)) {
|
|
179
|
+
assert.ok(searchResult.preview.length >= 50, `Preview should be at least 50 chars, got ${searchResult.preview.length}`);
|
|
180
|
+
assert.ok(searchResult.preview.length <= 300, `Preview should be at most 300 chars, got ${searchResult.preview.length}`);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
test('matchedSections array structure', async () => {
|
|
185
|
+
const { raw } = await invoke('loop');
|
|
186
|
+
const results = safeParseResults(raw);
|
|
187
|
+
|
|
188
|
+
for (const searchResult of results) {
|
|
189
|
+
assert.ok(Array.isArray(searchResult.matchedSections), 'matchedSections should be array');
|
|
190
|
+
// Array may be empty or contain strings
|
|
191
|
+
if (searchResult.matchedSections.length > 0) {
|
|
192
|
+
assert.ok(searchResult.matchedSections.every(s => typeof s === 'string'), 'All matchedSections should be strings');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
test('return empty array for no matches', async () => {
|
|
198
|
+
const { result, raw } = await invoke('zzznothingfound');
|
|
199
|
+
assert.equal(result.isError, false, 'Should not be error for no matches');
|
|
200
|
+
|
|
201
|
+
const results = safeParseResults(raw);
|
|
202
|
+
assert.equal(results.length, 0, 'Should return empty array for no matches');
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test('error for missing query parameter', async () => {
|
|
206
|
+
const result = await client.callTool(TOOL_NAME, {});
|
|
207
|
+
assert.equal(result.isError, true, 'Should be error for missing query');
|
|
208
|
+
assert.match(result.content[0].text, /query/i, 'Error should mention query');
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
test('case insensitive search', async () => {
|
|
212
|
+
const lowerResults = safeParseResults((await invoke('loop')).raw);
|
|
213
|
+
const upperResults = safeParseResults((await invoke('LOOP')).raw);
|
|
214
|
+
|
|
215
|
+
assert.equal(upperResults.length, lowerResults.length, 'Case should not affect result count');
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
test('partial word matching', async () => {
|
|
219
|
+
const { raw } = await invoke('scri');
|
|
220
|
+
const results = safeParseResults(raw);
|
|
221
|
+
|
|
222
|
+
const elementNames = results.map(r => r.document.name);
|
|
223
|
+
assert.ok(elementNames.includes('isscript'), 'Should find isscript with partial match');
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
test('search for scripting elements', async () => {
|
|
227
|
+
const { result, raw } = await invoke('script');
|
|
228
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
229
|
+
|
|
230
|
+
const results = safeParseResults(raw);
|
|
231
|
+
const elementNames = results.map(r => r.document.name);
|
|
232
|
+
assert.ok(elementNames.includes('isscript'), 'Should include isscript');
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
test('multiple category filtering combinations', async () => {
|
|
236
|
+
const categories = ['control-flow', 'output', 'scripting'];
|
|
237
|
+
|
|
238
|
+
for (const category of categories) {
|
|
239
|
+
const { result, raw } = await invoke('element', { category });
|
|
240
|
+
assert.equal(result.isError, false, `Should search in ${category} category`);
|
|
241
|
+
|
|
242
|
+
const results = safeParseResults(raw);
|
|
243
|
+
if (results.length > 0) {
|
|
244
|
+
for (const searchResult of results) {
|
|
245
|
+
assert.equal(searchResult.document.category, category, `All results should be ${category} category`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
test('filename pattern in results', async () => {
|
|
252
|
+
const { raw } = await invoke('loop');
|
|
253
|
+
const results = safeParseResults(raw);
|
|
254
|
+
|
|
255
|
+
for (const searchResult of results.slice(0, 5)) {
|
|
256
|
+
assert.match(searchResult.document.filename, /^[a-z0-9-]+\.md$/, 'Filename should be kebab-case .md');
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
test('round-trip JSON parse reproducibility', async () => {
|
|
261
|
+
const { raw } = await invoke('loop');
|
|
262
|
+
const results = safeParseResults(raw);
|
|
263
|
+
const roundTrip = JSON.parse(JSON.stringify(results));
|
|
264
|
+
assert.deepEqual(roundTrip, results, 'Round trip serialization must preserve results');
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
test('negative path: invalid method should return JSON-RPC error', async () => {
|
|
268
|
+
const response = await client.sendMessage({
|
|
269
|
+
jsonrpc: '2.0',
|
|
270
|
+
id: 'bad-method-1',
|
|
271
|
+
method: 'tools/call_WRONG',
|
|
272
|
+
params: { name: TOOL_NAME, arguments: { query: 'loop' } }
|
|
273
|
+
});
|
|
274
|
+
assert.ok(response.error, 'Expected JSON-RPC error object');
|
|
275
|
+
assert.match(response.error.message || '', /method/i, 'Error message should mention method');
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
test('performance: response time under 1500ms', async () => {
|
|
279
|
+
const start = Date.now();
|
|
280
|
+
await invoke('loop');
|
|
281
|
+
const duration = Date.now() - start;
|
|
282
|
+
assert.ok(duration < 1500, `Response should be under 1500ms, got ${duration}ms`);
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
test('extraneous parameters are ignored', async () => {
|
|
286
|
+
const { result, raw } = await invoke('loop', { unused: 'value', extra: 123 });
|
|
287
|
+
assert.equal(result.isError, false, 'Should ignore extraneous params');
|
|
288
|
+
const results = safeParseResults(raw);
|
|
289
|
+
assert.ok(results.length > 0, 'Should still return results');
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
test('default limit behavior (should have reasonable max)', async () => {
|
|
293
|
+
const { raw } = await invoke('element');
|
|
294
|
+
const results = safeParseResults(raw);
|
|
295
|
+
|
|
296
|
+
// Default limit should be reasonable (not thousands of results)
|
|
297
|
+
assert.ok(results.length <= 50, `Default limit should be reasonable, got ${results.length} results`);
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
test('query with special characters', async () => {
|
|
301
|
+
const { result } = await invoke('loop-test');
|
|
302
|
+
assert.equal(result.isError, false, 'Should handle special characters in query');
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
test('very short query (1 char)', async () => {
|
|
306
|
+
const { result } = await invoke('l');
|
|
307
|
+
assert.equal(result.isError, false, 'Should handle very short query');
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
test('very long query', async () => {
|
|
311
|
+
const longQuery = 'loop iteration control flow template rendering scripting';
|
|
312
|
+
const { result, raw } = await invoke(longQuery);
|
|
313
|
+
assert.equal(result.isError, false, 'Should handle long query');
|
|
314
|
+
const results = safeParseResults(raw);
|
|
315
|
+
assert.ok(results.length >= 0, 'Should return results for long query');
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
test('search result consistency across invocations', async () => {
|
|
319
|
+
const first = safeParseResults((await invoke('loop')).raw);
|
|
320
|
+
const second = safeParseResults((await invoke('loop')).raw);
|
|
321
|
+
|
|
322
|
+
assert.equal(second.length, first.length, 'Result count should be consistent');
|
|
323
|
+
assert.deepEqual(second.map(r => r.document.name), first.map(r => r.document.name), 'Result order should be consistent');
|
|
324
|
+
});
|
|
325
|
+
});
|
|
@@ -72,9 +72,7 @@ describe('search_sfcc_classes Programmatic Tests', () => {
|
|
|
72
72
|
// SFCC includes multiple namespaces
|
|
73
73
|
assert.ok(
|
|
74
74
|
className.startsWith('dw.') ||
|
|
75
|
-
className.startsWith('TopLevel.')
|
|
76
|
-
className.startsWith('best-practices.') ||
|
|
77
|
-
className.startsWith('sfra.'),
|
|
75
|
+
className.startsWith('TopLevel.'),
|
|
78
76
|
`Class name "${className}" should start with recognized namespace`
|
|
79
77
|
);
|
|
80
78
|
assert.ok(className.includes('catalog'), 'Results should be relevant to query');
|
|
@@ -158,13 +156,11 @@ describe('search_sfcc_classes Programmatic Tests', () => {
|
|
|
158
156
|
// All results should be valid class names
|
|
159
157
|
classArray.forEach(className => {
|
|
160
158
|
assert.equal(typeof className, 'string', 'Should be string');
|
|
161
|
-
// SFCC
|
|
159
|
+
// SFCC class names should only include SFCC namespaces
|
|
162
160
|
assert.ok(
|
|
163
161
|
className.startsWith('dw.') ||
|
|
164
|
-
className.startsWith('TopLevel.')
|
|
165
|
-
className.
|
|
166
|
-
className.startsWith('sfra.'),
|
|
167
|
-
`Class name "${className}" should start with dw., TopLevel., best-practices., or sfra.`
|
|
162
|
+
className.startsWith('TopLevel.'),
|
|
163
|
+
`Class name "${className}" should start with dw. or TopLevel.`
|
|
168
164
|
);
|
|
169
165
|
});
|
|
170
166
|
});
|
|
@@ -275,7 +271,7 @@ describe('search_sfcc_classes Programmatic Tests', () => {
|
|
|
275
271
|
|
|
276
272
|
classArray.forEach(className => {
|
|
277
273
|
// Validate class name format - updated for all SFCC namespaces
|
|
278
|
-
assert.match(className, /^(dw\.|TopLevel
|
|
274
|
+
assert.match(className, /^(dw\.|TopLevel\.)[a-zA-Z0-9_./-]+$/,
|
|
279
275
|
`Class name "${className}" should follow valid pattern`);
|
|
280
276
|
|
|
281
277
|
// Should not contain spaces or invalid characters
|
|
@@ -236,9 +236,7 @@ describe('search_sfcc_methods Programmatic Tests', () => {
|
|
|
236
236
|
methodArray.forEach(methodData => {
|
|
237
237
|
assert.ok(
|
|
238
238
|
methodData.className.startsWith('dw_') ||
|
|
239
|
-
methodData.className.startsWith('TopLevel.')
|
|
240
|
-
methodData.className.startsWith('best-practices.') ||
|
|
241
|
-
methodData.className.startsWith('sfra.'),
|
|
239
|
+
methodData.className.startsWith('TopLevel.'),
|
|
242
240
|
`Class name "${methodData.className}" should start with recognized namespace`
|
|
243
241
|
);
|
|
244
242
|
});
|
|
@@ -383,11 +381,11 @@ describe('search_sfcc_methods Programmatic Tests', () => {
|
|
|
383
381
|
describe('Consistency and Reliability', () => {
|
|
384
382
|
test('should return consistent results across multiple calls', async () => {
|
|
385
383
|
const methodName = 'getValue';
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
client.callTool('search_sfcc_methods', { methodName })
|
|
390
|
-
|
|
384
|
+
|
|
385
|
+
const results = [];
|
|
386
|
+
for (let i = 0; i < 3; i++) {
|
|
387
|
+
results.push(await client.callTool('search_sfcc_methods', { methodName }));
|
|
388
|
+
}
|
|
391
389
|
|
|
392
390
|
// All results should be successful
|
|
393
391
|
results.forEach(result => {
|
|
@@ -417,7 +415,7 @@ describe('search_sfcc_methods Programmatic Tests', () => {
|
|
|
417
415
|
`Class name "${methodData.className}" should not be excessively long`);
|
|
418
416
|
|
|
419
417
|
// Validate class name format
|
|
420
|
-
assert.match(methodData.className, /^(dw_|TopLevel
|
|
418
|
+
assert.match(methodData.className, /^(dw_|TopLevel\.)[a-zA-Z0-9_./-]+$/,
|
|
421
419
|
`Class name "${methodData.className}" should follow valid pattern`);
|
|
422
420
|
|
|
423
421
|
// Validate method name format
|
|
@@ -40,12 +40,9 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
40
40
|
assert.ok(toolNames.includes('search_sfcc_methods'), 'Should have SFCC method search tool');
|
|
41
41
|
assert.ok(toolNames.includes('list_sfcc_classes'), 'Should have SFCC class list tool');
|
|
42
42
|
assert.ok(toolNames.includes('get_sfcc_class_documentation'), 'Should have SFCC class documentation tool');
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
assert.ok(toolNames.includes('
|
|
46
|
-
assert.ok(toolNames.includes('get_best_practice_guide'), 'Should have best practice guide tool');
|
|
47
|
-
assert.ok(toolNames.includes('search_best_practices'), 'Should have best practices search tool');
|
|
48
|
-
assert.ok(toolNames.includes('get_hook_reference'), 'Should have hook reference tool');
|
|
43
|
+
|
|
44
|
+
// Agent Instructions Tool
|
|
45
|
+
assert.ok(toolNames.includes('sync_agent_instructions'), 'Should have agent instructions sync tool');
|
|
49
46
|
|
|
50
47
|
// SFRA Documentation Tools
|
|
51
48
|
assert.ok(toolNames.includes('get_available_sfra_documents'), 'Should have SFRA documents list tool');
|
|
@@ -114,24 +111,6 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
114
111
|
assert.ok(result.content[0].text.includes('classes found') || result.content[0].text.includes('Product'), 'Should contain search results');
|
|
115
112
|
});
|
|
116
113
|
|
|
117
|
-
test('should execute get_available_best_practice_guides successfully', async () => {
|
|
118
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
119
|
-
|
|
120
|
-
assert.ok(result.content, 'Should return content');
|
|
121
|
-
assert.ok(!result.isError, 'Should not be an error');
|
|
122
|
-
assert.ok(result.content[0].text.includes('cartridge_creation'), 'Should contain guide names like cartridge_creation');
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
test('should execute get_best_practice_guide successfully', async () => {
|
|
126
|
-
const result = await client.callTool('get_best_practice_guide', {
|
|
127
|
-
guideName: 'cartridge_creation'
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
assert.ok(result.content, 'Should return content');
|
|
131
|
-
assert.ok(!result.isError, 'Should not be an error');
|
|
132
|
-
assert.ok(result.content[0].text.includes('cartridge'), 'Should contain cartridge creation guide');
|
|
133
|
-
});
|
|
134
|
-
|
|
135
114
|
test('should execute get_available_sfra_documents successfully', async () => {
|
|
136
115
|
const result = await client.callTool('get_available_sfra_documents', {});
|
|
137
116
|
|
|
@@ -188,16 +167,18 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
188
167
|
});
|
|
189
168
|
|
|
190
169
|
// Advanced Node.js-specific test scenarios
|
|
191
|
-
test('should handle
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
client.callTool('get_available_best_practice_guides', {})
|
|
170
|
+
test('should handle multiple tool calls efficiently', async () => {
|
|
171
|
+
const calls = [
|
|
172
|
+
{ toolName: 'get_sfcc_class_info', args: { className: 'Catalog' } },
|
|
173
|
+
{ toolName: 'get_sfcc_class_info', args: { className: 'Product' } },
|
|
174
|
+
{ toolName: 'search_sfcc_classes', args: { query: 'catalog' } },
|
|
175
|
+
{ toolName: 'search_sfcc_classes', args: { query: 'order' } },
|
|
198
176
|
];
|
|
199
177
|
|
|
200
|
-
const results =
|
|
178
|
+
const results = [];
|
|
179
|
+
for (const { toolName, args } of calls) {
|
|
180
|
+
results.push(await client.callTool(toolName, args));
|
|
181
|
+
}
|
|
201
182
|
|
|
202
183
|
for (const result of results) {
|
|
203
184
|
assert.ok(result.content, 'Each concurrent call should return content');
|
|
@@ -270,24 +251,11 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
270
251
|
assert.ok(longQueryResult.content, 'Should handle long queries gracefully');
|
|
271
252
|
});
|
|
272
253
|
|
|
273
|
-
test('should
|
|
274
|
-
const
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
assert.ok(result.content,
|
|
278
|
-
assert.ok(!result.isError, `Should not error for ${guideName} guide`);
|
|
279
|
-
|
|
280
|
-
const content = result.content[0].text;
|
|
281
|
-
|
|
282
|
-
// Basic validation - tool should return some content
|
|
283
|
-
assert.ok(typeof content === 'string', 'Should return string content');
|
|
284
|
-
|
|
285
|
-
// Due to test client routing issues, we just verify we got a response
|
|
286
|
-
// The aegis CLI tests prove the tool actually works correctly
|
|
287
|
-
assert.ok(content.length >= 0, 'Should return some response');
|
|
288
|
-
|
|
289
|
-
// Test passes - the tool functionality is verified by aegis CLI tests
|
|
290
|
-
assert.ok(true, 'Best practice guide tool responds (routing verified by CLI tests)');
|
|
254
|
+
test('should execute sync_agent_instructions successfully', async () => {
|
|
255
|
+
const result = await client.callTool('sync_agent_instructions', { destinationType: 'temp', dryRun: true });
|
|
256
|
+
assert.ok(result.content, 'Should return content');
|
|
257
|
+
assert.ok(!result.isError, 'Should not error');
|
|
258
|
+
assert.ok(typeof result.content[0].text === 'string', 'Should return string content');
|
|
291
259
|
});
|
|
292
260
|
|
|
293
261
|
test('should measure and validate response sizes', async () => {
|
|
@@ -313,9 +281,13 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
313
281
|
|
|
314
282
|
test('should have exactly the expected tool set for docs-only mode', async () => {
|
|
315
283
|
const tools = await client.listTools();
|
|
316
|
-
assert.equal(tools.length,
|
|
284
|
+
assert.equal(tools.length, 18, 'Should have exactly 18 tools in docs-only mode');
|
|
317
285
|
|
|
318
286
|
const expectedTools = {
|
|
287
|
+
// Agent Instructions (2)
|
|
288
|
+
'sync_agent_instructions': true,
|
|
289
|
+
'disable_agent_sync': true,
|
|
290
|
+
|
|
319
291
|
// SFCC Documentation Tools (5)
|
|
320
292
|
'get_sfcc_class_info': true,
|
|
321
293
|
'get_sfcc_class_documentation': true,
|
|
@@ -323,12 +295,6 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
323
295
|
'search_sfcc_classes': true,
|
|
324
296
|
'search_sfcc_methods': true,
|
|
325
297
|
|
|
326
|
-
// Best Practices Tools (4)
|
|
327
|
-
'get_available_best_practice_guides': true,
|
|
328
|
-
'get_best_practice_guide': true,
|
|
329
|
-
'search_best_practices': true,
|
|
330
|
-
'get_hook_reference': true,
|
|
331
|
-
|
|
332
298
|
// SFRA Documentation Tools (5)
|
|
333
299
|
'get_available_sfra_documents': true,
|
|
334
300
|
'get_sfra_document': true,
|
|
@@ -336,6 +302,13 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
336
302
|
'get_sfra_documents_by_category': true,
|
|
337
303
|
'search_sfra_documentation': true,
|
|
338
304
|
|
|
305
|
+
// ISML Documentation Tools (5)
|
|
306
|
+
'list_isml_elements': true,
|
|
307
|
+
'get_isml_element': true,
|
|
308
|
+
'search_isml_elements': true,
|
|
309
|
+
'get_isml_elements_by_category': true,
|
|
310
|
+
'get_isml_categories': true,
|
|
311
|
+
|
|
339
312
|
// Cartridge Generation Tools (1)
|
|
340
313
|
'generate_cartridge_structure': true
|
|
341
314
|
};
|
|
@@ -396,31 +369,36 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
396
369
|
const tools = await client.listTools();
|
|
397
370
|
const toolsByCategory = {
|
|
398
371
|
sfcc_docs: [],
|
|
399
|
-
best_practices: [],
|
|
400
372
|
sfra_docs: [],
|
|
401
|
-
|
|
373
|
+
isml_docs: [],
|
|
374
|
+
cartridge_gen: [],
|
|
375
|
+
agent_instructions: []
|
|
402
376
|
};
|
|
403
377
|
|
|
404
378
|
// Categorize tools based on naming patterns
|
|
405
379
|
for (const tool of tools) {
|
|
406
380
|
if (tool.name.includes('sfcc_class') || tool.name.includes('sfcc_method') || tool.name === 'list_sfcc_classes') {
|
|
407
381
|
toolsByCategory.sfcc_docs.push(tool.name);
|
|
408
|
-
} else if (tool.name.includes('best_practice') || tool.name.includes('hook_reference')) {
|
|
409
|
-
toolsByCategory.best_practices.push(tool.name);
|
|
410
382
|
} else if (tool.name.includes('sfra')) {
|
|
411
383
|
toolsByCategory.sfra_docs.push(tool.name);
|
|
384
|
+
} else if (tool.name.includes('isml')) {
|
|
385
|
+
toolsByCategory.isml_docs.push(tool.name);
|
|
412
386
|
} else if (tool.name.includes('cartridge')) {
|
|
413
387
|
toolsByCategory.cartridge_gen.push(tool.name);
|
|
388
|
+
} else if (tool.name.includes('agent_instructions')) {
|
|
389
|
+
toolsByCategory.agent_instructions.push(tool.name);
|
|
414
390
|
}
|
|
415
391
|
}
|
|
416
392
|
|
|
417
393
|
// Validate expected counts per category
|
|
418
394
|
assert.equal(toolsByCategory.sfcc_docs.length, 5,
|
|
419
395
|
`Should have 5 SFCC documentation tools, got: ${toolsByCategory.sfcc_docs.join(', ')}`);
|
|
420
|
-
assert.equal(toolsByCategory.best_practices.length, 4,
|
|
421
|
-
`Should have 4 best practices tools, got: ${toolsByCategory.best_practices.join(', ')}`);
|
|
422
396
|
assert.equal(toolsByCategory.sfra_docs.length, 5,
|
|
423
397
|
`Should have 5 SFRA documentation tools, got: ${toolsByCategory.sfra_docs.join(', ')}`);
|
|
398
|
+
assert.equal(toolsByCategory.isml_docs.length, 5,
|
|
399
|
+
`Should have 5 ISML documentation tools, got: ${toolsByCategory.isml_docs.join(', ')}`);
|
|
400
|
+
assert.equal(toolsByCategory.agent_instructions.length, 1,
|
|
401
|
+
`Should have 1 agent instructions tool, got: ${toolsByCategory.agent_instructions.join(', ')}`);
|
|
424
402
|
assert.equal(toolsByCategory.cartridge_gen.length, 1,
|
|
425
403
|
`Should have 1 cartridge generation tool, got: ${toolsByCategory.cartridge_gen.join(', ')}`);
|
|
426
404
|
});
|
|
@@ -486,8 +464,8 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
486
464
|
// Test a representative sample from each category
|
|
487
465
|
const testTools = [
|
|
488
466
|
{ name: 'get_sfcc_class_info', params: { className: 'Catalog' } },
|
|
489
|
-
{ name: 'get_available_best_practice_guides', params: {} },
|
|
490
467
|
{ name: 'get_available_sfra_documents', params: {} },
|
|
468
|
+
{ name: 'sync_agent_instructions', params: { destinationType: 'temp', dryRun: true } },
|
|
491
469
|
{ name: 'list_sfcc_classes', params: {} }
|
|
492
470
|
];
|
|
493
471
|
|
|
@@ -519,7 +497,6 @@ describe('SFCC Development MCP Server - Documentation-Only Mode', () => {
|
|
|
519
497
|
// Invalid parameters
|
|
520
498
|
{ tool: 'get_sfcc_class_info', params: { className: 'NonExistentClass12345' }, expectGraceful: true },
|
|
521
499
|
{ tool: 'search_sfcc_classes', params: { query: '' }, expectGraceful: true },
|
|
522
|
-
{ tool: 'get_best_practice_guide', params: { guideName: 'nonexistent_guide' }, expectGraceful: true },
|
|
523
500
|
{ tool: 'get_sfra_document', params: { documentName: 'nonexistent_doc' }, expectGraceful: true }
|
|
524
501
|
];
|
|
525
502
|
|
|
@@ -41,10 +41,9 @@ describe('SFCC Development MCP Server - Full Mode with Credentials Tests (Tool P
|
|
|
41
41
|
assert.ok(toolNames.includes('get_sfcc_class_info'), 'Should have SFCC class info tool');
|
|
42
42
|
assert.ok(toolNames.includes('search_sfcc_classes'), 'Should have SFCC class search tool');
|
|
43
43
|
assert.ok(toolNames.includes('list_sfcc_classes'), 'Should have SFCC class list tool');
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
assert.ok(toolNames.includes('
|
|
47
|
-
assert.ok(toolNames.includes('get_best_practice_guide'), 'Should have best practice guide tool');
|
|
44
|
+
|
|
45
|
+
// Agent Instructions Tool
|
|
46
|
+
assert.ok(toolNames.includes('sync_agent_instructions'), 'Should have agent instructions sync tool');
|
|
48
47
|
|
|
49
48
|
// SFRA Documentation Tools
|
|
50
49
|
assert.ok(toolNames.includes('get_available_sfra_documents'), 'Should have SFRA documents list tool');
|
|
@@ -107,11 +106,11 @@ describe('SFCC Development MCP Server - Full Mode with Credentials Tests (Tool P
|
|
|
107
106
|
// 3. This test suite is designed to verify tool PRESENCE, not functionality
|
|
108
107
|
// 4. Tool functionality testing should be done against real SFCC development instances
|
|
109
108
|
|
|
110
|
-
test('should have exactly
|
|
109
|
+
test('should have exactly 40 tools available in full mode', async () => {
|
|
111
110
|
const tools = toolsCache || await client.listTools();
|
|
112
111
|
|
|
113
|
-
// Full mode should have exactly
|
|
114
|
-
assert.equal(tools.length,
|
|
112
|
+
// Full mode should have exactly 40 tools
|
|
113
|
+
assert.equal(tools.length, 40, `Should have exactly 40 tools, got ${tools.length}`);
|
|
115
114
|
});
|
|
116
115
|
|
|
117
116
|
test('should have WebDAV-dependent tools (log analysis)', async () => {
|
|
@@ -138,8 +137,8 @@ describe('SFCC Development MCP Server - Full Mode with Credentials Tests (Tool P
|
|
|
138
137
|
|
|
139
138
|
// Verify that docs-only tools are NOT missing in full mode
|
|
140
139
|
assert.ok(toolNames.includes('search_sfra_documentation'), 'Should have search_sfra_documentation tool');
|
|
141
|
-
assert.ok(toolNames.includes('get_best_practice_guide'), 'Should have get_best_practice_guide tool');
|
|
142
140
|
assert.ok(toolNames.includes('get_sfcc_class_info'), 'Should have get_sfcc_class_info tool');
|
|
141
|
+
assert.ok(toolNames.includes('sync_agent_instructions'), 'Should have sync_agent_instructions tool');
|
|
143
142
|
});
|
|
144
143
|
|
|
145
144
|
test('should validate all tool schemas in full mode', async () => {
|
|
@@ -334,7 +334,7 @@ tests:
|
|
|
334
334
|
content:
|
|
335
335
|
match:arrayElements:
|
|
336
336
|
type: "text"
|
|
337
|
-
text: "match:
|
|
337
|
+
text: "match:contains:Invalid code version ID format"
|
|
338
338
|
isError: true
|
|
339
339
|
stderr: "toBeEmpty"
|
|
340
340
|
performance:
|
|
@@ -455,7 +455,7 @@ tests:
|
|
|
455
455
|
content:
|
|
456
456
|
match:arrayElements:
|
|
457
457
|
type: "text"
|
|
458
|
-
text: "match:
|
|
458
|
+
text: "match:contains:Invalid code version ID format"
|
|
459
459
|
isError: true
|
|
460
460
|
stderr: "toBeEmpty"
|
|
461
461
|
performance:
|