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,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Programmatic tests for the MCP tool: get_isml_elements_by_category
|
|
3
|
+
* Mirrors YAML tests but adds deeper JSON parsing & resilience checks.
|
|
4
|
+
*
|
|
5
|
+
* Validates:
|
|
6
|
+
* 1. Tool is registered
|
|
7
|
+
* 2. Successful retrieval for all categories (control-flow, output, includes, scripting, cache, decorators, payment, analytics, special)
|
|
8
|
+
* 3. Category filtering accuracy
|
|
9
|
+
* 4. Element structure validation
|
|
10
|
+
* 5. Error handling for invalid/missing category
|
|
11
|
+
* 6. Category exclusivity (no cross-contamination)
|
|
12
|
+
* 7. Response stability and determinism
|
|
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
|
+
describe('get_isml_elements_by_category (programmatic)', () => {
|
|
20
|
+
let client;
|
|
21
|
+
const CONFIG = './aegis.config.docs-only.json';
|
|
22
|
+
|
|
23
|
+
before(async () => {
|
|
24
|
+
client = await connect(CONFIG);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
after(async () => {
|
|
28
|
+
if (client?.connected) {
|
|
29
|
+
await client.disconnect();
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
beforeEach(() => {
|
|
34
|
+
client.clearAllBuffers();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const TOOL_NAME = 'get_isml_elements_by_category';
|
|
38
|
+
const ELEMENT_KEYS = ['name', 'title', 'description', 'category', 'filename'];
|
|
39
|
+
const ALL_CATEGORIES = [
|
|
40
|
+
'control-flow',
|
|
41
|
+
'output',
|
|
42
|
+
'includes',
|
|
43
|
+
'scripting',
|
|
44
|
+
'cache',
|
|
45
|
+
'decorators',
|
|
46
|
+
'payment',
|
|
47
|
+
'analytics',
|
|
48
|
+
'special'
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
test('tool should be registered', async () => {
|
|
52
|
+
const tools = await client.listTools();
|
|
53
|
+
const names = tools.map(t => t.name);
|
|
54
|
+
assert.ok(names.includes(TOOL_NAME), 'Tool not found in listTools');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
async function invoke(category, options = {}) {
|
|
58
|
+
const result = await client.callTool(TOOL_NAME, { category, ...options });
|
|
59
|
+
return { result, raw: result.content[0]?.text };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function safeParseElements(raw) {
|
|
63
|
+
let elements;
|
|
64
|
+
try {
|
|
65
|
+
elements = JSON.parse(raw);
|
|
66
|
+
} catch (err) {
|
|
67
|
+
assert.fail(`Failed to parse response as JSON: ${err.message}\nRaw: ${raw.substring(0, 500)}`);
|
|
68
|
+
}
|
|
69
|
+
assert.ok(Array.isArray(elements), 'Parsed elements should be array');
|
|
70
|
+
return elements;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
test('retrieve control-flow elements', async () => {
|
|
74
|
+
const { result, raw } = await invoke('control-flow');
|
|
75
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
76
|
+
|
|
77
|
+
const elements = safeParseElements(raw);
|
|
78
|
+
assert.ok(elements.length > 0, 'Should have control-flow elements');
|
|
79
|
+
|
|
80
|
+
// Check known control-flow elements
|
|
81
|
+
const names = elements.map(el => el.name);
|
|
82
|
+
assert.ok(names.includes('isif'), 'Should include isif');
|
|
83
|
+
assert.ok(names.includes('isloop'), 'Should include isloop');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test('only return control-flow category elements', async () => {
|
|
87
|
+
const { raw } = await invoke('control-flow');
|
|
88
|
+
const elements = safeParseElements(raw);
|
|
89
|
+
|
|
90
|
+
for (const el of elements) {
|
|
91
|
+
assert.equal(el.category, 'control-flow', 'All elements should be control-flow category');
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test('retrieve output elements', async () => {
|
|
96
|
+
const { result, raw } = await invoke('output');
|
|
97
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
98
|
+
|
|
99
|
+
const elements = safeParseElements(raw);
|
|
100
|
+
assert.ok(elements.length > 0, 'Should have output elements');
|
|
101
|
+
|
|
102
|
+
const names = elements.map(el => el.name);
|
|
103
|
+
assert.ok(names.includes('isprint'), 'Should include isprint');
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test('retrieve includes and components elements', async () => {
|
|
107
|
+
const { result, raw } = await invoke('includes');
|
|
108
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
109
|
+
|
|
110
|
+
const elements = safeParseElements(raw);
|
|
111
|
+
assert.ok(elements.length > 0, 'Should have includes elements');
|
|
112
|
+
|
|
113
|
+
const names = elements.map(el => el.name);
|
|
114
|
+
assert.ok(names.includes('isinclude'), 'Should include isinclude');
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('retrieve scripting elements', async () => {
|
|
118
|
+
const { result, raw } = await invoke('scripting');
|
|
119
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
120
|
+
|
|
121
|
+
const elements = safeParseElements(raw);
|
|
122
|
+
assert.ok(elements.length > 0, 'Should have scripting elements');
|
|
123
|
+
|
|
124
|
+
const names = elements.map(el => el.name);
|
|
125
|
+
assert.ok(names.includes('isscript'), 'Should include isscript');
|
|
126
|
+
assert.ok(names.includes('isset'), 'Should include isset');
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test('retrieve cache elements', async () => {
|
|
130
|
+
const { result, raw } = await invoke('cache');
|
|
131
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
132
|
+
|
|
133
|
+
const elements = safeParseElements(raw);
|
|
134
|
+
assert.ok(elements.length > 0, 'Should have cache elements');
|
|
135
|
+
|
|
136
|
+
const names = elements.map(el => el.name);
|
|
137
|
+
assert.ok(names.includes('iscache'), 'Should include iscache');
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
test('retrieve decorator elements', async () => {
|
|
141
|
+
const { result, raw } = await invoke('decorators');
|
|
142
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
143
|
+
|
|
144
|
+
const elements = safeParseElements(raw);
|
|
145
|
+
assert.ok(elements.length > 0, 'Should have decorator elements');
|
|
146
|
+
|
|
147
|
+
const names = elements.map(el => el.name);
|
|
148
|
+
assert.ok(names.includes('isdecorate'), 'Should include isdecorate');
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
test('retrieve payment elements', async () => {
|
|
152
|
+
const { result, raw } = await invoke('payment');
|
|
153
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
154
|
+
|
|
155
|
+
const elements = safeParseElements(raw);
|
|
156
|
+
assert.ok(elements.length > 0, 'Should have payment elements');
|
|
157
|
+
|
|
158
|
+
// Should include payment-related elements
|
|
159
|
+
assert.ok(elements.every(el => el.category === 'payment'), 'All should be payment category');
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test('retrieve analytics elements', async () => {
|
|
163
|
+
const { result, raw } = await invoke('analytics');
|
|
164
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
165
|
+
|
|
166
|
+
const elements = safeParseElements(raw);
|
|
167
|
+
assert.ok(elements.length > 0, 'Should have analytics elements');
|
|
168
|
+
|
|
169
|
+
assert.ok(elements.every(el => el.category === 'analytics'), 'All should be analytics category');
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
test('retrieve special elements', async () => {
|
|
173
|
+
const { result, raw } = await invoke('special');
|
|
174
|
+
assert.equal(result.isError, false, 'Should not be error');
|
|
175
|
+
|
|
176
|
+
const elements = safeParseElements(raw);
|
|
177
|
+
assert.ok(elements.length > 0, 'Should have special elements');
|
|
178
|
+
|
|
179
|
+
const names = elements.map(el => el.name);
|
|
180
|
+
assert.ok(names.includes('isredirect'), 'Should include isredirect');
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
test('all categories return valid element structures', async () => {
|
|
184
|
+
for (const category of ALL_CATEGORIES.slice(0, 5)) {
|
|
185
|
+
const { raw } = await invoke(category);
|
|
186
|
+
const elements = safeParseElements(raw);
|
|
187
|
+
|
|
188
|
+
for (const el of elements.slice(0, 5)) {
|
|
189
|
+
for (const key of ELEMENT_KEYS) {
|
|
190
|
+
assert.ok(Object.prototype.hasOwnProperty.call(el, key), `Element should have ${key} in ${category}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
test('category filtering is exclusive (no cross-contamination)', async () => {
|
|
197
|
+
for (const category of ALL_CATEGORIES.slice(0, 5)) {
|
|
198
|
+
const { raw } = await invoke(category);
|
|
199
|
+
const elements = safeParseElements(raw);
|
|
200
|
+
|
|
201
|
+
for (const el of elements) {
|
|
202
|
+
assert.equal(el.category, category, `Element ${el.name} should be ${category}, got ${el.category}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
test('error for missing category parameter', async () => {
|
|
208
|
+
const result = await client.callTool(TOOL_NAME, {});
|
|
209
|
+
assert.equal(result.isError, true, 'Should be error for missing category');
|
|
210
|
+
assert.match(result.content[0].text, /category/i, 'Error should mention category');
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
test('error for invalid category', async () => {
|
|
214
|
+
const { result } = await invoke('invalid-category');
|
|
215
|
+
// Tool may return empty array or error - both are acceptable
|
|
216
|
+
if (result.isError) {
|
|
217
|
+
assert.ok(result.content[0].text.includes('not found') || result.content[0].text.includes('invalid'), 'Error should mention invalid category');
|
|
218
|
+
} else {
|
|
219
|
+
// If no error, should return empty array
|
|
220
|
+
const elements = safeParseElements(result.content[0].text);
|
|
221
|
+
assert.equal(elements.length, 0, 'Should return empty array for invalid category');
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
test('element count consistency with get_isml_categories', async () => {
|
|
226
|
+
// Get category metadata
|
|
227
|
+
const catResult = await client.callTool('get_isml_categories', {});
|
|
228
|
+
const categories = JSON.parse(catResult.content[0].text);
|
|
229
|
+
|
|
230
|
+
// Check element counts match
|
|
231
|
+
for (const cat of categories.slice(0, 5)) {
|
|
232
|
+
const { raw } = await invoke(cat.name);
|
|
233
|
+
const elements = safeParseElements(raw);
|
|
234
|
+
assert.equal(elements.length, cat.count, `${cat.name} element count should match metadata: expected ${cat.count}, got ${elements.length}`);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
test('filename pattern validation', async () => {
|
|
239
|
+
const { raw } = await invoke('control-flow');
|
|
240
|
+
const elements = safeParseElements(raw);
|
|
241
|
+
|
|
242
|
+
for (const el of elements) {
|
|
243
|
+
assert.match(el.filename, /^[a-z0-9-]+\.md$/, 'Filename should be kebab-case .md');
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
test('no empty or placeholder names', async () => {
|
|
248
|
+
for (const category of ALL_CATEGORIES.slice(0, 5)) {
|
|
249
|
+
const { raw } = await invoke(category);
|
|
250
|
+
const elements = safeParseElements(raw);
|
|
251
|
+
|
|
252
|
+
for (const el of elements) {
|
|
253
|
+
assert.ok(el.name && el.name.trim().length > 0, `Name should not be empty in ${category}`);
|
|
254
|
+
assert.ok(!el.name.toLowerCase().includes('placeholder'), `Name should not be placeholder: ${el.name}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
test('round-trip JSON parse reproducibility', async () => {
|
|
260
|
+
const { raw } = await invoke('control-flow');
|
|
261
|
+
const elements = safeParseElements(raw);
|
|
262
|
+
const roundTrip = JSON.parse(JSON.stringify(elements));
|
|
263
|
+
assert.deepEqual(roundTrip, elements, 'Round trip serialization must preserve elements');
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
test('deterministic ordering (two calls produce identical results)', async () => {
|
|
267
|
+
const first = safeParseElements((await invoke('control-flow')).raw).map(el => el.name);
|
|
268
|
+
const second = safeParseElements((await invoke('control-flow')).raw).map(el => el.name);
|
|
269
|
+
assert.deepEqual(second, first, 'Element order should be stable across calls');
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
test('element name uniqueness within category', async () => {
|
|
273
|
+
for (const category of ALL_CATEGORIES.slice(0, 5)) {
|
|
274
|
+
const { raw } = await invoke(category);
|
|
275
|
+
const elements = safeParseElements(raw);
|
|
276
|
+
const names = elements.map(el => el.name);
|
|
277
|
+
const nameSet = new Set(names);
|
|
278
|
+
assert.equal(nameSet.size, names.length, `Element names must be unique in ${category}`);
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
test('description quality (min 50 chars)', async () => {
|
|
283
|
+
const { raw } = await invoke('control-flow');
|
|
284
|
+
const elements = safeParseElements(raw);
|
|
285
|
+
|
|
286
|
+
for (const el of elements) {
|
|
287
|
+
assert.ok(el.description.length >= 50, `Description too short for ${el.name}: ${el.description.length} chars`);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
test('title quality (reasonable length)', async () => {
|
|
292
|
+
const { raw } = await invoke('control-flow');
|
|
293
|
+
const elements = safeParseElements(raw);
|
|
294
|
+
|
|
295
|
+
for (const el of elements) {
|
|
296
|
+
assert.ok(el.title.length >= 10, `Title too short for ${el.name}`);
|
|
297
|
+
assert.ok(el.title.length <= 100, `Title too long for ${el.name}`);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
test('negative path: invalid method should return JSON-RPC error', async () => {
|
|
302
|
+
const response = await client.sendMessage({
|
|
303
|
+
jsonrpc: '2.0',
|
|
304
|
+
id: 'bad-method-1',
|
|
305
|
+
method: 'tools/call_WRONG',
|
|
306
|
+
params: { name: TOOL_NAME, arguments: { category: 'control-flow' } }
|
|
307
|
+
});
|
|
308
|
+
assert.ok(response.error, 'Expected JSON-RPC error object');
|
|
309
|
+
assert.match(response.error.message || '', /method/i, 'Error message should mention method');
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
test('performance: response time under 1000ms', async () => {
|
|
313
|
+
const start = Date.now();
|
|
314
|
+
await invoke('control-flow');
|
|
315
|
+
const duration = Date.now() - start;
|
|
316
|
+
assert.ok(duration < 1000, `Response should be under 1000ms, got ${duration}ms`);
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
test('extraneous parameters are ignored', async () => {
|
|
320
|
+
const { result, raw } = await invoke('control-flow', { unused: 'value', extra: 123 });
|
|
321
|
+
assert.equal(result.isError, false, 'Should ignore extraneous params');
|
|
322
|
+
const elements = safeParseElements(raw);
|
|
323
|
+
assert.ok(elements.length > 0, 'Should still return elements');
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
test('alphabetical sorting within category', async () => {
|
|
327
|
+
const { raw } = await invoke('control-flow');
|
|
328
|
+
const elements = safeParseElements(raw);
|
|
329
|
+
const names = elements.map(el => el.name);
|
|
330
|
+
const sorted = [...names].sort();
|
|
331
|
+
assert.deepEqual(names, sorted, 'Elements should be alphabetically sorted');
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
test('case insensitive category lookup', async () => {
|
|
335
|
+
const { result, raw } = await invoke('Control-Flow');
|
|
336
|
+
// May work with case insensitivity or return empty/error - both acceptable
|
|
337
|
+
if (!result.isError) {
|
|
338
|
+
const elements = safeParseElements(raw);
|
|
339
|
+
// If it works, should return control-flow elements
|
|
340
|
+
if (elements.length > 0) {
|
|
341
|
+
assert.ok(elements.every(el => el.category === 'control-flow'), 'Should normalize to control-flow');
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// Test passes if either case-insensitive or returns graceful empty/error
|
|
345
|
+
assert.ok(true, 'Case handling tested');
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
test('all categories have at least one element', async () => {
|
|
349
|
+
for (const category of ALL_CATEGORIES) {
|
|
350
|
+
const { raw } = await invoke(category);
|
|
351
|
+
const elements = safeParseElements(raw);
|
|
352
|
+
assert.ok(elements.length > 0, `Category ${category} should have at least one element`);
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
test('no category has more than 10 elements', async () => {
|
|
357
|
+
for (const category of ALL_CATEGORIES) {
|
|
358
|
+
const { raw } = await invoke(category);
|
|
359
|
+
const elements = safeParseElements(raw);
|
|
360
|
+
assert.ok(elements.length <= 10, `Category ${category} should have at most 10 elements, got ${elements.length}`);
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
});
|
|
@@ -72,7 +72,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
72
72
|
const result = await client.callTool('get_sfra_categories', {});
|
|
73
73
|
|
|
74
74
|
const categories = JSON.parse(result.content[0].text);
|
|
75
|
-
const categoryNames = categories.map(cat => cat.
|
|
75
|
+
const categoryNames = categories.map(cat => cat.name).sort();
|
|
76
76
|
const expectedNames = ['core', 'customer', 'order', 'other', 'pricing', 'product', 'store'];
|
|
77
77
|
|
|
78
78
|
assert.deepEqual(categoryNames, expectedNames, 'Should have all expected category names');
|
|
@@ -83,8 +83,8 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
83
83
|
|
|
84
84
|
const categories = JSON.parse(result.content[0].text);
|
|
85
85
|
categories.forEach((category, index) => {
|
|
86
|
-
assert.ok(category.
|
|
87
|
-
assert.ok(typeof category.
|
|
86
|
+
assert.ok(category.name, `Category ${index} should have category field`);
|
|
87
|
+
assert.ok(typeof category.name === 'string', `Category ${index} name should be string`);
|
|
88
88
|
assert.ok(typeof category.count === 'number', `Category ${index} count should be number`);
|
|
89
89
|
assert.ok(category.count > 0, `Category ${index} count should be positive`);
|
|
90
90
|
assert.ok(category.description, `Category ${index} should have description`);
|
|
@@ -99,7 +99,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
99
99
|
const result = await client.callTool('get_sfra_categories', {});
|
|
100
100
|
|
|
101
101
|
const categories = JSON.parse(result.content[0].text);
|
|
102
|
-
const coreCategory = categories.find(cat => cat.
|
|
102
|
+
const coreCategory = categories.find(cat => cat.name === 'core');
|
|
103
103
|
|
|
104
104
|
assert.ok(coreCategory, 'Should have core category');
|
|
105
105
|
assert.equal(coreCategory.count, 5, 'Core category should have 5 documents');
|
|
@@ -113,7 +113,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
113
113
|
const result = await client.callTool('get_sfra_categories', {});
|
|
114
114
|
|
|
115
115
|
const categories = JSON.parse(result.content[0].text);
|
|
116
|
-
const customerCategory = categories.find(cat => cat.
|
|
116
|
+
const customerCategory = categories.find(cat => cat.name === 'customer');
|
|
117
117
|
|
|
118
118
|
assert.ok(customerCategory, 'Should have customer category');
|
|
119
119
|
assert.equal(customerCategory.count, 2, 'Customer category should have 2 documents');
|
|
@@ -125,7 +125,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
125
125
|
const result = await client.callTool('get_sfra_categories', {});
|
|
126
126
|
|
|
127
127
|
const categories = JSON.parse(result.content[0].text);
|
|
128
|
-
const orderCategory = categories.find(cat => cat.
|
|
128
|
+
const orderCategory = categories.find(cat => cat.name === 'order');
|
|
129
129
|
|
|
130
130
|
assert.ok(orderCategory, 'Should have order category');
|
|
131
131
|
assert.equal(orderCategory.count, 6, 'Order category should have 6 documents');
|
|
@@ -139,7 +139,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
139
139
|
const result = await client.callTool('get_sfra_categories', {});
|
|
140
140
|
|
|
141
141
|
const categories = JSON.parse(result.content[0].text);
|
|
142
|
-
const productCategory = categories.find(cat => cat.
|
|
142
|
+
const productCategory = categories.find(cat => cat.name === 'product');
|
|
143
143
|
|
|
144
144
|
assert.ok(productCategory, 'Should have product category');
|
|
145
145
|
assert.equal(productCategory.count, 5, 'Product category should have 5 documents');
|
|
@@ -151,7 +151,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
151
151
|
const result = await client.callTool('get_sfra_categories', {});
|
|
152
152
|
|
|
153
153
|
const categories = JSON.parse(result.content[0].text);
|
|
154
|
-
const pricingCategory = categories.find(cat => cat.
|
|
154
|
+
const pricingCategory = categories.find(cat => cat.name === 'pricing');
|
|
155
155
|
|
|
156
156
|
assert.ok(pricingCategory, 'Should have pricing category');
|
|
157
157
|
assert.equal(pricingCategory.count, 3, 'Pricing category should have 3 documents');
|
|
@@ -163,7 +163,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
163
163
|
const result = await client.callTool('get_sfra_categories', {});
|
|
164
164
|
|
|
165
165
|
const categories = JSON.parse(result.content[0].text);
|
|
166
|
-
const storeCategory = categories.find(cat => cat.
|
|
166
|
+
const storeCategory = categories.find(cat => cat.name === 'store');
|
|
167
167
|
|
|
168
168
|
assert.ok(storeCategory, 'Should have store category');
|
|
169
169
|
assert.equal(storeCategory.count, 2, 'Store category should have 2 documents');
|
|
@@ -175,7 +175,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
175
175
|
const result = await client.callTool('get_sfra_categories', {});
|
|
176
176
|
|
|
177
177
|
const categories = JSON.parse(result.content[0].text);
|
|
178
|
-
const otherCategory = categories.find(cat => cat.
|
|
178
|
+
const otherCategory = categories.find(cat => cat.name === 'other');
|
|
179
179
|
|
|
180
180
|
assert.ok(otherCategory, 'Should have other category');
|
|
181
181
|
assert.equal(otherCategory.count, 3, 'Other category should have 3 documents');
|
|
@@ -201,7 +201,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
201
201
|
const categories = JSON.parse(result.content[0].text);
|
|
202
202
|
const countMap = {};
|
|
203
203
|
categories.forEach(cat => {
|
|
204
|
-
countMap[cat.
|
|
204
|
+
countMap[cat.name] = cat.count;
|
|
205
205
|
});
|
|
206
206
|
|
|
207
207
|
assert.equal(countMap.core, 5, 'Core should have 5 documents');
|
|
@@ -263,7 +263,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
263
263
|
assert.ok(responseText.includes('}'), 'Response should contain complete objects');
|
|
264
264
|
|
|
265
265
|
// Should have proper field formatting
|
|
266
|
-
assert.ok(responseText.includes('"
|
|
266
|
+
assert.ok(responseText.includes('"name":'), 'Should have category fields');
|
|
267
267
|
assert.ok(responseText.includes('"count":'), 'Should have count fields');
|
|
268
268
|
assert.ok(responseText.includes('"description":'), 'Should have description fields');
|
|
269
269
|
});
|
|
@@ -272,7 +272,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
272
272
|
const result = await client.callTool('get_sfra_categories', {});
|
|
273
273
|
|
|
274
274
|
const categories = JSON.parse(result.content[0].text);
|
|
275
|
-
const categoryNames = categories.map(cat => cat.
|
|
275
|
+
const categoryNames = categories.map(cat => cat.name);
|
|
276
276
|
const sortedNames = [...categoryNames].sort();
|
|
277
277
|
|
|
278
278
|
assert.deepEqual(categoryNames, sortedNames, 'Categories should be alphabetically sorted');
|
|
@@ -284,11 +284,11 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
284
284
|
const categories = JSON.parse(result.content[0].text);
|
|
285
285
|
|
|
286
286
|
categories.forEach(category => {
|
|
287
|
-
assert.ok(category.description.length >= 20, `Description for ${category.
|
|
287
|
+
assert.ok(category.description.length >= 20, `Description for ${category.name} should be substantial`);
|
|
288
288
|
assert.ok(category.description.includes('models') || category.description.includes('classes') || category.description.includes('utilities'),
|
|
289
|
-
`Description for ${category.
|
|
290
|
-
assert.ok(/^[A-Z]/.test(category.description), `Description for ${category.
|
|
291
|
-
assert.ok(!category.description.endsWith('.'), `Description for ${category.
|
|
289
|
+
`Description for ${category.name} should mention relevant concepts`);
|
|
290
|
+
assert.ok(/^[A-Z]/.test(category.description), `Description for ${category.name} should start with capital letter`);
|
|
291
|
+
assert.ok(!category.description.endsWith('.'), `Description for ${category.name} should not end with period`);
|
|
292
292
|
});
|
|
293
293
|
});
|
|
294
294
|
|
|
@@ -298,9 +298,9 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
298
298
|
const categories = JSON.parse(result.content[0].text);
|
|
299
299
|
|
|
300
300
|
categories.forEach(category => {
|
|
301
|
-
assert.ok(category.count >= 1, `Count for ${category.
|
|
302
|
-
assert.ok(category.count <= 10, `Count for ${category.
|
|
303
|
-
assert.ok(Number.isInteger(category.count), `Count for ${category.
|
|
301
|
+
assert.ok(category.count >= 1, `Count for ${category.name} should be at least 1`);
|
|
302
|
+
assert.ok(category.count <= 10, `Count for ${category.name} should be reasonable (≤10)`);
|
|
303
|
+
assert.ok(Number.isInteger(category.count), `Count for ${category.name} should be an integer`);
|
|
304
304
|
});
|
|
305
305
|
});
|
|
306
306
|
});
|
|
@@ -310,7 +310,7 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
310
310
|
const result = await client.callTool('get_sfra_categories', {});
|
|
311
311
|
|
|
312
312
|
const categories = JSON.parse(result.content[0].text);
|
|
313
|
-
const categoryNames = categories.map(cat => cat.
|
|
313
|
+
const categoryNames = categories.map(cat => cat.name);
|
|
314
314
|
|
|
315
315
|
// These categories should be usable with get_sfra_documents_by_category
|
|
316
316
|
const expectedCategoriesForFiltering = ['core', 'product', 'order', 'customer', 'pricing', 'store', 'other'];
|
|
@@ -326,9 +326,9 @@ describe('SFCC Dev MCP - get_sfra_categories Tool (docs-only mode)', () => {
|
|
|
326
326
|
const categories = JSON.parse(result.content[0].text);
|
|
327
327
|
|
|
328
328
|
// Check that categories align with known SFRA functional areas
|
|
329
|
-
const coreCategory = categories.find(cat => cat.
|
|
330
|
-
const productCategory = categories.find(cat => cat.
|
|
331
|
-
const orderCategory = categories.find(cat => cat.
|
|
329
|
+
const coreCategory = categories.find(cat => cat.name === 'core');
|
|
330
|
+
const productCategory = categories.find(cat => cat.name === 'product');
|
|
331
|
+
const orderCategory = categories.find(cat => cat.name === 'order');
|
|
332
332
|
|
|
333
333
|
assert.ok(coreCategory && coreCategory.count > 0, 'Should have core SFRA functionality');
|
|
334
334
|
assert.ok(productCategory && productCategory.count > 0, 'Should have product functionality');
|
|
@@ -249,8 +249,10 @@ describe('get_sfra_document Tool - Programmatic Tests', () => {
|
|
|
249
249
|
test('should provide comprehensive documentation content', async () => {
|
|
250
250
|
const qualityChecks = [
|
|
251
251
|
{ doc: 'server', minSections: 10, minContentLength: 5000, requiredSections: ['Method Summary', 'Method Detail', 'Usage Examples'] },
|
|
252
|
-
|
|
253
|
-
{ doc: '
|
|
252
|
+
// Note: request.md has 7 ## sections (Inheritance Hierarchy, Description, Properties, Constructor Summary, Method Summary, Method Detail, Property Details)
|
|
253
|
+
{ doc: 'request', minSections: 7, minContentLength: 4000, requiredSections: ['Properties', 'Constructor Summary', 'Property Details'] },
|
|
254
|
+
// Note: response.md has 7 ## sections
|
|
255
|
+
{ doc: 'response', minSections: 7, minContentLength: 4000, requiredSections: ['Method Summary', 'Properties'] }
|
|
254
256
|
];
|
|
255
257
|
|
|
256
258
|
for (const { doc, minSections, minContentLength, requiredSections } of qualityChecks) {
|