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
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { JobLogValidators, JobLogFormatters } from '../src/utils/job-log-utils.js';
|
|
2
|
-
|
|
3
|
-
describe('JobLogValidators', () => {
|
|
4
|
-
describe('validateJobLogLevel', () => {
|
|
5
|
-
it('should accept valid log levels', () => {
|
|
6
|
-
const validLevels = ['error', 'warn', 'info', 'debug', 'all'];
|
|
7
|
-
|
|
8
|
-
validLevels.forEach(level => {
|
|
9
|
-
expect(() => JobLogValidators.validateJobLogLevel(level)).not.toThrow();
|
|
10
|
-
});
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('should reject invalid log levels', () => {
|
|
14
|
-
const invalidLevels = ['trace', 'fatal', 'verbose', 'invalid', ''];
|
|
15
|
-
|
|
16
|
-
invalidLevels.forEach(level => {
|
|
17
|
-
expect(() => JobLogValidators.validateJobLogLevel(level))
|
|
18
|
-
.toThrow(`Invalid log level: ${level}. Must be one of: error, warn, info, debug, all`);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should include tool name in error message when provided', () => {
|
|
23
|
-
const toolName = 'test_tool';
|
|
24
|
-
const invalidLevel = 'invalid';
|
|
25
|
-
|
|
26
|
-
expect(() => JobLogValidators.validateJobLogLevel(invalidLevel, toolName))
|
|
27
|
-
.toThrow(`${toolName}: Invalid log level: ${invalidLevel}. Must be one of: error, warn, info, debug, all`);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('should handle null and undefined gracefully', () => {
|
|
31
|
-
expect(() => JobLogValidators.validateJobLogLevel(null as any)).toThrow();
|
|
32
|
-
expect(() => JobLogValidators.validateJobLogLevel(undefined as any)).toThrow();
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('should be case sensitive', () => {
|
|
36
|
-
expect(() => JobLogValidators.validateJobLogLevel('ERROR')).toThrow();
|
|
37
|
-
expect(() => JobLogValidators.validateJobLogLevel('ALL')).toThrow();
|
|
38
|
-
expect(() => JobLogValidators.validateJobLogLevel('Debug')).toThrow();
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
describe('getDefaultLimit', () => {
|
|
43
|
-
it('should return correct default limit for search operations', () => {
|
|
44
|
-
expect(JobLogValidators.getDefaultLimit('search')).toBe(20);
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('should return correct default limit for entries operations', () => {
|
|
48
|
-
expect(JobLogValidators.getDefaultLimit('entries')).toBe(10);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('should return correct default limit for files operations', () => {
|
|
52
|
-
expect(JobLogValidators.getDefaultLimit('files')).toBe(10);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('should return default limit for unknown operations', () => {
|
|
56
|
-
expect(JobLogValidators.getDefaultLimit('unknown' as any)).toBe(10);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
describe('ALLOWED_LEVELS constant', () => {
|
|
61
|
-
it('should contain exactly the expected levels', () => {
|
|
62
|
-
expect(JobLogValidators.ALLOWED_LEVELS).toEqual(['error', 'warn', 'info', 'debug', 'all']);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('should be readonly array', () => {
|
|
66
|
-
const levels = JobLogValidators.ALLOWED_LEVELS;
|
|
67
|
-
expect(levels).toEqual(['error', 'warn', 'info', 'debug', 'all']);
|
|
68
|
-
// Test that it's a readonly array by checking its type/immutability intent
|
|
69
|
-
expect(Array.isArray(levels)).toBe(true);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
describe('JobLogFormatters', () => {
|
|
75
|
-
describe('formatJobLogMessage', () => {
|
|
76
|
-
it('should format message with operation only', () => {
|
|
77
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {});
|
|
78
|
-
expect(result).toBe('Testing operation');
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('should format message with job name', () => {
|
|
82
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
83
|
-
jobName: 'TestJob',
|
|
84
|
-
});
|
|
85
|
-
expect(result).toBe('Testing operation jobName=TestJob');
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it('should format message with level', () => {
|
|
89
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
90
|
-
level: 'error',
|
|
91
|
-
});
|
|
92
|
-
expect(result).toBe('Testing operation level=error');
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('should format message with limit', () => {
|
|
96
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
97
|
-
limit: 50,
|
|
98
|
-
});
|
|
99
|
-
expect(result).toBe('Testing operation limit=50');
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it('should format message with limit of 0', () => {
|
|
103
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
104
|
-
limit: 0,
|
|
105
|
-
});
|
|
106
|
-
expect(result).toBe('Testing operation limit=0');
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('should format message with pattern', () => {
|
|
110
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
111
|
-
pattern: 'error-pattern',
|
|
112
|
-
});
|
|
113
|
-
expect(result).toBe('Testing operation pattern="error-pattern"');
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should format message with pattern containing spaces', () => {
|
|
117
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
118
|
-
pattern: 'error with spaces',
|
|
119
|
-
});
|
|
120
|
-
expect(result).toBe('Testing operation pattern="error with spaces"');
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it('should format message with all parameters', () => {
|
|
124
|
-
const result = JobLogFormatters.formatJobLogMessage('Complex operation', {
|
|
125
|
-
jobName: 'ComplexJob',
|
|
126
|
-
level: 'debug',
|
|
127
|
-
limit: 25,
|
|
128
|
-
pattern: 'search-term',
|
|
129
|
-
});
|
|
130
|
-
expect(result).toBe('Complex operation jobName=ComplexJob level=debug limit=25 pattern="search-term"');
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('should handle empty strings in parameters', () => {
|
|
134
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
135
|
-
jobName: '',
|
|
136
|
-
level: '',
|
|
137
|
-
pattern: '',
|
|
138
|
-
});
|
|
139
|
-
expect(result).toBe('Testing operation');
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it('should handle undefined limit correctly', () => {
|
|
143
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
144
|
-
jobName: 'TestJob',
|
|
145
|
-
limit: undefined,
|
|
146
|
-
});
|
|
147
|
-
expect(result).toBe('Testing operation jobName=TestJob');
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it('should handle special characters in job name', () => {
|
|
151
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
152
|
-
jobName: 'Job-With_Special.Characters',
|
|
153
|
-
});
|
|
154
|
-
expect(result).toBe('Testing operation jobName=Job-With_Special.Characters');
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
it('should handle special characters in pattern', () => {
|
|
158
|
-
const result = JobLogFormatters.formatJobLogMessage('Testing operation', {
|
|
159
|
-
pattern: 'pattern-with_special.chars',
|
|
160
|
-
});
|
|
161
|
-
expect(result).toBe('Testing operation pattern="pattern-with_special.chars"');
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
it('should preserve order of parameters', () => {
|
|
165
|
-
const result = JobLogFormatters.formatJobLogMessage('Operation', {
|
|
166
|
-
pattern: 'last',
|
|
167
|
-
jobName: 'first',
|
|
168
|
-
level: 'second',
|
|
169
|
-
limit: 123,
|
|
170
|
-
});
|
|
171
|
-
// Should maintain the order: jobName, level, limit, pattern
|
|
172
|
-
expect(result).toBe('Operation jobName=first level=second limit=123 pattern="last"');
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
it('should handle empty operation string', () => {
|
|
176
|
-
const result = JobLogFormatters.formatJobLogMessage('', {
|
|
177
|
-
jobName: 'TestJob',
|
|
178
|
-
});
|
|
179
|
-
expect(result).toBe(' jobName=TestJob');
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
});
|
|
@@ -1,516 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Programmatic tests for get_available_best_practice_guides tool
|
|
3
|
-
*
|
|
4
|
-
* These tests provide advanced verification capabilities beyond YAML pattern matching,
|
|
5
|
-
* including dynamic validation, comprehensive content analysis,
|
|
6
|
-
* and advanced error categorization for the SFCC best practice guides functionality.
|
|
7
|
-
*
|
|
8
|
-
* Response format discovered via aegis query:
|
|
9
|
-
* - Success: { content: [{ type: "text", text: "[{\"name\":\"guide_name\",\"title\":\"Guide Title\",\"description\":\"...\"}]" }], isError: false }
|
|
10
|
-
* - Always successful: No isError field or error conditions in docs-only mode
|
|
11
|
-
* - Ignores extra parameters: Gracefully handles unexpected parameters
|
|
12
|
-
* - Comprehensive: Returns 13 best practice guides across SFCC development areas
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { test, describe, before, after, beforeEach } from 'node:test';
|
|
16
|
-
import { strict as assert } from 'node:assert';
|
|
17
|
-
import { connect } from 'mcp-aegis';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Content analysis utility for SFCC best practice guides validation
|
|
21
|
-
*/
|
|
22
|
-
class BestPracticeAnalyzer {
|
|
23
|
-
constructor() {
|
|
24
|
-
// Expected best practice guides based on project structure
|
|
25
|
-
this.expectedGuides = [
|
|
26
|
-
'cartridge_creation',
|
|
27
|
-
'isml_templates',
|
|
28
|
-
'job_framework',
|
|
29
|
-
'localserviceregistry',
|
|
30
|
-
'ocapi_hooks',
|
|
31
|
-
'scapi_hooks',
|
|
32
|
-
'scapi_custom_endpoint',
|
|
33
|
-
'sfra_controllers',
|
|
34
|
-
'sfra_models',
|
|
35
|
-
'sfra_client_side_js',
|
|
36
|
-
'sfra_scss',
|
|
37
|
-
'performance',
|
|
38
|
-
'security'
|
|
39
|
-
];
|
|
40
|
-
|
|
41
|
-
// Critical guides that must be present
|
|
42
|
-
this.criticalGuides = [
|
|
43
|
-
'cartridge_creation',
|
|
44
|
-
'sfra_controllers',
|
|
45
|
-
'ocapi_hooks',
|
|
46
|
-
'scapi_hooks',
|
|
47
|
-
'sfra_client_side_js',
|
|
48
|
-
'sfra_scss',
|
|
49
|
-
'security',
|
|
50
|
-
'performance'
|
|
51
|
-
];
|
|
52
|
-
|
|
53
|
-
// Guide categories for validation
|
|
54
|
-
this.guideCategories = {
|
|
55
|
-
core: ['cartridge_creation', 'isml_templates', 'job_framework'],
|
|
56
|
-
sfra: ['sfra_controllers', 'sfra_models', 'sfra_client_side_js', 'sfra_scss'],
|
|
57
|
-
api_hooks: ['ocapi_hooks', 'scapi_hooks', 'scapi_custom_endpoint'],
|
|
58
|
-
services: ['localserviceregistry'],
|
|
59
|
-
quality: ['performance', 'security']
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
// Required fields for each guide
|
|
63
|
-
this.requiredFields = ['name', 'title', 'description'];
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
analyzeGuideList(guideArray) {
|
|
67
|
-
const analysis = {
|
|
68
|
-
totalGuides: guideArray.length,
|
|
69
|
-
foundGuides: new Set(),
|
|
70
|
-
missingGuides: [],
|
|
71
|
-
missingCriticalGuides: [],
|
|
72
|
-
foundCriticalGuides: [],
|
|
73
|
-
invalidGuides: [],
|
|
74
|
-
duplicates: [],
|
|
75
|
-
guidesByCategory: {},
|
|
76
|
-
validationErrors: []
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
// Initialize category counters
|
|
80
|
-
Object.keys(this.guideCategories).forEach(category => {
|
|
81
|
-
analysis.guidesByCategory[category] = [];
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
// Analyze each guide
|
|
85
|
-
const seenGuides = new Set();
|
|
86
|
-
guideArray.forEach((guide, index) => {
|
|
87
|
-
// Validate guide structure
|
|
88
|
-
const structureErrors = this.validateGuideStructure(guide, index);
|
|
89
|
-
if (structureErrors.length > 0) {
|
|
90
|
-
analysis.validationErrors.push(...structureErrors);
|
|
91
|
-
analysis.invalidGuides.push(guide);
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const guideName = guide.name;
|
|
96
|
-
|
|
97
|
-
// Check for duplicates
|
|
98
|
-
if (seenGuides.has(guideName)) {
|
|
99
|
-
analysis.duplicates.push(guideName);
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
seenGuides.add(guideName);
|
|
103
|
-
analysis.foundGuides.add(guideName);
|
|
104
|
-
|
|
105
|
-
// Check critical guides
|
|
106
|
-
if (this.criticalGuides.includes(guideName)) {
|
|
107
|
-
analysis.foundCriticalGuides.push(guideName);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Categorize guide
|
|
111
|
-
let categorized = false;
|
|
112
|
-
Object.entries(this.guideCategories).forEach(([category, guides]) => {
|
|
113
|
-
if (guides.includes(guideName)) {
|
|
114
|
-
analysis.guidesByCategory[category].push(guideName);
|
|
115
|
-
categorized = true;
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
if (!categorized) {
|
|
120
|
-
if (!analysis.guidesByCategory.other) {
|
|
121
|
-
analysis.guidesByCategory.other = [];
|
|
122
|
-
}
|
|
123
|
-
analysis.guidesByCategory.other.push(guideName);
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
// Find missing guides
|
|
128
|
-
analysis.missingGuides = this.expectedGuides.filter(
|
|
129
|
-
guide => !analysis.foundGuides.has(guide)
|
|
130
|
-
);
|
|
131
|
-
|
|
132
|
-
// Find missing critical guides
|
|
133
|
-
analysis.missingCriticalGuides = this.criticalGuides.filter(
|
|
134
|
-
guide => !analysis.foundCriticalGuides.includes(guide)
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
return analysis;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
validateGuideStructure(guide, index) {
|
|
141
|
-
const errors = [];
|
|
142
|
-
|
|
143
|
-
if (typeof guide !== 'object' || guide === null) {
|
|
144
|
-
errors.push(`Guide at index ${index} is not an object`);
|
|
145
|
-
return errors;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// Check required fields
|
|
149
|
-
this.requiredFields.forEach(field => {
|
|
150
|
-
if (!Object.prototype.hasOwnProperty.call(guide, field)) {
|
|
151
|
-
errors.push(`Guide at index ${index} missing required field: ${field}`);
|
|
152
|
-
} else if (typeof guide[field] !== 'string') {
|
|
153
|
-
errors.push(`Guide at index ${index} field ${field} should be string, got ${typeof guide[field]}`);
|
|
154
|
-
} else if (guide[field].trim().length === 0) {
|
|
155
|
-
errors.push(`Guide at index ${index} field ${field} is empty`);
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
// Validate name format (should be lowercase with underscores)
|
|
160
|
-
if (guide.name && !/^[a-z][a-z0-9_]*$/.test(guide.name)) {
|
|
161
|
-
errors.push(`Guide at index ${index} has invalid name format: ${guide.name}`);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// Validate title format (should contain "Best Practices")
|
|
165
|
-
if (guide.title && !guide.title.includes('Best Practices')) {
|
|
166
|
-
errors.push(`Guide at index ${index} title should contain "Best Practices": ${guide.title}`);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// Validate description length (should be meaningful)
|
|
170
|
-
if (guide.description && guide.description.length < 20) {
|
|
171
|
-
errors.push(`Guide at index ${index} description too short: ${guide.description.length} chars`);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
return errors;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
validateCompleteness(analysis) {
|
|
178
|
-
const issues = [];
|
|
179
|
-
|
|
180
|
-
if (analysis.totalGuides < 13) {
|
|
181
|
-
issues.push(`Guide count too low: ${analysis.totalGuides} (expected 13+)`);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (analysis.missingGuides.length > 0) {
|
|
185
|
-
issues.push(`Missing guides: ${analysis.missingGuides.join(', ')}`);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if (analysis.missingCriticalGuides.length > 0) {
|
|
189
|
-
issues.push(`Missing critical guides: ${analysis.missingCriticalGuides.join(', ')}`);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
if (analysis.duplicates.length > 0) {
|
|
193
|
-
issues.push(`Duplicate guides found: ${analysis.duplicates.length}`);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if (analysis.invalidGuides.length > 0) {
|
|
197
|
-
issues.push(`Invalid guides found: ${analysis.invalidGuides.length}`);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
if (analysis.validationErrors.length > 0) {
|
|
201
|
-
issues.push(`Validation errors: ${analysis.validationErrors.length}`);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return issues;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Helper function to validate MCP response structure
|
|
210
|
-
*/
|
|
211
|
-
function assertValidMCPResponse(result) {
|
|
212
|
-
assert.ok(result.content, 'Response should have content');
|
|
213
|
-
assert.ok(Array.isArray(result.content), 'Content should be array');
|
|
214
|
-
assert.equal(typeof result.isError, 'boolean', 'isError should be boolean');
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
describe('get_available_best_practice_guides Programmatic Tests', () => {
|
|
218
|
-
let client;
|
|
219
|
-
const bestPracticeAnalyzer = new BestPracticeAnalyzer();
|
|
220
|
-
|
|
221
|
-
before(async () => {
|
|
222
|
-
client = await connect('./aegis.config.docs-only.json');
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
after(async () => {
|
|
226
|
-
if (client?.connected) {
|
|
227
|
-
await client.disconnect();
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
beforeEach(() => {
|
|
232
|
-
client.clearAllBuffers();
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
describe('Protocol Compliance', () => {
|
|
236
|
-
test('should be properly connected to MCP server', async () => {
|
|
237
|
-
assert.ok(client.connected, 'Client should be connected');
|
|
238
|
-
});
|
|
239
|
-
|
|
240
|
-
test('should have get_available_best_practice_guides tool available', async () => {
|
|
241
|
-
const tools = await client.listTools();
|
|
242
|
-
const guidesTool = tools.find(tool => tool.name === 'get_available_best_practice_guides');
|
|
243
|
-
|
|
244
|
-
assert.ok(guidesTool, 'get_available_best_practice_guides tool should be available');
|
|
245
|
-
assert.equal(guidesTool.name, 'get_available_best_practice_guides');
|
|
246
|
-
assert.ok(guidesTool.description, 'Tool should have description');
|
|
247
|
-
assert.ok(guidesTool.inputSchema, 'Tool should have input schema');
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
test('should have correct tool input schema', async () => {
|
|
251
|
-
const tools = await client.listTools();
|
|
252
|
-
const guidesTool = tools.find(tool => tool.name === 'get_available_best_practice_guides');
|
|
253
|
-
|
|
254
|
-
assert.equal(guidesTool.inputSchema.type, 'object');
|
|
255
|
-
// get_available_best_practice_guides takes no required parameters
|
|
256
|
-
assert.ok(!guidesTool.inputSchema.required || guidesTool.inputSchema.required.length === 0);
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
describe('Basic Functionality', () => {
|
|
261
|
-
test('should execute successfully with empty parameters', async () => {
|
|
262
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
263
|
-
|
|
264
|
-
assertValidMCPResponse(result);
|
|
265
|
-
assert.equal(result.isError, false, 'Should not return error');
|
|
266
|
-
assert.equal(result.content.length, 1, 'Should return single content item');
|
|
267
|
-
assert.equal(result.content[0].type, 'text', 'Content type should be text');
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
test('should return valid JSON array in response', async () => {
|
|
271
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
272
|
-
|
|
273
|
-
assertValidMCPResponse(result);
|
|
274
|
-
const responseText = result.content[0].text;
|
|
275
|
-
|
|
276
|
-
// Should be valid JSON
|
|
277
|
-
let guideArray;
|
|
278
|
-
assert.doesNotThrow(() => {
|
|
279
|
-
guideArray = JSON.parse(responseText);
|
|
280
|
-
}, 'Response should be valid JSON');
|
|
281
|
-
|
|
282
|
-
assert.ok(Array.isArray(guideArray), 'Response should be JSON array');
|
|
283
|
-
assert.ok(guideArray.length > 0, 'Guide array should not be empty');
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
test('should ignore additional parameters gracefully', async () => {
|
|
287
|
-
const result = await client.callTool('get_available_best_practice_guides', {
|
|
288
|
-
unexpectedParam: 'should be ignored',
|
|
289
|
-
anotherParam: 123,
|
|
290
|
-
objectParam: { nested: 'value' }
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
assertValidMCPResponse(result);
|
|
294
|
-
assert.equal(result.isError, false, 'Should handle extra params gracefully');
|
|
295
|
-
|
|
296
|
-
// Result should be identical to empty params call
|
|
297
|
-
const baselineResult = await client.callTool('get_available_best_practice_guides', {});
|
|
298
|
-
assert.equal(result.content[0].text, baselineResult.content[0].text,
|
|
299
|
-
'Result should be identical regardless of extra params');
|
|
300
|
-
});
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
describe('Content Quality and Completeness', () => {
|
|
304
|
-
test('should return comprehensive best practice guide coverage', async () => {
|
|
305
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
306
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
307
|
-
const analysis = bestPracticeAnalyzer.analyzeGuideList(guideArray);
|
|
308
|
-
|
|
309
|
-
// Validate completeness
|
|
310
|
-
const issues = bestPracticeAnalyzer.validateCompleteness(analysis);
|
|
311
|
-
assert.equal(issues.length, 0, `Content issues found: ${issues.join('; ')}`);
|
|
312
|
-
|
|
313
|
-
// Verify substantial guide count
|
|
314
|
-
assert.ok(analysis.totalGuides >= 13,
|
|
315
|
-
`Should have substantial guide count (got ${analysis.totalGuides})`);
|
|
316
|
-
});
|
|
317
|
-
|
|
318
|
-
test('should include all critical best practice guides', async () => {
|
|
319
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
320
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
321
|
-
const analysis = bestPracticeAnalyzer.analyzeGuideList(guideArray);
|
|
322
|
-
|
|
323
|
-
bestPracticeAnalyzer.criticalGuides.forEach(guideName => {
|
|
324
|
-
assert.ok(analysis.foundGuides.has(guideName),
|
|
325
|
-
`Missing critical guide: ${guideName}`);
|
|
326
|
-
});
|
|
327
|
-
|
|
328
|
-
// All critical guides should be found
|
|
329
|
-
assert.equal(analysis.missingCriticalGuides.length, 0,
|
|
330
|
-
`Missing critical guides: ${analysis.missingCriticalGuides.join(', ')}`);
|
|
331
|
-
});
|
|
332
|
-
|
|
333
|
-
test('should have proper guide structure for all guides', async () => {
|
|
334
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
335
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
336
|
-
|
|
337
|
-
guideArray.forEach((guide, index) => {
|
|
338
|
-
// Validate required fields
|
|
339
|
-
bestPracticeAnalyzer.requiredFields.forEach(field => {
|
|
340
|
-
assert.ok(Object.prototype.hasOwnProperty.call(guide, field),
|
|
341
|
-
`Guide ${index} missing field: ${field}`);
|
|
342
|
-
assert.equal(typeof guide[field], 'string',
|
|
343
|
-
`Guide ${index} field ${field} should be string`);
|
|
344
|
-
assert.ok(guide[field].trim().length > 0,
|
|
345
|
-
`Guide ${index} field ${field} should not be empty`);
|
|
346
|
-
});
|
|
347
|
-
|
|
348
|
-
// Validate name format
|
|
349
|
-
assert.ok(/^[a-z][a-z0-9_]*$/.test(guide.name),
|
|
350
|
-
`Guide ${index} has invalid name format: ${guide.name}`);
|
|
351
|
-
|
|
352
|
-
// Validate title contains "Best Practices"
|
|
353
|
-
assert.ok(guide.title.includes('Best Practices'),
|
|
354
|
-
`Guide ${index} title should contain "Best Practices": ${guide.title}`);
|
|
355
|
-
|
|
356
|
-
// Validate description length
|
|
357
|
-
assert.ok(guide.description.length >= 20,
|
|
358
|
-
`Guide ${index} description too short: ${guide.description}`);
|
|
359
|
-
});
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
test('should cover all major SFCC development areas', async () => {
|
|
363
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
364
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
365
|
-
const analysis = bestPracticeAnalyzer.analyzeGuideList(guideArray);
|
|
366
|
-
|
|
367
|
-
// Check each category has coverage
|
|
368
|
-
Object.entries(bestPracticeAnalyzer.guideCategories).forEach(([category, expectedGuides]) => {
|
|
369
|
-
const foundInCategory = analysis.guidesByCategory[category] || [];
|
|
370
|
-
assert.ok(foundInCategory.length > 0,
|
|
371
|
-
`Category ${category} should have at least one guide`);
|
|
372
|
-
|
|
373
|
-
// Check that most expected guides in category are present
|
|
374
|
-
const coverageRatio = foundInCategory.length / expectedGuides.length;
|
|
375
|
-
assert.ok(coverageRatio >= 0.5,
|
|
376
|
-
`Category ${category} should have good coverage (${foundInCategory.length}/${expectedGuides.length})`);
|
|
377
|
-
});
|
|
378
|
-
});
|
|
379
|
-
|
|
380
|
-
test('should not have duplicate or invalid guides', async () => {
|
|
381
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
382
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
383
|
-
const analysis = bestPracticeAnalyzer.analyzeGuideList(guideArray);
|
|
384
|
-
|
|
385
|
-
assert.equal(analysis.duplicates.length, 0,
|
|
386
|
-
`Found duplicate guides: ${analysis.duplicates.join(', ')}`);
|
|
387
|
-
|
|
388
|
-
assert.equal(analysis.invalidGuides.length, 0,
|
|
389
|
-
`Found invalid guides: ${analysis.invalidGuides.length}`);
|
|
390
|
-
|
|
391
|
-
assert.equal(analysis.validationErrors.length, 0,
|
|
392
|
-
`Validation errors: ${analysis.validationErrors.join('; ')}`);
|
|
393
|
-
});
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
describe('Content Validation', () => {
|
|
397
|
-
test('should include expected core guides', async () => {
|
|
398
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
399
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
400
|
-
const guideNames = guideArray.map(guide => guide.name);
|
|
401
|
-
|
|
402
|
-
// Check specific expected guides
|
|
403
|
-
const expectedCoreGuides = [
|
|
404
|
-
'cartridge_creation',
|
|
405
|
-
'sfra_controllers',
|
|
406
|
-
'sfra_models',
|
|
407
|
-
'sfra_client_side_js',
|
|
408
|
-
'sfra_scss',
|
|
409
|
-
'ocapi_hooks',
|
|
410
|
-
'scapi_hooks',
|
|
411
|
-
'security',
|
|
412
|
-
'performance'
|
|
413
|
-
];
|
|
414
|
-
|
|
415
|
-
expectedCoreGuides.forEach(guideName => {
|
|
416
|
-
assert.ok(guideNames.includes(guideName),
|
|
417
|
-
`Should include core guide: ${guideName}`);
|
|
418
|
-
});
|
|
419
|
-
});
|
|
420
|
-
|
|
421
|
-
test('should have meaningful guide descriptions', async () => {
|
|
422
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
423
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
424
|
-
|
|
425
|
-
guideArray.forEach(guide => {
|
|
426
|
-
// Description should be substantial
|
|
427
|
-
assert.ok(guide.description.length >= 50,
|
|
428
|
-
`Guide ${guide.name} description should be substantial: ${guide.description.length} chars`);
|
|
429
|
-
|
|
430
|
-
// Description should be related to the guide name
|
|
431
|
-
const nameWords = guide.name.split('_');
|
|
432
|
-
const hasRelatedContent = nameWords.some(word =>
|
|
433
|
-
guide.description.toLowerCase().includes(word.toLowerCase())
|
|
434
|
-
);
|
|
435
|
-
assert.ok(hasRelatedContent || guide.description.toLowerCase().includes('sfcc') ||
|
|
436
|
-
guide.description.toLowerCase().includes('commerce'),
|
|
437
|
-
`Guide ${guide.name} description should be related to guide name or SFCC`);
|
|
438
|
-
});
|
|
439
|
-
});
|
|
440
|
-
|
|
441
|
-
test('should provide guides for different skill levels', async () => {
|
|
442
|
-
const result = await client.callTool('get_available_best_practice_guides', {});
|
|
443
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
444
|
-
|
|
445
|
-
// Should have guides for beginners (cartridge creation)
|
|
446
|
-
const beginnerGuides = guideArray.filter(guide =>
|
|
447
|
-
guide.name.includes('cartridge') ||
|
|
448
|
-
guide.description.toLowerCase().includes('introduction') ||
|
|
449
|
-
guide.description.toLowerCase().includes('getting started')
|
|
450
|
-
);
|
|
451
|
-
|
|
452
|
-
// Should have advanced guides (security, performance)
|
|
453
|
-
const advancedGuides = guideArray.filter(guide =>
|
|
454
|
-
guide.name.includes('security') ||
|
|
455
|
-
guide.name.includes('performance') ||
|
|
456
|
-
guide.description.toLowerCase().includes('advanced') ||
|
|
457
|
-
guide.description.toLowerCase().includes('optimization')
|
|
458
|
-
);
|
|
459
|
-
|
|
460
|
-
assert.ok(beginnerGuides.length > 0, 'Should have guides for beginners');
|
|
461
|
-
assert.ok(advancedGuides.length > 0, 'Should have guides for advanced users');
|
|
462
|
-
});
|
|
463
|
-
});
|
|
464
|
-
|
|
465
|
-
describe('Error Handling and Edge Cases', () => {
|
|
466
|
-
test('should handle malformed parameters gracefully', async () => {
|
|
467
|
-
// Test with various edge case parameters that are still valid objects
|
|
468
|
-
const edgeCases = [
|
|
469
|
-
{}, // Empty object (valid)
|
|
470
|
-
{ malformed: 'data' },
|
|
471
|
-
{ nested: { deeply: { malformed: 'data' } } },
|
|
472
|
-
{ randomField: null },
|
|
473
|
-
{ arrayField: [1, 2, 3] },
|
|
474
|
-
{ booleanField: true }
|
|
475
|
-
];
|
|
476
|
-
|
|
477
|
-
for (const params of edgeCases) {
|
|
478
|
-
const result = await client.callTool('get_available_best_practice_guides', params);
|
|
479
|
-
|
|
480
|
-
assertValidMCPResponse(result);
|
|
481
|
-
assert.equal(result.isError, false,
|
|
482
|
-
`Should handle edge case gracefully: ${JSON.stringify(params)}`);
|
|
483
|
-
|
|
484
|
-
// Result should still be valid
|
|
485
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
486
|
-
assert.ok(Array.isArray(guideArray), 'Should still return valid array');
|
|
487
|
-
assert.ok(guideArray.length > 0, 'Should still return guides');
|
|
488
|
-
}
|
|
489
|
-
});
|
|
490
|
-
|
|
491
|
-
test('should maintain functionality under rapid consecutive calls', async () => {
|
|
492
|
-
const rapidCalls = 10;
|
|
493
|
-
const promises = Array.from({ length: rapidCalls }, () =>
|
|
494
|
-
client.callTool('get_available_best_practice_guides', {})
|
|
495
|
-
);
|
|
496
|
-
|
|
497
|
-
const results = await Promise.all(promises);
|
|
498
|
-
|
|
499
|
-
results.forEach((result, index) => {
|
|
500
|
-
assertValidMCPResponse(result);
|
|
501
|
-
assert.equal(result.isError, false, `Rapid call ${index} should succeed`);
|
|
502
|
-
|
|
503
|
-
const guideArray = JSON.parse(result.content[0].text);
|
|
504
|
-
assert.ok(Array.isArray(guideArray), `Rapid call ${index} should return array`);
|
|
505
|
-
assert.ok(guideArray.length > 0, `Rapid call ${index} should return guides`);
|
|
506
|
-
});
|
|
507
|
-
|
|
508
|
-
// All results should be identical
|
|
509
|
-
const firstResponse = results[0].content[0].text;
|
|
510
|
-
results.forEach((result, index) => {
|
|
511
|
-
assert.equal(result.content[0].text, firstResponse,
|
|
512
|
-
`Rapid call ${index} result should be identical`);
|
|
513
|
-
});
|
|
514
|
-
});
|
|
515
|
-
});
|
|
516
|
-
});
|